{"version":3,"sources":["webpack:///main.9eed7cff0eeb3c1acabc.bundle.js","webpack:////opt/gitlab/embedded/service/gitlab-rails/node_modules/autosize/dist/autosize.js","webpack:////opt/gitlab/embedded/service/gitlab-rails/node_modules/clipboard/lib/clipboard-action.js","webpack:////opt/gitlab/embedded/service/gitlab-rails/node_modules/clipboard/lib/clipboard.js","webpack:////opt/gitlab/embedded/service/gitlab-rails/node_modules/delegate/src/closest.js","webpack:////opt/gitlab/embedded/service/gitlab-rails/node_modules/delegate/src/delegate.js","webpack:////opt/gitlab/embedded/service/gitlab-rails/node_modules/document-register-element/build/document-register-element.node.js","webpack:////opt/gitlab/embedded/service/gitlab-rails/node_modules/fuzzaldrin-plus/lib/filter.js","webpack:////opt/gitlab/embedded/service/gitlab-rails/node_modules/fuzzaldrin-plus/lib/fuzzaldrin.js","webpack:////opt/gitlab/embedded/service/gitlab-rails/node_modules/fuzzaldrin-plus/lib/matcher.js","webpack:////opt/gitlab/embedded/service/gitlab-rails/node_modules/fuzzaldrin-plus/lib/pathScorer.js","webpack:////opt/gitlab/embedded/service/gitlab-rails/node_modules/fuzzaldrin-plus/lib/query.js","webpack:////opt/gitlab/embedded/service/gitlab-rails/node_modules/fuzzaldrin-plus/lib/scorer.js","webpack:////opt/gitlab/embedded/service/gitlab-rails/node_modules/good-listener/src/is.js","webpack:////opt/gitlab/embedded/service/gitlab-rails/node_modules/good-listener/src/listen.js","webpack:////opt/gitlab/embedded/service/gitlab-rails/node_modules/jed/jed.js","webpack:////opt/gitlab/embedded/service/gitlab-rails/node_modules/js-cookie/src/js.cookie.js","webpack:////opt/gitlab/embedded/service/gitlab-rails/node_modules/mousetrap/mousetrap.js","webpack:////opt/gitlab/embedded/service/gitlab-rails/node_modules/select/src/select.js","webpack:////opt/gitlab/embedded/service/gitlab-rails/node_modules/svg4everybody/dist/svg4everybody.js","webpack:////opt/gitlab/embedded/service/gitlab-rails/node_modules/timeago.js/dist/timeago.min.js","webpack:////opt/gitlab/embedded/service/gitlab-rails/node_modules/tiny-emitter/index.js","webpack:////opt/gitlab/embedded/service/gitlab-rails/node_modules/vue-loader/lib/runtime/component-normalizer.js","webpack:////opt/gitlab/embedded/service/gitlab-rails/vendor/assets/javascripts/date.format.js","webpack:///./api.js","webpack:///./awards_handler.js","webpack:///./behaviors/bind_in_out.js","webpack:///./behaviors/copy_as_gfm.js","webpack:///./behaviors/copy_to_clipboard.js","webpack:///./behaviors/details_behavior.js","webpack:///./emoji/support/is_emoji_unicode_supported.js","webpack:///./emoji/support/unicode_support_map.js","webpack:///./emoji/support/index.js","webpack:///./behaviors/autosize.js","webpack:///./behaviors/gl_emoji.js","webpack:///./behaviors/index.js","webpack:///./behaviors/quick_submit.js","webpack:///./behaviors/requires_input.js","webpack:///./behaviors/toggler_behavior.js","webpack:///./breadcrumb.js","webpack:///./breakpoints.js","webpack:///./confirm_danger_modal.js","webpack:///./contextual_sidebar.js","webpack:///./dispatcher.js","webpack:///./droplab/constants.js","webpack:///./droplab/utils.js","webpack:///./droplab/drop_down.js","webpack:///./droplab/hook.js","webpack:///./droplab/hook_button.js","webpack:///./droplab/hook_input.js","webpack:///./droplab/keyboard.js","webpack:///./droplab/drop_lab.js","webpack:///./feature_highlight/feature_highlight.js","webpack:///./feature_highlight/feature_highlight_helper.js","webpack:///./feature_highlight/feature_highlight_options.js","webpack:///./filtered_search/container.js","webpack:///./filtered_search/dropdown_utils.js","webpack:///./droplab/plugins/filter.js","webpack:///./filtered_search/filtered_search_dropdown.js","webpack:///./filtered_search/dropdown_hint.js","webpack:///./droplab/plugins/ajax.js","webpack:///./filtered_search/dropdown_emoji.js","webpack:///./filtered_search/dropdown_non_user.js","webpack:///./droplab/plugins/ajax_filter.js","webpack:///./filtered_search/dropdown_user.js","webpack:///./filtered_search/filtered_search_dropdown_manager.js","webpack:///./filtered_search/filtered_search_token_keys.js","webpack:///./filtered_search/filtered_search_tokenizer.js","webpack:///./lib/utils/users_cache.js","webpack:///./filtered_search/filtered_search_visual_tokens.js","webpack:///./flash.js","webpack:///./fly_out_nav.js","webpack:///./gfm_auto_complete.js","webpack:///./gl_dropdown.js","webpack:///./gl_field_error.js","webpack:///./gl_field_errors.js","webpack:///./header.js","webpack:///./importer_status.js","webpack:///./layout_nav.js","webpack:///./lazy_loader.js","webpack:///./lib/utils/accessor.js","webpack:///./lib/utils/ajax_cache.js","webpack:///./lib/utils/cache.js","webpack:///./lib/utils/common_utils.js","webpack:///./lib/utils/datetime_utility.js","webpack:///./lib/utils/dom_utils.js","webpack:///./lib/utils/regexp.js","webpack:///./lib/utils/text_utility.js","webpack:///./lib/utils/type_utility.js","webpack:///./lib/utils/url_utility.js","webpack:///./locale/sprintf.js","webpack:///./locale/index.js","webpack:///./logo.js","webpack:///./main.js","webpack:///./milestone_select.js","webpack:///./preview_markdown.js","webpack:///projects_dropdown/components/projects_list_item.vue","webpack:///./projects_dropdown/components/projects_list_item.vue?2a31","webpack:///./projects_dropdown/components/projects_list_item.vue","webpack:///projects_dropdown/components/projects_list_frequent.vue","webpack:///./projects_dropdown/components/projects_list_frequent.vue?9a7b","webpack:///./projects_dropdown/components/projects_list_frequent.vue","webpack:///projects_dropdown/components/projects_list_search.vue","webpack:///./projects_dropdown/components/projects_list_search.vue?4cae","webpack:///./projects_dropdown/components/projects_list_search.vue","webpack:///projects_dropdown/components/search.vue","webpack:///./projects_dropdown/components/search.vue?6348","webpack:///./projects_dropdown/components/search.vue","webpack:///projects_dropdown/components/app.vue","webpack:///./projects_dropdown/components/app.vue?dfb4","webpack:///./projects_dropdown/components/app.vue","webpack:///./projects_dropdown/event_hub.js","webpack:///./projects_dropdown/index.js","webpack:///./projects_dropdown/constants.js","webpack:///./projects_dropdown/service/projects_service.js","webpack:///./projects_dropdown/store/projects_store.js","webpack:///./render_gfm.js","webpack:///./render_math.js","webpack:///./render_mermaid.js","webpack:///./search_autocomplete.js","webpack:///./shortcuts.js","webpack:///./shortcuts_dashboard_navigation.js","webpack:///./syntax_highlight.js","webpack:///vue_shared/components/identicon.vue","webpack:///./vue_shared/components/identicon.vue?42d9","webpack:///./vue_shared/components/identicon.vue","webpack:///vue_shared/components/loading_icon.vue","webpack:///./vue_shared/components/loading_icon.vue?5ca8","webpack:///./vue_shared/components/loading_icon.vue","webpack:///./vue_shared/translate.js"],"names":["webpackJsonp","../../../node_modules/autosize/dist/autosize.js","module","exports","__webpack_require__","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","global","factory","undefined","apply","this","assign","ta","changeOverflow","value","width","style","offsetWidth","overflowY","getParentOverflows","el","arr","parentNode","Element","scrollTop","push","node","resize","originalHeight","height","overflows","docTop","document","documentElement","endHeight","scrollHeight","heightOffset","clientWidth","forEach","update","styleHeight","Math","round","parseFloat","computed","window","getComputedStyle","actualHeight","boxSizing","offsetHeight","cachedHeight","evt","createEvent","dispatchEvent","err","nodeName","map","has","pageResize","destroy","removeEventListener","Object","keys","key","bind","overflowX","wordWrap","addEventListener","set","paddingTop","paddingBottom","borderTopWidth","borderBottomWidth","isNaN","methods","get","Map","values","indexOf","delete","index","splice","name","Event","bubbles","e","initEvent","autosize","options","Array","prototype","call","length","x","../../../node_modules/clipboard/lib/clipboard-action.js","_select","_classCallCheck","instance","Constructor","TypeError","_select2","obj","__esModule","default","_typeof","Symbol","iterator","constructor","_createClass","defineProperties","target","props","i","descriptor","enumerable","configurable","writable","defineProperty","protoProps","staticProps","ClipboardAction","resolveOptions","initSelection","arguments","action","container","emitter","text","trigger","selectedText","selectFake","selectTarget","_this","isRTL","getAttribute","removeFake","fakeHandlerCallback","fakeHandler","fakeElem","createElement","fontSize","border","padding","margin","position","yPosition","pageYOffset","top","setAttribute","appendChild","copyText","removeChild","succeeded","execCommand","handleResult","emit","clearSelection","focus","getSelection","removeAllRanges","_action","Error","nodeType","hasAttribute","_target","../../../node_modules/clipboard/lib/clipboard.js","_clipboardAction","_tinyEmitter","_goodListener","_interopRequireDefault","_possibleConstructorReturn","self","ReferenceError","_inherits","subClass","superClass","create","setPrototypeOf","__proto__","getAttributeValue","suffix","element","attribute","_clipboardAction2","_tinyEmitter2","_goodListener2","Clipboard","_Emitter","getPrototypeOf","listenClick","defaultAction","defaultTarget","defaultText","body","_this2","listener","onClick","delegateTarget","currentTarget","clipboardAction","selector","querySelector","actions","support","queryCommandSupported","../../../node_modules/delegate/src/closest.js","closest","DOCUMENT_NODE_TYPE","matches","proto","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","../../../node_modules/delegate/src/delegate.js","delegate","type","callback","useCapture","listenerFn","../../../node_modules/document-register-element/build/document-register-element.node.js","installCustomElements","polyfill","ASAP","queue","asapQueue","asapTimer","shift","loopAndVerify","list","verifyAndSetupAndAction","loopAndSetup","patch","protos","getTypeIndex","executeAction","isValidNode","querySelectorAll","query","is","toUpperCase","types","PREFIX_IS","PREFIX_TAG","isInQSA","onDOMAttrModified","attrChange","attrName","addition","ADDITION","removal","REMOVAL","notFromInnerHTMLHelper","ATTRIBUTE_CHANGED_CALLBACK","prevValue","newValue","onDOMNode","executor","clearTimeout","setTimeout","onReadyStateChange","dropDomContentLoaded","DOM_CONTENT_LOADED","detail","DETACHED","ATTACHED","IE8","purge","patchedSetAttribute","onSubtreeModified","setupNode","setPrototype","observer","observe","attributesObserver","doesNotSupportDOMAttrModified","EXPANDO_UID","getAttributesMirror","ADD_EVENT_LISTENER","DOM_SUBTREE_MODIFIED","DOM_ATTR_MODIFIED","CREATED_CALLBACK","created","targets","contains","throwTypeError","fn","patchIfNotAlready","CALLBACK","CustomElementRegistry","CERDefine","Class","EXTENDS","CProto","attributes","observedAttributes","empty","definition","safeProperty","justCreated","DRECEV1","info","constructors","nodeNames","usableCustomElements","notifyAttributes","CONNECTED_CALLBACK","ATTACHED_CALLBACK","DISCONNECTED_CALLBACK","DETACHED_CALLBACK","secondArgument","REGISTER_ELEMENT","toLowerCase","whenDefined","waitingList","r","getIs","nodeValue","p","Promise","resolve","polyfillV1","customElements","Classes","htmlClass","isNative","Reflect","construct","WebKit","fixGetClass","patchedCreateElement","section","tags","catchClass","filterBy","re","tag","register","test","add","concat","tagOrClass","collections","HTMLAllCollection","HTMLCollection","HTMLFormControlsCollection","HTMLOptionsCollection","elements","HTMLAnchorElement","HTMLAppletElement","HTMLAreaElement","HTMLAttachmentElement","HTMLAudioElement","HTMLBRElement","HTMLBaseElement","HTMLBodyElement","HTMLButtonElement","HTMLCanvasElement","HTMLContentElement","HTMLDListElement","HTMLDataElement","HTMLDataListElement","HTMLDetailsElement","HTMLDialogElement","HTMLDirectoryElement","HTMLDivElement","HTMLDocument","HTMLElement","HTMLEmbedElement","HTMLFieldSetElement","HTMLFontElement","HTMLFormElement","HTMLFrameElement","HTMLFrameSetElement","HTMLHRElement","HTMLHeadElement","HTMLHeadingElement","HTMLHtmlElement","HTMLIFrameElement","HTMLImageElement","HTMLInputElement","HTMLKeygenElement","HTMLLIElement","HTMLLabelElement","HTMLLegendElement","HTMLLinkElement","HTMLMapElement","HTMLMarqueeElement","HTMLMediaElement","HTMLMenuElement","HTMLMenuItemElement","HTMLMetaElement","HTMLMeterElement","HTMLModElement","HTMLOListElement","HTMLObjectElement","HTMLOptGroupElement","HTMLOptionElement","HTMLOutputElement","HTMLParagraphElement","HTMLParamElement","HTMLPictureElement","HTMLPreElement","HTMLProgressElement","HTMLQuoteElement","HTMLScriptElement","HTMLSelectElement","HTMLShadowElement","HTMLSlotElement","HTMLSourceElement","HTMLSpanElement","HTMLStyleElement","HTMLTableCaptionElement","HTMLTableCellElement","HTMLTableColElement","HTMLTableElement","HTMLTableRowElement","HTMLTableSectionElement","HTMLTemplateElement","HTMLTextAreaElement","HTMLTimeElement","HTMLTitleElement","HTMLTrackElement","HTMLUListElement","HTMLUnknownElement","HTMLVideoElement","nodes","Attr","Audio","CDATASection","CharacterData","Comment","Document","DocumentFragment","DocumentType","Image","Option","ProcessingInstruction","ShadowRoot","Text","XMLDocument","callDOMAttrModified","random","validName","invalidNames","v","OP","hOP","hasOwnProperty","iPO","isPrototypeOf","gOPD","getOwnPropertyDescriptor","gOPN","getOwnPropertyNames","gPO","sPO","hasProto","define","Dict","K","V","k","done","notify","catch","then","cb","String","Bridge","o","setProperties","names","MutationObserver","WebKitMutationObserver","HTMLElementPrototype","Node","d","attachShadow","cloneNode","removeAttribute","characterData","attributeOldValue","DOMAttrModified","setListener","patchedRemoveAttribute","CustomEvent","had","old","onPropertyChange","event","superSecret","propertyName","handler","capture","className","oldAttributes","newAttributes","attr","result","upperType","attached","detached","checkEmAll","records","current","addedNodes","removedNodes","attributeName","oldValue","childList","subtree","deep","extending","opt","localName","typeExtension","setup","innerHTMLHelper","NAME","race","DRE","o_O","FireFox","../../../node_modules/fuzzaldrin-plus/lib/filter.js","pathScorer","pluckCandidates","scorer","sortCandidates","a","candidate","b","score","candidates","bKey","maxInners","maxResults","scoreProvider","scoredCandidates","spotLeft","string","usePathScoring","_i","_len","sort","slice","../../../node_modules/fuzzaldrin-plus/lib/fuzzaldrin.js","process","Query","defaultPathSeparator","filter","matcher","parseOptions","preparedQueryCache","platform","match","_results","_ref","wrap","prepareQuery","preparedQuery","allowErrors","useExtensionBonus","pathSeparator","optCharRegEx","../../../node_modules/fuzzaldrin-plus/lib/matcher.js","basenameMatch","computeMatch","isMatch","isWordStart","mergeMatches","scoreAcronyms","scoreCharacter","scoreConsecutives","baseMatches","string_lw","core_lw","core_up","matchIndex","matchPos","matchPositions","output","strPos","tagClass","tagClose","tagOpen","_ref1","substring","subject","subject_lw","basePos","depth","end","lastIndexOf","ai","bj","j","m","n","out","offset","DIAGONAL","LEFT","STOP","UP","acro_score","align","backtrack","csc_diag","csc_row","csc_score","move","pos","query_lw","score_diag","score_row","score_up","si_lw","start","trace","reverse","../../../node_modules/fuzzaldrin-plus/lib/pathScorer.js","computeScore","countDir","file_coeff","getExtensionScore","scorePath","scoreSize","tau_depth","ceil","fullPathScore","alpha","basePathScore","extAdjust","fileLength","ext","path","count","getExtension","str","substr","startPos","endPos","maxDepth","matched","../../../node_modules/fuzzaldrin-plus/lib/query.js","coreChars","getCharCodes","opt_char_re","truncatedUpperCase","_arg","core","charCodes","replace","char","upper","len","charCodeAt","../../../node_modules/fuzzaldrin-plus/lib/scorer.js","AcronymResult","emptyAcronymResult","isAcronymFullWord","isSeparator","isWordEnd","miss_coeff","pos_bonus","scoreExact","scoreExactMatch","scorePattern","scorePosition","tau_size","wm","query_up","qj_lw","qj_up","si","acro","csc_should_rebuild","miss_budget","miss_left","record_miss","sz","max","curr_s","prev_s","next_s","c","sc","abs","quality","sameCase","bonus","posBonus","startOfWord","mi","nj","pos2","fullWord","sepCount","sumPos","nbAcronymInQuery","../../../node_modules/good-listener/src/is.js","nodeList","toString","../../../node_modules/good-listener/src/listen.js","listen","listenNode","listenNodeList","listenSelector","../../../node_modules/jed/jed.js","root","undef","getPluralFormFunc","plural_form_string","Jed","PF","compile","Chain","i18n","_key","_i18n","ArrayProto","ObjProto","hasOwnProp","nativeForEach","breaker","_","context","l","extend","source","prop","defaults","locale_data","messages","","domain","lang","plural_forms","debug","textdomain","context_delimiter","fromCharCode","onDomain","_domain","withContext","_context","ifPlural","num","pkey","_val","_pkey","fetch","sArr","sprintf","dcnpgettext","translate","_textdomain","gettext","dgettext","dcgettext","ngettext","skey","val","dngettext","dcngettext","pgettext","dpgettext","dcpgettext","npgettext","dnpgettext","singular_key","plural_key","fallback","val_list","res","val_idx","dict","defaultConf","pluralForms","parseInt","missing_key_callback","console","log","get_type","variable","str_repeat","input","multiplier","join","str_format","cache","parse","format","parse_tree","argv","arg","pad","pad_character","pad_length","cursor","tree_length","node_type","toExponential","toFixed","charAt","fmt","_fmt","arg_names","exec","field_list","replacement_field","field_match","vsprintf","unshift","parse_plural","parse_expression","args","plural_str","extractPluralExpr","parser","imply","ast","interpreter","expr","truthy","falsey","left","right","plural_matches","nplurals_re","plural_re","nplurals_matches","nplurals","yy","symbols_","error","expressions","EOF","?",":","||","&&","<","<=",">",">=","!=","==","%","(",")","NUMBER","$accept","$end","terminals_","2","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","productions_","performAction","yytext","yyleng","yylineno","yystate","$$","_$","$0","$","Number","table","3","4","1","defaultActions","parseError","hash","lex","token","lexer","stack","vstack","lstack","recovering","TERROR","setInput","yylloc","yyloc","symbol","preErrorSymbol","state","newState","expected","yyval","errStr","showPosition","line","loc","first_line","last_line","first_column","last_column","_input","_more","_less","conditionStack","ch","unput","more","pastInput","past","upcomingInput","next","pre","lines","rules","_currentRules","begin","condition","popState","pop","conditions","topState","pushState","yy_","$avoiding_name_collisions","YY_START","INITIAL","inclusive","../../../node_modules/js-cookie/src/js.cookie.js","registeredInModuleLoader","OldCookies","Cookies","api","noConflict","init","converter","expires","Date","setMilliseconds","getMilliseconds","JSON","stringify","write","encodeURIComponent","decodeURIComponent","escape","cookie","toUTCString","secure","cookies","split","rdecode","parts","read","json","getJSON","remove","withConverter","../../../node_modules/mousetrap/mousetrap.js","_addEvent","object","attachEvent","_characterFromEvent","character","which","shiftKey","_MAP","_KEYCODE_MAP","_modifiersMatch","modifiers1","modifiers2","_resetSequences","doNotReset","activeSequences","_sequenceLevels","_nextExpectedAction","_getMatches","modifiers","sequenceName","combination","level","_callbacks","_isModifier","seq","metaKey","ctrlKey","deleteCombo","combo","deleteSequence","_eventModifiers","altKey","_preventDefault","preventDefault","returnValue","_stopPropagation","stopPropagation","cancelBubble","_fireCallback","sequence","Mousetrap","stopCallback","srcElement","_handleKey","callbacks","maxLevel","processedSequenceCallback","ignoreThisKeypress","_ignoreNextKeypress","_handleKeyEvent","keyCode","_ignoreNextKeyup","handleKey","_resetSequenceTimer","_resetTimer","_getReverseMap","_REVERSE_MAP","_pickBestAction","_bindSequence","_callbackAndReset","isFinal","wrappedCallback","nextAction","_getKeyInfo","_bindSingle","_keysFromString","_SPECIAL_ALIASES","_SHIFT_MAP","_directMap","_bindMultiple","combinations","27","32","33","34","35","36","37","38","39","40","45","46","91","93","224","106","107","109","110","111","186","187","188","189","190","191","192","219","220","221","222","~","!","@","#","^","&","*","+","\"","|","option","command","return","mod","navigator","unbind","reset","tagName","isContentEditable","../../../node_modules/select/src/select.js","select","isReadOnly","setSelectionRange","selection","range","createRange","selectNodeContents","addRange","../../../node_modules/svg4everybody/dist/svg4everybody.js","svg4everybody","embed","parent","svg","fragment","createDocumentFragment","viewBox","clone","childNodes","firstChild","loadreadystatechange","xhr","onreadystatechange","readyState","cachedDocument","_cachedDocument","implementation","createHTMLDocument","innerHTML","responseText","_cachedTarget","_embeds","item","id","getElementById","rawopts","oninterval","uses","use","getSVGAncestor","src","opts","validate","srcSplit","url","requests","XMLHttpRequest","open","send","numberOfSvgUseElementsToBypass","requestAnimationFrame","newerIEUA","webkitUA","olderEdgeUA","edgeUA","inIframe","userAgent","getElementsByTagName","../../../node_modules/timeago.js/dist/timeago.min.js","t","timeago","trim","h","u","nowDate","defaultLocale","f","s","en","zh_CN","w","doRender","min","render","setLocale","cancel","../../../node_modules/tiny-emitter/index.js","E","on","ctx","once","off","data","evtArr","evts","liveEvents","../../../node_modules/vue-loader/lib/runtime/component-normalizer.js","__webpack_exports__","normalizeComponent","scriptExports","staticRenderFns","functionalTemplate","injectStyles","scopeId","moduleIdentifier","shadowMode","_compiled","functional","_scopeId","hook","$vnode","ssrContext","__VUE_SSR_CONTEXT__","_registeredComponents","_ssrRegister","$root","$options","shadowRoot","_injectStyles","originalRender","existing","beforeCreate","../../../vendor/assets/javascripts/date.format.js","dateFormat","timezone","timezoneClip","date","mask","utc","dF","SyntaxError","masks","D","y","H","M","L","getTimezoneOffset","flags","dd","ddd","dayNames","dddd","mm","mmm","monthNames","mmmm","yyyy","hh","HH","MM","ss","tt","T","TT","Z","floor","S","shortDate","mediumDate","longDate","fullDate","shortTime","mediumTime","longTime","isoDate","isoTime","isoDateTime","isoUtcDateTime","./api.js","__WEBPACK_IMPORTED_MODULE_0_underscore__","__WEBPACK_IMPORTED_MODULE_0_underscore___default","__WEBPACK_IMPORTED_MODULE_1__lib_utils_axios_utils__","Api","groupsPath","groupPath","namespacesPath","groupProjectsPath","projectsPath","projectPath","projectLabelsPath","groupLabelsPath","licensePath","gitignorePath","gitlabCiYmlPath","dockerfilePath","issuableTemplatePath","usersPath","commitPath","branchSinglePath","createBranchPath","group","groupId","buildUrl","groups","noop","params","search","per_page","_ref2","namespaces","_ref3","projects","simple","gon","current_user_id","membership","_ref4","project","newLabel","namespacePath","post","label","response","groupProjects","_ref5","commitMultiple","headers","Content-Type","branchSingle","branch","licenseText","gitignoreText","_ref6","gitlabCiYml","_ref7","dockerfileYml","_ref8","issueTemplate","_ref9","users","urlRoot","relative_url_root","api_version","./awards_handler.js","_toConsumableArray","isArray","arr2","from","loadAwardsHandler","reload","awardsHandlerPromise","Emoji","AwardsHandler","__WEBPACK_IMPORTED_MODULE_1_js_cookie__","__WEBPACK_IMPORTED_MODULE_1_js_cookie___default","__WEBPACK_IMPORTED_MODULE_2__locale__","__WEBPACK_IMPORTED_MODULE_3__lib_utils_common_utils__","__WEBPACK_IMPORTED_MODULE_4__flash__","__WEBPACK_IMPORTED_MODULE_5__lib_utils_axios_utils__","transitionEndEventString","webkitRequestAnimationFrame","mozRequestAnimationFrame","FROM_SENTENCE_REGEX","categoryLabelMap","activity","people","nature","food","travel","objects","symbols","emoji","eventListeners","registerEventListener","createEmojiMenu","showEmojiMenu","removeClass","hideMenuElement","$target","$glEmojiElement","find","$spriteIconElement","emojiName","addClass","addAward","getVotesBlock","getAwardUrl","_element$method","method","$addBtn","hasClass","$menu","$thumbsBtn","$userAuthored","isUserAuthored","blur","positionMenu","showMenuElement","$createdMenu","toggleClass","isCreatingEmojiMenu","categoryMap","getEmojiCategoryMap","categoryNameKey","emojisInCategory","firstCategory","renderCategory","frequentlyUsedEmojis","getFrequentlyUsedEmojis","frequentlyUsedCatgegory","menuListClass","emojiMenuMarkup","insertAdjacentHTML","addRemainingEmojiMenuCategories","setupSearch","_this3","isAddingRemainingEmojiMenuCategories","menu","emojiContentElement","reduce","promiseChain","categoryMarkup","message","emojiList","_this4","glEmojiTag","sprite","css","outerHeight","outerWidth","votesBlock","awardUrl","checkMutuality","_this5","isMainAwardsBlock","isInVueNoteablePage","toggleAwardEvent","awardName","noteId","normalizedEmoji","normalizeEmojiName","$emojiButton","findEmojiIcon","postEmoji","addAwardToEmojiBar","checkForMutuality","addEmojiToFrequentlyUsedList","isActive","decrementCounter","counter","addYouToUserList","animateEmoji","createEmoji","isVueMRDiscussions","$el","currentBlock","resultantVotesBlock","eq","mutualVote","$button","counterNumber","removeYouFromUserList","tooltip","parents","removeEmoji","$votesBlock","$awardBlock","awardBlock","originalTitle","getAwardTooltip","authors","removeData","removeAttr","toSentence","origTitle","buttonHtml","insertBefore","$emoji","_this6","createAwardButtonForVotesBlock","userAuthored","ok","oldTitle","animate","isEmojiNameValid","uniq","_this7","inputName","_this8","$search","term","searchEmojis","h5","foundEmojis","findMatchingEmojiElements","show","ul","append","hide","children","emojiMatches","filterEmojiNamesByAlias","elm","dataset","$emojiMenu","entry","_entry$element$off","./behaviors/bind_in_out.js","BindInOut","bindIn","bindOut","in","eventWrapper","eventType","updateOut","textContent","ins","anIn","anOut","addEvents","./behaviors/copy_as_gfm.js","initCopyAsGFM","CopyAsGFM","__WEBPACK_IMPORTED_MODULE_1__lib_utils_common_utils__","__WEBPACK_IMPORTED_MODULE_2__lazy_loader__","gfmRules","InlineDiffFilter","span.idiff.addition","span.idiff.deletion","TaskListFilter","input[type=checkbox].task-list-item-checkbox","checked","ReferenceFilter",".tooltip","a.gfm:not([data-link=true])","original","AutolinkFilter","TableOfContentsFilter","ul.section-nav","EmojiFilter","img.emoji","gl-emoji","ImageLinkFilter","a.no-attachment-icon","ImageLazyLoadFilter","img","VideoLinkFilter",".video-container","videoEl","nodeToGFM","video","title","MermaidFilter","svg.mermaid","sourceEl","svg.mermaid style, svg.mermaid g","MathFilter","pre.code.math[data-math-style=display]","code.code.math[data-math-style=inline]","span.katex-display span.katex-mathml","mathAnnotation","span.katex-mathml","span.katex-html","annotation[encoding=\"application/x-tex\"]","SanitizationFilter","a[name]:not([href]):empty","outerHTML","dl","sub, dt, dd, kbd, q, samp, var, ruby, rt, rp, abbr, summary, details","SyntaxHighlightFilter","pre.code.highlight","trimRight","pre > code","MarkdownFilter","br","code","backtickCount","backtickMatch","backticks","spaceOrNoSpace","blockquote","imageSrc","imageUrl","a.anchor","li","firstLine","ol","h1","h2","h3","h4","h6","strong","em","del","sup","hr","theadEl","tbodyEl","thead","separatorRow","cell","chars","before","after","textAlign","tr","cellEls","copyAsGFM","transformGFMSelection","transformCodeSelection","pasteGFM","transformer","clipboardData","originalEvent","documentFragment","setData","getData","gfm","gl","utils","insertText","textBefore","textAfter","gfmElements","allGfmElement","gfmElement","createTextNode","lineSelector","lineClass","classList","lineElements","codeElement","lineElement","respectWhitespaceParam","COMMENT_NODE","TEXT_NODE","respectWhitespace","innerGFM","DOCUMENT_FRAGMENT_NODE","func","clonedParentNode","clonedNodes","clonedNode","replaceChild","nodeText","innerText","./behaviors/copy_to_clipboard.js","showTooltip","genericSuccess","genericError","initCopyToClipboard","clipboard","__WEBPACK_IMPORTED_MODULE_0_clipboard___default","ex","__WEBPACK_IMPORTED_MODULE_0_clipboard__","./behaviors/details_behavior.js","truncatedItem","siblings","./behaviors/index.js","isFlagEmoji","emojiUnicode","cp","codePointAt","flagACodePoint","flagZCodePoint","isRainbowFlagEmoji","characters","baseFlagCodePoint","rainbowCodePoint","isKeycapEmoji","isSkinToneComboEmoji","some","tone1","tone5","isHorceRacingSkinToneComboEmoji","firstCharacter","horseRacingCodePoint","isPersonZwjEmoji","hasPersonEmoji","hasZwj","zwj","personStartCodePoint","personEndCodePoint","checkFlagEmojiSupport","unicodeSupportMap","isFlagResult","isRainbowFlagResult","flag","rainbowFlag","checkSkinToneModifierSupport","isSkinToneResult","skinToneModifier","checkHorseRacingSkinToneComboEmojiSupport","isHorseRacingSkinToneResult","horseRacing","checkPersonEmojiSupport","isPersonZwjResult","personZwj","isEmojiUnicodeSupported","unicodeVersion","isOlderThanChrome57","meta","isChrome","chromeVersion","checkPixelInImageDataArray","pixelOffset","imageDataArray","indexOffset","hasColor","isVisible","generateUnicodeSupportMap","testMap","testMapKeys","numTestEntries","testKey","canvas","testEmojiUnicodeSupportMapCanvas","getContext","fillStyle","textBaseline","font","writeIndex","fillText","resultMap","readIndex","testEntry","isTestSatisfied","isSatisfied","imageData","getImageData","isValidEmoji","currentPixel","isLookingAtFirstChar","isLookingAtSecondChar","getUnicodeSupportMap","isLocalStorageAvailable","accessor","isLocalStorageAccessSafe","glEmojiVersionFromCache","userAgentFromCache","localStorage","getItem","GL_EMOJI_VERSION","unicodeSupportTestMap","setItem","isEmojiUnicodeSupportedByBrowser","browserUnicodeSupportMap","autosize_default","autosizeEls","copy_as_gfm","copy_to_clipboard","document_register_element_node","document_register_element_node_default","9.0","8.0","7.0","6.1","6.0","5.2","5.1","4.1","4.0","3.2","3.0","1.1","chromeMatches","GlEmojiElementProto","createdCallback","_dataset","fallbackSrc","fallbackSpriteClass","isEmojiUnicode","every","childNode","hasImageFallback","hasCssSpriteFalback","emojiImageTag","emojiFallbackImageSrc","registerElement","./behaviors/quick_submit.js","isMac","keyCodeIs","repeat","onlyMeta","onlyCtrl","$form","$submitButton","first","disable","$this","html","placement","one","./behaviors/requires_input.js","hideOrShowHelpBlock","form","selected","requiresInput","requireInput","fieldSelector","field","any","isEmpty","enable","change","./behaviors/toggler_behavior.js","__WEBPACK_IMPORTED_MODULE_0__lib_utils_url_utility__","toggleContainer","toggleState","$container","toggle","toggleOpenClass","targetTag","anchor","scrollIntoView","./breadcrumb.js","addTooltipToEl","textEl","scrollWidth","breadcrumbs","topLevelLinks","$expander","./breakpoints.js","breakpoints","lg","md","sm","xs","BreakpointInstance","windowWidth","innerWidth","getBreakpointSize","./confirm_danger_modal.js","__WEBPACK_IMPORTED_MODULE_0__lib_utils_common_utils__","ConfirmDangerModal","project_path","submit","modal","./contextual_sidebar.js","__WEBPACK_IMPORTED_MODULE_0_js_cookie__","__WEBPACK_IMPORTED_MODULE_0_js_cookie___default","__WEBPACK_IMPORTED_MODULE_1_underscore__","__WEBPACK_IMPORTED_MODULE_1_underscore___default","__WEBPACK_IMPORTED_MODULE_2__breakpoints__","ContextualSidebar","initDomElements","$page","$sidebar","$innerScroll","$overlay","$openSidebar","$closeSidebar","$sidebarToggle","toggleCollapsedSidebar","toggleSidebarNav","debounce","collapsed","breakpoint","setCollapsedCookie","toggleSidebarOverflow","collapse","./dispatcher.js","initSearch","__WEBPACK_IMPORTED_MODULE_5__search_autocomplete__","initFieldErrors","each","__WEBPACK_IMPORTED_MODULE_3__gl_field_errors__","initPageShortcuts","page","__WEBPACK_IMPORTED_MODULE_4__shortcuts__","initGFMInput","__WEBPACK_IMPORTED_MODULE_1__gfm_auto_complete__","GfmAutoComplete","dataSources","enableGFM","__WEBPACK_IMPORTED_MODULE_2__lib_utils_common_utils__","supportsAutocomplete","emojis","members","issues","milestones","mergeRequests","labels","initPerformanceBar","__WEBPACK_IMPORTED_MODULE_0__flash__","./droplab/drop_lab.js","hook__classCallCheck","hook_button__classCallCheck","hook_input__classCallCheck","hook_input__possibleConstructorReturn","hook_input__inherits","drop_lab__toConsumableArray","drop_lab__classCallCheck","underscore","TEMPLATE_REGEX","toCamelCase","camelize","template","templateString","letter","thisTag","stopTag","isDropDownParts","droplab_utils","drop_down_DropDown","DropDown","config","currentIndex","hidden","items","hideOnClick","addActiveClassToDropdownButton","dropdownToggle","getItems","initTemplateString","initialState","addSelectedClass","listEvent","removeSelectedClasses","clickEvent","closeDropdown","renderChildren","setImagesSrc","display","droplab_hidden","images","image","drop_down","hook_Hook","Hook","plugins","droplab_hook","hook_button__createClass","HookButton","_Hook","addPlugins","plugin","buttonEvent","cancelable","clicked","restoreInitialState","removeEvents","removePlugins","hook_button","hook_input__createClass","HookInput","mousedown","keyup","keydown","hasRemovedEvents","inputEvent","mouseEvent","keyEvent","eventName","hook_input","keyboard_Keyboard","currentKey","isUpArrow","isDownArrow","removeHighlight","itemElements","listItems","listItem","setMenuForArrows","filterDropdownEl","filterDropdownBottom","elOffsetTop","offsetTop","selectItem","currentItem","keyboard","drop_lab__createClass","drop_lab_DropLab","DropLab","ready","hooks","queuedData","dropdownTriggers","addHooks","applyArgs","_len2","_key2","methodName","processData","documentClicked","availableTrigger","aHook","dropdownActive","addHook","availableHook","availableList","HookObject","readyEvent","dropdown","loadStatic","fireReady","addData","./feature_highlight/feature_highlight.js","setupFeatureHighlightPopover","debounceTimeout","$selector","__WEBPACK_IMPORTED_MODULE_1__feature_highlight_helper__","$parent","$popoverContent","hideOnScroll","debouncedMouseleave","popover","findHighestPriorityFeature","priorityFeature","sortedFeatureEls","highlightPriority","_sortedFeatureEls","_slicedToArray","priorityFeatureEl","highlight","highlightFeatures","sliceIterator","_arr","_n","_d","_e","_s","./feature_highlight/feature_highlight_helper.js","togglePopover","isAlreadyShown","dismiss","highlightId","__WEBPACK_IMPORTED_MODULE_0__lib_utils_axios_utils__","feature_name","__WEBPACK_IMPORTED_MODULE_2__flash__","__WEBPACK_IMPORTED_MODULE_1__locale__","mouseleave","$featureHighlight","mouseenter","inserted","popoverId","$popover","dismissWrapper","lazyImg","__WEBPACK_IMPORTED_MODULE_3__lazy_loader__","loadImage","getSelector","./feature_highlight/feature_highlight_options.js","domContentLoaded","__WEBPACK_IMPORTED_MODULE_1__breakpoints__","__WEBPACK_IMPORTED_MODULE_0__feature_highlight__","./filtered_search/container.js","FilteredSearchContainerClass","containerParam","./filtered_search/dropdown_utils.js","__WEBPACK_IMPORTED_MODULE_1__container__","__WEBPACK_IMPORTED_MODULE_2__filtered_search_tokenizer__","__WEBPACK_IMPORTED_MODULE_3__filtered_search_dropdown_manager__","__WEBPACK_IMPORTED_MODULE_4__filtered_search_visual_tokens__","DropdownUtils","escapedText","hasSpace","hasDoubleQuote","filterSymbol","updatedItem","searchInput","getSearchInput","matchWithoutSymbol","dataMap","updatedMap","multipleColors","color","labelColors","colors","spacing","results","mergeDuplicateLabels","duplicateLabelColor","text_color","preprocessed","allowedKeys","getSearchQuery","_FilteredSearchTokeni","processTokens","lastToken","tokens","lastKey","allowMultiple","itemInExistingTokens","hint","last","tokenName","dataValue","addWordToInput","visualToken","tokenValue","untilInput","inputIndex","findIndex","valueContainer","valueText","originalValue","_FilteredSearchVisual","getLastVisualTokenBeforeInput","isLastVisualTokenValid","inputValue","previous","filteredSearchInput","_DropdownUtils$getInp","getInputSelectionPosition","selectionStart","./filtered_search/filtered_search_dropdown_manager.js","dropdown_hint__classCallCheck","dropdown_emoji__classCallCheck","dropdown_emoji__possibleConstructorReturn","dropdown_emoji__inherits","dropdown_non_user__classCallCheck","dropdown_non_user__possibleConstructorReturn","dropdown_non_user__inherits","dropdown_user__classCallCheck","dropdown_user__possibleConstructorReturn","dropdown_user__inherits","filtered_search_dropdown_manager__classCallCheck","underscore_default","drop_lab","filtered_search_token_keys","dropdown_utils","Filter","destroyed","filterFunction","hiddenCount","dataHiddenCount","debounceKeydown","timeout","filtered_search_dropdown_FilteredSearchDropdown","FilteredSearchDropdown","droplab","hookId","loadingTemplate","bindEvents","itemClickedWrapper","itemClicked","getValueFunction","setDataValueIfSelected","filtered_search_dropdown_manager","resetFilters","dismissDropdown","dispatchInputEvent","forceShowList","currentHook","getCurrentHook","forceRenderContent","setAsDropdown","renderContent","updated","filtered_search_dropdown","filtered_search_visual_tokens","dropdown_hint__createClass","dropdown_hint_DropdownHint","_FilteredSearchDropdo","DropdownHint","tokenKeys","filterHint","getKeys","dispatchFormSubmitEvent","previousInputValues","searchTerms","addSearchVisualToken","dropdownData","tokenKey","icon","changeHookList","dropdown_hint","flash","ajax_cache","Ajax","_loadData","dataLoadingTemplate","listTemplate","preprocessing","override","endpoint","dynamicList","retrieve","onError","ajax","dropdown_emoji__createClass","_get","property","receiver","Function","desc","getter","dropdown_emoji_DropdownEmoji","DropdownEmoji","unbindEvents","listRenderedWrapper","listRendered","replaceEmojiElement","getEscapedText","dropdownItems","dropdownItem","emojiTag","dropdown_emoji","dropdown_non_user__createClass","dropdown_non_user__get","dropdown_non_user_DropdownNonUser","DropdownNonUser","filterWithSymbol","dropdown_non_user","AjaxFilter","notLoading","debounceTrigger","loading","NON_CHARACTER_KEYS","invalidKeyPressed","focusEvent","getEntireList","searchValue","searchKey","searchValueFunction","buildParams","onLoadingFinished","hookListChildren","param","ajax_filter","dom_utils","filtered_search_tokenizer","dropdown_user__createClass","dropdown_user__get","dropdown_user_DropdownUser","DropdownUser","active","group_id","getGroupId","project_id","getProjectId","current_user","hideCurrentUser","dropdown_user","filtered_search_dropdown_manager__createClass","filtered_search_dropdown_manager_FilteredSearchDropdownManager","FilteredSearchDropdownManager","_ref$baseEndpoint","baseEndpoint","tokenizer","isGroup","isGroupAncestor","isGroupDecendent","filteredSearchTokenKeys","groupsOnly","groupAncestor","setupMapping","cleanupWrapper","cleanup","supportedTokens","allowedMappings","reference","availableMappings","author","assignee","milestone","extraArguments","getMilestoneEndpoint","getLabelsEndpoint","duplicateLabelPreprocessing","my-reaction","mapping","updateDropdownOffset","currentDropdown","getBoundingClientRect","currentDropdownWidth","offsetMaxWidth","setOffset","firstLoad","mappingKey","glClass","defaultArguments","glArguments","dropdownName","searchByKey","shouldOpenFilterDropdown","shouldOpenHintDropdown","load","_tokenizer$processTok","searchToken","updateCurrentDropdownOffset","loadDropdown","hideDropdown","setDropdown","addFilterVisualToken","moveInputToTheRight","./filtered_search/filtered_search_token_keys.js","alternativeTokenKeys","tokenKeysWithAlternative","FilteredSearchTokenKeys","keyParam","tokenKeyParam","./filtered_search/filtered_search_tokenizer.js","FilteredSearchTokenizer","tokenRegex","RegExp","tokenIndexes","v1","v2","v3","tokenSymbol","tokenIndex","lastString","./filtered_search/filtered_search_visual_tokens.js","filtered_search_visual_tokens__classCallCheck","common_utils","users_cache_UsersCache","_Cache","UsersCache","username","hasData","user","internalStorage","users_cache","filtered_search_visual_tokens__createClass","filtered_search_visual_tokens_FilteredSearchVisualTokens","FilteredSearchVisualTokens","inputLi","lastVisualToken","previousElementSibling","endpointQueryParams","otherTokens","tokenButton","forceSelection","unselectTokens","parentElement","tokenContainer","backgroundColor","textColor","labelsEndpoint","processed","tokenValueContainer","getEndpointWithQueryParams","preprocessLabel","matchingLabel","setTokenStyle","tokenValueElement","avatar_url","tokenType","updateLabelTokenColor","updateUserTokenAppearance","updateEmojiTokenAppearance","isSearchTerm","canEdit","createVisualTokenElementHTML","renderVisualTokenValue","tokensContainer","getLastTokenPartial","_FilteredSearchVisual2","addVisualTokenElement","previousTokenName","searchTerm","_FilteredSearchVisual3","_FilteredSearchVisual4","nameText","_FilteredSearchVisual5","button","_FilteredSearchVisual6","addValueToPreviousVisualTokenElement","tokenizeInput","nameElement","valueContainerElement","lastElementChild","isEqualNode","lastPartial","removeLastTokenPartial","./flash.js","createFlash","removeFlashClickListener","hideFlash","flashEl","fadeTransition","transition","opacity","passive","createAction","href","createFlashEl","actionConfig","addBodyClass","flashContainer","isInContentWrapper","clickHandler","Flash","./fly_out_nav.js","__WEBPACK_IMPORTED_MODULE_0__breakpoints__","currentOpenMenu","menuCornerLocs","timeoutId","sidebar","mousePos","setOpenMenu","slope","headerHeight","isSidebarCollapsed","canShowActiveSubItems","canShowSubItems","getHideSubItemsInterval","currentMousePos","prevMousePos","currentMousePosY","_menuCornerLocs","_menuCornerLocs2","menuTop","menuBottom","calculateTop","boundingRect","innerHeight","hideMenu","parentEl","transform","moveSubItemsToPosition","subItems","isAbove","subItemsRect","showSubLevelItems","isIconOnly","mouseEnterTopItems","mouseLeaveTopItem","documentMouseMove","clientX","clientY","subItemsMouseLeave","relatedTarget","./gfm_auto_complete.js","sanitize","__WEBPACK_IMPORTED_MODULE_1__lib_utils_regexp__","__WEBPACK_IMPORTED_MODULE_2__lib_utils_ajax_cache__","_extends","cachedData","isLoadingData","enableMap","setupLifecycle","$input","setupAtWho","clearCache","setupEmoji","setupMembers","setupIssues","setupMilestones","setupMergeRequests","setupLabels","atwho","at","alias","skipSpecialCharacterTest","defaultLoadingData","displayTpl","isLoading","Loading","tpl","aliases","description","insertTpl","referencePrefix","getDefaultCallbacks","beforeSave","commands","subtext","regexp","tmpl","templateFunction","relevantText","unicodeLetters","Members","alwaysHighlightFirst","autoCompleteAvatar","imgAvatar","txtAvatar","avatarTag","Issues","iid","Milestones","merges","fetchData","LABEL_COMMAND","LABEL","UNLABEL","RELABEL","Labels","defaultMatcher","app","controllers","subtextNodes","regexSubtext","$inputor","sorter","setting","highlightFirst","beforeInsert","resultantValue","withoutAt","regex","loadData","atTypeMap","validEmojiNames","dataToInspect","loadingState","atSymbolsWithBar","atSymbolsWithoutBar","targetSubtext","resultantFlag","accentAChar","decodeURI","accentYChar","/","./gl_dropdown.js","jQuery","GitLabDropdown","GitLabDropdownFilter","GitLabDropdownRemote","GitLabDropdownInput","__WEBPACK_IMPORTED_MODULE_1_fuzzaldrin_plus__","__WEBPACK_IMPORTED_MODULE_1_fuzzaldrin_plus___default","__WEBPACK_IMPORTED_MODULE_2__lib_utils_axios_utils__","__WEBPACK_IMPORTED_MODULE_3__lib_utils_url_utility__","__WEBPACK_IMPORTED_MODULE_4__lib_utils_type_utility__","$inputContainer","$clearButton","fieldName","elIsInput","inputFieldName","onInput","ref","filterInputBlur","HAS_VALUE_CLASS","remote","BLUR_KEYCODES","shouldBlur","search_text","tmp","onFilter","filterByText","dataEndpoint","execute","beforeSend","success","el1","searchFields","updateLabel","opened","shouldPropagate","filterInput","getElement","FILTER_INPUT","noFilterInput","NO_FILTER_INPUT","isString","fields","isObject","isFunction","fullData","parseData","focusTextInput","dataType","toggleLoading","filterable","plainInput","addInput","filterRemote","NON_SELECTABLE_CLASSES","SELECTABLE_CLASSES","$dropdownMenu","$relatedTarget","togglePage","selectable","selectedObj","isMarking","rowClicked","toggleLabel","ACTIVE_CLASS","INDETERMINATE_CLASS","LOADING_CLASS","PAGE_TWO_CLASS","CURSOR_SELECT_SCROLL_PADDING","full_html","groupData","renderedData","noResults","renderItem","header","renderData","renderMenu","appendMenu","multiSelect","filteredFullData","contentHtml","resetRows","addArrowKeyEvent","hasFilterBulkUpdate","shouldRefreshOnOpen","hasMultiSelect","showMenuAbove","positionMenuAbove","removeArrayKeyEvent","clearMenu","renderRow","hideRow","highlightTextMatches","link","occurrences","groupName","isInput","selectedIndex","selectedObject","vue","isSelectable","clearField","initialScrollTop","single","inputId","inputMeta","selectRowAtIndex","ARROW_KEY_CODES","$listItems","PREV_INDEX","currentKeyCode","stopImmediatePropagation","highlightRowAtIndex","$dropdownContent","$listItem","dropdownContentBottom","dropdownContentHeight","dropdownContentTop","dropdownScrollTop","listItemBottom","listItemHeight","listItemTop","toggleText","glDropdown","./gl_field_error.js","errorMessageClass","GlFieldError","formErrors","inputElement","inputDomElement","errorMessage","fieldErrorElement","valid","submitted","initFieldValidation","customErrorAnchor","handleInvalidSubmit","scopedSiblings","safelySelectSiblings","unignoredSiblings","parentContainer","renderClear","renderValid","renderEmpty","renderInvalid","currentValue","accessCurrentValue","renderValidity","focusOnFirstInvalid","updateValidity","newVal","validity","inputVal","getInputValidity","trimmedInput","./gl_field_errors.js","__WEBPACK_IMPORTED_MODULE_0__gl_field_error__","GlFieldErrors","inputs","initValidators","validateSelectors","toArray","catchInvalidFormSubmit","checkValidity","./header.js","initTodoToggle","parsedCount","$todoPendingCount","__WEBPACK_IMPORTED_MODULE_0__lib_utils_text_utility__","./importer_status.js","initImporterStatus","importerStatus","ImporterStatus","jobsUrl","jobsImportPath","importUrl","importPath","ciCdOnly","__WEBPACK_IMPORTED_MODULE_4__lib_utils_common_utils__","__WEBPACK_IMPORTED_MODULE_3__flash__","initStatusPage","setAutoUpdate","addToImport","$btn","$tr","$targetField","$namespaceInput","targetNamespace","newName","repo_id","target_namespace","new_name","ci_cd_only","job","full_path","prepend","connectingVerb","loadingIcon","_ref3$data","jobItem","statusField","spinner","import_status","setInterval","autoUpdate","./layout_nav.js","hideEndFade","$scrollingTabs","initLayoutNav","__WEBPACK_IMPORTED_MODULE_0__contextual_sidebar__","__WEBPACK_IMPORTED_MODULE_1__fly_out_nav__","not","currentPosition","scrollLeft","maxPosition","scrollingTabWidth","$active","activeWidth","./lazy_loader.js","placeholderImage","LazyLoader","lazyImages","observerNode","throttledScrollCheck","throttle","scrollCheck","debouncedElementsInView","checkElementsInView","scrollContainer","loadCheck","contentNode","searchLazyImages","startContentObserver","visHeight","selectedImage","imgBoundRect","imgTop","imgBound","./lib/utils/accessor.js","isPropertyAccessSafe","base","safe","isFunctionCallSafe","functionName","removeItem","AccessorUtilities","./lib/utils/ajax_cache.js","__WEBPACK_IMPORTED_MODULE_0__axios_utils__","__WEBPACK_IMPORTED_MODULE_1__cache__","AjaxCache","pendingRequests","forceRetrieve","pendingRequest","textStatus","./lib/utils/cache.js","Cache","./lib/utils/common_utils.js","_defineProperty","getPagePath","isInGroupsPage","isInProjectPage","getProjectSlug","getGroupSlug","isInIssuePage","isInMRPage","hasVueMRDiscussionsCookie","ajaxGet","rstrip","updateTooltipTitle","handleLocationHash","isInViewport","parseUrlPathname","getUrlParamsArray","isMetaKey","isMetaClick","scrollToElement","getParameterByName","getSelectedFragment","nodeMatchesSelector","normalizeHeaders","parseIntPagination","parseQueryStringIntoObject","objectToQueryString","buildUrlWithCurrentLocation","historyPushState","convertPermissionToBoolean","backOff","setFavicon","setCiStatusFavicon","spriteIcon","convertObjectPropsToCamelCase","addSelectOnFocusBehaviour","__WEBPACK_IMPORTED_MODULE_0_jquery__","__WEBPACK_IMPORTED_MODULE_0_jquery___default","__WEBPACK_IMPORTED_MODULE_2__axios_utils__","__WEBPACK_IMPORTED_MODULE_3__url_utility__","__WEBPACK_IMPORTED_MODULE_4__text_utility__","checkPageAndAction","pagePath","actionPath","responseType","globalEval","$tooltipEl","newTitle","disableButtonIfEmptyField","buttonSelector","closestSubmit","fixedTabs","fixedDiffStats","fixedNav","adjustment","scrollBy","rect","bottom","parseUrl","parsedUrl","pathname","location","mrTabsHeight","urlToParse","parsedName","rangeCount","getRangeAt","cloneContents","selectionEnd","insertedText","newText","matchingNodes","upperCaseHeaders","paginationInformation","perPage","total","totalPages","nextPage","previousPage","acc","newUrl","history","permission","nextInterval","timeElapsed","reject","stop","faviconPath","faviconEl","resetFavicon","originalFavicon","pageUrl","favicon","sprite_icons","imagePath","imgUrl","asset_host","./lib/utils/datetime_utility.js","getTimeago","timeagoInstance","localeRemaining","number","__WEBPACK_IMPORTED_MODULE_3__locale__","locale","__WEBPACK_IMPORTED_MODULE_0_timeago_js___default","timeagoLanguageCode","timeIntervalInWords","intervalInSeconds","secondsInteger","minutes","seconds","__WEBPACK_IMPORTED_MODULE_2__text_utility__","getDayName","formatDate","localTimeAgo","timeFor","getDayDifference","__WEBPACK_IMPORTED_MODULE_0_timeago_js__","__WEBPACK_IMPORTED_MODULE_1_vendor_date_format__","__WEBPACK_IMPORTED_MODULE_1_vendor_date_format___default","getDay","datetime","renderTimeago","$els","timeagoEls","$timeagoEls","setTimeago","time","expiredLabel","date1","UTC","getFullYear","getMonth","getDate","date2","./lib/utils/dom_utils.js","addClassIfElementExists","./lib/utils/regexp.js","./lib/utils/text_utility.js","capitalizeFirstCharacter","addDelimiter","highCountTrim","humanize","pluralize","dasherize","slugify","truncate","convertToCamelCase","maxLength","./lib/utils/type_utility.js","./lib/utils/url_utility.js","getParameterValues","sParam","urlParam","sParameterName","mergeUrlParams","paramName","paramValue","pattern","removeParamQueryString","removeParams","getLocationHash","hashIndex","visitUrl","otherWindow","opener","refreshCurrentPage","redirectTo","./locale/index.js","jed","jed_default","parameters","escapeParameters","parameterName","parameterValue","escapedParameterValue","languageCode","createDateTimeFormat","translations","pluralText","translated","keyOrContext","normalizedKey","formatOptions","Intl","DateTimeFormat","./logo.js","initLogoAnimation","./main.js","__WEBPACK_IMPORTED_MODULE_2_svg4everybody__","__WEBPACK_IMPORTED_MODULE_2_svg4everybody___default","__WEBPACK_IMPORTED_MODULE_4__lib_utils_datetime_utility__","__WEBPACK_IMPORTED_MODULE_5__lib_utils_url_utility__","__WEBPACK_IMPORTED_MODULE_7__awards_handler__","__WEBPACK_IMPORTED_MODULE_8__breakpoints__","__WEBPACK_IMPORTED_MODULE_10__flash__","__WEBPACK_IMPORTED_MODULE_12__header__","__WEBPACK_IMPORTED_MODULE_13__importer_status__","__WEBPACK_IMPORTED_MODULE_14__layout_nav__","__WEBPACK_IMPORTED_MODULE_16__lazy_loader__","__WEBPACK_IMPORTED_MODULE_17__logo__","__WEBPACK_IMPORTED_MODULE_21__breadcrumb__","__WEBPACK_IMPORTED_MODULE_22__dispatcher__","onLoad","lazyLoader","fitSidebarForSize","oldBootstrapBreakpoint","bootstrapBreakpoint","$document","$body","$window","$sidebarGutterToggle","click","fadeOut","select2","dropdownAutoWidth","DEFAULTS","tip","viewport","$buttons","ajaxError","xhrObj","status","notesHolders","btn","serialize","./milestone_select.js","__WEBPACK_IMPORTED_MODULE_2__lib_utils_datetime_utility__","MilestoneSelect","currentProject","els","collapsedSidebarLabelTemplate","milestoneLinkNoneTemplate","milestoneLinkTemplate","selectedMilestone","selectedMilestoneDefault","$dropdown","milestonesUrl","issueUpdateURL","showNo","showAny","showUpcoming","showStarted","useId","defaultLabel","defaultNo","abilityName","$selectBox","$block","$sidebarCollapsedValue","$value","$loading","extraOptions","handleClick","boardsStore","isIssueIndex","isMRIndex","isSelecting","issueBoards","ModalStore","store","Issuable","filterResults","milestone_id","fadeIn","put","remaining","due_date","boardStoreIssueSet","ListMilestone","boardStoreIssueDelete","BoardsStore","issue","./preview_markdown.js","MarkdownPreview","lastTextareaPreviewed","markdownPreview","previewButtonSelector","writeButtonSelector","__WEBPACK_IMPORTED_MODULE_1__flash__","lastTextareaHeight","referenceThreshold","emptyMessage","ajaxCache","showPreview","mdText","preview","hideReferencedUsers","fetchMarkdownPreview","renderGFM","renderReferencedUsers","references","renderReferencedCommands","referencedUsers","hideReferencedCommands","referencedCommands","markdownToolbar","setupMarkdownPreview","keyboardEvent","triggerHandler","./projects_dropdown/components/app.vue","event_hub","loading_icon","identicon","projects_list_item","components","required","projectId","projectName","namespace","webUrl","avatarUrl","validator","hasAvatar","highlightedProjectName","matcherRegEx","truncatedNamespace","namespaceArr","_vm","_h","$createElement","_c","_self","staticClass","attrs","size-class","entity-id","entity-name","_v","domProps","component_normalizer","Component","components_projects_list_item","projects_list_frequent","projectsListItem","localStorageFailed","Boolean","isListEmpty","listEmptyMessage","projects_list_frequent_render","_l","project-id","project-name","web-url","avatar-url","projects_list_frequent_staticRenderFns","projects_list_frequent_Component","components_projects_list_frequent","projects_list_search","searchFailed","projects_list_search_render","class","section-failure","projects_list_search_staticRenderFns","projects_list_search_Component","components_projects_list_search","searchQuery","watch","handleInput","mounted","$on","setFocus","beforeDestroy","$off","$refs","emitSearchEvents","$emit","search_render","directives","rawName","expression","placeholder","s__","$event","composing","aria-hidden","search_staticRenderFns","search_Component","components_search","projectsListFrequent","projectsListSearch","service","isLoadingProjects","isFrequentsListVisible","isSearchListVisible","isLocalStorageFailed","isSearchFailed","frequentProjects","getFrequentProjects","searchProjects","getSearchedProjects","logCurrentProjectAccess","fetchFrequentProjects","fetchSearchedProjects","handleSearchClear","handleSearchFailure","toggleFrequentProjectsList","toggleSearchProjectsList","toggleLoader","screenSize","setFrequentProjects","setSearchedProjects","logProjectAccess","clearSearchedProjects","app_render","size","local-storage-failed","search-failed","app_staticRenderFns","app_Component","./projects_dropdown/event_hub.js","__WEBPACK_IMPORTED_MODULE_0_vue__","./projects_dropdown/index.js","__WEBPACK_IMPORTED_MODULE_1__vue_shared_translate__","__WEBPACK_IMPORTED_MODULE_2__event_hub__","__WEBPACK_IMPORTED_MODULE_3__service_projects_service__","__WEBPACK_IMPORTED_MODULE_4__store_projects_store__","__WEBPACK_IMPORTED_MODULE_5__components_app_vue__","navEl","projectsDropdownApp","userName","projectNamespace","projectWebUrl","projectAvatarUrl","lastAccessedOn","now","currentUserName","./projects_dropdown/service/projects_service.js","vue_esm","vue_resource_esm","FREQUENT_PROJECTS","MAX_COUNT","LIST_COUNT_DESKTOP","LIST_COUNT_MOBILE","ELIGIBLE_FREQUENCY","STORAGE_KEY","projects_service_ProjectsService","ProjectsService","storageKey","resource","order_by","getTopFrequentProjects","matchFound","storedFrequentProjects","storedRawProjects","projectItem","diff","updatedProject","frequency","frequentProjectsCount","projectA","projectB","./projects_dropdown/store/projects_store.js","ProjectsStore","searchedProjects","rawProjects","rawProject","name_with_namespace","web_url","./render_gfm.js","__WEBPACK_IMPORTED_MODULE_0__render_math__","__WEBPACK_IMPORTED_MODULE_1__render_mermaid__","__WEBPACK_IMPORTED_MODULE_2__syntax_highlight__","./render_math.js","renderWithKaTeX","katex","mathNode","displayMode","throwOnError","insertAfter","renderMath","all","__WEBPACK_IMPORTED_MODULE_0__locale__","./render_mermaid.js","renderMermaid","mermaid","initialize","startOnLoad","theme","replaceWith","./search_autocomplete.js","setSearchOptions","$projectOptionsDataEl","$groupOptionsDataEl","$dashboardOptionsDataEl","projectOptions","issuesPath","issuesDisabled","mrPath","groupOptions","dashboardOptions","KEYCODE","ESCAPE","BACKSPACE","ENTER","DOWN","SearchAutocomplete","optsEl","autocompletePath","projectRef","bindEventContext","dropdownContent","locationBadgeEl","scopeInputEl","projectInputEl","groupInputEl","searchCodeInputEl","repositoryInputEl","clearInput","saveOriginalState","createAutocomplete","saveTextLength","onSearchInputBlur","onClearInputClick","onSearchInputFocus","onSearchInputKeyUp","onSearchInputKeyDown","originalState","serializeState","lastTextLength","enterCallback","getSearchText","contents","getCategoryContents","enableAutocomplete","loadingSuggestions","project_ref","disableAutocomplete","lastCategory","suggestion","category","current_username","_gl","_options","baseItems","issueItems","mergeRequestItems","search_project_id","search_code","repository_ref","scope","_location","badgePresent","removeLocationBadge","restoreOriginalState","isFocused","getValue","badgeText","addLocationBadge","resetSearchState","restoreMenu","./shortcuts.js","__WEBPACK_IMPORTED_MODULE_1_mousetrap__","__WEBPACK_IMPORTED_MODULE_1_mousetrap___default","__WEBPACK_IMPORTED_MODULE_4__shortcuts_dashboard_navigation__","defaultStopCallback","Shortcuts","onToggleHelp","enabledHelp","focusSearch","focusFilter","onTogglePerfBar","findFileURL","findFile","toggleMarkdownPreview","toggleHelp","$modal","shortcuts_path","./shortcuts_dashboard_navigation.js","./syntax_highlight.js","syntaxHighlight","user_color_scheme","$children","./vue_shared/components/identicon.vue","entityId","entityName","sizeClass","identiconStyles","identiconTitle","./vue_shared/components/loading_icon.vue","inline","rootElementType","cssClass","aria-label","./vue_shared/translate.js","Vue","mixin","__","n__"],"mappings":"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Z,GAEAA,IAEAkB,aACAC,mBACA,OAEAC,gBACA,SAEAC,4BACA,YAEAC,uBACA,YAGAC,UACArU,SACA,WAEAsU,mBACA,KAEAC,mBACA,UAEAC,iBACA,QAEAC,uBACA,cAEAC,kBACA,SAEAC,eACA,MAEAC,iBACA,QAEAC,iBACA,QAEAC,mBACA,UAEAC,mBACA,UAEAC,oBACA,WAEAC,kBACA,MAEAC,iBACA,QAEAC,qBACA,YAEAC,oBACA,WAEAC,mBACA,UAEAC,sBACA,OAEAC,gBACA,OAEAC,cACA,YAEAC,aACA,UACA,OACA,UACA,UACA,QACA,IACA,MACA,MACA,OACA,OACA,UACA,KACA,MACA,KACA,KACA,aACA,SACA,SACA,SACA,IACA,MACA,OACA,MACA,WACA,KACA,KACA,OACA,IACA,OACA,UACA,QACA,SACA,MACA,UACA,MACA,IACA,MACA,OAEAC,kBACA,SAEAC,qBACA,YAEAC,iBACA,QAEAC,iBACA,QAEAC,kBACA,SAEAC,qBACA,YAEAC,eACA,MAEAC,iBACA,QAEAC,oBACA,KACA,KACA,KACA,KACA,KACA,MAEAC,iBACA,QAEAC,mBACA,UAEAC,kBACA,OAEAC,kBACA,SAEAC,mBACA,UAEAC,eACA,MAEAC,kBACA,SAEAC,mBACA,UAEAC,iBACA,QAEAC,gBACA,OAEAC,oBACA,WAEAC,kBACA,SAEAC,iBACA,QAEAC,qBACA,YAEAC,iBACA,QAEAC,kBACA,SAEAC,gBACA,MACA,OAEAC,kBACA,MAEAC,mBACA,UAEAC,qBACA,YAEAC,mBACA,UAEAC,mBACA,UAEAC,sBACA,KAEAC,kBACA,SAEAC,oBACA,WAEAC,gBACA,OAEAC,qBACA,YAEAC,kBACA,aACA,IACA,SAEAC,mBACA,UAEAC,mBACA,UAEAC,mBACA,UAEAC,iBACA,QAEAC,mBACA,UAEAC,iBACA,QAEAC,kBACA,SAEAC,yBACA,WAEAC,sBACA,KACA,MAEAC,qBACA,MACA,YAEAC,kBACA,SAEAC,qBACA,MAEAC,yBACA,QACA,QACA,SAEAC,qBACA,YAEAC,qBACA,YAEAC,iBACA,QA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","file":"main.9eed7cff0eeb3c1acabc.bundle.js","sourcesContent":["webpackJsonp([\"main\"],{\n\n/***/ \"../../../node_modules/autosize/dist/autosize.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\n\tAutosize 4.0.0\n\tlicense: MIT\n\thttp://www.jacklmoore.com/autosize\n*/\n(function (global, factory) {\n\tif (true) {\n\t\t!(__WEBPACK_AMD_DEFINE_ARRAY__ = [exports, module], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t} else if (typeof exports !== 'undefined' && typeof module !== 'undefined') {\n\t\tfactory(exports, module);\n\t} else {\n\t\tvar mod = {\n\t\t\texports: {}\n\t\t};\n\t\tfactory(mod.exports, mod);\n\t\tglobal.autosize = mod.exports;\n\t}\n})(this, function (exports, module) {\n\t'use strict';\n\n\tvar map = typeof Map === \"function\" ? new Map() : (function () {\n\t\tvar keys = [];\n\t\tvar values = [];\n\n\t\treturn {\n\t\t\thas: function has(key) {\n\t\t\t\treturn keys.indexOf(key) > -1;\n\t\t\t},\n\t\t\tget: function get(key) {\n\t\t\t\treturn values[keys.indexOf(key)];\n\t\t\t},\n\t\t\tset: function set(key, value) {\n\t\t\t\tif (keys.indexOf(key) === -1) {\n\t\t\t\t\tkeys.push(key);\n\t\t\t\t\tvalues.push(value);\n\t\t\t\t}\n\t\t\t},\n\t\t\t'delete': function _delete(key) {\n\t\t\t\tvar index = keys.indexOf(key);\n\t\t\t\tif (index > -1) {\n\t\t\t\t\tkeys.splice(index, 1);\n\t\t\t\t\tvalues.splice(index, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t})();\n\n\tvar createEvent = function createEvent(name) {\n\t\treturn new Event(name, { bubbles: true });\n\t};\n\ttry {\n\t\tnew Event('test');\n\t} catch (e) {\n\t\t// IE does not support `new Event()`\n\t\tcreateEvent = function (name) {\n\t\t\tvar evt = document.createEvent('Event');\n\t\t\tevt.initEvent(name, true, false);\n\t\t\treturn evt;\n\t\t};\n\t}\n\n\tfunction assign(ta) {\n\t\tif (!ta || !ta.nodeName || ta.nodeName !== 'TEXTAREA' || map.has(ta)) return;\n\n\t\tvar heightOffset = null;\n\t\tvar clientWidth = ta.clientWidth;\n\t\tvar cachedHeight = null;\n\n\t\tfunction init() {\n\t\t\tvar style = window.getComputedStyle(ta, null);\n\n\t\t\tif (style.resize === 'vertical') {\n\t\t\t\tta.style.resize = 'none';\n\t\t\t} else if (style.resize === 'both') {\n\t\t\t\tta.style.resize = 'horizontal';\n\t\t\t}\n\n\t\t\tif (style.boxSizing === 'content-box') {\n\t\t\t\theightOffset = -(parseFloat(style.paddingTop) + parseFloat(style.paddingBottom));\n\t\t\t} else {\n\t\t\t\theightOffset = parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth);\n\t\t\t}\n\t\t\t// Fix when a textarea is not on document body and heightOffset is Not a Number\n\t\t\tif (isNaN(heightOffset)) {\n\t\t\t\theightOffset = 0;\n\t\t\t}\n\n\t\t\tupdate();\n\t\t}\n\n\t\tfunction changeOverflow(value) {\n\t\t\t{\n\t\t\t\t// Chrome/Safari-specific fix:\n\t\t\t\t// When the textarea y-overflow is hidden, Chrome/Safari do not reflow the text to account for the space\n\t\t\t\t// made available by removing the scrollbar. The following forces the necessary text reflow.\n\t\t\t\tvar width = ta.style.width;\n\t\t\t\tta.style.width = '0px';\n\t\t\t\t// Force reflow:\n\t\t\t\t/* jshint ignore:start */\n\t\t\t\tta.offsetWidth;\n\t\t\t\t/* jshint ignore:end */\n\t\t\t\tta.style.width = width;\n\t\t\t}\n\n\t\t\tta.style.overflowY = value;\n\t\t}\n\n\t\tfunction getParentOverflows(el) {\n\t\t\tvar arr = [];\n\n\t\t\twhile (el && el.parentNode && el.parentNode instanceof Element) {\n\t\t\t\tif (el.parentNode.scrollTop) {\n\t\t\t\t\tarr.push({\n\t\t\t\t\t\tnode: el.parentNode,\n\t\t\t\t\t\tscrollTop: el.parentNode.scrollTop\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tel = el.parentNode;\n\t\t\t}\n\n\t\t\treturn arr;\n\t\t}\n\n\t\tfunction resize() {\n\t\t\tvar originalHeight = ta.style.height;\n\t\t\tvar overflows = getParentOverflows(ta);\n\t\t\tvar docTop = document.documentElement && document.documentElement.scrollTop; // Needed for Mobile IE (ticket #240)\n\n\t\t\tta.style.height = '';\n\n\t\t\tvar endHeight = ta.scrollHeight + heightOffset;\n\n\t\t\tif (ta.scrollHeight === 0) {\n\t\t\t\t// If the scrollHeight is 0, then the element probably has display:none or is detached from the DOM.\n\t\t\t\tta.style.height = originalHeight;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tta.style.height = endHeight + 'px';\n\n\t\t\t// used to check if an update is actually necessary on window.resize\n\t\t\tclientWidth = ta.clientWidth;\n\n\t\t\t// prevents scroll-position jumping\n\t\t\toverflows.forEach(function (el) {\n\t\t\t\tel.node.scrollTop = el.scrollTop;\n\t\t\t});\n\n\t\t\tif (docTop) {\n\t\t\t\tdocument.documentElement.scrollTop = docTop;\n\t\t\t}\n\t\t}\n\n\t\tfunction update() {\n\t\t\tresize();\n\n\t\t\tvar styleHeight = Math.round(parseFloat(ta.style.height));\n\t\t\tvar computed = window.getComputedStyle(ta, null);\n\n\t\t\t// Using offsetHeight as a replacement for computed.height in IE, because IE does not account use of border-box\n\t\t\tvar actualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(computed.height)) : ta.offsetHeight;\n\n\t\t\t// The actual height not matching the style height (set via the resize method) indicates that\n\t\t\t// the max-height has been exceeded, in which case the overflow should be allowed.\n\t\t\tif (actualHeight !== styleHeight) {\n\t\t\t\tif (computed.overflowY === 'hidden') {\n\t\t\t\t\tchangeOverflow('scroll');\n\t\t\t\t\tresize();\n\t\t\t\t\tactualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(window.getComputedStyle(ta, null).height)) : ta.offsetHeight;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Normally keep overflow set to hidden, to avoid flash of scrollbar as the textarea expands.\n\t\t\t\tif (computed.overflowY !== 'hidden') {\n\t\t\t\t\tchangeOverflow('hidden');\n\t\t\t\t\tresize();\n\t\t\t\t\tactualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(window.getComputedStyle(ta, null).height)) : ta.offsetHeight;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (cachedHeight !== actualHeight) {\n\t\t\t\tcachedHeight = actualHeight;\n\t\t\t\tvar evt = createEvent('autosize:resized');\n\t\t\t\ttry {\n\t\t\t\t\tta.dispatchEvent(evt);\n\t\t\t\t} catch (err) {\n\t\t\t\t\t// Firefox will throw an error on dispatchEvent for a detached element\n\t\t\t\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=889376\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvar pageResize = function pageResize() {\n\t\t\tif (ta.clientWidth !== clientWidth) {\n\t\t\t\tupdate();\n\t\t\t}\n\t\t};\n\n\t\tvar destroy = (function (style) {\n\t\t\twindow.removeEventListener('resize', pageResize, false);\n\t\t\tta.removeEventListener('input', update, false);\n\t\t\tta.removeEventListener('keyup', update, false);\n\t\t\tta.removeEventListener('autosize:destroy', destroy, false);\n\t\t\tta.removeEventListener('autosize:update', update, false);\n\n\t\t\tObject.keys(style).forEach(function (key) {\n\t\t\t\tta.style[key] = style[key];\n\t\t\t});\n\n\t\t\tmap['delete'](ta);\n\t\t}).bind(ta, {\n\t\t\theight: ta.style.height,\n\t\t\tresize: ta.style.resize,\n\t\t\toverflowY: ta.style.overflowY,\n\t\t\toverflowX: ta.style.overflowX,\n\t\t\twordWrap: ta.style.wordWrap\n\t\t});\n\n\t\tta.addEventListener('autosize:destroy', destroy, false);\n\n\t\t// IE9 does not fire onpropertychange or oninput for deletions,\n\t\t// so binding to onkeyup to catch most of those events.\n\t\t// There is no way that I know of to detect something like 'cut' in IE9.\n\t\tif ('onpropertychange' in ta && 'oninput' in ta) {\n\t\t\tta.addEventListener('keyup', update, false);\n\t\t}\n\n\t\twindow.addEventListener('resize', pageResize, false);\n\t\tta.addEventListener('input', update, false);\n\t\tta.addEventListener('autosize:update', update, false);\n\t\tta.style.overflowX = 'hidden';\n\t\tta.style.wordWrap = 'break-word';\n\n\t\tmap.set(ta, {\n\t\t\tdestroy: destroy,\n\t\t\tupdate: update\n\t\t});\n\n\t\tinit();\n\t}\n\n\tfunction destroy(ta) {\n\t\tvar methods = map.get(ta);\n\t\tif (methods) {\n\t\t\tmethods.destroy();\n\t\t}\n\t}\n\n\tfunction update(ta) {\n\t\tvar methods = map.get(ta);\n\t\tif (methods) {\n\t\t\tmethods.update();\n\t\t}\n\t}\n\n\tvar autosize = null;\n\n\t// Do nothing in Node.js environment and IE8 (or lower)\n\tif (typeof window === 'undefined' || typeof window.getComputedStyle !== 'function') {\n\t\tautosize = function (el) {\n\t\t\treturn el;\n\t\t};\n\t\tautosize.destroy = function (el) {\n\t\t\treturn el;\n\t\t};\n\t\tautosize.update = function (el) {\n\t\t\treturn el;\n\t\t};\n\t} else {\n\t\tautosize = function (el, options) {\n\t\t\tif (el) {\n\t\t\t\tArray.prototype.forEach.call(el.length ? el : [el], function (x) {\n\t\t\t\t\treturn assign(x, options);\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn el;\n\t\t};\n\t\tautosize.destroy = function (el) {\n\t\t\tif (el) {\n\t\t\t\tArray.prototype.forEach.call(el.length ? el : [el], destroy);\n\t\t\t}\n\t\t\treturn el;\n\t\t};\n\t\tautosize.update = function (el) {\n\t\t\tif (el) {\n\t\t\t\tArray.prototype.forEach.call(el.length ? el : [el], update);\n\t\t\t}\n\t\t\treturn el;\n\t\t};\n\t}\n\n\tmodule.exports = autosize;\n});\n\n/***/ }),\n\n/***/ \"../../../node_modules/clipboard/lib/clipboard-action.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {\n if (true) {\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [module, __webpack_require__(\"../../../node_modules/select/src/select.js\")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if (typeof exports !== \"undefined\") {\n factory(module, require('select'));\n } else {\n var mod = {\n exports: {}\n };\n factory(mod, global.select);\n global.clipboardAction = mod.exports;\n }\n})(this, function (module, _select) {\n 'use strict';\n\n var _select2 = _interopRequireDefault(_select);\n\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n }\n\n var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n var _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n\n var ClipboardAction = function () {\n /**\n * @param {Object} options\n */\n function ClipboardAction(options) {\n _classCallCheck(this, ClipboardAction);\n\n this.resolveOptions(options);\n this.initSelection();\n }\n\n /**\n * Defines base properties passed from constructor.\n * @param {Object} options\n */\n\n\n _createClass(ClipboardAction, [{\n key: 'resolveOptions',\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this.action = options.action;\n this.container = options.container;\n this.emitter = options.emitter;\n this.target = options.target;\n this.text = options.text;\n this.trigger = options.trigger;\n\n this.selectedText = '';\n }\n }, {\n key: 'initSelection',\n value: function initSelection() {\n if (this.text) {\n this.selectFake();\n } else if (this.target) {\n this.selectTarget();\n }\n }\n }, {\n key: 'selectFake',\n value: function selectFake() {\n var _this = this;\n\n var isRTL = document.documentElement.getAttribute('dir') == 'rtl';\n\n this.removeFake();\n\n this.fakeHandlerCallback = function () {\n return _this.removeFake();\n };\n this.fakeHandler = this.container.addEventListener('click', this.fakeHandlerCallback) || true;\n\n this.fakeElem = document.createElement('textarea');\n // Prevent zooming on iOS\n this.fakeElem.style.fontSize = '12pt';\n // Reset box model\n this.fakeElem.style.border = '0';\n this.fakeElem.style.padding = '0';\n this.fakeElem.style.margin = '0';\n // Move element out of screen horizontally\n this.fakeElem.style.position = 'absolute';\n this.fakeElem.style[isRTL ? 'right' : 'left'] = '-9999px';\n // Move element to the same position vertically\n var yPosition = window.pageYOffset || document.documentElement.scrollTop;\n this.fakeElem.style.top = yPosition + 'px';\n\n this.fakeElem.setAttribute('readonly', '');\n this.fakeElem.value = this.text;\n\n this.container.appendChild(this.fakeElem);\n\n this.selectedText = (0, _select2.default)(this.fakeElem);\n this.copyText();\n }\n }, {\n key: 'removeFake',\n value: function removeFake() {\n if (this.fakeHandler) {\n this.container.removeEventListener('click', this.fakeHandlerCallback);\n this.fakeHandler = null;\n this.fakeHandlerCallback = null;\n }\n\n if (this.fakeElem) {\n this.container.removeChild(this.fakeElem);\n this.fakeElem = null;\n }\n }\n }, {\n key: 'selectTarget',\n value: function selectTarget() {\n this.selectedText = (0, _select2.default)(this.target);\n this.copyText();\n }\n }, {\n key: 'copyText',\n value: function copyText() {\n var succeeded = void 0;\n\n try {\n succeeded = document.execCommand(this.action);\n } catch (err) {\n succeeded = false;\n }\n\n this.handleResult(succeeded);\n }\n }, {\n key: 'handleResult',\n value: function handleResult(succeeded) {\n this.emitter.emit(succeeded ? 'success' : 'error', {\n action: this.action,\n text: this.selectedText,\n trigger: this.trigger,\n clearSelection: this.clearSelection.bind(this)\n });\n }\n }, {\n key: 'clearSelection',\n value: function clearSelection() {\n if (this.trigger) {\n this.trigger.focus();\n }\n\n window.getSelection().removeAllRanges();\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this.removeFake();\n }\n }, {\n key: 'action',\n set: function set() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'copy';\n\n this._action = action;\n\n if (this._action !== 'copy' && this._action !== 'cut') {\n throw new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"');\n }\n },\n get: function get() {\n return this._action;\n }\n }, {\n key: 'target',\n set: function set(target) {\n if (target !== undefined) {\n if (target && (typeof target === 'undefined' ? 'undefined' : _typeof(target)) === 'object' && target.nodeType === 1) {\n if (this.action === 'copy' && target.hasAttribute('disabled')) {\n throw new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');\n }\n\n if (this.action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {\n throw new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');\n }\n\n this._target = target;\n } else {\n throw new Error('Invalid \"target\" value, use a valid Element');\n }\n }\n },\n get: function get() {\n return this._target;\n }\n }]);\n\n return ClipboardAction;\n }();\n\n module.exports = ClipboardAction;\n});\n\n/***/ }),\n\n/***/ \"../../../node_modules/clipboard/lib/clipboard.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {\n if (true) {\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [module, __webpack_require__(\"../../../node_modules/clipboard/lib/clipboard-action.js\"), __webpack_require__(\"../../../node_modules/tiny-emitter/index.js\"), __webpack_require__(\"../../../node_modules/good-listener/src/listen.js\")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if (typeof exports !== \"undefined\") {\n factory(module, require('./clipboard-action'), require('tiny-emitter'), require('good-listener'));\n } else {\n var mod = {\n exports: {}\n };\n factory(mod, global.clipboardAction, global.tinyEmitter, global.goodListener);\n global.clipboard = mod.exports;\n }\n})(this, function (module, _clipboardAction, _tinyEmitter, _goodListener) {\n 'use strict';\n\n var _clipboardAction2 = _interopRequireDefault(_clipboardAction);\n\n var _tinyEmitter2 = _interopRequireDefault(_tinyEmitter);\n\n var _goodListener2 = _interopRequireDefault(_goodListener);\n\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n }\n\n var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n var _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n\n function _possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n }\n\n function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n }\n\n var Clipboard = function (_Emitter) {\n _inherits(Clipboard, _Emitter);\n\n /**\n * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n * @param {Object} options\n */\n function Clipboard(trigger, options) {\n _classCallCheck(this, Clipboard);\n\n var _this = _possibleConstructorReturn(this, (Clipboard.__proto__ || Object.getPrototypeOf(Clipboard)).call(this));\n\n _this.resolveOptions(options);\n _this.listenClick(trigger);\n return _this;\n }\n\n /**\n * Defines if attributes would be resolved using internal setter functions\n * or custom functions that were passed in the constructor.\n * @param {Object} options\n */\n\n\n _createClass(Clipboard, [{\n key: 'resolveOptions',\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this.action = typeof options.action === 'function' ? options.action : this.defaultAction;\n this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;\n this.text = typeof options.text === 'function' ? options.text : this.defaultText;\n this.container = _typeof(options.container) === 'object' ? options.container : document.body;\n }\n }, {\n key: 'listenClick',\n value: function listenClick(trigger) {\n var _this2 = this;\n\n this.listener = (0, _goodListener2.default)(trigger, 'click', function (e) {\n return _this2.onClick(e);\n });\n }\n }, {\n key: 'onClick',\n value: function onClick(e) {\n var trigger = e.delegateTarget || e.currentTarget;\n\n if (this.clipboardAction) {\n this.clipboardAction = null;\n }\n\n this.clipboardAction = new _clipboardAction2.default({\n action: this.action(trigger),\n target: this.target(trigger),\n text: this.text(trigger),\n container: this.container,\n trigger: trigger,\n emitter: this\n });\n }\n }, {\n key: 'defaultAction',\n value: function defaultAction(trigger) {\n return getAttributeValue('action', trigger);\n }\n }, {\n key: 'defaultTarget',\n value: function defaultTarget(trigger) {\n var selector = getAttributeValue('target', trigger);\n\n if (selector) {\n return document.querySelector(selector);\n }\n }\n }, {\n key: 'defaultText',\n value: function defaultText(trigger) {\n return getAttributeValue('text', trigger);\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this.listener.destroy();\n\n if (this.clipboardAction) {\n this.clipboardAction.destroy();\n this.clipboardAction = null;\n }\n }\n }], [{\n key: 'isSupported',\n value: function isSupported() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];\n\n var actions = typeof action === 'string' ? [action] : action;\n var support = !!document.queryCommandSupported;\n\n actions.forEach(function (action) {\n support = support && !!document.queryCommandSupported(action);\n });\n\n return support;\n }\n }]);\n\n return Clipboard;\n }(_tinyEmitter2.default);\n\n /**\n * Helper function to retrieve attribute value.\n * @param {String} suffix\n * @param {Element} element\n */\n function getAttributeValue(suffix, element) {\n var attribute = 'data-clipboard-' + suffix;\n\n if (!element.hasAttribute(attribute)) {\n return;\n }\n\n return element.getAttribute(attribute);\n }\n\n module.exports = Clipboard;\n});\n\n/***/ }),\n\n/***/ \"../../../node_modules/delegate/src/closest.js\":\n/***/ (function(module, exports) {\n\nvar DOCUMENT_NODE_TYPE = 9;\n\n/**\n * A polyfill for Element.matches()\n */\nif (typeof Element !== 'undefined' && !Element.prototype.matches) {\n var proto = Element.prototype;\n\n proto.matches = proto.matchesSelector ||\n proto.mozMatchesSelector ||\n proto.msMatchesSelector ||\n proto.oMatchesSelector ||\n proto.webkitMatchesSelector;\n}\n\n/**\n * Finds the closest parent that matches a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @return {Function}\n */\nfunction closest (element, selector) {\n while (element && element.nodeType !== DOCUMENT_NODE_TYPE) {\n if (element.matches(selector)) return element;\n element = element.parentNode;\n }\n}\n\nmodule.exports = closest;\n\n\n/***/ }),\n\n/***/ \"../../../node_modules/delegate/src/delegate.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar closest = __webpack_require__(\"../../../node_modules/delegate/src/closest.js\");\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction delegate(element, selector, type, callback, useCapture) {\n var listenerFn = listener.apply(this, arguments);\n\n element.addEventListener(type, listenerFn, useCapture);\n\n return {\n destroy: function() {\n element.removeEventListener(type, listenerFn, useCapture);\n }\n }\n}\n\n/**\n * Finds closest match and invokes callback.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Function}\n */\nfunction listener(element, selector, type, callback) {\n return function(e) {\n e.delegateTarget = closest(e.target, selector);\n\n if (e.delegateTarget) {\n callback.call(element, e);\n }\n }\n}\n\nmodule.exports = delegate;\n\n\n/***/ }),\n\n/***/ \"../../../node_modules/document-register-element/build/document-register-element.node.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(global) {/*!\n\nCopyright (C) 2014-2016 by Andrea Giammarchi - @WebReflection\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n*/\n// global window Object\n// optional polyfill info\n// 'auto' used by default, everything is feature detected\n// 'force' use the polyfill even if not fully needed\nfunction installCustomElements(window, polyfill) {'use strict';\n\n // DO NOT USE THIS FILE DIRECTLY, IT WON'T WORK\n // THIS IS A PROJECT BASED ON A BUILD SYSTEM\n // THIS FILE IS JUST WRAPPED UP RESULTING IN\n // build/document-register-element.node.js\n\n var\n document = window.document,\n Object = window.Object\n ;\n\n var htmlClass = (function (info) {\n // (C) Andrea Giammarchi - @WebReflection - MIT Style\n var\n catchClass = /^[A-Z]+[a-z]/,\n filterBy = function (re) {\n var arr = [], tag;\n for (tag in register) {\n if (re.test(tag)) arr.push(tag);\n }\n return arr;\n },\n add = function (Class, tag) {\n tag = tag.toLowerCase();\n if (!(tag in register)) {\n register[Class] = (register[Class] || []).concat(tag);\n register[tag] = (register[tag.toUpperCase()] = Class);\n }\n },\n register = (Object.create || Object)(null),\n htmlClass = {},\n i, section, tags, Class\n ;\n for (section in info) {\n for (Class in info[section]) {\n tags = info[section][Class];\n register[Class] = tags;\n for (i = 0; i < tags.length; i++) {\n register[tags[i].toLowerCase()] =\n register[tags[i].toUpperCase()] = Class;\n }\n }\n }\n htmlClass.get = function get(tagOrClass) {\n return typeof tagOrClass === 'string' ?\n (register[tagOrClass] || (catchClass.test(tagOrClass) ? [] : '')) :\n filterBy(tagOrClass);\n };\n htmlClass.set = function set(tag, Class) {\n return (catchClass.test(tag) ?\n add(tag, Class) :\n add(Class, tag)\n ), htmlClass;\n };\n return htmlClass;\n }({\n \"collections\": {\n \"HTMLAllCollection\": [\n \"all\"\n ],\n \"HTMLCollection\": [\n \"forms\"\n ],\n \"HTMLFormControlsCollection\": [\n \"elements\"\n ],\n \"HTMLOptionsCollection\": [\n \"options\"\n ]\n },\n \"elements\": {\n \"Element\": [\n \"element\"\n ],\n \"HTMLAnchorElement\": [\n \"a\"\n ],\n \"HTMLAppletElement\": [\n \"applet\"\n ],\n \"HTMLAreaElement\": [\n \"area\"\n ],\n \"HTMLAttachmentElement\": [\n \"attachment\"\n ],\n \"HTMLAudioElement\": [\n \"audio\"\n ],\n \"HTMLBRElement\": [\n \"br\"\n ],\n \"HTMLBaseElement\": [\n \"base\"\n ],\n \"HTMLBodyElement\": [\n \"body\"\n ],\n \"HTMLButtonElement\": [\n \"button\"\n ],\n \"HTMLCanvasElement\": [\n \"canvas\"\n ],\n \"HTMLContentElement\": [\n \"content\"\n ],\n \"HTMLDListElement\": [\n \"dl\"\n ],\n \"HTMLDataElement\": [\n \"data\"\n ],\n \"HTMLDataListElement\": [\n \"datalist\"\n ],\n \"HTMLDetailsElement\": [\n \"details\"\n ],\n \"HTMLDialogElement\": [\n \"dialog\"\n ],\n \"HTMLDirectoryElement\": [\n \"dir\"\n ],\n \"HTMLDivElement\": [\n \"div\"\n ],\n \"HTMLDocument\": [\n \"document\"\n ],\n \"HTMLElement\": [\n \"element\",\n \"abbr\",\n \"address\",\n \"article\",\n \"aside\",\n \"b\",\n \"bdi\",\n \"bdo\",\n \"cite\",\n \"code\",\n \"command\",\n \"dd\",\n \"dfn\",\n \"dt\",\n \"em\",\n \"figcaption\",\n \"figure\",\n \"footer\",\n \"header\",\n \"i\",\n \"kbd\",\n \"mark\",\n \"nav\",\n \"noscript\",\n \"rp\",\n \"rt\",\n \"ruby\",\n \"s\",\n \"samp\",\n \"section\",\n \"small\",\n \"strong\",\n \"sub\",\n \"summary\",\n \"sup\",\n \"u\",\n \"var\",\n \"wbr\"\n ],\n \"HTMLEmbedElement\": [\n \"embed\"\n ],\n \"HTMLFieldSetElement\": [\n \"fieldset\"\n ],\n \"HTMLFontElement\": [\n \"font\"\n ],\n \"HTMLFormElement\": [\n \"form\"\n ],\n \"HTMLFrameElement\": [\n \"frame\"\n ],\n \"HTMLFrameSetElement\": [\n \"frameset\"\n ],\n \"HTMLHRElement\": [\n \"hr\"\n ],\n \"HTMLHeadElement\": [\n \"head\"\n ],\n \"HTMLHeadingElement\": [\n \"h1\",\n \"h2\",\n \"h3\",\n \"h4\",\n \"h5\",\n \"h6\"\n ],\n \"HTMLHtmlElement\": [\n \"html\"\n ],\n \"HTMLIFrameElement\": [\n \"iframe\"\n ],\n \"HTMLImageElement\": [\n \"img\"\n ],\n \"HTMLInputElement\": [\n \"input\"\n ],\n \"HTMLKeygenElement\": [\n \"keygen\"\n ],\n \"HTMLLIElement\": [\n \"li\"\n ],\n \"HTMLLabelElement\": [\n \"label\"\n ],\n \"HTMLLegendElement\": [\n \"legend\"\n ],\n \"HTMLLinkElement\": [\n \"link\"\n ],\n \"HTMLMapElement\": [\n \"map\"\n ],\n \"HTMLMarqueeElement\": [\n \"marquee\"\n ],\n \"HTMLMediaElement\": [\n \"media\"\n ],\n \"HTMLMenuElement\": [\n \"menu\"\n ],\n \"HTMLMenuItemElement\": [\n \"menuitem\"\n ],\n \"HTMLMetaElement\": [\n \"meta\"\n ],\n \"HTMLMeterElement\": [\n \"meter\"\n ],\n \"HTMLModElement\": [\n \"del\",\n \"ins\"\n ],\n \"HTMLOListElement\": [\n \"ol\"\n ],\n \"HTMLObjectElement\": [\n \"object\"\n ],\n \"HTMLOptGroupElement\": [\n \"optgroup\"\n ],\n \"HTMLOptionElement\": [\n \"option\"\n ],\n \"HTMLOutputElement\": [\n \"output\"\n ],\n \"HTMLParagraphElement\": [\n \"p\"\n ],\n \"HTMLParamElement\": [\n \"param\"\n ],\n \"HTMLPictureElement\": [\n \"picture\"\n ],\n \"HTMLPreElement\": [\n \"pre\"\n ],\n \"HTMLProgressElement\": [\n \"progress\"\n ],\n \"HTMLQuoteElement\": [\n \"blockquote\",\n \"q\",\n \"quote\"\n ],\n \"HTMLScriptElement\": [\n \"script\"\n ],\n \"HTMLSelectElement\": [\n \"select\"\n ],\n \"HTMLShadowElement\": [\n \"shadow\"\n ],\n \"HTMLSlotElement\": [\n \"slot\"\n ],\n \"HTMLSourceElement\": [\n \"source\"\n ],\n \"HTMLSpanElement\": [\n \"span\"\n ],\n \"HTMLStyleElement\": [\n \"style\"\n ],\n \"HTMLTableCaptionElement\": [\n \"caption\"\n ],\n \"HTMLTableCellElement\": [\n \"td\",\n \"th\"\n ],\n \"HTMLTableColElement\": [\n \"col\",\n \"colgroup\"\n ],\n \"HTMLTableElement\": [\n \"table\"\n ],\n \"HTMLTableRowElement\": [\n \"tr\"\n ],\n \"HTMLTableSectionElement\": [\n \"thead\",\n \"tbody\",\n \"tfoot\"\n ],\n \"HTMLTemplateElement\": [\n \"template\"\n ],\n \"HTMLTextAreaElement\": [\n \"textarea\"\n ],\n \"HTMLTimeElement\": [\n \"time\"\n ],\n \"HTMLTitleElement\": [\n \"title\"\n ],\n \"HTMLTrackElement\": [\n \"track\"\n ],\n \"HTMLUListElement\": [\n \"ul\"\n ],\n \"HTMLUnknownElement\": [\n \"unknown\",\n \"vhgroupv\",\n \"vkeygen\"\n ],\n \"HTMLVideoElement\": [\n \"video\"\n ]\n },\n \"nodes\": {\n \"Attr\": [\n \"node\"\n ],\n \"Audio\": [\n \"audio\"\n ],\n \"CDATASection\": [\n \"node\"\n ],\n \"CharacterData\": [\n \"node\"\n ],\n \"Comment\": [\n \"#comment\"\n ],\n \"Document\": [\n \"#document\"\n ],\n \"DocumentFragment\": [\n \"#document-fragment\"\n ],\n \"DocumentType\": [\n \"node\"\n ],\n \"HTMLDocument\": [\n \"#document\"\n ],\n \"Image\": [\n \"img\"\n ],\n \"Option\": [\n \"option\"\n ],\n \"ProcessingInstruction\": [\n \"node\"\n ],\n \"ShadowRoot\": [\n \"#shadow-root\"\n ],\n \"Text\": [\n \"#text\"\n ],\n \"XMLDocument\": [\n \"xml\"\n ]\n }\n }));\n \n \n \n // passed at runtime, configurable\n // via nodejs module\n if (!polyfill) polyfill = 'auto';\n \n var\n // V0 polyfill entry\n REGISTER_ELEMENT = 'registerElement',\n \n // IE < 11 only + old WebKit for attributes + feature detection\n EXPANDO_UID = '__' + REGISTER_ELEMENT + (window.Math.random() * 10e4 >> 0),\n \n // shortcuts and costants\n ADD_EVENT_LISTENER = 'addEventListener',\n ATTACHED = 'attached',\n CALLBACK = 'Callback',\n DETACHED = 'detached',\n EXTENDS = 'extends',\n \n ATTRIBUTE_CHANGED_CALLBACK = 'attributeChanged' + CALLBACK,\n ATTACHED_CALLBACK = ATTACHED + CALLBACK,\n CONNECTED_CALLBACK = 'connected' + CALLBACK,\n DISCONNECTED_CALLBACK = 'disconnected' + CALLBACK,\n CREATED_CALLBACK = 'created' + CALLBACK,\n DETACHED_CALLBACK = DETACHED + CALLBACK,\n \n ADDITION = 'ADDITION',\n MODIFICATION = 'MODIFICATION',\n REMOVAL = 'REMOVAL',\n \n DOM_ATTR_MODIFIED = 'DOMAttrModified',\n DOM_CONTENT_LOADED = 'DOMContentLoaded',\n DOM_SUBTREE_MODIFIED = 'DOMSubtreeModified',\n \n PREFIX_TAG = '<',\n PREFIX_IS = '=',\n \n // valid and invalid node names\n validName = /^[A-Z][A-Z0-9]*(?:-[A-Z0-9]+)+$/,\n invalidNames = [\n 'ANNOTATION-XML',\n 'COLOR-PROFILE',\n 'FONT-FACE',\n 'FONT-FACE-SRC',\n 'FONT-FACE-URI',\n 'FONT-FACE-FORMAT',\n 'FONT-FACE-NAME',\n 'MISSING-GLYPH'\n ],\n \n // registered types and their prototypes\n types = [],\n protos = [],\n \n // to query subnodes\n query = '',\n \n // html shortcut used to feature detect\n documentElement = document.documentElement,\n \n // ES5 inline helpers || basic patches\n indexOf = types.indexOf || function (v) {\n for(var i = this.length; i-- && this[i] !== v;){}\n return i;\n },\n \n // other helpers / shortcuts\n OP = Object.prototype,\n hOP = OP.hasOwnProperty,\n iPO = OP.isPrototypeOf,\n \n defineProperty = Object.defineProperty,\n empty = [],\n gOPD = Object.getOwnPropertyDescriptor,\n gOPN = Object.getOwnPropertyNames,\n gPO = Object.getPrototypeOf,\n sPO = Object.setPrototypeOf,\n \n // jshint proto: true\n hasProto = !!Object.__proto__,\n \n // V1 helpers\n fixGetClass = false,\n DRECEV1 = '__dreCEv1',\n customElements = window.customElements,\n usableCustomElements = polyfill !== 'force' && !!(\n customElements &&\n customElements.define &&\n customElements.get &&\n customElements.whenDefined\n ),\n Dict = Object.create || Object,\n Map = window.Map || function Map() {\n var K = [], V = [], i;\n return {\n get: function (k) {\n return V[indexOf.call(K, k)];\n },\n set: function (k, v) {\n i = indexOf.call(K, k);\n if (i < 0) V[K.push(k) - 1] = v;\n else V[i] = v;\n }\n };\n },\n Promise = window.Promise || function (fn) {\n var\n notify = [],\n done = false,\n p = {\n 'catch': function () {\n return p;\n },\n 'then': function (cb) {\n notify.push(cb);\n if (done) setTimeout(resolve, 1);\n return p;\n }\n }\n ;\n function resolve(value) {\n done = true;\n while (notify.length) notify.shift()(value);\n }\n fn(resolve);\n return p;\n },\n justCreated = false,\n constructors = Dict(null),\n waitingList = Dict(null),\n nodeNames = new Map(),\n secondArgument = String,\n \n // used to create unique instances\n create = Object.create || function Bridge(proto) {\n // silly broken polyfill probably ever used but short enough to work\n return proto ? ((Bridge.prototype = proto), new Bridge()) : this;\n },\n \n // will set the prototype if possible\n // or copy over all properties\n setPrototype = sPO || (\n hasProto ?\n function (o, p) {\n o.__proto__ = p;\n return o;\n } : (\n (gOPN && gOPD) ?\n (function(){\n function setProperties(o, p) {\n for (var\n key,\n names = gOPN(p),\n i = 0, length = names.length;\n i < length; i++\n ) {\n key = names[i];\n if (!hOP.call(o, key)) {\n defineProperty(o, key, gOPD(p, key));\n }\n }\n }\n return function (o, p) {\n do {\n setProperties(o, p);\n } while ((p = gPO(p)) && !iPO.call(p, o));\n return o;\n };\n }()) :\n function (o, p) {\n for (var key in p) {\n o[key] = p[key];\n }\n return o;\n }\n )),\n \n // DOM shortcuts and helpers, if any\n \n MutationObserver = window.MutationObserver ||\n window.WebKitMutationObserver,\n \n HTMLElementPrototype = (\n window.HTMLElement ||\n window.Element ||\n window.Node\n ).prototype,\n \n IE8 = !iPO.call(HTMLElementPrototype, documentElement),\n \n safeProperty = IE8 ? function (o, k, d) {\n o[k] = d.value;\n return o;\n } : defineProperty,\n \n isValidNode = IE8 ?\n function (node) {\n return node.nodeType === 1;\n } :\n function (node) {\n return iPO.call(HTMLElementPrototype, node);\n },\n \n targets = IE8 && [],\n \n attachShadow = HTMLElementPrototype.attachShadow,\n cloneNode = HTMLElementPrototype.cloneNode,\n dispatchEvent = HTMLElementPrototype.dispatchEvent,\n getAttribute = HTMLElementPrototype.getAttribute,\n hasAttribute = HTMLElementPrototype.hasAttribute,\n removeAttribute = HTMLElementPrototype.removeAttribute,\n setAttribute = HTMLElementPrototype.setAttribute,\n \n // replaced later on\n createElement = document.createElement,\n patchedCreateElement = createElement,\n \n // shared observer for all attributes\n attributesObserver = MutationObserver && {\n attributes: true,\n characterData: true,\n attributeOldValue: true\n },\n \n // useful to detect only if there's no MutationObserver\n DOMAttrModified = MutationObserver || function(e) {\n doesNotSupportDOMAttrModified = false;\n documentElement.removeEventListener(\n DOM_ATTR_MODIFIED,\n DOMAttrModified\n );\n },\n \n // will both be used to make DOMNodeInserted asynchronous\n asapQueue,\n asapTimer = 0,\n \n // internal flags\n setListener = false,\n doesNotSupportDOMAttrModified = true,\n dropDomContentLoaded = true,\n \n // needed for the innerHTML helper\n notFromInnerHTMLHelper = true,\n \n // optionally defined later on\n onSubtreeModified,\n callDOMAttrModified,\n getAttributesMirror,\n observer,\n observe,\n \n // based on setting prototype capability\n // will check proto or the expando attribute\n // in order to setup the node once\n patchIfNotAlready,\n patch\n ;\n \n // only if needed\n if (!(REGISTER_ELEMENT in document)) {\n \n if (sPO || hasProto) {\n patchIfNotAlready = function (node, proto) {\n if (!iPO.call(proto, node)) {\n setupNode(node, proto);\n }\n };\n patch = setupNode;\n } else {\n patchIfNotAlready = function (node, proto) {\n if (!node[EXPANDO_UID]) {\n node[EXPANDO_UID] = Object(true);\n setupNode(node, proto);\n }\n };\n patch = patchIfNotAlready;\n }\n \n if (IE8) {\n doesNotSupportDOMAttrModified = false;\n (function (){\n var\n descriptor = gOPD(HTMLElementPrototype, ADD_EVENT_LISTENER),\n addEventListener = descriptor.value,\n patchedRemoveAttribute = function (name) {\n var e = new CustomEvent(DOM_ATTR_MODIFIED, {bubbles: true});\n e.attrName = name;\n e.prevValue = getAttribute.call(this, name);\n e.newValue = null;\n e[REMOVAL] = e.attrChange = 2;\n removeAttribute.call(this, name);\n dispatchEvent.call(this, e);\n },\n patchedSetAttribute = function (name, value) {\n var\n had = hasAttribute.call(this, name),\n old = had && getAttribute.call(this, name),\n e = new CustomEvent(DOM_ATTR_MODIFIED, {bubbles: true})\n ;\n setAttribute.call(this, name, value);\n e.attrName = name;\n e.prevValue = had ? old : null;\n e.newValue = value;\n if (had) {\n e[MODIFICATION] = e.attrChange = 1;\n } else {\n e[ADDITION] = e.attrChange = 0;\n }\n dispatchEvent.call(this, e);\n },\n onPropertyChange = function (e) {\n // jshint eqnull:true\n var\n node = e.currentTarget,\n superSecret = node[EXPANDO_UID],\n propertyName = e.propertyName,\n event\n ;\n if (superSecret.hasOwnProperty(propertyName)) {\n superSecret = superSecret[propertyName];\n event = new CustomEvent(DOM_ATTR_MODIFIED, {bubbles: true});\n event.attrName = superSecret.name;\n event.prevValue = superSecret.value || null;\n event.newValue = (superSecret.value = node[propertyName] || null);\n if (event.prevValue == null) {\n event[ADDITION] = event.attrChange = 0;\n } else {\n event[MODIFICATION] = event.attrChange = 1;\n }\n dispatchEvent.call(node, event);\n }\n }\n ;\n descriptor.value = function (type, handler, capture) {\n if (\n type === DOM_ATTR_MODIFIED &&\n this[ATTRIBUTE_CHANGED_CALLBACK] &&\n this.setAttribute !== patchedSetAttribute\n ) {\n this[EXPANDO_UID] = {\n className: {\n name: 'class',\n value: this.className\n }\n };\n this.setAttribute = patchedSetAttribute;\n this.removeAttribute = patchedRemoveAttribute;\n addEventListener.call(this, 'propertychange', onPropertyChange);\n }\n addEventListener.call(this, type, handler, capture);\n };\n defineProperty(HTMLElementPrototype, ADD_EVENT_LISTENER, descriptor);\n }());\n } else if (!MutationObserver) {\n documentElement[ADD_EVENT_LISTENER](DOM_ATTR_MODIFIED, DOMAttrModified);\n documentElement.setAttribute(EXPANDO_UID, 1);\n documentElement.removeAttribute(EXPANDO_UID);\n if (doesNotSupportDOMAttrModified) {\n onSubtreeModified = function (e) {\n var\n node = this,\n oldAttributes,\n newAttributes,\n key\n ;\n if (node === e.target) {\n oldAttributes = node[EXPANDO_UID];\n node[EXPANDO_UID] = (newAttributes = getAttributesMirror(node));\n for (key in newAttributes) {\n if (!(key in oldAttributes)) {\n // attribute was added\n return callDOMAttrModified(\n 0,\n node,\n key,\n oldAttributes[key],\n newAttributes[key],\n ADDITION\n );\n } else if (newAttributes[key] !== oldAttributes[key]) {\n // attribute was changed\n return callDOMAttrModified(\n 1,\n node,\n key,\n oldAttributes[key],\n newAttributes[key],\n MODIFICATION\n );\n }\n }\n // checking if it has been removed\n for (key in oldAttributes) {\n if (!(key in newAttributes)) {\n // attribute removed\n return callDOMAttrModified(\n 2,\n node,\n key,\n oldAttributes[key],\n newAttributes[key],\n REMOVAL\n );\n }\n }\n }\n };\n callDOMAttrModified = function (\n attrChange,\n currentTarget,\n attrName,\n prevValue,\n newValue,\n action\n ) {\n var e = {\n attrChange: attrChange,\n currentTarget: currentTarget,\n attrName: attrName,\n prevValue: prevValue,\n newValue: newValue\n };\n e[action] = attrChange;\n onDOMAttrModified(e);\n };\n getAttributesMirror = function (node) {\n for (var\n attr, name,\n result = {},\n attributes = node.attributes,\n i = 0, length = attributes.length;\n i < length; i++\n ) {\n attr = attributes[i];\n name = attr.name;\n if (name !== 'setAttribute') {\n result[name] = attr.value;\n }\n }\n return result;\n };\n }\n }\n \n // set as enumerable, writable and configurable\n document[REGISTER_ELEMENT] = function registerElement(type, options) {\n upperType = type.toUpperCase();\n if (!setListener) {\n // only first time document.registerElement is used\n // we need to set this listener\n // setting it by default might slow down for no reason\n setListener = true;\n if (MutationObserver) {\n observer = (function(attached, detached){\n function checkEmAll(list, callback) {\n for (var i = 0, length = list.length; i < length; callback(list[i++])){}\n }\n return new MutationObserver(function (records) {\n for (var\n current, node, newValue,\n i = 0, length = records.length; i < length; i++\n ) {\n current = records[i];\n if (current.type === 'childList') {\n checkEmAll(current.addedNodes, attached);\n checkEmAll(current.removedNodes, detached);\n } else {\n node = current.target;\n if (notFromInnerHTMLHelper &&\n node[ATTRIBUTE_CHANGED_CALLBACK] &&\n current.attributeName !== 'style') {\n newValue = getAttribute.call(node, current.attributeName);\n if (newValue !== current.oldValue) {\n node[ATTRIBUTE_CHANGED_CALLBACK](\n current.attributeName,\n current.oldValue,\n newValue\n );\n }\n }\n }\n }\n });\n }(executeAction(ATTACHED), executeAction(DETACHED)));\n observe = function (node) {\n observer.observe(\n node,\n {\n childList: true,\n subtree: true\n }\n );\n return node;\n };\n observe(document);\n if (attachShadow) {\n HTMLElementPrototype.attachShadow = function () {\n return observe(attachShadow.apply(this, arguments));\n };\n }\n } else {\n asapQueue = [];\n document[ADD_EVENT_LISTENER]('DOMNodeInserted', onDOMNode(ATTACHED));\n document[ADD_EVENT_LISTENER]('DOMNodeRemoved', onDOMNode(DETACHED));\n }\n \n document[ADD_EVENT_LISTENER](DOM_CONTENT_LOADED, onReadyStateChange);\n document[ADD_EVENT_LISTENER]('readystatechange', onReadyStateChange);\n \n HTMLElementPrototype.cloneNode = function (deep) {\n var\n node = cloneNode.call(this, !!deep),\n i = getTypeIndex(node)\n ;\n if (-1 < i) patch(node, protos[i]);\n if (deep) loopAndSetup(node.querySelectorAll(query));\n return node;\n };\n }\n \n if (-2 < (\n indexOf.call(types, PREFIX_IS + upperType) +\n indexOf.call(types, PREFIX_TAG + upperType)\n )) {\n throwTypeError(type);\n }\n \n if (!validName.test(upperType) || -1 < indexOf.call(invalidNames, upperType)) {\n throw new Error('The type ' + type + ' is invalid');\n }\n \n var\n constructor = function () {\n return extending ?\n document.createElement(nodeName, upperType) :\n document.createElement(nodeName);\n },\n opt = options || OP,\n extending = hOP.call(opt, EXTENDS),\n nodeName = extending ? options[EXTENDS].toUpperCase() : upperType,\n upperType,\n i\n ;\n \n if (extending && -1 < (\n indexOf.call(types, PREFIX_TAG + nodeName)\n )) {\n throwTypeError(nodeName);\n }\n \n i = types.push((extending ? PREFIX_IS : PREFIX_TAG) + upperType) - 1;\n \n query = query.concat(\n query.length ? ',' : '',\n extending ? nodeName + '[is=\"' + type.toLowerCase() + '\"]' : nodeName\n );\n \n constructor.prototype = (\n protos[i] = hOP.call(opt, 'prototype') ?\n opt.prototype :\n create(HTMLElementPrototype)\n );\n \n loopAndVerify(\n document.querySelectorAll(query),\n ATTACHED\n );\n \n return constructor;\n };\n \n document.createElement = (patchedCreateElement = function (localName, typeExtension) {\n var\n is = getIs(typeExtension),\n node = is ?\n createElement.call(document, localName, secondArgument(is)) :\n createElement.call(document, localName),\n name = '' + localName,\n i = indexOf.call(\n types,\n (is ? PREFIX_IS : PREFIX_TAG) +\n (is || name).toUpperCase()\n ),\n setup = -1 < i\n ;\n if (is) {\n node.setAttribute('is', is = is.toLowerCase());\n if (setup) {\n setup = isInQSA(name.toUpperCase(), is);\n }\n }\n notFromInnerHTMLHelper = !document.createElement.innerHTMLHelper;\n if (setup) patch(node, protos[i]);\n return node;\n });\n \n }\n \n function ASAP() {\n var queue = asapQueue.splice(0, asapQueue.length);\n asapTimer = 0;\n while (queue.length) {\n queue.shift().call(\n null, queue.shift()\n );\n }\n }\n \n function loopAndVerify(list, action) {\n for (var i = 0, length = list.length; i < length; i++) {\n verifyAndSetupAndAction(list[i], action);\n }\n }\n \n function loopAndSetup(list) {\n for (var i = 0, length = list.length, node; i < length; i++) {\n node = list[i];\n patch(node, protos[getTypeIndex(node)]);\n }\n }\n \n function executeAction(action) {\n return function (node) {\n if (isValidNode(node)) {\n verifyAndSetupAndAction(node, action);\n loopAndVerify(\n node.querySelectorAll(query),\n action\n );\n }\n };\n }\n \n function getTypeIndex(target) {\n var\n is = getAttribute.call(target, 'is'),\n nodeName = target.nodeName.toUpperCase(),\n i = indexOf.call(\n types,\n is ?\n PREFIX_IS + is.toUpperCase() :\n PREFIX_TAG + nodeName\n )\n ;\n return is && -1 < i && !isInQSA(nodeName, is) ? -1 : i;\n }\n \n function isInQSA(name, type) {\n return -1 < query.indexOf(name + '[is=\"' + type + '\"]');\n }\n \n function onDOMAttrModified(e) {\n var\n node = e.currentTarget,\n attrChange = e.attrChange,\n attrName = e.attrName,\n target = e.target,\n addition = e[ADDITION] || 2,\n removal = e[REMOVAL] || 3\n ;\n if (notFromInnerHTMLHelper &&\n (!target || target === node) &&\n node[ATTRIBUTE_CHANGED_CALLBACK] &&\n attrName !== 'style' && (\n e.prevValue !== e.newValue ||\n // IE9, IE10, and Opera 12 gotcha\n e.newValue === '' && (\n attrChange === addition ||\n attrChange === removal\n )\n )) {\n node[ATTRIBUTE_CHANGED_CALLBACK](\n attrName,\n attrChange === addition ? null : e.prevValue,\n attrChange === removal ? null : e.newValue\n );\n }\n }\n \n function onDOMNode(action) {\n var executor = executeAction(action);\n return function (e) {\n asapQueue.push(executor, e.target);\n if (asapTimer) clearTimeout(asapTimer);\n asapTimer = setTimeout(ASAP, 1);\n };\n }\n \n function onReadyStateChange(e) {\n if (dropDomContentLoaded) {\n dropDomContentLoaded = false;\n e.currentTarget.removeEventListener(DOM_CONTENT_LOADED, onReadyStateChange);\n }\n loopAndVerify(\n (e.target || document).querySelectorAll(query),\n e.detail === DETACHED ? DETACHED : ATTACHED\n );\n if (IE8) purge();\n }\n \n function patchedSetAttribute(name, value) {\n // jshint validthis:true\n var self = this;\n setAttribute.call(self, name, value);\n onSubtreeModified.call(self, {target: self});\n }\n \n function setupNode(node, proto) {\n setPrototype(node, proto);\n if (observer) {\n observer.observe(node, attributesObserver);\n } else {\n if (doesNotSupportDOMAttrModified) {\n node.setAttribute = patchedSetAttribute;\n node[EXPANDO_UID] = getAttributesMirror(node);\n node[ADD_EVENT_LISTENER](DOM_SUBTREE_MODIFIED, onSubtreeModified);\n }\n node[ADD_EVENT_LISTENER](DOM_ATTR_MODIFIED, onDOMAttrModified);\n }\n if (node[CREATED_CALLBACK] && notFromInnerHTMLHelper) {\n node.created = true;\n node[CREATED_CALLBACK]();\n node.created = false;\n }\n }\n \n function purge() {\n for (var\n node,\n i = 0,\n length = targets.length;\n i < length; i++\n ) {\n node = targets[i];\n if (!documentElement.contains(node)) {\n length--;\n targets.splice(i--, 1);\n verifyAndSetupAndAction(node, DETACHED);\n }\n }\n }\n \n function throwTypeError(type) {\n throw new Error('A ' + type + ' type is already registered');\n }\n \n function verifyAndSetupAndAction(node, action) {\n var\n fn,\n i = getTypeIndex(node)\n ;\n if (-1 < i) {\n patchIfNotAlready(node, protos[i]);\n i = 0;\n if (action === ATTACHED && !node[ATTACHED]) {\n node[DETACHED] = false;\n node[ATTACHED] = true;\n i = 1;\n if (IE8 && indexOf.call(targets, node) < 0) {\n targets.push(node);\n }\n } else if (action === DETACHED && !node[DETACHED]) {\n node[ATTACHED] = false;\n node[DETACHED] = true;\n i = 1;\n }\n if (i && (fn = node[action + CALLBACK])) fn.call(node);\n }\n }\n \n \n \n // V1 in da House!\n function CustomElementRegistry() {}\n \n CustomElementRegistry.prototype = {\n constructor: CustomElementRegistry,\n // a workaround for the stubborn WebKit\n define: usableCustomElements ?\n function (name, Class, options) {\n if (options) {\n CERDefine(name, Class, options);\n } else {\n var NAME = name.toUpperCase();\n constructors[NAME] = {\n constructor: Class,\n create: [NAME]\n };\n nodeNames.set(Class, NAME);\n customElements.define(name, Class);\n }\n } :\n CERDefine,\n get: usableCustomElements ?\n function (name) {\n return customElements.get(name) || get(name);\n } :\n get,\n whenDefined: usableCustomElements ?\n function (name) {\n return Promise.race([\n customElements.whenDefined(name),\n whenDefined(name)\n ]);\n } :\n whenDefined\n };\n \n function CERDefine(name, Class, options) {\n var\n is = options && options[EXTENDS] || '',\n CProto = Class.prototype,\n proto = create(CProto),\n attributes = Class.observedAttributes || empty,\n definition = {prototype: proto}\n ;\n // TODO: is this needed at all since it's inherited?\n // defineProperty(proto, 'constructor', {value: Class});\n safeProperty(proto, CREATED_CALLBACK, {\n value: function () {\n if (justCreated) justCreated = false;\n else if (!this[DRECEV1]) {\n this[DRECEV1] = true;\n new Class(this);\n if (CProto[CREATED_CALLBACK])\n CProto[CREATED_CALLBACK].call(this);\n var info = constructors[nodeNames.get(Class)];\n if (!usableCustomElements || info.create.length > 1) {\n notifyAttributes(this);\n }\n }\n }\n });\n safeProperty(proto, ATTRIBUTE_CHANGED_CALLBACK, {\n value: function (name) {\n if (-1 < indexOf.call(attributes, name))\n CProto[ATTRIBUTE_CHANGED_CALLBACK].apply(this, arguments);\n }\n });\n if (CProto[CONNECTED_CALLBACK]) {\n safeProperty(proto, ATTACHED_CALLBACK, {\n value: CProto[CONNECTED_CALLBACK]\n });\n }\n if (CProto[DISCONNECTED_CALLBACK]) {\n safeProperty(proto, DETACHED_CALLBACK, {\n value: CProto[DISCONNECTED_CALLBACK]\n });\n }\n if (is) definition[EXTENDS] = is;\n name = name.toUpperCase();\n constructors[name] = {\n constructor: Class,\n create: is ? [is, secondArgument(name)] : [name]\n };\n nodeNames.set(Class, name);\n document[REGISTER_ELEMENT](name.toLowerCase(), definition);\n whenDefined(name);\n waitingList[name].r();\n }\n \n function get(name) {\n var info = constructors[name.toUpperCase()];\n return info && info.constructor;\n }\n \n function getIs(options) {\n return typeof options === 'string' ?\n options : (options && options.is || '');\n }\n \n function notifyAttributes(self) {\n var\n callback = self[ATTRIBUTE_CHANGED_CALLBACK],\n attributes = callback ? self.attributes : empty,\n i = attributes.length,\n attribute\n ;\n while (i--) {\n attribute = attributes[i]; // || attributes.item(i);\n callback.call(\n self,\n attribute.name || attribute.nodeName,\n null,\n attribute.value || attribute.nodeValue\n );\n }\n }\n \n function whenDefined(name) {\n name = name.toUpperCase();\n if (!(name in waitingList)) {\n waitingList[name] = {};\n waitingList[name].p = new Promise(function (resolve) {\n waitingList[name].r = resolve;\n });\n }\n return waitingList[name].p;\n }\n \n function polyfillV1() {\n if (customElements) delete window.customElements;\n defineProperty(window, 'customElements', {\n configurable: true,\n value: new CustomElementRegistry()\n });\n defineProperty(window, 'CustomElementRegistry', {\n configurable: true,\n value: CustomElementRegistry\n });\n for (var\n patchClass = function (name) {\n var Class = window[name];\n if (Class) {\n window[name] = function CustomElementsV1(self) {\n var info, isNative;\n if (!self) self = this;\n if (!self[DRECEV1]) {\n justCreated = true;\n info = constructors[nodeNames.get(self.constructor)];\n isNative = usableCustomElements && info.create.length === 1;\n self = isNative ?\n Reflect.construct(Class, empty, info.constructor) :\n document.createElement.apply(document, info.create);\n self[DRECEV1] = true;\n justCreated = false;\n if (!isNative) notifyAttributes(self);\n }\n return self;\n };\n window[name].prototype = Class.prototype;\n try {\n Class.prototype.constructor = window[name];\n } catch(WebKit) {\n fixGetClass = true;\n defineProperty(Class, DRECEV1, {value: window[name]});\n }\n }\n },\n Classes = htmlClass.get(/^HTML[A-Z]*[a-z]/),\n i = Classes.length;\n i--;\n patchClass(Classes[i])\n ) {}\n (document.createElement = function (name, options) {\n var is = getIs(options);\n return is ?\n patchedCreateElement.call(this, name, secondArgument(is)) :\n patchedCreateElement.call(this, name);\n });\n }\n \n // if customElements is not there at all\n if (!customElements || polyfill === 'force') polyfillV1();\n else {\n // if available test extends work as expected\n try {\n (function (DRE, options, name) {\n options[EXTENDS] = 'a';\n DRE.prototype = create(HTMLAnchorElement.prototype);\n DRE.prototype.constructor = DRE;\n window.customElements.define(name, DRE, options);\n if (\n getAttribute.call(document.createElement('a', {is: name}), 'is') !== name ||\n (usableCustomElements && getAttribute.call(new DRE(), 'is') !== name)\n ) {\n throw options;\n }\n }(\n function DRE() {\n return Reflect.construct(HTMLAnchorElement, [], DRE);\n },\n {},\n 'document-register-element-a'\n ));\n } catch(o_O) {\n // or force the polyfill if not\n // and keep internal original reference\n polyfillV1();\n }\n }\n \n try {\n createElement.call(document, 'a', 'a');\n } catch(FireFox) {\n secondArgument = function (is) {\n return {is: is};\n };\n }\n \n}\n\nmodule.exports = installCustomElements;\ninstallCustomElements(global);\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"../../../node_modules/webpack/buildin/global.js\")))\n\n/***/ }),\n\n/***/ \"../../../node_modules/fuzzaldrin-plus/lib/filter.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n(function() {\n var Query, pathScorer, pluckCandidates, scorer, sortCandidates;\n\n scorer = __webpack_require__(\"../../../node_modules/fuzzaldrin-plus/lib/scorer.js\");\n\n pathScorer = __webpack_require__(\"../../../node_modules/fuzzaldrin-plus/lib/pathScorer.js\");\n\n Query = __webpack_require__(\"../../../node_modules/fuzzaldrin-plus/lib/query.js\");\n\n pluckCandidates = function(a) {\n return a.candidate;\n };\n\n sortCandidates = function(a, b) {\n return b.score - a.score;\n };\n\n module.exports = function(candidates, query, options) {\n var bKey, candidate, key, maxInners, maxResults, score, scoreProvider, scoredCandidates, spotLeft, string, usePathScoring, _i, _len;\n scoredCandidates = [];\n key = options.key, maxResults = options.maxResults, maxInners = options.maxInners, usePathScoring = options.usePathScoring;\n spotLeft = (maxInners != null) && maxInners > 0 ? maxInners : candidates.length + 1;\n bKey = key != null;\n scoreProvider = usePathScoring ? pathScorer : scorer;\n for (_i = 0, _len = candidates.length; _i < _len; _i++) {\n candidate = candidates[_i];\n string = bKey ? candidate[key] : candidate;\n if (!string) {\n continue;\n }\n score = scoreProvider.score(string, query, options);\n if (score > 0) {\n scoredCandidates.push({\n candidate: candidate,\n score: score\n });\n if (!--spotLeft) {\n break;\n }\n }\n }\n scoredCandidates.sort(sortCandidates);\n candidates = scoredCandidates.map(pluckCandidates);\n if (maxResults != null) {\n candidates = candidates.slice(0, maxResults);\n }\n return candidates;\n };\n\n}).call(this);\n\n\n/***/ }),\n\n/***/ \"../../../node_modules/fuzzaldrin-plus/lib/fuzzaldrin.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(process) {(function() {\n var Query, defaultPathSeparator, filter, matcher, parseOptions, pathScorer, preparedQueryCache, scorer;\n\n filter = __webpack_require__(\"../../../node_modules/fuzzaldrin-plus/lib/filter.js\");\n\n matcher = __webpack_require__(\"../../../node_modules/fuzzaldrin-plus/lib/matcher.js\");\n\n scorer = __webpack_require__(\"../../../node_modules/fuzzaldrin-plus/lib/scorer.js\");\n\n pathScorer = __webpack_require__(\"../../../node_modules/fuzzaldrin-plus/lib/pathScorer.js\");\n\n Query = __webpack_require__(\"../../../node_modules/fuzzaldrin-plus/lib/query.js\");\n\n preparedQueryCache = null;\n\n defaultPathSeparator = (typeof process !== \"undefined\" && process !== null ? process.platform : void 0) === \"win32\" ? '\\\\' : '/';\n\n module.exports = {\n filter: function(candidates, query, options) {\n if (options == null) {\n options = {};\n }\n if (!((query != null ? query.length : void 0) && (candidates != null ? candidates.length : void 0))) {\n return [];\n }\n options = parseOptions(options, query);\n return filter(candidates, query, options);\n },\n score: function(string, query, options) {\n if (options == null) {\n options = {};\n }\n if (!((string != null ? string.length : void 0) && (query != null ? query.length : void 0))) {\n return 0;\n }\n options = parseOptions(options, query);\n if (options.usePathScoring) {\n return pathScorer.score(string, query, options);\n } else {\n return scorer.score(string, query, options);\n }\n },\n match: function(string, query, options) {\n var _i, _ref, _results;\n if (options == null) {\n options = {};\n }\n if (!string) {\n return [];\n }\n if (!query) {\n return [];\n }\n if (string === query) {\n return (function() {\n _results = [];\n for (var _i = 0, _ref = string.length; 0 <= _ref ? _i < _ref : _i > _ref; 0 <= _ref ? _i++ : _i--){ _results.push(_i); }\n return _results;\n }).apply(this);\n }\n options = parseOptions(options, query);\n return matcher.match(string, query, options);\n },\n wrap: function(string, query, options) {\n if (options == null) {\n options = {};\n }\n if (!string) {\n return [];\n }\n if (!query) {\n return [];\n }\n options = parseOptions(options, query);\n return matcher.wrap(string, query, options);\n },\n prepareQuery: function(query, options) {\n if (options == null) {\n options = {};\n }\n options = parseOptions(options, query);\n return options.preparedQuery;\n }\n };\n\n parseOptions = function(options, query) {\n if (options.allowErrors == null) {\n options.allowErrors = false;\n }\n if (options.usePathScoring == null) {\n options.usePathScoring = true;\n }\n if (options.useExtensionBonus == null) {\n options.useExtensionBonus = false;\n }\n if (options.pathSeparator == null) {\n options.pathSeparator = defaultPathSeparator;\n }\n if (options.optCharRegEx == null) {\n options.optCharRegEx = null;\n }\n if (options.wrap == null) {\n options.wrap = null;\n }\n if (options.preparedQuery == null) {\n options.preparedQuery = preparedQueryCache && preparedQueryCache.query === query ? preparedQueryCache : (preparedQueryCache = new Query(query, options));\n }\n return options;\n };\n\n}).call(this);\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"../../../node_modules/webpack/node_modules/process/browser.js\")))\n\n/***/ }),\n\n/***/ \"../../../node_modules/fuzzaldrin-plus/lib/matcher.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n(function() {\n var basenameMatch, computeMatch, isMatch, isWordStart, match, mergeMatches, scoreAcronyms, scoreCharacter, scoreConsecutives, _ref;\n\n _ref = __webpack_require__(\"../../../node_modules/fuzzaldrin-plus/lib/scorer.js\"), isMatch = _ref.isMatch, isWordStart = _ref.isWordStart, scoreConsecutives = _ref.scoreConsecutives, scoreCharacter = _ref.scoreCharacter, scoreAcronyms = _ref.scoreAcronyms;\n\n exports.match = match = function(string, query, options) {\n var allowErrors, baseMatches, matches, pathSeparator, preparedQuery, string_lw;\n allowErrors = options.allowErrors, preparedQuery = options.preparedQuery, pathSeparator = options.pathSeparator;\n if (!(allowErrors || isMatch(string, preparedQuery.core_lw, preparedQuery.core_up))) {\n return [];\n }\n string_lw = string.toLowerCase();\n matches = computeMatch(string, string_lw, preparedQuery);\n if (matches.length === 0) {\n return matches;\n }\n if (string.indexOf(pathSeparator) > -1) {\n baseMatches = basenameMatch(string, string_lw, preparedQuery, pathSeparator);\n matches = mergeMatches(matches, baseMatches);\n }\n return matches;\n };\n\n exports.wrap = function(string, query, options) {\n var matchIndex, matchPos, matchPositions, output, strPos, tagClass, tagClose, tagOpen, _ref1;\n if ((options.wrap != null)) {\n _ref1 = options.wrap, tagClass = _ref1.tagClass, tagOpen = _ref1.tagOpen, tagClose = _ref1.tagClose;\n }\n if (tagClass == null) {\n tagClass = 'highlight';\n }\n if (tagOpen == null) {\n tagOpen = '';\n }\n if (tagClose == null) {\n tagClose = '';\n }\n if (string === query) {\n return tagOpen + string + tagClose;\n }\n matchPositions = match(string, query, options);\n if (matchPositions.length === 0) {\n return string;\n }\n output = '';\n matchIndex = -1;\n strPos = 0;\n while (++matchIndex < matchPositions.length) {\n matchPos = matchPositions[matchIndex];\n if (matchPos > strPos) {\n output += string.substring(strPos, matchPos);\n strPos = matchPos;\n }\n while (++matchIndex < matchPositions.length) {\n if (matchPositions[matchIndex] === matchPos + 1) {\n matchPos++;\n } else {\n matchIndex--;\n break;\n }\n }\n matchPos++;\n if (matchPos > strPos) {\n output += tagOpen;\n output += string.substring(strPos, matchPos);\n output += tagClose;\n strPos = matchPos;\n }\n }\n if (strPos <= string.length - 1) {\n output += string.substring(strPos);\n }\n return output;\n };\n\n basenameMatch = function(subject, subject_lw, preparedQuery, pathSeparator) {\n var basePos, depth, end;\n end = subject.length - 1;\n while (subject[end] === pathSeparator) {\n end--;\n }\n basePos = subject.lastIndexOf(pathSeparator, end);\n if (basePos === -1) {\n return [];\n }\n depth = preparedQuery.depth;\n while (depth-- > 0) {\n basePos = subject.lastIndexOf(pathSeparator, basePos - 1);\n if (basePos === -1) {\n return [];\n }\n }\n basePos++;\n end++;\n return computeMatch(subject.slice(basePos, end), subject_lw.slice(basePos, end), preparedQuery, basePos);\n };\n\n mergeMatches = function(a, b) {\n var ai, bj, i, j, m, n, out;\n m = a.length;\n n = b.length;\n if (n === 0) {\n return a.slice();\n }\n if (m === 0) {\n return b.slice();\n }\n i = -1;\n j = 0;\n bj = b[j];\n out = [];\n while (++i < m) {\n ai = a[i];\n while (bj <= ai && ++j < n) {\n if (bj < ai) {\n out.push(bj);\n }\n bj = b[j];\n }\n out.push(ai);\n }\n while (j < n) {\n out.push(b[j++]);\n }\n return out;\n };\n\n computeMatch = function(subject, subject_lw, preparedQuery, offset) {\n var DIAGONAL, LEFT, STOP, UP, acro_score, align, backtrack, csc_diag, csc_row, csc_score, i, j, m, matches, move, n, pos, query, query_lw, score, score_diag, score_row, score_up, si_lw, start, trace;\n if (offset == null) {\n offset = 0;\n }\n query = preparedQuery.query;\n query_lw = preparedQuery.query_lw;\n m = subject.length;\n n = query.length;\n acro_score = scoreAcronyms(subject, subject_lw, query, query_lw).score;\n score_row = new Array(n);\n csc_row = new Array(n);\n STOP = 0;\n UP = 1;\n LEFT = 2;\n DIAGONAL = 3;\n trace = new Array(m * n);\n pos = -1;\n j = -1;\n while (++j < n) {\n score_row[j] = 0;\n csc_row[j] = 0;\n }\n i = -1;\n while (++i < m) {\n score = 0;\n score_up = 0;\n csc_diag = 0;\n si_lw = subject_lw[i];\n j = -1;\n while (++j < n) {\n csc_score = 0;\n align = 0;\n score_diag = score_up;\n if (query_lw[j] === si_lw) {\n start = isWordStart(i, subject, subject_lw);\n csc_score = csc_diag > 0 ? csc_diag : scoreConsecutives(subject, subject_lw, query, query_lw, i, j, start);\n align = score_diag + scoreCharacter(i, j, start, acro_score, csc_score);\n }\n score_up = score_row[j];\n csc_diag = csc_row[j];\n if (score > score_up) {\n move = LEFT;\n } else {\n score = score_up;\n move = UP;\n }\n if (align > score) {\n score = align;\n move = DIAGONAL;\n } else {\n csc_score = 0;\n }\n score_row[j] = score;\n csc_row[j] = csc_score;\n trace[++pos] = score > 0 ? move : STOP;\n }\n }\n i = m - 1;\n j = n - 1;\n pos = i * n + j;\n backtrack = true;\n matches = [];\n while (backtrack && i >= 0 && j >= 0) {\n switch (trace[pos]) {\n case UP:\n i--;\n pos -= n;\n break;\n case LEFT:\n j--;\n pos--;\n break;\n case DIAGONAL:\n matches.push(i + offset);\n j--;\n i--;\n pos -= n + 1;\n break;\n default:\n backtrack = false;\n }\n }\n matches.reverse();\n return matches;\n };\n\n}).call(this);\n\n\n/***/ }),\n\n/***/ \"../../../node_modules/fuzzaldrin-plus/lib/pathScorer.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n(function() {\n var computeScore, countDir, file_coeff, getExtension, getExtensionScore, isMatch, scorePath, scoreSize, tau_depth, _ref;\n\n _ref = __webpack_require__(\"../../../node_modules/fuzzaldrin-plus/lib/scorer.js\"), isMatch = _ref.isMatch, computeScore = _ref.computeScore, scoreSize = _ref.scoreSize;\n\n tau_depth = 13;\n\n file_coeff = 1.2;\n\n exports.score = function(string, query, options) {\n var allowErrors, preparedQuery, score, string_lw;\n preparedQuery = options.preparedQuery, allowErrors = options.allowErrors;\n if (!(allowErrors || isMatch(string, preparedQuery.core_lw, preparedQuery.core_up))) {\n return 0;\n }\n string_lw = string.toLowerCase();\n score = computeScore(string, string_lw, preparedQuery);\n score = scorePath(string, string_lw, score, options);\n return Math.ceil(score);\n };\n\n scorePath = function(subject, subject_lw, fullPathScore, options) {\n var alpha, basePathScore, basePos, depth, end, extAdjust, fileLength, pathSeparator, preparedQuery, useExtensionBonus;\n if (fullPathScore === 0) {\n return 0;\n }\n preparedQuery = options.preparedQuery, useExtensionBonus = options.useExtensionBonus, pathSeparator = options.pathSeparator;\n end = subject.length - 1;\n while (subject[end] === pathSeparator) {\n end--;\n }\n basePos = subject.lastIndexOf(pathSeparator, end);\n fileLength = end - basePos;\n extAdjust = 1.0;\n if (useExtensionBonus) {\n extAdjust += getExtensionScore(subject_lw, preparedQuery.ext, basePos, end, 2);\n fullPathScore *= extAdjust;\n }\n if (basePos === -1) {\n return fullPathScore;\n }\n depth = preparedQuery.depth;\n while (basePos > -1 && depth-- > 0) {\n basePos = subject.lastIndexOf(pathSeparator, basePos - 1);\n }\n basePathScore = basePos === -1 ? fullPathScore : extAdjust * computeScore(subject.slice(basePos + 1, end + 1), subject_lw.slice(basePos + 1, end + 1), preparedQuery);\n alpha = 0.5 * tau_depth / (tau_depth + countDir(subject, end + 1, pathSeparator));\n return alpha * basePathScore + (1 - alpha) * fullPathScore * scoreSize(0, file_coeff * fileLength);\n };\n\n exports.countDir = countDir = function(path, end, pathSeparator) {\n var count, i;\n if (end < 1) {\n return 0;\n }\n count = 0;\n i = -1;\n while (++i < end && path[i] === pathSeparator) {\n continue;\n }\n while (++i < end) {\n if (path[i] === pathSeparator) {\n count++;\n while (++i < end && path[i] === pathSeparator) {\n continue;\n }\n }\n }\n return count;\n };\n\n exports.getExtension = getExtension = function(str) {\n var pos;\n pos = str.lastIndexOf(\".\");\n if (pos < 0) {\n return \"\";\n } else {\n return str.substr(pos + 1);\n }\n };\n\n getExtensionScore = function(candidate, ext, startPos, endPos, maxDepth) {\n var m, matched, n, pos;\n if (!ext.length) {\n return 0;\n }\n pos = candidate.lastIndexOf(\".\", endPos);\n if (!(pos > startPos)) {\n return 0;\n }\n n = ext.length;\n m = endPos - pos;\n if (m < n) {\n n = m;\n m = ext.length;\n }\n pos++;\n matched = -1;\n while (++matched < n) {\n if (candidate[pos + matched] !== ext[matched]) {\n break;\n }\n }\n if (matched === 0 && maxDepth > 0) {\n return 0.9 * getExtensionScore(candidate, ext, startPos, pos - 2, maxDepth - 1);\n }\n return matched / m;\n };\n\n}).call(this);\n\n\n/***/ }),\n\n/***/ \"../../../node_modules/fuzzaldrin-plus/lib/query.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n(function() {\n var Query, coreChars, countDir, getCharCodes, getExtension, opt_char_re, truncatedUpperCase, _ref;\n\n _ref = __webpack_require__(\"../../../node_modules/fuzzaldrin-plus/lib/pathScorer.js\"), countDir = _ref.countDir, getExtension = _ref.getExtension;\n\n module.exports = Query = (function() {\n function Query(query, _arg) {\n var optCharRegEx, pathSeparator, _ref1;\n _ref1 = _arg != null ? _arg : {}, optCharRegEx = _ref1.optCharRegEx, pathSeparator = _ref1.pathSeparator;\n if (!(query && query.length)) {\n return null;\n }\n this.query = query;\n this.query_lw = query.toLowerCase();\n this.core = coreChars(query, optCharRegEx);\n this.core_lw = this.core.toLowerCase();\n this.core_up = truncatedUpperCase(this.core);\n this.depth = countDir(query, query.length, pathSeparator);\n this.ext = getExtension(this.query_lw);\n this.charCodes = getCharCodes(this.query_lw);\n }\n\n return Query;\n\n })();\n\n opt_char_re = /[ _\\-:\\/\\\\]/g;\n\n coreChars = function(query, optCharRegEx) {\n if (optCharRegEx == null) {\n optCharRegEx = opt_char_re;\n }\n return query.replace(optCharRegEx, '');\n };\n\n truncatedUpperCase = function(str) {\n var char, upper, _i, _len;\n upper = \"\";\n for (_i = 0, _len = str.length; _i < _len; _i++) {\n char = str[_i];\n upper += char.toUpperCase()[0];\n }\n return upper;\n };\n\n getCharCodes = function(str) {\n var charCodes, i, len;\n len = str.length;\n i = -1;\n charCodes = [];\n while (++i < len) {\n charCodes[str.charCodeAt(i)] = true;\n }\n return charCodes;\n };\n\n}).call(this);\n\n\n/***/ }),\n\n/***/ \"../../../node_modules/fuzzaldrin-plus/lib/scorer.js\":\n/***/ (function(module, exports) {\n\n(function() {\n var AcronymResult, computeScore, emptyAcronymResult, isAcronymFullWord, isMatch, isSeparator, isWordEnd, isWordStart, miss_coeff, pos_bonus, scoreAcronyms, scoreCharacter, scoreConsecutives, scoreExact, scoreExactMatch, scorePattern, scorePosition, scoreSize, tau_size, wm;\n\n wm = 150;\n\n pos_bonus = 20;\n\n tau_size = 85;\n\n miss_coeff = 0.75;\n\n exports.score = function(string, query, options) {\n var allowErrors, preparedQuery, score, string_lw;\n preparedQuery = options.preparedQuery, allowErrors = options.allowErrors;\n if (!(allowErrors || isMatch(string, preparedQuery.core_lw, preparedQuery.core_up))) {\n return 0;\n }\n string_lw = string.toLowerCase();\n score = computeScore(string, string_lw, preparedQuery);\n return Math.ceil(score);\n };\n\n exports.isMatch = isMatch = function(subject, query_lw, query_up) {\n var i, j, m, n, qj_lw, qj_up, si;\n m = subject.length;\n n = query_lw.length;\n if (!m || n > m) {\n return false;\n }\n i = -1;\n j = -1;\n while (++j < n) {\n qj_lw = query_lw.charCodeAt(j);\n qj_up = query_up.charCodeAt(j);\n while (++i < m) {\n si = subject.charCodeAt(i);\n if (si === qj_lw || si === qj_up) {\n break;\n }\n }\n if (i === m) {\n return false;\n }\n }\n return true;\n };\n\n exports.computeScore = computeScore = function(subject, subject_lw, preparedQuery) {\n var acro, acro_score, align, csc_diag, csc_row, csc_score, csc_should_rebuild, i, j, m, miss_budget, miss_left, n, pos, query, query_lw, record_miss, score, score_diag, score_row, score_up, si_lw, start, sz;\n query = preparedQuery.query;\n query_lw = preparedQuery.query_lw;\n m = subject.length;\n n = query.length;\n acro = scoreAcronyms(subject, subject_lw, query, query_lw);\n acro_score = acro.score;\n if (acro.count === n) {\n return scoreExact(n, m, acro_score, acro.pos);\n }\n pos = subject_lw.indexOf(query_lw);\n if (pos > -1) {\n return scoreExactMatch(subject, subject_lw, query, query_lw, pos, n, m);\n }\n score_row = new Array(n);\n csc_row = new Array(n);\n sz = scoreSize(n, m);\n miss_budget = Math.ceil(miss_coeff * n) + 5;\n miss_left = miss_budget;\n csc_should_rebuild = true;\n j = -1;\n while (++j < n) {\n score_row[j] = 0;\n csc_row[j] = 0;\n }\n i = -1;\n while (++i < m) {\n si_lw = subject_lw[i];\n if (!si_lw.charCodeAt(0) in preparedQuery.charCodes) {\n if (csc_should_rebuild) {\n j = -1;\n while (++j < n) {\n csc_row[j] = 0;\n }\n csc_should_rebuild = false;\n }\n continue;\n }\n score = 0;\n score_diag = 0;\n csc_diag = 0;\n record_miss = true;\n csc_should_rebuild = true;\n j = -1;\n while (++j < n) {\n score_up = score_row[j];\n if (score_up > score) {\n score = score_up;\n }\n csc_score = 0;\n if (query_lw[j] === si_lw) {\n start = isWordStart(i, subject, subject_lw);\n csc_score = csc_diag > 0 ? csc_diag : scoreConsecutives(subject, subject_lw, query, query_lw, i, j, start);\n align = score_diag + scoreCharacter(i, j, start, acro_score, csc_score);\n if (align > score) {\n score = align;\n miss_left = miss_budget;\n } else {\n if (record_miss && --miss_left <= 0) {\n return Math.max(score, score_row[n - 1]) * sz;\n }\n record_miss = false;\n }\n }\n score_diag = score_up;\n csc_diag = csc_row[j];\n csc_row[j] = csc_score;\n score_row[j] = score;\n }\n }\n score = score_row[n - 1];\n return score * sz;\n };\n\n exports.isWordStart = isWordStart = function(pos, subject, subject_lw) {\n var curr_s, prev_s;\n if (pos === 0) {\n return true;\n }\n curr_s = subject[pos];\n prev_s = subject[pos - 1];\n return isSeparator(prev_s) || (curr_s !== subject_lw[pos] && prev_s === subject_lw[pos - 1]);\n };\n\n exports.isWordEnd = isWordEnd = function(pos, subject, subject_lw, len) {\n var curr_s, next_s;\n if (pos === len - 1) {\n return true;\n }\n curr_s = subject[pos];\n next_s = subject[pos + 1];\n return isSeparator(next_s) || (curr_s === subject_lw[pos] && next_s !== subject_lw[pos + 1]);\n };\n\n isSeparator = function(c) {\n return c === ' ' || c === '.' || c === '-' || c === '_' || c === '/' || c === '\\\\';\n };\n\n scorePosition = function(pos) {\n var sc;\n if (pos < pos_bonus) {\n sc = pos_bonus - pos;\n return 100 + sc * sc;\n } else {\n return Math.max(100 + pos_bonus - pos, 0);\n }\n };\n\n exports.scoreSize = scoreSize = function(n, m) {\n return tau_size / (tau_size + Math.abs(m - n));\n };\n\n scoreExact = function(n, m, quality, pos) {\n return 2 * n * (wm * quality + scorePosition(pos)) * scoreSize(n, m);\n };\n\n exports.scorePattern = scorePattern = function(count, len, sameCase, start, end) {\n var bonus, sz;\n sz = count;\n bonus = 6;\n if (sameCase === count) {\n bonus += 2;\n }\n if (start) {\n bonus += 3;\n }\n if (end) {\n bonus += 1;\n }\n if (count === len) {\n if (start) {\n if (sameCase === len) {\n sz += 2;\n } else {\n sz += 1;\n }\n }\n if (end) {\n bonus += 1;\n }\n }\n return sameCase + sz * (sz + bonus);\n };\n\n exports.scoreCharacter = scoreCharacter = function(i, j, start, acro_score, csc_score) {\n var posBonus;\n posBonus = scorePosition(i);\n if (start) {\n return posBonus + wm * ((acro_score > csc_score ? acro_score : csc_score) + 10);\n }\n return posBonus + wm * csc_score;\n };\n\n exports.scoreConsecutives = scoreConsecutives = function(subject, subject_lw, query, query_lw, i, j, startOfWord) {\n var k, m, mi, n, nj, sameCase, sz;\n m = subject.length;\n n = query.length;\n mi = m - i;\n nj = n - j;\n k = mi < nj ? mi : nj;\n sameCase = 0;\n sz = 0;\n if (query[j] === subject[i]) {\n sameCase++;\n }\n while (++sz < k && query_lw[++j] === subject_lw[++i]) {\n if (query[j] === subject[i]) {\n sameCase++;\n }\n }\n if (sz === 1) {\n return 1 + 2 * sameCase;\n }\n return scorePattern(sz, n, sameCase, startOfWord, isWordEnd(i, subject, subject_lw, m));\n };\n\n exports.scoreExactMatch = scoreExactMatch = function(subject, subject_lw, query, query_lw, pos, n, m) {\n var end, i, pos2, sameCase, start;\n start = isWordStart(pos, subject, subject_lw);\n if (!start) {\n pos2 = subject_lw.indexOf(query_lw, pos + 1);\n if (pos2 > -1) {\n start = isWordStart(pos2, subject, subject_lw);\n if (start) {\n pos = pos2;\n }\n }\n }\n i = -1;\n sameCase = 0;\n while (++i < n) {\n if (query[pos + i] === subject[i]) {\n sameCase++;\n }\n }\n end = isWordEnd(pos + n - 1, subject, subject_lw, m);\n return scoreExact(n, m, scorePattern(n, n, sameCase, start, end), pos);\n };\n\n AcronymResult = (function() {\n function AcronymResult(score, pos, count) {\n this.score = score;\n this.pos = pos;\n this.count = count;\n }\n\n return AcronymResult;\n\n })();\n\n emptyAcronymResult = new AcronymResult(0, 0.1, 0);\n\n exports.scoreAcronyms = scoreAcronyms = function(subject, subject_lw, query, query_lw) {\n var count, fullWord, i, j, m, n, qj_lw, sameCase, score, sepCount, sumPos;\n m = subject.length;\n n = query.length;\n if (!(m > 1 && n > 1)) {\n return emptyAcronymResult;\n }\n count = 0;\n sepCount = 0;\n sumPos = 0;\n sameCase = 0;\n i = -1;\n j = -1;\n while (++j < n) {\n qj_lw = query_lw[j];\n if (isSeparator(qj_lw)) {\n i = subject_lw.indexOf(qj_lw, i + 1);\n if (i > -1) {\n sepCount++;\n continue;\n } else {\n break;\n }\n }\n while (++i < m) {\n if (qj_lw === subject_lw[i] && isWordStart(i, subject, subject_lw)) {\n if (query[j] === subject[i]) {\n sameCase++;\n }\n sumPos += i;\n count++;\n break;\n }\n }\n if (i === m) {\n break;\n }\n }\n if (count < 2) {\n return emptyAcronymResult;\n }\n fullWord = count === n ? isAcronymFullWord(subject, subject_lw, query, count) : false;\n score = scorePattern(count, n, sameCase, true, fullWord);\n return new AcronymResult(score, sumPos / count, count + sepCount);\n };\n\n isAcronymFullWord = function(subject, subject_lw, query, nbAcronymInQuery) {\n var count, i, m, n;\n m = subject.length;\n n = query.length;\n count = 0;\n if (m > 12 * n) {\n return false;\n }\n i = -1;\n while (++i < m) {\n if (isWordStart(i, subject, subject_lw) && ++count > nbAcronymInQuery) {\n return false;\n }\n }\n return true;\n };\n\n}).call(this);\n\n\n/***/ }),\n\n/***/ \"../../../node_modules/good-listener/src/is.js\":\n/***/ (function(module, exports) {\n\n/**\n * Check if argument is a HTML element.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.node = function(value) {\n return value !== undefined\n && value instanceof HTMLElement\n && value.nodeType === 1;\n};\n\n/**\n * Check if argument is a list of HTML elements.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.nodeList = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return value !== undefined\n && (type === '[object NodeList]' || type === '[object HTMLCollection]')\n && ('length' in value)\n && (value.length === 0 || exports.node(value[0]));\n};\n\n/**\n * Check if argument is a string.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.string = function(value) {\n return typeof value === 'string'\n || value instanceof String;\n};\n\n/**\n * Check if argument is a function.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.fn = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return type === '[object Function]';\n};\n\n\n/***/ }),\n\n/***/ \"../../../node_modules/good-listener/src/listen.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar is = __webpack_require__(\"../../../node_modules/good-listener/src/is.js\");\nvar delegate = __webpack_require__(\"../../../node_modules/delegate/src/delegate.js\");\n\n/**\n * Validates all params and calls the right\n * listener function based on its target type.\n *\n * @param {String|HTMLElement|HTMLCollection|NodeList} target\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listen(target, type, callback) {\n if (!target && !type && !callback) {\n throw new Error('Missing required arguments');\n }\n\n if (!is.string(type)) {\n throw new TypeError('Second argument must be a String');\n }\n\n if (!is.fn(callback)) {\n throw new TypeError('Third argument must be a Function');\n }\n\n if (is.node(target)) {\n return listenNode(target, type, callback);\n }\n else if (is.nodeList(target)) {\n return listenNodeList(target, type, callback);\n }\n else if (is.string(target)) {\n return listenSelector(target, type, callback);\n }\n else {\n throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');\n }\n}\n\n/**\n * Adds an event listener to a HTML element\n * and returns a remove listener function.\n *\n * @param {HTMLElement} node\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNode(node, type, callback) {\n node.addEventListener(type, callback);\n\n return {\n destroy: function() {\n node.removeEventListener(type, callback);\n }\n }\n}\n\n/**\n * Add an event listener to a list of HTML elements\n * and returns a remove listener function.\n *\n * @param {NodeList|HTMLCollection} nodeList\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNodeList(nodeList, type, callback) {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.addEventListener(type, callback);\n });\n\n return {\n destroy: function() {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.removeEventListener(type, callback);\n });\n }\n }\n}\n\n/**\n * Add an event listener to a selector\n * and returns a remove listener function.\n *\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenSelector(selector, type, callback) {\n return delegate(document.body, selector, type, callback);\n}\n\nmodule.exports = listen;\n\n\n/***/ }),\n\n/***/ \"../../../node_modules/jed/jed.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/**\n * @preserve jed.js https://github.com/SlexAxton/Jed\n */\n/*\n-----------\nA gettext compatible i18n library for modern JavaScript Applications\n\nby Alex Sexton - AlexSexton [at] gmail - @SlexAxton\n\nMIT License\n\nA jQuery Foundation project - requires CLA to contribute -\nhttps://contribute.jquery.org/CLA/\n\n\n\nJed offers the entire applicable GNU gettext spec'd set of\nfunctions, but also offers some nicer wrappers around them.\nThe api for gettext was written for a language with no function\noverloading, so Jed allows a little more of that.\n\nMany thanks to Joshua I. Miller - unrtst@cpan.org - who wrote\ngettext.js back in 2008. I was able to vet a lot of my ideas\nagainst his. I also made sure Jed passed against his tests\nin order to offer easy upgrades -- jsgettext.berlios.de\n*/\n(function (root, undef) {\n\n // Set up some underscore-style functions, if you already have\n // underscore, feel free to delete this section, and use it\n // directly, however, the amount of functions used doesn't\n // warrant having underscore as a full dependency.\n // Underscore 1.3.0 was used to port and is licensed\n // under the MIT License by Jeremy Ashkenas.\n var ArrayProto = Array.prototype,\n ObjProto = Object.prototype,\n slice = ArrayProto.slice,\n hasOwnProp = ObjProto.hasOwnProperty,\n nativeForEach = ArrayProto.forEach,\n breaker = {};\n\n // We're not using the OOP style _ so we don't need the\n // extra level of indirection. This still means that you\n // sub out for real `_` though.\n var _ = {\n forEach : function( obj, iterator, context ) {\n var i, l, key;\n if ( obj === null ) {\n return;\n }\n\n if ( nativeForEach && obj.forEach === nativeForEach ) {\n obj.forEach( iterator, context );\n }\n else if ( obj.length === +obj.length ) {\n for ( i = 0, l = obj.length; i < l; i++ ) {\n if ( i in obj && iterator.call( context, obj[i], i, obj ) === breaker ) {\n return;\n }\n }\n }\n else {\n for ( key in obj) {\n if ( hasOwnProp.call( obj, key ) ) {\n if ( iterator.call (context, obj[key], key, obj ) === breaker ) {\n return;\n }\n }\n }\n }\n },\n extend : function( obj ) {\n this.forEach( slice.call( arguments, 1 ), function ( source ) {\n for ( var prop in source ) {\n obj[prop] = source[prop];\n }\n });\n return obj;\n }\n };\n // END Miniature underscore impl\n\n // Jed is a constructor function\n var Jed = function ( options ) {\n // Some minimal defaults\n this.defaults = {\n \"locale_data\" : {\n \"messages\" : {\n \"\" : {\n \"domain\" : \"messages\",\n \"lang\" : \"en\",\n \"plural_forms\" : \"nplurals=2; plural=(n != 1);\"\n }\n // There are no default keys, though\n }\n },\n // The default domain if one is missing\n \"domain\" : \"messages\",\n // enable debug mode to log untranslated strings to the console\n \"debug\" : false\n };\n\n // Mix in the sent options with the default options\n this.options = _.extend( {}, this.defaults, options );\n this.textdomain( this.options.domain );\n\n if ( options.domain && ! this.options.locale_data[ this.options.domain ] ) {\n throw new Error('Text domain set to non-existent domain: `' + options.domain + '`');\n }\n };\n\n // The gettext spec sets this character as the default\n // delimiter for context lookups.\n // e.g.: context\\u0004key\n // If your translation company uses something different,\n // just change this at any time and it will use that instead.\n Jed.context_delimiter = String.fromCharCode( 4 );\n\n function getPluralFormFunc ( plural_form_string ) {\n return Jed.PF.compile( plural_form_string || \"nplurals=2; plural=(n != 1);\");\n }\n\n function Chain( key, i18n ){\n this._key = key;\n this._i18n = i18n;\n }\n\n // Create a chainable api for adding args prettily\n _.extend( Chain.prototype, {\n onDomain : function ( domain ) {\n this._domain = domain;\n return this;\n },\n withContext : function ( context ) {\n this._context = context;\n return this;\n },\n ifPlural : function ( num, pkey ) {\n this._val = num;\n this._pkey = pkey;\n return this;\n },\n fetch : function ( sArr ) {\n if ( {}.toString.call( sArr ) != '[object Array]' ) {\n sArr = [].slice.call(arguments, 0);\n }\n return ( sArr && sArr.length ? Jed.sprintf : function(x){ return x; } )(\n this._i18n.dcnpgettext(this._domain, this._context, this._key, this._pkey, this._val),\n sArr\n );\n }\n });\n\n // Add functions to the Jed prototype.\n // These will be the functions on the object that's returned\n // from creating a `new Jed()`\n // These seem redundant, but they gzip pretty well.\n _.extend( Jed.prototype, {\n // The sexier api start point\n translate : function ( key ) {\n return new Chain( key, this );\n },\n\n textdomain : function ( domain ) {\n if ( ! domain ) {\n return this._textdomain;\n }\n this._textdomain = domain;\n },\n\n gettext : function ( key ) {\n return this.dcnpgettext.call( this, undef, undef, key );\n },\n\n dgettext : function ( domain, key ) {\n return this.dcnpgettext.call( this, domain, undef, key );\n },\n\n dcgettext : function ( domain , key /*, category */ ) {\n // Ignores the category anyways\n return this.dcnpgettext.call( this, domain, undef, key );\n },\n\n ngettext : function ( skey, pkey, val ) {\n return this.dcnpgettext.call( this, undef, undef, skey, pkey, val );\n },\n\n dngettext : function ( domain, skey, pkey, val ) {\n return this.dcnpgettext.call( this, domain, undef, skey, pkey, val );\n },\n\n dcngettext : function ( domain, skey, pkey, val/*, category */) {\n return this.dcnpgettext.call( this, domain, undef, skey, pkey, val );\n },\n\n pgettext : function ( context, key ) {\n return this.dcnpgettext.call( this, undef, context, key );\n },\n\n dpgettext : function ( domain, context, key ) {\n return this.dcnpgettext.call( this, domain, context, key );\n },\n\n dcpgettext : function ( domain, context, key/*, category */) {\n return this.dcnpgettext.call( this, domain, context, key );\n },\n\n npgettext : function ( context, skey, pkey, val ) {\n return this.dcnpgettext.call( this, undef, context, skey, pkey, val );\n },\n\n dnpgettext : function ( domain, context, skey, pkey, val ) {\n return this.dcnpgettext.call( this, domain, context, skey, pkey, val );\n },\n\n // The most fully qualified gettext function. It has every option.\n // Since it has every option, we can use it from every other method.\n // This is the bread and butter.\n // Technically there should be one more argument in this function for 'Category',\n // but since we never use it, we might as well not waste the bytes to define it.\n dcnpgettext : function ( domain, context, singular_key, plural_key, val ) {\n // Set some defaults\n\n plural_key = plural_key || singular_key;\n\n // Use the global domain default if one\n // isn't explicitly passed in\n domain = domain || this._textdomain;\n\n var fallback;\n\n // Handle special cases\n\n // No options found\n if ( ! this.options ) {\n // There's likely something wrong, but we'll return the correct key for english\n // We do this by instantiating a brand new Jed instance with the default set\n // for everything that could be broken.\n fallback = new Jed();\n return fallback.dcnpgettext.call( fallback, undefined, undefined, singular_key, plural_key, val );\n }\n\n // No translation data provided\n if ( ! this.options.locale_data ) {\n throw new Error('No locale data provided.');\n }\n\n if ( ! this.options.locale_data[ domain ] ) {\n throw new Error('Domain `' + domain + '` was not found.');\n }\n\n if ( ! this.options.locale_data[ domain ][ \"\" ] ) {\n throw new Error('No locale meta information provided.');\n }\n\n // Make sure we have a truthy key. Otherwise we might start looking\n // into the empty string key, which is the options for the locale\n // data.\n if ( ! singular_key ) {\n throw new Error('No translation key found.');\n }\n\n var key = context ? context + Jed.context_delimiter + singular_key : singular_key,\n locale_data = this.options.locale_data,\n dict = locale_data[ domain ],\n defaultConf = (locale_data.messages || this.defaults.locale_data.messages)[\"\"],\n pluralForms = dict[\"\"].plural_forms || dict[\"\"][\"Plural-Forms\"] || dict[\"\"][\"plural-forms\"] || defaultConf.plural_forms || defaultConf[\"Plural-Forms\"] || defaultConf[\"plural-forms\"],\n val_list,\n res;\n\n var val_idx;\n if (val === undefined) {\n // No value passed in; assume singular key lookup.\n val_idx = 0;\n\n } else {\n // Value has been passed in; use plural-forms calculations.\n\n // Handle invalid numbers, but try casting strings for good measure\n if ( typeof val != 'number' ) {\n val = parseInt( val, 10 );\n\n if ( isNaN( val ) ) {\n throw new Error('The number that was passed in is not a number.');\n }\n }\n\n val_idx = getPluralFormFunc(pluralForms)(val);\n }\n\n // Throw an error if a domain isn't found\n if ( ! dict ) {\n throw new Error('No domain named `' + domain + '` could be found.');\n }\n\n val_list = dict[ key ];\n\n // If there is no match, then revert back to\n // english style singular/plural with the keys passed in.\n if ( ! val_list || val_idx > val_list.length ) {\n if (this.options.missing_key_callback) {\n this.options.missing_key_callback(key, domain);\n }\n res = [ singular_key, plural_key ];\n\n // collect untranslated strings\n if (this.options.debug===true) {\n console.log(res[ getPluralFormFunc(pluralForms)( val ) ]);\n }\n return res[ getPluralFormFunc()( val ) ];\n }\n\n res = val_list[ val_idx ];\n\n // This includes empty strings on purpose\n if ( ! res ) {\n res = [ singular_key, plural_key ];\n return res[ getPluralFormFunc()( val ) ];\n }\n return res;\n }\n });\n\n\n // We add in sprintf capabilities for post translation value interolation\n // This is not internally used, so you can remove it if you have this\n // available somewhere else, or want to use a different system.\n\n // We _slightly_ modify the normal sprintf behavior to more gracefully handle\n // undefined values.\n\n /**\n sprintf() for JavaScript 0.7-beta1\n http://www.diveintojavascript.com/projects/javascript-sprintf\n\n Copyright (c) Alexandru Marasteanu \n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n * Neither the name of sprintf() for JavaScript nor the\n names of its contributors may be used to endorse or promote products\n derived from this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL Alexandru Marasteanu BE LIABLE FOR ANY\n DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n var sprintf = (function() {\n function get_type(variable) {\n return Object.prototype.toString.call(variable).slice(8, -1).toLowerCase();\n }\n function str_repeat(input, multiplier) {\n for (var output = []; multiplier > 0; output[--multiplier] = input) {/* do nothing */}\n return output.join('');\n }\n\n var str_format = function() {\n if (!str_format.cache.hasOwnProperty(arguments[0])) {\n str_format.cache[arguments[0]] = str_format.parse(arguments[0]);\n }\n return str_format.format.call(null, str_format.cache[arguments[0]], arguments);\n };\n\n str_format.format = function(parse_tree, argv) {\n var cursor = 1, tree_length = parse_tree.length, node_type = '', arg, output = [], i, k, match, pad, pad_character, pad_length;\n for (i = 0; i < tree_length; i++) {\n node_type = get_type(parse_tree[i]);\n if (node_type === 'string') {\n output.push(parse_tree[i]);\n }\n else if (node_type === 'array') {\n match = parse_tree[i]; // convenience purposes only\n if (match[2]) { // keyword argument\n arg = argv[cursor];\n for (k = 0; k < match[2].length; k++) {\n if (!arg.hasOwnProperty(match[2][k])) {\n throw(sprintf('[sprintf] property \"%s\" does not exist', match[2][k]));\n }\n arg = arg[match[2][k]];\n }\n }\n else if (match[1]) { // positional argument (explicit)\n arg = argv[match[1]];\n }\n else { // positional argument (implicit)\n arg = argv[cursor++];\n }\n\n if (/[^s]/.test(match[8]) && (get_type(arg) != 'number')) {\n throw(sprintf('[sprintf] expecting number but found %s', get_type(arg)));\n }\n\n // Jed EDIT\n if ( typeof arg == 'undefined' || arg === null ) {\n arg = '';\n }\n // Jed EDIT\n\n switch (match[8]) {\n case 'b': arg = arg.toString(2); break;\n case 'c': arg = String.fromCharCode(arg); break;\n case 'd': arg = parseInt(arg, 10); break;\n case 'e': arg = match[7] ? arg.toExponential(match[7]) : arg.toExponential(); break;\n case 'f': arg = match[7] ? parseFloat(arg).toFixed(match[7]) : parseFloat(arg); break;\n case 'o': arg = arg.toString(8); break;\n case 's': arg = ((arg = String(arg)) && match[7] ? arg.substring(0, match[7]) : arg); break;\n case 'u': arg = Math.abs(arg); break;\n case 'x': arg = arg.toString(16); break;\n case 'X': arg = arg.toString(16).toUpperCase(); break;\n }\n arg = (/[def]/.test(match[8]) && match[3] && arg >= 0 ? '+'+ arg : arg);\n pad_character = match[4] ? match[4] == '0' ? '0' : match[4].charAt(1) : ' ';\n pad_length = match[6] - String(arg).length;\n pad = match[6] ? str_repeat(pad_character, pad_length) : '';\n output.push(match[5] ? arg + pad : pad + arg);\n }\n }\n return output.join('');\n };\n\n str_format.cache = {};\n\n str_format.parse = function(fmt) {\n var _fmt = fmt, match = [], parse_tree = [], arg_names = 0;\n while (_fmt) {\n if ((match = /^[^\\x25]+/.exec(_fmt)) !== null) {\n parse_tree.push(match[0]);\n }\n else if ((match = /^\\x25{2}/.exec(_fmt)) !== null) {\n parse_tree.push('%');\n }\n else if ((match = /^\\x25(?:([1-9]\\d*)\\$|\\(([^\\)]+)\\))?(\\+)?(0|'[^$])?(-)?(\\d+)?(?:\\.(\\d+))?([b-fosuxX])/.exec(_fmt)) !== null) {\n if (match[2]) {\n arg_names |= 1;\n var field_list = [], replacement_field = match[2], field_match = [];\n if ((field_match = /^([a-z_][a-z_\\d]*)/i.exec(replacement_field)) !== null) {\n field_list.push(field_match[1]);\n while ((replacement_field = replacement_field.substring(field_match[0].length)) !== '') {\n if ((field_match = /^\\.([a-z_][a-z_\\d]*)/i.exec(replacement_field)) !== null) {\n field_list.push(field_match[1]);\n }\n else if ((field_match = /^\\[(\\d+)\\]/.exec(replacement_field)) !== null) {\n field_list.push(field_match[1]);\n }\n else {\n throw('[sprintf] huh?');\n }\n }\n }\n else {\n throw('[sprintf] huh?');\n }\n match[2] = field_list;\n }\n else {\n arg_names |= 2;\n }\n if (arg_names === 3) {\n throw('[sprintf] mixing positional and named placeholders is not (yet) supported');\n }\n parse_tree.push(match);\n }\n else {\n throw('[sprintf] huh?');\n }\n _fmt = _fmt.substring(match[0].length);\n }\n return parse_tree;\n };\n\n return str_format;\n })();\n\n var vsprintf = function(fmt, argv) {\n argv.unshift(fmt);\n return sprintf.apply(null, argv);\n };\n\n Jed.parse_plural = function ( plural_forms, n ) {\n plural_forms = plural_forms.replace(/n/g, n);\n return Jed.parse_expression(plural_forms);\n };\n\n Jed.sprintf = function ( fmt, args ) {\n if ( {}.toString.call( args ) == '[object Array]' ) {\n return vsprintf( fmt, [].slice.call(args) );\n }\n return sprintf.apply(this, [].slice.call(arguments) );\n };\n\n Jed.prototype.sprintf = function () {\n return Jed.sprintf.apply(this, arguments);\n };\n // END sprintf Implementation\n\n // Start the Plural forms section\n // This is a full plural form expression parser. It is used to avoid\n // running 'eval' or 'new Function' directly against the plural\n // forms.\n //\n // This can be important if you get translations done through a 3rd\n // party vendor. I encourage you to use this instead, however, I\n // also will provide a 'precompiler' that you can use at build time\n // to output valid/safe function representations of the plural form\n // expressions. This means you can build this code out for the most\n // part.\n Jed.PF = {};\n\n Jed.PF.parse = function ( p ) {\n var plural_str = Jed.PF.extractPluralExpr( p );\n return Jed.PF.parser.parse.call(Jed.PF.parser, plural_str);\n };\n\n Jed.PF.compile = function ( p ) {\n // Handle trues and falses as 0 and 1\n function imply( val ) {\n return (val === true ? 1 : val ? val : 0);\n }\n\n var ast = Jed.PF.parse( p );\n return function ( n ) {\n return imply( Jed.PF.interpreter( ast )( n ) );\n };\n };\n\n Jed.PF.interpreter = function ( ast ) {\n return function ( n ) {\n var res;\n switch ( ast.type ) {\n case 'GROUP':\n return Jed.PF.interpreter( ast.expr )( n );\n case 'TERNARY':\n if ( Jed.PF.interpreter( ast.expr )( n ) ) {\n return Jed.PF.interpreter( ast.truthy )( n );\n }\n return Jed.PF.interpreter( ast.falsey )( n );\n case 'OR':\n return Jed.PF.interpreter( ast.left )( n ) || Jed.PF.interpreter( ast.right )( n );\n case 'AND':\n return Jed.PF.interpreter( ast.left )( n ) && Jed.PF.interpreter( ast.right )( n );\n case 'LT':\n return Jed.PF.interpreter( ast.left )( n ) < Jed.PF.interpreter( ast.right )( n );\n case 'GT':\n return Jed.PF.interpreter( ast.left )( n ) > Jed.PF.interpreter( ast.right )( n );\n case 'LTE':\n return Jed.PF.interpreter( ast.left )( n ) <= Jed.PF.interpreter( ast.right )( n );\n case 'GTE':\n return Jed.PF.interpreter( ast.left )( n ) >= Jed.PF.interpreter( ast.right )( n );\n case 'EQ':\n return Jed.PF.interpreter( ast.left )( n ) == Jed.PF.interpreter( ast.right )( n );\n case 'NEQ':\n return Jed.PF.interpreter( ast.left )( n ) != Jed.PF.interpreter( ast.right )( n );\n case 'MOD':\n return Jed.PF.interpreter( ast.left )( n ) % Jed.PF.interpreter( ast.right )( n );\n case 'VAR':\n return n;\n case 'NUM':\n return ast.val;\n default:\n throw new Error(\"Invalid Token found.\");\n }\n };\n };\n\n Jed.PF.extractPluralExpr = function ( p ) {\n // trim first\n p = p.replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n\n if (! /;\\s*$/.test(p)) {\n p = p.concat(';');\n }\n\n var nplurals_re = /nplurals\\=(\\d+);/,\n plural_re = /plural\\=(.*);/,\n nplurals_matches = p.match( nplurals_re ),\n res = {},\n plural_matches;\n\n // Find the nplurals number\n if ( nplurals_matches.length > 1 ) {\n res.nplurals = nplurals_matches[1];\n }\n else {\n throw new Error('nplurals not found in plural_forms string: ' + p );\n }\n\n // remove that data to get to the formula\n p = p.replace( nplurals_re, \"\" );\n plural_matches = p.match( plural_re );\n\n if (!( plural_matches && plural_matches.length > 1 ) ) {\n throw new Error('`plural` expression not found: ' + p);\n }\n return plural_matches[ 1 ];\n };\n\n /* Jison generated parser */\n Jed.PF.parser = (function(){\n\nvar parser = {trace: function trace() { },\nyy: {},\nsymbols_: {\"error\":2,\"expressions\":3,\"e\":4,\"EOF\":5,\"?\":6,\":\":7,\"||\":8,\"&&\":9,\"<\":10,\"<=\":11,\">\":12,\">=\":13,\"!=\":14,\"==\":15,\"%\":16,\"(\":17,\")\":18,\"n\":19,\"NUMBER\":20,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",5:\"EOF\",6:\"?\",7:\":\",8:\"||\",9:\"&&\",10:\"<\",11:\"<=\",12:\">\",13:\">=\",14:\"!=\",15:\"==\",16:\"%\",17:\"(\",18:\")\",19:\"n\",20:\"NUMBER\"},\nproductions_: [0,[3,2],[4,5],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,1],[4,1]],\nperformAction: function anonymous(yytext,yyleng,yylineno,yy,yystate,$$,_$) {\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 1: return { type : 'GROUP', expr: $$[$0-1] };\nbreak;\ncase 2:this.$ = { type: 'TERNARY', expr: $$[$0-4], truthy : $$[$0-2], falsey: $$[$0] };\nbreak;\ncase 3:this.$ = { type: \"OR\", left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 4:this.$ = { type: \"AND\", left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 5:this.$ = { type: 'LT', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 6:this.$ = { type: 'LTE', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 7:this.$ = { type: 'GT', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 8:this.$ = { type: 'GTE', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 9:this.$ = { type: 'NEQ', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 10:this.$ = { type: 'EQ', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 11:this.$ = { type: 'MOD', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 12:this.$ = { type: 'GROUP', expr: $$[$0-1] };\nbreak;\ncase 13:this.$ = { type: 'VAR' };\nbreak;\ncase 14:this.$ = { type: 'NUM', val: Number(yytext) };\nbreak;\n}\n},\ntable: [{3:1,4:2,17:[1,3],19:[1,4],20:[1,5]},{1:[3]},{5:[1,6],6:[1,7],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16]},{4:17,17:[1,3],19:[1,4],20:[1,5]},{5:[2,13],6:[2,13],7:[2,13],8:[2,13],9:[2,13],10:[2,13],11:[2,13],12:[2,13],13:[2,13],14:[2,13],15:[2,13],16:[2,13],18:[2,13]},{5:[2,14],6:[2,14],7:[2,14],8:[2,14],9:[2,14],10:[2,14],11:[2,14],12:[2,14],13:[2,14],14:[2,14],15:[2,14],16:[2,14],18:[2,14]},{1:[2,1]},{4:18,17:[1,3],19:[1,4],20:[1,5]},{4:19,17:[1,3],19:[1,4],20:[1,5]},{4:20,17:[1,3],19:[1,4],20:[1,5]},{4:21,17:[1,3],19:[1,4],20:[1,5]},{4:22,17:[1,3],19:[1,4],20:[1,5]},{4:23,17:[1,3],19:[1,4],20:[1,5]},{4:24,17:[1,3],19:[1,4],20:[1,5]},{4:25,17:[1,3],19:[1,4],20:[1,5]},{4:26,17:[1,3],19:[1,4],20:[1,5]},{4:27,17:[1,3],19:[1,4],20:[1,5]},{6:[1,7],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[1,28]},{6:[1,7],7:[1,29],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16]},{5:[2,3],6:[2,3],7:[2,3],8:[2,3],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[2,3]},{5:[2,4],6:[2,4],7:[2,4],8:[2,4],9:[2,4],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[2,4]},{5:[2,5],6:[2,5],7:[2,5],8:[2,5],9:[2,5],10:[2,5],11:[2,5],12:[2,5],13:[2,5],14:[2,5],15:[2,5],16:[1,16],18:[2,5]},{5:[2,6],6:[2,6],7:[2,6],8:[2,6],9:[2,6],10:[2,6],11:[2,6],12:[2,6],13:[2,6],14:[2,6],15:[2,6],16:[1,16],18:[2,6]},{5:[2,7],6:[2,7],7:[2,7],8:[2,7],9:[2,7],10:[2,7],11:[2,7],12:[2,7],13:[2,7],14:[2,7],15:[2,7],16:[1,16],18:[2,7]},{5:[2,8],6:[2,8],7:[2,8],8:[2,8],9:[2,8],10:[2,8],11:[2,8],12:[2,8],13:[2,8],14:[2,8],15:[2,8],16:[1,16],18:[2,8]},{5:[2,9],6:[2,9],7:[2,9],8:[2,9],9:[2,9],10:[2,9],11:[2,9],12:[2,9],13:[2,9],14:[2,9],15:[2,9],16:[1,16],18:[2,9]},{5:[2,10],6:[2,10],7:[2,10],8:[2,10],9:[2,10],10:[2,10],11:[2,10],12:[2,10],13:[2,10],14:[2,10],15:[2,10],16:[1,16],18:[2,10]},{5:[2,11],6:[2,11],7:[2,11],8:[2,11],9:[2,11],10:[2,11],11:[2,11],12:[2,11],13:[2,11],14:[2,11],15:[2,11],16:[2,11],18:[2,11]},{5:[2,12],6:[2,12],7:[2,12],8:[2,12],9:[2,12],10:[2,12],11:[2,12],12:[2,12],13:[2,12],14:[2,12],15:[2,12],16:[2,12],18:[2,12]},{4:30,17:[1,3],19:[1,4],20:[1,5]},{5:[2,2],6:[1,7],7:[2,2],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[2,2]}],\ndefaultActions: {6:[2,1]},\nparseError: function parseError(str, hash) {\n throw new Error(str);\n},\nparse: function parse(input) {\n var self = this,\n stack = [0],\n vstack = [null], // semantic value stack\n lstack = [], // location stack\n table = this.table,\n yytext = '',\n yylineno = 0,\n yyleng = 0,\n recovering = 0,\n TERROR = 2,\n EOF = 1;\n\n //this.reductionCount = this.shiftCount = 0;\n\n this.lexer.setInput(input);\n this.lexer.yy = this.yy;\n this.yy.lexer = this.lexer;\n if (typeof this.lexer.yylloc == 'undefined')\n this.lexer.yylloc = {};\n var yyloc = this.lexer.yylloc;\n lstack.push(yyloc);\n\n if (typeof this.yy.parseError === 'function')\n this.parseError = this.yy.parseError;\n\n function popStack (n) {\n stack.length = stack.length - 2*n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n\n function lex() {\n var token;\n token = self.lexer.lex() || 1; // $end = 1\n // if token isn't its numeric value, convert\n if (typeof token !== 'number') {\n token = self.symbols_[token] || token;\n }\n return token;\n }\n\n var symbol, preErrorSymbol, state, action, a, r, yyval={},p,len,newState, expected;\n while (true) {\n // retreive state number from top of stack\n state = stack[stack.length-1];\n\n // use default actions if available\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol == null)\n symbol = lex();\n // read action for current state and first input\n action = table[state] && table[state][symbol];\n }\n\n // handle parse error\n _handle_error:\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n\n if (!recovering) {\n // Report error\n expected = [];\n for (p in table[state]) if (this.terminals_[p] && p > 2) {\n expected.push(\"'\"+this.terminals_[p]+\"'\");\n }\n var errStr = '';\n if (this.lexer.showPosition) {\n errStr = 'Parse error on line '+(yylineno+1)+\":\\n\"+this.lexer.showPosition()+\"\\nExpecting \"+expected.join(', ') + \", got '\" + this.terminals_[symbol]+ \"'\";\n } else {\n errStr = 'Parse error on line '+(yylineno+1)+\": Unexpected \" +\n (symbol == 1 /*EOF*/ ? \"end of input\" :\n (\"'\"+(this.terminals_[symbol] || symbol)+\"'\"));\n }\n this.parseError(errStr,\n {text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected});\n }\n\n // just recovered from another error\n if (recovering == 3) {\n if (symbol == EOF) {\n throw new Error(errStr || 'Parsing halted.');\n }\n\n // discard current lookahead and grab another\n yyleng = this.lexer.yyleng;\n yytext = this.lexer.yytext;\n yylineno = this.lexer.yylineno;\n yyloc = this.lexer.yylloc;\n symbol = lex();\n }\n\n // try to recover from error\n while (1) {\n // check for error recovery rule in this state\n if ((TERROR.toString()) in table[state]) {\n break;\n }\n if (state == 0) {\n throw new Error(errStr || 'Parsing halted.');\n }\n popStack(1);\n state = stack[stack.length-1];\n }\n\n preErrorSymbol = symbol; // save the lookahead token\n symbol = TERROR; // insert generic error symbol as new lookahead\n state = stack[stack.length-1];\n action = table[state] && table[state][TERROR];\n recovering = 3; // allow 3 real symbols to be shifted before reporting a new error\n }\n\n // this shouldn't happen, unless resolve defaults are off\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: '+state+', token: '+symbol);\n }\n\n switch (action[0]) {\n\n case 1: // shift\n //this.shiftCount++;\n\n stack.push(symbol);\n vstack.push(this.lexer.yytext);\n lstack.push(this.lexer.yylloc);\n stack.push(action[1]); // push state\n symbol = null;\n if (!preErrorSymbol) { // normal execution/no error\n yyleng = this.lexer.yyleng;\n yytext = this.lexer.yytext;\n yylineno = this.lexer.yylineno;\n yyloc = this.lexer.yylloc;\n if (recovering > 0)\n recovering--;\n } else { // error just occurred, resume old lookahead f/ before error\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n\n case 2: // reduce\n //this.reductionCount++;\n\n len = this.productions_[action[1]][1];\n\n // perform semantic action\n yyval.$ = vstack[vstack.length-len]; // default to $$ = $1\n // default location, uses first token for firsts, last for lasts\n yyval._$ = {\n first_line: lstack[lstack.length-(len||1)].first_line,\n last_line: lstack[lstack.length-1].last_line,\n first_column: lstack[lstack.length-(len||1)].first_column,\n last_column: lstack[lstack.length-1].last_column\n };\n r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack);\n\n if (typeof r !== 'undefined') {\n return r;\n }\n\n // pop off stack\n if (len) {\n stack = stack.slice(0,-1*len*2);\n vstack = vstack.slice(0, -1*len);\n lstack = lstack.slice(0, -1*len);\n }\n\n stack.push(this.productions_[action[1]][0]); // push nonterminal (reduce)\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n // goto new state = table[STATE][NONTERMINAL]\n newState = table[stack[stack.length-2]][stack[stack.length-1]];\n stack.push(newState);\n break;\n\n case 3: // accept\n return true;\n }\n\n }\n\n return true;\n}};/* Jison generated lexer */\nvar lexer = (function(){\n\nvar lexer = ({EOF:1,\nparseError:function parseError(str, hash) {\n if (this.yy.parseError) {\n this.yy.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\nsetInput:function (input) {\n this._input = input;\n this._more = this._less = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {first_line:1,first_column:0,last_line:1,last_column:0};\n return this;\n },\ninput:function () {\n var ch = this._input[0];\n this.yytext+=ch;\n this.yyleng++;\n this.match+=ch;\n this.matched+=ch;\n var lines = ch.match(/\\n/);\n if (lines) this.yylineno++;\n this._input = this._input.slice(1);\n return ch;\n },\nunput:function (ch) {\n this._input = ch + this._input;\n return this;\n },\nmore:function () {\n this._more = true;\n return this;\n },\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20)+(next.length > 20 ? '...':'')).replace(/\\n/g, \"\");\n },\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c+\"^\";\n },\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) this.done = true;\n\n var token,\n match,\n col,\n lines;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i=0;i < rules.length; i++) {\n match = this._input.match(this.rules[rules[i]]);\n if (match) {\n lines = match[0].match(/\\n.*/g);\n if (lines) this.yylineno += lines.length;\n this.yylloc = {first_line: this.yylloc.last_line,\n last_line: this.yylineno+1,\n first_column: this.yylloc.last_column,\n last_column: lines ? lines[lines.length-1].length-1 : this.yylloc.last_column + match[0].length}\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n this._more = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, rules[i],this.conditionStack[this.conditionStack.length-1]);\n if (token) return token;\n else return;\n }\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n this.parseError('Lexical error on line '+(this.yylineno+1)+'. Unrecognized text.\\n'+this.showPosition(),\n {text: \"\", token: null, line: this.yylineno});\n }\n },\nlex:function lex() {\n var r = this.next();\n if (typeof r !== 'undefined') {\n return r;\n } else {\n return this.lex();\n }\n },\nbegin:function begin(condition) {\n this.conditionStack.push(condition);\n },\npopState:function popState() {\n return this.conditionStack.pop();\n },\n_currentRules:function _currentRules() {\n return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules;\n },\ntopState:function () {\n return this.conditionStack[this.conditionStack.length-2];\n },\npushState:function begin(condition) {\n this.begin(condition);\n }});\nlexer.performAction = function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\n\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0:/* skip whitespace */\nbreak;\ncase 1:return 20\nbreak;\ncase 2:return 19\nbreak;\ncase 3:return 8\nbreak;\ncase 4:return 9\nbreak;\ncase 5:return 6\nbreak;\ncase 6:return 7\nbreak;\ncase 7:return 11\nbreak;\ncase 8:return 13\nbreak;\ncase 9:return 10\nbreak;\ncase 10:return 12\nbreak;\ncase 11:return 14\nbreak;\ncase 12:return 15\nbreak;\ncase 13:return 16\nbreak;\ncase 14:return 17\nbreak;\ncase 15:return 18\nbreak;\ncase 16:return 5\nbreak;\ncase 17:return 'INVALID'\nbreak;\n}\n};\nlexer.rules = [/^\\s+/,/^[0-9]+(\\.[0-9]+)?\\b/,/^n\\b/,/^\\|\\|/,/^&&/,/^\\?/,/^:/,/^<=/,/^>=/,/^/,/^!=/,/^==/,/^%/,/^\\(/,/^\\)/,/^$/,/^./];\nlexer.conditions = {\"INITIAL\":{\"rules\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],\"inclusive\":true}};return lexer;})()\nparser.lexer = lexer;\nreturn parser;\n})();\n// End parser\n\n // Handle node, amd, and global systems\n if (true) {\n if (typeof module !== 'undefined' && module.exports) {\n exports = module.exports = Jed;\n }\n exports.Jed = Jed;\n }\n else {\n if (typeof define === 'function' && define.amd) {\n define(function() {\n return Jed;\n });\n }\n // Leak a global regardless of module system\n root['Jed'] = Jed;\n }\n\n})(this);\n\n\n/***/ }),\n\n/***/ \"../../../node_modules/js-cookie/src/js.cookie.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\n * JavaScript Cookie v2.1.3\n * https://github.com/js-cookie/js-cookie\n *\n * Copyright 2006, 2015 Klaus Hartl & Fagner Brack\n * Released under the MIT license\n */\n;(function (factory) {\n\tvar registeredInModuleLoader = false;\n\tif (true) {\n\t\t!(__WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) :\n\t\t\t\t__WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (true) {\n\t\tmodule.exports = factory();\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (!registeredInModuleLoader) {\n\t\tvar OldCookies = window.Cookies;\n\t\tvar api = window.Cookies = factory();\n\t\tapi.noConflict = function () {\n\t\t\twindow.Cookies = OldCookies;\n\t\t\treturn api;\n\t\t};\n\t}\n}(function () {\n\tfunction extend () {\n\t\tvar i = 0;\n\t\tvar result = {};\n\t\tfor (; i < arguments.length; i++) {\n\t\t\tvar attributes = arguments[ i ];\n\t\t\tfor (var key in attributes) {\n\t\t\t\tresult[key] = attributes[key];\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tfunction init (converter) {\n\t\tfunction api (key, value, attributes) {\n\t\t\tvar result;\n\t\t\tif (typeof document === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Write\n\n\t\t\tif (arguments.length > 1) {\n\t\t\t\tattributes = extend({\n\t\t\t\t\tpath: '/'\n\t\t\t\t}, api.defaults, attributes);\n\n\t\t\t\tif (typeof attributes.expires === 'number') {\n\t\t\t\t\tvar expires = new Date();\n\t\t\t\t\texpires.setMilliseconds(expires.getMilliseconds() + attributes.expires * 864e+5);\n\t\t\t\t\tattributes.expires = expires;\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tresult = JSON.stringify(value);\n\t\t\t\t\tif (/^[\\{\\[]/.test(result)) {\n\t\t\t\t\t\tvalue = result;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {}\n\n\t\t\t\tif (!converter.write) {\n\t\t\t\t\tvalue = encodeURIComponent(String(value))\n\t\t\t\t\t\t.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);\n\t\t\t\t} else {\n\t\t\t\t\tvalue = converter.write(value, key);\n\t\t\t\t}\n\n\t\t\t\tkey = encodeURIComponent(String(key));\n\t\t\t\tkey = key.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent);\n\t\t\t\tkey = key.replace(/[\\(\\)]/g, escape);\n\n\t\t\t\treturn (document.cookie = [\n\t\t\t\t\tkey, '=', value,\n\t\t\t\t\tattributes.expires ? '; expires=' + attributes.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE\n\t\t\t\t\tattributes.path ? '; path=' + attributes.path : '',\n\t\t\t\t\tattributes.domain ? '; domain=' + attributes.domain : '',\n\t\t\t\t\tattributes.secure ? '; secure' : ''\n\t\t\t\t].join(''));\n\t\t\t}\n\n\t\t\t// Read\n\n\t\t\tif (!key) {\n\t\t\t\tresult = {};\n\t\t\t}\n\n\t\t\t// To prevent the for loop in the first place assign an empty array\n\t\t\t// in case there are no cookies at all. Also prevents odd result when\n\t\t\t// calling \"get()\"\n\t\t\tvar cookies = document.cookie ? document.cookie.split('; ') : [];\n\t\t\tvar rdecode = /(%[0-9A-Z]{2})+/g;\n\t\t\tvar i = 0;\n\n\t\t\tfor (; i < cookies.length; i++) {\n\t\t\t\tvar parts = cookies[i].split('=');\n\t\t\t\tvar cookie = parts.slice(1).join('=');\n\n\t\t\t\tif (cookie.charAt(0) === '\"') {\n\t\t\t\t\tcookie = cookie.slice(1, -1);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar name = parts[0].replace(rdecode, decodeURIComponent);\n\t\t\t\t\tcookie = converter.read ?\n\t\t\t\t\t\tconverter.read(cookie, name) : converter(cookie, name) ||\n\t\t\t\t\t\tcookie.replace(rdecode, decodeURIComponent);\n\n\t\t\t\t\tif (this.json) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tcookie = JSON.parse(cookie);\n\t\t\t\t\t\t} catch (e) {}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (key === name) {\n\t\t\t\t\t\tresult = cookie;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!key) {\n\t\t\t\t\t\tresult[name] = cookie;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {}\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\n\t\tapi.set = api;\n\t\tapi.get = function (key) {\n\t\t\treturn api.call(api, key);\n\t\t};\n\t\tapi.getJSON = function () {\n\t\t\treturn api.apply({\n\t\t\t\tjson: true\n\t\t\t}, [].slice.call(arguments));\n\t\t};\n\t\tapi.defaults = {};\n\n\t\tapi.remove = function (key, attributes) {\n\t\t\tapi(key, '', extend(attributes, {\n\t\t\t\texpires: -1\n\t\t\t}));\n\t\t};\n\n\t\tapi.withConverter = init;\n\n\t\treturn api;\n\t}\n\n\treturn init(function () {});\n}));\n\n\n/***/ }),\n\n/***/ \"../../../node_modules/mousetrap/mousetrap.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/*global define:false */\n/**\n * Copyright 2013 Craig Campbell\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * Mousetrap is a simple keyboard shortcut library for Javascript with\n * no external dependencies\n *\n * @version 1.4.6\n * @url craig.is/killing/mice\n */\n(function(window, document, undefined) {\n\n /**\n * mapping of special keycodes to their corresponding keys\n *\n * everything in this dictionary cannot use keypress events\n * so it has to be here to map to the correct keycodes for\n * keyup/keydown events\n *\n * @type {Object}\n */\n var _MAP = {\n 8: 'backspace',\n 9: 'tab',\n 13: 'enter',\n 16: 'shift',\n 17: 'ctrl',\n 18: 'alt',\n 20: 'capslock',\n 27: 'esc',\n 32: 'space',\n 33: 'pageup',\n 34: 'pagedown',\n 35: 'end',\n 36: 'home',\n 37: 'left',\n 38: 'up',\n 39: 'right',\n 40: 'down',\n 45: 'ins',\n 46: 'del',\n 91: 'meta',\n 93: 'meta',\n 224: 'meta'\n },\n\n /**\n * mapping for special characters so they can support\n *\n * this dictionary is only used incase you want to bind a\n * keyup or keydown event to one of these keys\n *\n * @type {Object}\n */\n _KEYCODE_MAP = {\n 106: '*',\n 107: '+',\n 109: '-',\n 110: '.',\n 111 : '/',\n 186: ';',\n 187: '=',\n 188: ',',\n 189: '-',\n 190: '.',\n 191: '/',\n 192: '`',\n 219: '[',\n 220: '\\\\',\n 221: ']',\n 222: '\\''\n },\n\n /**\n * this is a mapping of keys that require shift on a US keypad\n * back to the non shift equivelents\n *\n * this is so you can use keyup events with these keys\n *\n * note that this will only work reliably on US keyboards\n *\n * @type {Object}\n */\n _SHIFT_MAP = {\n '~': '`',\n '!': '1',\n '@': '2',\n '#': '3',\n '$': '4',\n '%': '5',\n '^': '6',\n '&': '7',\n '*': '8',\n '(': '9',\n ')': '0',\n '_': '-',\n '+': '=',\n ':': ';',\n '\\\"': '\\'',\n '<': ',',\n '>': '.',\n '?': '/',\n '|': '\\\\'\n },\n\n /**\n * this is a list of special strings you can use to map\n * to modifier keys when you specify your keyboard shortcuts\n *\n * @type {Object}\n */\n _SPECIAL_ALIASES = {\n 'option': 'alt',\n 'command': 'meta',\n 'return': 'enter',\n 'escape': 'esc',\n 'mod': /Mac|iPod|iPhone|iPad/.test(navigator.platform) ? 'meta' : 'ctrl'\n },\n\n /**\n * variable to store the flipped version of _MAP from above\n * needed to check if we should use keypress or not when no action\n * is specified\n *\n * @type {Object|undefined}\n */\n _REVERSE_MAP,\n\n /**\n * a list of all the callbacks setup via Mousetrap.bind()\n *\n * @type {Object}\n */\n _callbacks = {},\n\n /**\n * direct map of string combinations to callbacks used for trigger()\n *\n * @type {Object}\n */\n _directMap = {},\n\n /**\n * keeps track of what level each sequence is at since multiple\n * sequences can start out with the same sequence\n *\n * @type {Object}\n */\n _sequenceLevels = {},\n\n /**\n * variable to store the setTimeout call\n *\n * @type {null|number}\n */\n _resetTimer,\n\n /**\n * temporary state where we will ignore the next keyup\n *\n * @type {boolean|string}\n */\n _ignoreNextKeyup = false,\n\n /**\n * temporary state where we will ignore the next keypress\n *\n * @type {boolean}\n */\n _ignoreNextKeypress = false,\n\n /**\n * are we currently inside of a sequence?\n * type of action (\"keyup\" or \"keydown\" or \"keypress\") or false\n *\n * @type {boolean|string}\n */\n _nextExpectedAction = false;\n\n /**\n * loop through the f keys, f1 to f19 and add them to the map\n * programatically\n */\n for (var i = 1; i < 20; ++i) {\n _MAP[111 + i] = 'f' + i;\n }\n\n /**\n * loop through to map numbers on the numeric keypad\n */\n for (i = 0; i <= 9; ++i) {\n _MAP[i + 96] = i;\n }\n\n /**\n * cross browser add event method\n *\n * @param {Element|HTMLDocument} object\n * @param {string} type\n * @param {Function} callback\n * @returns void\n */\n function _addEvent(object, type, callback) {\n if (object.addEventListener) {\n object.addEventListener(type, callback, false);\n return;\n }\n\n object.attachEvent('on' + type, callback);\n }\n\n /**\n * takes the event and returns the key character\n *\n * @param {Event} e\n * @return {string}\n */\n function _characterFromEvent(e) {\n\n // for keypress events we should return the character as is\n if (e.type == 'keypress') {\n var character = String.fromCharCode(e.which);\n\n // if the shift key is not pressed then it is safe to assume\n // that we want the character to be lowercase. this means if\n // you accidentally have caps lock on then your key bindings\n // will continue to work\n //\n // the only side effect that might not be desired is if you\n // bind something like 'A' cause you want to trigger an\n // event when capital A is pressed caps lock will no longer\n // trigger the event. shift+a will though.\n if (!e.shiftKey) {\n character = character.toLowerCase();\n }\n\n return character;\n }\n\n // for non keypress events the special maps are needed\n if (_MAP[e.which]) {\n return _MAP[e.which];\n }\n\n if (_KEYCODE_MAP[e.which]) {\n return _KEYCODE_MAP[e.which];\n }\n\n // if it is not in the special map\n\n // with keydown and keyup events the character seems to always\n // come in as an uppercase character whether you are pressing shift\n // or not. we should make sure it is always lowercase for comparisons\n return String.fromCharCode(e.which).toLowerCase();\n }\n\n /**\n * checks if two arrays are equal\n *\n * @param {Array} modifiers1\n * @param {Array} modifiers2\n * @returns {boolean}\n */\n function _modifiersMatch(modifiers1, modifiers2) {\n return modifiers1.sort().join(',') === modifiers2.sort().join(',');\n }\n\n /**\n * resets all sequence counters except for the ones passed in\n *\n * @param {Object} doNotReset\n * @returns void\n */\n function _resetSequences(doNotReset) {\n doNotReset = doNotReset || {};\n\n var activeSequences = false,\n key;\n\n for (key in _sequenceLevels) {\n if (doNotReset[key]) {\n activeSequences = true;\n continue;\n }\n _sequenceLevels[key] = 0;\n }\n\n if (!activeSequences) {\n _nextExpectedAction = false;\n }\n }\n\n /**\n * finds all callbacks that match based on the keycode, modifiers,\n * and action\n *\n * @param {string} character\n * @param {Array} modifiers\n * @param {Event|Object} e\n * @param {string=} sequenceName - name of the sequence we are looking for\n * @param {string=} combination\n * @param {number=} level\n * @returns {Array}\n */\n function _getMatches(character, modifiers, e, sequenceName, combination, level) {\n var i,\n callback,\n matches = [],\n action = e.type;\n\n // if there are no events related to this keycode\n if (!_callbacks[character]) {\n return [];\n }\n\n // if a modifier key is coming up on its own we should allow it\n if (action == 'keyup' && _isModifier(character)) {\n modifiers = [character];\n }\n\n // loop through all callbacks for the key that was pressed\n // and see if any of them match\n for (i = 0; i < _callbacks[character].length; ++i) {\n callback = _callbacks[character][i];\n\n // if a sequence name is not specified, but this is a sequence at\n // the wrong level then move onto the next match\n if (!sequenceName && callback.seq && _sequenceLevels[callback.seq] != callback.level) {\n continue;\n }\n\n // if the action we are looking for doesn't match the action we got\n // then we should keep going\n if (action != callback.action) {\n continue;\n }\n\n // if this is a keypress event and the meta key and control key\n // are not pressed that means that we need to only look at the\n // character, otherwise check the modifiers as well\n //\n // chrome will not fire a keypress if meta or control is down\n // safari will fire a keypress if meta or meta+shift is down\n // firefox will fire a keypress if meta or control is down\n if ((action == 'keypress' && !e.metaKey && !e.ctrlKey) || _modifiersMatch(modifiers, callback.modifiers)) {\n\n // when you bind a combination or sequence a second time it\n // should overwrite the first one. if a sequenceName or\n // combination is specified in this call it does just that\n //\n // @todo make deleting its own method?\n var deleteCombo = !sequenceName && callback.combo == combination;\n var deleteSequence = sequenceName && callback.seq == sequenceName && callback.level == level;\n if (deleteCombo || deleteSequence) {\n _callbacks[character].splice(i, 1);\n }\n\n matches.push(callback);\n }\n }\n\n return matches;\n }\n\n /**\n * takes a key event and figures out what the modifiers are\n *\n * @param {Event} e\n * @returns {Array}\n */\n function _eventModifiers(e) {\n var modifiers = [];\n\n if (e.shiftKey) {\n modifiers.push('shift');\n }\n\n if (e.altKey) {\n modifiers.push('alt');\n }\n\n if (e.ctrlKey) {\n modifiers.push('ctrl');\n }\n\n if (e.metaKey) {\n modifiers.push('meta');\n }\n\n return modifiers;\n }\n\n /**\n * prevents default for this event\n *\n * @param {Event} e\n * @returns void\n */\n function _preventDefault(e) {\n if (e.preventDefault) {\n e.preventDefault();\n return;\n }\n\n e.returnValue = false;\n }\n\n /**\n * stops propogation for this event\n *\n * @param {Event} e\n * @returns void\n */\n function _stopPropagation(e) {\n if (e.stopPropagation) {\n e.stopPropagation();\n return;\n }\n\n e.cancelBubble = true;\n }\n\n /**\n * actually calls the callback function\n *\n * if your callback function returns false this will use the jquery\n * convention - prevent default and stop propogation on the event\n *\n * @param {Function} callback\n * @param {Event} e\n * @returns void\n */\n function _fireCallback(callback, e, combo, sequence) {\n\n // if this event should not happen stop here\n if (Mousetrap.stopCallback(e, e.target || e.srcElement, combo, sequence)) {\n return;\n }\n\n if (callback(e, combo) === false) {\n _preventDefault(e);\n _stopPropagation(e);\n }\n }\n\n /**\n * handles a character key event\n *\n * @param {string} character\n * @param {Array} modifiers\n * @param {Event} e\n * @returns void\n */\n function _handleKey(character, modifiers, e) {\n var callbacks = _getMatches(character, modifiers, e),\n i,\n doNotReset = {},\n maxLevel = 0,\n processedSequenceCallback = false;\n\n // Calculate the maxLevel for sequences so we can only execute the longest callback sequence\n for (i = 0; i < callbacks.length; ++i) {\n if (callbacks[i].seq) {\n maxLevel = Math.max(maxLevel, callbacks[i].level);\n }\n }\n\n // loop through matching callbacks for this key event\n for (i = 0; i < callbacks.length; ++i) {\n\n // fire for all sequence callbacks\n // this is because if for example you have multiple sequences\n // bound such as \"g i\" and \"g t\" they both need to fire the\n // callback for matching g cause otherwise you can only ever\n // match the first one\n if (callbacks[i].seq) {\n\n // only fire callbacks for the maxLevel to prevent\n // subsequences from also firing\n //\n // for example 'a option b' should not cause 'option b' to fire\n // even though 'option b' is part of the other sequence\n //\n // any sequences that do not match here will be discarded\n // below by the _resetSequences call\n if (callbacks[i].level != maxLevel) {\n continue;\n }\n\n processedSequenceCallback = true;\n\n // keep a list of which sequences were matches for later\n doNotReset[callbacks[i].seq] = 1;\n _fireCallback(callbacks[i].callback, e, callbacks[i].combo, callbacks[i].seq);\n continue;\n }\n\n // if there were no sequence matches but we are still here\n // that means this is a regular match so we should fire that\n if (!processedSequenceCallback) {\n _fireCallback(callbacks[i].callback, e, callbacks[i].combo);\n }\n }\n\n // if the key you pressed matches the type of sequence without\n // being a modifier (ie \"keyup\" or \"keypress\") then we should\n // reset all sequences that were not matched by this event\n //\n // this is so, for example, if you have the sequence \"h a t\" and you\n // type \"h e a r t\" it does not match. in this case the \"e\" will\n // cause the sequence to reset\n //\n // modifier keys are ignored because you can have a sequence\n // that contains modifiers such as \"enter ctrl+space\" and in most\n // cases the modifier key will be pressed before the next key\n //\n // also if you have a sequence such as \"ctrl+b a\" then pressing the\n // \"b\" key will trigger a \"keypress\" and a \"keydown\"\n //\n // the \"keydown\" is expected when there is a modifier, but the\n // \"keypress\" ends up matching the _nextExpectedAction since it occurs\n // after and that causes the sequence to reset\n //\n // we ignore keypresses in a sequence that directly follow a keydown\n // for the same character\n var ignoreThisKeypress = e.type == 'keypress' && _ignoreNextKeypress;\n if (e.type == _nextExpectedAction && !_isModifier(character) && !ignoreThisKeypress) {\n _resetSequences(doNotReset);\n }\n\n _ignoreNextKeypress = processedSequenceCallback && e.type == 'keydown';\n }\n\n /**\n * handles a keydown event\n *\n * @param {Event} e\n * @returns void\n */\n function _handleKeyEvent(e) {\n\n // normalize e.which for key events\n // @see http://stackoverflow.com/questions/4285627/javascript-keycode-vs-charcode-utter-confusion\n if (typeof e.which !== 'number') {\n e.which = e.keyCode;\n }\n\n var character = _characterFromEvent(e);\n\n // no character found then stop\n if (!character) {\n return;\n }\n\n // need to use === for the character check because the character can be 0\n if (e.type == 'keyup' && _ignoreNextKeyup === character) {\n _ignoreNextKeyup = false;\n return;\n }\n\n Mousetrap.handleKey(character, _eventModifiers(e), e);\n }\n\n /**\n * determines if the keycode specified is a modifier key or not\n *\n * @param {string} key\n * @returns {boolean}\n */\n function _isModifier(key) {\n return key == 'shift' || key == 'ctrl' || key == 'alt' || key == 'meta';\n }\n\n /**\n * called to set a 1 second timeout on the specified sequence\n *\n * this is so after each key press in the sequence you have 1 second\n * to press the next key before you have to start over\n *\n * @returns void\n */\n function _resetSequenceTimer() {\n clearTimeout(_resetTimer);\n _resetTimer = setTimeout(_resetSequences, 1000);\n }\n\n /**\n * reverses the map lookup so that we can look for specific keys\n * to see what can and can't use keypress\n *\n * @return {Object}\n */\n function _getReverseMap() {\n if (!_REVERSE_MAP) {\n _REVERSE_MAP = {};\n for (var key in _MAP) {\n\n // pull out the numeric keypad from here cause keypress should\n // be able to detect the keys from the character\n if (key > 95 && key < 112) {\n continue;\n }\n\n if (_MAP.hasOwnProperty(key)) {\n _REVERSE_MAP[_MAP[key]] = key;\n }\n }\n }\n return _REVERSE_MAP;\n }\n\n /**\n * picks the best action based on the key combination\n *\n * @param {string} key - character for key\n * @param {Array} modifiers\n * @param {string=} action passed in\n */\n function _pickBestAction(key, modifiers, action) {\n\n // if no action was picked in we should try to pick the one\n // that we think would work best for this key\n if (!action) {\n action = _getReverseMap()[key] ? 'keydown' : 'keypress';\n }\n\n // modifier keys don't work as expected with keypress,\n // switch to keydown\n if (action == 'keypress' && modifiers.length) {\n action = 'keydown';\n }\n\n return action;\n }\n\n /**\n * binds a key sequence to an event\n *\n * @param {string} combo - combo specified in bind call\n * @param {Array} keys\n * @param {Function} callback\n * @param {string=} action\n * @returns void\n */\n function _bindSequence(combo, keys, callback, action) {\n\n // start off by adding a sequence level record for this combination\n // and setting the level to 0\n _sequenceLevels[combo] = 0;\n\n /**\n * callback to increase the sequence level for this sequence and reset\n * all other sequences that were active\n *\n * @param {string} nextAction\n * @returns {Function}\n */\n function _increaseSequence(nextAction) {\n return function() {\n _nextExpectedAction = nextAction;\n ++_sequenceLevels[combo];\n _resetSequenceTimer();\n };\n }\n\n /**\n * wraps the specified callback inside of another function in order\n * to reset all sequence counters as soon as this sequence is done\n *\n * @param {Event} e\n * @returns void\n */\n function _callbackAndReset(e) {\n _fireCallback(callback, e, combo);\n\n // we should ignore the next key up if the action is key down\n // or keypress. this is so if you finish a sequence and\n // release the key the final key will not trigger a keyup\n if (action !== 'keyup') {\n _ignoreNextKeyup = _characterFromEvent(e);\n }\n\n // weird race condition if a sequence ends with the key\n // another sequence begins with\n setTimeout(_resetSequences, 10);\n }\n\n // loop through keys one at a time and bind the appropriate callback\n // function. for any key leading up to the final one it should\n // increase the sequence. after the final, it should reset all sequences\n //\n // if an action is specified in the original bind call then that will\n // be used throughout. otherwise we will pass the action that the\n // next key in the sequence should match. this allows a sequence\n // to mix and match keypress and keydown events depending on which\n // ones are better suited to the key provided\n for (var i = 0; i < keys.length; ++i) {\n var isFinal = i + 1 === keys.length;\n var wrappedCallback = isFinal ? _callbackAndReset : _increaseSequence(action || _getKeyInfo(keys[i + 1]).action);\n _bindSingle(keys[i], wrappedCallback, action, combo, i);\n }\n }\n\n /**\n * Converts from a string key combination to an array\n *\n * @param {string} combination like \"command+shift+l\"\n * @return {Array}\n */\n function _keysFromString(combination) {\n if (combination === '+') {\n return ['+'];\n }\n\n return combination.split('+');\n }\n\n /**\n * Gets info for a specific key combination\n *\n * @param {string} combination key combination (\"command+s\" or \"a\" or \"*\")\n * @param {string=} action\n * @returns {Object}\n */\n function _getKeyInfo(combination, action) {\n var keys,\n key,\n i,\n modifiers = [];\n\n // take the keys from this pattern and figure out what the actual\n // pattern is all about\n keys = _keysFromString(combination);\n\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n\n // normalize key names\n if (_SPECIAL_ALIASES[key]) {\n key = _SPECIAL_ALIASES[key];\n }\n\n // if this is not a keypress event then we should\n // be smart about using shift keys\n // this will only work for US keyboards however\n if (action && action != 'keypress' && _SHIFT_MAP[key]) {\n key = _SHIFT_MAP[key];\n modifiers.push('shift');\n }\n\n // if this key is a modifier then add it to the list of modifiers\n if (_isModifier(key)) {\n modifiers.push(key);\n }\n }\n\n // depending on what the key combination is\n // we will try to pick the best event for it\n action = _pickBestAction(key, modifiers, action);\n\n return {\n key: key,\n modifiers: modifiers,\n action: action\n };\n }\n\n /**\n * binds a single keyboard combination\n *\n * @param {string} combination\n * @param {Function} callback\n * @param {string=} action\n * @param {string=} sequenceName - name of sequence if part of sequence\n * @param {number=} level - what part of the sequence the command is\n * @returns void\n */\n function _bindSingle(combination, callback, action, sequenceName, level) {\n\n // store a direct mapped reference for use with Mousetrap.trigger\n _directMap[combination + ':' + action] = callback;\n\n // make sure multiple spaces in a row become a single space\n combination = combination.replace(/\\s+/g, ' ');\n\n var sequence = combination.split(' '),\n info;\n\n // if this pattern is a sequence of keys then run through this method\n // to reprocess each pattern one key at a time\n if (sequence.length > 1) {\n _bindSequence(combination, sequence, callback, action);\n return;\n }\n\n info = _getKeyInfo(combination, action);\n\n // make sure to initialize array if this is the first time\n // a callback is added for this key\n _callbacks[info.key] = _callbacks[info.key] || [];\n\n // remove an existing match if there is one\n _getMatches(info.key, info.modifiers, {type: info.action}, sequenceName, combination, level);\n\n // add this call back to the array\n // if it is a sequence put it at the beginning\n // if not put it at the end\n //\n // this is important because the way these are processed expects\n // the sequence ones to come first\n _callbacks[info.key][sequenceName ? 'unshift' : 'push']({\n callback: callback,\n modifiers: info.modifiers,\n action: info.action,\n seq: sequenceName,\n level: level,\n combo: combination\n });\n }\n\n /**\n * binds multiple combinations to the same callback\n *\n * @param {Array} combinations\n * @param {Function} callback\n * @param {string|undefined} action\n * @returns void\n */\n function _bindMultiple(combinations, callback, action) {\n for (var i = 0; i < combinations.length; ++i) {\n _bindSingle(combinations[i], callback, action);\n }\n }\n\n // start!\n _addEvent(document, 'keypress', _handleKeyEvent);\n _addEvent(document, 'keydown', _handleKeyEvent);\n _addEvent(document, 'keyup', _handleKeyEvent);\n\n var Mousetrap = {\n\n /**\n * binds an event to mousetrap\n *\n * can be a single key, a combination of keys separated with +,\n * an array of keys, or a sequence of keys separated by spaces\n *\n * be sure to list the modifier keys first to make sure that the\n * correct key ends up getting bound (the last key in the pattern)\n *\n * @param {string|Array} keys\n * @param {Function} callback\n * @param {string=} action - 'keypress', 'keydown', or 'keyup'\n * @returns void\n */\n bind: function(keys, callback, action) {\n keys = keys instanceof Array ? keys : [keys];\n _bindMultiple(keys, callback, action);\n return this;\n },\n\n /**\n * unbinds an event to mousetrap\n *\n * the unbinding sets the callback function of the specified key combo\n * to an empty function and deletes the corresponding key in the\n * _directMap dict.\n *\n * TODO: actually remove this from the _callbacks dictionary instead\n * of binding an empty function\n *\n * the keycombo+action has to be exactly the same as\n * it was defined in the bind method\n *\n * @param {string|Array} keys\n * @param {string} action\n * @returns void\n */\n unbind: function(keys, action) {\n return Mousetrap.bind(keys, function() {}, action);\n },\n\n /**\n * triggers an event that has already been bound\n *\n * @param {string} keys\n * @param {string=} action\n * @returns void\n */\n trigger: function(keys, action) {\n if (_directMap[keys + ':' + action]) {\n _directMap[keys + ':' + action]({}, keys);\n }\n return this;\n },\n\n /**\n * resets the library back to its initial state. this is useful\n * if you want to clear out the current keyboard shortcuts and bind\n * new ones - for example if you switch to another page\n *\n * @returns void\n */\n reset: function() {\n _callbacks = {};\n _directMap = {};\n return this;\n },\n\n /**\n * should we stop this event before firing off callbacks\n *\n * @param {Event} e\n * @param {Element} element\n * @return {boolean}\n */\n stopCallback: function(e, element) {\n\n // if the element has the class \"mousetrap\" then no need to stop\n if ((' ' + element.className + ' ').indexOf(' mousetrap ') > -1) {\n return false;\n }\n\n // stop for input, select, and textarea\n return element.tagName == 'INPUT' || element.tagName == 'SELECT' || element.tagName == 'TEXTAREA' || element.isContentEditable;\n },\n\n /**\n * exposes _handleKey publicly so it can be overwritten by extensions\n */\n handleKey: _handleKey\n };\n\n // expose mousetrap to the global object\n window.Mousetrap = Mousetrap;\n\n // expose mousetrap as an AMD module\n if (true) {\n !(__WEBPACK_AMD_DEFINE_FACTORY__ = (Mousetrap),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) :\n\t\t\t\t__WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n }\n}) (window, document);\n\n\n/***/ }),\n\n/***/ \"../../../node_modules/select/src/select.js\":\n/***/ (function(module, exports) {\n\nfunction select(element) {\n var selectedText;\n\n if (element.nodeName === 'SELECT') {\n element.focus();\n\n selectedText = element.value;\n }\n else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {\n var isReadOnly = element.hasAttribute('readonly');\n\n if (!isReadOnly) {\n element.setAttribute('readonly', '');\n }\n\n element.select();\n element.setSelectionRange(0, element.value.length);\n\n if (!isReadOnly) {\n element.removeAttribute('readonly');\n }\n\n selectedText = element.value;\n }\n else {\n if (element.hasAttribute('contenteditable')) {\n element.focus();\n }\n\n var selection = window.getSelection();\n var range = document.createRange();\n\n range.selectNodeContents(element);\n selection.removeAllRanges();\n selection.addRange(range);\n\n selectedText = selection.toString();\n }\n\n return selectedText;\n}\n\nmodule.exports = select;\n\n\n/***/ }),\n\n/***/ \"../../../node_modules/svg4everybody/dist/svg4everybody.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!function(root, factory) {\n true ? // AMD. Register as an anonymous module unless amdModuleId is set\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function() {\n return root.svg4everybody = factory();\n }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : \"object\" == typeof module && module.exports ? // Node. Does not work with strict CommonJS, but\n // only CommonJS-like environments that support module.exports,\n // like Node.\n module.exports = factory() : root.svg4everybody = factory();\n}(this, function() {\n /*! svg4everybody v2.1.9 | github.com/jonathantneal/svg4everybody */\n function embed(parent, svg, target) {\n // if the target exists\n if (target) {\n // create a document fragment to hold the contents of the target\n var fragment = document.createDocumentFragment(), viewBox = !svg.hasAttribute(\"viewBox\") && target.getAttribute(\"viewBox\");\n // conditionally set the viewBox on the svg\n viewBox && svg.setAttribute(\"viewBox\", viewBox);\n // copy the contents of the clone into the fragment\n for (// clone the target\n var clone = target.cloneNode(!0); clone.childNodes.length; ) {\n fragment.appendChild(clone.firstChild);\n }\n // append the fragment into the svg\n parent.appendChild(fragment);\n }\n }\n function loadreadystatechange(xhr) {\n // listen to changes in the request\n xhr.onreadystatechange = function() {\n // if the request is ready\n if (4 === xhr.readyState) {\n // get the cached html document\n var cachedDocument = xhr._cachedDocument;\n // ensure the cached html document based on the xhr response\n cachedDocument || (cachedDocument = xhr._cachedDocument = document.implementation.createHTMLDocument(\"\"), \n cachedDocument.body.innerHTML = xhr.responseText, xhr._cachedTarget = {}), // clear the xhr embeds list and embed each item\n xhr._embeds.splice(0).map(function(item) {\n // get the cached target\n var target = xhr._cachedTarget[item.id];\n // ensure the cached target\n target || (target = xhr._cachedTarget[item.id] = cachedDocument.getElementById(item.id)), \n // embed the target into the svg\n embed(item.parent, item.svg, target);\n });\n }\n }, // test the ready state change immediately\n xhr.onreadystatechange();\n }\n function svg4everybody(rawopts) {\n function oninterval() {\n // while the index exists in the live collection\n for (// get the cached index\n var index = 0; index < uses.length; ) {\n // get the current \n var use = uses[index], parent = use.parentNode, svg = getSVGAncestor(parent), src = use.getAttribute(\"xlink:href\") || use.getAttribute(\"href\");\n if (!src && opts.attributeName && (src = use.getAttribute(opts.attributeName)), \n svg && src) {\n if (polyfill) {\n if (!opts.validate || opts.validate(src, svg, use)) {\n // remove the element\n parent.removeChild(use);\n // parse the src and get the url and id\n var srcSplit = src.split(\"#\"), url = srcSplit.shift(), id = srcSplit.join(\"#\");\n // if the link is external\n if (url.length) {\n // get the cached xhr request\n var xhr = requests[url];\n // ensure the xhr request exists\n xhr || (xhr = requests[url] = new XMLHttpRequest(), xhr.open(\"GET\", url), xhr.send(), \n xhr._embeds = []), // add the svg and id as an item to the xhr embeds list\n xhr._embeds.push({\n parent: parent,\n svg: svg,\n id: id\n }), // prepare the xhr ready state change event\n loadreadystatechange(xhr);\n } else {\n // embed the local id into the svg\n embed(parent, svg, document.getElementById(id));\n }\n } else {\n // increase the index when the previous value was not \"valid\"\n ++index, ++numberOfSvgUseElementsToBypass;\n }\n }\n } else {\n // increase the index when the previous value was not \"valid\"\n ++index;\n }\n }\n // continue the interval\n (!uses.length || uses.length - numberOfSvgUseElementsToBypass > 0) && requestAnimationFrame(oninterval, 67);\n }\n var polyfill, opts = Object(rawopts), newerIEUA = /\\bTrident\\/[567]\\b|\\bMSIE (?:9|10)\\.0\\b/, webkitUA = /\\bAppleWebKit\\/(\\d+)\\b/, olderEdgeUA = /\\bEdge\\/12\\.(\\d+)\\b/, edgeUA = /\\bEdge\\/.(\\d+)\\b/, inIframe = window.top !== window.self;\n polyfill = \"polyfill\" in opts ? opts.polyfill : newerIEUA.test(navigator.userAgent) || (navigator.userAgent.match(olderEdgeUA) || [])[1] < 10547 || (navigator.userAgent.match(webkitUA) || [])[1] < 537 || edgeUA.test(navigator.userAgent) && inIframe;\n // create xhr requests object\n var requests = {}, requestAnimationFrame = window.requestAnimationFrame || setTimeout, uses = document.getElementsByTagName(\"use\"), numberOfSvgUseElementsToBypass = 0;\n // conditionally start the interval if the polyfill is active\n polyfill && oninterval();\n }\n function getSVGAncestor(node) {\n for (var svg = node; \"svg\" !== svg.nodeName.toLowerCase() && (svg = svg.parentNode); ) {}\n return svg;\n }\n return svg4everybody;\n});\n\n/***/ }),\n\n/***/ \"../../../node_modules/timeago.js/dist/timeago.min.js\":\n/***/ (function(module, exports) {\n\n!function(t,e){\"object\"==typeof module&&module.exports?(module.exports=e(),module.exports.default=module.exports):t.timeago=e()}(\"undefined\"!=typeof window?window:this,function(){function t(t){return t instanceof Date?t:isNaN(t)?/^\\d+$/.test(t)?new Date(e(t)):(t=(t||\"\").trim().replace(/\\.\\d+/,\"\").replace(/-/,\"/\").replace(/-/,\"/\").replace(/(\\d)T(\\d)/,\"$1 $2\").replace(/Z/,\" UTC\").replace(/([\\+\\-]\\d\\d)\\:?(\\d\\d)/,\" $1$2\"),new Date(t)):new Date(e(t))}function e(t){return parseInt(t)}function n(t,n,r){n=l[n]?n:l[r]?r:\"en\";for(var o=0,i=t<0?1:0,a=t=Math.abs(t);t>=p[o]&&o(0===o?9:1)&&(o+=1),l[n](t,o,a)[i].replace(\"%s\",t)}function r(e,n){return((n=n?t(n):new Date)-t(e))/1e3}function o(t){for(var e=1,n=0,r=Math.abs(t);t>=p[n]&&n1&&(n+=\"s\"),[t+\" \"+n+\" ago\",\"in \"+t+\" \"+n]},zh_CN:function(t,e){if(0===e)return[\"刚刚\",\"片刻后\"];var n=s[parseInt(e/2)];return[t+n+\"前\",t+n+\"后\"]}},p=[60,60,24,7,365/7/12,12],h=6,m=\"data-tid\",w={};return c.prototype.doRender=function(t,e,i){var a,c=r(e,this.nowDate),d=this;t.innerHTML=n(c,i,this.defaultLocale),w[a=setTimeout(function(){d.doRender(t,e,i),delete w[a]},Math.min(1e3*o(c),2147483647))]=0,u(t,a)},c.prototype.format=function(t,e){return n(r(t,this.nowDate),e,this.defaultLocale)},c.prototype.render=function(t,e){void 0===t.length&&(t=[t]);for(var n=0,r=t.length;n\n * MIT license\n *\n * Includes enhancements by Scott Trenda \n * and Kris Kowal \n *\n * Accepts a date, a mask, or a date and a mask.\n * Returns a formatted version of the given date.\n * The date defaults to the current date/time.\n * The mask defaults to dateFormat.masks.default.\n */\n (function (global, factory) {\n true ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global.dateFormat = factory());\n }(this, (function () { 'use strict';\n var dateFormat = function () {\n var token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\\1?|[LloSZ]|\"[^\"]*\"|'[^']*'/g,\n timezone = /\\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\\d{4})?)\\b/g,\n timezoneClip = /[^-+\\dA-Z]/g,\n pad = function (val, len) {\n val = String(val);\n len = len || 2;\n while (val.length < len) val = \"0\" + val;\n return val;\n };\n\n // Regexes and supporting functions are cached through closure\n return function (date, mask, utc) {\n var dF = dateFormat;\n\n // You can't provide utc if you skip other args (use the \"UTC:\" mask prefix)\n if (arguments.length == 1 && Object.prototype.toString.call(date) == \"[object String]\" && !/\\d/.test(date)) {\n mask = date;\n date = undefined;\n }\n\n // Passing date through Date applies Date.parse, if necessary\n date = date ? new Date(date) : new Date;\n if (isNaN(date)) throw SyntaxError(\"invalid date\");\n\n mask = String(dF.masks[mask] || mask || dF.masks[\"default\"]);\n\n // Allow setting the utc argument via the mask\n if (mask.slice(0, 4) == \"UTC:\") {\n mask = mask.slice(4);\n utc = true;\n }\n\n var _ = utc ? \"getUTC\" : \"get\",\n d = date[_ + \"Date\"](),\n D = date[_ + \"Day\"](),\n m = date[_ + \"Month\"](),\n y = date[_ + \"FullYear\"](),\n H = date[_ + \"Hours\"](),\n M = date[_ + \"Minutes\"](),\n s = date[_ + \"Seconds\"](),\n L = date[_ + \"Milliseconds\"](),\n o = utc ? 0 : date.getTimezoneOffset(),\n flags = {\n d: d,\n dd: pad(d),\n ddd: dF.i18n.dayNames[D],\n dddd: dF.i18n.dayNames[D + 7],\n m: m + 1,\n mm: pad(m + 1),\n mmm: dF.i18n.monthNames[m],\n mmmm: dF.i18n.monthNames[m + 12],\n yy: String(y).slice(2),\n yyyy: y,\n h: H % 12 || 12,\n hh: pad(H % 12 || 12),\n H: H,\n HH: pad(H),\n M: M,\n MM: pad(M),\n s: s,\n ss: pad(s),\n l: pad(L, 3),\n L: pad(L > 99 ? Math.round(L / 10) : L),\n t: H < 12 ? \"a\" : \"p\",\n tt: H < 12 ? \"am\" : \"pm\",\n T: H < 12 ? \"A\" : \"P\",\n TT: H < 12 ? \"AM\" : \"PM\",\n Z: utc ? \"UTC\" : (String(date).match(timezone) || [\"\"]).pop().replace(timezoneClip, \"\"),\n o: (o > 0 ? \"-\" : \"+\") + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4),\n S: [\"th\", \"st\", \"nd\", \"rd\"][d % 10 > 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10]\n };\n\n return mask.replace(token, function ($0) {\n return $0 in flags ? flags[$0] : $0.slice(1, $0.length - 1);\n });\n };\n }();\n\n // Some common format strings\n dateFormat.masks = {\n \"default\": \"ddd mmm dd yyyy HH:MM:ss\",\n shortDate: \"m/d/yy\",\n mediumDate: \"mmm d, yyyy\",\n longDate: \"mmmm d, yyyy\",\n fullDate: \"dddd, mmmm d, yyyy\",\n shortTime: \"h:MM TT\",\n mediumTime: \"h:MM:ss TT\",\n longTime: \"h:MM:ss TT Z\",\n isoDate: \"yyyy-mm-dd\",\n isoTime: \"HH:MM:ss\",\n isoDateTime: \"yyyy-mm-dd'T'HH:MM:ss\",\n isoUtcDateTime: \"UTC:yyyy-mm-dd'T'HH:MM:ss'Z'\"\n };\n\n // Internationalization strings\n dateFormat.i18n = {\n dayNames: [\n \"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\",\n \"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"\n ],\n monthNames: [\n \"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\",\n \"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"\n ]\n };\n\n // For convenience...\n Date.prototype.format = function (mask, utc) {\n return dateFormat(this, mask, utc);\n };\n\n return dateFormat;\n})));\n\n\n/***/ }),\n\n/***/ \"./api.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_axios_utils__ = __webpack_require__(\"./lib/utils/axios_utils.js\");\n\n\n\nvar Api = {\n groupsPath: '/api/:version/groups.json',\n groupPath: '/api/:version/groups/:id',\n namespacesPath: '/api/:version/namespaces.json',\n groupProjectsPath: '/api/:version/groups/:id/projects.json',\n projectsPath: '/api/:version/projects.json',\n projectPath: '/api/:version/projects/:id',\n projectLabelsPath: '/:namespace_path/:project_path/labels',\n groupLabelsPath: '/groups/:namespace_path/-/labels',\n licensePath: '/api/:version/templates/licenses/:key',\n gitignorePath: '/api/:version/templates/gitignores/:key',\n gitlabCiYmlPath: '/api/:version/templates/gitlab_ci_ymls/:key',\n dockerfilePath: '/api/:version/templates/dockerfiles/:key',\n issuableTemplatePath: '/:namespace_path/:project_path/templates/:type/:key',\n usersPath: '/api/:version/users.json',\n commitPath: '/api/:version/projects/:id/repository/commits',\n branchSinglePath: '/api/:version/projects/:id/repository/branches/:branch',\n createBranchPath: '/api/:version/projects/:id/repository/branches',\n\n group: function group(groupId, callback) {\n var url = Api.buildUrl(Api.groupPath).replace(':id', groupId);\n return __WEBPACK_IMPORTED_MODULE_1__lib_utils_axios_utils__[\"a\" /* default */].get(url).then(function (_ref) {\n var data = _ref.data;\n\n callback(data);\n\n return data;\n });\n },\n\n\n // Return groups list. Filtered by query\n groups: function groups(query, options) {\n var callback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : $.noop;\n\n var url = Api.buildUrl(Api.groupsPath);\n return __WEBPACK_IMPORTED_MODULE_1__lib_utils_axios_utils__[\"a\" /* default */].get(url, {\n params: Object.assign({\n search: query,\n per_page: 20\n }, options)\n }).then(function (_ref2) {\n var data = _ref2.data;\n\n callback(data);\n\n return data;\n });\n },\n\n\n // Return namespaces list. Filtered by query\n namespaces: function namespaces(query, callback) {\n var url = Api.buildUrl(Api.namespacesPath);\n return __WEBPACK_IMPORTED_MODULE_1__lib_utils_axios_utils__[\"a\" /* default */].get(url, {\n params: {\n search: query,\n per_page: 20\n }\n }).then(function (_ref3) {\n var data = _ref3.data;\n return callback(data);\n });\n },\n\n\n // Return projects list. Filtered by query\n projects: function projects(query, options) {\n var callback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : __WEBPACK_IMPORTED_MODULE_0_underscore___default.a.noop;\n\n var url = Api.buildUrl(Api.projectsPath);\n var defaults = {\n search: query,\n per_page: 20,\n simple: true\n };\n\n if (gon.current_user_id) {\n defaults.membership = true;\n }\n\n return __WEBPACK_IMPORTED_MODULE_1__lib_utils_axios_utils__[\"a\" /* default */].get(url, {\n params: Object.assign(defaults, options)\n }).then(function (_ref4) {\n var data = _ref4.data;\n\n callback(data);\n\n return data;\n });\n },\n\n\n // Return single project\n project: function project(projectPath) {\n var url = Api.buildUrl(Api.projectPath).replace(':id', encodeURIComponent(projectPath));\n\n return __WEBPACK_IMPORTED_MODULE_1__lib_utils_axios_utils__[\"a\" /* default */].get(url);\n },\n newLabel: function newLabel(namespacePath, projectPath, data, callback) {\n var url = void 0;\n\n if (projectPath) {\n url = Api.buildUrl(Api.projectLabelsPath).replace(':namespace_path', namespacePath).replace(':project_path', projectPath);\n } else {\n url = Api.buildUrl(Api.groupLabelsPath).replace(':namespace_path', namespacePath);\n }\n\n return __WEBPACK_IMPORTED_MODULE_1__lib_utils_axios_utils__[\"a\" /* default */].post(url, {\n label: data\n }).then(function (res) {\n return callback(res.data);\n }).catch(function (e) {\n return callback(e.response.data);\n });\n },\n\n\n // Return group projects list. Filtered by query\n groupProjects: function groupProjects(groupId, query, callback) {\n var url = Api.buildUrl(Api.groupProjectsPath).replace(':id', groupId);\n return __WEBPACK_IMPORTED_MODULE_1__lib_utils_axios_utils__[\"a\" /* default */].get(url, {\n params: {\n search: query,\n per_page: 20\n }\n }).then(function (_ref5) {\n var data = _ref5.data;\n return callback(data);\n });\n },\n commitMultiple: function commitMultiple(id, data) {\n // see https://docs.gitlab.com/ce/api/commits.html#create-a-commit-with-multiple-files-and-actions\n var url = Api.buildUrl(Api.commitPath).replace(':id', encodeURIComponent(id));\n return __WEBPACK_IMPORTED_MODULE_1__lib_utils_axios_utils__[\"a\" /* default */].post(url, JSON.stringify(data), {\n headers: {\n 'Content-Type': 'application/json; charset=utf-8'\n }\n });\n },\n branchSingle: function branchSingle(id, branch) {\n var url = Api.buildUrl(Api.branchSinglePath).replace(':id', encodeURIComponent(id)).replace(':branch', branch);\n\n return __WEBPACK_IMPORTED_MODULE_1__lib_utils_axios_utils__[\"a\" /* default */].get(url);\n },\n\n\n // Return text for a specific license\n licenseText: function licenseText(key, data, callback) {\n var url = Api.buildUrl(Api.licensePath).replace(':key', key);\n return __WEBPACK_IMPORTED_MODULE_1__lib_utils_axios_utils__[\"a\" /* default */].get(url, {\n params: data\n }).then(function (res) {\n return callback(res.data);\n });\n },\n gitignoreText: function gitignoreText(key, callback) {\n var url = Api.buildUrl(Api.gitignorePath).replace(':key', key);\n return __WEBPACK_IMPORTED_MODULE_1__lib_utils_axios_utils__[\"a\" /* default */].get(url).then(function (_ref6) {\n var data = _ref6.data;\n return callback(data);\n });\n },\n gitlabCiYml: function gitlabCiYml(key, callback) {\n var url = Api.buildUrl(Api.gitlabCiYmlPath).replace(':key', key);\n return __WEBPACK_IMPORTED_MODULE_1__lib_utils_axios_utils__[\"a\" /* default */].get(url).then(function (_ref7) {\n var data = _ref7.data;\n return callback(data);\n });\n },\n dockerfileYml: function dockerfileYml(key, callback) {\n var url = Api.buildUrl(Api.dockerfilePath).replace(':key', key);\n return __WEBPACK_IMPORTED_MODULE_1__lib_utils_axios_utils__[\"a\" /* default */].get(url).then(function (_ref8) {\n var data = _ref8.data;\n return callback(data);\n });\n },\n issueTemplate: function issueTemplate(namespacePath, projectPath, key, type, callback) {\n var url = Api.buildUrl(Api.issuableTemplatePath).replace(':key', encodeURIComponent(key)).replace(':type', type).replace(':project_path', projectPath).replace(':namespace_path', namespacePath);\n return __WEBPACK_IMPORTED_MODULE_1__lib_utils_axios_utils__[\"a\" /* default */].get(url).then(function (_ref9) {\n var data = _ref9.data;\n return callback(null, data);\n }).catch(callback);\n },\n users: function users(query, options) {\n var url = Api.buildUrl(this.usersPath);\n return __WEBPACK_IMPORTED_MODULE_1__lib_utils_axios_utils__[\"a\" /* default */].get(url, {\n params: Object.assign({\n search: query,\n per_page: 20\n }, options)\n });\n },\n buildUrl: function buildUrl(url) {\n var urlRoot = '';\n if (gon.relative_url_root != null) {\n urlRoot = gon.relative_url_root;\n }\n return urlRoot + url.replace(':version', gon.api_version);\n }\n};\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (Api);\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\n\n/***/ }),\n\n/***/ \"./awards_handler.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {/* harmony export (immutable) */ __webpack_exports__[\"a\"] = loadAwardsHandler;\n/* 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_js_cookie__ = __webpack_require__(\"../../../node_modules/js-cookie/src/js.cookie.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_js_cookie___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_js_cookie__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__locale__ = __webpack_require__(\"./locale/index.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__lib_utils_common_utils__ = __webpack_require__(\"./lib/utils/common_utils.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__flash__ = __webpack_require__(\"./flash.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__lib_utils_axios_utils__ = __webpack_require__(\"./lib/utils/axios_utils.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 _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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/* eslint-disable class-methods-use-this */\n\n\n\n\n\n\n\nvar animationEndEventString = 'animationend webkitAnimationEnd MSAnimationEnd oAnimationEnd';\nvar transitionEndEventString = 'transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd';\nvar requestAnimationFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.setTimeout;\n\nvar FROM_SENTENCE_REGEX = /(?:, and | and |, )/; // For separating lists produced by ruby's Array#toSentence\n\nvar categoryLabelMap = {\n activity: 'Activity',\n people: 'People',\n nature: 'Nature',\n food: 'Food',\n travel: 'Travel',\n objects: 'Objects',\n symbols: 'Symbols',\n flags: 'Flags'\n};\n\nvar IS_VISIBLE = 'is-visible';\nvar IS_RENDERED = 'is-rendered';\n\nvar AwardsHandler = function () {\n function AwardsHandler(emoji) {\n var _this = this;\n\n _classCallCheck(this, AwardsHandler);\n\n this.emoji = emoji;\n this.eventListeners = [];\n // If the user shows intent let's pre-build the menu\n this.registerEventListener('one', $(document), 'mouseenter focus', '.js-add-award', 'mouseenter focus', function () {\n var $menu = $('.emoji-menu');\n if ($menu.length === 0) {\n requestAnimationFrame(function () {\n _this.createEmojiMenu();\n });\n }\n });\n this.registerEventListener('on', $(document), 'click', '.js-add-award', function (e) {\n e.stopPropagation();\n e.preventDefault();\n _this.showEmojiMenu($(e.currentTarget));\n });\n\n this.registerEventListener('on', $('html'), 'click', function (e) {\n var $target = $(e.target);\n if (!$target.closest('.emoji-menu').length) {\n $('.js-awards-block.current').removeClass('current');\n if ($('.emoji-menu').is(':visible')) {\n $('.js-add-award.is-active').removeClass('is-active');\n _this.hideMenuElement($('.emoji-menu'));\n }\n }\n });\n this.registerEventListener('on', $(document), 'click', '.js-emoji-btn', function (e) {\n e.preventDefault();\n var $target = $(e.currentTarget);\n var $glEmojiElement = $target.find('gl-emoji');\n var $spriteIconElement = $target.find('.icon');\n var emojiName = ($glEmojiElement.length ? $glEmojiElement : $spriteIconElement).data('name');\n\n $target.closest('.js-awards-block').addClass('current');\n _this.addAward(_this.getVotesBlock(), _this.getAwardUrl(), emojiName);\n });\n }\n\n _createClass(AwardsHandler, [{\n key: 'registerEventListener',\n value: function registerEventListener() {\n for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n var _element$method;\n\n var method = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'on';\n var element = arguments[1];\n\n (_element$method = element[method]).call.apply(_element$method, [element].concat(args));\n this.eventListeners.push({\n element: element,\n args: args\n });\n }\n }, {\n key: 'showEmojiMenu',\n value: function showEmojiMenu($addBtn) {\n var _this2 = this;\n\n if ($addBtn.hasClass('js-note-emoji')) {\n $addBtn.closest('.note').find('.js-awards-block').addClass('current');\n } else {\n $addBtn.closest('.js-awards-block').addClass('current');\n }\n\n var $menu = $('.emoji-menu');\n var $thumbsBtn = $menu.find('[data-name=\"thumbsup\"], [data-name=\"thumbsdown\"]').parent();\n var $userAuthored = this.isUserAuthored($addBtn);\n if ($menu.length) {\n if ($menu.is('.is-visible')) {\n $addBtn.removeClass('is-active');\n this.hideMenuElement($menu);\n $('.js-emoji-menu-search').blur();\n } else {\n $addBtn.addClass('is-active');\n this.positionMenu($menu, $addBtn);\n this.showMenuElement($menu);\n $('.js-emoji-menu-search').focus();\n }\n } else {\n $addBtn.addClass('is-loading is-active');\n this.createEmojiMenu(function () {\n var $createdMenu = $('.emoji-menu');\n $addBtn.removeClass('is-loading');\n _this2.positionMenu($createdMenu, $addBtn);\n return setTimeout(function () {\n _this2.showMenuElement($createdMenu);\n $('.js-emoji-menu-search').focus();\n }, 200);\n });\n }\n\n $thumbsBtn.toggleClass('disabled', $userAuthored);\n $thumbsBtn.prop('disabled', $userAuthored);\n }\n\n // Create the emoji menu with the first category of emojis.\n // Then render the remaining categories of emojis one by one to avoid jank.\n\n }, {\n key: 'createEmojiMenu',\n value: function createEmojiMenu(callback) {\n if (this.isCreatingEmojiMenu) {\n return;\n }\n this.isCreatingEmojiMenu = true;\n\n // Render the first category\n var categoryMap = this.emoji.getEmojiCategoryMap();\n var categoryNameKey = Object.keys(categoryMap)[0];\n var emojisInCategory = categoryMap[categoryNameKey];\n var firstCategory = this.renderCategory(categoryLabelMap[categoryNameKey], emojisInCategory);\n\n // Render the frequently used\n var frequentlyUsedEmojis = this.getFrequentlyUsedEmojis();\n var frequentlyUsedCatgegory = '';\n if (frequentlyUsedEmojis.length > 0) {\n frequentlyUsedCatgegory = this.renderCategory('Frequently used', frequentlyUsedEmojis, {\n menuListClass: 'frequent-emojis'\n });\n }\n\n var emojiMenuMarkup = '\\n
\\n \\n\\n
\\n ' + frequentlyUsedCatgegory + '\\n ' + firstCategory + '\\n
\\n
\\n ';\n\n document.body.insertAdjacentHTML('beforeend', emojiMenuMarkup);\n\n this.addRemainingEmojiMenuCategories();\n this.setupSearch();\n if (callback) {\n callback();\n }\n }\n }, {\n key: 'addRemainingEmojiMenuCategories',\n value: function addRemainingEmojiMenuCategories() {\n var _this3 = this;\n\n if (this.isAddingRemainingEmojiMenuCategories) {\n return;\n }\n this.isAddingRemainingEmojiMenuCategories = true;\n\n var categoryMap = this.emoji.getEmojiCategoryMap();\n\n // Avoid the jank and render the remaining categories separately\n // This will take more time, but makes UI more responsive\n var menu = document.querySelector('.emoji-menu');\n var emojiContentElement = menu.querySelector('.emoji-menu-content');\n var remainingCategories = Object.keys(categoryMap).slice(1);\n var allCategoriesAddedPromise = remainingCategories.reduce(function (promiseChain, categoryNameKey) {\n return promiseChain.then(function () {\n return new Promise(function (resolve) {\n var emojisInCategory = categoryMap[categoryNameKey];\n var categoryMarkup = _this3.renderCategory(categoryLabelMap[categoryNameKey], emojisInCategory);\n requestAnimationFrame(function () {\n emojiContentElement.insertAdjacentHTML('beforeend', categoryMarkup);\n resolve();\n });\n });\n });\n }, Promise.resolve());\n\n allCategoriesAddedPromise.then(function () {\n // Used for tests\n // We check for the menu in case it was destroyed in the meantime\n if (menu) {\n menu.dispatchEvent(new CustomEvent('build-emoji-menu-finish'));\n }\n }).catch(function (err) {\n emojiContentElement.insertAdjacentHTML('beforeend', '

We encountered an error while adding the remaining categories

');\n throw new Error('Error occurred in addRemainingEmojiMenuCategories: ' + err.message);\n });\n }\n }, {\n key: 'renderCategory',\n value: function renderCategory(name, emojiList) {\n var _this4 = this;\n\n var opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n return '\\n
\\n ' + name + '\\n
\\n
    \\n ' + emojiList.map(function (emojiName) {\n return '\\n
  • \\n \\n
  • \\n ';\n }).join('\\n') + '\\n
\\n ';\n }\n }, {\n key: 'positionMenu',\n value: function positionMenu($menu, $addBtn) {\n var position = $addBtn.data('position');\n // The menu could potentially be off-screen or in a hidden overflow element\n // So we position the element absolute in the body\n var css = {\n top: $addBtn.offset().top + $addBtn.outerHeight() + 'px'\n };\n if (position === 'right') {\n css.left = $addBtn.offset().left - $menu.outerWidth() + 20 + 'px';\n $menu.addClass('is-aligned-right');\n } else {\n css.left = $addBtn.offset().left + 'px';\n $menu.removeClass('is-aligned-right');\n }\n return $menu.css(css);\n }\n }, {\n key: 'addAward',\n value: function addAward(votesBlock, awardUrl, emoji, checkMutuality, callback) {\n var _this5 = this;\n\n var isMainAwardsBlock = votesBlock.closest('.js-noteable-awards').length;\n\n if (this.isInVueNoteablePage() && !isMainAwardsBlock) {\n var id = votesBlock.attr('id').replace('note_', '');\n\n this.hideMenuElement($('.emoji-menu'));\n\n $('.js-add-award.is-active').removeClass('is-active');\n var toggleAwardEvent = new CustomEvent('toggleAward', {\n detail: {\n awardName: emoji,\n noteId: id\n }\n });\n\n document.querySelector('.js-vue-notes-event').dispatchEvent(toggleAwardEvent);\n }\n\n var normalizedEmoji = this.emoji.normalizeEmojiName(emoji);\n var $emojiButton = this.findEmojiIcon(votesBlock, normalizedEmoji).parent();\n\n this.postEmoji($emojiButton, awardUrl, normalizedEmoji, function () {\n _this5.addAwardToEmojiBar(votesBlock, normalizedEmoji, checkMutuality);\n return typeof callback === 'function' ? callback() : undefined;\n });\n\n this.hideMenuElement($('.emoji-menu'));\n\n return $('.js-add-award.is-active').removeClass('is-active');\n }\n }, {\n key: 'addAwardToEmojiBar',\n value: function addAwardToEmojiBar(votesBlock, emoji, checkForMutuality) {\n if (checkForMutuality || checkForMutuality === null) {\n this.checkMutuality(votesBlock, emoji);\n }\n this.addEmojiToFrequentlyUsedList(emoji);\n var normalizedEmoji = this.emoji.normalizeEmojiName(emoji);\n var $emojiButton = this.findEmojiIcon(votesBlock, normalizedEmoji).parent();\n if ($emojiButton.length > 0) {\n if (this.isActive($emojiButton)) {\n this.decrementCounter($emojiButton, normalizedEmoji);\n } else {\n var counter = $emojiButton.find('.js-counter');\n counter.text(parseInt(counter.text(), 10) + 1);\n $emojiButton.addClass('active');\n this.addYouToUserList(votesBlock, normalizedEmoji);\n this.animateEmoji($emojiButton);\n }\n } else {\n votesBlock.removeClass('hidden');\n this.createEmoji(votesBlock, normalizedEmoji);\n }\n }\n }, {\n key: 'isVueMRDiscussions',\n value: function isVueMRDiscussions() {\n return Object(__WEBPACK_IMPORTED_MODULE_3__lib_utils_common_utils__[\"r\" /* isInMRPage */])() && Object(__WEBPACK_IMPORTED_MODULE_3__lib_utils_common_utils__[\"n\" /* hasVueMRDiscussionsCookie */])() && !$('#diffs').is(':visible');\n }\n }, {\n key: 'isInVueNoteablePage',\n value: function isInVueNoteablePage() {\n return Object(__WEBPACK_IMPORTED_MODULE_3__lib_utils_common_utils__[\"q\" /* isInIssuePage */])() || this.isVueMRDiscussions();\n }\n }, {\n key: 'getVotesBlock',\n value: function getVotesBlock() {\n if (this.isInVueNoteablePage()) {\n var $el = $('.js-add-award.is-active').closest('.note.timeline-entry');\n\n if ($el.length) {\n return $el;\n }\n }\n\n var currentBlock = $('.js-awards-block.current');\n var resultantVotesBlock = currentBlock;\n if (currentBlock.length === 0) {\n resultantVotesBlock = $('.js-awards-block').eq(0);\n }\n\n return resultantVotesBlock;\n }\n }, {\n key: 'getAwardUrl',\n value: function getAwardUrl() {\n return this.getVotesBlock().data('awardUrl');\n }\n }, {\n key: 'checkMutuality',\n value: function checkMutuality(votesBlock, emoji) {\n var awardUrl = this.getAwardUrl();\n if (emoji === 'thumbsup' || emoji === 'thumbsdown') {\n var mutualVote = emoji === 'thumbsup' ? 'thumbsdown' : 'thumbsup';\n var $emojiButton = votesBlock.find('[data-name=\"' + mutualVote + '\"]').parent();\n var isAlreadyVoted = $emojiButton.hasClass('active');\n if (isAlreadyVoted) {\n this.addAward(votesBlock, awardUrl, mutualVote, false);\n }\n }\n }\n }, {\n key: 'isActive',\n value: function isActive($emojiButton) {\n return $emojiButton.hasClass('active');\n }\n }, {\n key: 'isUserAuthored',\n value: function isUserAuthored($button) {\n return $button.hasClass('js-user-authored');\n }\n }, {\n key: 'decrementCounter',\n value: function decrementCounter($emojiButton, emoji) {\n var counter = $('.js-counter', $emojiButton);\n var counterNumber = parseInt(counter.text(), 10);\n if (counterNumber > 1) {\n counter.text(counterNumber - 1);\n this.removeYouFromUserList($emojiButton);\n } else if (emoji === 'thumbsup' || emoji === 'thumbsdown') {\n $emojiButton.tooltip('destroy');\n counter.text('0');\n this.removeYouFromUserList($emojiButton);\n if ($emojiButton.parents('.note').length) {\n this.removeEmoji($emojiButton);\n }\n } else {\n this.removeEmoji($emojiButton);\n }\n return $emojiButton.removeClass('active');\n }\n }, {\n key: 'removeEmoji',\n value: function removeEmoji($emojiButton) {\n $emojiButton.tooltip('destroy');\n $emojiButton.remove();\n var $votesBlock = this.getVotesBlock();\n if ($votesBlock.find('.js-emoji-btn').length === 0) {\n $votesBlock.addClass('hidden');\n }\n }\n }, {\n key: 'getAwardTooltip',\n value: function getAwardTooltip($awardBlock) {\n return $awardBlock.attr('data-original-title') || $awardBlock.attr('data-title') || '';\n }\n }, {\n key: 'toSentence',\n value: function toSentence(list) {\n var sentence = void 0;\n if (list.length <= 2) {\n sentence = list.join(' 和 ');\n } else {\n sentence = list.slice(0, -1).join(', ') + ', \\u548C ' + list[list.length - 1];\n }\n\n return sentence;\n }\n }, {\n key: 'removeYouFromUserList',\n value: function removeYouFromUserList($emojiButton) {\n var awardBlock = $emojiButton;\n var originalTitle = this.getAwardTooltip(awardBlock);\n var authors = originalTitle.split(FROM_SENTENCE_REGEX);\n authors.splice(authors.indexOf('您'), 1);\n return awardBlock.closest('.js-emoji-btn').removeData('title').removeAttr('data-title').removeAttr('data-original-title').attr('title', this.toSentence(authors)).tooltip('fixTitle');\n }\n }, {\n key: 'addYouToUserList',\n value: function addYouToUserList(votesBlock, emoji) {\n var awardBlock = this.findEmojiIcon(votesBlock, emoji).parent();\n var origTitle = this.getAwardTooltip(awardBlock);\n var users = [];\n if (origTitle) {\n users = origTitle.trim().split(FROM_SENTENCE_REGEX);\n }\n users.unshift('You');\n return awardBlock.attr('title', this.toSentence(users)).tooltip('fixTitle');\n }\n }, {\n key: 'createAwardButtonForVotesBlock',\n value: function createAwardButtonForVotesBlock(votesBlock, emojiName) {\n var buttonHtml = '\\n \\n ';\n var $emojiButton = $(buttonHtml);\n $emojiButton.insertBefore(votesBlock.find('.js-award-holder')).find('.emoji-icon').data('name', emojiName);\n this.animateEmoji($emojiButton);\n $('.award-control').tooltip();\n votesBlock.removeClass('current');\n }\n }, {\n key: 'animateEmoji',\n value: function animateEmoji($emoji) {\n var className = 'pulse animated once short';\n $emoji.addClass(className);\n\n this.registerEventListener('on', $emoji, animationEndEventString, function (e) {\n $(e.currentTarget).removeClass(className);\n });\n }\n }, {\n key: 'createEmoji',\n value: function createEmoji(votesBlock, emoji) {\n var _this6 = this;\n\n if ($('.emoji-menu').length) {\n this.createAwardButtonForVotesBlock(votesBlock, emoji);\n }\n this.createEmojiMenu(function () {\n _this6.createAwardButtonForVotesBlock(votesBlock, emoji);\n });\n }\n }, {\n key: 'postEmoji',\n value: function postEmoji($emojiButton, awardUrl, emoji, callback) {\n if (this.isUserAuthored($emojiButton)) {\n this.userAuthored($emojiButton);\n } else {\n __WEBPACK_IMPORTED_MODULE_5__lib_utils_axios_utils__[\"a\" /* default */].post(awardUrl, {\n name: emoji\n }).then(function (_ref) {\n var data = _ref.data;\n\n if (data.ok) {\n callback();\n }\n }).catch(function () {\n return Object(__WEBPACK_IMPORTED_MODULE_4__flash__[\"a\" /* default */])(Object(__WEBPACK_IMPORTED_MODULE_2__locale__[\"a\" /* __ */])('Something went wrong on our end.'));\n });\n }\n }\n }, {\n key: 'findEmojiIcon',\n value: function findEmojiIcon(votesBlock, emoji) {\n return votesBlock.find('.js-emoji-btn [data-name=\"' + emoji + '\"]');\n }\n }, {\n key: 'userAuthored',\n value: function userAuthored($emojiButton) {\n var oldTitle = this.getAwardTooltip($emojiButton);\n var newTitle = '您不能给自己的问题、MR和注释投票';\n Object(__WEBPACK_IMPORTED_MODULE_3__lib_utils_common_utils__[\"H\" /* updateTooltipTitle */])($emojiButton, newTitle).tooltip('show');\n // Restore tooltip back to award list\n return setTimeout(function () {\n $emojiButton.tooltip('hide');\n Object(__WEBPACK_IMPORTED_MODULE_3__lib_utils_common_utils__[\"H\" /* updateTooltipTitle */])($emojiButton, oldTitle);\n }, 2800);\n }\n }, {\n key: 'scrollToAwards',\n value: function scrollToAwards() {\n var options = {\n scrollTop: $('.awards').offset().top - 110\n };\n return $('body, html').animate(options, 200);\n }\n }, {\n key: 'addEmojiToFrequentlyUsedList',\n value: function addEmojiToFrequentlyUsedList(emoji) {\n if (this.emoji.isEmojiNameValid(emoji)) {\n this.frequentlyUsedEmojis = __WEBPACK_IMPORTED_MODULE_0_underscore___default.a.uniq(this.getFrequentlyUsedEmojis().concat(emoji));\n __WEBPACK_IMPORTED_MODULE_1_js_cookie___default.a.set('frequently_used_emojis', this.frequentlyUsedEmojis.join(','), { expires: 365 });\n }\n }\n }, {\n key: 'getFrequentlyUsedEmojis',\n value: function getFrequentlyUsedEmojis() {\n var _this7 = this;\n\n return this.frequentlyUsedEmojis || function () {\n var frequentlyUsedEmojis = __WEBPACK_IMPORTED_MODULE_0_underscore___default.a.uniq((__WEBPACK_IMPORTED_MODULE_1_js_cookie___default.a.get('frequently_used_emojis') || '').split(','));\n _this7.frequentlyUsedEmojis = frequentlyUsedEmojis.filter(function (inputName) {\n return _this7.emoji.isEmojiNameValid(inputName);\n });\n\n return _this7.frequentlyUsedEmojis;\n }();\n }\n }, {\n key: 'setupSearch',\n value: function setupSearch() {\n var _this8 = this;\n\n var $search = $('.js-emoji-menu-search');\n\n this.registerEventListener('on', $search, 'input', function (e) {\n var term = $(e.target).val().trim();\n _this8.searchEmojis(term);\n });\n\n var $menu = $('.emoji-menu');\n this.registerEventListener('on', $menu, transitionEndEventString, function (e) {\n if (e.target === e.currentTarget) {\n // Clear the search\n _this8.searchEmojis('');\n }\n });\n }\n }, {\n key: 'searchEmojis',\n value: function searchEmojis(term) {\n var $search = $('.js-emoji-menu-search');\n $search.val(term);\n\n // Clean previous search results\n $('ul.emoji-menu-search, h5.emoji-search-title').remove();\n if (term.length > 0) {\n // Generate a search result block\n var h5 = $('
').text('Search results');\n var foundEmojis = this.findMatchingEmojiElements(term).show();\n var ul = $('
    ').addClass('emoji-menu-list emoji-menu-search').append(foundEmojis);\n $('.emoji-menu-content ul, .emoji-menu-content h5').hide();\n $('.emoji-menu-content').append(h5).append(ul);\n } else {\n $('.emoji-menu-content').children().show();\n }\n }\n }, {\n key: 'findMatchingEmojiElements',\n value: function findMatchingEmojiElements(query) {\n var emojiMatches = this.emoji.filterEmojiNamesByAlias(query);\n var $emojiElements = $('.emoji-menu-list:not(.frequent-emojis) [data-name]');\n var $matchingElements = $emojiElements.filter(function (i, elm) {\n return emojiMatches.indexOf(elm.dataset.name) >= 0;\n });\n return $matchingElements.closest('li').clone();\n }\n\n /* showMenuElement and hideMenuElement are performance optimizations. We use\n * opacity to show/hide the emoji menu, because we can animate it. But opacity\n * leaves hidden elements in the render tree, which is unacceptable given the number\n * of emoji elements in the emoji menu (5k+). To get the best of both worlds, we separately\n * apply IS_RENDERED to add/remove the menu from the render tree and IS_VISIBLE to animate\n * the menu being opened and closed. */\n\n }, {\n key: 'showMenuElement',\n value: function showMenuElement($emojiMenu) {\n $emojiMenu.addClass(IS_RENDERED);\n\n // enqueues animation as a microtask, so it begins ASAP once IS_RENDERED added\n return Promise.resolve().then(function () {\n return $emojiMenu.addClass(IS_VISIBLE);\n });\n }\n }, {\n key: 'hideMenuElement',\n value: function hideMenuElement($emojiMenu) {\n $emojiMenu.on(transitionEndEventString, function (e) {\n if (e.currentTarget === e.target) {\n $emojiMenu.removeClass(IS_RENDERED).off(transitionEndEventString);\n }\n });\n\n $emojiMenu.removeClass(IS_VISIBLE);\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this.eventListeners.forEach(function (entry) {\n var _entry$element$off;\n\n (_entry$element$off = entry.element.off).call.apply(_entry$element$off, [entry.element].concat(_toConsumableArray(entry.args)));\n });\n $('.emoji-menu').remove();\n }\n }]);\n\n return AwardsHandler;\n}();\n\nvar awardsHandlerPromise = null;\nfunction loadAwardsHandler() {\n var reload = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n if (!awardsHandlerPromise || reload) {\n awardsHandlerPromise = __webpack_require__.e/* import() */(\"emoji\").then(__webpack_require__.bind(null, \"./emoji/index.js\")).then(function (Emoji) {\n return new AwardsHandler(Emoji);\n });\n }\n return awardsHandlerPromise;\n}\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\n\n/***/ }),\n\n/***/ \"./behaviors/bind_in_out.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\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\nvar BindInOut = function () {\n function BindInOut(bindIn, bindOut) {\n _classCallCheck(this, BindInOut);\n\n this.in = bindIn;\n this.out = bindOut;\n\n this.eventWrapper = {};\n this.eventType = /(INPUT|TEXTAREA)/.test(bindIn.tagName) ? 'keyup' : 'change';\n }\n\n _createClass(BindInOut, [{\n key: 'addEvents',\n value: function addEvents() {\n this.eventWrapper.updateOut = this.updateOut.bind(this);\n\n this.in.addEventListener(this.eventType, this.eventWrapper.updateOut);\n\n return this;\n }\n }, {\n key: 'updateOut',\n value: function updateOut() {\n this.out.textContent = this.in.value;\n\n return this;\n }\n }, {\n key: 'removeEvents',\n value: function removeEvents() {\n this.in.removeEventListener(this.eventType, this.eventWrapper.updateOut);\n\n return this;\n }\n }], [{\n key: 'initAll',\n value: function initAll() {\n var ins = document.querySelectorAll('*[data-bind-in]');\n\n return [].map.call(ins, function (anIn) {\n return BindInOut.init(anIn);\n });\n }\n }, {\n key: 'init',\n value: function init(anIn, anOut) {\n var out = anOut || document.querySelector('*[data-bind-out=\"' + anIn.dataset.bindIn + '\"]');\n\n if (!out) return null;\n\n var bindInOut = new BindInOut(anIn, out);\n\n return bindInOut.addEvents().updateOut();\n }\n }]);\n\n return BindInOut;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (BindInOut);\n\n/***/ }),\n\n/***/ \"./behaviors/copy_as_gfm.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return CopyAsGFM; });\n/* harmony export (immutable) */ __webpack_exports__[\"b\"] = initCopyAsGFM;\n/* 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_common_utils__ = __webpack_require__(\"./lib/utils/common_utils.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__lazy_loader__ = __webpack_require__(\"./lazy_loader.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 class-methods-use-this, object-shorthand, no-unused-vars, no-use-before-define, no-new, max-len, no-restricted-syntax, guard-for-in, no-continue */\n\n\n\n\n\nvar gfmRules = {\n // The filters referenced in lib/banzai/pipeline/gfm_pipeline.rb convert\n // GitLab Flavored Markdown (GFM) to HTML.\n // These handlers consequently convert that same HTML to GFM to be copied to the clipboard.\n // Every filter in lib/banzai/pipeline/gfm_pipeline.rb that generates HTML\n // from GFM should have a handler here, in reverse order.\n // The GFM-to-HTML-to-GFM cycle is tested in spec/features/copy_as_gfm_spec.rb.\n InlineDiffFilter: {\n 'span.idiff.addition': function spanIdiffAddition(el, text) {\n return '{+' + text + '+}';\n },\n 'span.idiff.deletion': function spanIdiffDeletion(el, text) {\n return '{-' + text + '-}';\n }\n },\n TaskListFilter: {\n 'input[type=checkbox].task-list-item-checkbox': function inputTypeCheckboxTaskListItemCheckbox(el) {\n return '[' + (el.checked ? 'x' : ' ') + ']';\n }\n },\n ReferenceFilter: {\n '.tooltip': function tooltip(el) {\n return '';\n },\n 'a.gfm:not([data-link=true])': function aGfmNotDataLinkTrue(el, text) {\n return el.dataset.original || text;\n }\n },\n AutolinkFilter: {\n 'a': function a(el, text) {\n // Fallback on the regular MarkdownFilter's `a` handler.\n if (text !== el.getAttribute('href')) return false;\n\n return text;\n }\n },\n TableOfContentsFilter: {\n 'ul.section-nav': function ulSectionNav(el) {\n return '[[_TOC_]]';\n }\n },\n EmojiFilter: {\n 'img.emoji': function imgEmoji(el) {\n return el.getAttribute('alt');\n },\n 'gl-emoji': function glEmoji(el) {\n return ':' + el.getAttribute('data-name') + ':';\n }\n },\n ImageLinkFilter: {\n 'a.no-attachment-icon': function aNoAttachmentIcon(el, text) {\n return text;\n }\n },\n ImageLazyLoadFilter: {\n 'img': function img(el, text) {\n return '![' + el.getAttribute('alt') + '](' + el.getAttribute('src') + ')';\n }\n },\n VideoLinkFilter: {\n '.video-container': function videoContainer(el) {\n var videoEl = el.querySelector('video');\n if (!videoEl) return false;\n\n return CopyAsGFM.nodeToGFM(videoEl);\n },\n 'video': function video(el) {\n return '![' + el.dataset.title + '](' + el.getAttribute('src') + ')';\n }\n },\n MermaidFilter: {\n 'svg.mermaid': function svgMermaid(el, text) {\n var sourceEl = el.querySelector('text.source');\n if (!sourceEl) return false;\n\n return '```mermaid\\n' + CopyAsGFM.nodeToGFM(sourceEl) + '\\n```';\n },\n 'svg.mermaid style, svg.mermaid g': function svgMermaidStyleSvgMermaidG(el, text) {\n // We don't want to include the content of these elements in the copied text.\n return '';\n }\n },\n MathFilter: {\n 'pre.code.math[data-math-style=display]': function preCodeMathDataMathStyleDisplay(el, text) {\n return '```math\\n' + text.trim() + '\\n```';\n },\n 'code.code.math[data-math-style=inline]': function codeCodeMathDataMathStyleInline(el, text) {\n return '$`' + text + '`$';\n },\n 'span.katex-display span.katex-mathml': function spanKatexDisplaySpanKatexMathml(el) {\n var mathAnnotation = el.querySelector('annotation[encoding=\"application/x-tex\"]');\n if (!mathAnnotation) return false;\n\n return '```math\\n' + CopyAsGFM.nodeToGFM(mathAnnotation) + '\\n```';\n },\n 'span.katex-mathml': function spanKatexMathml(el) {\n var mathAnnotation = el.querySelector('annotation[encoding=\"application/x-tex\"]');\n if (!mathAnnotation) return false;\n\n return '$`' + CopyAsGFM.nodeToGFM(mathAnnotation) + '`$';\n },\n 'span.katex-html': function spanKatexHtml(el) {\n // We don't want to include the content of this element in the copied text.\n return '';\n },\n 'annotation[encoding=\"application/x-tex\"]': function annotationEncodingApplicationXTex(el, text) {\n return text.trim();\n }\n },\n SanitizationFilter: {\n 'a[name]:not([href]):empty': function aNameNotHrefEmpty(el) {\n return el.outerHTML;\n },\n 'dl': function dl(el, text) {\n var lines = text.trim().split('\\n');\n // Add two spaces to the front of subsequent list items lines,\n // or leave the line entirely blank.\n lines = lines.map(function (l) {\n var line = l.trim();\n if (line.length === 0) return '';\n\n return ' ' + line;\n });\n\n return '
    \\n' + lines.join('\\n') + '\\n
    ';\n },\n 'sub, dt, dd, kbd, q, samp, var, ruby, rt, rp, abbr, summary, details': function subDtDdKbdQSampVarRubyRtRpAbbrSummaryDetails(el, text) {\n var tag = el.nodeName.toLowerCase();\n return '<' + tag + '>' + text + '';\n }\n },\n SyntaxHighlightFilter: {\n 'pre.code.highlight': function preCodeHighlight(el, t) {\n var text = t.trimRight();\n\n var lang = el.getAttribute('lang');\n if (!lang || lang === 'plaintext') {\n lang = '';\n }\n\n // Prefixes lines with 4 spaces if the code contains triple backticks\n if (lang === '' && text.match(/^```/gm)) {\n return text.split('\\n').map(function (l) {\n var line = l.trim();\n if (line.length === 0) return '';\n\n return ' ' + line;\n }).join('\\n');\n }\n\n return '```' + lang + '\\n' + text + '\\n```';\n },\n 'pre > code': function preCode(el, text) {\n // Don't wrap code blocks in ``\n return text;\n }\n },\n MarkdownFilter: {\n 'br': function br(el) {\n // Two spaces at the end of a line are turned into a BR\n return ' ';\n },\n 'code': function code(el, text) {\n var backtickCount = 1;\n var backtickMatch = text.match(/`+/);\n if (backtickMatch) {\n backtickCount = backtickMatch[0].length + 1;\n }\n\n var backticks = Array(backtickCount + 1).join('`');\n var spaceOrNoSpace = backtickCount > 1 ? ' ' : '';\n\n return backticks + spaceOrNoSpace + text.trim() + spaceOrNoSpace + backticks;\n },\n 'blockquote': function blockquote(el, text) {\n return text.trim().split('\\n').map(function (s) {\n return ('> ' + s).trim();\n }).join('\\n');\n },\n 'img': function img(el) {\n var imageSrc = el.src;\n var imageUrl = imageSrc && imageSrc !== __WEBPACK_IMPORTED_MODULE_2__lazy_loader__[\"b\" /* placeholderImage */] ? imageSrc : el.dataset.src || '';\n return '![' + el.getAttribute('alt') + '](' + imageUrl + ')';\n },\n 'a.anchor': function aAnchor(el, text) {\n // Don't render a Markdown link for the anchor link inside a heading\n return text;\n },\n 'a': function a(el, text) {\n return '[' + text + '](' + el.getAttribute('href') + ')';\n },\n 'li': function li(el, text) {\n var lines = text.trim().split('\\n');\n var firstLine = '- ' + lines.shift();\n // Add four spaces to the front of subsequent list items lines,\n // or leave the line entirely blank.\n var nextLines = lines.map(function (s) {\n if (s.trim().length === 0) return '';\n\n return ' ' + s;\n });\n\n return firstLine + '\\n' + nextLines.join('\\n');\n },\n 'ul': function ul(el, text) {\n return text;\n },\n 'ol': function ol(el, text) {\n // LIs get a `- ` prefix by default, which we replace by `1. ` for ordered lists.\n return text.replace(/^- /mg, '1. ');\n },\n 'h1': function h1(el, text) {\n return '# ' + text.trim();\n },\n 'h2': function h2(el, text) {\n return '## ' + text.trim();\n },\n 'h3': function h3(el, text) {\n return '### ' + text.trim();\n },\n 'h4': function h4(el, text) {\n return '#### ' + text.trim();\n },\n 'h5': function h5(el, text) {\n return '##### ' + text.trim();\n },\n 'h6': function h6(el, text) {\n return '###### ' + text.trim();\n },\n 'strong': function strong(el, text) {\n return '**' + text + '**';\n },\n 'em': function em(el, text) {\n return '_' + text + '_';\n },\n 'del': function del(el, text) {\n return '~~' + text + '~~';\n },\n 'sup': function sup(el, text) {\n return '^' + text;\n },\n 'hr': function hr(el) {\n return '-----';\n },\n 'table': function table(el) {\n var theadEl = el.querySelector('thead');\n var tbodyEl = el.querySelector('tbody');\n if (!theadEl || !tbodyEl) return false;\n\n var theadText = CopyAsGFM.nodeToGFM(theadEl);\n var tbodyText = CopyAsGFM.nodeToGFM(tbodyEl);\n\n return [theadText, tbodyText].join('\\n');\n },\n 'thead': function thead(el, text) {\n var cells = __WEBPACK_IMPORTED_MODULE_0_underscore___default.a.map(el.querySelectorAll('th'), function (cell) {\n var chars = CopyAsGFM.nodeToGFM(cell).length + 2;\n\n var before = '';\n var after = '';\n switch (cell.style.textAlign) {\n case 'center':\n before = ':';\n after = ':';\n chars -= 2;\n break;\n case 'right':\n after = ':';\n chars -= 1;\n break;\n default:\n break;\n }\n\n chars = Math.max(chars, 3);\n\n var middle = Array(chars + 1).join('-');\n\n return before + middle + after;\n });\n\n var separatorRow = '|' + cells.join('|') + '|';\n\n return [text, separatorRow].join('\\n');\n },\n 'tr': function tr(el) {\n var cellEls = el.querySelectorAll('td, th');\n if (cellEls.length === 0) return false;\n\n var cells = __WEBPACK_IMPORTED_MODULE_0_underscore___default.a.map(cellEls, function (cell) {\n return CopyAsGFM.nodeToGFM(cell);\n });\n return '| ' + cells.join(' | ') + ' |';\n }\n }\n};\n\nvar CopyAsGFM = function () {\n function CopyAsGFM() {\n _classCallCheck(this, CopyAsGFM);\n\n // iOS currently does not support clipboardData.setData(). This bug should\n // be fixed in iOS 12, but for now we'll disable this for all iOS browsers\n // ref: https://trac.webkit.org/changeset/222228/webkit\n var userAgent = typeof navigator !== 'undefined' && navigator.userAgent || '';\n var isIOS = /\\b(iPad|iPhone|iPod)(?=;)/.test(userAgent);\n if (isIOS) return;\n\n $(document).on('copy', '.md, .wiki', function (e) {\n CopyAsGFM.copyAsGFM(e, CopyAsGFM.transformGFMSelection);\n });\n $(document).on('copy', 'pre.code.highlight, .diff-content .line_content', function (e) {\n CopyAsGFM.copyAsGFM(e, CopyAsGFM.transformCodeSelection);\n });\n $(document).on('paste', '.js-gfm-input', CopyAsGFM.pasteGFM);\n }\n\n _createClass(CopyAsGFM, null, [{\n key: 'copyAsGFM',\n value: function copyAsGFM(e, transformer) {\n var clipboardData = e.originalEvent.clipboardData;\n if (!clipboardData) return;\n\n var documentFragment = Object(__WEBPACK_IMPORTED_MODULE_1__lib_utils_common_utils__[\"k\" /* getSelectedFragment */])();\n if (!documentFragment) return;\n\n var el = transformer(documentFragment.cloneNode(true), e.currentTarget);\n if (!el) return;\n\n e.preventDefault();\n e.stopPropagation();\n\n clipboardData.setData('text/plain', el.textContent);\n clipboardData.setData('text/x-gfm', this.nodeToGFM(el));\n }\n }, {\n key: 'pasteGFM',\n value: function pasteGFM(e) {\n var clipboardData = e.originalEvent.clipboardData;\n if (!clipboardData) return;\n\n var text = clipboardData.getData('text/plain');\n var gfm = clipboardData.getData('text/x-gfm');\n if (!gfm) return;\n\n e.preventDefault();\n\n window.gl.utils.insertText(e.target, function (textBefore, textAfter) {\n // If the text before the cursor contains an odd number of backticks,\n // we are either inside an inline code span that starts with 1 backtick\n // or a code block that starts with 3 backticks.\n // This logic still holds when there are one or more _closed_ code spans\n // or blocks that will have 2 or 6 backticks.\n // This will break down when the actual code block contains an uneven\n // number of backticks, but this is a rare edge case.\n var backtickMatch = textBefore.match(/`/g);\n var insideCodeBlock = backtickMatch && backtickMatch.length % 2 === 1;\n\n if (insideCodeBlock) {\n return text;\n }\n\n return gfm;\n });\n }\n }, {\n key: 'transformGFMSelection',\n value: function transformGFMSelection(documentFragment) {\n var gfmElements = documentFragment.querySelectorAll('.md, .wiki');\n switch (gfmElements.length) {\n case 0:\n {\n return documentFragment;\n }\n case 1:\n {\n return gfmElements[0];\n }\n default:\n {\n var allGfmElement = document.createElement('div');\n\n for (var i = 0; i < gfmElements.length; i += 1) {\n var gfmElement = gfmElements[i];\n allGfmElement.appendChild(gfmElement);\n allGfmElement.appendChild(document.createTextNode('\\n\\n'));\n }\n\n return allGfmElement;\n }\n }\n }\n }, {\n key: 'transformCodeSelection',\n value: function transformCodeSelection(documentFragment, target) {\n var lineSelector = '.line';\n\n if (target) {\n var lineClass = ['left-side', 'right-side'].filter(function (name) {\n return target.classList.contains(name);\n })[0];\n if (lineClass) {\n lineSelector = '.line_content.' + lineClass + ' ' + lineSelector;\n }\n }\n\n var lineElements = documentFragment.querySelectorAll(lineSelector);\n\n var codeElement = void 0;\n if (lineElements.length > 1) {\n codeElement = document.createElement('pre');\n codeElement.className = 'code highlight';\n\n var lang = lineElements[0].getAttribute('lang');\n if (lang) {\n codeElement.setAttribute('lang', lang);\n }\n } else {\n codeElement = document.createElement('code');\n }\n\n if (lineElements.length > 0) {\n for (var i = 0; i < lineElements.length; i += 1) {\n var lineElement = lineElements[i];\n codeElement.appendChild(lineElement);\n codeElement.appendChild(document.createTextNode('\\n'));\n }\n } else {\n codeElement.appendChild(documentFragment);\n }\n\n return codeElement;\n }\n }, {\n key: 'nodeToGFM',\n value: function nodeToGFM(node) {\n var respectWhitespaceParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n if (node.nodeType === Node.COMMENT_NODE) {\n return '';\n }\n\n if (node.nodeType === Node.TEXT_NODE) {\n return node.textContent;\n }\n\n var respectWhitespace = respectWhitespaceParam || node.nodeName === 'PRE' || node.nodeName === 'CODE';\n\n var text = this.innerGFM(node, respectWhitespace);\n\n if (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n return text;\n }\n\n for (var filter in gfmRules) {\n var rules = gfmRules[filter];\n\n for (var selector in rules) {\n var func = rules[selector];\n\n if (!Object(__WEBPACK_IMPORTED_MODULE_1__lib_utils_common_utils__[\"w\" /* nodeMatchesSelector */])(node, selector)) continue;\n\n var result = void 0;\n if (func.length === 2) {\n // if `func` takes 2 arguments, it depends on text.\n // if there is no text, we don't need to generate GFM for this node.\n if (text.length === 0) continue;\n\n result = func(node, text);\n } else {\n result = func(node);\n }\n\n if (result === false) continue;\n\n return result;\n }\n }\n\n return text;\n }\n }, {\n key: 'innerGFM',\n value: function innerGFM(parentNode) {\n var respectWhitespace = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var nodes = parentNode.childNodes;\n\n var clonedParentNode = parentNode.cloneNode(true);\n var clonedNodes = Array.prototype.slice.call(clonedParentNode.childNodes, 0);\n\n for (var i = 0; i < nodes.length; i += 1) {\n var node = nodes[i];\n var clonedNode = clonedNodes[i];\n\n var text = this.nodeToGFM(node, respectWhitespace);\n\n // `clonedNode.replaceWith(text)` is not yet widely supported\n clonedNode.parentNode.replaceChild(document.createTextNode(text), clonedNode);\n }\n\n var nodeText = clonedParentNode.innerText || clonedParentNode.textContent;\n\n if (!respectWhitespace) {\n nodeText = nodeText.trim();\n }\n\n return nodeText;\n }\n }]);\n\n return CopyAsGFM;\n}();\n\n// Export CopyAsGFM as a global for rspec to access\n// see /spec/features/copy_as_gfm_spec.rb\nif (false) {\n window.CopyAsGFM = CopyAsGFM;\n}\n\nfunction initCopyAsGFM() {\n return new CopyAsGFM();\n}\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\n\n/***/ }),\n\n/***/ \"./behaviors/copy_to_clipboard.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {/* harmony export (immutable) */ __webpack_exports__[\"a\"] = initCopyToClipboard;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_clipboard__ = __webpack_require__(\"../../../node_modules/clipboard/lib/clipboard.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_clipboard___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_clipboard__);\n\n\nfunction showTooltip(target, title) {\n var $target = $(target);\n var originalTitle = $target.data('originalTitle');\n\n if (!$target.data('hideTooltip')) {\n $target.attr('title', title).tooltip('fixTitle').tooltip('show').attr('title', originalTitle).tooltip('fixTitle');\n }\n}\n\nfunction genericSuccess(e) {\n showTooltip(e.trigger, 'Copied');\n // Clear the selection and blur the trigger so it loses its border\n e.clearSelection();\n $(e.trigger).blur();\n}\n\n/**\n * Safari > 10 doesn't support `execCommand`, so instead we inform the user to copy manually.\n * See http://clipboardjs.com/#browser-support\n */\nfunction genericError(e) {\n var key = void 0;\n if (/Mac/i.test(navigator.userAgent)) {\n key = '⌘'; // Command\n } else {\n key = 'Ctrl';\n }\n showTooltip(e.trigger, 'Press ' + key + '-C to copy');\n}\n\nfunction initCopyToClipboard() {\n var clipboard = new __WEBPACK_IMPORTED_MODULE_0_clipboard___default.a('[data-clipboard-target], [data-clipboard-text]');\n clipboard.on('success', genericSuccess);\n clipboard.on('error', genericError);\n\n /**\n * This a workaround around ClipboardJS limitations to allow the context-specific copy/pasting\n * of plain text or GFM. The Ruby `clipboard_button` helper sneaks a JSON hash with `text` and\n * `gfm` keys into the `data-clipboard-text` attribute that ClipboardJS reads from.\n * When ClipboardJS creates a new `textarea` (directly inside `body`, with a `readonly`\n * attribute`), sets its value to the value of this data attribute, focusses on it, and finally\n * programmatically issues the 'Copy' command, this code intercepts the copy command/event at\n * the last minute to deconstruct this JSON hash and set the `text/plain` and `text/x-gfm` copy\n * data types to the intended values.\n */\n $(document).on('copy', 'body > textarea[readonly]', function (e) {\n var clipboardData = e.originalEvent.clipboardData;\n if (!clipboardData) return;\n\n var text = e.target.value;\n\n var json = void 0;\n try {\n json = JSON.parse(text);\n } catch (ex) {\n return;\n }\n\n if (!json.text || !json.gfm) return;\n\n e.preventDefault();\n\n clipboardData.setData('text/plain', json.text);\n clipboardData.setData('text/x-gfm', json.gfm);\n });\n}\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\n\n/***/ }),\n\n/***/ \"./behaviors/details_behavior.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function($) {\n$(function () {\n $('body').on('click', '.js-details-target', function target() {\n $(this).closest('.js-details-container').toggleClass('open');\n });\n\n // Show details content. Hides link after click.\n //\n // %div\n // %a.js-details-expand\n // %div.js-details-content\n //\n $('body').on('click', '.js-details-expand', function expand(e) {\n e.preventDefault();\n $(this).next('.js-details-content').removeClass('hide');\n $(this).hide();\n\n var truncatedItem = $(this).siblings('.js-details-short');\n if (truncatedItem.length) {\n truncatedItem.addClass('hide');\n }\n });\n});\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\n\n/***/ }),\n\n/***/ \"./behaviors/index.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n\n// EXTERNAL MODULE: /opt/gitlab/embedded/service/gitlab-rails/node_modules/autosize/dist/autosize.js\nvar autosize = __webpack_require__(\"../../../node_modules/autosize/dist/autosize.js\");\nvar autosize_default = /*#__PURE__*/__webpack_require__.n(autosize);\n\n// CONCATENATED MODULE: ./behaviors/autosize.js\n\n\ndocument.addEventListener('DOMContentLoaded', function () {\n var autosizeEls = document.querySelectorAll('.js-autosize');\n\n autosize_default()(autosizeEls);\n autosize_default.a.update(autosizeEls);\n});\n// EXTERNAL MODULE: ./behaviors/bind_in_out.js\nvar bind_in_out = __webpack_require__(\"./behaviors/bind_in_out.js\");\n\n// EXTERNAL MODULE: ./behaviors/copy_as_gfm.js\nvar copy_as_gfm = __webpack_require__(\"./behaviors/copy_as_gfm.js\");\n\n// EXTERNAL MODULE: ./behaviors/copy_to_clipboard.js\nvar copy_to_clipboard = __webpack_require__(\"./behaviors/copy_to_clipboard.js\");\n\n// EXTERNAL MODULE: ./behaviors/details_behavior.js\nvar details_behavior = __webpack_require__(\"./behaviors/details_behavior.js\");\nvar details_behavior_default = /*#__PURE__*/__webpack_require__.n(details_behavior);\n\n// EXTERNAL MODULE: /opt/gitlab/embedded/service/gitlab-rails/node_modules/document-register-element/build/document-register-element.node.js\nvar document_register_element_node = __webpack_require__(\"../../../node_modules/document-register-element/build/document-register-element.node.js\");\nvar document_register_element_node_default = /*#__PURE__*/__webpack_require__.n(document_register_element_node);\n\n// CONCATENATED MODULE: ./emoji/support/is_emoji_unicode_supported.js\n// On Windows, flags render as two-letter country codes, see http://emojipedia.org/flags/\nvar flagACodePoint = 127462; // parseInt('1F1E6', 16)\nvar flagZCodePoint = 127487; // parseInt('1F1FF', 16)\nfunction isFlagEmoji(emojiUnicode) {\n var cp = emojiUnicode.codePointAt(0);\n // Length 4 because flags are made of 2 characters which are surrogate pairs\n return emojiUnicode.length === 4 && cp >= flagACodePoint && cp <= flagZCodePoint;\n}\n\n// Tested on mac OS 10.12.6 and Windows 10 FCU, it renders as two separate characters\nvar baseFlagCodePoint = 127987; // parseInt('1F3F3', 16)\nvar rainbowCodePoint = 127752; // parseInt('1F308', 16)\nfunction isRainbowFlagEmoji(emojiUnicode) {\n var characters = Array.from(emojiUnicode);\n // Length 4 because flags are made of 2 characters which are surrogate pairs\n return emojiUnicode.length === 4 && characters[0].codePointAt(0) === baseFlagCodePoint && characters[1].codePointAt(0) === rainbowCodePoint;\n}\n\n// Chrome <57 renders keycaps oddly\n// See https://bugs.chromium.org/p/chromium/issues/detail?id=632294\n// Same issue on Windows also fixed in Chrome 57, http://i.imgur.com/rQF7woO.png\nfunction isKeycapEmoji(emojiUnicode) {\n return emojiUnicode.length === 3 && emojiUnicode[2] === '\\u20E3';\n}\n\n// Check for a skin tone variation emoji which aren't always supported\nvar tone1 = 127995; // parseInt('1F3FB', 16)\nvar tone5 = 127999; // parseInt('1F3FF', 16)\nfunction isSkinToneComboEmoji(emojiUnicode) {\n return emojiUnicode.length > 2 && Array.from(emojiUnicode).some(function (char) {\n var cp = char.codePointAt(0);\n return cp >= tone1 && cp <= tone5;\n });\n}\n\n// macOS supports most skin tone emoji's but\n// doesn't support the skin tone versions of horse racing\nvar horseRacingCodePoint = 127943; // parseInt('1F3C7', 16)\nfunction isHorceRacingSkinToneComboEmoji(emojiUnicode) {\n var firstCharacter = Array.from(emojiUnicode)[0];\n return firstCharacter && firstCharacter.codePointAt(0) === horseRacingCodePoint && isSkinToneComboEmoji(emojiUnicode);\n}\n\n// Check for `family_*`, `kiss_*`, `couple_*`\n// For ex. Windows 8.1 Firefox 51.0.1, doesn't support these\nvar zwj = 8205; // parseInt('200D', 16)\nvar personStartCodePoint = 128102; // parseInt('1F466', 16)\nvar personEndCodePoint = 128105; // parseInt('1F469', 16)\nfunction isPersonZwjEmoji(emojiUnicode) {\n var hasPersonEmoji = false;\n var hasZwj = false;\n Array.from(emojiUnicode).forEach(function (character) {\n var cp = character.codePointAt(0);\n if (cp === zwj) {\n hasZwj = true;\n } else if (cp >= personStartCodePoint && cp <= personEndCodePoint) {\n hasPersonEmoji = true;\n }\n });\n\n return hasPersonEmoji && hasZwj;\n}\n\n// Helper so we don't have to run `isFlagEmoji` twice\n// in `isEmojiUnicodeSupported` logic\nfunction checkFlagEmojiSupport(unicodeSupportMap, emojiUnicode) {\n var isFlagResult = isFlagEmoji(emojiUnicode);\n var isRainbowFlagResult = isRainbowFlagEmoji(emojiUnicode);\n return unicodeSupportMap.flag && isFlagResult || unicodeSupportMap.rainbowFlag && isRainbowFlagResult || !isFlagResult && !isRainbowFlagResult;\n}\n\n// Helper so we don't have to run `isSkinToneComboEmoji` twice\n// in `isEmojiUnicodeSupported` logic\nfunction checkSkinToneModifierSupport(unicodeSupportMap, emojiUnicode) {\n var isSkinToneResult = isSkinToneComboEmoji(emojiUnicode);\n return unicodeSupportMap.skinToneModifier && isSkinToneResult || !isSkinToneResult;\n}\n\n// Helper func so we don't have to run `isHorceRacingSkinToneComboEmoji` twice\n// in `isEmojiUnicodeSupported` logic\nfunction checkHorseRacingSkinToneComboEmojiSupport(unicodeSupportMap, emojiUnicode) {\n var isHorseRacingSkinToneResult = isHorceRacingSkinToneComboEmoji(emojiUnicode);\n return unicodeSupportMap.horseRacing && isHorseRacingSkinToneResult || !isHorseRacingSkinToneResult;\n}\n\n// Helper so we don't have to run `isPersonZwjEmoji` twice\n// in `isEmojiUnicodeSupported` logic\nfunction checkPersonEmojiSupport(unicodeSupportMap, emojiUnicode) {\n var isPersonZwjResult = isPersonZwjEmoji(emojiUnicode);\n return unicodeSupportMap.personZwj && isPersonZwjResult || !isPersonZwjResult;\n}\n\n// Takes in a support map and determines whether\n// the given unicode emoji is supported on the platform.\n//\n// Combines all the edge case tests into a one-stop shop method\nfunction isEmojiUnicodeSupported() {\n var unicodeSupportMap = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var emojiUnicode = arguments[1];\n var unicodeVersion = arguments[2];\n\n var isOlderThanChrome57 = unicodeSupportMap.meta && unicodeSupportMap.meta.isChrome && unicodeSupportMap.meta.chromeVersion < 57;\n\n // For comments about each scenario, see the comments above each individual respective function\n return unicodeSupportMap[unicodeVersion] && !(isOlderThanChrome57 && isKeycapEmoji(emojiUnicode)) && checkFlagEmojiSupport(unicodeSupportMap, emojiUnicode) && checkSkinToneModifierSupport(unicodeSupportMap, emojiUnicode) && checkHorseRacingSkinToneComboEmojiSupport(unicodeSupportMap, emojiUnicode) && checkPersonEmojiSupport(unicodeSupportMap, emojiUnicode);\n}\n\n\n// EXTERNAL MODULE: ./lib/utils/accessor.js\nvar accessor = __webpack_require__(\"./lib/utils/accessor.js\");\n\n// CONCATENATED MODULE: ./emoji/support/unicode_support_map.js\n\n\nvar GL_EMOJI_VERSION = '0.2.0';\n\nvar unicodeSupportTestMap = {\n // man, student (emojione does not have any of these yet), http://emojipedia.org/emoji-zwj-sequences/\n // occupationZwj: '\\u{1F468}\\u{200D}\\u{1F393}',\n // woman, biking (emojione does not have any of these yet), http://emojipedia.org/emoji-zwj-sequences/\n // sexZwj: '\\u{1F6B4}\\u{200D}\\u{2640}',\n // family_mwgb\n // Windows 8.1, Firefox 51.0.1 does not support `family_`, `kiss_`, `couple_`\n personZwj: '\\uD83D\\uDC68\\u200D\\uD83D\\uDC69\\u200D\\uD83D\\uDC67\\u200D\\uD83D\\uDC66',\n // horse_racing_tone5\n // Special case that is not supported on macOS 10.12 even though `skinToneModifier` succeeds\n horseRacing: '\\uD83C\\uDFC7\\uD83C\\uDFFF',\n // US flag, http://emojipedia.org/flags/\n flag: '\\uD83C\\uDDFA\\uD83C\\uDDF8',\n rainbowFlag: '\\uD83C\\uDFF3\\uD83C\\uDF08',\n // http://emojipedia.org/modifiers/\n skinToneModifier: [\n // spy_tone5\n '\\uD83D\\uDD75\\uD83C\\uDFFF',\n // person_with_ball_tone5\n '\\u26F9\\uD83C\\uDFFF',\n // angel_tone5\n '\\uD83D\\uDC7C\\uD83C\\uDFFF'],\n // rofl, http://emojipedia.org/unicode-9.0/\n '9.0': '\\uD83E\\uDD23',\n // metal, http://emojipedia.org/unicode-8.0/\n '8.0': '\\uD83E\\uDD18',\n // spy, http://emojipedia.org/unicode-7.0/\n '7.0': '\\uD83D\\uDD75',\n // expressionless, http://emojipedia.org/unicode-6.1/\n 6.1: '\\uD83D\\uDE11',\n // japanese_goblin, http://emojipedia.org/unicode-6.0/\n '6.0': '\\uD83D\\uDC7A',\n // sailboat, http://emojipedia.org/unicode-5.2/\n 5.2: '\\u26F5',\n // mahjong, http://emojipedia.org/unicode-5.1/\n 5.1: '\\uD83C\\uDC04',\n // gear, http://emojipedia.org/unicode-4.1/\n 4.1: '\\u2699',\n // zap, http://emojipedia.org/unicode-4.0/\n '4.0': '\\u26A1',\n // recycle, http://emojipedia.org/unicode-3.2/\n 3.2: '\\u267B',\n // information_source, http://emojipedia.org/unicode-3.0/\n '3.0': '\\u2139',\n // heart, http://emojipedia.org/unicode-1.1/\n 1.1: '\\u2764'\n};\n\nfunction checkPixelInImageDataArray(pixelOffset, imageDataArray) {\n // `4 *` because RGBA\n var indexOffset = 4 * pixelOffset;\n var hasColor = imageDataArray[indexOffset + 0] || imageDataArray[indexOffset + 1] || imageDataArray[indexOffset + 2];\n var isVisible = imageDataArray[indexOffset + 3];\n // Check for some sort of color other than black\n if (hasColor && isVisible) {\n return true;\n }\n return false;\n}\n\nvar chromeMatches = navigator.userAgent.match(/Chrom(?:e|ium)\\/([0-9]+)\\./);\nvar isChrome = chromeMatches && chromeMatches.length > 0;\nvar chromeVersion = chromeMatches && chromeMatches[1] && parseInt(chromeMatches[1], 10);\n\n// We use 16px because mobile Safari (iOS 9.3) doesn't properly scale emojis :/\n// See 32px, https://i.imgur.com/htY6Zym.png\n// See 16px, https://i.imgur.com/FPPsIF8.png\nvar fontSize = 16;\nfunction generateUnicodeSupportMap(testMap) {\n var testMapKeys = Object.keys(testMap);\n var numTestEntries = testMapKeys.reduce(function (list, testKey) {\n return list.concat(testMap[testKey]);\n }, []).length;\n\n var canvas = document.createElement('canvas');\n (window.gl || window).testEmojiUnicodeSupportMapCanvas = canvas;\n var ctx = canvas.getContext('2d');\n canvas.width = 2 * fontSize;\n canvas.height = numTestEntries * fontSize;\n ctx.fillStyle = '#000000';\n ctx.textBaseline = 'middle';\n ctx.font = fontSize + 'px \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"';\n // Write each emoji to the canvas vertically\n var writeIndex = 0;\n testMapKeys.forEach(function (testKey) {\n var testEntry = testMap[testKey];\n [].concat(testEntry).forEach(function (emojiUnicode) {\n ctx.fillText(emojiUnicode, 0, writeIndex * fontSize + fontSize / 2);\n writeIndex += 1;\n });\n });\n\n // Read from the canvas\n var resultMap = {};\n var readIndex = 0;\n testMapKeys.forEach(function (testKey) {\n var testEntry = testMap[testKey];\n // This needs to be a `reduce` instead of `every` because we need to\n // keep the `readIndex` in sync from the writes by running all entries\n var isTestSatisfied = [].concat(testEntry).reduce(function (isSatisfied) {\n // Sample along the vertical-middle for a couple of characters\n var imageData = ctx.getImageData(0, readIndex * fontSize + fontSize / 2, 2 * fontSize, 1).data;\n\n var isValidEmoji = false;\n for (var currentPixel = 0; currentPixel < 64; currentPixel += 1) {\n var isLookingAtFirstChar = currentPixel < fontSize;\n var isLookingAtSecondChar = currentPixel >= fontSize + fontSize / 2;\n // Check for the emoji somewhere along the row\n if (isLookingAtFirstChar && checkPixelInImageDataArray(currentPixel, imageData)) {\n isValidEmoji = true;\n\n // Check to see that nothing is rendered next to the first character\n // to ensure that the ZWJ sequence rendered as one piece\n } else if (isLookingAtSecondChar && checkPixelInImageDataArray(currentPixel, imageData)) {\n isValidEmoji = false;\n break;\n }\n }\n\n readIndex += 1;\n return isSatisfied && isValidEmoji;\n }, true);\n\n resultMap[testKey] = isTestSatisfied;\n });\n\n resultMap.meta = {\n isChrome: isChrome,\n chromeVersion: chromeVersion\n };\n\n return resultMap;\n}\n\nfunction getUnicodeSupportMap() {\n var isLocalStorageAvailable = accessor[\"a\" /* default */].isLocalStorageAccessSafe();\n\n var glEmojiVersionFromCache = void 0;\n var userAgentFromCache = void 0;\n if (isLocalStorageAvailable) {\n glEmojiVersionFromCache = window.localStorage.getItem('gl-emoji-version');\n userAgentFromCache = window.localStorage.getItem('gl-emoji-user-agent');\n }\n\n var unicodeSupportMap = void 0;\n try {\n unicodeSupportMap = JSON.parse(window.localStorage.getItem('gl-emoji-unicode-support-map'));\n } catch (err) {\n // swallow\n }\n\n if (!unicodeSupportMap || glEmojiVersionFromCache !== GL_EMOJI_VERSION || userAgentFromCache !== navigator.userAgent) {\n unicodeSupportMap = generateUnicodeSupportMap(unicodeSupportTestMap);\n\n if (isLocalStorageAvailable) {\n window.localStorage.setItem('gl-emoji-version', GL_EMOJI_VERSION);\n window.localStorage.setItem('gl-emoji-user-agent', navigator.userAgent);\n window.localStorage.setItem('gl-emoji-unicode-support-map', JSON.stringify(unicodeSupportMap));\n }\n }\n\n return unicodeSupportMap;\n}\n// CONCATENATED MODULE: ./emoji/support/index.js\n\n\n\n// cache browser support map between calls\nvar browserUnicodeSupportMap = void 0;\n\nfunction isEmojiUnicodeSupportedByBrowser(emojiUnicode, unicodeVersion) {\n browserUnicodeSupportMap = browserUnicodeSupportMap || getUnicodeSupportMap();\n return isEmojiUnicodeSupported(browserUnicodeSupportMap, emojiUnicode, unicodeVersion);\n}\n// CONCATENATED MODULE: ./behaviors/gl_emoji.js\n\n\n\ndocument_register_element_node_default()(window);\n\nfunction installGlEmojiElement() {\n var GlEmojiElementProto = Object.create(HTMLElement.prototype);\n GlEmojiElementProto.createdCallback = function createdCallback() {\n var _this = this;\n\n var emojiUnicode = this.textContent.trim();\n var _dataset = this.dataset,\n name = _dataset.name,\n unicodeVersion = _dataset.unicodeVersion,\n fallbackSrc = _dataset.fallbackSrc,\n fallbackSpriteClass = _dataset.fallbackSpriteClass;\n\n\n var isEmojiUnicode = this.childNodes && Array.prototype.every.call(this.childNodes, function (childNode) {\n return childNode.nodeType === 3;\n });\n var hasImageFallback = fallbackSrc && fallbackSrc.length > 0;\n var hasCssSpriteFalback = fallbackSpriteClass && fallbackSpriteClass.length > 0;\n\n if (emojiUnicode && isEmojiUnicode && !isEmojiUnicodeSupportedByBrowser(emojiUnicode, unicodeVersion)) {\n // CSS sprite fallback takes precedence over image fallback\n if (hasCssSpriteFalback) {\n // IE 11 doesn't like adding multiple at once :(\n this.classList.add('emoji-icon');\n this.classList.add(fallbackSpriteClass);\n } else {\n __webpack_require__.e/* import() */(\"emoji\").then(__webpack_require__.bind(null, \"./emoji/index.js\")).then(function (_ref) {\n var emojiImageTag = _ref.emojiImageTag,\n emojiFallbackImageSrc = _ref.emojiFallbackImageSrc;\n\n if (hasImageFallback) {\n _this.innerHTML = emojiImageTag(name, fallbackSrc);\n } else {\n var src = emojiFallbackImageSrc(name);\n _this.innerHTML = emojiImageTag(name, src);\n }\n }).catch(function () {\n // do nothing\n });\n }\n }\n };\n\n document.registerElement('gl-emoji', {\n prototype: GlEmojiElementProto\n });\n}\n// EXTERNAL MODULE: ./behaviors/quick_submit.js\nvar quick_submit = __webpack_require__(\"./behaviors/quick_submit.js\");\n\n// EXTERNAL MODULE: ./behaviors/requires_input.js\nvar requires_input = __webpack_require__(\"./behaviors/requires_input.js\");\n\n// EXTERNAL MODULE: ./behaviors/toggler_behavior.js\nvar toggler_behavior = __webpack_require__(\"./behaviors/toggler_behavior.js\");\n\n// EXTERNAL MODULE: ./preview_markdown.js\nvar preview_markdown = __webpack_require__(\"./preview_markdown.js\");\n\n// CONCATENATED MODULE: ./behaviors/index.js\n\n\n\n\n\n\n\n\n\n\n\ninstallGlEmojiElement();\nObject(copy_as_gfm[\"b\" /* default */])();\nObject(copy_to_clipboard[\"a\" /* default */])();\n\n/***/ }),\n\n/***/ \"./behaviors/quick_submit.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__commons_bootstrap__ = __webpack_require__(\"./commons/bootstrap.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__lib_utils_common_utils__ = __webpack_require__(\"./lib/utils/common_utils.js\");\n\n\n\n// Quick Submit behavior\n//\n// When a child field of a form with a `js-quick-submit` class receives a\n// \"Meta+Enter\" (Mac) or \"Ctrl+Enter\" (Linux/Windows) key combination, the form\n// is submitted.\n//\n// ### Example Markup\n//\n//
    \n// \n// \n// \n//
    \n//\n\nfunction isMac() {\n return navigator.userAgent.match(/Macintosh/);\n}\n\nfunction keyCodeIs(e, keyCode) {\n if (e.originalEvent && e.originalEvent.repeat || e.repeat) {\n return false;\n }\n return e.keyCode === keyCode;\n}\n\n$(document).on('keydown.quick_submit', '.js-quick-submit', function (e) {\n // Enter\n if (!keyCodeIs(e, 13)) {\n return;\n }\n\n var onlyMeta = e.metaKey && !e.altKey && !e.ctrlKey && !e.shiftKey;\n var onlyCtrl = e.ctrlKey && !e.altKey && !e.metaKey && !e.shiftKey;\n if (!onlyMeta && !onlyCtrl) {\n return;\n }\n\n e.preventDefault();\n var $form = $(e.target).closest('form');\n var $submitButton = $form.find('input[type=submit], button[type=submit]').first();\n\n if (!$submitButton.prop('disabled')) {\n $submitButton.trigger('click', [e]);\n\n if (!Object(__WEBPACK_IMPORTED_MODULE_1__lib_utils_common_utils__[\"q\" /* isInIssuePage */])()) {\n $submitButton.disable();\n }\n }\n});\n\n// If the user tabs to a submit button on a `js-quick-submit` form, display a\n// tooltip to let them know they could've used the hotkey\n$(document).on('keyup.quick_submit', '.js-quick-submit input[type=submit], .js-quick-submit button[type=submit]', function displayTooltip(e) {\n // Tab\n if (!keyCodeIs(e, 9)) {\n return;\n }\n\n var $this = $(this);\n var title = isMac() ? '您也可以按 ⌘-Enter' : '您也可以按 Ctrl-Enter';\n\n $this.tooltip({\n container: 'body',\n html: 'true',\n placement: 'auto top',\n title: title,\n trigger: 'manual'\n });\n $this.tooltip('show').one('blur', function () {\n return $this.tooltip('hide');\n });\n});\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\n\n/***/ }),\n\n/***/ \"./behaviors/requires_input.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__commons_bootstrap__ = __webpack_require__(\"./commons/bootstrap.js\");\n\n\n\n// Requires Input behavior\n//\n// When called on a form with input fields with the `required` attribute, the\n// form's submit button will be disabled until all required fields have values.\n//\n// ### Example Markup\n//\n//
    \n// \n// \n//
    \n//\n\n$.fn.requiresInput = function requiresInput() {\n var $form = $(this);\n var $button = $('button[type=submit], input[type=submit]', $form);\n var fieldSelector = 'input[required=required], select[required=required], textarea[required=required]';\n\n function requireInput() {\n // Collect the input values of *all* required fields\n var values = __WEBPACK_IMPORTED_MODULE_0_underscore___default.a.map($(fieldSelector, $form), function (field) {\n return field.value;\n });\n\n // Disable the button if any required fields are empty\n if (values.length && __WEBPACK_IMPORTED_MODULE_0_underscore___default.a.any(values, __WEBPACK_IMPORTED_MODULE_0_underscore___default.a.isEmpty)) {\n $button.disable();\n } else {\n $button.enable();\n }\n }\n\n // Set initial button state\n requireInput();\n $form.on('change input', fieldSelector, requireInput);\n};\n\n// Hide or Show the help block when creating a new project\n// based on the option selected\nfunction hideOrShowHelpBlock(form) {\n var selected = $('.js-select-namespace option:selected');\n if (selected.length && selected.data('optionsParent') === 'groups') {\n form.find('.help-block').hide();\n } else if (selected.length) {\n form.find('.help-block').show();\n }\n}\n\n$(function () {\n var $form = $('form.js-requires-input');\n if ($form) {\n $form.requiresInput();\n hideOrShowHelpBlock($form);\n $('.select2.js-select-namespace').change(function () {\n return hideOrShowHelpBlock($form);\n });\n }\n});\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\n\n/***/ }),\n\n/***/ \"./behaviors/toggler_behavior.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_url_utility__ = __webpack_require__(\"./lib/utils/url_utility.js\");\n// Toggle button. Show/hide content inside parent container.\n// Button does not change visibility. If button has icon - it changes chevron style.\n//\n// %div.js-toggle-container\n// %button.js-toggle-button\n// %div.js-toggle-content\n//\n\n\n$(function () {\n function toggleContainer(container, toggleState) {\n var $container = $(container);\n\n $container.find('.js-toggle-button .fa-chevron-up, .js-toggle-button .fa-chevron-down').toggleClass('fa-chevron-up', toggleState).toggleClass('fa-chevron-down', toggleState !== undefined ? !toggleState : undefined);\n\n $container.find('.js-toggle-content').toggle(toggleState);\n }\n\n $('body').on('click', '.js-toggle-button', function toggleButton(e) {\n e.currentTarget.classList.toggle(e.currentTarget.dataset.toggleOpenClass || 'open');\n toggleContainer($(this).closest('.js-toggle-container'));\n\n var targetTag = e.currentTarget.tagName.toLowerCase();\n if (targetTag === 'a' || targetTag === 'button') {\n e.preventDefault();\n }\n });\n\n // If we're accessing a permalink, ensure it is not inside a\n // closed js-toggle-container!\n var hash = Object(__WEBPACK_IMPORTED_MODULE_0__lib_utils_url_utility__[\"a\" /* getLocationHash */])();\n var anchor = hash && document.getElementById(hash);\n var container = anchor && $(anchor).closest('.js-toggle-container');\n\n if (container) {\n toggleContainer(container, true);\n anchor.scrollIntoView();\n }\n});\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\n\n/***/ }),\n\n/***/ \"./breadcrumb.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {/* unused harmony export addTooltipToEl */\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\nvar addTooltipToEl = function addTooltipToEl(el) {\n var textEl = el.querySelector('.js-breadcrumb-item-text');\n\n if (textEl && textEl.scrollWidth > textEl.offsetWidth) {\n el.setAttribute('title', el.textContent);\n el.setAttribute('data-container', 'body');\n el.classList.add('has-tooltip');\n }\n};\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (function () {\n var breadcrumbs = document.querySelector('.js-breadcrumbs-list');\n\n if (breadcrumbs) {\n var topLevelLinks = [].concat(_toConsumableArray(breadcrumbs.children)).filter(function (el) {\n return !el.classList.contains('dropdown');\n }).map(function (el) {\n return el.querySelector('a');\n }).filter(function (el) {\n return el;\n });\n var $expander = $('.js-breadcrumbs-collapsed-expander');\n\n topLevelLinks.forEach(function (el) {\n return addTooltipToEl(el);\n });\n\n $expander.closest('.dropdown').on('show.bs.dropdown hide.bs.dropdown', function (e) {\n $('.js-breadcrumbs-collapsed-expander', e.currentTarget).toggleClass('open').tooltip('hide');\n });\n }\n});\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\n\n/***/ }),\n\n/***/ \"./breakpoints.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* unused harmony export breakpoints */\nvar breakpoints = {\n lg: 1200,\n md: 992,\n sm: 768,\n xs: 0\n};\n\nvar BreakpointInstance = {\n windowWidth: function windowWidth() {\n return window.innerWidth;\n },\n getBreakpointSize: function getBreakpointSize() {\n var windowWidth = this.windowWidth();\n\n var breakpoint = Object.keys(breakpoints).find(function (key) {\n return windowWidth > breakpoints[key];\n });\n\n return breakpoint;\n }\n};\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (BreakpointInstance);\n\n/***/ }),\n\n/***/ \"./confirm_danger_modal.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/* eslint-disable func-names, space-before-function-paren, wrap-iife, one-var, no-var, camelcase, one-var-declaration-per-line, no-else-return, max-len */\n\n\nwindow.ConfirmDangerModal = function () {\n function ConfirmDangerModal(form, text) {\n var project_path, submit;\n this.form = form;\n $('.js-confirm-text').text(text || '');\n $('.js-confirm-danger-input').val('');\n $('#modal-confirm-danger').modal('show');\n project_path = $('.js-confirm-danger-match').text();\n submit = $('.js-confirm-danger-submit');\n submit.disable();\n $('.js-confirm-danger-input').off('input');\n $('.js-confirm-danger-input').on('input', function () {\n if (Object(__WEBPACK_IMPORTED_MODULE_0__lib_utils_common_utils__[\"C\" /* rstrip */])($(this).val()) === project_path) {\n return submit.enable();\n } else {\n return submit.disable();\n }\n });\n $('.js-confirm-danger-submit').off('click');\n $('.js-confirm-danger-submit').on('click', function (_this) {\n return function () {\n return _this.form.submit();\n };\n }(this));\n }\n\n return ConfirmDangerModal;\n}();\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\n\n/***/ }),\n\n/***/ \"./contextual_sidebar.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_underscore__ = __webpack_require__(\"../../../node_modules/underscore/underscore.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_underscore___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_underscore__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__breakpoints__ = __webpack_require__(\"./breakpoints.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\nvar ContextualSidebar = function () {\n function ContextualSidebar() {\n _classCallCheck(this, ContextualSidebar);\n\n this.initDomElements();\n this.render();\n }\n\n _createClass(ContextualSidebar, [{\n key: 'initDomElements',\n value: function initDomElements() {\n this.$page = $('.layout-page');\n this.$sidebar = $('.nav-sidebar');\n this.$innerScroll = $('.nav-sidebar-inner-scroll', this.$sidebar);\n this.$overlay = $('.mobile-overlay');\n this.$openSidebar = $('.toggle-mobile-nav');\n this.$closeSidebar = $('.close-nav-button');\n this.$sidebarToggle = $('.js-toggle-sidebar');\n }\n }, {\n key: 'bindEvents',\n value: function bindEvents() {\n var _this = this;\n\n document.addEventListener('click', function (e) {\n if (!e.target.closest('.nav-sidebar') && (__WEBPACK_IMPORTED_MODULE_2__breakpoints__[\"a\" /* default */].getBreakpointSize() === 'sm' || __WEBPACK_IMPORTED_MODULE_2__breakpoints__[\"a\" /* default */].getBreakpointSize() === 'md')) {\n _this.toggleCollapsedSidebar(true);\n }\n });\n this.$openSidebar.on('click', function () {\n return _this.toggleSidebarNav(true);\n });\n this.$closeSidebar.on('click', function () {\n return _this.toggleSidebarNav(false);\n });\n this.$overlay.on('click', function () {\n return _this.toggleSidebarNav(false);\n });\n this.$sidebarToggle.on('click', function () {\n var value = !_this.$sidebar.hasClass('sidebar-collapsed-desktop');\n _this.toggleCollapsedSidebar(value);\n });\n\n $(window).on('resize', function () {\n return __WEBPACK_IMPORTED_MODULE_1_underscore___default.a.debounce(_this.render(), 100);\n });\n }\n }, {\n key: 'toggleSidebarNav',\n value: function toggleSidebarNav(show) {\n this.$sidebar.toggleClass('sidebar-expanded-mobile', show);\n this.$overlay.toggleClass('mobile-nav-open', show);\n this.$sidebar.removeClass('sidebar-collapsed-desktop');\n }\n }, {\n key: 'toggleCollapsedSidebar',\n value: function toggleCollapsedSidebar(collapsed) {\n var breakpoint = __WEBPACK_IMPORTED_MODULE_2__breakpoints__[\"a\" /* default */].getBreakpointSize();\n\n if (this.$sidebar.length) {\n this.$sidebar.toggleClass('sidebar-collapsed-desktop', collapsed);\n this.$page.toggleClass('page-with-icon-sidebar', breakpoint === 'sm' ? true : collapsed);\n }\n ContextualSidebar.setCollapsedCookie(collapsed);\n\n this.toggleSidebarOverflow();\n }\n }, {\n key: 'toggleSidebarOverflow',\n value: function toggleSidebarOverflow() {\n if (this.$innerScroll.prop('scrollHeight') > this.$innerScroll.prop('offsetHeight')) {\n this.$innerScroll.css('overflow-y', 'scroll');\n } else {\n this.$innerScroll.css('overflow-y', '');\n }\n }\n }, {\n key: 'render',\n value: function render() {\n var breakpoint = __WEBPACK_IMPORTED_MODULE_2__breakpoints__[\"a\" /* default */].getBreakpointSize();\n\n if (breakpoint === 'sm' || breakpoint === 'md') {\n this.toggleCollapsedSidebar(true);\n } else if (breakpoint === 'lg') {\n var collapse = __WEBPACK_IMPORTED_MODULE_0_js_cookie___default.a.get('sidebar_collapsed') === 'true';\n this.toggleCollapsedSidebar(collapse);\n }\n }\n }], [{\n key: 'setCollapsedCookie',\n value: function setCollapsedCookie(value) {\n if (__WEBPACK_IMPORTED_MODULE_2__breakpoints__[\"a\" /* default */].getBreakpointSize() !== 'lg') {\n return;\n }\n __WEBPACK_IMPORTED_MODULE_0_js_cookie___default.a.set('sidebar_collapsed', value, { expires: 365 * 10 });\n }\n }]);\n\n return ContextualSidebar;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (ContextualSidebar);\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\n\n/***/ }),\n\n/***/ \"./dispatcher.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__flash__ = __webpack_require__(\"./flash.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__gfm_auto_complete__ = __webpack_require__(\"./gfm_auto_complete.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__lib_utils_common_utils__ = __webpack_require__(\"./lib/utils/common_utils.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__gl_field_errors__ = __webpack_require__(\"./gl_field_errors.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__shortcuts__ = __webpack_require__(\"./shortcuts.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__search_autocomplete__ = __webpack_require__(\"./search_autocomplete.js\");\n/* eslint-disable func-names, space-before-function-paren, no-var, prefer-arrow-callback, wrap-iife, no-shadow, consistent-return, one-var, one-var-declaration-per-line, camelcase, default-case, no-new, quotes, no-duplicate-case, no-case-declarations, no-fallthrough, max-len */\n\n\n\n\n\n\n\nfunction initSearch() {\n // Only when search form is present\n if ($('.search').length) {\n return new __WEBPACK_IMPORTED_MODULE_5__search_autocomplete__[\"a\" /* default */]();\n }\n}\n\nfunction initFieldErrors() {\n $('.gl-show-field-errors').each(function (i, form) {\n new __WEBPACK_IMPORTED_MODULE_3__gl_field_errors__[\"a\" /* default */](form);\n });\n}\n\nfunction initPageShortcuts(page) {\n var pagesWithCustomShortcuts = ['projects:activity', 'projects:artifacts:browse', 'projects:artifacts:file', 'projects:blame:show', 'projects:blob:show', 'projects:commit:show', 'projects:commits:show', 'projects:find_file:show', 'projects:issues:edit', 'projects:issues:index', 'projects:issues:new', 'projects:issues:show', 'projects:merge_requests:creations:diffs', 'projects:merge_requests:creations:new', 'projects:merge_requests:edit', 'projects:merge_requests:index', 'projects:merge_requests:show', 'projects:network:show', 'projects:show', 'projects:tree:show', 'groups:show'];\n\n if (pagesWithCustomShortcuts.indexOf(page) === -1) {\n new __WEBPACK_IMPORTED_MODULE_4__shortcuts__[\"a\" /* default */]();\n }\n}\n\nfunction initGFMInput() {\n $('.js-gfm-input:not(.js-vue-textarea)').each(function (i, el) {\n var gfm = new __WEBPACK_IMPORTED_MODULE_1__gfm_auto_complete__[\"a\" /* default */](gl.GfmAutoComplete && gl.GfmAutoComplete.dataSources);\n var enableGFM = Object(__WEBPACK_IMPORTED_MODULE_2__lib_utils_common_utils__[\"f\" /* convertPermissionToBoolean */])(el.dataset.supportsAutocomplete);\n gfm.setup($(el), {\n emojis: true,\n members: enableGFM,\n issues: enableGFM,\n milestones: enableGFM,\n mergeRequests: enableGFM,\n labels: enableGFM\n });\n });\n}\n\nfunction initPerformanceBar() {\n if (document.querySelector('#peek')) {\n __webpack_require__.e/* import() */(\"performance_bar.js-528082\").then(__webpack_require__.bind(null, \"./performance_bar.js\")).then(function (m) {\n return new m.default({ container: '#peek' });\n }) // eslint-disable-line new-cap\n .catch(function () {\n return Object(__WEBPACK_IMPORTED_MODULE_0__flash__[\"a\" /* default */])('Error loading performance bar module');\n });\n }\n}\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (function () {\n initSearch();\n initFieldErrors();\n\n var page = $('body').attr('data-page');\n if (page) {\n initPageShortcuts(page);\n initGFMInput();\n initPerformanceBar();\n }\n});\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\n\n/***/ }),\n\n/***/ \"./droplab/drop_lab.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n\n// EXTERNAL MODULE: /opt/gitlab/embedded/service/gitlab-rails/node_modules/underscore/underscore.js\nvar underscore = __webpack_require__(\"../../../node_modules/underscore/underscore.js\");\nvar underscore_default = /*#__PURE__*/__webpack_require__.n(underscore);\n\n// CONCATENATED MODULE: ./droplab/constants.js\nvar DATA_TRIGGER = 'data-dropdown-trigger';\nvar DATA_DROPDOWN = 'data-dropdown';\nvar SELECTED_CLASS = 'droplab-item-selected';\nvar ACTIVE_CLASS = 'droplab-item-active';\nvar IGNORE_CLASS = 'droplab-item-ignore';\n// Matches `{{anything}}` and `{{ everything }}`.\nvar TEMPLATE_REGEX = /\\{\\{(.+?)\\}\\}/g;\n\n\n// CONCATENATED MODULE: ./droplab/utils.js\n/* eslint-disable */\n\n\n\n\nvar utils = {\n toCamelCase: function toCamelCase(attr) {\n return this.camelize(attr.split('-').slice(1).join(' '));\n },\n template: function template(templateString, data) {\n var template = Object(underscore[\"template\"])(templateString, {\n escape: TEMPLATE_REGEX\n });\n\n return template(data);\n },\n camelize: function camelize(str) {\n return str.replace(/(?:^\\w|[A-Z]|\\b\\w)/g, function (letter, index) {\n return index === 0 ? letter.toLowerCase() : letter.toUpperCase();\n }).replace(/\\s+/g, '');\n },\n closest: function closest(thisTag, stopTag) {\n while (thisTag && thisTag.tagName !== stopTag && thisTag.tagName !== 'HTML') {\n thisTag = thisTag.parentNode;\n }\n return thisTag;\n },\n isDropDownParts: function isDropDownParts(target) {\n if (!target || !target.hasAttribute || target.tagName === 'HTML') return false;\n return target.hasAttribute(DATA_TRIGGER) || target.hasAttribute(DATA_DROPDOWN);\n }\n};\n\n/* harmony default export */ var droplab_utils = (utils);\n// CONCATENATED MODULE: ./droplab/drop_down.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 _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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\nvar drop_down_DropDown = function () {\n function DropDown(list) {\n var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, DropDown);\n\n this.currentIndex = 0;\n this.hidden = true;\n this.list = typeof list === 'string' ? document.querySelector(list) : list;\n this.items = [];\n this.eventWrapper = {};\n this.hideOnClick = config.hideOnClick !== false;\n\n if (config.addActiveClassToDropdownButton) {\n this.dropdownToggle = this.list.parentNode.querySelector('.js-dropdown-toggle');\n }\n\n this.getItems();\n this.initTemplateString();\n this.addEvents();\n\n this.initialState = list.innerHTML;\n }\n\n _createClass(DropDown, [{\n key: 'getItems',\n value: function getItems() {\n this.items = [].slice.call(this.list.querySelectorAll('li'));\n return this.items;\n }\n }, {\n key: 'initTemplateString',\n value: function initTemplateString() {\n var items = this.items || this.getItems();\n\n var templateString = '';\n if (items.length > 0) templateString = items[items.length - 1].outerHTML;\n this.templateString = templateString;\n\n return this.templateString;\n }\n }, {\n key: 'clickEvent',\n value: function clickEvent(e) {\n if (e.target.tagName === 'UL') return;\n if (e.target.closest('.' + IGNORE_CLASS)) return;\n\n var selected = e.target.closest('li');\n if (!selected) return;\n\n this.addSelectedClass(selected);\n\n e.preventDefault();\n if (this.hideOnClick) {\n this.hide();\n }\n\n var listEvent = new CustomEvent('click.dl', {\n detail: {\n list: this,\n selected: selected,\n data: e.target.dataset\n }\n });\n this.list.dispatchEvent(listEvent);\n }\n }, {\n key: 'addSelectedClass',\n value: function addSelectedClass(selected) {\n this.removeSelectedClasses();\n selected.classList.add(SELECTED_CLASS);\n }\n }, {\n key: 'removeSelectedClasses',\n value: function removeSelectedClasses() {\n var items = this.items || this.getItems();\n\n items.forEach(function (item) {\n return item.classList.remove(SELECTED_CLASS);\n });\n }\n }, {\n key: 'addEvents',\n value: function addEvents() {\n this.eventWrapper.clickEvent = this.clickEvent.bind(this);\n this.eventWrapper.closeDropdown = this.closeDropdown.bind(this);\n\n this.list.addEventListener('click', this.eventWrapper.clickEvent);\n this.list.addEventListener('keyup', this.eventWrapper.closeDropdown);\n }\n }, {\n key: 'closeDropdown',\n value: function closeDropdown(event) {\n // `ESC` key closes the dropdown.\n if (event.keyCode === 27) {\n event.preventDefault();\n return this.toggle();\n }\n\n return true;\n }\n }, {\n key: 'setData',\n value: function setData(data) {\n this.data = data;\n this.render(data);\n }\n }, {\n key: 'addData',\n value: function addData(data) {\n this.data = (this.data || []).concat(data);\n this.render(this.data);\n }\n }, {\n key: 'render',\n value: function render(data) {\n var children = data ? data.map(this.renderChildren.bind(this)) : [];\n var renderableList = this.list.querySelector('ul[data-dynamic]') || this.list;\n\n renderableList.innerHTML = children.join('');\n\n var listEvent = new CustomEvent('render.dl', {\n detail: {\n list: this\n }\n });\n this.list.dispatchEvent(listEvent);\n }\n }, {\n key: 'renderChildren',\n value: function renderChildren(data) {\n var html = droplab_utils.template(this.templateString, data);\n var template = document.createElement('div');\n\n template.innerHTML = html;\n DropDown.setImagesSrc(template);\n template.firstChild.style.display = data.droplab_hidden ? 'none' : 'block';\n\n return template.firstChild.outerHTML;\n }\n }, {\n key: 'show',\n value: function show() {\n if (!this.hidden) return;\n this.list.style.display = 'block';\n this.currentIndex = 0;\n this.hidden = false;\n\n if (this.dropdownToggle) this.dropdownToggle.classList.add('active');\n }\n }, {\n key: 'hide',\n value: function hide() {\n if (this.hidden) return;\n this.list.style.display = 'none';\n this.currentIndex = 0;\n this.hidden = true;\n\n if (this.dropdownToggle) this.dropdownToggle.classList.remove('active');\n }\n }, {\n key: 'toggle',\n value: function toggle() {\n if (this.hidden) return this.show();\n\n return this.hide();\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this.hide();\n this.list.removeEventListener('click', this.eventWrapper.clickEvent);\n this.list.removeEventListener('keyup', this.eventWrapper.closeDropdown);\n }\n }], [{\n key: 'setImagesSrc',\n value: function setImagesSrc(template) {\n var images = [].concat(_toConsumableArray(template.querySelectorAll('img[data-src]')));\n\n images.forEach(function (image) {\n var img = image;\n\n img.src = img.getAttribute('data-src');\n img.removeAttribute('data-src');\n });\n }\n }]);\n\n return DropDown;\n}();\n\n/* harmony default export */ var drop_down = (drop_down_DropDown);\n// CONCATENATED MODULE: ./droplab/hook.js\nfunction hook__classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\nvar hook_Hook = function Hook(trigger, list, plugins, config) {\n hook__classCallCheck(this, Hook);\n\n this.trigger = trigger;\n this.list = new drop_down(list, config);\n this.type = 'Hook';\n this.event = 'click';\n this.plugins = plugins || [];\n this.config = config || {};\n this.id = trigger.id;\n};\n\n/* harmony default export */ var droplab_hook = (hook_Hook);\n// CONCATENATED MODULE: ./droplab/hook_button.js\nvar hook_button__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 hook_button__classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n\n\nvar HookButton = function (_Hook) {\n _inherits(HookButton, _Hook);\n\n function HookButton(trigger, list, plugins, config) {\n hook_button__classCallCheck(this, HookButton);\n\n var _this = _possibleConstructorReturn(this, (HookButton.__proto__ || Object.getPrototypeOf(HookButton)).call(this, trigger, list, plugins, config));\n\n _this.type = 'button';\n _this.event = 'click';\n\n _this.eventWrapper = {};\n\n _this.addEvents();\n _this.addPlugins();\n return _this;\n }\n\n hook_button__createClass(HookButton, [{\n key: 'addPlugins',\n value: function addPlugins() {\n var _this2 = this;\n\n this.plugins.forEach(function (plugin) {\n return plugin.init(_this2);\n });\n }\n }, {\n key: 'clicked',\n value: function clicked(e) {\n var buttonEvent = new CustomEvent('click.dl', {\n detail: {\n hook: this\n },\n bubbles: true,\n cancelable: true\n });\n e.target.dispatchEvent(buttonEvent);\n\n this.list.toggle();\n }\n }, {\n key: 'addEvents',\n value: function addEvents() {\n this.eventWrapper.clicked = this.clicked.bind(this);\n this.trigger.addEventListener('click', this.eventWrapper.clicked);\n }\n }, {\n key: 'removeEvents',\n value: function removeEvents() {\n this.trigger.removeEventListener('click', this.eventWrapper.clicked);\n }\n }, {\n key: 'restoreInitialState',\n value: function restoreInitialState() {\n this.list.list.innerHTML = this.list.initialState;\n }\n }, {\n key: 'removePlugins',\n value: function removePlugins() {\n this.plugins.forEach(function (plugin) {\n return plugin.destroy();\n });\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this.restoreInitialState();\n\n this.removeEvents();\n this.removePlugins();\n }\n }]);\n\n return HookButton;\n}(droplab_hook);\n\n/* harmony default export */ var hook_button = (HookButton);\n// CONCATENATED MODULE: ./droplab/hook_input.js\nvar hook_input__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 hook_input__classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction hook_input__possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction hook_input__inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n\n\nvar HookInput = function (_Hook) {\n hook_input__inherits(HookInput, _Hook);\n\n function HookInput(trigger, list, plugins, config) {\n hook_input__classCallCheck(this, HookInput);\n\n var _this = hook_input__possibleConstructorReturn(this, (HookInput.__proto__ || Object.getPrototypeOf(HookInput)).call(this, trigger, list, plugins, config));\n\n _this.type = 'input';\n _this.event = 'input';\n\n _this.eventWrapper = {};\n\n _this.addEvents();\n _this.addPlugins();\n return _this;\n }\n\n hook_input__createClass(HookInput, [{\n key: 'addPlugins',\n value: function addPlugins() {\n var _this2 = this;\n\n this.plugins.forEach(function (plugin) {\n return plugin.init(_this2);\n });\n }\n }, {\n key: 'addEvents',\n value: function addEvents() {\n this.eventWrapper.mousedown = this.mousedown.bind(this);\n this.eventWrapper.input = this.input.bind(this);\n this.eventWrapper.keyup = this.keyup.bind(this);\n this.eventWrapper.keydown = this.keydown.bind(this);\n\n this.trigger.addEventListener('mousedown', this.eventWrapper.mousedown);\n this.trigger.addEventListener('input', this.eventWrapper.input);\n this.trigger.addEventListener('keyup', this.eventWrapper.keyup);\n this.trigger.addEventListener('keydown', this.eventWrapper.keydown);\n }\n }, {\n key: 'removeEvents',\n value: function removeEvents() {\n this.hasRemovedEvents = true;\n\n this.trigger.removeEventListener('mousedown', this.eventWrapper.mousedown);\n this.trigger.removeEventListener('input', this.eventWrapper.input);\n this.trigger.removeEventListener('keyup', this.eventWrapper.keyup);\n this.trigger.removeEventListener('keydown', this.eventWrapper.keydown);\n }\n }, {\n key: 'input',\n value: function input(e) {\n if (this.hasRemovedEvents) return;\n\n this.list.show();\n\n var inputEvent = new CustomEvent('input.dl', {\n detail: {\n hook: this,\n text: e.target.value\n },\n bubbles: true,\n cancelable: true\n });\n e.target.dispatchEvent(inputEvent);\n }\n }, {\n key: 'mousedown',\n value: function mousedown(e) {\n if (this.hasRemovedEvents) return;\n\n var mouseEvent = new CustomEvent('mousedown.dl', {\n detail: {\n hook: this,\n text: e.target.value\n },\n bubbles: true,\n cancelable: true\n });\n e.target.dispatchEvent(mouseEvent);\n }\n }, {\n key: 'keyup',\n value: function keyup(e) {\n if (this.hasRemovedEvents) return;\n\n this.keyEvent(e, 'keyup.dl');\n }\n }, {\n key: 'keydown',\n value: function keydown(e) {\n if (this.hasRemovedEvents) return;\n\n this.keyEvent(e, 'keydown.dl');\n }\n }, {\n key: 'keyEvent',\n value: function keyEvent(e, eventName) {\n this.list.show();\n\n var keyEvent = new CustomEvent(eventName, {\n detail: {\n hook: this,\n text: e.target.value,\n which: e.which,\n key: e.key\n },\n bubbles: true,\n cancelable: true\n });\n e.target.dispatchEvent(keyEvent);\n }\n }, {\n key: 'restoreInitialState',\n value: function restoreInitialState() {\n this.list.list.innerHTML = this.list.initialState;\n }\n }, {\n key: 'removePlugins',\n value: function removePlugins() {\n this.plugins.forEach(function (plugin) {\n return plugin.destroy();\n });\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this.restoreInitialState();\n\n this.removeEvents();\n this.removePlugins();\n\n this.list.destroy();\n }\n }]);\n\n return HookInput;\n}(droplab_hook);\n\n/* harmony default export */ var hook_input = (HookInput);\n// CONCATENATED MODULE: ./droplab/keyboard.js\n/* eslint-disable */\n\n\n\nvar keyboard_Keyboard = function Keyboard() {\n var currentKey;\n var currentFocus;\n var isUpArrow = false;\n var isDownArrow = false;\n var removeHighlight = function removeHighlight(list) {\n var itemElements = Array.prototype.slice.call(list.list.querySelectorAll('li:not(.divider):not(.hidden)'), 0);\n var listItems = [];\n for (var i = 0; i < itemElements.length; i++) {\n var listItem = itemElements[i];\n listItem.classList.remove(ACTIVE_CLASS);\n\n if (listItem.style.display !== 'none') {\n listItems.push(listItem);\n }\n }\n return listItems;\n };\n\n var setMenuForArrows = function setMenuForArrows(list) {\n var listItems = removeHighlight(list);\n if (list.currentIndex > 0) {\n if (!listItems[list.currentIndex - 1]) {\n list.currentIndex = list.currentIndex - 1;\n }\n\n if (listItems[list.currentIndex - 1]) {\n var el = listItems[list.currentIndex - 1];\n var filterDropdownEl = el.closest('.filter-dropdown');\n el.classList.add(ACTIVE_CLASS);\n\n if (filterDropdownEl) {\n var filterDropdownBottom = filterDropdownEl.offsetHeight;\n var elOffsetTop = el.offsetTop - 30;\n\n if (elOffsetTop > filterDropdownBottom) {\n filterDropdownEl.scrollTop = elOffsetTop - filterDropdownBottom;\n }\n }\n }\n }\n };\n\n var mousedown = function mousedown(e) {\n var list = e.detail.hook.list;\n removeHighlight(list);\n list.show();\n list.currentIndex = 0;\n isUpArrow = false;\n isDownArrow = false;\n };\n var selectItem = function selectItem(list) {\n var listItems = removeHighlight(list);\n var currentItem = listItems[list.currentIndex - 1];\n var listEvent = new CustomEvent('click.dl', {\n detail: {\n list: list,\n selected: currentItem,\n data: currentItem.dataset\n }\n });\n list.list.dispatchEvent(listEvent);\n list.hide();\n };\n\n var keydown = function keydown(e) {\n var typedOn = e.target;\n var list = e.detail.hook.list;\n var currentIndex = list.currentIndex;\n isUpArrow = false;\n isDownArrow = false;\n\n if (e.detail.which) {\n currentKey = e.detail.which;\n if (currentKey === 13) {\n selectItem(e.detail.hook.list);\n return;\n }\n if (currentKey === 38) {\n isUpArrow = true;\n }\n if (currentKey === 40) {\n isDownArrow = true;\n }\n } else if (e.detail.key) {\n currentKey = e.detail.key;\n if (currentKey === 'Enter') {\n selectItem(e.detail.hook.list);\n return;\n }\n if (currentKey === 'ArrowUp') {\n isUpArrow = true;\n }\n if (currentKey === 'ArrowDown') {\n isDownArrow = true;\n }\n }\n if (isUpArrow) {\n currentIndex--;\n }\n if (isDownArrow) {\n currentIndex++;\n }\n if (currentIndex < 0) {\n currentIndex = 0;\n }\n list.currentIndex = currentIndex;\n setMenuForArrows(e.detail.hook.list);\n };\n\n document.addEventListener('mousedown.dl', mousedown);\n document.addEventListener('keydown.dl', keydown);\n};\n\n/* harmony default export */ var keyboard = (keyboard_Keyboard);\n// CONCATENATED MODULE: ./droplab/drop_lab.js\nvar drop_lab__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 drop_lab__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\nfunction drop_lab__classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\n\n\n\nvar drop_lab_DropLab = function () {\n function DropLab() {\n drop_lab__classCallCheck(this, DropLab);\n\n this.ready = false;\n this.hooks = [];\n this.queuedData = [];\n this.config = {};\n\n this.eventWrapper = {};\n }\n\n drop_lab__createClass(DropLab, [{\n key: 'loadStatic',\n value: function loadStatic() {\n var dropdownTriggers = [].slice.apply(document.querySelectorAll('[' + DATA_TRIGGER + ']'));\n this.addHooks(dropdownTriggers);\n }\n }, {\n key: 'addData',\n value: function addData() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n this.applyArgs(args, 'processAddData');\n }\n }, {\n key: 'setData',\n value: function setData() {\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n this.applyArgs(args, 'processSetData');\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this.hooks.forEach(function (hook) {\n return hook.destroy();\n });\n this.hooks = [];\n this.removeEvents();\n }\n }, {\n key: 'applyArgs',\n value: function applyArgs(args, methodName) {\n if (this.ready) return this[methodName].apply(this, drop_lab__toConsumableArray(args));\n\n this.queuedData = this.queuedData || [];\n this.queuedData.push(args);\n\n return this.ready;\n }\n }, {\n key: 'processAddData',\n value: function processAddData(trigger, data) {\n this.processData(trigger, data, 'addData');\n }\n }, {\n key: 'processSetData',\n value: function processSetData(trigger, data) {\n this.processData(trigger, data, 'setData');\n }\n }, {\n key: 'processData',\n value: function processData(trigger, data, methodName) {\n this.hooks.forEach(function (hook) {\n if (Array.isArray(trigger)) hook.list[methodName](trigger);\n\n if (hook.trigger.id === trigger) hook.list[methodName](data);\n });\n }\n }, {\n key: 'addEvents',\n value: function addEvents() {\n this.eventWrapper.documentClicked = this.documentClicked.bind(this);\n document.addEventListener('click', this.eventWrapper.documentClicked);\n }\n }, {\n key: 'documentClicked',\n value: function documentClicked(e) {\n var thisTag = e.target;\n\n if (thisTag.tagName !== 'UL') thisTag = droplab_utils.closest(thisTag, 'UL');\n if (droplab_utils.isDropDownParts(thisTag, this.hooks)) return;\n if (droplab_utils.isDropDownParts(e.target, this.hooks)) return;\n\n this.hooks.forEach(function (hook) {\n return hook.list.hide();\n });\n }\n }, {\n key: 'removeEvents',\n value: function removeEvents() {\n document.removeEventListener('click', this.eventWrapper.documentClicked);\n }\n }, {\n key: 'changeHookList',\n value: function changeHookList(trigger, list, plugins, config) {\n var _this = this;\n\n var availableTrigger = typeof trigger === 'string' ? document.getElementById(trigger) : trigger;\n\n this.hooks.forEach(function (hook, i) {\n var aHook = hook;\n\n aHook.list.list.dataset.dropdownActive = false;\n\n if (aHook.trigger !== availableTrigger) return;\n\n aHook.destroy();\n _this.hooks.splice(i, 1);\n _this.addHook(availableTrigger, list, plugins, config);\n });\n }\n }, {\n key: 'addHook',\n value: function addHook(hook, list, plugins, config) {\n var availableHook = typeof hook === 'string' ? document.querySelector(hook) : hook;\n var availableList = void 0;\n\n if (typeof list === 'string') {\n availableList = document.querySelector(list);\n } else if (list instanceof Element) {\n availableList = list;\n } else {\n availableList = document.querySelector(hook.dataset[droplab_utils.toCamelCase(DATA_TRIGGER)]);\n }\n\n availableList.dataset.dropdownActive = true;\n\n var HookObject = availableHook.tagName === 'INPUT' ? hook_input : hook_button;\n this.hooks.push(new HookObject(availableHook, availableList, plugins, config));\n\n return this;\n }\n }, {\n key: 'addHooks',\n value: function addHooks(hooks, plugins, config) {\n var _this2 = this;\n\n hooks.forEach(function (hook) {\n return _this2.addHook(hook, null, plugins, config);\n });\n return this;\n }\n }, {\n key: 'setConfig',\n value: function setConfig(obj) {\n this.config = obj;\n }\n }, {\n key: 'fireReady',\n value: function fireReady() {\n var readyEvent = new CustomEvent('ready.dl', {\n detail: {\n dropdown: this\n }\n });\n document.dispatchEvent(readyEvent);\n\n this.ready = true;\n }\n }, {\n key: 'init',\n value: function init(hook, list, plugins, config) {\n var _this3 = this;\n\n if (hook) {\n this.addHook(hook, list, plugins, config);\n } else {\n this.loadStatic();\n }\n\n this.addEvents();\n\n keyboard();\n\n this.fireReady();\n\n this.queuedData.forEach(function (data) {\n return _this3.addData(data);\n });\n this.queuedData = [];\n\n return this;\n }\n }]);\n\n return DropLab;\n}();\n\n/* harmony default export */ var drop_lab = __webpack_exports__[\"a\"] = (drop_lab_DropLab);\n\n/***/ }),\n\n/***/ \"./feature_highlight/feature_highlight.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {/* unused harmony export setupFeatureHighlightPopover */\n/* unused harmony export findHighestPriorityFeature */\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = highlightFeatures;\n/* 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__feature_highlight_helper__ = __webpack_require__(\"./feature_highlight/feature_highlight_helper.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\n\n\n\nfunction setupFeatureHighlightPopover(id) {\n var debounceTimeout = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 300;\n\n var $selector = $(Object(__WEBPACK_IMPORTED_MODULE_1__feature_highlight_helper__[\"a\" /* getSelector */])(id));\n var $parent = $selector.parent();\n var $popoverContent = $parent.siblings('.feature-highlight-popover-content');\n var hideOnScroll = __WEBPACK_IMPORTED_MODULE_1__feature_highlight_helper__[\"e\" /* togglePopover */].bind($selector, false);\n var debouncedMouseleave = __WEBPACK_IMPORTED_MODULE_0_underscore___default.a.debounce(__WEBPACK_IMPORTED_MODULE_1__feature_highlight_helper__[\"d\" /* mouseleave */], debounceTimeout);\n\n $selector\n // Setup popover\n .data('content', $popoverContent.prop('outerHTML')).popover({\n html: true,\n // Override the existing template to add custom CSS classes\n template: '\\n
    \\n
    \\n
    \\n
    \\n '\n }).on('mouseenter', __WEBPACK_IMPORTED_MODULE_1__feature_highlight_helper__[\"c\" /* mouseenter */]).on('mouseleave', debouncedMouseleave).on('inserted.bs.popover', __WEBPACK_IMPORTED_MODULE_1__feature_highlight_helper__[\"b\" /* inserted */]).on('show.bs.popover', function () {\n window.addEventListener('scroll', hideOnScroll);\n }).on('hide.bs.popover', function () {\n window.removeEventListener('scroll', hideOnScroll);\n })\n // Display feature highlight\n .removeAttr('disabled');\n}\n\nfunction findHighestPriorityFeature() {\n var priorityFeature = void 0;\n\n var sortedFeatureEls = [].slice.call(document.querySelectorAll('.js-feature-highlight')).sort(function (a, b) {\n return (a.dataset.highlightPriority || 0) < (b.dataset.highlightPriority || 0);\n });\n\n var _sortedFeatureEls = _slicedToArray(sortedFeatureEls, 1),\n priorityFeatureEl = _sortedFeatureEls[0];\n\n if (priorityFeatureEl) {\n priorityFeature = priorityFeatureEl.dataset.highlight;\n }\n\n return priorityFeature;\n}\n\nfunction highlightFeatures() {\n var priorityFeature = findHighestPriorityFeature();\n\n if (priorityFeature) {\n setupFeatureHighlightPopover(priorityFeature);\n }\n\n return priorityFeature;\n}\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\n\n/***/ }),\n\n/***/ \"./feature_highlight/feature_highlight_helper.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return getSelector; });\n/* harmony export (immutable) */ __webpack_exports__[\"e\"] = togglePopover;\n/* unused harmony export dismiss */\n/* harmony export (immutable) */ __webpack_exports__[\"d\"] = mouseleave;\n/* harmony export (immutable) */ __webpack_exports__[\"c\"] = mouseenter;\n/* harmony export (immutable) */ __webpack_exports__[\"b\"] = inserted;\n/* 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__locale__ = __webpack_require__(\"./locale/index.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__flash__ = __webpack_require__(\"./flash.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__lazy_loader__ = __webpack_require__(\"./lazy_loader.js\");\n\n\n\n\n\nvar getSelector = function getSelector(highlightId) {\n return '.js-feature-highlight[data-highlight=' + highlightId + ']';\n};\n\nfunction togglePopover(show) {\n var isAlreadyShown = this.hasClass('js-popover-show');\n if (show && isAlreadyShown || !show && !isAlreadyShown) {\n return false;\n }\n this.popover(show ? 'show' : 'hide');\n this.toggleClass('disable-animation js-popover-show', show);\n\n return true;\n}\n\nfunction dismiss(highlightId) {\n __WEBPACK_IMPORTED_MODULE_0__lib_utils_axios_utils__[\"a\" /* default */].post(this.attr('data-dismiss-endpoint'), {\n feature_name: highlightId\n }).catch(function () {\n return Object(__WEBPACK_IMPORTED_MODULE_2__flash__[\"a\" /* default */])(Object(__WEBPACK_IMPORTED_MODULE_1__locale__[\"a\" /* __ */])('An error occurred while dismissing the feature highlight. Refresh the page and try dismissing again.'));\n });\n\n togglePopover.call(this, false);\n this.hide();\n}\n\nfunction mouseleave() {\n if (!$('.popover:hover').length > 0) {\n var $featureHighlight = $(this);\n togglePopover.call($featureHighlight, false);\n }\n}\n\nfunction mouseenter() {\n var $featureHighlight = $(this);\n\n var showedPopover = togglePopover.call($featureHighlight, true);\n if (showedPopover) {\n $('.popover').on('mouseleave', mouseleave.bind($featureHighlight));\n }\n}\n\nfunction inserted() {\n var popoverId = this.getAttribute('aria-describedby');\n var highlightId = this.dataset.highlight;\n var $popover = $(this);\n var dismissWrapper = dismiss.bind($popover, highlightId);\n\n $('#' + popoverId + ' .dismiss-feature-highlight').on('click', dismissWrapper);\n\n var lazyImg = $('#' + popoverId + ' .feature-highlight-illustration')[0];\n if (lazyImg) {\n __WEBPACK_IMPORTED_MODULE_3__lazy_loader__[\"a\" /* default */].loadImage(lazyImg);\n }\n}\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\n\n/***/ }),\n\n/***/ \"./feature_highlight/feature_highlight_options.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* unused harmony export default */\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__feature_highlight__ = __webpack_require__(\"./feature_highlight/feature_highlight.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__breakpoints__ = __webpack_require__(\"./breakpoints.js\");\n\n\n\nfunction domContentLoaded() {\n if (__WEBPACK_IMPORTED_MODULE_1__breakpoints__[\"a\" /* default */].getBreakpointSize() === 'lg') {\n Object(__WEBPACK_IMPORTED_MODULE_0__feature_highlight__[\"a\" /* highlightFeatures */])();\n return true;\n }\n return false;\n}\n\ndocument.addEventListener('DOMContentLoaded', domContentLoaded);\n\n/***/ }),\n\n/***/ \"./filtered_search/container.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\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 class-methods-use-this */\nvar container = document;\n\nvar FilteredSearchContainerClass = function () {\n function FilteredSearchContainerClass() {\n _classCallCheck(this, FilteredSearchContainerClass);\n }\n\n _createClass(FilteredSearchContainerClass, [{\n key: \"container\",\n set: function set(containerParam) {\n container = containerParam;\n },\n get: function get() {\n return container;\n }\n }]);\n\n return FilteredSearchContainerClass;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (new FilteredSearchContainerClass());\n\n/***/ }),\n\n/***/ \"./filtered_search/dropdown_utils.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* 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__container__ = __webpack_require__(\"./filtered_search/container.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__filtered_search_tokenizer__ = __webpack_require__(\"./filtered_search/filtered_search_tokenizer.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__filtered_search_dropdown_manager__ = __webpack_require__(\"./filtered_search/filtered_search_dropdown_manager.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__filtered_search_visual_tokens__ = __webpack_require__(\"./filtered_search/filtered_search_visual_tokens.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\nvar DropdownUtils = function () {\n function DropdownUtils() {\n _classCallCheck(this, DropdownUtils);\n }\n\n _createClass(DropdownUtils, null, [{\n key: 'getEscapedText',\n value: function getEscapedText(text) {\n var escapedText = text;\n var hasSpace = text.indexOf(' ') !== -1;\n var hasDoubleQuote = text.indexOf('\"') !== -1;\n\n // Encapsulate value with quotes if it has spaces\n // Known side effect: values's with both single and double quotes\n // won't escape properly\n if (hasSpace) {\n if (hasDoubleQuote) {\n escapedText = '\\'' + text + '\\'';\n } else {\n // Encapsulate singleQuotes or if it hasSpace\n escapedText = '\"' + text + '\"';\n }\n }\n\n return escapedText;\n }\n }, {\n key: 'filterWithSymbol',\n value: function filterWithSymbol(filterSymbol, input, item) {\n var updatedItem = item;\n var searchInput = DropdownUtils.getSearchInput(input);\n\n var title = updatedItem.title.toLowerCase();\n var value = searchInput.toLowerCase();\n var symbol = '';\n\n // Remove the symbol for filter\n if (value[0] === filterSymbol) {\n symbol = value[0];\n value = value.slice(1);\n }\n\n // Removes the first character if it is a quotation so that we can search\n // with multiple words\n if ((value[0] === '\"' || value[0] === '\\'') && title.indexOf(' ') !== -1) {\n value = value.slice(1);\n }\n\n // Eg. filterSymbol = ~ for labels\n var matchWithoutSymbol = symbol === filterSymbol && title.indexOf(value) !== -1;\n var match = title.indexOf('' + symbol + value) !== -1;\n\n updatedItem.droplab_hidden = !match && !matchWithoutSymbol;\n\n return updatedItem;\n }\n }, {\n key: 'mergeDuplicateLabels',\n value: function mergeDuplicateLabels(dataMap, newLabel) {\n var updatedMap = dataMap;\n var key = newLabel.title;\n\n var hasKeyProperty = Object.prototype.hasOwnProperty.call(updatedMap, key);\n\n if (!hasKeyProperty) {\n updatedMap[key] = newLabel;\n } else {\n var existing = updatedMap[key];\n\n if (!existing.multipleColors) {\n existing.multipleColors = [existing.color];\n }\n\n existing.multipleColors.push(newLabel.color);\n }\n\n return updatedMap;\n }\n }, {\n key: 'duplicateLabelColor',\n value: function duplicateLabelColor(labelColors) {\n var colors = labelColors;\n var spacing = 100 / colors.length;\n\n // Reduce the colors to 4\n colors.length = Math.min(colors.length, 4);\n\n var color = colors.map(function (c, i) {\n var percentFirst = Math.floor(spacing * i);\n var percentSecond = Math.floor(spacing * (i + 1));\n return c + ' ' + percentFirst + '%, ' + c + ' ' + percentSecond + '%';\n }).join(', ');\n\n return 'linear-gradient(' + color + ')';\n }\n }, {\n key: 'duplicateLabelPreprocessing',\n value: function duplicateLabelPreprocessing(data) {\n var results = [];\n var dataMap = {};\n\n data.forEach(DropdownUtils.mergeDuplicateLabels.bind(null, dataMap));\n\n Object.keys(dataMap).forEach(function (key) {\n var label = dataMap[key];\n\n if (label.multipleColors) {\n label.color = DropdownUtils.duplicateLabelColor(label.multipleColors);\n label.text_color = '#000000';\n }\n\n results.push(label);\n });\n\n results.preprocessed = true;\n\n return results;\n }\n }, {\n key: 'filterHint',\n value: function filterHint(config, item) {\n var input = config.input,\n allowedKeys = config.allowedKeys;\n\n var updatedItem = item;\n var searchInput = DropdownUtils.getSearchQuery(input);\n\n var _FilteredSearchTokeni = __WEBPACK_IMPORTED_MODULE_2__filtered_search_tokenizer__[\"a\" /* default */].processTokens(searchInput, allowedKeys),\n lastToken = _FilteredSearchTokeni.lastToken,\n tokens = _FilteredSearchTokeni.tokens;\n\n var lastKey = lastToken.key || lastToken || '';\n var allowMultiple = item.type === 'array';\n var itemInExistingTokens = tokens.some(function (t) {\n return t.key === item.hint;\n });\n\n if (!allowMultiple && itemInExistingTokens) {\n updatedItem.droplab_hidden = true;\n } else if (!lastKey || __WEBPACK_IMPORTED_MODULE_0_underscore___default.a.last(searchInput.split('')) === ' ') {\n updatedItem.droplab_hidden = false;\n } else if (lastKey) {\n var split = lastKey.split(':');\n var tokenName = __WEBPACK_IMPORTED_MODULE_0_underscore___default.a.last(split[0].split(' '));\n\n var match = updatedItem.hint.indexOf(tokenName.toLowerCase()) === -1;\n updatedItem.droplab_hidden = tokenName ? match : false;\n }\n\n return updatedItem;\n }\n }, {\n key: 'setDataValueIfSelected',\n value: function setDataValueIfSelected(filter, selected) {\n var dataValue = selected.getAttribute('data-value');\n\n if (dataValue) {\n __WEBPACK_IMPORTED_MODULE_3__filtered_search_dropdown_manager__[\"a\" /* default */].addWordToInput(filter, dataValue, true);\n }\n\n // Return boolean based on whether it was set\n return dataValue !== null;\n }\n }, {\n key: 'getVisualTokenValues',\n value: function getVisualTokenValues(visualToken) {\n var tokenName = visualToken && visualToken.querySelector('.name').textContent.trim();\n var tokenValue = visualToken && visualToken.querySelector('.value') && visualToken.querySelector('.value').textContent.trim();\n if (tokenName === 'label' && tokenValue) {\n // remove leading symbol and wrapping quotes\n tokenValue = tokenValue.replace(/^~(\"|')?(.*)/, '$2').replace(/(\"|')$/, '');\n }\n return { tokenName: tokenName, tokenValue: tokenValue };\n }\n\n // Determines the full search query (visual tokens + input)\n\n }, {\n key: 'getSearchQuery',\n value: function getSearchQuery() {\n var untilInput = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n var container = __WEBPACK_IMPORTED_MODULE_1__container__[\"a\" /* default */].container;\n var tokens = [].slice.call(container.querySelectorAll('.tokens-container li'));\n var values = [];\n\n if (untilInput) {\n var inputIndex = __WEBPACK_IMPORTED_MODULE_0_underscore___default.a.findIndex(tokens, function (t) {\n return t.classList.contains('input-token');\n });\n // Add one to include input-token to the tokens array\n tokens.splice(inputIndex + 1);\n }\n\n tokens.forEach(function (token) {\n if (token.classList.contains('js-visual-token')) {\n var name = token.querySelector('.name');\n var value = token.querySelector('.value');\n var valueContainer = token.querySelector('.value-container');\n var symbol = value && value.dataset.symbol ? value.dataset.symbol : '';\n var valueText = '';\n\n if (valueContainer && valueContainer.dataset.originalValue) {\n valueText = valueContainer.dataset.originalValue;\n } else if (value && value.innerText) {\n valueText = value.innerText;\n }\n\n if (token.className.indexOf('filtered-search-token') !== -1) {\n values.push(name.innerText.toLowerCase() + ':' + symbol + valueText);\n } else {\n values.push(name.innerText);\n }\n } else if (token.classList.contains('input-token')) {\n var _FilteredSearchVisual = __WEBPACK_IMPORTED_MODULE_4__filtered_search_visual_tokens__[\"a\" /* default */].getLastVisualTokenBeforeInput(),\n isLastVisualTokenValid = _FilteredSearchVisual.isLastVisualTokenValid;\n\n var input = __WEBPACK_IMPORTED_MODULE_1__container__[\"a\" /* default */].container.querySelector('.filtered-search');\n var inputValue = input && input.value;\n\n if (isLastVisualTokenValid) {\n values.push(inputValue);\n } else {\n var previous = values.pop();\n values.push('' + previous + inputValue);\n }\n }\n });\n\n return values.map(function (value) {\n return value.trim();\n }).join(' ');\n }\n }, {\n key: 'getSearchInput',\n value: function getSearchInput(filteredSearchInput) {\n var inputValue = filteredSearchInput.value;\n\n var _DropdownUtils$getInp = DropdownUtils.getInputSelectionPosition(filteredSearchInput),\n right = _DropdownUtils$getInp.right;\n\n return inputValue.slice(0, right);\n }\n }, {\n key: 'getInputSelectionPosition',\n value: function getInputSelectionPosition(input) {\n var selectionStart = input.selectionStart;\n var inputValue = input.value;\n // Replace all spaces inside quote marks with underscores\n // (will continue to match entire string until an end quote is found if any)\n // This helps with matching the beginning & end of a token:key\n inputValue = inputValue.replace(/(('[^']*'{0,1})|(\"[^\"]*\"{0,1})|:\\s+)/g, function (str) {\n return str.replace(/\\s/g, '_');\n });\n\n // Get the right position for the word selected\n // Regex matches first space\n var right = inputValue.slice(selectionStart).search(/\\s/);\n\n if (right >= 0) {\n right += selectionStart;\n } else if (right < 0) {\n right = inputValue.length;\n }\n\n // Get the left position for the word selected\n // Regex matches last non-whitespace character\n var left = inputValue.slice(0, right).search(/\\S+$/);\n\n if (selectionStart === 0) {\n left = 0;\n } else if (selectionStart === inputValue.length && left < 0) {\n left = inputValue.length;\n } else if (left < 0) {\n left = selectionStart;\n }\n\n return {\n left: left,\n right: right\n };\n }\n }]);\n\n return DropdownUtils;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (DropdownUtils);\n\n/***/ }),\n\n/***/ \"./filtered_search/filtered_search_dropdown_manager.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n\n// EXTERNAL MODULE: /opt/gitlab/embedded/service/gitlab-rails/node_modules/underscore/underscore.js\nvar underscore = __webpack_require__(\"../../../node_modules/underscore/underscore.js\");\nvar underscore_default = /*#__PURE__*/__webpack_require__.n(underscore);\n\n// EXTERNAL MODULE: ./droplab/drop_lab.js + 7 modules\nvar drop_lab = __webpack_require__(\"./droplab/drop_lab.js\");\n\n// EXTERNAL MODULE: ./filtered_search/container.js\nvar container = __webpack_require__(\"./filtered_search/container.js\");\n\n// EXTERNAL MODULE: ./filtered_search/filtered_search_token_keys.js\nvar filtered_search_token_keys = __webpack_require__(\"./filtered_search/filtered_search_token_keys.js\");\n\n// EXTERNAL MODULE: ./filtered_search/dropdown_utils.js\nvar dropdown_utils = __webpack_require__(\"./filtered_search/dropdown_utils.js\");\n\n// CONCATENATED MODULE: ./droplab/plugins/filter.js\n/* eslint-disable */\n\nvar Filter = {\n keydown: function keydown(e) {\n if (this.destroyed) return;\n\n var hiddenCount = 0;\n var dataHiddenCount = 0;\n\n var list = e.detail.hook.list;\n var data = list.data;\n var value = e.detail.hook.trigger.value.toLowerCase();\n var config = e.detail.hook.config.Filter;\n var matches = [];\n var filterFunction;\n // will only work on dynamically set data\n if (!data) {\n return;\n }\n\n if (config && config.filterFunction && typeof config.filterFunction === 'function') {\n filterFunction = config.filterFunction;\n } else {\n filterFunction = function filterFunction(o) {\n // cheap string search\n o.droplab_hidden = o[config.template].toLowerCase().indexOf(value) === -1;\n return o;\n };\n }\n\n dataHiddenCount = data.filter(function (o) {\n return !o.droplab_hidden;\n }).length;\n\n matches = data.map(function (o) {\n return filterFunction(o, value);\n });\n\n hiddenCount = matches.filter(function (o) {\n return !o.droplab_hidden;\n }).length;\n\n if (dataHiddenCount !== hiddenCount) {\n list.setData(matches);\n list.currentIndex = 0;\n }\n },\n\n debounceKeydown: function debounceKeydown(e) {\n if ([13, // enter\n 16, // shift\n 17, // ctrl\n 18, // alt\n 20, // caps lock\n 37, // left arrow\n 38, // up arrow\n 39, // right arrow\n 40, // down arrow\n 91, // left window\n 92, // right window\n 93].indexOf(e.detail.which || e.detail.keyCode) > -1) return;\n\n if (this.timeout) clearTimeout(this.timeout);\n this.timeout = setTimeout(this.keydown.bind(this, e), 200);\n },\n\n init: function init(hook) {\n var config = hook.config.Filter;\n\n if (!config || !config.template) return;\n\n this.hook = hook;\n this.destroyed = false;\n\n this.eventWrapper = {};\n this.eventWrapper.debounceKeydown = this.debounceKeydown.bind(this);\n\n this.hook.trigger.addEventListener('keydown.dl', this.eventWrapper.debounceKeydown);\n this.hook.trigger.addEventListener('mousedown.dl', this.eventWrapper.debounceKeydown);\n },\n\n destroy: function destroy() {\n if (this.timeout) clearTimeout(this.timeout);\n this.destroyed = true;\n\n this.hook.trigger.removeEventListener('keydown.dl', this.eventWrapper.debounceKeydown);\n this.hook.trigger.removeEventListener('mousedown.dl', this.eventWrapper.debounceKeydown);\n }\n};\n\n/* harmony default export */ var filter = (Filter);\n// CONCATENATED MODULE: ./filtered_search/filtered_search_dropdown.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\nvar DATA_DROPDOWN_TRIGGER = 'data-dropdown-trigger';\n\nvar filtered_search_dropdown_FilteredSearchDropdown = function () {\n function FilteredSearchDropdown(_ref) {\n var droplab = _ref.droplab,\n dropdown = _ref.dropdown,\n input = _ref.input,\n filter = _ref.filter;\n\n _classCallCheck(this, FilteredSearchDropdown);\n\n this.droplab = droplab;\n this.hookId = input && input.id;\n this.input = input;\n this.filter = filter;\n this.dropdown = dropdown;\n this.loadingTemplate = '
    \\n \\n
    ';\n this.bindEvents();\n }\n\n _createClass(FilteredSearchDropdown, [{\n key: 'bindEvents',\n value: function bindEvents() {\n this.itemClickedWrapper = this.itemClicked.bind(this);\n this.dropdown.addEventListener('click.dl', this.itemClickedWrapper);\n }\n }, {\n key: 'unbindEvents',\n value: function unbindEvents() {\n this.dropdown.removeEventListener('click.dl', this.itemClickedWrapper);\n }\n }, {\n key: 'getCurrentHook',\n value: function getCurrentHook() {\n var _this = this;\n\n return this.droplab.hooks.filter(function (h) {\n return h.id === _this.hookId;\n })[0] || null;\n }\n }, {\n key: 'itemClicked',\n value: function itemClicked(e, getValueFunction) {\n var selected = e.detail.selected;\n\n\n if (selected.tagName === 'LI' && selected.innerHTML) {\n var dataValueSet = dropdown_utils[\"a\" /* default */].setDataValueIfSelected(this.filter, selected);\n\n if (!dataValueSet) {\n var value = getValueFunction(selected);\n filtered_search_dropdown_manager.addWordToInput(this.filter, value, true);\n }\n\n this.resetFilters();\n this.dismissDropdown();\n this.dispatchInputEvent();\n }\n }\n }, {\n key: 'setAsDropdown',\n value: function setAsDropdown() {\n this.input.setAttribute(DATA_DROPDOWN_TRIGGER, '#' + this.dropdown.id);\n }\n }, {\n key: 'setOffset',\n value: function setOffset() {\n var offset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n if (window.innerWidth > 480) {\n this.dropdown.style.left = offset + 'px';\n } else {\n this.dropdown.style.left = '0px';\n }\n }\n }, {\n key: 'renderContent',\n value: function renderContent() {\n var forceShowList = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n var currentHook = this.getCurrentHook();\n if (forceShowList && currentHook && currentHook.list.hidden) {\n currentHook.list.show();\n }\n }\n }, {\n key: 'render',\n value: function render() {\n var forceRenderContent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var forceShowList = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n this.setAsDropdown();\n\n var currentHook = this.getCurrentHook();\n var firstTimeInitialized = currentHook === null;\n\n if (firstTimeInitialized || forceRenderContent) {\n this.renderContent(forceShowList);\n } else if (currentHook.list.list.id !== this.dropdown.id) {\n this.renderContent(forceShowList);\n }\n }\n }, {\n key: 'dismissDropdown',\n value: function dismissDropdown() {\n // Focusing on the input will dismiss dropdown\n // (default droplab functionality)\n this.input.focus();\n }\n }, {\n key: 'dispatchInputEvent',\n value: function dispatchInputEvent() {\n // Propogate input change to FilteredSearchDropdownManager\n // so that it can determine which dropdowns to open\n this.input.dispatchEvent(new CustomEvent('input', {\n bubbles: true,\n cancelable: true\n }));\n }\n }, {\n key: 'dispatchFormSubmitEvent',\n value: function dispatchFormSubmitEvent() {\n // dispatchEvent() is necessary as form.submit() does not\n // trigger event handlers\n this.input.form.dispatchEvent(new Event('submit'));\n }\n }, {\n key: 'hideDropdown',\n value: function hideDropdown() {\n var currentHook = this.getCurrentHook();\n if (currentHook) {\n currentHook.list.hide();\n }\n }\n }, {\n key: 'resetFilters',\n value: function resetFilters() {\n var hook = this.getCurrentHook();\n\n if (hook) {\n var data = hook.list.data || [];\n\n if (!data) return;\n\n var results = data.map(function (o) {\n var updated = o;\n updated.droplab_hidden = false;\n return updated;\n });\n hook.list.render(results);\n }\n }\n }]);\n\n return FilteredSearchDropdown;\n}();\n\n/* harmony default export */ var filtered_search_dropdown = (filtered_search_dropdown_FilteredSearchDropdown);\n// EXTERNAL MODULE: ./filtered_search/filtered_search_visual_tokens.js + 1 modules\nvar filtered_search_visual_tokens = __webpack_require__(\"./filtered_search/filtered_search_visual_tokens.js\");\n\n// CONCATENATED MODULE: ./filtered_search/dropdown_hint.js\nvar dropdown_hint__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 dropdown_hint__classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n\n\n\n\n\n\nvar dropdown_hint_DropdownHint = function (_FilteredSearchDropdo) {\n _inherits(DropdownHint, _FilteredSearchDropdo);\n\n function DropdownHint() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n dropdown_hint__classCallCheck(this, DropdownHint);\n\n var input = options.input,\n tokenKeys = options.tokenKeys;\n\n var _this = _possibleConstructorReturn(this, (DropdownHint.__proto__ || Object.getPrototypeOf(DropdownHint)).call(this, options));\n\n _this.config = {\n Filter: {\n template: 'hint',\n filterFunction: dropdown_utils[\"a\" /* default */].filterHint.bind(null, {\n input: input,\n allowedKeys: tokenKeys.getKeys()\n })\n }\n };\n _this.tokenKeys = tokenKeys;\n return _this;\n }\n\n dropdown_hint__createClass(DropdownHint, [{\n key: 'itemClicked',\n value: function itemClicked(e) {\n var selected = e.detail.selected;\n\n\n if (selected.tagName === 'LI') {\n if (selected.hasAttribute('data-value')) {\n this.dismissDropdown();\n } else if (selected.getAttribute('data-action') === 'submit') {\n this.dismissDropdown();\n this.dispatchFormSubmitEvent();\n } else {\n var token = selected.querySelector('.js-filter-hint').innerText.trim();\n var tag = selected.querySelector('.js-filter-tag').innerText.trim();\n\n if (tag.length) {\n // Get previous input values in the input field and convert them into visual tokens\n var previousInputValues = this.input.value.split(' ');\n var searchTerms = [];\n\n previousInputValues.forEach(function (value, index) {\n searchTerms.push(value);\n\n if (index === previousInputValues.length - 1 && token.indexOf(value.toLowerCase()) !== -1) {\n searchTerms.pop();\n }\n });\n\n if (searchTerms.length > 0) {\n filtered_search_visual_tokens[\"a\" /* default */].addSearchVisualToken(searchTerms.join(' '));\n }\n\n filtered_search_dropdown_manager.addWordToInput(token.replace(':', ''), '', false, this.container);\n }\n this.dismissDropdown();\n this.dispatchInputEvent();\n }\n }\n }\n }, {\n key: 'renderContent',\n value: function renderContent() {\n var dropdownData = this.tokenKeys.get().map(function (tokenKey) {\n return {\n icon: 'fa-' + tokenKey.icon,\n hint: tokenKey.key,\n tag: ':' + tokenKey.tag,\n type: tokenKey.type\n };\n });\n\n this.droplab.changeHookList(this.hookId, this.dropdown, [filter], this.config);\n this.droplab.setData(this.hookId, dropdownData);\n }\n }, {\n key: 'init',\n value: function init() {\n this.droplab.addHook(this.input, this.dropdown, [filter], this.config).init();\n }\n }]);\n\n return DropdownHint;\n}(filtered_search_dropdown);\n\n/* harmony default export */ var dropdown_hint = (dropdown_hint_DropdownHint);\n// EXTERNAL MODULE: ./flash.js\nvar flash = __webpack_require__(\"./flash.js\");\n\n// EXTERNAL MODULE: ./lib/utils/ajax_cache.js\nvar ajax_cache = __webpack_require__(\"./lib/utils/ajax_cache.js\");\n\n// CONCATENATED MODULE: ./droplab/plugins/ajax.js\n/* eslint-disable */\n\n\n\nvar Ajax = {\n _loadData: function _loadData(data, config, self) {\n if (config.loadingTemplate) {\n var dataLoadingTemplate = self.hook.list.list.querySelector('[data-loading-template]');\n if (dataLoadingTemplate) dataLoadingTemplate.outerHTML = self.listTemplate;\n }\n\n if (!self.destroyed) self.hook.list[config.method].call(self.hook.list, data);\n },\n preprocessing: function preprocessing(config, data) {\n var results = data;\n\n if (config.preprocessing && !data.preprocessed) {\n results = config.preprocessing(data);\n ajax_cache[\"a\" /* default */].override(config.endpoint, results);\n }\n\n return results;\n },\n init: function init(hook) {\n var self = this;\n self.destroyed = false;\n var config = hook.config.Ajax;\n this.hook = hook;\n if (!config || !config.endpoint || !config.method) {\n return;\n }\n if (config.method !== 'setData' && config.method !== 'addData') {\n return;\n }\n if (config.loadingTemplate) {\n var dynamicList = hook.list.list.querySelector('[data-dynamic]');\n var loadingTemplate = document.createElement('div');\n loadingTemplate.innerHTML = config.loadingTemplate;\n loadingTemplate.setAttribute('data-loading-template', '');\n this.listTemplate = dynamicList.outerHTML;\n dynamicList.outerHTML = loadingTemplate.outerHTML;\n }\n\n return ajax_cache[\"a\" /* default */].retrieve(config.endpoint).then(self.preprocessing.bind(null, config)).then(function (data) {\n return self._loadData(data, config, self);\n }).catch(config.onError);\n },\n destroy: function destroy() {\n this.destroyed = true;\n }\n};\n\n/* harmony default export */ var ajax = (Ajax);\n// CONCATENATED MODULE: ./filtered_search/dropdown_emoji.js\nvar dropdown_emoji__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\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\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\nfunction dropdown_emoji__classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction dropdown_emoji__possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction dropdown_emoji__inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n\n\n\n\n\n\nvar dropdown_emoji_DropdownEmoji = function (_FilteredSearchDropdo) {\n dropdown_emoji__inherits(DropdownEmoji, _FilteredSearchDropdo);\n\n function DropdownEmoji() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n dropdown_emoji__classCallCheck(this, DropdownEmoji);\n\n var _this = dropdown_emoji__possibleConstructorReturn(this, (DropdownEmoji.__proto__ || Object.getPrototypeOf(DropdownEmoji)).call(this, options));\n\n _this.config = {\n Ajax: {\n endpoint: (gon.relative_url_root || '') + '/autocomplete/award_emojis',\n method: 'setData',\n loadingTemplate: _this.loadingTemplate,\n onError: function onError() {\n /* eslint-disable no-new */\n new flash[\"a\" /* default */]('An error occurred fetching the dropdown data.');\n /* eslint-enable no-new */\n }\n },\n Filter: {\n template: 'name'\n }\n };\n\n __webpack_require__.e/* import() */(\"emoji\").then(__webpack_require__.bind(null, \"./emoji/index.js\")).then(function (_ref) {\n var glEmojiTag = _ref.glEmojiTag;\n _this.glEmojiTag = glEmojiTag;\n }).catch(function () {/* ignore error and leave emoji name in the search bar */});\n\n _this.unbindEvents();\n _this.bindEvents();\n return _this;\n }\n\n dropdown_emoji__createClass(DropdownEmoji, [{\n key: 'bindEvents',\n value: function bindEvents() {\n _get(DropdownEmoji.prototype.__proto__ || Object.getPrototypeOf(DropdownEmoji.prototype), 'bindEvents', this).call(this);\n\n this.listRenderedWrapper = this.listRendered.bind(this);\n this.dropdown.addEventListener('render.dl', this.listRenderedWrapper);\n }\n }, {\n key: 'unbindEvents',\n value: function unbindEvents() {\n this.dropdown.removeEventListener('render.dl', this.listRenderedWrapper);\n _get(DropdownEmoji.prototype.__proto__ || Object.getPrototypeOf(DropdownEmoji.prototype), 'unbindEvents', this).call(this);\n }\n }, {\n key: 'listRendered',\n value: function listRendered() {\n this.replaceEmojiElement();\n }\n }, {\n key: 'itemClicked',\n value: function itemClicked(e) {\n _get(DropdownEmoji.prototype.__proto__ || Object.getPrototypeOf(DropdownEmoji.prototype), 'itemClicked', this).call(this, e, function (selected) {\n var name = selected.querySelector('.js-data-value').innerText.trim();\n return dropdown_utils[\"a\" /* default */].getEscapedText(name);\n });\n }\n }, {\n key: 'renderContent',\n value: function renderContent() {\n var forceShowList = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n this.droplab.changeHookList(this.hookId, this.dropdown, [ajax, filter], this.config);\n _get(DropdownEmoji.prototype.__proto__ || Object.getPrototypeOf(DropdownEmoji.prototype), 'renderContent', this).call(this, forceShowList);\n }\n }, {\n key: 'replaceEmojiElement',\n value: function replaceEmojiElement() {\n var _this2 = this;\n\n if (!this.glEmojiTag) return;\n\n // Replace empty gl-emoji tag to real content\n var dropdownItems = [].concat(_toConsumableArray(this.dropdown.querySelectorAll('.filter-dropdown-item')));\n dropdownItems.forEach(function (dropdownItem) {\n var name = dropdownItem.querySelector('.js-data-value').innerText;\n var emojiTag = _this2.glEmojiTag(name);\n var emojiElement = dropdownItem.querySelector('gl-emoji');\n emojiElement.outerHTML = emojiTag;\n });\n }\n }, {\n key: 'init',\n value: function init() {\n this.droplab.addHook(this.input, this.dropdown, [ajax, filter], this.config).init();\n }\n }]);\n\n return DropdownEmoji;\n}(filtered_search_dropdown);\n\n/* harmony default export */ var dropdown_emoji = (dropdown_emoji_DropdownEmoji);\n// CONCATENATED MODULE: ./filtered_search/dropdown_non_user.js\nvar dropdown_non_user__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\nvar dropdown_non_user__get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nfunction dropdown_non_user__classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction dropdown_non_user__possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction dropdown_non_user__inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n\n\n\n\n\n\nvar dropdown_non_user_DropdownNonUser = function (_FilteredSearchDropdo) {\n dropdown_non_user__inherits(DropdownNonUser, _FilteredSearchDropdo);\n\n function DropdownNonUser() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n dropdown_non_user__classCallCheck(this, DropdownNonUser);\n\n var input = options.input,\n endpoint = options.endpoint,\n symbol = options.symbol,\n preprocessing = options.preprocessing;\n\n var _this = dropdown_non_user__possibleConstructorReturn(this, (DropdownNonUser.__proto__ || Object.getPrototypeOf(DropdownNonUser)).call(this, options));\n\n _this.symbol = symbol;\n _this.config = {\n Ajax: {\n endpoint: endpoint,\n method: 'setData',\n loadingTemplate: _this.loadingTemplate,\n preprocessing: preprocessing,\n onError: function onError() {\n /* eslint-disable no-new */\n new flash[\"a\" /* default */]('An error occurred fetching the dropdown data.');\n /* eslint-enable no-new */\n }\n },\n Filter: {\n filterFunction: dropdown_utils[\"a\" /* default */].filterWithSymbol.bind(null, _this.symbol, input),\n template: 'title'\n }\n };\n return _this;\n }\n\n dropdown_non_user__createClass(DropdownNonUser, [{\n key: 'itemClicked',\n value: function itemClicked(e) {\n var _this2 = this;\n\n dropdown_non_user__get(DropdownNonUser.prototype.__proto__ || Object.getPrototypeOf(DropdownNonUser.prototype), 'itemClicked', this).call(this, e, function (selected) {\n var title = selected.querySelector('.js-data-value').innerText.trim();\n return '' + _this2.symbol + dropdown_utils[\"a\" /* default */].getEscapedText(title);\n });\n }\n }, {\n key: 'renderContent',\n value: function renderContent() {\n var forceShowList = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n this.droplab.changeHookList(this.hookId, this.dropdown, [ajax, filter], this.config);\n dropdown_non_user__get(DropdownNonUser.prototype.__proto__ || Object.getPrototypeOf(DropdownNonUser.prototype), 'renderContent', this).call(this, forceShowList);\n }\n }, {\n key: 'init',\n value: function init() {\n this.droplab.addHook(this.input, this.dropdown, [ajax, filter], this.config).init();\n }\n }]);\n\n return DropdownNonUser;\n}(filtered_search_dropdown);\n\n/* harmony default export */ var dropdown_non_user = (dropdown_non_user_DropdownNonUser);\n// CONCATENATED MODULE: ./droplab/plugins/ajax_filter.js\n/* eslint-disable */\n\n\nvar AjaxFilter = {\n init: function init(hook) {\n this.destroyed = false;\n this.hook = hook;\n this.notLoading();\n\n this.eventWrapper = {};\n this.eventWrapper.debounceTrigger = this.debounceTrigger.bind(this);\n this.hook.trigger.addEventListener('keydown.dl', this.eventWrapper.debounceTrigger);\n this.hook.trigger.addEventListener('focus', this.eventWrapper.debounceTrigger);\n\n this.trigger(true);\n },\n\n notLoading: function notLoading() {\n this.loading = false;\n },\n\n debounceTrigger: function debounceTrigger(e) {\n var NON_CHARACTER_KEYS = [16, 17, 18, 20, 37, 38, 39, 40, 91, 93];\n var invalidKeyPressed = NON_CHARACTER_KEYS.indexOf(e.detail.which || e.detail.keyCode) > -1;\n var focusEvent = e.type === 'focus';\n if (invalidKeyPressed || this.loading) {\n return;\n }\n if (this.timeout) {\n clearTimeout(this.timeout);\n }\n this.timeout = setTimeout(this.trigger.bind(this, focusEvent), 200);\n },\n\n trigger: function trigger(getEntireList) {\n var _this = this;\n\n var config = this.hook.config.AjaxFilter;\n var searchValue = this.trigger.value;\n if (!config || !config.endpoint || !config.searchKey) {\n return;\n }\n if (config.searchValueFunction) {\n searchValue = config.searchValueFunction();\n }\n if (config.loadingTemplate && this.hook.list.data === undefined || this.hook.list.data.length === 0) {\n var dynamicList = this.hook.list.list.querySelector('[data-dynamic]');\n var loadingTemplate = document.createElement('div');\n loadingTemplate.innerHTML = config.loadingTemplate;\n loadingTemplate.setAttribute('data-loading-template', true);\n this.listTemplate = dynamicList.outerHTML;\n dynamicList.outerHTML = loadingTemplate.outerHTML;\n }\n if (getEntireList) {\n searchValue = '';\n }\n if (config.searchKey === searchValue) {\n return this.list.show();\n }\n this.loading = true;\n var params = config.params || {};\n params[config.searchKey] = searchValue;\n var url = config.endpoint + this.buildParams(params);\n return ajax_cache[\"a\" /* default */].retrieve(url).then(function (data) {\n _this._loadData(data, config);\n if (config.onLoadingFinished) {\n config.onLoadingFinished(data);\n }\n }).catch(config.onError);\n },\n\n _loadData: function _loadData(data, config) {\n var list = this.hook.list;\n if (config.loadingTemplate && list.data === undefined || list.data.length === 0) {\n var dataLoadingTemplate = list.list.querySelector('[data-loading-template]');\n if (dataLoadingTemplate) {\n dataLoadingTemplate.outerHTML = this.listTemplate;\n }\n }\n if (!this.destroyed) {\n var hookListChildren = list.list.children;\n var onlyDynamicList = hookListChildren.length === 1 && hookListChildren[0].hasAttribute('data-dynamic');\n if (onlyDynamicList && data.length === 0) {\n list.hide();\n }\n list.setData.call(list, data);\n }\n this.notLoading();\n list.currentIndex = 0;\n },\n\n\n buildParams: function buildParams(params) {\n if (!params) return '';\n var paramsArray = Object.keys(params).map(function (param) {\n return param + '=' + (params[param] || '');\n });\n return '?' + paramsArray.join('&');\n },\n\n destroy: function destroy() {\n if (this.timeout) clearTimeout(this.timeout);\n this.destroyed = true;\n\n this.hook.trigger.removeEventListener('keydown.dl', this.eventWrapper.debounceTrigger);\n this.hook.trigger.removeEventListener('focus', this.eventWrapper.debounceTrigger);\n }\n};\n\n/* harmony default export */ var ajax_filter = (AjaxFilter);\n// EXTERNAL MODULE: ./lib/utils/dom_utils.js\nvar dom_utils = __webpack_require__(\"./lib/utils/dom_utils.js\");\n\n// EXTERNAL MODULE: ./filtered_search/filtered_search_tokenizer.js\nvar filtered_search_tokenizer = __webpack_require__(\"./filtered_search/filtered_search_tokenizer.js\");\n\n// CONCATENATED MODULE: ./filtered_search/dropdown_user.js\nvar dropdown_user__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\nvar dropdown_user__get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nfunction dropdown_user__classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction dropdown_user__possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction dropdown_user__inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n\n\n\n\n\n\n\nvar dropdown_user_DropdownUser = function (_FilteredSearchDropdo) {\n dropdown_user__inherits(DropdownUser, _FilteredSearchDropdo);\n\n function DropdownUser() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n dropdown_user__classCallCheck(this, DropdownUser);\n\n var tokenKeys = options.tokenKeys;\n\n var _this = dropdown_user__possibleConstructorReturn(this, (DropdownUser.__proto__ || Object.getPrototypeOf(DropdownUser)).call(this, options));\n\n _this.config = {\n AjaxFilter: {\n endpoint: (gon.relative_url_root || '') + '/autocomplete/users.json',\n searchKey: 'search',\n params: {\n active: true,\n group_id: _this.getGroupId(),\n project_id: _this.getProjectId(),\n current_user: true\n },\n searchValueFunction: _this.getSearchInput.bind(_this),\n loadingTemplate: _this.loadingTemplate,\n onLoadingFinished: function onLoadingFinished() {\n _this.hideCurrentUser();\n },\n onError: function onError() {\n /* eslint-disable no-new */\n new flash[\"a\" /* default */]('An error occurred fetching the dropdown data.');\n /* eslint-enable no-new */\n }\n }\n };\n _this.tokenKeys = tokenKeys;\n return _this;\n }\n\n dropdown_user__createClass(DropdownUser, [{\n key: 'hideCurrentUser',\n value: function hideCurrentUser() {\n Object(dom_utils[\"a\" /* addClassIfElementExists */])(this.dropdown.querySelector('.js-current-user'), 'hidden');\n }\n }, {\n key: 'itemClicked',\n value: function itemClicked(e) {\n dropdown_user__get(DropdownUser.prototype.__proto__ || Object.getPrototypeOf(DropdownUser.prototype), 'itemClicked', this).call(this, e, function (selected) {\n return selected.querySelector('.dropdown-light-content').innerText.trim();\n });\n }\n }, {\n key: 'renderContent',\n value: function renderContent() {\n var forceShowList = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n this.droplab.changeHookList(this.hookId, this.dropdown, [ajax_filter], this.config);\n dropdown_user__get(DropdownUser.prototype.__proto__ || Object.getPrototypeOf(DropdownUser.prototype), 'renderContent', this).call(this, forceShowList);\n }\n }, {\n key: 'getGroupId',\n value: function getGroupId() {\n return this.input.getAttribute('data-group-id');\n }\n }, {\n key: 'getProjectId',\n value: function getProjectId() {\n return this.input.getAttribute('data-project-id');\n }\n }, {\n key: 'getSearchInput',\n value: function getSearchInput() {\n var query = dropdown_utils[\"a\" /* default */].getSearchInput(this.input);\n\n var _FilteredSearchTokeni = filtered_search_tokenizer[\"a\" /* default */].processTokens(query, this.tokenKeys.get()),\n lastToken = _FilteredSearchTokeni.lastToken;\n\n var value = lastToken || '';\n\n if (value[0] === '@') {\n value = value.slice(1);\n }\n\n // Removes the first character if it is a quotation so that we can search\n // with multiple words\n if (value[0] === '\"' || value[0] === '\\'') {\n value = value.slice(1);\n }\n\n return value;\n }\n }, {\n key: 'init',\n value: function init() {\n this.droplab.addHook(this.input, this.dropdown, [ajax_filter], this.config).init();\n }\n }]);\n\n return DropdownUser;\n}(filtered_search_dropdown);\n\n/* harmony default export */ var dropdown_user = (dropdown_user_DropdownUser);\n// CONCATENATED MODULE: ./filtered_search/filtered_search_dropdown_manager.js\nvar filtered_search_dropdown_manager__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 filtered_search_dropdown_manager__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\n\n\nvar filtered_search_dropdown_manager_FilteredSearchDropdownManager = function () {\n function FilteredSearchDropdownManager(_ref) {\n var _ref$baseEndpoint = _ref.baseEndpoint,\n baseEndpoint = _ref$baseEndpoint === undefined ? '' : _ref$baseEndpoint,\n tokenizer = _ref.tokenizer,\n page = _ref.page,\n isGroup = _ref.isGroup,\n isGroupAncestor = _ref.isGroupAncestor,\n isGroupDecendent = _ref.isGroupDecendent,\n filteredSearchTokenKeys = _ref.filteredSearchTokenKeys;\n\n filtered_search_dropdown_manager__classCallCheck(this, FilteredSearchDropdownManager);\n\n this.container = container[\"a\" /* default */].container;\n this.baseEndpoint = baseEndpoint.replace(/\\/$/, '');\n this.tokenizer = tokenizer;\n this.filteredSearchTokenKeys = filteredSearchTokenKeys || filtered_search_token_keys[\"a\" /* default */];\n this.filteredSearchInput = this.container.querySelector('.filtered-search');\n this.page = page;\n this.groupsOnly = isGroup;\n this.groupAncestor = isGroupAncestor;\n this.isGroupDecendent = isGroupDecendent;\n\n this.setupMapping();\n\n this.cleanupWrapper = this.cleanup.bind(this);\n document.addEventListener('beforeunload', this.cleanupWrapper);\n }\n\n filtered_search_dropdown_manager__createClass(FilteredSearchDropdownManager, [{\n key: 'cleanup',\n value: function cleanup() {\n if (this.droplab) {\n this.droplab.destroy();\n this.droplab = null;\n }\n\n this.setupMapping();\n\n document.removeEventListener('beforeunload', this.cleanupWrapper);\n }\n }, {\n key: 'setupMapping',\n value: function setupMapping() {\n var supportedTokens = this.filteredSearchTokenKeys.getKeys();\n var allowedMappings = {\n hint: {\n reference: null,\n gl: dropdown_hint,\n element: this.container.querySelector('#js-dropdown-hint')\n }\n };\n var availableMappings = {\n author: {\n reference: null,\n gl: dropdown_user,\n element: this.container.querySelector('#js-dropdown-author')\n },\n assignee: {\n reference: null,\n gl: dropdown_user,\n element: this.container.querySelector('#js-dropdown-assignee')\n },\n milestone: {\n reference: null,\n gl: dropdown_non_user,\n extraArguments: {\n endpoint: this.getMilestoneEndpoint(),\n symbol: '%'\n },\n element: this.container.querySelector('#js-dropdown-milestone')\n },\n label: {\n reference: null,\n gl: dropdown_non_user,\n extraArguments: {\n endpoint: this.getLabelsEndpoint(),\n symbol: '~',\n preprocessing: dropdown_utils[\"a\" /* default */].duplicateLabelPreprocessing\n },\n element: this.container.querySelector('#js-dropdown-label')\n },\n 'my-reaction': {\n reference: null,\n gl: dropdown_emoji,\n element: this.container.querySelector('#js-dropdown-my-reaction')\n }\n };\n\n supportedTokens.forEach(function (type) {\n if (availableMappings[type]) {\n allowedMappings[type] = availableMappings[type];\n }\n });\n\n this.mapping = allowedMappings;\n }\n }, {\n key: 'getMilestoneEndpoint',\n value: function getMilestoneEndpoint() {\n var endpoint = this.baseEndpoint + '/milestones.json';\n\n return endpoint;\n }\n }, {\n key: 'getLabelsEndpoint',\n value: function getLabelsEndpoint() {\n var endpoint = this.baseEndpoint + '/labels.json';\n\n return endpoint;\n }\n }, {\n key: 'updateCurrentDropdownOffset',\n value: function updateCurrentDropdownOffset() {\n this.updateDropdownOffset(this.currentDropdown);\n }\n }, {\n key: 'updateDropdownOffset',\n value: function updateDropdownOffset(key) {\n // Always align dropdown with the input field\n var offset = this.filteredSearchInput.getBoundingClientRect().left - this.container.querySelector('.scroll-container').getBoundingClientRect().left;\n\n var maxInputWidth = 240;\n var currentDropdownWidth = this.mapping[key].element.clientWidth || maxInputWidth;\n\n // Make sure offset never exceeds the input container\n var offsetMaxWidth = this.container.querySelector('.scroll-container').clientWidth - currentDropdownWidth;\n if (offsetMaxWidth < offset) {\n offset = offsetMaxWidth;\n }\n\n this.mapping[key].reference.setOffset(offset);\n }\n }, {\n key: 'load',\n value: function load(key) {\n var firstLoad = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var mappingKey = this.mapping[key];\n var glClass = mappingKey.gl;\n var element = mappingKey.element;\n var forceShowList = false;\n\n if (!mappingKey.reference) {\n var defaultArguments = {\n droplab: this.droplab,\n dropdown: element,\n input: this.filteredSearchInput,\n tokenKeys: this.filteredSearchTokenKeys,\n filter: key\n };\n var extraArguments = mappingKey.extraArguments || {};\n var glArguments = Object.assign({}, defaultArguments, extraArguments);\n\n // Passing glArguments to `new glClass()`\n mappingKey.reference = new (Function.prototype.bind.apply(glClass, [null, glArguments]))();\n }\n\n if (firstLoad) {\n mappingKey.reference.init();\n }\n\n if (this.currentDropdown === 'hint') {\n // Force the dropdown to show if it was clicked from the hint dropdown\n forceShowList = true;\n }\n\n this.updateDropdownOffset(key);\n mappingKey.reference.render(firstLoad, forceShowList);\n\n this.currentDropdown = key;\n }\n }, {\n key: 'loadDropdown',\n value: function loadDropdown() {\n var dropdownName = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n\n var firstLoad = false;\n\n if (!this.droplab) {\n firstLoad = true;\n this.droplab = new drop_lab[\"a\" /* default */]();\n }\n\n var match = this.filteredSearchTokenKeys.searchByKey(dropdownName.toLowerCase());\n var shouldOpenFilterDropdown = match && this.currentDropdown !== match.key && this.mapping[match.key];\n var shouldOpenHintDropdown = !match && this.currentDropdown !== 'hint';\n\n if (shouldOpenFilterDropdown || shouldOpenHintDropdown) {\n var key = match && match.key ? match.key : 'hint';\n this.load(key, firstLoad);\n }\n }\n }, {\n key: 'setDropdown',\n value: function setDropdown() {\n var query = dropdown_utils[\"a\" /* default */].getSearchQuery(true);\n\n var _tokenizer$processTok = this.tokenizer.processTokens(query, this.filteredSearchTokenKeys.getKeys()),\n lastToken = _tokenizer$processTok.lastToken,\n searchToken = _tokenizer$processTok.searchToken;\n\n if (this.currentDropdown) {\n this.updateCurrentDropdownOffset();\n }\n\n if (lastToken === searchToken && lastToken !== null) {\n // Token is not fully initialized yet because it has no value\n // Eg. token = 'label:'\n\n var split = lastToken.split(':');\n var dropdownName = underscore_default.a.last(split[0].split(' '));\n this.loadDropdown(split.length > 1 ? dropdownName : '');\n } else if (lastToken) {\n // Token has been initialized into an object because it has a value\n this.loadDropdown(lastToken.key);\n } else {\n this.loadDropdown('hint');\n }\n }\n }, {\n key: 'resetDropdowns',\n value: function resetDropdowns() {\n if (!this.currentDropdown) {\n return;\n }\n\n // Force current dropdown to hide\n this.mapping[this.currentDropdown].reference.hideDropdown();\n\n // Re-Load dropdown\n this.setDropdown();\n\n // Reset filters for current dropdown\n this.mapping[this.currentDropdown].reference.resetFilters();\n\n // Reposition dropdown so that it is aligned with cursor\n this.updateDropdownOffset(this.currentDropdown);\n }\n }, {\n key: 'destroyDroplab',\n value: function destroyDroplab() {\n this.droplab.destroy();\n }\n }], [{\n key: 'addWordToInput',\n value: function addWordToInput(tokenName) {\n var tokenValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n var clicked = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var input = container[\"a\" /* default */].container.querySelector('.filtered-search');\n\n filtered_search_visual_tokens[\"a\" /* default */].addFilterVisualToken(tokenName, tokenValue);\n input.value = '';\n\n if (clicked) {\n filtered_search_visual_tokens[\"a\" /* default */].moveInputToTheRight();\n }\n }\n }]);\n\n return FilteredSearchDropdownManager;\n}();\n\n/* harmony default export */ var filtered_search_dropdown_manager = __webpack_exports__[\"a\"] = (filtered_search_dropdown_manager_FilteredSearchDropdownManager);\n\n/***/ }),\n\n/***/ \"./filtered_search/filtered_search_token_keys.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\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\nvar tokenKeys = [{\n key: 'author',\n type: 'string',\n param: 'username',\n symbol: '@',\n icon: 'pencil',\n tag: '@author'\n}, {\n key: 'assignee',\n type: 'string',\n param: 'username',\n symbol: '@',\n icon: 'user',\n tag: '@assignee'\n}, {\n key: 'milestone',\n type: 'string',\n param: 'title',\n symbol: '%',\n icon: 'clock-o',\n tag: '%milestone'\n}, {\n key: 'label',\n type: 'array',\n param: 'name[]',\n symbol: '~',\n icon: 'tag',\n tag: '~label'\n}];\n\nif (gon.current_user_id) {\n // Appending tokenkeys only logged-in\n tokenKeys.push({\n key: 'my-reaction',\n type: 'string',\n param: 'emoji',\n symbol: '',\n icon: 'thumbs-up',\n tag: 'emoji'\n });\n}\n\nvar alternativeTokenKeys = [{\n key: 'label',\n type: 'string',\n param: 'name',\n symbol: '~'\n}];\n\nvar tokenKeysWithAlternative = tokenKeys.concat(alternativeTokenKeys);\n\nvar conditions = [{\n url: 'assignee_id=0',\n tokenKey: 'assignee',\n value: 'none'\n}, {\n url: 'milestone_title=No+Milestone',\n tokenKey: 'milestone',\n value: 'none'\n}, {\n url: 'milestone_title=%23upcoming',\n tokenKey: 'milestone',\n value: 'upcoming'\n}, {\n url: 'milestone_title=%23started',\n tokenKey: 'milestone',\n value: 'started'\n}, {\n url: 'label_name[]=No+Label',\n tokenKey: 'label',\n value: 'none'\n}];\n\nvar FilteredSearchTokenKeys = function () {\n function FilteredSearchTokenKeys() {\n _classCallCheck(this, FilteredSearchTokenKeys);\n }\n\n _createClass(FilteredSearchTokenKeys, null, [{\n key: 'get',\n value: function get() {\n return tokenKeys;\n }\n }, {\n key: 'getKeys',\n value: function getKeys() {\n return tokenKeys.map(function (i) {\n return i.key;\n });\n }\n }, {\n key: 'getAlternatives',\n value: function getAlternatives() {\n return alternativeTokenKeys;\n }\n }, {\n key: 'getConditions',\n value: function getConditions() {\n return conditions;\n }\n }, {\n key: 'searchByKey',\n value: function searchByKey(key) {\n return tokenKeys.find(function (tokenKey) {\n return tokenKey.key === key;\n }) || null;\n }\n }, {\n key: 'searchBySymbol',\n value: function searchBySymbol(symbol) {\n return tokenKeys.find(function (tokenKey) {\n return tokenKey.symbol === symbol;\n }) || null;\n }\n }, {\n key: 'searchByKeyParam',\n value: function searchByKeyParam(keyParam) {\n return tokenKeysWithAlternative.find(function (tokenKey) {\n var tokenKeyParam = tokenKey.key;\n\n // Replace hyphen with underscore to compare keyParam with tokenKeyParam\n // e.g. 'my-reaction' => 'my_reaction'\n tokenKeyParam = tokenKeyParam.replace('-', '_');\n\n if (tokenKey.param) {\n tokenKeyParam += '_' + tokenKey.param;\n }\n\n return keyParam === tokenKeyParam;\n }) || null;\n }\n }, {\n key: 'searchByConditionUrl',\n value: function searchByConditionUrl(url) {\n return conditions.find(function (condition) {\n return condition.url === url;\n }) || null;\n }\n }, {\n key: 'searchByConditionKeyValue',\n value: function searchByConditionKeyValue(key, value) {\n return conditions.find(function (condition) {\n return condition.tokenKey === key && condition.value === value;\n }) || null;\n }\n }]);\n\n return FilteredSearchTokenKeys;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (FilteredSearchTokenKeys);\n\n/***/ }),\n\n/***/ \"./filtered_search/filtered_search_tokenizer.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__filtered_search_token_keys__ = __webpack_require__(\"./filtered_search/filtered_search_token_keys.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\nvar FilteredSearchTokenizer = function () {\n function FilteredSearchTokenizer() {\n _classCallCheck(this, FilteredSearchTokenizer);\n }\n\n _createClass(FilteredSearchTokenizer, null, [{\n key: 'processTokens',\n value: function processTokens(input, allowedKeys) {\n // Regex extracts `(token):(symbol)(value)`\n // Values that start with a double quote must end in a double quote (same for single)\n var tokenRegex = new RegExp('(' + allowedKeys.join('|') + '):([~%@]?)(?:(\\'[^\\']*\\'{0,1})|(\"[^\"]*\"{0,1})|(\\\\S+))', 'g');\n var tokens = [];\n var tokenIndexes = []; // stores key+value for simple search\n var lastToken = null;\n var searchToken = input.replace(tokenRegex, function (match, key, symbol, v1, v2, v3) {\n var tokenValue = v1 || v2 || v3;\n var tokenSymbol = symbol;\n var tokenIndex = '';\n\n if (tokenValue === '~' || tokenValue === '%' || tokenValue === '@') {\n tokenSymbol = tokenValue;\n tokenValue = '';\n }\n\n tokenIndex = key + ':' + tokenValue;\n\n // Prevent adding duplicates\n if (tokenIndexes.indexOf(tokenIndex) === -1) {\n tokenIndexes.push(tokenIndex);\n\n tokens.push({\n key: key,\n value: tokenValue || '',\n symbol: tokenSymbol || ''\n });\n }\n\n return '';\n }).replace(/\\s{2,}/g, ' ').trim() || '';\n\n if (tokens.length > 0) {\n var last = tokens[tokens.length - 1];\n var lastString = last.key + ':' + last.symbol + last.value;\n lastToken = input.lastIndexOf(lastString) === input.length - lastString.length ? last : searchToken;\n } else {\n lastToken = searchToken;\n }\n\n return {\n tokens: tokens,\n lastToken: lastToken,\n searchToken: searchToken\n };\n }\n }]);\n\n return FilteredSearchTokenizer;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (FilteredSearchTokenizer);\n\n/***/ }),\n\n/***/ \"./filtered_search/filtered_search_visual_tokens.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n\n// EXTERNAL MODULE: /opt/gitlab/embedded/service/gitlab-rails/node_modules/underscore/underscore.js\nvar underscore = __webpack_require__(\"../../../node_modules/underscore/underscore.js\");\nvar underscore_default = /*#__PURE__*/__webpack_require__.n(underscore);\n\n// EXTERNAL MODULE: ./lib/utils/ajax_cache.js\nvar ajax_cache = __webpack_require__(\"./lib/utils/ajax_cache.js\");\n\n// EXTERNAL MODULE: ./lib/utils/common_utils.js\nvar common_utils = __webpack_require__(\"./lib/utils/common_utils.js\");\n\n// EXTERNAL MODULE: ./flash.js\nvar flash = __webpack_require__(\"./flash.js\");\n\n// EXTERNAL MODULE: ./filtered_search/container.js\nvar container = __webpack_require__(\"./filtered_search/container.js\");\n\n// EXTERNAL MODULE: ./api.js\nvar api = __webpack_require__(\"./api.js\");\n\n// EXTERNAL MODULE: ./lib/utils/cache.js\nvar cache = __webpack_require__(\"./lib/utils/cache.js\");\n\n// CONCATENATED MODULE: ./lib/utils/users_cache.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\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n\n\n\nvar users_cache_UsersCache = function (_Cache) {\n _inherits(UsersCache, _Cache);\n\n function UsersCache() {\n _classCallCheck(this, UsersCache);\n\n return _possibleConstructorReturn(this, (UsersCache.__proto__ || Object.getPrototypeOf(UsersCache)).apply(this, arguments));\n }\n\n _createClass(UsersCache, [{\n key: 'retrieve',\n value: function retrieve(username) {\n var _this2 = this;\n\n if (this.hasData(username)) {\n return Promise.resolve(this.get(username));\n }\n\n return api[\"a\" /* default */].users('', { username: username }).then(function (_ref) {\n var data = _ref.data;\n\n if (!data.length) {\n throw new Error('User \"' + username + '\" could not be found!');\n }\n\n if (data.length > 1) {\n throw new Error('Expected username \"' + username + '\" to be unique!');\n }\n\n var user = data[0];\n _this2.internalStorage[username] = user;\n return user;\n });\n // missing catch is intentional, error handling depends on use case\n }\n }]);\n\n return UsersCache;\n}(cache[\"a\" /* default */]);\n\n/* harmony default export */ var users_cache = (new users_cache_UsersCache());\n// EXTERNAL MODULE: ./filtered_search/dropdown_utils.js\nvar dropdown_utils = __webpack_require__(\"./filtered_search/dropdown_utils.js\");\n\n// CONCATENATED MODULE: ./filtered_search/filtered_search_visual_tokens.js\nvar filtered_search_visual_tokens__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 filtered_search_visual_tokens__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 filtered_search_visual_tokens_FilteredSearchVisualTokens = function () {\n function FilteredSearchVisualTokens() {\n filtered_search_visual_tokens__classCallCheck(this, FilteredSearchVisualTokens);\n }\n\n filtered_search_visual_tokens__createClass(FilteredSearchVisualTokens, null, [{\n key: 'getLastVisualTokenBeforeInput',\n value: function getLastVisualTokenBeforeInput() {\n var inputLi = container[\"a\" /* default */].container.querySelector('.input-token');\n var lastVisualToken = inputLi && inputLi.previousElementSibling;\n\n return {\n lastVisualToken: lastVisualToken,\n isLastVisualTokenValid: lastVisualToken === null || lastVisualToken.className.indexOf('filtered-search-term') !== -1 || lastVisualToken && lastVisualToken.querySelector('.value') !== null\n };\n }\n\n /**\n * Returns a computed API endpoint\n * and query string composed of values from endpointQueryParams\n * @param {String} endpoint\n * @param {String} endpointQueryParams\n */\n\n }, {\n key: 'getEndpointWithQueryParams',\n value: function getEndpointWithQueryParams(endpoint, endpointQueryParams) {\n if (!endpointQueryParams) {\n return endpoint;\n }\n\n var queryString = Object(common_utils[\"y\" /* objectToQueryString */])(JSON.parse(endpointQueryParams));\n return endpoint + '?' + queryString;\n }\n }, {\n key: 'unselectTokens',\n value: function unselectTokens() {\n var otherTokens = container[\"a\" /* default */].container.querySelectorAll('.js-visual-token .selectable.selected');\n [].forEach.call(otherTokens, function (t) {\n return t.classList.remove('selected');\n });\n }\n }, {\n key: 'selectToken',\n value: function selectToken(tokenButton) {\n var forceSelection = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var selected = tokenButton.classList.contains('selected');\n FilteredSearchVisualTokens.unselectTokens();\n\n if (!selected || forceSelection) {\n tokenButton.classList.add('selected');\n }\n }\n }, {\n key: 'removeSelectedToken',\n value: function removeSelectedToken() {\n var selected = container[\"a\" /* default */].container.querySelector('.js-visual-token .selected');\n\n if (selected) {\n var li = selected.closest('.js-visual-token');\n li.parentElement.removeChild(li);\n }\n }\n }, {\n key: 'createVisualTokenElementHTML',\n value: function createVisualTokenElementHTML() {\n var canEdit = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n return '\\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n ';\n }\n }, {\n key: 'setTokenStyle',\n value: function setTokenStyle(tokenContainer, backgroundColor, textColor) {\n var token = tokenContainer;\n\n // Labels with linear gradient should not override default background color\n if (backgroundColor.indexOf('linear-gradient') === -1) {\n token.style.backgroundColor = backgroundColor;\n }\n\n token.style.color = textColor;\n\n if (textColor === '#FFFFFF') {\n var removeToken = token.querySelector('.remove-token');\n removeToken.classList.add('inverted');\n }\n\n return token;\n }\n }, {\n key: 'preprocessLabel',\n value: function preprocessLabel(labelsEndpoint, labels) {\n var processed = labels;\n\n if (!labels.preprocessed) {\n processed = dropdown_utils[\"a\" /* default */].duplicateLabelPreprocessing(labels);\n ajax_cache[\"a\" /* default */].override(labelsEndpoint, processed);\n processed.preprocessed = true;\n }\n\n return processed;\n }\n }, {\n key: 'updateLabelTokenColor',\n value: function updateLabelTokenColor(tokenValueContainer, tokenValue) {\n var filteredSearchInput = container[\"a\" /* default */].container.querySelector('.filtered-search');\n var baseEndpoint = filteredSearchInput.dataset.baseEndpoint;\n var labelsEndpoint = FilteredSearchVisualTokens.getEndpointWithQueryParams(baseEndpoint + '/labels.json', filteredSearchInput.dataset.endpointQueryParams);\n\n return ajax_cache[\"a\" /* default */].retrieve(labelsEndpoint).then(FilteredSearchVisualTokens.preprocessLabel.bind(null, labelsEndpoint)).then(function (labels) {\n var matchingLabel = (labels || []).find(function (label) {\n return '~' + dropdown_utils[\"a\" /* default */].getEscapedText(label.title) === tokenValue;\n });\n\n if (!matchingLabel) {\n return;\n }\n\n FilteredSearchVisualTokens.setTokenStyle(tokenValueContainer, matchingLabel.color, matchingLabel.text_color);\n }).catch(function () {\n return new flash[\"a\" /* default */]('An error occurred while fetching label colors.');\n });\n }\n }, {\n key: 'updateUserTokenAppearance',\n value: function updateUserTokenAppearance(tokenValueContainer, tokenValueElement, tokenValue) {\n if (tokenValue === 'none') {\n return Promise.resolve();\n }\n\n var username = tokenValue.replace(/^@/, '');\n return users_cache.retrieve(username).then(function (user) {\n if (!user) {\n return;\n }\n\n /* eslint-disable no-param-reassign */\n tokenValueContainer.dataset.originalValue = tokenValue;\n tokenValueElement.innerHTML = '\\n \"\"\\n ' + underscore_default.a.escape(user.name) + '\\n ';\n /* eslint-enable no-param-reassign */\n })\n // ignore error and leave username in the search bar\n .catch(function () {});\n }\n }, {\n key: 'updateEmojiTokenAppearance',\n value: function updateEmojiTokenAppearance(tokenValueContainer, tokenValueElement, tokenValue) {\n var container = tokenValueContainer;\n var element = tokenValueElement;\n\n return __webpack_require__.e/* import() */(\"emoji\").then(__webpack_require__.bind(null, \"./emoji/index.js\")).then(function (Emoji) {\n if (!Emoji.isEmojiNameValid(tokenValue)) {\n return;\n }\n\n container.dataset.originalValue = tokenValue;\n element.innerHTML = Emoji.glEmojiTag(tokenValue);\n })\n // ignore error and leave emoji name in the search bar\n .catch(function () {});\n }\n }, {\n key: 'renderVisualTokenValue',\n value: function renderVisualTokenValue(parentElement, tokenName, tokenValue) {\n var tokenValueContainer = parentElement.querySelector('.value-container');\n var tokenValueElement = tokenValueContainer.querySelector('.value');\n tokenValueElement.innerText = tokenValue;\n\n var tokenType = tokenName.toLowerCase();\n if (tokenType === 'label') {\n FilteredSearchVisualTokens.updateLabelTokenColor(tokenValueContainer, tokenValue);\n } else if (tokenType === 'author' || tokenType === 'assignee') {\n FilteredSearchVisualTokens.updateUserTokenAppearance(tokenValueContainer, tokenValueElement, tokenValue);\n } else if (tokenType === 'my-reaction') {\n FilteredSearchVisualTokens.updateEmojiTokenAppearance(tokenValueContainer, tokenValueElement, tokenValue);\n }\n }\n }, {\n key: 'addVisualTokenElement',\n value: function addVisualTokenElement(name, value, isSearchTerm, canEdit) {\n var li = document.createElement('li');\n li.classList.add('js-visual-token');\n li.classList.add(isSearchTerm ? 'filtered-search-term' : 'filtered-search-token');\n\n if (value) {\n li.innerHTML = FilteredSearchVisualTokens.createVisualTokenElementHTML(canEdit);\n FilteredSearchVisualTokens.renderVisualTokenValue(li, name, value);\n } else {\n li.innerHTML = '
    ';\n }\n li.querySelector('.name').innerText = name;\n\n var tokensContainer = container[\"a\" /* default */].container.querySelector('.tokens-container');\n var input = container[\"a\" /* default */].container.querySelector('.filtered-search');\n tokensContainer.insertBefore(li, input.parentElement);\n }\n }, {\n key: 'addValueToPreviousVisualTokenElement',\n value: function addValueToPreviousVisualTokenElement(value) {\n var _FilteredSearchVisual = FilteredSearchVisualTokens.getLastVisualTokenBeforeInput(),\n lastVisualToken = _FilteredSearchVisual.lastVisualToken,\n isLastVisualTokenValid = _FilteredSearchVisual.isLastVisualTokenValid;\n\n if (!isLastVisualTokenValid && lastVisualToken.classList.contains('filtered-search-token')) {\n var name = FilteredSearchVisualTokens.getLastTokenPartial();\n lastVisualToken.innerHTML = FilteredSearchVisualTokens.createVisualTokenElementHTML();\n lastVisualToken.querySelector('.name').innerText = name;\n FilteredSearchVisualTokens.renderVisualTokenValue(lastVisualToken, name, value);\n }\n }\n }, {\n key: 'addFilterVisualToken',\n value: function addFilterVisualToken(tokenName, tokenValue, canEdit) {\n var _FilteredSearchVisual2 = FilteredSearchVisualTokens.getLastVisualTokenBeforeInput(),\n lastVisualToken = _FilteredSearchVisual2.lastVisualToken,\n isLastVisualTokenValid = _FilteredSearchVisual2.isLastVisualTokenValid;\n\n var addVisualTokenElement = FilteredSearchVisualTokens.addVisualTokenElement;\n\n if (isLastVisualTokenValid) {\n addVisualTokenElement(tokenName, tokenValue, false, canEdit);\n } else {\n var previousTokenName = lastVisualToken.querySelector('.name').innerText;\n var tokensContainer = container[\"a\" /* default */].container.querySelector('.tokens-container');\n tokensContainer.removeChild(lastVisualToken);\n\n var value = tokenValue || tokenName;\n addVisualTokenElement(previousTokenName, value, false, canEdit);\n }\n }\n }, {\n key: 'addSearchVisualToken',\n value: function addSearchVisualToken(searchTerm) {\n var _FilteredSearchVisual3 = FilteredSearchVisualTokens.getLastVisualTokenBeforeInput(),\n lastVisualToken = _FilteredSearchVisual3.lastVisualToken;\n\n if (lastVisualToken && lastVisualToken.classList.contains('filtered-search-term')) {\n lastVisualToken.querySelector('.name').innerText += ' ' + searchTerm;\n } else {\n FilteredSearchVisualTokens.addVisualTokenElement(searchTerm, null, true);\n }\n }\n }, {\n key: 'getLastTokenPartial',\n value: function getLastTokenPartial() {\n var _FilteredSearchVisual4 = FilteredSearchVisualTokens.getLastVisualTokenBeforeInput(),\n lastVisualToken = _FilteredSearchVisual4.lastVisualToken;\n\n if (!lastVisualToken) return '';\n\n var valueContainer = lastVisualToken.querySelector('.value-container');\n var originalValue = valueContainer && valueContainer.dataset.originalValue;\n if (originalValue) {\n return originalValue;\n }\n\n var value = lastVisualToken.querySelector('.value');\n var name = lastVisualToken.querySelector('.name');\n\n var valueText = value ? value.innerText : '';\n var nameText = name ? name.innerText : '';\n\n return valueText || nameText;\n }\n }, {\n key: 'removeLastTokenPartial',\n value: function removeLastTokenPartial() {\n var _FilteredSearchVisual5 = FilteredSearchVisualTokens.getLastVisualTokenBeforeInput(),\n lastVisualToken = _FilteredSearchVisual5.lastVisualToken;\n\n if (lastVisualToken) {\n var value = lastVisualToken.querySelector('.value');\n\n if (value) {\n var button = lastVisualToken.querySelector('.selectable');\n var valueContainer = lastVisualToken.querySelector('.value-container');\n button.removeChild(valueContainer);\n lastVisualToken.innerHTML = button.innerHTML;\n } else {\n lastVisualToken.closest('.tokens-container').removeChild(lastVisualToken);\n }\n }\n }\n }, {\n key: 'tokenizeInput',\n value: function tokenizeInput() {\n var input = container[\"a\" /* default */].container.querySelector('.filtered-search');\n\n var _FilteredSearchVisual6 = FilteredSearchVisualTokens.getLastVisualTokenBeforeInput(),\n isLastVisualTokenValid = _FilteredSearchVisual6.isLastVisualTokenValid;\n\n if (input.value) {\n if (isLastVisualTokenValid) {\n FilteredSearchVisualTokens.addSearchVisualToken(input.value);\n } else {\n FilteredSearchVisualTokens.addValueToPreviousVisualTokenElement(input.value);\n }\n\n input.value = '';\n }\n }\n }, {\n key: 'editToken',\n value: function editToken(token) {\n var input = container[\"a\" /* default */].container.querySelector('.filtered-search');\n\n FilteredSearchVisualTokens.tokenizeInput();\n\n // Replace token with input field\n var tokenContainer = token.parentElement;\n var inputLi = input.parentElement;\n tokenContainer.replaceChild(inputLi, token);\n\n var nameElement = token.querySelector('.name');\n var value = void 0;\n\n if (token.classList.contains('filtered-search-token')) {\n FilteredSearchVisualTokens.addFilterVisualToken(nameElement.innerText);\n\n var valueContainerElement = token.querySelector('.value-container');\n value = valueContainerElement.dataset.originalValue;\n\n if (!value) {\n var valueElement = valueContainerElement.querySelector('.value');\n value = valueElement.innerText;\n }\n }\n\n // token is a search term\n if (!value) {\n value = nameElement.innerText;\n }\n\n input.value = value;\n\n // Opens dropdown\n var inputEvent = new Event('input');\n input.dispatchEvent(inputEvent);\n\n // Adds cursor to input\n input.focus();\n }\n }, {\n key: 'moveInputToTheRight',\n value: function moveInputToTheRight() {\n var input = container[\"a\" /* default */].container.querySelector('.filtered-search');\n\n if (!input) return;\n\n var inputLi = input.parentElement;\n var tokenContainer = container[\"a\" /* default */].container.querySelector('.tokens-container');\n\n FilteredSearchVisualTokens.tokenizeInput();\n\n if (!tokenContainer.lastElementChild.isEqualNode(inputLi)) {\n var _FilteredSearchVisual7 = FilteredSearchVisualTokens.getLastVisualTokenBeforeInput(),\n isLastVisualTokenValid = _FilteredSearchVisual7.isLastVisualTokenValid;\n\n if (!isLastVisualTokenValid) {\n var lastPartial = FilteredSearchVisualTokens.getLastTokenPartial();\n FilteredSearchVisualTokens.removeLastTokenPartial();\n FilteredSearchVisualTokens.addSearchVisualToken(lastPartial);\n }\n\n tokenContainer.removeChild(inputLi);\n tokenContainer.appendChild(inputLi);\n }\n }\n }]);\n\n return FilteredSearchVisualTokens;\n}();\n\n/* harmony default export */ var filtered_search_visual_tokens = __webpack_exports__[\"a\"] = (filtered_search_visual_tokens_FilteredSearchVisualTokens);\n\n/***/ }),\n\n/***/ \"./flash.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return createFlash; });\n/* unused harmony export createFlashEl */\n/* unused harmony export createAction */\n/* unused harmony export hideFlash */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return removeFlashClickListener; });\n/* 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\n\nvar hideFlash = function hideFlash(flashEl) {\n var fadeTransition = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n if (fadeTransition) {\n Object.assign(flashEl.style, {\n transition: 'opacity .3s',\n opacity: '0'\n });\n }\n\n flashEl.addEventListener('transitionend', function () {\n flashEl.remove();\n if (document.body.classList.contains('flash-shown')) document.body.classList.remove('flash-shown');\n }, {\n once: true,\n passive: true\n });\n\n if (!fadeTransition) flashEl.dispatchEvent(new Event('transitionend'));\n};\n\nvar createAction = function createAction(config) {\n return '\\n \\n ' + __WEBPACK_IMPORTED_MODULE_0_underscore___default.a.escape(config.title) + '\\n \\n';\n};\n\nvar createFlashEl = function createFlashEl(message, type) {\n var isInContentWrapper = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n return '\\n \\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 = '
  • /${name}';\n if (value.aliases.length > 0) {\n tpl += ' (or /<%- aliases.join(\", /\") %>)';\n }\n if (value.params.length > 0) {\n tpl += ' <%- params.join(\" \") %>';\n }\n if (value.description !== '') {\n tpl += '<%- description %>';\n }\n tpl += '
  • ';\n return __WEBPACK_IMPORTED_MODULE_0_underscore___default.a.template(tpl)(value);\n },\n insertTpl: function insertTpl(value) {\n // eslint-disable-next-line no-template-curly-in-string\n var tpl = '/${name} ';\n var referencePrefix = null;\n if (value.params.length > 0) {\n referencePrefix = value.params[0][0];\n if (/^[@%~]/.test(referencePrefix)) {\n tpl += '<%- referencePrefix %>';\n }\n }\n return __WEBPACK_IMPORTED_MODULE_0_underscore___default.a.template(tpl)({ referencePrefix: referencePrefix });\n },\n\n suffix: '',\n callbacks: _extends({}, this.getDefaultCallbacks(), {\n beforeSave: function beforeSave(commands) {\n if (GfmAutoComplete.isLoading(commands)) return commands;\n return $.map(commands, function (c) {\n var search = c.name;\n if (c.aliases.length > 0) {\n search = search + ' ' + c.aliases.join(' ');\n }\n return {\n name: c.name,\n aliases: c.aliases,\n params: c.params,\n description: c.description,\n search: search\n };\n });\n },\n matcher: function matcher(flag, subtext) {\n var regexp = /(?:^|\\n)\\/([A-Za-z_]*)$/gi;\n var match = regexp.exec(subtext);\n if (match) {\n return match[1];\n }\n return null;\n }\n })\n });\n }\n }, {\n key: 'setupEmoji',\n value: function setupEmoji($input) {\n // Emoji\n $input.atwho({\n at: ':',\n displayTpl: function displayTpl(value) {\n var tmpl = GfmAutoComplete.Loading.template;\n if (value && value.name) {\n tmpl = GfmAutoComplete.Emoji.templateFunction(value.name);\n }\n return tmpl;\n },\n\n // eslint-disable-next-line no-template-curly-in-string\n insertTpl: ':${name}:',\n skipSpecialCharacterTest: true,\n data: GfmAutoComplete.defaultLoadingData,\n callbacks: _extends({}, this.getDefaultCallbacks(), {\n matcher: function matcher(flag, subtext) {\n var relevantText = subtext.trim().split(/\\s/).pop();\n var regexp = new RegExp('(?:[^' + __WEBPACK_IMPORTED_MODULE_1__lib_utils_regexp__[\"a\" /* default */].unicodeLetters + '0-9:]|\\n|^):([^:]*)$', 'gi');\n var match = regexp.exec(relevantText);\n\n return match && match.length ? match[1] : null;\n }\n })\n });\n }\n }, {\n key: 'setupMembers',\n value: function setupMembers($input) {\n // Team Members\n $input.atwho({\n at: '@',\n displayTpl: function displayTpl(value) {\n var tmpl = GfmAutoComplete.Loading.template;\n if (value.username != null) {\n tmpl = GfmAutoComplete.Members.template;\n }\n return tmpl;\n },\n\n // eslint-disable-next-line no-template-curly-in-string\n insertTpl: '${atwho-at}${username}',\n searchKey: 'search',\n alwaysHighlightFirst: true,\n skipSpecialCharacterTest: true,\n data: GfmAutoComplete.defaultLoadingData,\n callbacks: _extends({}, this.getDefaultCallbacks(), {\n beforeSave: function beforeSave(members) {\n return $.map(members, function (m) {\n var title = '';\n if (m.username == null) {\n return m;\n }\n title = m.name;\n if (m.count) {\n title += ' (' + m.count + ')';\n }\n\n var autoCompleteAvatar = m.avatar_url || m.username.charAt(0).toUpperCase();\n var imgAvatar = '\"'';\n var txtAvatar = '
    ' + autoCompleteAvatar + '
    ';\n\n return {\n username: m.username,\n avatarTag: autoCompleteAvatar.length === 1 ? txtAvatar : imgAvatar,\n title: sanitize(title),\n search: sanitize(m.username + ' ' + m.name)\n };\n });\n }\n })\n });\n }\n }, {\n key: 'setupIssues',\n value: function setupIssues($input) {\n $input.atwho({\n at: '#',\n alias: 'issues',\n searchKey: 'search',\n displayTpl: function displayTpl(value) {\n var tmpl = GfmAutoComplete.Loading.template;\n if (value.title != null) {\n tmpl = GfmAutoComplete.Issues.template;\n }\n return tmpl;\n },\n\n data: GfmAutoComplete.defaultLoadingData,\n // eslint-disable-next-line no-template-curly-in-string\n insertTpl: '${atwho-at}${id}',\n callbacks: _extends({}, this.getDefaultCallbacks(), {\n beforeSave: function beforeSave(issues) {\n return $.map(issues, function (i) {\n if (i.title == null) {\n return i;\n }\n return {\n id: i.iid,\n title: sanitize(i.title),\n search: i.iid + ' ' + i.title\n };\n });\n }\n })\n });\n }\n }, {\n key: 'setupMilestones',\n value: function setupMilestones($input) {\n $input.atwho({\n at: '%',\n alias: 'milestones',\n searchKey: 'search',\n // eslint-disable-next-line no-template-curly-in-string\n insertTpl: '${atwho-at}${title}',\n displayTpl: function displayTpl(value) {\n var tmpl = GfmAutoComplete.Loading.template;\n if (value.title != null) {\n tmpl = GfmAutoComplete.Milestones.template;\n }\n return tmpl;\n },\n\n data: GfmAutoComplete.defaultLoadingData,\n callbacks: _extends({}, this.getDefaultCallbacks(), {\n beforeSave: function beforeSave(milestones) {\n return $.map(milestones, function (m) {\n if (m.title == null) {\n return m;\n }\n return {\n id: m.iid,\n title: sanitize(m.title),\n search: m.title\n };\n });\n }\n })\n });\n }\n }, {\n key: 'setupMergeRequests',\n value: function setupMergeRequests($input) {\n $input.atwho({\n at: '!',\n alias: 'mergerequests',\n searchKey: 'search',\n displayTpl: function displayTpl(value) {\n var tmpl = GfmAutoComplete.Loading.template;\n if (value.title != null) {\n tmpl = GfmAutoComplete.Issues.template;\n }\n return tmpl;\n },\n\n data: GfmAutoComplete.defaultLoadingData,\n // eslint-disable-next-line no-template-curly-in-string\n insertTpl: '${atwho-at}${id}',\n callbacks: _extends({}, this.getDefaultCallbacks(), {\n beforeSave: function beforeSave(merges) {\n return $.map(merges, function (m) {\n if (m.title == null) {\n return m;\n }\n return {\n id: m.iid,\n title: sanitize(m.title),\n search: m.iid + ' ' + m.title\n };\n });\n }\n })\n });\n }\n }, {\n key: 'setupLabels',\n value: function setupLabels($input) {\n var fetchData = this.fetchData.bind(this);\n var LABEL_COMMAND = { LABEL: '/label', UNLABEL: '/unlabel', RELABEL: '/relabel' };\n var command = '';\n\n $input.atwho({\n at: '~',\n alias: 'labels',\n searchKey: 'search',\n data: GfmAutoComplete.defaultLoadingData,\n displayTpl: function displayTpl(value) {\n var tmpl = GfmAutoComplete.Labels.template;\n if (GfmAutoComplete.isLoading(value)) {\n tmpl = GfmAutoComplete.Loading.template;\n }\n return tmpl;\n },\n\n // eslint-disable-next-line no-template-curly-in-string\n insertTpl: '${atwho-at}${title}',\n callbacks: _extends({}, this.getDefaultCallbacks(), {\n beforeSave: function beforeSave(merges) {\n if (GfmAutoComplete.isLoading(merges)) return merges;\n return $.map(merges, function (m) {\n return {\n title: sanitize(m.title),\n color: m.color,\n search: m.title,\n set: m.set\n };\n });\n },\n matcher: function matcher(flag, subtext) {\n var match = GfmAutoComplete.defaultMatcher(flag, subtext, this.app.controllers);\n var subtextNodes = subtext.split(/\\n+/g).pop().split(GfmAutoComplete.regexSubtext);\n\n // Check if ~ is followed by '/label', '/relabel' or '/unlabel' commands.\n command = subtextNodes.find(function (node) {\n if (node === LABEL_COMMAND.LABEL || node === LABEL_COMMAND.RELABEL || node === LABEL_COMMAND.UNLABEL) {\n return node;\n }\n return null;\n });\n\n return match && match.length ? match[1] : null;\n },\n filter: function filter(query, data, searchKey) {\n if (GfmAutoComplete.isLoading(data)) {\n fetchData(this.$inputor, this.at);\n return data;\n }\n\n if (data === GfmAutoComplete.defaultLoadingData) {\n return $.fn.atwho.default.callbacks.filter(query, data, searchKey);\n }\n\n // The `LABEL_COMMAND.RELABEL` is intentionally skipped\n // because we want to return all the labels (unfiltered) for that command.\n if (command === LABEL_COMMAND.LABEL) {\n // Return labels with set: undefined.\n return data.filter(function (label) {\n return !label.set;\n });\n } else if (command === LABEL_COMMAND.UNLABEL) {\n // Return labels with set: true.\n return data.filter(function (label) {\n return label.set;\n });\n }\n\n return data;\n }\n })\n });\n }\n }, {\n key: 'getDefaultCallbacks',\n value: function getDefaultCallbacks() {\n var fetchData = this.fetchData.bind(this);\n\n return {\n sorter: function sorter(query, items, searchKey) {\n this.setting.highlightFirst = this.setting.alwaysHighlightFirst || query.length > 0;\n if (GfmAutoComplete.isLoading(items)) {\n this.setting.highlightFirst = false;\n return items;\n }\n return $.fn.atwho.default.callbacks.sorter(query, items, searchKey);\n },\n filter: function filter(query, data, searchKey) {\n if (GfmAutoComplete.isLoading(data)) {\n fetchData(this.$inputor, this.at);\n return data;\n }\n return $.fn.atwho.default.callbacks.filter(query, data, searchKey);\n },\n beforeInsert: function beforeInsert(value) {\n var resultantValue = value;\n if (value && !this.setting.skipSpecialCharacterTest) {\n var withoutAt = value.substring(1);\n var regex = value.charAt() === '~' ? /\\W|^\\d+$/ : /\\W/;\n if (withoutAt && regex.test(withoutAt)) {\n resultantValue = value.charAt() + '\"' + withoutAt + '\"';\n }\n }\n return resultantValue;\n },\n matcher: function matcher(flag, subtext) {\n var match = GfmAutoComplete.defaultMatcher(flag, subtext, this.app.controllers);\n\n if (match) {\n return match[1];\n }\n return null;\n }\n };\n }\n }, {\n key: 'fetchData',\n value: function fetchData($input, at) {\n var _this2 = this;\n\n if (this.isLoadingData[at]) return;\n this.isLoadingData[at] = true;\n if (this.cachedData[at]) {\n this.loadData($input, at, this.cachedData[at]);\n } else if (GfmAutoComplete.atTypeMap[at] === 'emojis') {\n __webpack_require__.e/* import() */(\"emoji\").then(__webpack_require__.bind(null, \"./emoji/index.js\")).then(function (_ref) {\n var validEmojiNames = _ref.validEmojiNames,\n glEmojiTag = _ref.glEmojiTag;\n\n _this2.loadData($input, at, validEmojiNames);\n GfmAutoComplete.glEmojiTag = glEmojiTag;\n }).catch(function () {\n _this2.isLoadingData[at] = false;\n });\n } else {\n __WEBPACK_IMPORTED_MODULE_2__lib_utils_ajax_cache__[\"a\" /* default */].retrieve(this.dataSources[GfmAutoComplete.atTypeMap[at]], true).then(function (data) {\n _this2.loadData($input, at, data);\n }).catch(function () {\n _this2.isLoadingData[at] = false;\n });\n }\n }\n }, {\n key: 'loadData',\n value: function loadData($input, at, data) {\n this.isLoadingData[at] = false;\n this.cachedData[at] = data;\n $input.atwho('load', at, data);\n // This trigger at.js again\n // otherwise we would be stuck with loading until the user types\n return $input.trigger('keyup');\n }\n }, {\n key: 'clearCache',\n value: function clearCache() {\n this.cachedData = {};\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this.input.each(function (i, input) {\n var $input = $(input);\n $input.atwho('destroy');\n });\n }\n }], [{\n key: 'isLoading',\n value: function isLoading(data) {\n var dataToInspect = data;\n if (data && data.length > 0) {\n dataToInspect = data[0];\n }\n\n var loadingState = GfmAutoComplete.defaultLoadingData[0];\n return dataToInspect && (dataToInspect === loadingState || dataToInspect.name === loadingState);\n }\n }, {\n key: 'defaultMatcher',\n value: function defaultMatcher(flag, subtext, controllers) {\n // The below is taken from At.js source\n // Tweaked to commands to start without a space only if char before is a non-word character\n // https://github.com/ichord/At.js\n var atSymbolsWithBar = Object.keys(controllers).join('|');\n var atSymbolsWithoutBar = Object.keys(controllers).join('');\n var targetSubtext = subtext.split(GfmAutoComplete.regexSubtext).pop();\n var resultantFlag = flag.replace(/[-[\\]/{}()*+?.\\\\^$|]/g, '\\\\$&');\n\n var accentAChar = decodeURI('%C3%80');\n var accentYChar = decodeURI('%C3%BF');\n\n var regexp = new RegExp('^(?:\\\\B|[^a-zA-Z0-9_`' + atSymbolsWithoutBar + ']|\\\\s)' + resultantFlag + '(?!' + atSymbolsWithBar + ')((?:[A-Za-z' + accentAChar + '-' + accentYChar + '0-9_\\'.+-]|[^\\\\x00-\\\\x7a])*)$', 'gi');\n\n return regexp.exec(targetSubtext);\n }\n }]);\n\n return GfmAutoComplete;\n}();\n\nGfmAutoComplete.regexSubtext = new RegExp(/\\s+/g);\n\nGfmAutoComplete.defaultLoadingData = ['loading'];\n\nGfmAutoComplete.atTypeMap = {\n ':': 'emojis',\n '@': 'members',\n '#': 'issues',\n '!': 'mergeRequests',\n '~': 'labels',\n '%': 'milestones',\n '/': 'commands'\n};\n\n// Emoji\nGfmAutoComplete.glEmojiTag = null;\nGfmAutoComplete.Emoji = {\n templateFunction: function templateFunction(name) {\n // glEmojiTag helper is loaded on-demand in fetchData()\n if (GfmAutoComplete.glEmojiTag) {\n return '
  • ' + name + ' ' + GfmAutoComplete.glEmojiTag(name) + '
  • ';\n }\n return '
  • ' + name + '
  • ';\n }\n};\n// Team Members\nGfmAutoComplete.Members = {\n // eslint-disable-next-line no-template-curly-in-string\n template: '
  • ${avatarTag} ${username} ${title}
  • '\n};\nGfmAutoComplete.Labels = {\n // eslint-disable-next-line no-template-curly-in-string\n template: '
  • ${title}
  • '\n};\n// Issues and MergeRequests\nGfmAutoComplete.Issues = {\n // eslint-disable-next-line no-template-curly-in-string\n template: '
  • ${id} ${title}
  • '\n};\n// Milestones\nGfmAutoComplete.Milestones = {\n // eslint-disable-next-line no-template-curly-in-string\n template: '
  • ${title}
  • '\n};\nGfmAutoComplete.Loading = {\n template: '
  • Loading...
  • '\n};\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (GfmAutoComplete);\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\n\n/***/ }),\n\n/***/ \"./gl_dropdown.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($, jQuery) {/* 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_fuzzaldrin_plus__ = __webpack_require__(\"../../../node_modules/fuzzaldrin-plus/lib/fuzzaldrin.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_fuzzaldrin_plus___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_fuzzaldrin_plus__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__lib_utils_axios_utils__ = __webpack_require__(\"./lib/utils/axios_utils.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__lib_utils_url_utility__ = __webpack_require__(\"./lib/utils/url_utility.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__lib_utils_type_utility__ = __webpack_require__(\"./lib/utils/type_utility.js\");\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/* eslint-disable func-names, no-underscore-dangle, space-before-function-paren, no-var, one-var, one-var-declaration-per-line, prefer-rest-params, max-len, vars-on-top, wrap-iife, no-unused-vars, quotes, no-shadow, no-cond-assign, prefer-arrow-callback, no-return-assign, no-else-return, camelcase, comma-dangle, no-lonely-if, guard-for-in, no-restricted-syntax, consistent-return, prefer-template, no-param-reassign, no-loop-func, no-mixed-operators */\n/* global fuzzaldrinPlus */\n\n\n\n\n\n\nvar GitLabDropdown, GitLabDropdownFilter, GitLabDropdownRemote, GitLabDropdownInput;\n\nGitLabDropdownInput = function () {\n function GitLabDropdownInput(input, options) {\n var $inputContainer, $clearButton;\n var _this = this;\n this.input = input;\n this.options = options;\n this.fieldName = this.options.fieldName || 'field-name';\n $inputContainer = this.input.parent();\n $clearButton = $inputContainer.find('.js-dropdown-input-clear');\n $clearButton.on('click', function (_this) {\n // Clear click\n return function (e) {\n e.preventDefault();\n e.stopPropagation();\n return _this.input.val('').trigger('input').focus();\n };\n }(this));\n\n this.input.on('keydown', function (e) {\n var keyCode = e.which;\n if (keyCode === 13 && !options.elIsInput) {\n e.preventDefault();\n }\n }).on('input', function (e) {\n var val = e.currentTarget.value || _this.options.inputFieldName;\n val = val.split(' ').join('-') // replaces space with dash\n .replace(/[^a-zA-Z0-9 -]/g, '').toLowerCase() // replace non alphanumeric\n .replace(/(-)\\1+/g, '-'); // replace repeated dashes\n _this.cb(_this.options.fieldName, val, {}, true);\n _this.input.closest('.dropdown').find('.dropdown-toggle-text').text(val);\n });\n }\n\n GitLabDropdownInput.prototype.onInput = function (cb) {\n this.cb = cb;\n };\n\n return GitLabDropdownInput;\n}();\n\nGitLabDropdownFilter = function () {\n var ARROW_KEY_CODES, BLUR_KEYCODES, HAS_VALUE_CLASS;\n\n BLUR_KEYCODES = [27, 40];\n\n ARROW_KEY_CODES = [38, 40];\n\n HAS_VALUE_CLASS = \"has-value\";\n\n function GitLabDropdownFilter(input, options) {\n var $clearButton, $inputContainer, ref, timeout;\n this.input = input;\n this.options = options;\n this.filterInputBlur = (ref = this.options.filterInputBlur) != null ? ref : true;\n $inputContainer = this.input.parent();\n $clearButton = $inputContainer.find('.js-dropdown-input-clear');\n $clearButton.on('click', function (_this) {\n // Clear click\n return function (e) {\n e.preventDefault();\n e.stopPropagation();\n return _this.input.val('').trigger('input').focus();\n };\n }(this));\n // Key events\n timeout = \"\";\n this.input.on('keydown', function (e) {\n var keyCode = e.which;\n if (keyCode === 13 && !options.elIsInput) {\n e.preventDefault();\n }\n }).on('input', function () {\n if (this.input.val() !== \"\" && !$inputContainer.hasClass(HAS_VALUE_CLASS)) {\n $inputContainer.addClass(HAS_VALUE_CLASS);\n } else if (this.input.val() === \"\" && $inputContainer.hasClass(HAS_VALUE_CLASS)) {\n $inputContainer.removeClass(HAS_VALUE_CLASS);\n }\n // Only filter asynchronously only if option remote is set\n if (this.options.remote) {\n clearTimeout(timeout);\n return timeout = setTimeout(function () {\n $inputContainer.parent().addClass('is-loading');\n\n return this.options.query(this.input.val(), function (data) {\n $inputContainer.parent().removeClass('is-loading');\n return this.options.callback(data);\n }.bind(this));\n }.bind(this), 250);\n } else {\n return this.filter(this.input.val());\n }\n }.bind(this));\n }\n\n GitLabDropdownFilter.prototype.shouldBlur = function (keyCode) {\n return BLUR_KEYCODES.indexOf(keyCode) !== -1;\n };\n\n GitLabDropdownFilter.prototype.filter = function (search_text) {\n var data, elements, group, key, results, tmp;\n if (this.options.onFilter) {\n this.options.onFilter(search_text);\n }\n data = this.options.data();\n if (data != null && !this.options.filterByText) {\n results = data;\n if (search_text !== '') {\n // When data is an array of objects therefore [object Array] e.g.\n // [\n // { prop: 'foo' },\n // { prop: 'baz' }\n // ]\n if (__WEBPACK_IMPORTED_MODULE_0_underscore___default.a.isArray(data)) {\n results = __WEBPACK_IMPORTED_MODULE_1_fuzzaldrin_plus___default.a.filter(data, search_text, {\n key: this.options.keys\n });\n } else {\n // If data is grouped therefore an [object Object]. e.g.\n // {\n // groupName1: [\n // { prop: 'foo' },\n // { prop: 'baz' }\n // ],\n // groupName2: [\n // { prop: 'abc' },\n // { prop: 'def' }\n // ]\n // }\n if (Object(__WEBPACK_IMPORTED_MODULE_4__lib_utils_type_utility__[\"a\" /* isObject */])(data)) {\n results = {};\n for (key in data) {\n group = data[key];\n tmp = __WEBPACK_IMPORTED_MODULE_1_fuzzaldrin_plus___default.a.filter(group, search_text, {\n key: this.options.keys\n });\n if (tmp.length) {\n results[key] = tmp.map(function (item) {\n return item;\n });\n }\n }\n }\n }\n }\n return this.options.callback(results);\n } else {\n elements = this.options.elements();\n if (search_text) {\n elements.each(function () {\n var $el, matches;\n $el = $(this);\n matches = __WEBPACK_IMPORTED_MODULE_1_fuzzaldrin_plus___default.a.match($el.text().trim(), search_text);\n if (!$el.is('.dropdown-header')) {\n if (matches.length) {\n return $el.show().removeClass('option-hidden');\n } else {\n return $el.hide().addClass('option-hidden');\n }\n }\n });\n } else {\n elements.show().removeClass('option-hidden');\n }\n\n elements.parent().find('.dropdown-menu-empty-item').toggleClass('hidden', elements.is(':visible'));\n }\n };\n\n return GitLabDropdownFilter;\n}();\n\nGitLabDropdownRemote = function () {\n function GitLabDropdownRemote(dataEndpoint, options) {\n this.dataEndpoint = dataEndpoint;\n this.options = options;\n }\n\n GitLabDropdownRemote.prototype.execute = function () {\n if (typeof this.dataEndpoint === \"string\") {\n return this.fetchData();\n } else if (typeof this.dataEndpoint === \"function\") {\n if (this.options.beforeSend) {\n this.options.beforeSend();\n }\n return this.dataEndpoint(\"\", function (_this) {\n // Fetch the data by calling the data funcfion\n return function (data) {\n if (_this.options.success) {\n _this.options.success(data);\n }\n if (_this.options.beforeSend) {\n return _this.options.beforeSend();\n }\n };\n }(this));\n }\n };\n\n GitLabDropdownRemote.prototype.fetchData = function () {\n var _this2 = this;\n\n if (this.options.beforeSend) {\n this.options.beforeSend();\n }\n\n // Fetch the data through ajax if the data is a string\n return __WEBPACK_IMPORTED_MODULE_2__lib_utils_axios_utils__[\"a\" /* default */].get(this.dataEndpoint).then(function (_ref) {\n var data = _ref.data;\n\n if (_this2.options.success) {\n return _this2.options.success(data);\n }\n });\n };\n\n return GitLabDropdownRemote;\n}();\n\nGitLabDropdown = function () {\n var ACTIVE_CLASS, FILTER_INPUT, NO_FILTER_INPUT, INDETERMINATE_CLASS, LOADING_CLASS, PAGE_TWO_CLASS, NON_SELECTABLE_CLASSES, SELECTABLE_CLASSES, CURSOR_SELECT_SCROLL_PADDING, currentIndex;\n\n LOADING_CLASS = \"is-loading\";\n\n PAGE_TWO_CLASS = \"is-page-two\";\n\n ACTIVE_CLASS = \"is-active\";\n\n INDETERMINATE_CLASS = \"is-indeterminate\";\n\n currentIndex = -1;\n\n NON_SELECTABLE_CLASSES = '.divider, .separator, .dropdown-header, .dropdown-menu-empty-item';\n\n SELECTABLE_CLASSES = \".dropdown-content li:not(\" + NON_SELECTABLE_CLASSES + \", .option-hidden)\";\n\n CURSOR_SELECT_SCROLL_PADDING = 5;\n\n FILTER_INPUT = '.dropdown-input .dropdown-input-field:not(.dropdown-no-filter)';\n\n NO_FILTER_INPUT = '.dropdown-input .dropdown-input-field.dropdown-no-filter';\n\n function GitLabDropdown(el1, options) {\n var searchFields, selector, self;\n this.el = el1;\n this.options = options;\n this.updateLabel = this.updateLabel.bind(this);\n this.hidden = this.hidden.bind(this);\n this.opened = this.opened.bind(this);\n this.shouldPropagate = this.shouldPropagate.bind(this);\n self = this;\n selector = $(this.el).data(\"target\");\n this.dropdown = selector != null ? $(selector) : $(this.el).parent();\n // Set Defaults\n this.filterInput = this.options.filterInput || this.getElement(FILTER_INPUT);\n this.noFilterInput = this.options.noFilterInput || this.getElement(NO_FILTER_INPUT);\n this.highlight = !!this.options.highlight;\n this.filterInputBlur = this.options.filterInputBlur != null ? this.options.filterInputBlur : true;\n // If no input is passed create a default one\n self = this;\n // If selector was passed\n if (__WEBPACK_IMPORTED_MODULE_0_underscore___default.a.isString(this.filterInput)) {\n this.filterInput = this.getElement(this.filterInput);\n }\n searchFields = this.options.search ? this.options.search.fields : [];\n if (this.options.data) {\n // If we provided data\n // data could be an array of objects or a group of arrays\n if (__WEBPACK_IMPORTED_MODULE_0_underscore___default.a.isObject(this.options.data) && !__WEBPACK_IMPORTED_MODULE_0_underscore___default.a.isFunction(this.options.data)) {\n this.fullData = this.options.data;\n currentIndex = -1;\n this.parseData(this.options.data);\n this.focusTextInput();\n } else {\n this.remote = new GitLabDropdownRemote(this.options.data, {\n dataType: this.options.dataType,\n beforeSend: this.toggleLoading.bind(this),\n success: function (_this) {\n return function (data) {\n _this.fullData = data;\n _this.parseData(_this.fullData);\n _this.focusTextInput();\n if (_this.options.filterable && _this.filter && _this.filter.input && _this.filter.input.val() && _this.filter.input.val().trim() !== '') {\n return _this.filter.input.trigger('input');\n }\n };\n // Remote data\n }(this),\n instance: this\n });\n }\n }\n if (this.noFilterInput.length) {\n this.plainInput = new GitLabDropdownInput(this.noFilterInput, this.options);\n this.plainInput.onInput(this.addInput.bind(this));\n }\n // Init filterable\n if (this.options.filterable) {\n this.filter = new GitLabDropdownFilter(this.filterInput, {\n elIsInput: $(this.el).is('input'),\n filterInputBlur: this.filterInputBlur,\n filterByText: this.options.filterByText,\n onFilter: this.options.onFilter,\n remote: this.options.filterRemote,\n query: this.options.data,\n keys: searchFields,\n instance: this,\n elements: function (_this) {\n return function () {\n selector = '.dropdown-content li:not(' + NON_SELECTABLE_CLASSES + ')';\n if (_this.dropdown.find('.dropdown-toggle-page').length) {\n selector = \".dropdown-page-one \" + selector;\n }\n return $(selector, this.instance.dropdown);\n };\n }(this),\n data: function (_this) {\n return function () {\n return _this.fullData;\n };\n }(this),\n callback: function (_this) {\n return function (data) {\n _this.parseData(data);\n if (_this.filterInput.val() !== '') {\n selector = SELECTABLE_CLASSES;\n if (_this.dropdown.find('.dropdown-toggle-page').length) {\n selector = \".dropdown-page-one \" + selector;\n }\n if ($(_this.el).is('input')) {\n currentIndex = -1;\n } else {\n $(selector, _this.dropdown).first().find('a').addClass('is-focused');\n currentIndex = 0;\n }\n }\n };\n }(this)\n });\n }\n // Event listeners\n this.dropdown.on(\"shown.bs.dropdown\", this.opened);\n this.dropdown.on(\"hidden.bs.dropdown\", this.hidden);\n $(this.el).on(\"update.label\", this.updateLabel);\n this.dropdown.on(\"click\", \".dropdown-menu, .dropdown-menu-close\", this.shouldPropagate);\n this.dropdown.on('keyup', function (_this) {\n return function (e) {\n // Escape key\n if (e.which === 27) {\n return $('.dropdown-menu-close', _this.dropdown).trigger('click');\n }\n };\n }(this));\n this.dropdown.on('blur', 'a', function (_this) {\n return function (e) {\n var $dropdownMenu, $relatedTarget;\n if (e.relatedTarget != null) {\n $relatedTarget = $(e.relatedTarget);\n $dropdownMenu = $relatedTarget.closest('.dropdown-menu');\n if ($dropdownMenu.length === 0) {\n return _this.dropdown.removeClass('open');\n }\n }\n };\n }(this));\n if (this.dropdown.find(\".dropdown-toggle-page\").length) {\n this.dropdown.find(\".dropdown-toggle-page, .dropdown-menu-back\").on(\"click\", function (_this) {\n return function (e) {\n e.preventDefault();\n e.stopPropagation();\n return _this.togglePage();\n };\n }(this));\n }\n if (this.options.selectable) {\n selector = \".dropdown-content a\";\n if (this.dropdown.find(\".dropdown-toggle-page\").length) {\n selector = \".dropdown-page-one .dropdown-content a\";\n }\n this.dropdown.on(\"click\", selector, function (e) {\n var $el, selected, selectedObj, isMarking;\n $el = $(e.currentTarget);\n selected = self.rowClicked($el);\n selectedObj = selected ? selected[0] : null;\n isMarking = selected ? selected[1] : null;\n if (this.options.clicked) {\n this.options.clicked.call(this, {\n selectedObj: selectedObj,\n $el: $el,\n e: e,\n isMarking: isMarking\n });\n }\n\n // Update label right after all modifications in dropdown has been done\n if (this.options.toggleLabel) {\n this.updateLabel(selectedObj, $el, this);\n }\n\n $el.trigger('blur');\n }.bind(this));\n }\n }\n\n // Finds an element inside wrapper element\n GitLabDropdown.prototype.getElement = function (selector) {\n return this.dropdown.find(selector);\n };\n\n GitLabDropdown.prototype.toggleLoading = function () {\n return $('.dropdown-menu', this.dropdown).toggleClass(LOADING_CLASS);\n };\n\n GitLabDropdown.prototype.togglePage = function () {\n var menu;\n menu = $('.dropdown-menu', this.dropdown);\n if (menu.hasClass(PAGE_TWO_CLASS)) {\n if (this.remote) {\n this.remote.execute();\n }\n }\n menu.toggleClass(PAGE_TWO_CLASS);\n // Focus first visible input on active page\n return this.dropdown.find('[class^=\"dropdown-page-\"]:visible :text:visible:first').focus();\n };\n\n GitLabDropdown.prototype.parseData = function (data) {\n var full_html, groupData, html, name;\n this.renderedData = data;\n if (this.options.filterable && data.length === 0) {\n // render no matching results\n html = [this.noResults()];\n } else {\n // Handle array groups\n if (Object(__WEBPACK_IMPORTED_MODULE_4__lib_utils_type_utility__[\"a\" /* isObject */])(data)) {\n html = [];\n for (name in data) {\n groupData = data[name];\n html.push(this.renderItem({\n header: name\n // Add header for each group\n }, name));\n this.renderData(groupData, name).map(function (item) {\n return html.push(item);\n });\n }\n } else {\n // Render each row\n html = this.renderData(data);\n }\n }\n // Render the full menu\n full_html = this.renderMenu(html);\n return this.appendMenu(full_html);\n };\n\n GitLabDropdown.prototype.renderData = function (data, group) {\n if (group == null) {\n group = false;\n }\n return data.map(function (_this) {\n return function (obj, index) {\n return _this.renderItem(obj, group, index);\n };\n }(this));\n };\n\n GitLabDropdown.prototype.shouldPropagate = function (e) {\n var $target;\n if (this.options.multiSelect || this.options.shouldPropagate === false) {\n $target = $(e.target);\n if ($target && !$target.hasClass('dropdown-menu-close') && !$target.hasClass('dropdown-menu-close-icon') && !$target.data('isLink')) {\n e.stopPropagation();\n return false;\n } else {\n return true;\n }\n }\n };\n\n GitLabDropdown.prototype.filteredFullData = function () {\n return this.fullData.filter(function (r) {\n return (typeof r === 'undefined' ? 'undefined' : _typeof(r)) === 'object' && !Object.prototype.hasOwnProperty.call(r, 'beforeDivider') && !Object.prototype.hasOwnProperty.call(r, 'header');\n });\n };\n\n GitLabDropdown.prototype.opened = function (e) {\n var contentHtml;\n this.resetRows();\n this.addArrowKeyEvent();\n\n var dropdownToggle = this.dropdown.find('.dropdown-menu-toggle');\n var hasFilterBulkUpdate = dropdownToggle.hasClass('js-filter-bulk-update');\n var shouldRefreshOnOpen = dropdownToggle.hasClass('js-gl-dropdown-refresh-on-open');\n var hasMultiSelect = dropdownToggle.hasClass('js-multiselect');\n\n // Makes indeterminate items effective\n if (this.fullData && (shouldRefreshOnOpen || hasFilterBulkUpdate)) {\n this.parseData(this.fullData);\n }\n\n // Process the data to make sure rendered data\n // matches the correct layout\n var inputValue = this.filterInput.val();\n if (this.fullData && hasMultiSelect && this.options.processData && inputValue.length === 0) {\n this.options.processData.call(this.options, inputValue, this.filteredFullData(), this.parseData.bind(this));\n }\n\n contentHtml = $('.dropdown-content', this.dropdown).html();\n if (this.remote && contentHtml === \"\") {\n this.remote.execute();\n } else {\n this.focusTextInput();\n }\n\n if (this.options.showMenuAbove) {\n this.positionMenuAbove();\n }\n\n if (this.options.opened) {\n this.options.opened.call(this, e);\n }\n\n return this.dropdown.trigger('shown.gl.dropdown');\n };\n\n GitLabDropdown.prototype.positionMenuAbove = function () {\n var $menu = this.dropdown.find('.dropdown-menu');\n\n $menu.addClass('dropdown-open-top');\n $menu.css('top', 'initial');\n $menu.css('bottom', '100%');\n };\n\n GitLabDropdown.prototype.hidden = function (e) {\n var $input;\n this.resetRows();\n this.removeArrayKeyEvent();\n $input = this.dropdown.find(\".dropdown-input-field\");\n if (this.options.filterable) {\n $input.blur();\n }\n if (this.dropdown.find(\".dropdown-toggle-page\").length) {\n $('.dropdown-menu', this.dropdown).removeClass(PAGE_TWO_CLASS);\n }\n if (this.options.hidden) {\n this.options.hidden.call(this, e);\n }\n return this.dropdown.trigger('hidden.gl.dropdown');\n };\n\n // Render the full menu\n GitLabDropdown.prototype.renderMenu = function (html) {\n if (this.options.renderMenu) {\n return this.options.renderMenu(html);\n } else {\n var ul = document.createElement('ul');\n\n for (var i = 0; i < html.length; i += 1) {\n var el = html[i];\n\n if (el instanceof jQuery) {\n el = el.get(0);\n }\n\n if (typeof el === 'string') {\n ul.innerHTML += el;\n } else {\n ul.appendChild(el);\n }\n }\n\n return ul;\n }\n };\n\n // Append the menu into the dropdown\n GitLabDropdown.prototype.appendMenu = function (html) {\n return this.clearMenu().append(html);\n };\n\n GitLabDropdown.prototype.clearMenu = function () {\n var selector;\n selector = '.dropdown-content';\n if (this.dropdown.find(\".dropdown-toggle-page\").length) {\n selector = \".dropdown-page-one .dropdown-content\";\n }\n\n return $(selector, this.dropdown).empty();\n };\n\n GitLabDropdown.prototype.renderItem = function (data, group, index) {\n var field, fieldName, html, selected, text, url, value, rowHidden;\n\n if (!this.options.renderRow) {\n value = this.options.id ? this.options.id(data) : data.id;\n\n if (value) {\n value = value.toString().replace(/'/g, '\\\\\\'');\n }\n }\n\n // Hide element\n if (this.options.hideRow && this.options.hideRow(value)) {\n rowHidden = true;\n }\n if (group == null) {\n group = false;\n }\n if (index == null) {\n // Render the row\n index = false;\n }\n html = document.createElement('li');\n\n if (data === 'divider' || data === 'separator') {\n html.className = data;\n return html;\n }\n // Header\n if (data.header != null) {\n html.className = 'dropdown-header';\n html.innerHTML = data.header;\n return html;\n }\n if (this.options.renderRow) {\n // Call the render function\n html = this.options.renderRow.call(this.options, data, this);\n } else {\n if (!selected) {\n fieldName = this.options.fieldName;\n\n if (value) {\n field = this.dropdown.parent().find('input[name=\\'' + fieldName + '\\'][value=\\'' + value + '\\']');\n if (field.length) {\n selected = true;\n }\n } else {\n field = this.dropdown.parent().find('input[name=\\'' + fieldName + '\\']');\n selected = !field.length;\n }\n }\n // Set URL\n if (this.options.url != null) {\n url = this.options.url(data);\n } else {\n url = data.url != null ? data.url : '#';\n }\n // Set Text\n if (this.options.text != null) {\n text = this.options.text(data);\n } else {\n text = data.text != null ? data.text : '';\n }\n if (this.highlight) {\n text = this.highlightTextMatches(text, this.filterInput.val());\n }\n // Create the list item & the link\n var link = document.createElement('a');\n\n link.href = url;\n\n if (this.highlight) {\n link.innerHTML = text;\n } else {\n link.textContent = text;\n }\n\n if (selected) {\n link.className = 'is-active';\n }\n\n if (group) {\n link.dataset.group = group;\n link.dataset.index = index;\n }\n\n html.appendChild(link);\n }\n return html;\n };\n\n GitLabDropdown.prototype.highlightTextMatches = function (text, term) {\n var occurrences = __WEBPACK_IMPORTED_MODULE_1_fuzzaldrin_plus___default.a.match(text, term);\n var indexOf = [].indexOf;\n return text.split('').map(function (character, i) {\n if (indexOf.call(occurrences, i) !== -1) {\n return \"\" + character + \"\";\n } else {\n return character;\n }\n }).join('');\n };\n\n GitLabDropdown.prototype.noResults = function () {\n var html;\n return '
  • No matching results
  • ';\n };\n\n GitLabDropdown.prototype.rowClicked = function (el) {\n var field, fieldName, groupName, isInput, selectedIndex, selectedObject, value, isMarking;\n\n fieldName = this.options.fieldName;\n isInput = $(this.el).is('input');\n if (this.renderedData) {\n groupName = el.data('group');\n if (groupName) {\n selectedIndex = el.data('index');\n selectedObject = this.renderedData[groupName][selectedIndex];\n } else {\n selectedIndex = el.closest('li').index();\n selectedObject = this.renderedData[selectedIndex];\n }\n }\n\n if (this.options.vue) {\n if (el.hasClass(ACTIVE_CLASS)) {\n el.removeClass(ACTIVE_CLASS);\n } else {\n el.addClass(ACTIVE_CLASS);\n }\n\n return [selectedObject];\n }\n\n field = [];\n value = this.options.id ? this.options.id(selectedObject, el) : selectedObject.id;\n if (isInput) {\n field = $(this.el);\n } else if (value != null) {\n field = this.dropdown.parent().find(\"input[name='\" + fieldName + \"'][value='\" + value.toString().replace(/'/g, '\\\\\\'') + \"']\");\n }\n\n if (this.options.isSelectable && !this.options.isSelectable(selectedObject, el)) {\n return;\n }\n\n if (el.hasClass(ACTIVE_CLASS) && value !== 0) {\n isMarking = false;\n el.removeClass(ACTIVE_CLASS);\n if (field && field.length) {\n this.clearField(field, isInput);\n }\n } else if (el.hasClass(INDETERMINATE_CLASS)) {\n isMarking = true;\n el.addClass(ACTIVE_CLASS);\n el.removeClass(INDETERMINATE_CLASS);\n if (field && field.length && value == null) {\n this.clearField(field, isInput);\n }\n if ((!field || !field.length) && fieldName) {\n this.addInput(fieldName, value, selectedObject);\n }\n } else {\n isMarking = true;\n if (!this.options.multiSelect || el.hasClass('dropdown-clear-active')) {\n this.dropdown.find(\".\" + ACTIVE_CLASS).removeClass(ACTIVE_CLASS);\n if (!isInput) {\n this.dropdown.parent().find(\"input[name='\" + fieldName + \"']\").remove();\n }\n }\n if (field && field.length && value == null) {\n this.clearField(field, isInput);\n }\n // Toggle active class for the tick mark\n el.addClass(ACTIVE_CLASS);\n if (value != null) {\n if ((!field || !field.length) && fieldName) {\n this.addInput(fieldName, value, selectedObject);\n } else if (field && field.length) {\n field.val(value).trigger('change');\n }\n }\n }\n\n return [selectedObject, isMarking];\n };\n\n GitLabDropdown.prototype.focusTextInput = function () {\n if (this.options.filterable) {\n var initialScrollTop = $(window).scrollTop();\n\n if (this.dropdown.is('.open')) {\n this.filterInput.focus();\n }\n\n if ($(window).scrollTop() < initialScrollTop) {\n $(window).scrollTop(initialScrollTop);\n }\n }\n };\n\n GitLabDropdown.prototype.addInput = function (fieldName, value, selectedObject, single) {\n var $input;\n // Create hidden input for form\n if (single) {\n $('input[name=\"' + fieldName + '\"]').remove();\n }\n\n $input = $('').attr('type', 'hidden').attr('name', fieldName).val(value);\n if (this.options.inputId != null) {\n $input.attr('id', this.options.inputId);\n }\n\n if (this.options.multiSelect) {\n Object.keys(selectedObject).forEach(function (attribute) {\n $input.attr('data-' + attribute, selectedObject[attribute]);\n });\n }\n\n if (this.options.inputMeta) {\n $input.attr('data-meta', selectedObject[this.options.inputMeta]);\n }\n\n this.dropdown.before($input).trigger('change');\n };\n\n GitLabDropdown.prototype.selectRowAtIndex = function (index) {\n var $el, selector;\n // If we pass an option index\n if (typeof index !== \"undefined\") {\n selector = SELECTABLE_CLASSES + \":eq(\" + index + \") a\";\n } else {\n selector = \".dropdown-content .is-focused\";\n }\n if (this.dropdown.find(\".dropdown-toggle-page\").length) {\n selector = \".dropdown-page-one \" + selector;\n }\n // simulate a click on the first link\n $el = $(selector, this.dropdown);\n if ($el.length) {\n var href = $el.attr('href');\n if (href && href !== '#') {\n Object(__WEBPACK_IMPORTED_MODULE_3__lib_utils_url_utility__[\"g\" /* visitUrl */])(href);\n } else {\n $el.trigger('click');\n }\n }\n };\n\n GitLabDropdown.prototype.addArrowKeyEvent = function () {\n var $input, ARROW_KEY_CODES, selector;\n ARROW_KEY_CODES = [38, 40];\n $input = this.dropdown.find(\".dropdown-input-field\");\n selector = SELECTABLE_CLASSES;\n if (this.dropdown.find(\".dropdown-toggle-page\").length) {\n selector = \".dropdown-page-one \" + selector;\n }\n return $('body').on('keydown', function (_this) {\n return function (e) {\n var $listItems, PREV_INDEX, currentKeyCode;\n currentKeyCode = e.which;\n if (ARROW_KEY_CODES.indexOf(currentKeyCode) !== -1) {\n e.preventDefault();\n e.stopImmediatePropagation();\n PREV_INDEX = currentIndex;\n $listItems = $(selector, _this.dropdown);\n // if @options.filterable\n // $input.blur()\n if (currentKeyCode === 40) {\n // Move down\n if (currentIndex < $listItems.length - 1) {\n currentIndex += 1;\n }\n } else if (currentKeyCode === 38) {\n // Move up\n if (currentIndex > 0) {\n currentIndex -= 1;\n }\n }\n if (currentIndex !== PREV_INDEX) {\n _this.highlightRowAtIndex($listItems, currentIndex);\n }\n return false;\n }\n if (currentKeyCode === 13 && currentIndex !== -1) {\n e.preventDefault();\n _this.selectRowAtIndex();\n }\n };\n }(this));\n };\n\n GitLabDropdown.prototype.removeArrayKeyEvent = function () {\n return $('body').off('keydown');\n };\n\n GitLabDropdown.prototype.resetRows = function resetRows() {\n currentIndex = -1;\n $('.is-focused', this.dropdown).removeClass('is-focused');\n };\n\n GitLabDropdown.prototype.highlightRowAtIndex = function ($listItems, index) {\n var $dropdownContent, $listItem, dropdownContentBottom, dropdownContentHeight, dropdownContentTop, dropdownScrollTop, listItemBottom, listItemHeight, listItemTop;\n // Remove the class for the previously focused row\n $('.is-focused', this.dropdown).removeClass('is-focused');\n // Update the class for the row at the specific index\n $listItem = $listItems.eq(index);\n $listItem.find('a:first-child').addClass(\"is-focused\");\n // Dropdown content scroll area\n $dropdownContent = $listItem.closest('.dropdown-content');\n dropdownScrollTop = $dropdownContent.scrollTop();\n dropdownContentHeight = $dropdownContent.outerHeight();\n dropdownContentTop = $dropdownContent.prop('offsetTop');\n dropdownContentBottom = dropdownContentTop + dropdownContentHeight;\n // Get the offset bottom of the list item\n listItemHeight = $listItem.outerHeight();\n listItemTop = $listItem.prop('offsetTop');\n listItemBottom = listItemTop + listItemHeight;\n if (!index) {\n // Scroll the dropdown content to the top\n $dropdownContent.scrollTop(0);\n } else if (index === $listItems.length - 1) {\n // Scroll the dropdown content to the bottom\n $dropdownContent.scrollTop($dropdownContent.prop('scrollHeight'));\n } else if (listItemBottom > dropdownContentBottom + dropdownScrollTop) {\n // Scroll the dropdown content down\n $dropdownContent.scrollTop(listItemBottom - dropdownContentBottom + CURSOR_SELECT_SCROLL_PADDING);\n } else if (listItemTop < dropdownContentTop + dropdownScrollTop) {\n // Scroll the dropdown content up\n return $dropdownContent.scrollTop(listItemTop - dropdownContentTop - CURSOR_SELECT_SCROLL_PADDING);\n }\n };\n\n GitLabDropdown.prototype.updateLabel = function (selected, el, instance) {\n if (selected == null) {\n selected = null;\n }\n if (el == null) {\n el = null;\n }\n if (instance == null) {\n instance = null;\n }\n\n var toggleText = this.options.toggleLabel(selected, el, instance);\n if (this.options.updateLabel) {\n // Option to override the dropdown label text\n toggleText = this.options.updateLabel;\n }\n\n return $(this.el).find(\".dropdown-toggle-text\").text(toggleText);\n };\n\n GitLabDropdown.prototype.clearField = function (field, isInput) {\n return isInput ? field.val('') : field.remove();\n };\n\n return GitLabDropdown;\n}();\n\n$.fn.glDropdown = function (opts) {\n return this.each(function () {\n if (!$.data(this, 'glDropdown')) {\n return $.data(this, 'glDropdown', new GitLabDropdown(this, opts));\n }\n });\n};\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\"), __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\n\n/***/ }),\n\n/***/ \"./gl_field_error.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {var _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 * This class overrides the browser's validation error bubbles, displaying custom\n * error messages for invalid fields instead. To begin validating any form, add the\n * class `gl-show-field-errors` to the form element, and ensure error messages are\n * declared in each inputs' `title` attribute. If no title is declared for an invalid\n * field the user attempts to submit, \"This field is required.\" will be shown by default.\n *\n * Opt not to validate certain fields by adding the class `gl-field-error-ignore` to the input.\n *\n * Set a custom error anchor for error message to be injected after with the\n * class `gl-field-error-anchor`\n *\n * Examples:\n *\n * Basic:\n *\n *
    \n * \n *
    \n *\n * Ignore specific inputs (e.g. UsernameValidator):\n *\n *
    \n *
    \n * \n *
    \n *
    \n * \n *
    \n *
    \n *\n * Custom Error Anchor (allows error message to be injected after specified element):\n *\n *
    \n *
    \n * \n * // Error message typically injected here\n *
    \n * // Error message now injected here\n *
    \n *\n */\n\n/**\n * Regex Patterns in use:\n *\n * Only alphanumeric: : \"[a-zA-Z0-9]+\"\n * No special characters : \"[a-zA-Z0-9-_]+\",\n *\n */\n\nvar errorMessageClass = 'gl-field-error';\nvar inputErrorClass = 'gl-field-error-outline';\nvar errorAnchorSelector = '.gl-field-error-anchor';\nvar ignoreInputSelector = '.gl-field-error-ignore';\n\nvar GlFieldError = function () {\n function GlFieldError(_ref) {\n var input = _ref.input,\n formErrors = _ref.formErrors;\n\n _classCallCheck(this, GlFieldError);\n\n this.inputElement = $(input);\n this.inputDomElement = this.inputElement.get(0);\n this.form = formErrors;\n this.errorMessage = this.inputElement.attr('title') || 'This field is required.';\n this.fieldErrorElement = $('

    ' + this.errorMessage + '

    ');\n\n this.state = {\n valid: false,\n empty: true,\n submitted: false\n };\n\n this.initFieldValidation();\n }\n\n _createClass(GlFieldError, [{\n key: 'initFieldValidation',\n value: function initFieldValidation() {\n var customErrorAnchor = this.inputElement.parents(errorAnchorSelector);\n var errorAnchor = customErrorAnchor.length ? customErrorAnchor : this.inputElement;\n\n // hidden when injected into DOM\n errorAnchor.after(this.fieldErrorElement);\n this.inputElement.off('invalid').on('invalid', this.handleInvalidSubmit.bind(this));\n this.scopedSiblings = this.safelySelectSiblings();\n }\n }, {\n key: 'safelySelectSiblings',\n value: function safelySelectSiblings() {\n // Apply `ignoreSelector` in markup to siblings whose visibility should not be toggled\n var unignoredSiblings = this.inputElement.siblings('p:not(' + ignoreInputSelector + ')');\n var parentContainer = this.inputElement.parent('.form-group');\n\n // Only select siblings when they're scoped within a form-group with one input\n var safelyScoped = parentContainer.length && parentContainer.find('input').length === 1;\n\n return safelyScoped ? unignoredSiblings : this.fieldErrorElement;\n }\n }, {\n key: 'renderValidity',\n value: function renderValidity() {\n this.renderClear();\n\n if (this.state.valid) {\n this.renderValid();\n } else if (this.state.empty) {\n this.renderEmpty();\n } else if (!this.state.valid) {\n this.renderInvalid();\n }\n }\n }, {\n key: 'handleInvalidSubmit',\n value: function handleInvalidSubmit(event) {\n event.preventDefault();\n var currentValue = this.accessCurrentValue();\n this.state.valid = false;\n this.state.empty = currentValue === '';\n this.state.submitted = true;\n this.renderValidity();\n this.form.focusOnFirstInvalid.apply(this.form);\n\n // For UX, wait til after first invalid submission to check each keyup\n this.inputElement.off('keyup.fieldValidator').on('keyup.fieldValidator', this.updateValidity.bind(this));\n }\n\n /* Get or set current input value */\n\n }, {\n key: 'accessCurrentValue',\n value: function accessCurrentValue(newVal) {\n return newVal ? this.inputElement.val(newVal) : this.inputElement.val();\n }\n }, {\n key: 'getInputValidity',\n value: function getInputValidity() {\n return this.inputDomElement.validity.valid;\n }\n }, {\n key: 'updateValidity',\n value: function updateValidity() {\n var inputVal = this.accessCurrentValue();\n this.state.empty = !inputVal.length;\n this.state.valid = this.getInputValidity();\n this.renderValidity();\n }\n }, {\n key: 'renderValid',\n value: function renderValid() {\n return this.renderClear();\n }\n }, {\n key: 'renderEmpty',\n value: function renderEmpty() {\n return this.renderInvalid();\n }\n }, {\n key: 'renderInvalid',\n value: function renderInvalid() {\n this.inputElement.addClass(inputErrorClass);\n this.scopedSiblings.hide();\n return this.fieldErrorElement.show();\n }\n }, {\n key: 'renderClear',\n value: function renderClear() {\n var inputVal = this.accessCurrentValue();\n if (!inputVal.split(' ').length) {\n var trimmedInput = inputVal.trim();\n this.accessCurrentValue(trimmedInput);\n }\n this.inputElement.removeClass(inputErrorClass);\n this.scopedSiblings.hide();\n this.fieldErrorElement.hide();\n }\n }]);\n\n return GlFieldError;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (GlFieldError);\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\n\n/***/ }),\n\n/***/ \"./gl_field_errors.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__gl_field_error__ = __webpack_require__(\"./gl_field_error.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\nvar customValidationFlag = 'gl-field-error-ignore';\n\nvar GlFieldErrors = function () {\n function GlFieldErrors(form) {\n _classCallCheck(this, GlFieldErrors);\n\n this.form = $(form);\n this.state = {\n inputs: [],\n valid: false\n };\n this.initValidators();\n }\n\n _createClass(GlFieldErrors, [{\n key: 'initValidators',\n value: function initValidators() {\n var _this = this;\n\n // register selectors here as needed\n var validateSelectors = [':text', ':password', '[type=email]'].map(function (selector) {\n return 'input' + selector;\n }).join(',');\n\n this.state.inputs = this.form.find(validateSelectors).toArray().filter(function (input) {\n return !input.classList.contains(customValidationFlag);\n }).map(function (input) {\n return new __WEBPACK_IMPORTED_MODULE_0__gl_field_error__[\"a\" /* default */]({ input: input, formErrors: _this });\n });\n\n this.form.on('submit', GlFieldErrors.catchInvalidFormSubmit);\n }\n\n /* Neccessary to prevent intercept and override invalid form submit\n * because Safari & iOS quietly allow form submission when form is invalid\n * and prevents disabling of invalid submit button by application.js */\n\n }, {\n key: 'updateFormValidityState',\n\n\n /* Public method for triggering validity updates manually */\n value: function updateFormValidityState() {\n this.state.inputs.forEach(function (field) {\n if (field.state.submitted) {\n field.updateValidity();\n }\n });\n }\n }, {\n key: 'focusOnFirstInvalid',\n value: function focusOnFirstInvalid() {\n var firstInvalid = this.state.inputs.filter(function (input) {\n return !input.inputDomElement.validity.valid;\n })[0];\n firstInvalid.inputElement.focus();\n }\n }], [{\n key: 'catchInvalidFormSubmit',\n value: function catchInvalidFormSubmit(e) {\n var $form = $(e.currentTarget);\n\n if (!$form.attr('novalidate')) {\n if (!e.currentTarget.checkValidity()) {\n e.preventDefault();\n e.stopPropagation();\n }\n }\n }\n }]);\n\n return GlFieldErrors;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (GlFieldErrors);\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\n\n/***/ }),\n\n/***/ \"./header.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {/* harmony export (immutable) */ __webpack_exports__[\"a\"] = initTodoToggle;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__lib_utils_text_utility__ = __webpack_require__(\"./lib/utils/text_utility.js\");\n\n\n/**\n * Updates todo counter when todos are toggled.\n * When count is 0, we hide the badge.\n *\n * @param {jQuery.Event} e\n * @param {String} count\n */\nfunction initTodoToggle() {\n $(document).on('todo:toggle', function (e, count) {\n var parsedCount = parseInt(count, 10);\n var $todoPendingCount = $('.todos-count');\n\n $todoPendingCount.text(Object(__WEBPACK_IMPORTED_MODULE_0__lib_utils_text_utility__[\"e\" /* highCountTrim */])(parsedCount));\n $todoPendingCount.toggleClass('hidden', parsedCount === 0);\n });\n}\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\n\n/***/ }),\n\n/***/ \"./importer_status.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return initImporterStatus; });\n/* unused harmony export ImporterStatus */\n/* 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__locale__ = __webpack_require__(\"./locale/index.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__lib_utils_axios_utils__ = __webpack_require__(\"./lib/utils/axios_utils.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__flash__ = __webpack_require__(\"./flash.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__lib_utils_common_utils__ = __webpack_require__(\"./lib/utils/common_utils.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\nvar ImporterStatus = function () {\n function ImporterStatus(_ref) {\n var jobsUrl = _ref.jobsUrl,\n importUrl = _ref.importUrl,\n ciCdOnly = _ref.ciCdOnly;\n\n _classCallCheck(this, ImporterStatus);\n\n this.jobsUrl = jobsUrl;\n this.importUrl = importUrl;\n this.ciCdOnly = ciCdOnly;\n this.initStatusPage();\n this.setAutoUpdate();\n }\n\n _createClass(ImporterStatus, [{\n key: 'initStatusPage',\n value: function initStatusPage() {\n $('.js-add-to-import').off('click').on('click', this.addToImport.bind(this));\n\n $('.js-import-all').off('click').on('click', function onClickImportAll() {\n var $btn = $(this);\n $btn.disable().addClass('is-loading');\n return $('.js-add-to-import').each(function triggerAddImport() {\n return $(this).trigger('click');\n });\n });\n }\n }, {\n key: 'addToImport',\n value: function addToImport(event) {\n var _this = this;\n\n var $btn = $(event.currentTarget);\n var $tr = $btn.closest('tr');\n var $targetField = $tr.find('.import-target');\n var $namespaceInput = $targetField.find('.js-select-namespace option:selected');\n var id = $tr.attr('id').replace('repo_', '');\n var targetNamespace = void 0;\n var newName = void 0;\n if ($namespaceInput.length > 0) {\n targetNamespace = $namespaceInput[0].innerHTML;\n newName = $targetField.find('#path').prop('value');\n $targetField.empty().append(targetNamespace + '/' + newName);\n }\n $btn.disable().addClass('is-loading');\n\n return __WEBPACK_IMPORTED_MODULE_2__lib_utils_axios_utils__[\"a\" /* default */].post(this.importUrl, {\n repo_id: id,\n target_namespace: targetNamespace,\n new_name: newName,\n ci_cd_only: this.ciCdOnly\n }).then(function (_ref2) {\n var data = _ref2.data;\n\n var job = $('tr#repo_' + id);\n job.attr('id', 'project_' + data.id);\n\n job.find('.import-target').html('' + data.full_path + '');\n $('table.import-jobs tbody').prepend(job);\n\n job.addClass('active');\n var connectingVerb = _this.ciCdOnly ? Object(__WEBPACK_IMPORTED_MODULE_1__locale__[\"a\" /* __ */])('connecting') : Object(__WEBPACK_IMPORTED_MODULE_1__locale__[\"a\" /* __ */])('importing');\n job.find('.import-actions').html(Object(__WEBPACK_IMPORTED_MODULE_1__locale__[\"f\" /* sprintf */])(__WEBPACK_IMPORTED_MODULE_0_underscore___default.a.escape(Object(__WEBPACK_IMPORTED_MODULE_1__locale__[\"a\" /* __ */])('%{loadingIcon} Started')), {\n loadingIcon: ''\n }, false));\n }).catch(function () {\n return Object(__WEBPACK_IMPORTED_MODULE_3__flash__[\"a\" /* default */])(Object(__WEBPACK_IMPORTED_MODULE_1__locale__[\"a\" /* __ */])('An error occurred while importing project'));\n });\n }\n }, {\n key: 'autoUpdate',\n value: function autoUpdate() {\n return __WEBPACK_IMPORTED_MODULE_2__lib_utils_axios_utils__[\"a\" /* default */].get(this.jobsUrl).then(function (_ref3) {\n var _ref3$data = _ref3.data,\n data = _ref3$data === undefined ? [] : _ref3$data;\n\n data.forEach(function (job) {\n var jobItem = $('#project_' + job.id);\n var statusField = jobItem.find('.job-status');\n\n var spinner = '';\n\n switch (job.import_status) {\n case 'finished':\n jobItem.removeClass('active').addClass('success');\n statusField.html(' ' + Object(__WEBPACK_IMPORTED_MODULE_1__locale__[\"a\" /* __ */])('Done') + '');\n break;\n case 'scheduled':\n statusField.html(spinner + ' ' + Object(__WEBPACK_IMPORTED_MODULE_1__locale__[\"a\" /* __ */])('Scheduled'));\n break;\n case 'started':\n statusField.html(spinner + ' ' + Object(__WEBPACK_IMPORTED_MODULE_1__locale__[\"a\" /* __ */])('Started'));\n break;\n case 'failed':\n statusField.html(Object(__WEBPACK_IMPORTED_MODULE_1__locale__[\"a\" /* __ */])('Failed'));\n break;\n default:\n statusField.html(job.import_status);\n break;\n }\n });\n });\n }\n }, {\n key: 'setAutoUpdate',\n value: function setAutoUpdate() {\n setInterval(this.autoUpdate.bind(this), 4000);\n }\n }]);\n\n return ImporterStatus;\n}();\n\n// eslint-disable-next-line consistent-return\n\n\nfunction initImporterStatus() {\n var importerStatus = document.querySelector('.js-importer-status');\n\n if (importerStatus) {\n var data = importerStatus.dataset;\n return new ImporterStatus({\n jobsUrl: data.jobsImportPath,\n importUrl: data.importPath,\n ciCdOnly: Object(__WEBPACK_IMPORTED_MODULE_4__lib_utils_common_utils__[\"f\" /* convertPermissionToBoolean */])(data.ciCdOnly)\n });\n }\n}\n\n\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\n\n/***/ }),\n\n/***/ \"./layout_nav.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {/* harmony export (immutable) */ __webpack_exports__[\"a\"] = initLayoutNav;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__contextual_sidebar__ = __webpack_require__(\"./contextual_sidebar.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__fly_out_nav__ = __webpack_require__(\"./fly_out_nav.js\");\n\n\n\nfunction hideEndFade($scrollingTabs) {\n $scrollingTabs.each(function scrollTabsLoop() {\n var $this = $(this);\n $this.siblings('.fade-right').toggleClass('scrolling', Math.round($this.width()) < $this.prop('scrollWidth'));\n });\n}\n\nfunction initLayoutNav() {\n var contextualSidebar = new __WEBPACK_IMPORTED_MODULE_0__contextual_sidebar__[\"a\" /* default */]();\n contextualSidebar.bindEvents();\n\n Object(__WEBPACK_IMPORTED_MODULE_1__fly_out_nav__[\"a\" /* default */])();\n\n $(document).on('init.scrolling-tabs', function () {\n var $scrollingTabs = $('.scrolling-tabs').not('.is-initialized');\n $scrollingTabs.addClass('is-initialized');\n\n $(window).on('resize.nav', function () {\n hideEndFade($scrollingTabs);\n }).trigger('resize.nav');\n\n $scrollingTabs.on('scroll', function tabsScrollEvent() {\n var $this = $(this);\n var currentPosition = $this.scrollLeft();\n var maxPosition = $this.prop('scrollWidth') - $this.outerWidth();\n\n $this.siblings('.fade-left').toggleClass('scrolling', currentPosition > 0);\n $this.siblings('.fade-right').toggleClass('scrolling', currentPosition < maxPosition - 1);\n });\n\n $scrollingTabs.each(function scrollTabsEachLoop() {\n var $this = $(this);\n var scrollingTabWidth = $this.width();\n var $active = $this.find('.active');\n var activeWidth = $active.width();\n\n if ($active.length) {\n var offset = $active.offset().left + activeWidth;\n\n if (offset > scrollingTabWidth - 30) {\n var scrollLeft = offset - scrollingTabWidth / 2 - activeWidth / 2;\n\n $this.scrollLeft(scrollLeft);\n }\n }\n });\n }).trigger('init.scrolling-tabs');\n}\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\n\n/***/ }),\n\n/***/ \"./lazy_loader.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return placeholderImage; });\n/* 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__);\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\nvar placeholderImage = 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==';\nvar SCROLL_THRESHOLD = 300;\n\nvar LazyLoader = function () {\n function LazyLoader() {\n var _this = this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, LazyLoader);\n\n this.lazyImages = [];\n this.observerNode = options.observerNode || '#content-body';\n\n var throttledScrollCheck = __WEBPACK_IMPORTED_MODULE_0_underscore___default.a.throttle(function () {\n return _this.scrollCheck();\n }, 300);\n var debouncedElementsInView = __WEBPACK_IMPORTED_MODULE_0_underscore___default.a.debounce(function () {\n return _this.checkElementsInView();\n }, 300);\n\n window.addEventListener('scroll', throttledScrollCheck);\n window.addEventListener('resize', debouncedElementsInView);\n\n var scrollContainer = options.scrollContainer || window;\n scrollContainer.addEventListener('load', function () {\n return _this.loadCheck();\n });\n }\n\n _createClass(LazyLoader, [{\n key: 'searchLazyImages',\n value: function searchLazyImages() {\n this.lazyImages = [].slice.call(document.querySelectorAll('.lazy'));\n\n if (this.lazyImages.length) {\n this.checkElementsInView();\n }\n }\n }, {\n key: 'startContentObserver',\n value: function startContentObserver() {\n var _this2 = this;\n\n var contentNode = document.querySelector(this.observerNode) || document.querySelector('body');\n\n if (contentNode) {\n var observer = new MutationObserver(function () {\n return _this2.searchLazyImages();\n });\n\n observer.observe(contentNode, {\n childList: true,\n subtree: true\n });\n }\n }\n }, {\n key: 'loadCheck',\n value: function loadCheck() {\n this.searchLazyImages();\n this.startContentObserver();\n }\n }, {\n key: 'scrollCheck',\n value: function scrollCheck() {\n var _this3 = this;\n\n requestAnimationFrame(function () {\n return _this3.checkElementsInView();\n });\n }\n }, {\n key: 'checkElementsInView',\n value: function checkElementsInView() {\n var scrollTop = pageYOffset;\n var visHeight = scrollTop + innerHeight + SCROLL_THRESHOLD;\n\n // Loading Images which are in the current viewport or close to them\n this.lazyImages = this.lazyImages.filter(function (selectedImage) {\n if (selectedImage.getAttribute('data-src')) {\n var imgBoundRect = selectedImage.getBoundingClientRect();\n var imgTop = scrollTop + imgBoundRect.top;\n var imgBound = imgTop + imgBoundRect.height;\n\n if (scrollTop < imgBound && visHeight > imgTop) {\n LazyLoader.loadImage(selectedImage);\n return false;\n }\n\n return true;\n }\n return false;\n });\n }\n }], [{\n key: 'loadImage',\n value: function loadImage(img) {\n if (img.getAttribute('data-src')) {\n img.setAttribute('src', img.getAttribute('data-src'));\n img.removeAttribute('data-src');\n img.classList.remove('lazy');\n img.classList.add('js-lazy-loaded');\n }\n }\n }]);\n\n return LazyLoader;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (LazyLoader);\n\n/***/ }),\n\n/***/ \"./lib/utils/accessor.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nfunction isPropertyAccessSafe(base, property) {\n var safe = void 0;\n\n try {\n safe = !!base[property];\n } catch (error) {\n safe = false;\n }\n\n return safe;\n}\n\nfunction isFunctionCallSafe(base, functionName) {\n var safe = true;\n\n try {\n for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n base[functionName].apply(base, args);\n } catch (error) {\n safe = false;\n }\n\n return safe;\n}\n\nfunction isLocalStorageAccessSafe() {\n var safe = void 0;\n\n var TEST_KEY = 'isLocalStorageAccessSafe';\n var TEST_VALUE = 'true';\n\n safe = isPropertyAccessSafe(window, 'localStorage');\n if (!safe) return safe;\n\n safe = isFunctionCallSafe(window.localStorage, 'setItem', TEST_KEY, TEST_VALUE);\n\n if (safe) window.localStorage.removeItem(TEST_KEY);\n\n return safe;\n}\n\nvar AccessorUtilities = {\n isPropertyAccessSafe: isPropertyAccessSafe,\n isFunctionCallSafe: isFunctionCallSafe,\n isLocalStorageAccessSafe: isLocalStorageAccessSafe\n};\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (AccessorUtilities);\n\n/***/ }),\n\n/***/ \"./lib/utils/ajax_cache.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__axios_utils__ = __webpack_require__(\"./lib/utils/axios_utils.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__cache__ = __webpack_require__(\"./lib/utils/cache.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\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n\n\n\nvar AjaxCache = function (_Cache) {\n _inherits(AjaxCache, _Cache);\n\n function AjaxCache() {\n _classCallCheck(this, AjaxCache);\n\n var _this = _possibleConstructorReturn(this, (AjaxCache.__proto__ || Object.getPrototypeOf(AjaxCache)).call(this));\n\n _this.pendingRequests = {};\n return _this;\n }\n\n _createClass(AjaxCache, [{\n key: 'override',\n value: function override(endpoint, data) {\n this.internalStorage[endpoint] = data;\n }\n }, {\n key: 'retrieve',\n value: function retrieve(endpoint, forceRetrieve) {\n var _this2 = this;\n\n if (this.hasData(endpoint) && !forceRetrieve) {\n return Promise.resolve(this.get(endpoint));\n }\n\n var pendingRequest = this.pendingRequests[endpoint];\n\n if (!pendingRequest) {\n pendingRequest = __WEBPACK_IMPORTED_MODULE_0__axios_utils__[\"a\" /* default */].get(endpoint).then(function (_ref) {\n var data = _ref.data;\n\n _this2.internalStorage[endpoint] = data;\n delete _this2.pendingRequests[endpoint];\n }).catch(function (e) {\n var error = new Error(endpoint + ': ' + e.message);\n error.textStatus = e.message;\n\n delete _this2.pendingRequests[endpoint];\n throw error;\n });\n\n this.pendingRequests[endpoint] = pendingRequest;\n }\n\n return pendingRequest.then(function () {\n return _this2.get(endpoint);\n });\n }\n }]);\n\n return AjaxCache;\n}(__WEBPACK_IMPORTED_MODULE_1__cache__[\"a\" /* default */]);\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (new AjaxCache());\n\n/***/ }),\n\n/***/ \"./lib/utils/cache.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\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\nvar Cache = function () {\n function Cache() {\n _classCallCheck(this, Cache);\n\n this.internalStorage = {};\n }\n\n _createClass(Cache, [{\n key: \"get\",\n value: function get(key) {\n return this.internalStorage[key];\n }\n }, {\n key: \"hasData\",\n value: function hasData(key) {\n return Object.prototype.hasOwnProperty.call(this.internalStorage, key);\n }\n }, {\n key: \"remove\",\n value: function remove(key) {\n delete this.internalStorage[key];\n }\n }]);\n\n return Cache;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (Cache);\n\n/***/ }),\n\n/***/ \"./lib/utils/common_utils.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"h\", function() { return getPagePath; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"p\", function() { return isInGroupsPage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"s\", function() { return isInProjectPage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"j\", function() { return getProjectSlug; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"g\", function() { return getGroupSlug; });\n/* unused harmony export checkPageAndAction */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"q\", function() { return isInIssuePage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"r\", function() { return isInMRPage; });\n/* unused harmony export isInNoteablePage */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"n\", function() { return hasVueMRDiscussionsCookie; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return ajaxGet; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"C\", function() { return rstrip; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"H\", function() { return updateTooltipTitle; });\n/* unused harmony export disableButtonIfEmptyField */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"m\", function() { return handleLocationHash; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"t\", function() { return isInViewport; });\n/* unused harmony export parseUrl */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"B\", function() { return parseUrlPathname; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"l\", function() { return getUrlParamsArray; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"v\", function() { return isMetaKey; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"u\", function() { return isMetaClick; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"D\", function() { return scrollToElement; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"i\", function() { return getParameterByName; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"k\", function() { return getSelectedFragment; });\n/* unused harmony export insertText */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"w\", function() { return nodeMatchesSelector; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"x\", function() { return normalizeHeaders; });\n/* unused harmony export normalizeCRLFHeaders */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"z\", function() { return parseIntPagination; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"A\", function() { return parseQueryStringIntoObject; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"y\", function() { return objectToQueryString; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"d\", function() { return buildUrlWithCurrentLocation; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"o\", function() { return historyPushState; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"f\", function() { return convertPermissionToBoolean; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"c\", function() { return backOff; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"F\", function() { return setFavicon; });\n/* unused harmony export resetFavicon */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"E\", function() { return setCiStatusFavicon; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"G\", function() { return spriteIcon; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"e\", function() { return convertObjectPropsToCamelCase; });\n/* unused harmony export imagePath */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return addSelectOnFocusBehaviour; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery__ = __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_jquery__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_js_cookie__ = __webpack_require__(\"../../../node_modules/js-cookie/src/js.cookie.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_js_cookie___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_js_cookie__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__axios_utils__ = __webpack_require__(\"./lib/utils/axios_utils.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__url_utility__ = __webpack_require__(\"./lib/utils/url_utility.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__text_utility__ = __webpack_require__(\"./lib/utils/text_utility.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\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n\n\n\n\nvar getPagePath = function getPagePath() {\n var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n return $('body').attr('data-page').split(':')[index];\n};\n\nvar isInGroupsPage = function isInGroupsPage() {\n return getPagePath() === 'groups';\n};\n\nvar isInProjectPage = function isInProjectPage() {\n return getPagePath() === 'projects';\n};\n\nvar getProjectSlug = function getProjectSlug() {\n if (isInProjectPage()) {\n return $('body').data('project');\n }\n return null;\n};\n\nvar getGroupSlug = function getGroupSlug() {\n if (isInGroupsPage()) {\n return $('body').data('group');\n }\n return null;\n};\n\nvar checkPageAndAction = function checkPageAndAction(page, action) {\n var pagePath = getPagePath(1);\n var actionPath = getPagePath(2);\n\n return pagePath === page && actionPath === action;\n};\n\nvar isInIssuePage = function isInIssuePage() {\n return checkPageAndAction('issues', 'show');\n};\nvar isInMRPage = function isInMRPage() {\n return checkPageAndAction('merge_requests', 'show');\n};\nvar isInNoteablePage = function isInNoteablePage() {\n return isInIssuePage() || isInMRPage();\n};\nvar hasVueMRDiscussionsCookie = function hasVueMRDiscussionsCookie() {\n return __WEBPACK_IMPORTED_MODULE_1_js_cookie___default.a.get('vue_mr_discussions');\n};\n\nvar ajaxGet = function ajaxGet(url) {\n return __WEBPACK_IMPORTED_MODULE_2__axios_utils__[\"a\" /* default */].get(url, {\n params: { format: 'js' },\n responseType: 'text'\n }).then(function (_ref) {\n var data = _ref.data;\n\n $.globalEval(data);\n });\n};\n\nvar rstrip = function rstrip(val) {\n if (val) {\n return val.replace(/\\s+$/, '');\n }\n return val;\n};\n\nvar updateTooltipTitle = function updateTooltipTitle($tooltipEl, newTitle) {\n return $tooltipEl.attr('title', newTitle).tooltip('fixTitle');\n};\n\nvar disableButtonIfEmptyField = function disableButtonIfEmptyField(fieldSelector, buttonSelector) {\n var eventName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'input';\n\n var field = $(fieldSelector);\n var closestSubmit = field.closest('form').find(buttonSelector);\n if (rstrip(field.val()) === '') {\n closestSubmit.disable();\n }\n // eslint-disable-next-line func-names\n return field.on(eventName, function () {\n if (rstrip($(this).val()) === '') {\n return closestSubmit.disable();\n }\n return closestSubmit.enable();\n });\n};\n\n// automatically adjust scroll position for hash urls taking the height of the navbar into account\n// https://github.com/twitter/bootstrap/issues/1768\nvar handleLocationHash = function handleLocationHash() {\n var hash = Object(__WEBPACK_IMPORTED_MODULE_3__url_utility__[\"a\" /* getLocationHash */])();\n if (!hash) return;\n\n // This is required to handle non-unicode characters in hash\n hash = decodeURIComponent(hash);\n\n var target = document.getElementById(hash) || document.getElementById('user-content-' + hash);\n var fixedTabs = document.querySelector('.js-tabs-affix');\n var fixedDiffStats = document.querySelector('.js-diff-files-changed.is-stuck');\n var fixedNav = document.querySelector('.navbar-gitlab');\n\n var adjustment = 0;\n if (fixedNav) adjustment -= fixedNav.offsetHeight;\n\n if (target && target.scrollIntoView) {\n target.scrollIntoView(true);\n }\n\n if (fixedTabs) {\n adjustment -= fixedTabs.offsetHeight;\n }\n\n if (fixedDiffStats) {\n adjustment -= fixedDiffStats.offsetHeight;\n }\n\n window.scrollBy(0, adjustment);\n};\n\n// Check if element scrolled into viewport from above or below\n// Courtesy http://stackoverflow.com/a/7557433/414749\nvar isInViewport = function isInViewport(el) {\n var rect = el.getBoundingClientRect();\n\n return rect.top >= 0 && rect.left >= 0 && rect.bottom <= window.innerHeight && rect.right <= window.innerWidth;\n};\n\nvar parseUrl = function parseUrl(url) {\n var parser = document.createElement('a');\n parser.href = url;\n return parser;\n};\n\nvar parseUrlPathname = function parseUrlPathname(url) {\n var parsedUrl = parseUrl(url);\n // parsedUrl.pathname will return an absolute path for Firefox and a relative path for IE11\n // We have to make sure we always have an absolute path.\n return parsedUrl.pathname.charAt(0) === '/' ? parsedUrl.pathname : '/' + parsedUrl.pathname;\n};\n\n// We can trust that each param has one & since values containing & will be encoded\n// Remove the first character of search as it is always ?\nvar getUrlParamsArray = function getUrlParamsArray() {\n return window.location.search.slice(1).split('&').map(function (param) {\n var split = param.split('=');\n return [decodeURI(split[0]), split[1]].join('=');\n });\n};\n\nvar isMetaKey = function isMetaKey(e) {\n return e.metaKey || e.ctrlKey || e.altKey || e.shiftKey;\n};\n\n// Identify following special clicks\n// 1) Cmd + Click on Mac (e.metaKey)\n// 2) Ctrl + Click on PC (e.ctrlKey)\n// 3) Middle-click or Mouse Wheel Click (e.which is 2)\nvar isMetaClick = function isMetaClick(e) {\n return e.metaKey || e.ctrlKey || e.which === 2;\n};\n\nvar scrollToElement = function scrollToElement(element) {\n var $el = element;\n if (!(element instanceof __WEBPACK_IMPORTED_MODULE_0_jquery___default.a)) {\n $el = $(element);\n }\n var top = $el.offset().top;\n var mrTabsHeight = $('.merge-request-tabs').height() || 0;\n var headerHeight = $('.navbar-gitlab').height() || 0;\n\n return $('body, html').animate({\n scrollTop: top - mrTabsHeight - headerHeight\n }, 200);\n};\n\n/**\n this will take in the `name` of the param you want to parse in the url\n if the name does not exist this function will return `null`\n otherwise it will return the value of the param key provided\n*/\nvar getParameterByName = function getParameterByName(name, urlToParse) {\n var url = urlToParse || window.location.href;\n var parsedName = name.replace(/[[\\]]/g, '\\\\$&');\n var regex = new RegExp('[?&]' + parsedName + '(=([^&#]*)|&|#|$)');\n var results = regex.exec(url);\n if (!results) return null;\n if (!results[2]) return '';\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\n};\n\nvar getSelectedFragment = function getSelectedFragment() {\n var selection = window.getSelection();\n if (selection.rangeCount === 0) return null;\n var documentFragment = document.createDocumentFragment();\n for (var i = 0; i < selection.rangeCount; i += 1) {\n documentFragment.appendChild(selection.getRangeAt(i).cloneContents());\n }\n if (documentFragment.textContent.length === 0) return null;\n\n return documentFragment;\n};\n\nvar insertText = function insertText(target, text) {\n // Firefox doesn't support `document.execCommand('insertText', false, text)` on textareas\n var selectionStart = target.selectionStart;\n var selectionEnd = target.selectionEnd;\n var value = target.value;\n\n var textBefore = value.substring(0, selectionStart);\n var textAfter = value.substring(selectionEnd, value.length);\n\n var insertedText = text instanceof Function ? text(textBefore, textAfter) : text;\n var newText = textBefore + insertedText + textAfter;\n\n // eslint-disable-next-line no-param-reassign\n target.value = newText;\n // eslint-disable-next-line no-param-reassign\n target.selectionStart = target.selectionEnd = selectionStart + insertedText.length;\n\n // Trigger autosave\n target.dispatchEvent(new Event('input'));\n\n // Trigger autosize\n var event = document.createEvent('Event');\n event.initEvent('autosize:update', true, false);\n target.dispatchEvent(event);\n};\n\nvar nodeMatchesSelector = function nodeMatchesSelector(node, selector) {\n var matches = Element.prototype.matches || Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector;\n\n if (matches) {\n return matches.call(node, selector);\n }\n\n // IE11 doesn't support `node.matches(selector)`\n\n var parentNode = node.parentNode;\n if (!parentNode) {\n parentNode = document.createElement('div');\n // eslint-disable-next-line no-param-reassign\n node = node.cloneNode(true);\n parentNode.appendChild(node);\n }\n\n var matchingNodes = parentNode.querySelectorAll(selector);\n return Array.prototype.indexOf.call(matchingNodes, node) !== -1;\n};\n\n/**\n this will take in the headers from an API response and normalize them\n this way we don't run into production issues when nginx gives us lowercased header keys\n*/\nvar normalizeHeaders = function normalizeHeaders(headers) {\n var upperCaseHeaders = {};\n\n Object.keys(headers || {}).forEach(function (e) {\n upperCaseHeaders[e.toUpperCase()] = headers[e];\n });\n\n return upperCaseHeaders;\n};\n\n/**\n this will take in the getAllResponseHeaders result and normalize them\n this way we don't run into production issues when nginx gives us lowercased header keys\n*/\nvar normalizeCRLFHeaders = function normalizeCRLFHeaders(headers) {\n var headersObject = {};\n var headersArray = headers.split('\\n');\n\n headersArray.forEach(function (header) {\n var keyValue = header.split(': ');\n headersObject[keyValue[0]] = keyValue[1];\n });\n\n return normalizeHeaders(headersObject);\n};\n\n/**\n * Parses pagination object string values into numbers.\n *\n * @param {Object} paginationInformation\n * @returns {Object}\n */\nvar parseIntPagination = function parseIntPagination(paginationInformation) {\n return {\n perPage: parseInt(paginationInformation['X-PER-PAGE'], 10),\n page: parseInt(paginationInformation['X-PAGE'], 10),\n total: parseInt(paginationInformation['X-TOTAL'], 10),\n totalPages: parseInt(paginationInformation['X-TOTAL-PAGES'], 10),\n nextPage: parseInt(paginationInformation['X-NEXT-PAGE'], 10),\n previousPage: parseInt(paginationInformation['X-PREV-PAGE'], 10)\n };\n};\n\n/**\n * Given a string of query parameters creates an object.\n *\n * @example\n * `scope=all&page=2` -> { scope: 'all', page: '2'}\n * `scope=all` -> { scope: 'all' }\n * ``-> {}\n * @param {String} query\n * @returns {Object}\n */\nvar parseQueryStringIntoObject = function parseQueryStringIntoObject() {\n var query = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n\n if (query === '') return {};\n\n return query.split('&').reduce(function (acc, element) {\n var val = element.split('=');\n Object.assign(acc, _defineProperty({}, val[0], decodeURIComponent(val[1])));\n return acc;\n }, {});\n};\n\n/**\n * Converts object with key-value pairs\n * into query-param string\n *\n * @param {Object} params\n */\nvar objectToQueryString = function objectToQueryString() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return Object.keys(params).map(function (param) {\n return param + '=' + params[param];\n }).join('&');\n};\n\nvar buildUrlWithCurrentLocation = function buildUrlWithCurrentLocation(param) {\n return param ? '' + window.location.pathname + param : window.location.pathname;\n};\n\n/**\n * Based on the current location and the string parameters provided\n * creates a new entry in the history without reloading the page.\n *\n * @param {String} param\n */\nvar historyPushState = function historyPushState(newUrl) {\n window.history.pushState({}, document.title, newUrl);\n};\n\n/**\n * Converts permission provided as strings to booleans.\n *\n * @param {String} string\n * @returns {Boolean}\n */\nvar convertPermissionToBoolean = function convertPermissionToBoolean(permission) {\n return permission === 'true';\n};\n\n/**\n * Back Off exponential algorithm\n * backOff :: (Function, Number) -> Promise\n *\n * @param {Function} fn function to be called\n * @param {Number} timeout\n * @return {Promise}\n * @example\n * ```\n * backOff(function (next, stop) {\n * // Let's perform this function repeatedly for 60s or for the timeout provided.\n *\n * ourFunction()\n * .then(function (result) {\n * // continue if result is not what we need\n * next();\n *\n * // when result is what we need let's stop with the repetions and jump out of the cycle\n * stop(result);\n * })\n * .catch(function (error) {\n * // if there is an error, we need to stop this with an error.\n * stop(error);\n * })\n * }, 60000)\n * .then(function (result) {})\n * .catch(function (error) {\n * // deal with errors passed to stop()\n * })\n * ```\n */\nvar backOff = function backOff(fn) {\n var timeout = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 60000;\n\n var maxInterval = 32000;\n var nextInterval = 2000;\n var timeElapsed = 0;\n\n return new Promise(function (resolve, reject) {\n var stop = function stop(arg) {\n return arg instanceof Error ? reject(arg) : resolve(arg);\n };\n\n var next = function next() {\n if (timeElapsed < timeout) {\n setTimeout(function () {\n return fn(next, stop);\n }, nextInterval);\n timeElapsed += nextInterval;\n nextInterval = Math.min(nextInterval + nextInterval, maxInterval);\n } else {\n reject(new Error('BACKOFF_TIMEOUT'));\n }\n };\n\n fn(next, stop);\n });\n};\n\nvar setFavicon = function setFavicon(faviconPath) {\n var faviconEl = document.getElementById('favicon');\n if (faviconEl && faviconPath) {\n faviconEl.setAttribute('href', faviconPath);\n }\n};\n\nvar resetFavicon = function resetFavicon() {\n var faviconEl = document.getElementById('favicon');\n var originalFavicon = faviconEl ? faviconEl.getAttribute('href') : null;\n if (faviconEl) {\n faviconEl.setAttribute('href', originalFavicon);\n }\n};\n\nvar setCiStatusFavicon = function setCiStatusFavicon(pageUrl) {\n return __WEBPACK_IMPORTED_MODULE_2__axios_utils__[\"a\" /* default */].get(pageUrl).then(function (_ref2) {\n var data = _ref2.data;\n\n if (data && data.favicon) {\n setFavicon(data.favicon);\n } else {\n resetFavicon();\n }\n }).catch(resetFavicon);\n};\n\nvar spriteIcon = function spriteIcon(icon) {\n var className = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n\n var classAttribute = className.length > 0 ? 'class=\"' + className + '\"' : '';\n\n return '';\n};\n\n/**\n * This method takes in object with snake_case property names\n * and returns new object with camelCase property names\n *\n * Reasoning for this method is to ensure consistent property\n * naming conventions across JS code.\n */\nvar convertObjectPropsToCamelCase = function convertObjectPropsToCamelCase() {\n var obj = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (obj === null) {\n return {};\n }\n\n return Object.keys(obj).reduce(function (acc, prop) {\n var result = acc;\n\n result[Object(__WEBPACK_IMPORTED_MODULE_4__text_utility__[\"c\" /* convertToCamelCase */])(prop)] = obj[prop];\n return acc;\n }, {});\n};\n\nvar imagePath = function imagePath(imgUrl) {\n return '' + (gon.asset_host || '') + (gon.relative_url_root || '') + '/assets/' + imgUrl;\n};\n\nvar addSelectOnFocusBehaviour = function addSelectOnFocusBehaviour() {\n var selector = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '.js-select-on-focus';\n\n // Click a .js-select-on-focus field, select the contents\n // Prevent a mouseup event from deselecting the input\n $(selector).on('focusin', function selectOnFocusCallback() {\n $(this).select().one('mouseup', function (e) {\n e.preventDefault();\n });\n });\n};\n\nwindow.gl = window.gl || {};\nwindow.gl.utils = _extends({}, window.gl.utils || {}, {\n getPagePath: getPagePath,\n isInGroupsPage: isInGroupsPage,\n isInProjectPage: isInProjectPage,\n getProjectSlug: getProjectSlug,\n getGroupSlug: getGroupSlug,\n isInIssuePage: isInIssuePage,\n ajaxGet: ajaxGet,\n rstrip: rstrip,\n updateTooltipTitle: updateTooltipTitle,\n disableButtonIfEmptyField: disableButtonIfEmptyField,\n handleLocationHash: handleLocationHash,\n isInViewport: isInViewport,\n parseUrl: parseUrl,\n parseUrlPathname: parseUrlPathname,\n getUrlParamsArray: getUrlParamsArray,\n isMetaKey: isMetaKey,\n isMetaClick: isMetaClick,\n scrollToElement: scrollToElement,\n getParameterByName: getParameterByName,\n getSelectedFragment: getSelectedFragment,\n insertText: insertText,\n nodeMatchesSelector: nodeMatchesSelector,\n spriteIcon: spriteIcon,\n imagePath: imagePath\n});\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\n\n/***/ }),\n\n/***/ \"./lib/utils/datetime_utility.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"c\", function() { return getDayName; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return formatDate; });\n/* harmony export (immutable) */ __webpack_exports__[\"d\"] = getTimeago;\n/* unused harmony export renderTimeago */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"e\", function() { return localTimeAgo; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"f\", function() { return timeFor; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return getDayDifference; });\n/* harmony export (immutable) */ __webpack_exports__[\"g\"] = timeIntervalInWords;\n/* unused harmony export dateInWords */\n/* unused harmony export monthInWords */\n/* unused harmony export totalDaysInMonth */\n/* unused harmony export getSundays */\n/* unused harmony export getTimeframeWindow */\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_timeago_js__ = __webpack_require__(\"../../../node_modules/timeago.js/dist/timeago.min.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_timeago_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_timeago_js__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vendor_date_format__ = __webpack_require__(\"../../../vendor/assets/javascripts/date.format.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vendor_date_format___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vendor_date_format__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__text_utility__ = __webpack_require__(\"./lib/utils/text_utility.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__locale__ = __webpack_require__(\"./locale/index.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\n\n\n\n\n\nwindow.timeago = __WEBPACK_IMPORTED_MODULE_0_timeago_js___default.a;\nwindow.dateFormat = __WEBPACK_IMPORTED_MODULE_1_vendor_date_format___default.a;\n\n/**\n * Returns i18n month names array.\n * If `abbreviated` is provided, returns abbreviated\n * name.\n *\n * @param {Boolean} abbreviated\n */\nvar getMonthNames = function getMonthNames(abbreviated) {\n if (abbreviated) {\n return [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Jan'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Feb'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Mar'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Apr'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('May'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Jun'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Jul'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Aug'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Sep'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Oct'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Nov'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Dec')];\n }\n return [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('January'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('February'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('March'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('April'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('May'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('June'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('July'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('August'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('September'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('October'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('November'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('December')];\n};\n\n/**\n * Given a date object returns the day of the week in English\n * @param {date} date\n * @returns {String}\n */\nvar getDayName = function getDayName(date) {\n return ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'][date.getDay()];\n};\n\n/**\n * @example\n * dateFormat('2017-12-05','mmm d, yyyy h:MMtt Z' ) -> \"Dec 5, 2017 12:00am GMT+0000\"\n * @param {date} datetime\n * @returns {String}\n */\nvar formatDate = function formatDate(datetime) {\n return __WEBPACK_IMPORTED_MODULE_1_vendor_date_format___default()(datetime, 'mmm d, yyyy h:MMtt Z');\n};\n\n/**\n * Timeago uses underscores instead of dashes to separate language from country code.\n *\n * see https://github.com/hustcc/timeago.js/tree/v3.0.0/locales\n */\nvar timeagoLanguageCode = Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"c\" /* languageCode */])().replace(/-/g, '_');\n\nvar timeagoInstance = void 0;\n\n/**\n * Sets a timeago Instance\n */\nfunction getTimeago() {\n if (!timeagoInstance) {\n var localeRemaining = function getLocaleRemaining(number, index) {\n return [[Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|less than a minute ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|in a while')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|less than a minute ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|%s seconds remaining')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|about a minute ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|1 minute remaining')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|%s minutes ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|%s minutes remaining')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|about an hour ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|1 hour remaining')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|about %s hours ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|%s hours remaining')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|a day ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|1 day remaining')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|%s days ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|%s days remaining')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|a week ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|1 week remaining')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|%s weeks ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|%s weeks remaining')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|a month ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|1 month remaining')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|%s months ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|%s months remaining')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|a year ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|1 year remaining')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|%s years ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|%s years remaining')]][index];\n };\n var locale = function getLocale(number, index) {\n return [[Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|less than a minute ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|in a while')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|less than a minute ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|in %s seconds')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|about a minute ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|in 1 minute')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|%s minutes ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|in %s minutes')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|about an hour ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|in 1 hour')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|about %s hours ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|in %s hours')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|a day ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|in 1 day')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|%s days ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|in %s days')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|a week ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|in 1 week')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|%s weeks ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|in %s weeks')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|a month ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|in 1 month')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|%s months ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|in %s months')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|a year ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|in 1 year')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|%s years ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|in %s years')]][index];\n };\n\n __WEBPACK_IMPORTED_MODULE_0_timeago_js___default.a.register(timeagoLanguageCode, locale);\n __WEBPACK_IMPORTED_MODULE_0_timeago_js___default.a.register(timeagoLanguageCode + '-remaining', localeRemaining);\n timeagoInstance = __WEBPACK_IMPORTED_MODULE_0_timeago_js___default()();\n }\n\n return timeagoInstance;\n}\n\n/**\n * For the given element, renders a timeago instance.\n * @param {jQuery} $els\n */\nvar renderTimeago = function renderTimeago($els) {\n var timeagoEls = $els || document.querySelectorAll('.js-timeago-render');\n\n // timeago.js sets timeouts internally for each timeago value to be updated in real time\n getTimeago().render(timeagoEls, timeagoLanguageCode);\n};\n\n/**\n * For the given elements, sets a tooltip with a formatted date.\n * @param {jQuery}\n * @param {Boolean} setTimeago\n */\nvar localTimeAgo = function localTimeAgo($timeagoEls) {\n var setTimeago = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n $timeagoEls.each(function (i, el) {\n if (setTimeago) {\n // Recreate with custom template\n $(el).tooltip({\n template: '
    '\n });\n }\n\n el.classList.add('js-timeago-render');\n });\n\n renderTimeago($timeagoEls);\n};\n\n/**\n * Returns remaining or passed time over the given time.\n * @param {*} time\n * @param {*} expiredLabel\n */\nvar timeFor = function timeFor(time, expiredLabel) {\n if (!time) {\n return '';\n }\n if (new Date(time) < new Date()) {\n return expiredLabel || Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Timeago|Past due');\n }\n return getTimeago().format(time, timeagoLanguageCode + '-remaining').trim();\n};\n\nvar getDayDifference = function getDayDifference(a, b) {\n var millisecondsPerDay = 1000 * 60 * 60 * 24;\n var date1 = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate());\n var date2 = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate());\n\n return Math.floor((date2 - date1) / millisecondsPerDay);\n};\n\n/**\n * Port of ruby helper time_interval_in_words.\n *\n * @param {Number} seconds\n * @return {String}\n */\nfunction timeIntervalInWords(intervalInSeconds) {\n var secondsInteger = parseInt(intervalInSeconds, 10);\n var minutes = Math.floor(secondsInteger / 60);\n var seconds = secondsInteger - minutes * 60;\n var text = '';\n\n if (minutes >= 1) {\n text = minutes + ' ' + Object(__WEBPACK_IMPORTED_MODULE_2__text_utility__[\"g\" /* pluralize */])('minute', minutes) + ' ' + seconds + ' ' + Object(__WEBPACK_IMPORTED_MODULE_2__text_utility__[\"g\" /* pluralize */])('second', seconds);\n } else {\n text = seconds + ' ' + Object(__WEBPACK_IMPORTED_MODULE_2__text_utility__[\"g\" /* pluralize */])('second', seconds);\n }\n return text;\n}\n\nfunction dateInWords(date) {\n var abbreviated = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var hideYear = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n if (!date) return date;\n\n var month = date.getMonth();\n var year = date.getFullYear();\n\n var monthNames = [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('January'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('February'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('March'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('April'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('May'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('June'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('July'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('August'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('September'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('October'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('November'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('December')];\n var monthNamesAbbr = [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Jan'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Feb'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Mar'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Apr'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('May'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Jun'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Jul'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Aug'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Sep'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Oct'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Nov'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"e\" /* s__ */])('Dec')];\n\n var monthName = abbreviated ? monthNamesAbbr[month] : monthNames[month];\n\n if (hideYear) {\n return monthName + ' ' + date.getDate();\n }\n\n return monthName + ' ' + date.getDate() + ', ' + year;\n}\n\n/**\n * Returns month name based on provided date.\n *\n * @param {Date} date\n * @param {Boolean} abbreviated\n */\nvar monthInWords = function monthInWords(date) {\n var abbreviated = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n if (!date) {\n return '';\n }\n\n return getMonthNames(abbreviated)[date.getMonth()];\n};\n\n/**\n * Returns number of days in a month for provided date.\n * courtesy: https://stacko(verflow.com/a/1185804/414749\n *\n * @param {Date} date\n */\nvar totalDaysInMonth = function totalDaysInMonth(date) {\n if (!date) {\n return 0;\n }\n return new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate();\n};\n\n/**\n * Returns list of Dates referring to Sundays of the month\n * based on provided date\n *\n * @param {Date} date\n */\nvar getSundays = function getSundays(date) {\n if (!date) {\n return [];\n }\n\n var daysToSunday = ['Saturday', 'Friday', 'Thursday', 'Wednesday', 'Tuesday', 'Monday', 'Sunday'];\n\n var month = date.getMonth();\n var year = date.getFullYear();\n var sundays = [];\n var dateOfMonth = new Date(year, month, 1);\n\n while (dateOfMonth.getMonth() === month) {\n var dayName = getDayName(dateOfMonth);\n if (dayName === 'Sunday') {\n sundays.push(new Date(dateOfMonth.getTime()));\n }\n\n var daysUntilNextSunday = daysToSunday.indexOf(dayName) + 1;\n dateOfMonth.setDate(dateOfMonth.getDate() + daysUntilNextSunday);\n }\n\n return sundays;\n};\n\n/**\n * Returns list of Dates representing a timeframe of Months from month of provided date (inclusive)\n * up to provided length\n *\n * For eg;\n * If current month is January 2018 and `length` provided is `6`\n * Then this method will return list of Date objects as follows;\n *\n * [ October 2017, November 2017, December 2017, January 2018, February 2018, March 2018 ]\n *\n * If current month is March 2018 and `length` provided is `3`\n * Then this method will return list of Date objects as follows;\n *\n * [ February 2018, March 2018, April 2018 ]\n *\n * @param {Number} length\n * @param {Date} date\n */\nvar getTimeframeWindow = function getTimeframeWindow(length, date) {\n if (!length) {\n return [];\n }\n\n var currentDate = date instanceof Date ? date : new Date();\n var currentMonthIndex = Math.floor(length / 2);\n var timeframe = [];\n\n // Move date object backward to the first month of timeframe\n currentDate.setDate(1);\n currentDate.setMonth(currentDate.getMonth() - currentMonthIndex);\n\n // Iterate and update date for the size of length\n // and push date reference to timeframe list\n for (var i = 0; i < length; i += 1) {\n timeframe.push(new Date(currentDate.getTime()));\n currentDate.setMonth(currentDate.getMonth() + 1);\n }\n\n // Change date of last timeframe item to last date of the month\n timeframe[length - 1].setDate(totalDaysInMonth(timeframe[length - 1]));\n\n return timeframe;\n};\n\nwindow.gl = window.gl || {};\nwindow.gl.utils = _extends({}, window.gl.utils || {}, {\n getTimeago: getTimeago,\n localTimeAgo: localTimeAgo\n});\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\n\n/***/ }),\n\n/***/ \"./lib/utils/dom_utils.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return addClassIfElementExists; });\n/* eslint-disable import/prefer-default-export */\n\nvar addClassIfElementExists = function addClassIfElementExists(element, className) {\n if (element) {\n element.classList.add(className);\n }\n};\n\n/***/ }),\n\n/***/ \"./lib/utils/regexp.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/**\n * Regexp utility for the convenience of working with regular expressions.\n *\n */\n\n// Inspired by https://github.com/mishoo/UglifyJS/blob/2bc1d02363db3798d5df41fb5059a19edca9b7eb/lib/parse-js.js#L203\n// Unicode 6.1\nvar unicodeLetters = '\\\\u0041-\\\\u005A\\\\u0061-\\\\u007A\\\\u00AA\\\\u00B5\\\\u00BA\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0370-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u048A-\\\\u0527\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0620-\\\\u064A\\\\u066E\\\\u066F\\\\u0671-\\\\u06D3\\\\u06D5\\\\u06E5\\\\u06E6\\\\u06EE\\\\u06EF\\\\u06FA-\\\\u06FC\\\\u06FF\\\\u0710\\\\u0712-\\\\u072F\\\\u074D-\\\\u07A5\\\\u07B1\\\\u07CA-\\\\u07EA\\\\u07F4\\\\u07F5\\\\u07FA\\\\u0800-\\\\u0815\\\\u081A\\\\u0824\\\\u0828\\\\u0840-\\\\u0858\\\\u08A0\\\\u08A2-\\\\u08AC\\\\u0904-\\\\u0939\\\\u093D\\\\u0950\\\\u0958-\\\\u0961\\\\u0971-\\\\u0977\\\\u0979-\\\\u097F\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BD\\\\u09CE\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E1\\\\u09F0\\\\u09F1\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A72-\\\\u0A74\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABD\\\\u0AD0\\\\u0AE0\\\\u0AE1\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3D\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B61\\\\u0B71\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BD0\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C33\\\\u0C35-\\\\u0C39\\\\u0C3D\\\\u0C58\\\\u0C59\\\\u0C60\\\\u0C61\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBD\\\\u0CDE\\\\u0CE0\\\\u0CE1\\\\u0CF1\\\\u0CF2\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D\\\\u0D4E\\\\u0D60\\\\u0D61\\\\u0D7A-\\\\u0D7F\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0E01-\\\\u0E30\\\\u0E32\\\\u0E33\\\\u0E40-\\\\u0E46\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB0\\\\u0EB2\\\\u0EB3\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F40-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F88-\\\\u0F8C\\\\u1000-\\\\u102A\\\\u103F\\\\u1050-\\\\u1055\\\\u105A-\\\\u105D\\\\u1061\\\\u1065\\\\u1066\\\\u106E-\\\\u1070\\\\u1075-\\\\u1081\\\\u108E\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F0\\\\u1700-\\\\u170C\\\\u170E-\\\\u1711\\\\u1720-\\\\u1731\\\\u1740-\\\\u1751\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1780-\\\\u17B3\\\\u17D7\\\\u17DC\\\\u1820-\\\\u1877\\\\u1880-\\\\u18A8\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191C\\\\u1950-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19C1-\\\\u19C7\\\\u1A00-\\\\u1A16\\\\u1A20-\\\\u1A54\\\\u1AA7\\\\u1B05-\\\\u1B33\\\\u1B45-\\\\u1B4B\\\\u1B83-\\\\u1BA0\\\\u1BAE\\\\u1BAF\\\\u1BBA-\\\\u1BE5\\\\u1C00-\\\\u1C23\\\\u1C4D-\\\\u1C4F\\\\u1C5A-\\\\u1C7D\\\\u1CE9-\\\\u1CEC\\\\u1CEE-\\\\u1CF1\\\\u1CF5\\\\u1CF6\\\\u1D00-\\\\u1DBF\\\\u1E00-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2160-\\\\u2188\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CEE\\\\u2CF2\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D80-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u3029\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FCC\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA61F\\\\uA62A\\\\uA62B\\\\uA640-\\\\uA66E\\\\uA67F-\\\\uA697\\\\uA6A0-\\\\uA6EF\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA78E\\\\uA790-\\\\uA793\\\\uA7A0-\\\\uA7AA\\\\uA7F8-\\\\uA801\\\\uA803-\\\\uA805\\\\uA807-\\\\uA80A\\\\uA80C-\\\\uA822\\\\uA840-\\\\uA873\\\\uA882-\\\\uA8B3\\\\uA8F2-\\\\uA8F7\\\\uA8FB\\\\uA90A-\\\\uA925\\\\uA930-\\\\uA946\\\\uA960-\\\\uA97C\\\\uA984-\\\\uA9B2\\\\uA9CF\\\\uAA00-\\\\uAA28\\\\uAA40-\\\\uAA42\\\\uAA44-\\\\uAA4B\\\\uAA60-\\\\uAA76\\\\uAA7A\\\\uAA80-\\\\uAAAF\\\\uAAB1\\\\uAAB5\\\\uAAB6\\\\uAAB9-\\\\uAABD\\\\uAAC0\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEA\\\\uAAF2-\\\\uAAF4\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uABC0-\\\\uABE2\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D\\\\uFB1F-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF21-\\\\uFF3A\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC';\n\n/* harmony default export */ __webpack_exports__[\"a\"] = ({ unicodeLetters: unicodeLetters });\n\n/***/ }),\n\n/***/ \"./lib/utils/text_utility.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return addDelimiter; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"e\", function() { return highCountTrim; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"f\", function() { return humanize; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"g\", function() { return pluralize; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"d\", function() { return dasherize; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"h\", function() { return slugify; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"i\", function() { return truncate; });\n/* harmony export (immutable) */ __webpack_exports__[\"b\"] = capitalizeFirstCharacter;\n/* unused harmony export camelCase */\n/* unused harmony export camelCaseKeys */\n/* unused harmony export stripHtml */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"c\", function() { return convertToCamelCase; });\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\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n/**\n * Adds a , to a string composed by numbers, at every 3 chars.\n *\n * 2333 -> 2,333\n * 232324 -> 232,324\n *\n * @param {String} text\n * @returns {String}\n */\nvar addDelimiter = function addDelimiter(text) {\n return text ? text.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',') : text;\n};\n\n/**\n * Returns '99+' for numbers bigger than 99.\n *\n * @param {Number} count\n * @return {Number|String}\n */\nvar highCountTrim = function highCountTrim(count) {\n return count > 99 ? '99+' : count;\n};\n\n/**\n * Converts first char to uppercase and replaces undercores with spaces\n * @param {String} string\n * @requires {String}\n */\nvar humanize = function humanize(string) {\n return string.charAt(0).toUpperCase() + string.replace(/_/g, ' ').slice(1);\n};\n\n/**\n * Adds an 's' to the end of the string when count is bigger than 0\n * @param {String} str\n * @param {Number} count\n * @returns {String}\n */\nvar pluralize = function pluralize(str, count) {\n return str + (count > 1 || count === 0 ? 's' : '');\n};\n\n/**\n * Replaces underscores with dashes\n * @param {*} str\n * @returns {String}\n */\nvar dasherize = function dasherize(str) {\n return str.replace(/[_\\s]+/g, '-');\n};\n\n/**\n * Removes accents and converts to lower case\n * @param {String} str\n * @returns {String}\n */\nvar slugify = function slugify(str) {\n return str.trim().toLowerCase();\n};\n\n/**\n * Truncates given text\n *\n * @param {String} string\n * @param {Number} maxLength\n * @returns {String}\n */\nvar truncate = function truncate(string, maxLength) {\n return string.substr(0, maxLength - 3) + '...';\n};\n\n/**\n * Capitalizes first character\n *\n * @param {String} text\n * @return {String}\n */\nfunction capitalizeFirstCharacter(text) {\n return '' + text[0].toUpperCase() + text.slice(1);\n}\n\nfunction camelCase(str) {\n return str.replace(/_+([a-z])/gi, function ($1, $2) {\n return $2.toUpperCase();\n });\n}\n\nfunction camelCaseKeys() {\n var obj = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n return Object.keys(obj).reduce(function (acc, key) {\n var camelKey = camelCase(key);\n return _extends({}, acc, _defineProperty({}, camelKey, obj[key]));\n }, {});\n}\n\n/**\n * Replaces all html tags from a string with the given replacement.\n *\n * @param {String} string\n * @param {*} replace\n * @returns {String}\n */\nvar stripHtml = function stripHtml(string) {\n var replace = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n return string.replace(/<[^>]*>/g, replace);\n};\n\n/**\n * Converts snake_case string to camelCase\n *\n * @param {*} string\n */\nvar convertToCamelCase = function convertToCamelCase(string) {\n return string.replace(/(_\\w)/g, function (s) {\n return s[1].toUpperCase();\n });\n};\n\n/***/ }),\n\n/***/ \"./lib/utils/type_utility.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return isObject; });\n// eslint-disable-next-line import/prefer-default-export\nvar isObject = function isObject(obj) {\n return obj && obj.constructor === Object;\n};\n\n/***/ }),\n\n/***/ \"./lib/utils/url_utility.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (immutable) */ __webpack_exports__[\"b\"] = getParameterValues;\n/* harmony export (immutable) */ __webpack_exports__[\"c\"] = mergeUrlParams;\n/* unused harmony export removeParamQueryString */\n/* harmony export (immutable) */ __webpack_exports__[\"f\"] = removeParams;\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = getLocationHash;\n/* harmony export (immutable) */ __webpack_exports__[\"g\"] = visitUrl;\n/* harmony export (immutable) */ __webpack_exports__[\"e\"] = refreshCurrentPage;\n/* harmony export (immutable) */ __webpack_exports__[\"d\"] = redirectTo;\n// Returns an array containing the value(s) of the\n// of the key passed as an argument\nfunction getParameterValues(sParam) {\n var sPageURL = decodeURIComponent(window.location.search.substring(1));\n\n return sPageURL.split('&').reduce(function (acc, urlParam) {\n var sParameterName = urlParam.split('=');\n\n if (sParameterName[0] === sParam) {\n acc.push(sParameterName[1].replace(/\\+/g, ' '));\n }\n\n return acc;\n }, []);\n}\n\n// @param {Object} params - url keys and value to merge\n// @param {String} url\nfunction mergeUrlParams(params, url) {\n var newUrl = Object.keys(params).reduce(function (acc, paramName) {\n var paramValue = encodeURIComponent(params[paramName]);\n var pattern = new RegExp('\\\\b(' + paramName + '=).*?(&|$)');\n\n if (paramValue === null) {\n return acc.replace(pattern, '');\n } else if (url.search(pattern) !== -1) {\n return acc.replace(pattern, '$1' + paramValue + '$2');\n }\n\n return '' + acc + (acc.indexOf('?') > 0 ? '&' : '?') + paramName + '=' + paramValue;\n }, decodeURIComponent(url));\n\n // Remove a trailing ampersand\n var lastChar = newUrl[newUrl.length - 1];\n\n if (lastChar === '&') {\n newUrl = newUrl.slice(0, -1);\n }\n\n return newUrl;\n}\n\nfunction removeParamQueryString(url, param) {\n var decodedUrl = decodeURIComponent(url);\n var urlVariables = decodedUrl.split('&');\n\n return urlVariables.filter(function (variable) {\n return variable.indexOf(param) === -1;\n }).join('&');\n}\n\nfunction removeParams(params) {\n var url = document.createElement('a');\n url.href = window.location.href;\n\n params.forEach(function (param) {\n url.search = removeParamQueryString(url.search, param);\n });\n\n return url.href;\n}\n\nfunction getLocationHash() {\n var url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.location.href;\n\n var hashIndex = url.indexOf('#');\n\n return hashIndex === -1 ? null : url.substring(hashIndex + 1);\n}\n\nfunction visitUrl(url) {\n var external = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n if (external) {\n // Simulate `target=\"blank\" rel=\"noopener noreferrer\"`\n // See https://mathiasbynens.github.io/rel-noopener/\n var otherWindow = window.open();\n otherWindow.opener = null;\n otherWindow.location = url;\n } else {\n window.location.href = url;\n }\n}\n\nfunction refreshCurrentPage() {\n visitUrl(window.location.href);\n}\n\nfunction redirectTo(url) {\n return window.location.assign(url);\n}\n\n/***/ }),\n\n/***/ \"./locale/index.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n\n// EXTERNAL MODULE: /opt/gitlab/embedded/service/gitlab-rails/node_modules/jed/jed.js\nvar jed = __webpack_require__(\"../../../node_modules/jed/jed.js\");\nvar jed_default = /*#__PURE__*/__webpack_require__.n(jed);\n\n// EXTERNAL MODULE: /opt/gitlab/embedded/service/gitlab-rails/node_modules/underscore/underscore.js\nvar underscore = __webpack_require__(\"../../../node_modules/underscore/underscore.js\");\nvar underscore_default = /*#__PURE__*/__webpack_require__.n(underscore);\n\n// CONCATENATED MODULE: ./locale/sprintf.js\n\n\n/**\n Very limited implementation of sprintf supporting only named parameters.\n\n @param input (translated) text with parameters (e.g. '%{num_users} users use us')\n @param parameters object mapping parameter names to values (e.g. { num_users: 5 })\n @param escapeParameters whether parameter values should be escaped (see http://underscorejs.org/#escape)\n @returns {String} the text with parameters replaces (e.g. '5 users use us')\n\n @see https://ruby-doc.org/core-2.3.3/Kernel.html#method-i-sprintf\n @see https://gitlab.com/gitlab-org/gitlab-ce/issues/37992\n**/\n/* harmony default export */ var sprintf = (function (input, parameters) {\n var escapeParameters = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n\n var output = input;\n\n if (parameters) {\n Object.keys(parameters).forEach(function (parameterName) {\n var parameterValue = parameters[parameterName];\n var escapedParameterValue = escapeParameters ? underscore_default.a.escape(parameterValue) : parameterValue;\n output = output.replace(new RegExp('%{' + parameterName + '}', 'g'), escapedParameterValue);\n });\n }\n\n return output;\n});\n// CONCATENATED MODULE: ./locale/index.js\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"c\", function() { return languageCode; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return gettext; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"d\", function() { return ngettext; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"e\", function() { return pgettext; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return createDateTimeFormat; });\n/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, \"f\", function() { return sprintf; });\n\n\n\nvar languageCode = function languageCode() {\n return document.querySelector('html').getAttribute('lang') || 'en';\n};\nvar locale = new jed_default.a(window.translations || {});\ndelete window.translations;\n\n/**\n Translates `text`\n @param text The text to be translated\n @returns {String} The translated text\n**/\nvar gettext = locale.gettext.bind(locale);\n\n/**\n Translate the text with a number\n if the number is more than 1 it will use the `pluralText` translation.\n This method allows for contexts, see below re. contexts\n\n @param text Singular text to translate (eg. '%d day')\n @param pluralText Plural text to translate (eg. '%d days')\n @param count Number to decide which translation to use (eg. 2)\n @returns {String} Translated text with the number replaced (eg. '2 days')\n**/\nvar ngettext = function ngettext(text, pluralText, count) {\n var translated = locale.ngettext(text, pluralText, count).replace(/%d/g, count).split('|');\n\n return translated[translated.length - 1];\n};\n\n/**\n Translate context based text\n Either pass in the context translation like `Context|Text to translate`\n or allow for dynamic text by doing passing in the context first & then the text to translate\n\n @param keyOrContext Can be either the key to translate including the context\n (eg. 'Context|Text') or just the context for the translation\n (eg. 'Context')\n @param key Is the dynamic variable you want to be translated\n @returns {String} Translated context based text\n**/\nvar pgettext = function pgettext(keyOrContext, key) {\n var normalizedKey = key ? keyOrContext + '|' + key : keyOrContext;\n var translated = gettext(normalizedKey).split('|');\n\n return translated[translated.length - 1];\n};\n\n/**\n Creates an instance of Intl.DateTimeFormat for the current locale.\n\n @param formatOptions for available options, please see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n @returns {Intl.DateTimeFormat}\n*/\nvar createDateTimeFormat = function createDateTimeFormat(formatOptions) {\n return Intl.DateTimeFormat(languageCode(), formatOptions);\n};\n\n\n\n\n\n\n\n/* harmony default export */ var locale_0 = (locale);\n\n/***/ }),\n\n/***/ \"./logo.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {/* harmony export (immutable) */ __webpack_exports__[\"a\"] = initLogoAnimation;\nfunction initLogoAnimation() {\n window.addEventListener('beforeunload', function () {\n $('.tanuki-logo').addClass('animate');\n });\n}\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\n\n/***/ }),\n\n/***/ \"./main.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_jquery__ = __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_jquery__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_js_cookie__ = __webpack_require__(\"../../../node_modules/js-cookie/src/js.cookie.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_js_cookie___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_js_cookie__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_svg4everybody__ = __webpack_require__(\"../../../node_modules/svg4everybody/dist/svg4everybody.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_svg4everybody___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_svg4everybody__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__lib_utils_common_utils__ = __webpack_require__(\"./lib/utils/common_utils.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__lib_utils_datetime_utility__ = __webpack_require__(\"./lib/utils/datetime_utility.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__lib_utils_url_utility__ = __webpack_require__(\"./lib/utils/url_utility.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__behaviors___ = __webpack_require__(\"./behaviors/index.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__awards_handler__ = __webpack_require__(\"./awards_handler.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__breakpoints__ = __webpack_require__(\"./breakpoints.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__confirm_danger_modal__ = __webpack_require__(\"./confirm_danger_modal.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__flash__ = __webpack_require__(\"./flash.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__gl_dropdown__ = __webpack_require__(\"./gl_dropdown.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__header__ = __webpack_require__(\"./header.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__importer_status__ = __webpack_require__(\"./importer_status.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__layout_nav__ = __webpack_require__(\"./layout_nav.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_15__feature_highlight_feature_highlight_options__ = __webpack_require__(\"./feature_highlight/feature_highlight_options.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_16__lazy_loader__ = __webpack_require__(\"./lazy_loader.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_17__logo__ = __webpack_require__(\"./logo.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_18__milestone_select__ = __webpack_require__(\"./milestone_select.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_19__projects_dropdown__ = __webpack_require__(\"./projects_dropdown/index.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_20__render_gfm__ = __webpack_require__(\"./render_gfm.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_21__breadcrumb__ = __webpack_require__(\"./breadcrumb.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_22__dispatcher__ = __webpack_require__(\"./dispatcher.js\");\n/* eslint-disable import/first */\n/* global ConfirmDangerModal */\n\n\n\n\n\n// expose common libraries as globals (TODO: remove these)\nwindow.jQuery = __WEBPACK_IMPORTED_MODULE_0_jquery___default.a;\nwindow.$ = __WEBPACK_IMPORTED_MODULE_0_jquery___default.a;\n\n// lib/utils\n\n\n\n\n// behaviors\n\n\n// everything else\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// inject test utilities if necessary\nif (false) {\n $.fx.off = true;\n import( /* webpackMode: \"eager\" */'./test_utils/');\n}\n\n__WEBPACK_IMPORTED_MODULE_2_svg4everybody___default()();\n\ndocument.addEventListener('beforeunload', function () {\n // Unbind scroll events\n $(document).off('scroll');\n // Close any open tooltips\n $('.has-tooltip, [data-toggle=\"tooltip\"]').tooltip('destroy');\n // Close any open popover\n $('[data-toggle=\"popover\"]').popover('destroy');\n});\n\nwindow.addEventListener('hashchange', __WEBPACK_IMPORTED_MODULE_3__lib_utils_common_utils__[\"m\" /* handleLocationHash */]);\nwindow.addEventListener('load', function onLoad() {\n window.removeEventListener('load', onLoad, false);\n Object(__WEBPACK_IMPORTED_MODULE_3__lib_utils_common_utils__[\"m\" /* handleLocationHash */])();\n}, false);\n\ngl.lazyLoader = new __WEBPACK_IMPORTED_MODULE_16__lazy_loader__[\"a\" /* default */]({\n scrollContainer: window,\n observerNode: '#content-body'\n});\n\ndocument.addEventListener('DOMContentLoaded', function () {\n var $body = $('body');\n var $document = $(document);\n var $window = $(window);\n var $sidebarGutterToggle = $('.js-sidebar-toggle');\n var bootstrapBreakpoint = __WEBPACK_IMPORTED_MODULE_8__breakpoints__[\"a\" /* default */].getBreakpointSize();\n\n Object(__WEBPACK_IMPORTED_MODULE_21__breadcrumb__[\"a\" /* default */])();\n Object(__WEBPACK_IMPORTED_MODULE_14__layout_nav__[\"a\" /* default */])();\n Object(__WEBPACK_IMPORTED_MODULE_13__importer_status__[\"a\" /* default */])();\n Object(__WEBPACK_IMPORTED_MODULE_12__header__[\"a\" /* default */])();\n Object(__WEBPACK_IMPORTED_MODULE_17__logo__[\"a\" /* default */])();\n\n // Set the default path for all cookies to GitLab's root directory\n __WEBPACK_IMPORTED_MODULE_1_js_cookie___default.a.defaults.path = gon.relative_url_root || '/';\n\n // `hashchange` is not triggered when link target is already in window.location\n $body.on('click', 'a[href^=\"#\"]', function clickHashLinkCallback() {\n var href = this.getAttribute('href');\n if (href.substr(1) === Object(__WEBPACK_IMPORTED_MODULE_5__lib_utils_url_utility__[\"a\" /* getLocationHash */])()) {\n setTimeout(__WEBPACK_IMPORTED_MODULE_3__lib_utils_common_utils__[\"m\" /* handleLocationHash */], 1);\n }\n });\n\n if (bootstrapBreakpoint === 'xs') {\n var $rightSidebar = $('aside.right-sidebar, .layout-page');\n\n $rightSidebar.removeClass('right-sidebar-expanded').addClass('right-sidebar-collapsed');\n }\n\n // prevent default action for disabled buttons\n $('.btn').click(function clickDisabledButtonCallback(e) {\n if ($(this).hasClass('disabled')) {\n e.preventDefault();\n e.stopImmediatePropagation();\n return false;\n }\n\n return true;\n });\n\n Object(__WEBPACK_IMPORTED_MODULE_3__lib_utils_common_utils__[\"a\" /* addSelectOnFocusBehaviour */])('.js-select-on-focus');\n\n $('.remove-row').on('ajax:success', function removeRowAjaxSuccessCallback() {\n $(this).tooltip('destroy').closest('li').fadeOut();\n });\n\n $('.js-remove-tr').on('ajax:before', function removeTRAjaxBeforeCallback() {\n $(this).hide();\n });\n\n $('.js-remove-tr').on('ajax:success', function removeTRAjaxSuccessCallback() {\n $(this).closest('tr').fadeOut();\n });\n\n // Initialize select2 selects\n $('select.select2').select2({\n width: 'resolve',\n dropdownAutoWidth: true\n });\n\n // Close select2 on escape\n $('.js-select2').on('select2-close', function () {\n setTimeout(function () {\n $('.select2-container-active').removeClass('select2-container-active');\n $(':focus').blur();\n }, 1);\n });\n\n // Initialize tooltips\n $.fn.tooltip.Constructor.DEFAULTS.trigger = 'hover';\n $body.tooltip({\n selector: '.has-tooltip, [data-toggle=\"tooltip\"]',\n placement: function placement(tip, el) {\n return $(el).data('placement') || 'bottom';\n }\n });\n\n // Initialize popovers\n $body.popover({\n selector: '[data-toggle=\"popover\"]',\n trigger: 'focus',\n // set the viewport to the main content, excluding the navigation bar, so\n // the navigation can't overlap the popover\n viewport: '.layout-page'\n });\n\n // Form submitter\n $('.trigger-submit').on('change', function triggerSubmitCallback() {\n $(this).parents('form').submit();\n });\n\n Object(__WEBPACK_IMPORTED_MODULE_4__lib_utils_datetime_utility__[\"e\" /* localTimeAgo */])($('abbr.timeago, .js-timeago'), true);\n\n // Disable form buttons while a form is submitting\n $body.on('ajax:complete, ajax:beforeSend, submit', 'form', function ajaxCompleteCallback(e) {\n var $buttons = $('[type=\"submit\"], .js-disable-on-submit', this);\n switch (e.type) {\n case 'ajax:beforeSend':\n case 'submit':\n return $buttons.disable();\n default:\n return $buttons.enable();\n }\n });\n\n $(document).ajaxError(function (e, xhrObj) {\n var ref = xhrObj.status;\n\n if (ref === 401) {\n Object(__WEBPACK_IMPORTED_MODULE_10__flash__[\"a\" /* default */])('您需要登录。');\n } else if (ref === 404 || ref === 500) {\n Object(__WEBPACK_IMPORTED_MODULE_10__flash__[\"a\" /* default */])('服务器端出现了错误。');\n }\n });\n\n // Commit show suppressed diff\n $document.on('click', '.diff-content .js-show-suppressed-diff', function showDiffCallback() {\n var $container = $(this).parent();\n $container.next('table').show();\n $container.remove();\n });\n\n $('.navbar-toggle').on('click', function () {\n $('.header-content').toggleClass('menu-expanded');\n gl.lazyLoader.loadCheck();\n });\n\n // Show/hide comments on diff\n $body.on('click', '.js-toggle-diff-comments', function toggleDiffCommentsCallback(e) {\n var $this = $(this);\n var notesHolders = $this.closest('.diff-file').find('.notes_holder');\n\n e.preventDefault();\n\n $this.toggleClass('active');\n\n if ($this.hasClass('active')) {\n notesHolders.show().find('.hide, .content').show();\n } else {\n notesHolders.hide().find('.content').hide();\n }\n\n $(document).trigger('toggle.comments');\n });\n\n $document.on('click', '.js-confirm-danger', function (e) {\n var btn = $(e.target);\n var form = btn.closest('form');\n var text = btn.data('confirmDangerMessage');\n e.preventDefault();\n\n // eslint-disable-next-line no-new\n new ConfirmDangerModal(form, text);\n });\n\n $document.on('breakpoint:change', function (e, breakpoint) {\n if (breakpoint === 'sm' || breakpoint === 'xs') {\n var $gutterIcon = $sidebarGutterToggle.find('i');\n if ($gutterIcon.hasClass('fa-angle-double-right')) {\n $sidebarGutterToggle.trigger('click');\n }\n }\n });\n\n function fitSidebarForSize() {\n var oldBootstrapBreakpoint = bootstrapBreakpoint;\n bootstrapBreakpoint = __WEBPACK_IMPORTED_MODULE_8__breakpoints__[\"a\" /* default */].getBreakpointSize();\n\n if (bootstrapBreakpoint !== oldBootstrapBreakpoint) {\n $document.trigger('breakpoint:change', [bootstrapBreakpoint]);\n }\n }\n\n $window.on('resize.app', fitSidebarForSize);\n\n Object(__WEBPACK_IMPORTED_MODULE_7__awards_handler__[\"a\" /* default */])();\n\n $('form.filter-form').on('submit', function filterFormSubmitCallback(event) {\n var link = document.createElement('a');\n link.href = this.action;\n\n var action = '' + this.action + (link.search === '' ? '?' : '&');\n\n event.preventDefault();\n Object(__WEBPACK_IMPORTED_MODULE_5__lib_utils_url_utility__[\"g\" /* visitUrl */])('' + action + $(this).serialize());\n });\n\n var flashContainer = document.querySelector('.flash-container');\n\n if (flashContainer && flashContainer.children.length) {\n flashContainer.querySelectorAll('.flash-alert, .flash-notice, .flash-success').forEach(function (flashEl) {\n Object(__WEBPACK_IMPORTED_MODULE_10__flash__[\"b\" /* removeFlashClickListener */])(flashEl);\n });\n }\n\n Object(__WEBPACK_IMPORTED_MODULE_22__dispatcher__[\"a\" /* default */])();\n});\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\n\n/***/ }),\n\n/***/ \"./milestone_select.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_axios_utils__ = __webpack_require__(\"./lib/utils/axios_utils.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 func-names, space-before-function-paren, wrap-iife, no-underscore-dangle, prefer-arrow-callback, max-len, one-var, one-var-declaration-per-line, no-unused-vars, object-shorthand, comma-dangle, no-else-return, no-self-compare, consistent-return, no-param-reassign, no-shadow */\n/* global Issuable */\n/* global ListMilestone */\n\n\n\n\nvar MilestoneSelect = function () {\n function MilestoneSelect(currentProject, els) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n _classCallCheck(this, MilestoneSelect);\n\n if (currentProject !== null) {\n this.currentProject = typeof currentProject === 'string' ? JSON.parse(currentProject) : currentProject;\n }\n\n this.init(els, options);\n }\n\n _createClass(MilestoneSelect, [{\n key: 'init',\n value: function init(els, options) {\n var _this = this;\n\n var $els = $(els);\n\n if (!els) {\n $els = $('.js-milestone-select');\n }\n\n $els.each(function (i, dropdown) {\n var collapsedSidebarLabelTemplate = void 0,\n milestoneLinkNoneTemplate = void 0,\n milestoneLinkTemplate = void 0,\n selectedMilestone = void 0,\n selectedMilestoneDefault = void 0;\n var $dropdown = $(dropdown);\n var projectId = $dropdown.data('projectId');\n var milestonesUrl = $dropdown.data('milestones');\n var issueUpdateURL = $dropdown.data('issueUpdate');\n var showNo = $dropdown.data('showNo');\n var showAny = $dropdown.data('showAny');\n var showMenuAbove = $dropdown.data('showMenuAbove');\n var showUpcoming = $dropdown.data('showUpcoming');\n var showStarted = $dropdown.data('showStarted');\n var useId = $dropdown.data('useId');\n var defaultLabel = $dropdown.data('defaultLabel');\n var defaultNo = $dropdown.data('defaultNo');\n var issuableId = $dropdown.data('issuableId');\n var abilityName = $dropdown.data('abilityName');\n var $selectBox = $dropdown.closest('.selectbox');\n var $block = $selectBox.closest('.block');\n var $sidebarCollapsedValue = $block.find('.sidebar-collapsed-icon');\n var $value = $block.find('.value');\n var $loading = $block.find('.block-loading').fadeOut();\n selectedMilestoneDefault = showAny ? '' : null;\n selectedMilestoneDefault = showNo && defaultNo ? 'No Milestone' : selectedMilestoneDefault;\n selectedMilestone = $dropdown.data('selected') || selectedMilestoneDefault;\n\n if (issueUpdateURL) {\n milestoneLinkTemplate = __WEBPACK_IMPORTED_MODULE_0_underscore___default.a.template('/milestones/<%- iid %>\" class=\"bold has-tooltip\" data-container=\"body\" title=\"<%- remaining %>\"><%- title %>');\n milestoneLinkNoneTemplate = 'None';\n collapsedSidebarLabelTemplate = __WEBPACK_IMPORTED_MODULE_0_underscore___default.a.template('
    <%- remaining %>\" data-placement=\"left\" data-html=\"true\"> <%- title %>
    ');\n }\n return $dropdown.glDropdown({\n showMenuAbove: showMenuAbove,\n data: function data(term, callback) {\n return __WEBPACK_IMPORTED_MODULE_1__lib_utils_axios_utils__[\"a\" /* default */].get(milestonesUrl).then(function (_ref) {\n var data = _ref.data;\n\n var extraOptions = [];\n if (showAny) {\n extraOptions.push({\n id: 0,\n name: '',\n title: '所有里程碑'\n });\n }\n if (showNo) {\n extraOptions.push({\n id: -1,\n name: 'No Milestone',\n title: '无里程碑'\n });\n }\n if (showUpcoming) {\n extraOptions.push({\n id: -2,\n name: '#upcoming',\n title: '即将到来'\n });\n }\n if (showStarted) {\n extraOptions.push({\n id: -3,\n name: '#started',\n title: '已开始'\n });\n }\n if (extraOptions.length) {\n extraOptions.push('divider');\n }\n\n callback(extraOptions.concat(data));\n if (showMenuAbove) {\n $dropdown.data('glDropdown').positionMenuAbove();\n }\n $('[data-milestone-id=\"' + __WEBPACK_IMPORTED_MODULE_0_underscore___default.a.escape(selectedMilestone) + '\"] > a').addClass('is-active');\n });\n },\n renderRow: function renderRow(milestone) {\n return '\\n
  • \\n \\n ' + __WEBPACK_IMPORTED_MODULE_0_underscore___default.a.escape(milestone.title) + '\\n \\n
  • \\n ';\n },\n filterable: true,\n search: {\n fields: ['title']\n },\n selectable: true,\n toggleLabel: function toggleLabel(selected, el, e) {\n if (selected && 'id' in selected && $(el).hasClass('is-active')) {\n return selected.title;\n } else {\n return defaultLabel;\n }\n },\n defaultLabel: defaultLabel,\n fieldName: $dropdown.data('fieldName'),\n text: function text(milestone) {\n return __WEBPACK_IMPORTED_MODULE_0_underscore___default.a.escape(milestone.title);\n },\n id: function id(milestone) {\n if (!useId && !$dropdown.is('.js-issuable-form-dropdown')) {\n return milestone.name;\n } else {\n return milestone.id;\n }\n },\n hidden: function hidden() {\n $selectBox.hide();\n // display:block overrides the hide-collapse rule\n return $value.css('display', '');\n },\n opened: function opened(e) {\n var $el = $(e.currentTarget);\n if ($dropdown.hasClass('js-issue-board-sidebar') || options.handleClick) {\n selectedMilestone = $dropdown[0].dataset.selected || selectedMilestoneDefault;\n }\n $('a.is-active', $el).removeClass('is-active');\n $('[data-milestone-id=\"' + __WEBPACK_IMPORTED_MODULE_0_underscore___default.a.escape(selectedMilestone) + '\"] > a', $el).addClass('is-active');\n },\n vue: $dropdown.hasClass('js-issue-board-sidebar'),\n clicked: function clicked(clickEvent) {\n var $el = clickEvent.$el,\n e = clickEvent.e;\n\n var selected = clickEvent.selectedObj;\n\n var data = void 0,\n boardsStore = void 0;\n if (!selected) return;\n\n if (options.handleClick) {\n e.preventDefault();\n options.handleClick(selected);\n return;\n }\n\n var page = $('body').attr('data-page');\n var isIssueIndex = page === 'projects:issues:index';\n var isMRIndex = page === page && page === 'projects:merge_requests:index';\n var isSelecting = selected.name !== selectedMilestone;\n selectedMilestone = isSelecting ? selected.name : selectedMilestoneDefault;\n\n if ($dropdown.hasClass('js-filter-bulk-update') || $dropdown.hasClass('js-issuable-form-dropdown')) {\n e.preventDefault();\n return;\n }\n\n if ($dropdown.closest('.add-issues-modal').length) {\n boardsStore = gl.issueBoards.ModalStore.store.filter;\n }\n\n if (boardsStore) {\n boardsStore[$dropdown.data('fieldName')] = selected.name;\n e.preventDefault();\n } else if ($dropdown.hasClass('js-filter-submit') && (isIssueIndex || isMRIndex)) {\n return Issuable.filterResults($dropdown.closest('form'));\n } else if ($dropdown.hasClass('js-filter-submit')) {\n return $dropdown.closest('form').submit();\n } else if ($dropdown.hasClass('js-issue-board-sidebar')) {\n if (selected.id !== -1 && isSelecting) {\n gl.issueBoards.boardStoreIssueSet('milestone', new ListMilestone({\n id: selected.id,\n title: selected.name\n }));\n } else {\n gl.issueBoards.boardStoreIssueDelete('milestone');\n }\n\n $dropdown.trigger('loading.gl.dropdown');\n $loading.removeClass('hidden').fadeIn();\n\n gl.issueBoards.BoardsStore.detail.issue.update($dropdown.attr('data-issue-update')).then(function () {\n $dropdown.trigger('loaded.gl.dropdown');\n $loading.fadeOut();\n }).catch(function () {\n $loading.fadeOut();\n });\n } else {\n selected = $selectBox.find('input[type=\"hidden\"]').val();\n data = {};\n data[abilityName] = {};\n data[abilityName].milestone_id = selected != null ? selected : null;\n $loading.removeClass('hidden').fadeIn();\n $dropdown.trigger('loading.gl.dropdown');\n return __WEBPACK_IMPORTED_MODULE_1__lib_utils_axios_utils__[\"a\" /* default */].put(issueUpdateURL, data).then(function (_ref2) {\n var data = _ref2.data;\n\n $dropdown.trigger('loaded.gl.dropdown');\n $loading.fadeOut();\n $selectBox.hide();\n $value.css('display', '');\n if (data.milestone != null) {\n data.milestone.full_path = _this.currentProject.full_path;\n data.milestone.remaining = Object(__WEBPACK_IMPORTED_MODULE_2__lib_utils_datetime_utility__[\"f\" /* timeFor */])(data.milestone.due_date);\n data.milestone.name = data.milestone.title;\n $value.html(milestoneLinkTemplate(data.milestone));\n return $sidebarCollapsedValue.find('span').html(collapsedSidebarLabelTemplate(data.milestone));\n } else {\n $value.html(milestoneLinkNoneTemplate);\n return $sidebarCollapsedValue.find('span').text('No');\n }\n }).catch(function () {\n $loading.fadeOut();\n });\n }\n }\n });\n });\n }\n }]);\n\n return MilestoneSelect;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (MilestoneSelect);\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\n\n/***/ }),\n\n/***/ \"./preview_markdown.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__flash__ = __webpack_require__(\"./flash.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__locale__ = __webpack_require__(\"./locale/index.js\");\n/* eslint-disable func-names, no-var, object-shorthand, comma-dangle, prefer-arrow-callback */\n\n// MarkdownPreview\n//\n// Handles toggling the \"Write\" and \"Preview\" tab clicks, rendering the preview\n// (including the explanation of quick actions), and showing a warning when\n// more than `x` users are referenced.\n//\n\n\n\n\n\nvar lastTextareaPreviewed;\nvar lastTextareaHeight = null;\nvar markdownPreview;\nvar previewButtonSelector;\nvar writeButtonSelector;\n\nfunction MarkdownPreview() {}\n\n// Minimum number of users referenced before triggering a warning\nMarkdownPreview.prototype.referenceThreshold = 10;\nMarkdownPreview.prototype.emptyMessage = 'Nothing to preview.';\n\nMarkdownPreview.prototype.ajaxCache = {};\n\nMarkdownPreview.prototype.showPreview = function ($form) {\n var mdText;\n var preview = $form.find('.js-md-preview');\n var url = preview.data('url');\n if (preview.hasClass('md-preview-loading')) {\n return;\n }\n mdText = $form.find('textarea.markdown-area').val();\n\n if (mdText.trim().length === 0) {\n preview.text(this.emptyMessage);\n this.hideReferencedUsers($form);\n } else {\n preview.addClass('md-preview-loading').text('Loading...');\n this.fetchMarkdownPreview(mdText, url, function (response) {\n var body;\n if (response.body.length > 0) {\n body = response.body;\n } else {\n body = this.emptyMessage;\n }\n\n preview.removeClass('md-preview-loading').html(body);\n preview.renderGFM();\n this.renderReferencedUsers(response.references.users, $form);\n\n if (response.references.commands) {\n this.renderReferencedCommands(response.references.commands, $form);\n }\n }.bind(this));\n }\n};\n\nMarkdownPreview.prototype.fetchMarkdownPreview = function (text, url, success) {\n var _this = this;\n\n if (!url) {\n return;\n }\n if (text === this.ajaxCache.text) {\n success(this.ajaxCache.response);\n return;\n }\n __WEBPACK_IMPORTED_MODULE_0__lib_utils_axios_utils__[\"a\" /* default */].post(url, {\n text: text\n }).then(function (_ref) {\n var data = _ref.data;\n\n _this.ajaxCache = {\n text: text,\n response: data\n };\n success(data);\n }).catch(function () {\n return Object(__WEBPACK_IMPORTED_MODULE_1__flash__[\"a\" /* default */])(Object(__WEBPACK_IMPORTED_MODULE_2__locale__[\"a\" /* __ */])('An error occurred while fetching markdown preview'));\n });\n};\n\nMarkdownPreview.prototype.hideReferencedUsers = function ($form) {\n $form.find('.referenced-users').hide();\n};\n\nMarkdownPreview.prototype.renderReferencedUsers = function (users, $form) {\n var referencedUsers;\n referencedUsers = $form.find('.referenced-users');\n if (referencedUsers.length) {\n if (users.length >= this.referenceThreshold) {\n referencedUsers.show();\n referencedUsers.find('.js-referenced-users-count').text(users.length);\n } else {\n referencedUsers.hide();\n }\n }\n};\n\nMarkdownPreview.prototype.hideReferencedCommands = function ($form) {\n $form.find('.referenced-commands').hide();\n};\n\nMarkdownPreview.prototype.renderReferencedCommands = function (commands, $form) {\n var referencedCommands;\n referencedCommands = $form.find('.referenced-commands');\n if (commands.length > 0) {\n referencedCommands.html(commands);\n referencedCommands.show();\n } else {\n referencedCommands.html('');\n referencedCommands.hide();\n }\n};\n\nmarkdownPreview = new MarkdownPreview();\n\npreviewButtonSelector = '.js-md-preview-button';\nwriteButtonSelector = '.js-md-write-button';\nlastTextareaPreviewed = null;\nvar markdownToolbar = $('.md-header-toolbar');\n\n$.fn.setupMarkdownPreview = function () {\n var $form = $(this);\n $form.find('textarea.markdown-area').on('input', function () {\n markdownPreview.hideReferencedUsers($form);\n });\n};\n\n$(document).on('markdown-preview:show', function (e, $form) {\n if (!$form) {\n return;\n }\n\n lastTextareaPreviewed = $form.find('textarea.markdown-area');\n lastTextareaHeight = lastTextareaPreviewed.height();\n\n // toggle tabs\n $form.find(writeButtonSelector).parent().removeClass('active');\n $form.find(previewButtonSelector).parent().addClass('active');\n\n // toggle content\n $form.find('.md-write-holder').hide();\n $form.find('.md-preview-holder').show();\n markdownToolbar.removeClass('active');\n markdownPreview.showPreview($form);\n});\n\n$(document).on('markdown-preview:hide', function (e, $form) {\n if (!$form) {\n return;\n }\n lastTextareaPreviewed = null;\n\n if (lastTextareaHeight) {\n $form.find('textarea.markdown-area').height(lastTextareaHeight);\n }\n\n // toggle tabs\n $form.find(writeButtonSelector).parent().addClass('active');\n $form.find(previewButtonSelector).parent().removeClass('active');\n\n // toggle content\n $form.find('.md-write-holder').show();\n $form.find('textarea.markdown-area').focus();\n $form.find('.md-preview-holder').hide();\n markdownToolbar.addClass('active');\n\n markdownPreview.hideReferencedCommands($form);\n});\n\n$(document).on('markdown-preview:toggle', function (e, keyboardEvent) {\n var $target;\n $target = $(keyboardEvent.target);\n if ($target.is('textarea.markdown-area')) {\n $(document).triggerHandler('markdown-preview:show', [$target.closest('form')]);\n keyboardEvent.preventDefault();\n } else if (lastTextareaPreviewed) {\n $target = lastTextareaPreviewed;\n $(document).triggerHandler('markdown-preview:hide', [$target.closest('form')]);\n keyboardEvent.preventDefault();\n }\n});\n\n$(document).on('click', previewButtonSelector, function (e) {\n var $form;\n e.preventDefault();\n $form = $(this).closest('form');\n $(document).triggerHandler('markdown-preview:show', [$form]);\n});\n\n$(document).on('click', writeButtonSelector, function (e) {\n var $form;\n e.preventDefault();\n $form = $(this).closest('form');\n $(document).triggerHandler('markdown-preview:hide', [$form]);\n});\n\n/* unused harmony default export */ var _unused_webpack_default_export = (MarkdownPreview);\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\n\n/***/ }),\n\n/***/ \"./projects_dropdown/components/app.vue\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n\n// EXTERNAL MODULE: ./breakpoints.js\nvar breakpoints = __webpack_require__(\"./breakpoints.js\");\n\n// EXTERNAL MODULE: ./projects_dropdown/event_hub.js\nvar event_hub = __webpack_require__(\"./projects_dropdown/event_hub.js\");\n\n// EXTERNAL MODULE: ./vue_shared/components/loading_icon.vue + 2 modules\nvar loading_icon = __webpack_require__(\"./vue_shared/components/loading_icon.vue\");\n\n// EXTERNAL MODULE: ./locale/index.js + 1 modules\nvar locale = __webpack_require__(\"./locale/index.js\");\n\n// EXTERNAL MODULE: ./vue_shared/components/identicon.vue + 2 modules\nvar identicon = __webpack_require__(\"./vue_shared/components/identicon.vue\");\n\n// CONCATENATED MODULE: /opt/gitlab/embedded/service/gitlab-rails/node_modules/babel-loader/lib!/opt/gitlab/embedded/service/gitlab-rails/node_modules/vue-loader/lib/selector.js?type=script&index=0!./projects_dropdown/components/projects_list_item.vue\n\n/* eslint-disable vue/require-default-prop, vue/require-prop-types */\n\n\n/* harmony default export */ var projects_list_item = ({\n components: {\n identicon: identicon[\"a\" /* default */]\n },\n props: {\n matcher: {\n type: String,\n required: false\n },\n projectId: {\n type: Number,\n required: true\n },\n projectName: {\n type: String,\n required: true\n },\n namespace: {\n type: String,\n required: true\n },\n webUrl: {\n type: String,\n required: true\n },\n avatarUrl: {\n required: true,\n validator: function validator(value) {\n return value === null || typeof value === 'string';\n }\n }\n },\n computed: {\n hasAvatar: function hasAvatar() {\n return this.avatarUrl !== null;\n },\n highlightedProjectName: function highlightedProjectName() {\n if (this.matcher) {\n var matcherRegEx = new RegExp(this.matcher, 'gi');\n var matches = this.projectName.match(matcherRegEx);\n\n if (matches && matches.length > 0) {\n return this.projectName.replace(matches[0], '' + matches[0] + '');\n }\n }\n return this.projectName;\n },\n\n /**\n * Smartly truncates project namespace by doing two things;\n * 1. Only include Group names in path by removing project name\n * 2. Only include first and last group names in the path\n * when namespace has more than 2 groups present\n *\n * First part (removal of project name from namespace) can be\n * done from backend but doing so involves migration of\n * existing project namespaces which is not wise thing to do.\n */\n truncatedNamespace: function truncatedNamespace() {\n var namespaceArr = this.namespace.split(' / ');\n namespaceArr.splice(-1, 1);\n var namespace = namespaceArr.join(' / ');\n\n if (namespaceArr.length > 2) {\n namespace = namespaceArr[0] + ' / ... / ' + namespaceArr.pop();\n }\n\n return namespace;\n }\n }\n});\n// CONCATENATED MODULE: /opt/gitlab/embedded/service/gitlab-rails/node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-809bd0d0\",\"hasScoped\":false,\"buble\":{\"transforms\":{}}}!/opt/gitlab/embedded/service/gitlab-rails/node_modules/vue-loader/lib/selector.js?type=template&index=0!./projects_dropdown/components/projects_list_item.vue\nvar render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('li',{staticClass:\"projects-list-item-container\"},[_c('a',{staticClass:\"clearfix\",attrs:{\"href\":_vm.webUrl}},[_c('div',{staticClass:\"project-item-avatar-container\"},[(_vm.hasAvatar)?_c('img',{staticClass:\"avatar s32\",attrs:{\"src\":_vm.avatarUrl}}):_c('identicon',{attrs:{\"size-class\":\"s32\",\"entity-id\":_vm.projectId,\"entity-name\":_vm.projectName}})],1),_vm._v(\" \"),_c('div',{staticClass:\"project-item-metadata-container\"},[_c('div',{staticClass:\"project-title\",attrs:{\"title\":_vm.projectName},domProps:{\"innerHTML\":_vm._s(_vm.highlightedProjectName)}}),_vm._v(\" \"),_c('div',{staticClass:\"project-namespace\",attrs:{\"title\":_vm.namespace}},[_vm._v(_vm._s(_vm.truncatedNamespace))])])])])}\nvar staticRenderFns = []\n\n// EXTERNAL MODULE: /opt/gitlab/embedded/service/gitlab-rails/node_modules/vue-loader/lib/runtime/component-normalizer.js\nvar component_normalizer = __webpack_require__(\"../../../node_modules/vue-loader/lib/runtime/component-normalizer.js\");\n\n// CONCATENATED MODULE: ./projects_dropdown/components/projects_list_item.vue\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\n\nvar Component = Object(component_normalizer[\"a\" /* default */])(\n projects_list_item,\n render,\n staticRenderFns,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\n/* harmony default export */ var components_projects_list_item = (Component.exports);\n\n// CONCATENATED MODULE: /opt/gitlab/embedded/service/gitlab-rails/node_modules/babel-loader/lib!/opt/gitlab/embedded/service/gitlab-rails/node_modules/vue-loader/lib/selector.js?type=script&index=0!./projects_dropdown/components/projects_list_frequent.vue\n\n\n\n\n/* harmony default export */ var projects_list_frequent = ({\n components: {\n projectsListItem: components_projects_list_item\n },\n props: {\n projects: {\n type: Array,\n required: true\n },\n localStorageFailed: {\n type: Boolean,\n required: true\n }\n },\n computed: {\n isListEmpty: function isListEmpty() {\n return this.projects.length === 0;\n },\n listEmptyMessage: function listEmptyMessage() {\n return this.localStorageFailed ? Object(locale[\"e\" /* s__ */])('ProjectsDropdown|This feature requires browser localStorage support') : Object(locale[\"e\" /* s__ */])('ProjectsDropdown|Projects you visit often will appear here');\n }\n }\n});\n// CONCATENATED MODULE: /opt/gitlab/embedded/service/gitlab-rails/node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-16d7450a\",\"hasScoped\":false,\"buble\":{\"transforms\":{}}}!/opt/gitlab/embedded/service/gitlab-rails/node_modules/vue-loader/lib/selector.js?type=template&index=0!./projects_dropdown/components/projects_list_frequent.vue\nvar projects_list_frequent_render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"projects-list-frequent-container\"},[_c('ul',{staticClass:\"list-unstyled\"},[(_vm.isListEmpty)?_c('li',{staticClass:\"section-empty\"},[_vm._v(\"\\n \"+_vm._s(_vm.listEmptyMessage)+\"\\n \")]):_vm._l((_vm.projects),function(project,index){return _c('projects-list-item',{key:index,attrs:{\"project-id\":project.id,\"project-name\":project.name,\"namespace\":project.namespace,\"web-url\":project.webUrl,\"avatar-url\":project.avatarUrl}})})],2)])}\nvar projects_list_frequent_staticRenderFns = []\n\n// CONCATENATED MODULE: ./projects_dropdown/components/projects_list_frequent.vue\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar projects_list_frequent___vue_template_functional__ = false\n/* styles */\nvar projects_list_frequent___vue_styles__ = null\n/* scopeId */\nvar projects_list_frequent___vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar projects_list_frequent___vue_module_identifier__ = null\n\nvar projects_list_frequent_Component = Object(component_normalizer[\"a\" /* default */])(\n projects_list_frequent,\n projects_list_frequent_render,\n projects_list_frequent_staticRenderFns,\n projects_list_frequent___vue_template_functional__,\n projects_list_frequent___vue_styles__,\n projects_list_frequent___vue_scopeId__,\n projects_list_frequent___vue_module_identifier__\n)\n\n/* harmony default export */ var components_projects_list_frequent = (projects_list_frequent_Component.exports);\n\n// CONCATENATED MODULE: /opt/gitlab/embedded/service/gitlab-rails/node_modules/babel-loader/lib!/opt/gitlab/embedded/service/gitlab-rails/node_modules/vue-loader/lib/selector.js?type=script&index=0!./projects_dropdown/components/projects_list_search.vue\n\n\n\n\n/* harmony default export */ var projects_list_search = ({\n components: {\n projectsListItem: components_projects_list_item\n },\n props: {\n matcher: {\n type: String,\n required: true\n },\n projects: {\n type: Array,\n required: true\n },\n searchFailed: {\n type: Boolean,\n required: true\n }\n },\n computed: {\n isListEmpty: function isListEmpty() {\n return this.projects.length === 0;\n },\n listEmptyMessage: function listEmptyMessage() {\n return this.searchFailed ? Object(locale[\"e\" /* s__ */])('ProjectsDropdown|Something went wrong on our end.') : Object(locale[\"e\" /* s__ */])('ProjectsDropdown|Sorry, no projects matched your search');\n }\n }\n});\n// CONCATENATED MODULE: /opt/gitlab/embedded/service/gitlab-rails/node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-8cb67a3a\",\"hasScoped\":false,\"buble\":{\"transforms\":{}}}!/opt/gitlab/embedded/service/gitlab-rails/node_modules/vue-loader/lib/selector.js?type=template&index=0!./projects_dropdown/components/projects_list_search.vue\nvar projects_list_search_render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"projects-list-search-container\"},[_c('ul',{staticClass:\"list-unstyled\"},[(_vm.isListEmpty)?_c('li',{staticClass:\"section-empty\",class:{ 'section-failure': _vm.searchFailed }},[_vm._v(\"\\n \"+_vm._s(_vm.listEmptyMessage)+\"\\n \")]):_vm._l((_vm.projects),function(project,index){return _c('projects-list-item',{key:index,attrs:{\"project-id\":project.id,\"project-name\":project.name,\"namespace\":project.namespace,\"web-url\":project.webUrl,\"avatar-url\":project.avatarUrl,\"matcher\":_vm.matcher}})})],2)])}\nvar projects_list_search_staticRenderFns = []\n\n// CONCATENATED MODULE: ./projects_dropdown/components/projects_list_search.vue\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar projects_list_search___vue_template_functional__ = false\n/* styles */\nvar projects_list_search___vue_styles__ = null\n/* scopeId */\nvar projects_list_search___vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar projects_list_search___vue_module_identifier__ = null\n\nvar projects_list_search_Component = Object(component_normalizer[\"a\" /* default */])(\n projects_list_search,\n projects_list_search_render,\n projects_list_search_staticRenderFns,\n projects_list_search___vue_template_functional__,\n projects_list_search___vue_styles__,\n projects_list_search___vue_scopeId__,\n projects_list_search___vue_module_identifier__\n)\n\n/* harmony default export */ var components_projects_list_search = (projects_list_search_Component.exports);\n\n// EXTERNAL MODULE: /opt/gitlab/embedded/service/gitlab-rails/node_modules/underscore/underscore.js\nvar underscore = __webpack_require__(\"../../../node_modules/underscore/underscore.js\");\nvar underscore_default = /*#__PURE__*/__webpack_require__.n(underscore);\n\n// CONCATENATED MODULE: /opt/gitlab/embedded/service/gitlab-rails/node_modules/babel-loader/lib!/opt/gitlab/embedded/service/gitlab-rails/node_modules/vue-loader/lib/selector.js?type=script&index=0!./projects_dropdown/components/search.vue\n\n\n\n\n/* harmony default export */ var search = ({\n data: function data() {\n return {\n searchQuery: ''\n };\n },\n\n watch: {\n searchQuery: function searchQuery() {\n this.handleInput();\n }\n },\n mounted: function mounted() {\n event_hub[\"a\" /* default */].$on('dropdownOpen', this.setFocus);\n },\n beforeDestroy: function beforeDestroy() {\n event_hub[\"a\" /* default */].$off('dropdownOpen', this.setFocus);\n },\n\n methods: {\n setFocus: function setFocus() {\n this.$refs.search.focus();\n },\n emitSearchEvents: function emitSearchEvents() {\n if (this.searchQuery) {\n event_hub[\"a\" /* default */].$emit('searchProjects', this.searchQuery);\n } else {\n event_hub[\"a\" /* default */].$emit('searchCleared');\n }\n },\n\n /**\n * Callback function within _.debounce is intentionally\n * kept as ES5 `function() {}` instead of ES6 `() => {}`\n * as it otherwise messes up function context\n * and component reference is no longer accessible via `this`\n */\n // eslint-disable-next-line func-names\n handleInput: underscore_default.a.debounce(function () {\n this.emitSearchEvents();\n }, 500)\n }\n});\n// CONCATENATED MODULE: /opt/gitlab/embedded/service/gitlab-rails/node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-93d44b6e\",\"hasScoped\":false,\"buble\":{\"transforms\":{}}}!/opt/gitlab/embedded/service/gitlab-rails/node_modules/vue-loader/lib/selector.js?type=template&index=0!./projects_dropdown/components/search.vue\nvar search_render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"search-input-container hidden-xs\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.searchQuery),expression:\"searchQuery\"}],ref:\"search\",staticClass:\"form-control\",attrs:{\"type\":\"search\",\"placeholder\":_vm.s__('ProjectsDropdown|Search your projects')},domProps:{\"value\":(_vm.searchQuery)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.searchQuery=$event.target.value}}}),_vm._v(\" \"),(!_vm.searchQuery)?_c('i',{staticClass:\"search-icon fa fa-fw fa-search\",attrs:{\"aria-hidden\":\"true\"}}):_vm._e()])}\nvar search_staticRenderFns = []\n\n// CONCATENATED MODULE: ./projects_dropdown/components/search.vue\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar search___vue_template_functional__ = false\n/* styles */\nvar search___vue_styles__ = null\n/* scopeId */\nvar search___vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar search___vue_module_identifier__ = null\n\nvar search_Component = Object(component_normalizer[\"a\" /* default */])(\n search,\n search_render,\n search_staticRenderFns,\n search___vue_template_functional__,\n search___vue_styles__,\n search___vue_scopeId__,\n search___vue_module_identifier__\n)\n\n/* harmony default export */ var components_search = (search_Component.exports);\n\n// CONCATENATED MODULE: /opt/gitlab/embedded/service/gitlab-rails/node_modules/babel-loader/lib!/opt/gitlab/embedded/service/gitlab-rails/node_modules/vue-loader/lib/selector.js?type=script&index=0!./projects_dropdown/components/app.vue\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ var app = ({\n components: {\n search: components_search,\n loadingIcon: loading_icon[\"a\" /* default */],\n projectsListFrequent: components_projects_list_frequent,\n projectsListSearch: components_projects_list_search\n },\n props: {\n currentProject: {\n type: Object,\n required: true\n },\n store: {\n type: Object,\n required: true\n },\n service: {\n type: Object,\n required: true\n }\n },\n data: function data() {\n return {\n isLoadingProjects: false,\n isFrequentsListVisible: false,\n isSearchListVisible: false,\n isLocalStorageFailed: false,\n isSearchFailed: false,\n searchQuery: ''\n };\n },\n\n computed: {\n frequentProjects: function frequentProjects() {\n return this.store.getFrequentProjects();\n },\n searchProjects: function searchProjects() {\n return this.store.getSearchedProjects();\n }\n },\n created: function created() {\n if (this.currentProject.id) {\n this.logCurrentProjectAccess();\n }\n\n event_hub[\"a\" /* default */].$on('dropdownOpen', this.fetchFrequentProjects);\n event_hub[\"a\" /* default */].$on('searchProjects', this.fetchSearchedProjects);\n event_hub[\"a\" /* default */].$on('searchCleared', this.handleSearchClear);\n event_hub[\"a\" /* default */].$on('searchFailed', this.handleSearchFailure);\n },\n beforeDestroy: function beforeDestroy() {\n event_hub[\"a\" /* default */].$off('dropdownOpen', this.fetchFrequentProjects);\n event_hub[\"a\" /* default */].$off('searchProjects', this.fetchSearchedProjects);\n event_hub[\"a\" /* default */].$off('searchCleared', this.handleSearchClear);\n event_hub[\"a\" /* default */].$off('searchFailed', this.handleSearchFailure);\n },\n\n methods: {\n toggleFrequentProjectsList: function toggleFrequentProjectsList(state) {\n this.isLoadingProjects = !state;\n this.isSearchListVisible = !state;\n this.isFrequentsListVisible = state;\n },\n toggleSearchProjectsList: function toggleSearchProjectsList(state) {\n this.isLoadingProjects = !state;\n this.isFrequentsListVisible = !state;\n this.isSearchListVisible = state;\n },\n toggleLoader: function toggleLoader(state) {\n this.isFrequentsListVisible = !state;\n this.isSearchListVisible = !state;\n this.isLoadingProjects = state;\n },\n fetchFrequentProjects: function fetchFrequentProjects() {\n var screenSize = breakpoints[\"a\" /* default */].getBreakpointSize();\n if (this.searchQuery && screenSize !== 'sm' && screenSize !== 'xs') {\n this.toggleSearchProjectsList(true);\n } else {\n this.toggleLoader(true);\n this.isLocalStorageFailed = false;\n var projects = this.service.getFrequentProjects();\n if (projects) {\n this.toggleFrequentProjectsList(true);\n this.store.setFrequentProjects(projects);\n } else {\n this.isLocalStorageFailed = true;\n this.toggleFrequentProjectsList(true);\n this.store.setFrequentProjects([]);\n }\n }\n },\n fetchSearchedProjects: function fetchSearchedProjects(searchQuery) {\n var _this = this;\n\n this.searchQuery = searchQuery;\n this.toggleLoader(true);\n this.service.getSearchedProjects(this.searchQuery).then(function (res) {\n return res.json();\n }).then(function (results) {\n _this.toggleSearchProjectsList(true);\n _this.store.setSearchedProjects(results);\n }).catch(function () {\n _this.isSearchFailed = true;\n _this.toggleSearchProjectsList(true);\n });\n },\n logCurrentProjectAccess: function logCurrentProjectAccess() {\n this.service.logProjectAccess(this.currentProject);\n },\n handleSearchClear: function handleSearchClear() {\n this.searchQuery = '';\n this.toggleFrequentProjectsList(true);\n this.store.clearSearchedProjects();\n },\n handleSearchFailure: function handleSearchFailure() {\n this.isSearchFailed = true;\n this.toggleSearchProjectsList(true);\n }\n }\n});\n// CONCATENATED MODULE: /opt/gitlab/embedded/service/gitlab-rails/node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-20d5e68f\",\"hasScoped\":false,\"buble\":{\"transforms\":{}}}!/opt/gitlab/embedded/service/gitlab-rails/node_modules/vue-loader/lib/selector.js?type=template&index=0!./projects_dropdown/components/app.vue\nvar app_render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('search'),_vm._v(\" \"),(_vm.isLoadingProjects)?_c('loading-icon',{staticClass:\"loading-animation prepend-top-20\",attrs:{\"size\":\"2\",\"label\":_vm.s__('ProjectsDropdown|Loading projects')}}):_vm._e(),_vm._v(\" \"),(_vm.isFrequentsListVisible)?_c('div',{staticClass:\"section-header\"},[_vm._v(\"\\n \"+_vm._s(_vm.s__('ProjectsDropdown|Frequently visited'))+\"\\n \")]):_vm._e(),_vm._v(\" \"),(_vm.isFrequentsListVisible)?_c('projects-list-frequent',{attrs:{\"local-storage-failed\":_vm.isLocalStorageFailed,\"projects\":_vm.frequentProjects}}):_vm._e(),_vm._v(\" \"),(_vm.isSearchListVisible)?_c('projects-list-search',{attrs:{\"search-failed\":_vm.isSearchFailed,\"matcher\":_vm.searchQuery,\"projects\":_vm.searchProjects}}):_vm._e()],1)}\nvar app_staticRenderFns = []\n\n// CONCATENATED MODULE: ./projects_dropdown/components/app.vue\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar app___vue_template_functional__ = false\n/* styles */\nvar app___vue_styles__ = null\n/* scopeId */\nvar app___vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar app___vue_module_identifier__ = null\n\nvar app_Component = Object(component_normalizer[\"a\" /* default */])(\n app,\n app_render,\n app_staticRenderFns,\n app___vue_template_functional__,\n app___vue_styles__,\n app___vue_scopeId__,\n app___vue_module_identifier__\n)\n\n/* harmony default export */ var components_app = __webpack_exports__[\"a\"] = (app_Component.exports);\n\n\n/***/ }),\n\n/***/ \"./projects_dropdown/event_hub.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_vue__ = __webpack_require__(\"../../../node_modules/vue/dist/vue.esm.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (new __WEBPACK_IMPORTED_MODULE_0_vue__[\"a\" /* default */]());\n\n/***/ }),\n\n/***/ \"./projects_dropdown/index.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_vue__ = __webpack_require__(\"../../../node_modules/vue/dist/vue.esm.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__vue_shared_translate__ = __webpack_require__(\"./vue_shared/translate.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__event_hub__ = __webpack_require__(\"./projects_dropdown/event_hub.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__service_projects_service__ = __webpack_require__(\"./projects_dropdown/service/projects_service.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__store_projects_store__ = __webpack_require__(\"./projects_dropdown/store/projects_store.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__components_app_vue__ = __webpack_require__(\"./projects_dropdown/components/app.vue\");\n\n\n\n\n\n\n\n\n\n__WEBPACK_IMPORTED_MODULE_0_vue__[\"a\" /* default */].use(__WEBPACK_IMPORTED_MODULE_1__vue_shared_translate__[\"a\" /* default */]);\n\ndocument.addEventListener('DOMContentLoaded', function () {\n var el = document.getElementById('js-projects-dropdown');\n var navEl = document.getElementById('nav-projects-dropdown');\n\n // Don't do anything if element doesn't exist (No projects dropdown)\n // This is for when the user accesses GitLab without logging in\n if (!el || !navEl) {\n return;\n }\n\n $(navEl).on('shown.bs.dropdown', function () {\n __WEBPACK_IMPORTED_MODULE_2__event_hub__[\"a\" /* default */].$emit('dropdownOpen');\n });\n\n // eslint-disable-next-line no-new\n new __WEBPACK_IMPORTED_MODULE_0_vue__[\"a\" /* default */]({\n el: el,\n components: {\n projectsDropdownApp: __WEBPACK_IMPORTED_MODULE_5__components_app_vue__[\"a\" /* default */]\n },\n data: function data() {\n var dataset = this.$options.el.dataset;\n var store = new __WEBPACK_IMPORTED_MODULE_4__store_projects_store__[\"a\" /* default */]();\n var service = new __WEBPACK_IMPORTED_MODULE_3__service_projects_service__[\"a\" /* default */](dataset.userName);\n\n var project = {\n id: Number(dataset.projectId),\n name: dataset.projectName,\n namespace: dataset.projectNamespace,\n webUrl: dataset.projectWebUrl,\n avatarUrl: dataset.projectAvatarUrl || null,\n lastAccessedOn: Date.now()\n };\n\n return {\n store: store,\n service: service,\n state: store.state,\n currentUserName: dataset.userName,\n currentProject: project\n };\n },\n render: function render(createElement) {\n return createElement('projects-dropdown-app', {\n props: {\n currentUserName: this.currentUserName,\n currentProject: this.currentProject,\n store: this.store,\n service: this.service\n }\n });\n }\n });\n});\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\n\n/***/ }),\n\n/***/ \"./projects_dropdown/service/projects_service.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n\n// EXTERNAL MODULE: /opt/gitlab/embedded/service/gitlab-rails/node_modules/underscore/underscore.js\nvar underscore = __webpack_require__(\"../../../node_modules/underscore/underscore.js\");\nvar underscore_default = /*#__PURE__*/__webpack_require__.n(underscore);\n\n// EXTERNAL MODULE: /opt/gitlab/embedded/service/gitlab-rails/node_modules/vue/dist/vue.esm.js\nvar vue_esm = __webpack_require__(\"../../../node_modules/vue/dist/vue.esm.js\");\n\n// EXTERNAL MODULE: /opt/gitlab/embedded/service/gitlab-rails/node_modules/vue-resource/dist/vue-resource.esm.js\nvar vue_resource_esm = __webpack_require__(\"../../../node_modules/vue-resource/dist/vue-resource.esm.js\");\n\n// EXTERNAL MODULE: ./breakpoints.js\nvar breakpoints = __webpack_require__(\"./breakpoints.js\");\n\n// EXTERNAL MODULE: ./api.js\nvar api = __webpack_require__(\"./api.js\");\n\n// EXTERNAL MODULE: ./lib/utils/accessor.js\nvar accessor = __webpack_require__(\"./lib/utils/accessor.js\");\n\n// CONCATENATED MODULE: ./projects_dropdown/constants.js\nvar FREQUENT_PROJECTS = {\n MAX_COUNT: 20,\n LIST_COUNT_DESKTOP: 5,\n LIST_COUNT_MOBILE: 3,\n ELIGIBLE_FREQUENCY: 3\n};\n\nvar HOUR_IN_MS = 3600000;\n\nvar STORAGE_KEY = 'frequent-projects';\n// CONCATENATED MODULE: ./projects_dropdown/service/projects_service.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\n\n\n\n\n\n\nvue_esm[\"a\" /* default */].use(vue_resource_esm[\"a\" /* default */]);\n\nvar projects_service_ProjectsService = function () {\n function ProjectsService(currentUserName) {\n _classCallCheck(this, ProjectsService);\n\n this.isLocalStorageAvailable = accessor[\"a\" /* default */].isLocalStorageAccessSafe();\n this.currentUserName = currentUserName;\n this.storageKey = this.currentUserName + '/' + STORAGE_KEY;\n this.projectsPath = vue_esm[\"a\" /* default */].resource(api[\"a\" /* default */].buildUrl(api[\"a\" /* default */].projectsPath));\n }\n\n _createClass(ProjectsService, [{\n key: 'getSearchedProjects',\n value: function getSearchedProjects(searchQuery) {\n return this.projectsPath.get({\n simple: true,\n per_page: 20,\n membership: !!gon.current_user_id,\n order_by: 'last_activity_at',\n search: searchQuery\n });\n }\n }, {\n key: 'getFrequentProjects',\n value: function getFrequentProjects() {\n if (this.isLocalStorageAvailable) {\n return this.getTopFrequentProjects();\n }\n return null;\n }\n }, {\n key: 'logProjectAccess',\n value: function logProjectAccess(project) {\n var matchFound = false;\n var storedFrequentProjects = void 0;\n\n if (this.isLocalStorageAvailable) {\n var storedRawProjects = localStorage.getItem(this.storageKey);\n\n // Check if there's any frequent projects list set\n if (!storedRawProjects) {\n // No frequent projects list set, set one up.\n storedFrequentProjects = [];\n storedFrequentProjects.push(_extends({}, project, { frequency: 1 }));\n } else {\n // Check if project is already present in frequents list\n // When found, update metadata of it.\n storedFrequentProjects = JSON.parse(storedRawProjects).map(function (projectItem) {\n if (projectItem.id === project.id) {\n matchFound = true;\n var diff = Math.abs(project.lastAccessedOn - projectItem.lastAccessedOn) / HOUR_IN_MS;\n var updatedProject = _extends({}, project, {\n frequency: projectItem.frequency,\n lastAccessedOn: projectItem.lastAccessedOn\n });\n\n // Check if duration since last access of this project\n // is over an hour\n if (diff > 1) {\n return _extends({}, updatedProject, {\n frequency: updatedProject.frequency + 1,\n lastAccessedOn: Date.now()\n });\n }\n\n return _extends({}, updatedProject);\n }\n\n return projectItem;\n });\n\n // Check whether currently logged project is present in frequents list\n if (!matchFound) {\n // We always keep size of frequents collection to 20 projects\n // out of which only 5 projects with\n // highest value of `frequency` and most recent `lastAccessedOn`\n // are shown in projects dropdown\n if (storedFrequentProjects.length === FREQUENT_PROJECTS.MAX_COUNT) {\n storedFrequentProjects.shift(); // Remove an item from head of array\n }\n\n storedFrequentProjects.push(_extends({}, project, { frequency: 1 }));\n }\n }\n\n localStorage.setItem(this.storageKey, JSON.stringify(storedFrequentProjects));\n }\n }\n }, {\n key: 'getTopFrequentProjects',\n value: function getTopFrequentProjects() {\n var storedFrequentProjects = JSON.parse(localStorage.getItem(this.storageKey));\n var frequentProjectsCount = FREQUENT_PROJECTS.LIST_COUNT_DESKTOP;\n\n if (!storedFrequentProjects) {\n return [];\n }\n\n if (breakpoints[\"a\" /* default */].getBreakpointSize() === 'sm' || breakpoints[\"a\" /* default */].getBreakpointSize() === 'xs') {\n frequentProjectsCount = FREQUENT_PROJECTS.LIST_COUNT_MOBILE;\n }\n\n var frequentProjects = storedFrequentProjects.filter(function (project) {\n return project.frequency >= FREQUENT_PROJECTS.ELIGIBLE_FREQUENCY;\n });\n\n // Sort all frequent projects in decending order of frequency\n // and then by lastAccessedOn with recent most first\n frequentProjects.sort(function (projectA, projectB) {\n if (projectA.frequency < projectB.frequency) {\n return 1;\n } else if (projectA.frequency > projectB.frequency) {\n return -1;\n } else if (projectA.lastAccessedOn < projectB.lastAccessedOn) {\n return 1;\n } else if (projectA.lastAccessedOn > projectB.lastAccessedOn) {\n return -1;\n }\n\n return 0;\n });\n\n return underscore_default.a.first(frequentProjects, frequentProjectsCount);\n }\n }]);\n\n return ProjectsService;\n}();\n\n/* harmony default export */ var projects_service = __webpack_exports__[\"a\"] = (projects_service_ProjectsService);\n\n/***/ }),\n\n/***/ \"./projects_dropdown/store/projects_store.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\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\nvar ProjectsStore = function () {\n function ProjectsStore() {\n _classCallCheck(this, ProjectsStore);\n\n this.state = {};\n this.state.frequentProjects = [];\n this.state.searchedProjects = [];\n }\n\n _createClass(ProjectsStore, [{\n key: \"setFrequentProjects\",\n value: function setFrequentProjects(rawProjects) {\n this.state.frequentProjects = rawProjects;\n }\n }, {\n key: \"getFrequentProjects\",\n value: function getFrequentProjects() {\n return this.state.frequentProjects;\n }\n }, {\n key: \"setSearchedProjects\",\n value: function setSearchedProjects(rawProjects) {\n this.state.searchedProjects = rawProjects.map(function (rawProject) {\n return {\n id: rawProject.id,\n name: rawProject.name,\n namespace: rawProject.name_with_namespace,\n webUrl: rawProject.web_url,\n avatarUrl: rawProject.avatar_url\n };\n });\n }\n }, {\n key: \"getSearchedProjects\",\n value: function getSearchedProjects() {\n return this.state.searchedProjects;\n }\n }, {\n key: \"clearSearchedProjects\",\n value: function clearSearchedProjects() {\n this.state.searchedProjects = [];\n }\n }]);\n\n return ProjectsStore;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (ProjectsStore);\n\n/***/ }),\n\n/***/ \"./render_gfm.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__render_math__ = __webpack_require__(\"./render_math.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__render_mermaid__ = __webpack_require__(\"./render_mermaid.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__syntax_highlight__ = __webpack_require__(\"./syntax_highlight.js\");\n\n\n\n\n// Render Gitlab flavoured Markdown\n//\n// Delegates to syntax highlight and render math & mermaid diagrams.\n//\n$.fn.renderGFM = function renderGFM() {\n Object(__WEBPACK_IMPORTED_MODULE_2__syntax_highlight__[\"a\" /* default */])(this.find('.js-syntax-highlight'));\n Object(__WEBPACK_IMPORTED_MODULE_0__render_math__[\"a\" /* default */])(this.find('.js-render-math'));\n Object(__WEBPACK_IMPORTED_MODULE_1__render_mermaid__[\"a\" /* default */])(this.find('.js-render-mermaid'));\n return this;\n};\n\n$(function () {\n return $('body').renderGFM();\n});\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\n\n/***/ }),\n\n/***/ \"./render_math.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {/* harmony export (immutable) */ __webpack_exports__[\"a\"] = renderMath;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__locale__ = __webpack_require__(\"./locale/index.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__flash__ = __webpack_require__(\"./flash.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\n\n\n\n// Renders math using KaTeX in any element with the\n// `js-render-math` class\n//\n// ### Example Markup\n//\n// \n//\n\n// Loop over all math elements and render math\nfunction renderWithKaTeX(elements, katex) {\n elements.each(function katexElementsLoop() {\n var mathNode = $('');\n var $this = $(this);\n\n var display = $this.attr('data-math-style') === 'display';\n try {\n katex.render($this.text(), mathNode.get(0), { displayMode: display, throwOnError: false });\n mathNode.insertAfter($this);\n $this.remove();\n } catch (err) {\n throw err;\n }\n });\n}\n\nfunction renderMath($els) {\n if (!$els.length) return;\n Promise.all([__webpack_require__.e/* import() */(\"katex\").then(__webpack_require__.bind(null, \"../../../node_modules/katex/dist/katex.js\")), __webpack_require__.e/* import() */(\"katex\").then(__webpack_require__.bind(null, \"../../../node_modules/katex/dist/katex.css\"))]).then(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 1),\n katex = _ref2[0];\n\n renderWithKaTeX($els, katex);\n }).catch(function () {\n return Object(__WEBPACK_IMPORTED_MODULE_1__flash__[\"a\" /* default */])(Object(__WEBPACK_IMPORTED_MODULE_0__locale__[\"a\" /* __ */])('An error occurred while rendering KaTeX'));\n });\n}\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\n\n/***/ }),\n\n/***/ \"./render_mermaid.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = renderMermaid;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__flash__ = __webpack_require__(\"./flash.js\");\n// Renders diagrams and flowcharts from text using Mermaid in any element with the\n// `js-render-mermaid` class.\n//\n// Example markup:\n//\n//
    \n//  graph TD;\n//    A-- > B;\n//    A-- > C;\n//    B-- > D;\n//    C-- > D;\n// 
    \n//\n\n\n\nfunction renderMermaid($els) {\n if (!$els.length) return;\n\n __webpack_require__.e/* import() */(\"mermaid\").then(__webpack_require__.bind(null, \"../../../node_modules/blackst0ne-mermaid/dist/mermaid.core.js\")).then(function (mermaid) {\n mermaid.initialize({\n // mermaid core options\n mermaid: {\n startOnLoad: false\n },\n // mermaidAPI options\n theme: 'neutral'\n });\n\n $els.each(function (i, el) {\n var source = el.textContent;\n\n // Remove any extra spans added by the backend syntax highlighting.\n Object.assign(el, { textContent: source });\n\n mermaid.init(undefined, el, function (id) {\n var svg = document.getElementById(id);\n\n svg.classList.add('mermaid');\n\n // pre > code > svg\n svg.closest('pre').replaceWith(svg);\n\n // We need to add the original source into the DOM to allow Copy-as-GFM\n // to access it.\n var sourceEl = document.createElement('text');\n sourceEl.classList.add('source');\n sourceEl.setAttribute('display', 'none');\n sourceEl.textContent = source;\n\n svg.appendChild(sourceEl);\n });\n });\n }).catch(function (err) {\n Object(__WEBPACK_IMPORTED_MODULE_0__flash__[\"a\" /* default */])('Can\\'t load mermaid module: ' + err);\n });\n}\n\n/***/ }),\n\n/***/ \"./search_autocomplete.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__filtered_search_dropdown_utils__ = __webpack_require__(\"./filtered_search/dropdown_utils.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__lib_utils_common_utils__ = __webpack_require__(\"./lib/utils/common_utils.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-return-assign, one-var, no-var, no-underscore-dangle, one-var-declaration-per-line, no-unused-vars, no-cond-assign, consistent-return, object-shorthand, prefer-arrow-callback, func-names, space-before-function-paren, prefer-template, quotes, class-methods-use-this, no-sequences, wrap-iife, no-lonely-if, no-else-return, no-param-reassign, vars-on-top, max-len */\n\n\n\n\n/**\n * Search input in top navigation bar.\n * On click, opens a dropdown\n * As the user types it filters the results\n * When the user clicks `x` button it cleans the input and closes the dropdown.\n */\n\nvar KEYCODE = {\n ESCAPE: 27,\n BACKSPACE: 8,\n ENTER: 13,\n UP: 38,\n DOWN: 40\n};\n\nfunction setSearchOptions() {\n var $projectOptionsDataEl = $('.js-search-project-options');\n var $groupOptionsDataEl = $('.js-search-group-options');\n var $dashboardOptionsDataEl = $('.js-search-dashboard-options');\n\n if ($projectOptionsDataEl.length) {\n gl.projectOptions = gl.projectOptions || {};\n\n var projectPath = $projectOptionsDataEl.data('projectPath');\n\n gl.projectOptions[projectPath] = {\n name: $projectOptionsDataEl.data('name'),\n issuesPath: $projectOptionsDataEl.data('issuesPath'),\n issuesDisabled: $projectOptionsDataEl.data('issuesDisabled'),\n mrPath: $projectOptionsDataEl.data('mrPath')\n };\n }\n\n if ($groupOptionsDataEl.length) {\n gl.groupOptions = gl.groupOptions || {};\n\n var groupPath = $groupOptionsDataEl.data('groupPath');\n\n gl.groupOptions[groupPath] = {\n name: $groupOptionsDataEl.data('name'),\n issuesPath: $groupOptionsDataEl.data('issuesPath'),\n mrPath: $groupOptionsDataEl.data('mrPath')\n };\n }\n\n if ($dashboardOptionsDataEl.length) {\n gl.dashboardOptions = {\n issuesPath: $dashboardOptionsDataEl.data('issuesPath'),\n mrPath: $dashboardOptionsDataEl.data('mrPath')\n };\n }\n}\n\nvar SearchAutocomplete = function () {\n function SearchAutocomplete() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n wrap = _ref.wrap,\n optsEl = _ref.optsEl,\n autocompletePath = _ref.autocompletePath,\n projectId = _ref.projectId,\n projectRef = _ref.projectRef;\n\n _classCallCheck(this, SearchAutocomplete);\n\n setSearchOptions();\n this.bindEventContext();\n this.wrap = wrap || $('.search');\n this.optsEl = optsEl || this.wrap.find('.search-autocomplete-opts');\n this.autocompletePath = autocompletePath || this.optsEl.data('autocompletePath');\n this.projectId = projectId || this.optsEl.data('autocompleteProjectId') || '';\n this.projectRef = projectRef || this.optsEl.data('autocompleteProjectRef') || '';\n this.dropdown = this.wrap.find('.dropdown');\n this.dropdownToggle = this.wrap.find('.js-dropdown-search-toggle');\n this.dropdownContent = this.dropdown.find('.dropdown-content');\n this.locationBadgeEl = this.getElement('.location-badge');\n this.scopeInputEl = this.getElement('#scope');\n this.searchInput = this.getElement('.search-input');\n this.projectInputEl = this.getElement('#search_project_id');\n this.groupInputEl = this.getElement('#group_id');\n this.searchCodeInputEl = this.getElement('#search_code');\n this.repositoryInputEl = this.getElement('#repository_ref');\n this.clearInput = this.getElement('.js-clear-input');\n this.saveOriginalState();\n\n // Only when user is logged in\n if (gon.current_user_id) {\n this.createAutocomplete();\n }\n\n this.searchInput.addClass('disabled');\n this.saveTextLength();\n this.bindEvents();\n this.dropdownToggle.dropdown();\n }\n\n // Finds an element inside wrapper element\n\n\n _createClass(SearchAutocomplete, [{\n key: 'bindEventContext',\n value: function bindEventContext() {\n this.onSearchInputBlur = this.onSearchInputBlur.bind(this);\n this.onClearInputClick = this.onClearInputClick.bind(this);\n this.onSearchInputFocus = this.onSearchInputFocus.bind(this);\n this.onSearchInputKeyUp = this.onSearchInputKeyUp.bind(this);\n this.onSearchInputKeyDown = this.onSearchInputKeyDown.bind(this);\n }\n }, {\n key: 'getElement',\n value: function getElement(selector) {\n return this.wrap.find(selector);\n }\n }, {\n key: 'saveOriginalState',\n value: function saveOriginalState() {\n return this.originalState = this.serializeState();\n }\n }, {\n key: 'saveTextLength',\n value: function saveTextLength() {\n return this.lastTextLength = this.searchInput.val().length;\n }\n }, {\n key: 'createAutocomplete',\n value: function createAutocomplete() {\n return this.searchInput.glDropdown({\n filterInputBlur: false,\n filterable: true,\n filterRemote: true,\n highlight: true,\n enterCallback: false,\n filterInput: 'input#search',\n search: {\n fields: ['text']\n },\n id: this.getSearchText,\n data: this.getData.bind(this),\n selectable: true,\n clicked: this.onClick.bind(this)\n });\n }\n }, {\n key: 'getSearchText',\n value: function getSearchText(selectedObject, el) {\n return selectedObject.id ? selectedObject.text : '';\n }\n }, {\n key: 'getData',\n value: function getData(term, callback) {\n var _this = this;\n\n if (!term) {\n var contents = this.getCategoryContents();\n if (contents) {\n this.searchInput.data('glDropdown').filter.options.callback(contents);\n this.enableAutocomplete();\n }\n return;\n }\n\n // Prevent multiple ajax calls\n if (this.loadingSuggestions) {\n return;\n }\n\n this.loadingSuggestions = true;\n\n return __WEBPACK_IMPORTED_MODULE_0__lib_utils_axios_utils__[\"a\" /* default */].get(this.autocompletePath, {\n params: {\n project_id: this.projectId,\n project_ref: this.projectRef,\n term: term\n }\n }).then(function (response) {\n // Hide dropdown menu if no suggestions returns\n if (!response.data.length) {\n _this.disableAutocomplete();\n return;\n }\n\n var data = [];\n // List results\n var firstCategory = true;\n var lastCategory = void 0;\n for (var i = 0, len = response.data.length; i < len; i += 1) {\n var suggestion = response.data[i];\n // Add group header before list each group\n if (lastCategory !== suggestion.category) {\n if (!firstCategory) {\n data.push('separator');\n }\n if (firstCategory) {\n firstCategory = false;\n }\n data.push({\n header: suggestion.category\n });\n lastCategory = suggestion.category;\n }\n data.push({\n id: suggestion.category.toLowerCase() + '-' + suggestion.id,\n category: suggestion.category,\n text: suggestion.label,\n url: suggestion.url\n });\n }\n // Add option to proceed with the search\n if (data.length) {\n data.push('separator');\n data.push({\n text: 'Result name contains \"' + term + '\"',\n url: '/search?search=' + term + '&project_id=' + _this.projectInputEl.val() + '&group_id=' + _this.groupInputEl.val()\n });\n }\n\n callback(data);\n\n _this.loadingSuggestions = false;\n }).catch(function () {\n _this.loadingSuggestions = false;\n });\n }\n }, {\n key: 'getCategoryContents',\n value: function getCategoryContents() {\n var userId = gon.current_user_id;\n var userName = gon.current_username;\n var _gl = gl,\n projectOptions = _gl.projectOptions,\n groupOptions = _gl.groupOptions,\n dashboardOptions = _gl.dashboardOptions;\n\n // Get options\n\n var options = void 0;\n if (Object(__WEBPACK_IMPORTED_MODULE_2__lib_utils_common_utils__[\"p\" /* isInGroupsPage */])() && groupOptions) {\n options = groupOptions[Object(__WEBPACK_IMPORTED_MODULE_2__lib_utils_common_utils__[\"g\" /* getGroupSlug */])()];\n } else if (Object(__WEBPACK_IMPORTED_MODULE_2__lib_utils_common_utils__[\"s\" /* isInProjectPage */])() && projectOptions) {\n options = projectOptions[Object(__WEBPACK_IMPORTED_MODULE_2__lib_utils_common_utils__[\"j\" /* getProjectSlug */])()];\n } else if (dashboardOptions) {\n options = dashboardOptions;\n }\n\n var _options = options,\n issuesPath = _options.issuesPath,\n mrPath = _options.mrPath,\n name = _options.name,\n issuesDisabled = _options.issuesDisabled;\n\n var baseItems = [];\n\n if (name) {\n baseItems.push({\n header: '' + name\n });\n }\n\n var issueItems = [{\n text: 'Issues assigned to me',\n url: issuesPath + '/?assignee_username=' + userName\n }, {\n text: \"Issues I've created\",\n url: issuesPath + '/?author_username=' + userName\n }];\n var mergeRequestItems = [{\n text: 'Merge requests assigned to me',\n url: mrPath + '/?assignee_username=' + userName\n }, {\n text: \"Merge requests I've created\",\n url: mrPath + '/?author_username=' + userName\n }];\n\n var items = void 0;\n if (issuesDisabled) {\n items = baseItems.concat(mergeRequestItems);\n } else {\n items = baseItems.concat.apply(baseItems, issueItems.concat(['separator'], mergeRequestItems));\n }\n return items;\n }\n }, {\n key: 'serializeState',\n value: function serializeState() {\n return {\n // Search Criteria\n search_project_id: this.projectInputEl.val(),\n group_id: this.groupInputEl.val(),\n search_code: this.searchCodeInputEl.val(),\n repository_ref: this.repositoryInputEl.val(),\n scope: this.scopeInputEl.val(),\n // Location badge\n _location: this.locationBadgeEl.text()\n };\n }\n }, {\n key: 'bindEvents',\n value: function bindEvents() {\n var _this2 = this;\n\n this.searchInput.on('keydown', this.onSearchInputKeyDown);\n this.searchInput.on('keyup', this.onSearchInputKeyUp);\n this.searchInput.on('focus', this.onSearchInputFocus);\n this.searchInput.on('blur', this.onSearchInputBlur);\n this.clearInput.on('click', this.onClearInputClick);\n this.locationBadgeEl.on('click', function () {\n return _this2.searchInput.focus();\n });\n }\n }, {\n key: 'enableAutocomplete',\n value: function enableAutocomplete() {\n // No need to enable anything if user is not logged in\n if (!gon.current_user_id) {\n return;\n }\n\n // If the dropdown is closed, we'll open it\n if (!this.dropdown.hasClass('open')) {\n this.loadingSuggestions = false;\n this.dropdownToggle.dropdown('toggle');\n return this.searchInput.removeClass('disabled');\n }\n }\n\n // Saves last length of the entered text\n\n }, {\n key: 'onSearchInputKeyDown',\n value: function onSearchInputKeyDown() {\n return this.saveTextLength();\n }\n }, {\n key: 'onSearchInputKeyUp',\n value: function onSearchInputKeyUp(e) {\n switch (e.keyCode) {\n case KEYCODE.BACKSPACE:\n // when trying to remove the location badge\n if (this.lastTextLength === 0 && this.badgePresent()) {\n this.removeLocationBadge();\n }\n // When removing the last character and no badge is present\n if (this.lastTextLength === 1) {\n this.disableAutocomplete();\n }\n // When removing any character from existin value\n if (this.lastTextLength > 1) {\n this.enableAutocomplete();\n }\n break;\n case KEYCODE.ESCAPE:\n this.restoreOriginalState();\n break;\n case KEYCODE.ENTER:\n this.disableAutocomplete();\n break;\n case KEYCODE.UP:\n case KEYCODE.DOWN:\n return;\n default:\n // Handle the case when deleting the input value other than backspace\n // e.g. Pressing ctrl + backspace or ctrl + x\n if (this.searchInput.val() === '') {\n this.disableAutocomplete();\n } else {\n // We should display the menu only when input is not empty\n if (e.keyCode !== KEYCODE.ENTER) {\n this.enableAutocomplete();\n }\n }\n }\n this.wrap.toggleClass('has-value', !!e.target.value);\n }\n }, {\n key: 'onSearchInputFocus',\n value: function onSearchInputFocus() {\n this.isFocused = true;\n this.wrap.addClass('search-active');\n if (this.getValue() === '') {\n return this.getData();\n }\n }\n }, {\n key: 'getValue',\n value: function getValue() {\n return this.searchInput.val();\n }\n }, {\n key: 'onClearInputClick',\n value: function onClearInputClick(e) {\n e.preventDefault();\n this.wrap.toggleClass('has-value', !!e.target.value);\n return this.searchInput.val('').focus();\n }\n }, {\n key: 'onSearchInputBlur',\n value: function onSearchInputBlur(e) {\n this.isFocused = false;\n this.wrap.removeClass('search-active');\n // If input is blank then restore state\n if (this.searchInput.val() === '') {\n return this.restoreOriginalState();\n }\n }\n }, {\n key: 'addLocationBadge',\n value: function addLocationBadge(item) {\n var badgeText, category, value;\n category = item.category != null ? item.category + \": \" : '';\n value = item.value != null ? item.value : '';\n badgeText = \"\" + category + value;\n this.locationBadgeEl.text(badgeText).show();\n return this.wrap.addClass('has-location-badge');\n }\n }, {\n key: 'hasLocationBadge',\n value: function hasLocationBadge() {\n return this.wrap.is('.has-location-badge');\n }\n }, {\n key: 'restoreOriginalState',\n value: function restoreOriginalState() {\n var i, input, inputs, len;\n inputs = Object.keys(this.originalState);\n for (i = 0, len = inputs.length; i < len; i += 1) {\n input = inputs[i];\n this.getElement(\"#\" + input).val(this.originalState[input]);\n }\n if (this.originalState._location === '') {\n return this.locationBadgeEl.hide();\n } else {\n return this.addLocationBadge({\n value: this.originalState._location\n });\n }\n }\n }, {\n key: 'badgePresent',\n value: function badgePresent() {\n return this.locationBadgeEl.length;\n }\n }, {\n key: 'resetSearchState',\n value: function resetSearchState() {\n var i, input, inputs, len, results;\n inputs = Object.keys(this.originalState);\n results = [];\n for (i = 0, len = inputs.length; i < len; i += 1) {\n input = inputs[i];\n // _location isnt a input\n if (input === '_location') {\n break;\n }\n results.push(this.getElement(\"#\" + input).val(''));\n }\n return results;\n }\n }, {\n key: 'removeLocationBadge',\n value: function removeLocationBadge() {\n this.locationBadgeEl.hide();\n this.resetSearchState();\n this.wrap.removeClass('has-location-badge');\n return this.disableAutocomplete();\n }\n }, {\n key: 'disableAutocomplete',\n value: function disableAutocomplete() {\n if (!this.searchInput.hasClass('disabled') && this.dropdown.hasClass('open')) {\n this.searchInput.addClass('disabled');\n this.dropdown.removeClass('open').trigger('hidden.bs.dropdown');\n this.restoreMenu();\n }\n }\n }, {\n key: 'restoreMenu',\n value: function restoreMenu() {\n var html;\n html = '';\n return this.dropdownContent.html(html);\n }\n }, {\n key: 'onClick',\n value: function onClick(item, $el, e) {\n if (location.pathname.indexOf(item.url) !== -1) {\n if (!e.metaKey) e.preventDefault();\n if (!this.badgePresent) {\n if (item.category === 'Projects') {\n this.projectInputEl.val(item.id);\n this.addLocationBadge({\n value: '这个项目'\n });\n }\n if (item.category === 'Groups') {\n this.groupInputEl.val(item.id);\n this.addLocationBadge({\n value: '这个群组'\n });\n }\n }\n $el.removeClass('is-active');\n this.disableAutocomplete();\n return this.searchInput.val('').focus();\n }\n }\n }]);\n\n return SearchAutocomplete;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (SearchAutocomplete);\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\n\n/***/ }),\n\n/***/ \"./shortcuts.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_mousetrap__ = __webpack_require__(\"../../../node_modules/mousetrap/mousetrap.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_mousetrap___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_mousetrap__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__lib_utils_axios_utils__ = __webpack_require__(\"./lib/utils/axios_utils.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__lib_utils_url_utility__ = __webpack_require__(\"./lib/utils/url_utility.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__shortcuts_dashboard_navigation__ = __webpack_require__(\"./shortcuts_dashboard_navigation.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\nvar defaultStopCallback = __WEBPACK_IMPORTED_MODULE_1_mousetrap___default.a.stopCallback;\n__WEBPACK_IMPORTED_MODULE_1_mousetrap___default.a.stopCallback = function (e, element, combo) {\n if (['ctrl+shift+p', 'command+shift+p'].indexOf(combo) !== -1) {\n return false;\n }\n\n return defaultStopCallback(e, element, combo);\n};\n\nvar Shortcuts = function () {\n function Shortcuts() {\n _classCallCheck(this, Shortcuts);\n\n this.onToggleHelp = this.onToggleHelp.bind(this);\n this.enabledHelp = [];\n\n __WEBPACK_IMPORTED_MODULE_1_mousetrap___default.a.bind('?', this.onToggleHelp);\n __WEBPACK_IMPORTED_MODULE_1_mousetrap___default.a.bind('s', Shortcuts.focusSearch);\n __WEBPACK_IMPORTED_MODULE_1_mousetrap___default.a.bind('f', this.focusFilter.bind(this));\n __WEBPACK_IMPORTED_MODULE_1_mousetrap___default.a.bind('p b', Shortcuts.onTogglePerfBar);\n\n var findFileURL = document.body.dataset.findFile;\n\n __WEBPACK_IMPORTED_MODULE_1_mousetrap___default.a.bind('shift+t', function () {\n return Object(__WEBPACK_IMPORTED_MODULE_4__shortcuts_dashboard_navigation__[\"a\" /* default */])('.shortcuts-todos');\n });\n __WEBPACK_IMPORTED_MODULE_1_mousetrap___default.a.bind('shift+a', function () {\n return Object(__WEBPACK_IMPORTED_MODULE_4__shortcuts_dashboard_navigation__[\"a\" /* default */])('.dashboard-shortcuts-activity');\n });\n __WEBPACK_IMPORTED_MODULE_1_mousetrap___default.a.bind('shift+i', function () {\n return Object(__WEBPACK_IMPORTED_MODULE_4__shortcuts_dashboard_navigation__[\"a\" /* default */])('.dashboard-shortcuts-issues');\n });\n __WEBPACK_IMPORTED_MODULE_1_mousetrap___default.a.bind('shift+m', function () {\n return Object(__WEBPACK_IMPORTED_MODULE_4__shortcuts_dashboard_navigation__[\"a\" /* default */])('.dashboard-shortcuts-merge_requests');\n });\n __WEBPACK_IMPORTED_MODULE_1_mousetrap___default.a.bind('shift+p', function () {\n return Object(__WEBPACK_IMPORTED_MODULE_4__shortcuts_dashboard_navigation__[\"a\" /* default */])('.dashboard-shortcuts-projects');\n });\n __WEBPACK_IMPORTED_MODULE_1_mousetrap___default.a.bind('shift+g', function () {\n return Object(__WEBPACK_IMPORTED_MODULE_4__shortcuts_dashboard_navigation__[\"a\" /* default */])('.dashboard-shortcuts-groups');\n });\n __WEBPACK_IMPORTED_MODULE_1_mousetrap___default.a.bind('shift+l', function () {\n return Object(__WEBPACK_IMPORTED_MODULE_4__shortcuts_dashboard_navigation__[\"a\" /* default */])('.dashboard-shortcuts-milestones');\n });\n __WEBPACK_IMPORTED_MODULE_1_mousetrap___default.a.bind('shift+s', function () {\n return Object(__WEBPACK_IMPORTED_MODULE_4__shortcuts_dashboard_navigation__[\"a\" /* default */])('.dashboard-shortcuts-snippets');\n });\n\n __WEBPACK_IMPORTED_MODULE_1_mousetrap___default.a.bind(['ctrl+shift+p', 'command+shift+p'], Shortcuts.toggleMarkdownPreview);\n\n if (typeof findFileURL !== 'undefined' && findFileURL !== null) {\n __WEBPACK_IMPORTED_MODULE_1_mousetrap___default.a.bind('t', function () {\n Object(__WEBPACK_IMPORTED_MODULE_3__lib_utils_url_utility__[\"g\" /* visitUrl */])(findFileURL);\n });\n }\n\n $(document).on('click.more_help', '.js-more-help-button', function clickMoreHelp(e) {\n $(this).remove();\n $('.hidden-shortcut').show();\n e.preventDefault();\n });\n }\n\n _createClass(Shortcuts, [{\n key: 'onToggleHelp',\n value: function onToggleHelp(e) {\n if (e.preventDefault) {\n e.preventDefault();\n }\n\n Shortcuts.toggleHelp(this.enabledHelp);\n }\n }, {\n key: 'focusFilter',\n value: function focusFilter(e) {\n if (!this.filterInput) {\n this.filterInput = $('input[type=search]', '.nav-controls');\n }\n this.filterInput.focus();\n e.preventDefault();\n }\n }], [{\n key: 'onTogglePerfBar',\n value: function onTogglePerfBar(e) {\n e.preventDefault();\n var performanceBarCookieName = 'perf_bar_enabled';\n if (__WEBPACK_IMPORTED_MODULE_0_js_cookie___default.a.get(performanceBarCookieName) === 'true') {\n __WEBPACK_IMPORTED_MODULE_0_js_cookie___default.a.set(performanceBarCookieName, 'false', { path: '/' });\n } else {\n __WEBPACK_IMPORTED_MODULE_0_js_cookie___default.a.set(performanceBarCookieName, 'true', { path: '/' });\n }\n Object(__WEBPACK_IMPORTED_MODULE_3__lib_utils_url_utility__[\"e\" /* refreshCurrentPage */])();\n }\n }, {\n key: 'toggleMarkdownPreview',\n value: function toggleMarkdownPreview(e) {\n // Check if short-cut was triggered while in Write Mode\n var $target = $(e.target);\n var $form = $target.closest('form');\n\n if ($target.hasClass('js-note-text')) {\n $('.js-md-preview-button', $form).focus();\n }\n $(document).triggerHandler('markdown-preview:toggle', [e]);\n }\n }, {\n key: 'toggleHelp',\n value: function toggleHelp(location) {\n var $modal = $('#modal-shortcuts');\n\n if ($modal.length) {\n $modal.modal('toggle');\n }\n\n return __WEBPACK_IMPORTED_MODULE_2__lib_utils_axios_utils__[\"a\" /* default */].get(gon.shortcuts_path, {\n responseType: 'text'\n }).then(function (_ref) {\n var data = _ref.data;\n\n $.globalEval(data);\n\n if (location && location.length > 0) {\n var results = [];\n for (var i = 0, len = location.length; i < len; i += 1) {\n results.push($(location[i]).show());\n }\n return results;\n }\n\n $('.hidden-shortcut').show();\n return $('.js-more-help-button').remove();\n });\n }\n }, {\n key: 'focusSearch',\n value: function focusSearch(e) {\n $('#search').focus();\n\n if (e.preventDefault) {\n e.preventDefault();\n }\n }\n }]);\n\n return Shortcuts;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (Shortcuts);\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\n\n/***/ }),\n\n/***/ \"./shortcuts_dashboard_navigation.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/**\n * Helper function that finds the href of the fiven selector and updates the location.\n *\n * @param {String} selector\n */\n/* harmony default export */ __webpack_exports__[\"a\"] = (function (selector) {\n var link = document.querySelector(selector).getAttribute('href');\n\n if (link) {\n window.location = link;\n }\n});\n\n/***/ }),\n\n/***/ \"./syntax_highlight.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {/* harmony export (immutable) */ __webpack_exports__[\"a\"] = syntaxHighlight;\n/* eslint-disable func-names, space-before-function-paren, consistent-return, no-var, no-else-return, prefer-arrow-callback, max-len */\n\n// Syntax Highlighter\n//\n// Applies a syntax highlighting color scheme CSS class to any element with the\n// `js-syntax-highlight` class\n//\n// ### Example Markup\n//\n//
    \n//\n\nfunction syntaxHighlight(el) {\n if ($(el).hasClass('js-syntax-highlight')) {\n // Given the element itself, apply highlighting\n return $(el).addClass(gon.user_color_scheme);\n } else {\n // Given a parent element, recurse to any of its applicable children\n var $children = $(el).find('.js-syntax-highlight');\n if ($children.length) {\n return syntaxHighlight($children);\n }\n }\n}\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\n\n/***/ }),\n\n/***/ \"./vue_shared/components/identicon.vue\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n\n// CONCATENATED MODULE: /opt/gitlab/embedded/service/gitlab-rails/node_modules/babel-loader/lib!/opt/gitlab/embedded/service/gitlab-rails/node_modules/vue-loader/lib/selector.js?type=script&index=0!./vue_shared/components/identicon.vue\n\n/* harmony default export */ var identicon = ({\n props: {\n entityId: {\n type: Number,\n required: true\n },\n entityName: {\n type: String,\n required: true\n },\n sizeClass: {\n type: String,\n required: false,\n default: 's40'\n }\n },\n computed: {\n /**\n * This method is based on app/helpers/application_helper.rb#project_identicon\n */\n identiconStyles: function identiconStyles() {\n var allowedColors = ['#FFEBEE', '#F3E5F5', '#E8EAF6', '#E3F2FD', '#E0F2F1', '#FBE9E7', '#EEEEEE'];\n\n var backgroundColor = allowedColors[this.entityId % 7];\n\n return 'background-color: ' + backgroundColor + '; color: #555;';\n },\n identiconTitle: function identiconTitle() {\n return this.entityName.charAt(0).toUpperCase();\n }\n }\n});\n// CONCATENATED MODULE: /opt/gitlab/embedded/service/gitlab-rails/node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-57b01142\",\"hasScoped\":false,\"buble\":{\"transforms\":{}}}!/opt/gitlab/embedded/service/gitlab-rails/node_modules/vue-loader/lib/selector.js?type=template&index=0!./vue_shared/components/identicon.vue\nvar render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"avatar identicon\",class:_vm.sizeClass,style:(_vm.identiconStyles)},[_vm._v(\"\\n \"+_vm._s(_vm.identiconTitle)+\"\\n\")])}\nvar staticRenderFns = []\n\n// EXTERNAL MODULE: /opt/gitlab/embedded/service/gitlab-rails/node_modules/vue-loader/lib/runtime/component-normalizer.js\nvar component_normalizer = __webpack_require__(\"../../../node_modules/vue-loader/lib/runtime/component-normalizer.js\");\n\n// CONCATENATED MODULE: ./vue_shared/components/identicon.vue\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\n\nvar Component = Object(component_normalizer[\"a\" /* default */])(\n identicon,\n render,\n staticRenderFns,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\n/* harmony default export */ var components_identicon = __webpack_exports__[\"a\"] = (Component.exports);\n\n\n/***/ }),\n\n/***/ \"./vue_shared/components/loading_icon.vue\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n\n// CONCATENATED MODULE: /opt/gitlab/embedded/service/gitlab-rails/node_modules/babel-loader/lib!/opt/gitlab/embedded/service/gitlab-rails/node_modules/vue-loader/lib/selector.js?type=script&index=0!./vue_shared/components/loading_icon.vue\n\n/* harmony default export */ var loading_icon = ({\n props: {\n label: {\n type: String,\n required: false,\n default: 'Loading'\n },\n\n size: {\n type: String,\n required: false,\n default: '1'\n },\n\n inline: {\n type: Boolean,\n required: false,\n default: false\n }\n },\n\n computed: {\n rootElementType: function rootElementType() {\n return this.inline ? 'span' : 'div';\n },\n cssClass: function cssClass() {\n return 'fa-' + this.size + 'x';\n }\n }\n});\n// CONCATENATED MODULE: /opt/gitlab/embedded/service/gitlab-rails/node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-6f46572f\",\"hasScoped\":false,\"buble\":{\"transforms\":{}}}!/opt/gitlab/embedded/service/gitlab-rails/node_modules/vue-loader/lib/selector.js?type=template&index=0!./vue_shared/components/loading_icon.vue\nvar render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c(_vm.rootElementType,{tag:\"component\",staticClass:\"loading-container text-center\"},[_c('i',{staticClass:\"fa fa-spin fa-spinner\",class:_vm.cssClass,attrs:{\"aria-hidden\":\"true\",\"aria-label\":_vm.label}})])}\nvar staticRenderFns = []\n\n// EXTERNAL MODULE: /opt/gitlab/embedded/service/gitlab-rails/node_modules/vue-loader/lib/runtime/component-normalizer.js\nvar component_normalizer = __webpack_require__(\"../../../node_modules/vue-loader/lib/runtime/component-normalizer.js\");\n\n// CONCATENATED MODULE: ./vue_shared/components/loading_icon.vue\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\n\nvar Component = Object(component_normalizer[\"a\" /* default */])(\n loading_icon,\n render,\n staticRenderFns,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\n/* harmony default export */ var components_loading_icon = __webpack_exports__[\"a\"] = (Component.exports);\n\n\n/***/ }),\n\n/***/ \"./vue_shared/translate.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__locale__ = __webpack_require__(\"./locale/index.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (function (Vue) {\n Vue.mixin({\n methods: {\n /**\n Translates `text`\n @param text The text to be translated\n @returns {String} The translated text\n **/\n __: __WEBPACK_IMPORTED_MODULE_0__locale__[\"a\" /* __ */],\n /**\n Translate the text with a number\n if the number is more than 1 it will use the `pluralText` translation.\n This method allows for contexts, see below re. contexts\n @param text Singular text to translate (eg. '%d day')\n @param pluralText Plural text to translate (eg. '%d days')\n @param count Number to decide which translation to use (eg. 2)\n @returns {String} Translated text with the number replaced (eg. '2 days')\n **/\n n__: __WEBPACK_IMPORTED_MODULE_0__locale__[\"d\" /* n__ */],\n /**\n Translate context based text\n Either pass in the context translation like `Context|Text to translate`\n or allow for dynamic text by doing passing in the context first & then the text to translate\n @param keyOrContext Can be either the key to translate including the context\n (eg. 'Context|Text') or just the context for the translation\n (eg. 'Context')\n @param key Is the dynamic variable you want to be translated\n @returns {String} Translated context based text\n **/\n s__: __WEBPACK_IMPORTED_MODULE_0__locale__[\"e\" /* s__ */],\n sprintf: __WEBPACK_IMPORTED_MODULE_0__locale__[\"f\" /* sprintf */]\n }\n });\n});\n\n/***/ })\n\n},[\"./main.js\"]);\n\n\n// WEBPACK FOOTER //\n// main.9eed7cff0eeb3c1acabc.bundle.js","/*!\n\tAutosize 4.0.0\n\tlicense: MIT\n\thttp://www.jacklmoore.com/autosize\n*/\n(function (global, factory) {\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(['exports', 'module'], factory);\n\t} else if (typeof exports !== 'undefined' && typeof module !== 'undefined') {\n\t\tfactory(exports, module);\n\t} else {\n\t\tvar mod = {\n\t\t\texports: {}\n\t\t};\n\t\tfactory(mod.exports, mod);\n\t\tglobal.autosize = mod.exports;\n\t}\n})(this, function (exports, module) {\n\t'use strict';\n\n\tvar map = typeof Map === \"function\" ? new Map() : (function () {\n\t\tvar keys = [];\n\t\tvar values = [];\n\n\t\treturn {\n\t\t\thas: function has(key) {\n\t\t\t\treturn keys.indexOf(key) > -1;\n\t\t\t},\n\t\t\tget: function get(key) {\n\t\t\t\treturn values[keys.indexOf(key)];\n\t\t\t},\n\t\t\tset: function set(key, value) {\n\t\t\t\tif (keys.indexOf(key) === -1) {\n\t\t\t\t\tkeys.push(key);\n\t\t\t\t\tvalues.push(value);\n\t\t\t\t}\n\t\t\t},\n\t\t\t'delete': function _delete(key) {\n\t\t\t\tvar index = keys.indexOf(key);\n\t\t\t\tif (index > -1) {\n\t\t\t\t\tkeys.splice(index, 1);\n\t\t\t\t\tvalues.splice(index, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t})();\n\n\tvar createEvent = function createEvent(name) {\n\t\treturn new Event(name, { bubbles: true });\n\t};\n\ttry {\n\t\tnew Event('test');\n\t} catch (e) {\n\t\t// IE does not support `new Event()`\n\t\tcreateEvent = function (name) {\n\t\t\tvar evt = document.createEvent('Event');\n\t\t\tevt.initEvent(name, true, false);\n\t\t\treturn evt;\n\t\t};\n\t}\n\n\tfunction assign(ta) {\n\t\tif (!ta || !ta.nodeName || ta.nodeName !== 'TEXTAREA' || map.has(ta)) return;\n\n\t\tvar heightOffset = null;\n\t\tvar clientWidth = ta.clientWidth;\n\t\tvar cachedHeight = null;\n\n\t\tfunction init() {\n\t\t\tvar style = window.getComputedStyle(ta, null);\n\n\t\t\tif (style.resize === 'vertical') {\n\t\t\t\tta.style.resize = 'none';\n\t\t\t} else if (style.resize === 'both') {\n\t\t\t\tta.style.resize = 'horizontal';\n\t\t\t}\n\n\t\t\tif (style.boxSizing === 'content-box') {\n\t\t\t\theightOffset = -(parseFloat(style.paddingTop) + parseFloat(style.paddingBottom));\n\t\t\t} else {\n\t\t\t\theightOffset = parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth);\n\t\t\t}\n\t\t\t// Fix when a textarea is not on document body and heightOffset is Not a Number\n\t\t\tif (isNaN(heightOffset)) {\n\t\t\t\theightOffset = 0;\n\t\t\t}\n\n\t\t\tupdate();\n\t\t}\n\n\t\tfunction changeOverflow(value) {\n\t\t\t{\n\t\t\t\t// Chrome/Safari-specific fix:\n\t\t\t\t// When the textarea y-overflow is hidden, Chrome/Safari do not reflow the text to account for the space\n\t\t\t\t// made available by removing the scrollbar. The following forces the necessary text reflow.\n\t\t\t\tvar width = ta.style.width;\n\t\t\t\tta.style.width = '0px';\n\t\t\t\t// Force reflow:\n\t\t\t\t/* jshint ignore:start */\n\t\t\t\tta.offsetWidth;\n\t\t\t\t/* jshint ignore:end */\n\t\t\t\tta.style.width = width;\n\t\t\t}\n\n\t\t\tta.style.overflowY = value;\n\t\t}\n\n\t\tfunction getParentOverflows(el) {\n\t\t\tvar arr = [];\n\n\t\t\twhile (el && el.parentNode && el.parentNode instanceof Element) {\n\t\t\t\tif (el.parentNode.scrollTop) {\n\t\t\t\t\tarr.push({\n\t\t\t\t\t\tnode: el.parentNode,\n\t\t\t\t\t\tscrollTop: el.parentNode.scrollTop\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tel = el.parentNode;\n\t\t\t}\n\n\t\t\treturn arr;\n\t\t}\n\n\t\tfunction resize() {\n\t\t\tvar originalHeight = ta.style.height;\n\t\t\tvar overflows = getParentOverflows(ta);\n\t\t\tvar docTop = document.documentElement && document.documentElement.scrollTop; // Needed for Mobile IE (ticket #240)\n\n\t\t\tta.style.height = '';\n\n\t\t\tvar endHeight = ta.scrollHeight + heightOffset;\n\n\t\t\tif (ta.scrollHeight === 0) {\n\t\t\t\t// If the scrollHeight is 0, then the element probably has display:none or is detached from the DOM.\n\t\t\t\tta.style.height = originalHeight;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tta.style.height = endHeight + 'px';\n\n\t\t\t// used to check if an update is actually necessary on window.resize\n\t\t\tclientWidth = ta.clientWidth;\n\n\t\t\t// prevents scroll-position jumping\n\t\t\toverflows.forEach(function (el) {\n\t\t\t\tel.node.scrollTop = el.scrollTop;\n\t\t\t});\n\n\t\t\tif (docTop) {\n\t\t\t\tdocument.documentElement.scrollTop = docTop;\n\t\t\t}\n\t\t}\n\n\t\tfunction update() {\n\t\t\tresize();\n\n\t\t\tvar styleHeight = Math.round(parseFloat(ta.style.height));\n\t\t\tvar computed = window.getComputedStyle(ta, null);\n\n\t\t\t// Using offsetHeight as a replacement for computed.height in IE, because IE does not account use of border-box\n\t\t\tvar actualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(computed.height)) : ta.offsetHeight;\n\n\t\t\t// The actual height not matching the style height (set via the resize method) indicates that\n\t\t\t// the max-height has been exceeded, in which case the overflow should be allowed.\n\t\t\tif (actualHeight !== styleHeight) {\n\t\t\t\tif (computed.overflowY === 'hidden') {\n\t\t\t\t\tchangeOverflow('scroll');\n\t\t\t\t\tresize();\n\t\t\t\t\tactualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(window.getComputedStyle(ta, null).height)) : ta.offsetHeight;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Normally keep overflow set to hidden, to avoid flash of scrollbar as the textarea expands.\n\t\t\t\tif (computed.overflowY !== 'hidden') {\n\t\t\t\t\tchangeOverflow('hidden');\n\t\t\t\t\tresize();\n\t\t\t\t\tactualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(window.getComputedStyle(ta, null).height)) : ta.offsetHeight;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (cachedHeight !== actualHeight) {\n\t\t\t\tcachedHeight = actualHeight;\n\t\t\t\tvar evt = createEvent('autosize:resized');\n\t\t\t\ttry {\n\t\t\t\t\tta.dispatchEvent(evt);\n\t\t\t\t} catch (err) {\n\t\t\t\t\t// Firefox will throw an error on dispatchEvent for a detached element\n\t\t\t\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=889376\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvar pageResize = function pageResize() {\n\t\t\tif (ta.clientWidth !== clientWidth) {\n\t\t\t\tupdate();\n\t\t\t}\n\t\t};\n\n\t\tvar destroy = (function (style) {\n\t\t\twindow.removeEventListener('resize', pageResize, false);\n\t\t\tta.removeEventListener('input', update, false);\n\t\t\tta.removeEventListener('keyup', update, false);\n\t\t\tta.removeEventListener('autosize:destroy', destroy, false);\n\t\t\tta.removeEventListener('autosize:update', update, false);\n\n\t\t\tObject.keys(style).forEach(function (key) {\n\t\t\t\tta.style[key] = style[key];\n\t\t\t});\n\n\t\t\tmap['delete'](ta);\n\t\t}).bind(ta, {\n\t\t\theight: ta.style.height,\n\t\t\tresize: ta.style.resize,\n\t\t\toverflowY: ta.style.overflowY,\n\t\t\toverflowX: ta.style.overflowX,\n\t\t\twordWrap: ta.style.wordWrap\n\t\t});\n\n\t\tta.addEventListener('autosize:destroy', destroy, false);\n\n\t\t// IE9 does not fire onpropertychange or oninput for deletions,\n\t\t// so binding to onkeyup to catch most of those events.\n\t\t// There is no way that I know of to detect something like 'cut' in IE9.\n\t\tif ('onpropertychange' in ta && 'oninput' in ta) {\n\t\t\tta.addEventListener('keyup', update, false);\n\t\t}\n\n\t\twindow.addEventListener('resize', pageResize, false);\n\t\tta.addEventListener('input', update, false);\n\t\tta.addEventListener('autosize:update', update, false);\n\t\tta.style.overflowX = 'hidden';\n\t\tta.style.wordWrap = 'break-word';\n\n\t\tmap.set(ta, {\n\t\t\tdestroy: destroy,\n\t\t\tupdate: update\n\t\t});\n\n\t\tinit();\n\t}\n\n\tfunction destroy(ta) {\n\t\tvar methods = map.get(ta);\n\t\tif (methods) {\n\t\t\tmethods.destroy();\n\t\t}\n\t}\n\n\tfunction update(ta) {\n\t\tvar methods = map.get(ta);\n\t\tif (methods) {\n\t\t\tmethods.update();\n\t\t}\n\t}\n\n\tvar autosize = null;\n\n\t// Do nothing in Node.js environment and IE8 (or lower)\n\tif (typeof window === 'undefined' || typeof window.getComputedStyle !== 'function') {\n\t\tautosize = function (el) {\n\t\t\treturn el;\n\t\t};\n\t\tautosize.destroy = function (el) {\n\t\t\treturn el;\n\t\t};\n\t\tautosize.update = function (el) {\n\t\t\treturn el;\n\t\t};\n\t} else {\n\t\tautosize = function (el, options) {\n\t\t\tif (el) {\n\t\t\t\tArray.prototype.forEach.call(el.length ? el : [el], function (x) {\n\t\t\t\t\treturn assign(x, options);\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn el;\n\t\t};\n\t\tautosize.destroy = function (el) {\n\t\t\tif (el) {\n\t\t\t\tArray.prototype.forEach.call(el.length ? el : [el], destroy);\n\t\t\t}\n\t\t\treturn el;\n\t\t};\n\t\tautosize.update = function (el) {\n\t\t\tif (el) {\n\t\t\t\tArray.prototype.forEach.call(el.length ? el : [el], update);\n\t\t\t}\n\t\t\treturn el;\n\t\t};\n\t}\n\n\tmodule.exports = autosize;\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// /opt/gitlab/embedded/service/gitlab-rails/node_modules/autosize/dist/autosize.js\n// module id = ../../../node_modules/autosize/dist/autosize.js\n// module chunks = main","(function (global, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(['module', 'select'], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(module, require('select'));\n } else {\n var mod = {\n exports: {}\n };\n factory(mod, global.select);\n global.clipboardAction = mod.exports;\n }\n})(this, function (module, _select) {\n 'use strict';\n\n var _select2 = _interopRequireDefault(_select);\n\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n }\n\n var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n var _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n\n var ClipboardAction = function () {\n /**\n * @param {Object} options\n */\n function ClipboardAction(options) {\n _classCallCheck(this, ClipboardAction);\n\n this.resolveOptions(options);\n this.initSelection();\n }\n\n /**\n * Defines base properties passed from constructor.\n * @param {Object} options\n */\n\n\n _createClass(ClipboardAction, [{\n key: 'resolveOptions',\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this.action = options.action;\n this.container = options.container;\n this.emitter = options.emitter;\n this.target = options.target;\n this.text = options.text;\n this.trigger = options.trigger;\n\n this.selectedText = '';\n }\n }, {\n key: 'initSelection',\n value: function initSelection() {\n if (this.text) {\n this.selectFake();\n } else if (this.target) {\n this.selectTarget();\n }\n }\n }, {\n key: 'selectFake',\n value: function selectFake() {\n var _this = this;\n\n var isRTL = document.documentElement.getAttribute('dir') == 'rtl';\n\n this.removeFake();\n\n this.fakeHandlerCallback = function () {\n return _this.removeFake();\n };\n this.fakeHandler = this.container.addEventListener('click', this.fakeHandlerCallback) || true;\n\n this.fakeElem = document.createElement('textarea');\n // Prevent zooming on iOS\n this.fakeElem.style.fontSize = '12pt';\n // Reset box model\n this.fakeElem.style.border = '0';\n this.fakeElem.style.padding = '0';\n this.fakeElem.style.margin = '0';\n // Move element out of screen horizontally\n this.fakeElem.style.position = 'absolute';\n this.fakeElem.style[isRTL ? 'right' : 'left'] = '-9999px';\n // Move element to the same position vertically\n var yPosition = window.pageYOffset || document.documentElement.scrollTop;\n this.fakeElem.style.top = yPosition + 'px';\n\n this.fakeElem.setAttribute('readonly', '');\n this.fakeElem.value = this.text;\n\n this.container.appendChild(this.fakeElem);\n\n this.selectedText = (0, _select2.default)(this.fakeElem);\n this.copyText();\n }\n }, {\n key: 'removeFake',\n value: function removeFake() {\n if (this.fakeHandler) {\n this.container.removeEventListener('click', this.fakeHandlerCallback);\n this.fakeHandler = null;\n this.fakeHandlerCallback = null;\n }\n\n if (this.fakeElem) {\n this.container.removeChild(this.fakeElem);\n this.fakeElem = null;\n }\n }\n }, {\n key: 'selectTarget',\n value: function selectTarget() {\n this.selectedText = (0, _select2.default)(this.target);\n this.copyText();\n }\n }, {\n key: 'copyText',\n value: function copyText() {\n var succeeded = void 0;\n\n try {\n succeeded = document.execCommand(this.action);\n } catch (err) {\n succeeded = false;\n }\n\n this.handleResult(succeeded);\n }\n }, {\n key: 'handleResult',\n value: function handleResult(succeeded) {\n this.emitter.emit(succeeded ? 'success' : 'error', {\n action: this.action,\n text: this.selectedText,\n trigger: this.trigger,\n clearSelection: this.clearSelection.bind(this)\n });\n }\n }, {\n key: 'clearSelection',\n value: function clearSelection() {\n if (this.trigger) {\n this.trigger.focus();\n }\n\n window.getSelection().removeAllRanges();\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this.removeFake();\n }\n }, {\n key: 'action',\n set: function set() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'copy';\n\n this._action = action;\n\n if (this._action !== 'copy' && this._action !== 'cut') {\n throw new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"');\n }\n },\n get: function get() {\n return this._action;\n }\n }, {\n key: 'target',\n set: function set(target) {\n if (target !== undefined) {\n if (target && (typeof target === 'undefined' ? 'undefined' : _typeof(target)) === 'object' && target.nodeType === 1) {\n if (this.action === 'copy' && target.hasAttribute('disabled')) {\n throw new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');\n }\n\n if (this.action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {\n throw new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');\n }\n\n this._target = target;\n } else {\n throw new Error('Invalid \"target\" value, use a valid Element');\n }\n }\n },\n get: function get() {\n return this._target;\n }\n }]);\n\n return ClipboardAction;\n }();\n\n module.exports = ClipboardAction;\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// /opt/gitlab/embedded/service/gitlab-rails/node_modules/clipboard/lib/clipboard-action.js\n// module id = ../../../node_modules/clipboard/lib/clipboard-action.js\n// module chunks = main","(function (global, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(['module', './clipboard-action', 'tiny-emitter', 'good-listener'], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(module, require('./clipboard-action'), require('tiny-emitter'), require('good-listener'));\n } else {\n var mod = {\n exports: {}\n };\n factory(mod, global.clipboardAction, global.tinyEmitter, global.goodListener);\n global.clipboard = mod.exports;\n }\n})(this, function (module, _clipboardAction, _tinyEmitter, _goodListener) {\n 'use strict';\n\n var _clipboardAction2 = _interopRequireDefault(_clipboardAction);\n\n var _tinyEmitter2 = _interopRequireDefault(_tinyEmitter);\n\n var _goodListener2 = _interopRequireDefault(_goodListener);\n\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n }\n\n var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n var _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n\n function _possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n }\n\n function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n }\n\n var Clipboard = function (_Emitter) {\n _inherits(Clipboard, _Emitter);\n\n /**\n * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n * @param {Object} options\n */\n function Clipboard(trigger, options) {\n _classCallCheck(this, Clipboard);\n\n var _this = _possibleConstructorReturn(this, (Clipboard.__proto__ || Object.getPrototypeOf(Clipboard)).call(this));\n\n _this.resolveOptions(options);\n _this.listenClick(trigger);\n return _this;\n }\n\n /**\n * Defines if attributes would be resolved using internal setter functions\n * or custom functions that were passed in the constructor.\n * @param {Object} options\n */\n\n\n _createClass(Clipboard, [{\n key: 'resolveOptions',\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this.action = typeof options.action === 'function' ? options.action : this.defaultAction;\n this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;\n this.text = typeof options.text === 'function' ? options.text : this.defaultText;\n this.container = _typeof(options.container) === 'object' ? options.container : document.body;\n }\n }, {\n key: 'listenClick',\n value: function listenClick(trigger) {\n var _this2 = this;\n\n this.listener = (0, _goodListener2.default)(trigger, 'click', function (e) {\n return _this2.onClick(e);\n });\n }\n }, {\n key: 'onClick',\n value: function onClick(e) {\n var trigger = e.delegateTarget || e.currentTarget;\n\n if (this.clipboardAction) {\n this.clipboardAction = null;\n }\n\n this.clipboardAction = new _clipboardAction2.default({\n action: this.action(trigger),\n target: this.target(trigger),\n text: this.text(trigger),\n container: this.container,\n trigger: trigger,\n emitter: this\n });\n }\n }, {\n key: 'defaultAction',\n value: function defaultAction(trigger) {\n return getAttributeValue('action', trigger);\n }\n }, {\n key: 'defaultTarget',\n value: function defaultTarget(trigger) {\n var selector = getAttributeValue('target', trigger);\n\n if (selector) {\n return document.querySelector(selector);\n }\n }\n }, {\n key: 'defaultText',\n value: function defaultText(trigger) {\n return getAttributeValue('text', trigger);\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this.listener.destroy();\n\n if (this.clipboardAction) {\n this.clipboardAction.destroy();\n this.clipboardAction = null;\n }\n }\n }], [{\n key: 'isSupported',\n value: function isSupported() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];\n\n var actions = typeof action === 'string' ? [action] : action;\n var support = !!document.queryCommandSupported;\n\n actions.forEach(function (action) {\n support = support && !!document.queryCommandSupported(action);\n });\n\n return support;\n }\n }]);\n\n return Clipboard;\n }(_tinyEmitter2.default);\n\n /**\n * Helper function to retrieve attribute value.\n * @param {String} suffix\n * @param {Element} element\n */\n function getAttributeValue(suffix, element) {\n var attribute = 'data-clipboard-' + suffix;\n\n if (!element.hasAttribute(attribute)) {\n return;\n }\n\n return element.getAttribute(attribute);\n }\n\n module.exports = Clipboard;\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// /opt/gitlab/embedded/service/gitlab-rails/node_modules/clipboard/lib/clipboard.js\n// module id = ../../../node_modules/clipboard/lib/clipboard.js\n// module chunks = main","var DOCUMENT_NODE_TYPE = 9;\n\n/**\n * A polyfill for Element.matches()\n */\nif (typeof Element !== 'undefined' && !Element.prototype.matches) {\n var proto = Element.prototype;\n\n proto.matches = proto.matchesSelector ||\n proto.mozMatchesSelector ||\n proto.msMatchesSelector ||\n proto.oMatchesSelector ||\n proto.webkitMatchesSelector;\n}\n\n/**\n * Finds the closest parent that matches a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @return {Function}\n */\nfunction closest (element, selector) {\n while (element && element.nodeType !== DOCUMENT_NODE_TYPE) {\n if (element.matches(selector)) return element;\n element = element.parentNode;\n }\n}\n\nmodule.exports = closest;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /opt/gitlab/embedded/service/gitlab-rails/node_modules/delegate/src/closest.js\n// module id = ../../../node_modules/delegate/src/closest.js\n// module chunks = main","var closest = require('./closest');\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction delegate(element, selector, type, callback, useCapture) {\n var listenerFn = listener.apply(this, arguments);\n\n element.addEventListener(type, listenerFn, useCapture);\n\n return {\n destroy: function() {\n element.removeEventListener(type, listenerFn, useCapture);\n }\n }\n}\n\n/**\n * Finds closest match and invokes callback.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Function}\n */\nfunction listener(element, selector, type, callback) {\n return function(e) {\n e.delegateTarget = closest(e.target, selector);\n\n if (e.delegateTarget) {\n callback.call(element, e);\n }\n }\n}\n\nmodule.exports = delegate;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /opt/gitlab/embedded/service/gitlab-rails/node_modules/delegate/src/delegate.js\n// module id = ../../../node_modules/delegate/src/delegate.js\n// module chunks = main","/*!\n\nCopyright (C) 2014-2016 by Andrea Giammarchi - @WebReflection\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n*/\n// global window Object\n// optional polyfill info\n// 'auto' used by default, everything is feature detected\n// 'force' use the polyfill even if not fully needed\nfunction installCustomElements(window, polyfill) {'use strict';\n\n // DO NOT USE THIS FILE DIRECTLY, IT WON'T WORK\n // THIS IS A PROJECT BASED ON A BUILD SYSTEM\n // THIS FILE IS JUST WRAPPED UP RESULTING IN\n // build/document-register-element.node.js\n\n var\n document = window.document,\n Object = window.Object\n ;\n\n var htmlClass = (function (info) {\n // (C) Andrea Giammarchi - @WebReflection - MIT Style\n var\n catchClass = /^[A-Z]+[a-z]/,\n filterBy = function (re) {\n var arr = [], tag;\n for (tag in register) {\n if (re.test(tag)) arr.push(tag);\n }\n return arr;\n },\n add = function (Class, tag) {\n tag = tag.toLowerCase();\n if (!(tag in register)) {\n register[Class] = (register[Class] || []).concat(tag);\n register[tag] = (register[tag.toUpperCase()] = Class);\n }\n },\n register = (Object.create || Object)(null),\n htmlClass = {},\n i, section, tags, Class\n ;\n for (section in info) {\n for (Class in info[section]) {\n tags = info[section][Class];\n register[Class] = tags;\n for (i = 0; i < tags.length; i++) {\n register[tags[i].toLowerCase()] =\n register[tags[i].toUpperCase()] = Class;\n }\n }\n }\n htmlClass.get = function get(tagOrClass) {\n return typeof tagOrClass === 'string' ?\n (register[tagOrClass] || (catchClass.test(tagOrClass) ? [] : '')) :\n filterBy(tagOrClass);\n };\n htmlClass.set = function set(tag, Class) {\n return (catchClass.test(tag) ?\n add(tag, Class) :\n add(Class, tag)\n ), htmlClass;\n };\n return htmlClass;\n }({\n \"collections\": {\n \"HTMLAllCollection\": [\n \"all\"\n ],\n \"HTMLCollection\": [\n \"forms\"\n ],\n \"HTMLFormControlsCollection\": [\n \"elements\"\n ],\n \"HTMLOptionsCollection\": [\n \"options\"\n ]\n },\n \"elements\": {\n \"Element\": [\n \"element\"\n ],\n \"HTMLAnchorElement\": [\n \"a\"\n ],\n \"HTMLAppletElement\": [\n \"applet\"\n ],\n \"HTMLAreaElement\": [\n \"area\"\n ],\n \"HTMLAttachmentElement\": [\n \"attachment\"\n ],\n \"HTMLAudioElement\": [\n \"audio\"\n ],\n \"HTMLBRElement\": [\n \"br\"\n ],\n \"HTMLBaseElement\": [\n \"base\"\n ],\n \"HTMLBodyElement\": [\n \"body\"\n ],\n \"HTMLButtonElement\": [\n \"button\"\n ],\n \"HTMLCanvasElement\": [\n \"canvas\"\n ],\n \"HTMLContentElement\": [\n \"content\"\n ],\n \"HTMLDListElement\": [\n \"dl\"\n ],\n \"HTMLDataElement\": [\n \"data\"\n ],\n \"HTMLDataListElement\": [\n \"datalist\"\n ],\n \"HTMLDetailsElement\": [\n \"details\"\n ],\n \"HTMLDialogElement\": [\n \"dialog\"\n ],\n \"HTMLDirectoryElement\": [\n \"dir\"\n ],\n \"HTMLDivElement\": [\n \"div\"\n ],\n \"HTMLDocument\": [\n \"document\"\n ],\n \"HTMLElement\": [\n \"element\",\n \"abbr\",\n \"address\",\n \"article\",\n \"aside\",\n \"b\",\n \"bdi\",\n \"bdo\",\n \"cite\",\n \"code\",\n \"command\",\n \"dd\",\n \"dfn\",\n \"dt\",\n \"em\",\n \"figcaption\",\n \"figure\",\n \"footer\",\n \"header\",\n \"i\",\n \"kbd\",\n \"mark\",\n \"nav\",\n \"noscript\",\n \"rp\",\n \"rt\",\n \"ruby\",\n \"s\",\n \"samp\",\n \"section\",\n \"small\",\n \"strong\",\n \"sub\",\n \"summary\",\n \"sup\",\n \"u\",\n \"var\",\n \"wbr\"\n ],\n \"HTMLEmbedElement\": [\n \"embed\"\n ],\n \"HTMLFieldSetElement\": [\n \"fieldset\"\n ],\n \"HTMLFontElement\": [\n \"font\"\n ],\n \"HTMLFormElement\": [\n \"form\"\n ],\n \"HTMLFrameElement\": [\n \"frame\"\n ],\n \"HTMLFrameSetElement\": [\n \"frameset\"\n ],\n \"HTMLHRElement\": [\n \"hr\"\n ],\n \"HTMLHeadElement\": [\n \"head\"\n ],\n \"HTMLHeadingElement\": [\n \"h1\",\n \"h2\",\n \"h3\",\n \"h4\",\n \"h5\",\n \"h6\"\n ],\n \"HTMLHtmlElement\": [\n \"html\"\n ],\n \"HTMLIFrameElement\": [\n \"iframe\"\n ],\n \"HTMLImageElement\": [\n \"img\"\n ],\n \"HTMLInputElement\": [\n \"input\"\n ],\n \"HTMLKeygenElement\": [\n \"keygen\"\n ],\n \"HTMLLIElement\": [\n \"li\"\n ],\n \"HTMLLabelElement\": [\n \"label\"\n ],\n \"HTMLLegendElement\": [\n \"legend\"\n ],\n \"HTMLLinkElement\": [\n \"link\"\n ],\n \"HTMLMapElement\": [\n \"map\"\n ],\n \"HTMLMarqueeElement\": [\n \"marquee\"\n ],\n \"HTMLMediaElement\": [\n \"media\"\n ],\n \"HTMLMenuElement\": [\n \"menu\"\n ],\n \"HTMLMenuItemElement\": [\n \"menuitem\"\n ],\n \"HTMLMetaElement\": [\n \"meta\"\n ],\n \"HTMLMeterElement\": [\n \"meter\"\n ],\n \"HTMLModElement\": [\n \"del\",\n \"ins\"\n ],\n \"HTMLOListElement\": [\n \"ol\"\n ],\n \"HTMLObjectElement\": [\n \"object\"\n ],\n \"HTMLOptGroupElement\": [\n \"optgroup\"\n ],\n \"HTMLOptionElement\": [\n \"option\"\n ],\n \"HTMLOutputElement\": [\n \"output\"\n ],\n \"HTMLParagraphElement\": [\n \"p\"\n ],\n \"HTMLParamElement\": [\n \"param\"\n ],\n \"HTMLPictureElement\": [\n \"picture\"\n ],\n \"HTMLPreElement\": [\n \"pre\"\n ],\n \"HTMLProgressElement\": [\n \"progress\"\n ],\n \"HTMLQuoteElement\": [\n \"blockquote\",\n \"q\",\n \"quote\"\n ],\n \"HTMLScriptElement\": [\n \"script\"\n ],\n \"HTMLSelectElement\": [\n \"select\"\n ],\n \"HTMLShadowElement\": [\n \"shadow\"\n ],\n \"HTMLSlotElement\": [\n \"slot\"\n ],\n \"HTMLSourceElement\": [\n \"source\"\n ],\n \"HTMLSpanElement\": [\n \"span\"\n ],\n \"HTMLStyleElement\": [\n \"style\"\n ],\n \"HTMLTableCaptionElement\": [\n \"caption\"\n ],\n \"HTMLTableCellElement\": [\n \"td\",\n \"th\"\n ],\n \"HTMLTableColElement\": [\n \"col\",\n \"colgroup\"\n ],\n \"HTMLTableElement\": [\n \"table\"\n ],\n \"HTMLTableRowElement\": [\n \"tr\"\n ],\n \"HTMLTableSectionElement\": [\n \"thead\",\n \"tbody\",\n \"tfoot\"\n ],\n \"HTMLTemplateElement\": [\n \"template\"\n ],\n \"HTMLTextAreaElement\": [\n \"textarea\"\n ],\n \"HTMLTimeElement\": [\n \"time\"\n ],\n \"HTMLTitleElement\": [\n \"title\"\n ],\n \"HTMLTrackElement\": [\n \"track\"\n ],\n \"HTMLUListElement\": [\n \"ul\"\n ],\n \"HTMLUnknownElement\": [\n \"unknown\",\n \"vhgroupv\",\n \"vkeygen\"\n ],\n \"HTMLVideoElement\": [\n \"video\"\n ]\n },\n \"nodes\": {\n \"Attr\": [\n \"node\"\n ],\n \"Audio\": [\n \"audio\"\n ],\n \"CDATASection\": [\n \"node\"\n ],\n \"CharacterData\": [\n \"node\"\n ],\n \"Comment\": [\n \"#comment\"\n ],\n \"Document\": [\n \"#document\"\n ],\n \"DocumentFragment\": [\n \"#document-fragment\"\n ],\n \"DocumentType\": [\n \"node\"\n ],\n \"HTMLDocument\": [\n \"#document\"\n ],\n \"Image\": [\n \"img\"\n ],\n \"Option\": [\n \"option\"\n ],\n \"ProcessingInstruction\": [\n \"node\"\n ],\n \"ShadowRoot\": [\n \"#shadow-root\"\n ],\n \"Text\": [\n \"#text\"\n ],\n \"XMLDocument\": [\n \"xml\"\n ]\n }\n }));\n \n \n \n // passed at runtime, configurable\n // via nodejs module\n if (!polyfill) polyfill = 'auto';\n \n var\n // V0 polyfill entry\n REGISTER_ELEMENT = 'registerElement',\n \n // IE < 11 only + old WebKit for attributes + feature detection\n EXPANDO_UID = '__' + REGISTER_ELEMENT + (window.Math.random() * 10e4 >> 0),\n \n // shortcuts and costants\n ADD_EVENT_LISTENER = 'addEventListener',\n ATTACHED = 'attached',\n CALLBACK = 'Callback',\n DETACHED = 'detached',\n EXTENDS = 'extends',\n \n ATTRIBUTE_CHANGED_CALLBACK = 'attributeChanged' + CALLBACK,\n ATTACHED_CALLBACK = ATTACHED + CALLBACK,\n CONNECTED_CALLBACK = 'connected' + CALLBACK,\n DISCONNECTED_CALLBACK = 'disconnected' + CALLBACK,\n CREATED_CALLBACK = 'created' + CALLBACK,\n DETACHED_CALLBACK = DETACHED + CALLBACK,\n \n ADDITION = 'ADDITION',\n MODIFICATION = 'MODIFICATION',\n REMOVAL = 'REMOVAL',\n \n DOM_ATTR_MODIFIED = 'DOMAttrModified',\n DOM_CONTENT_LOADED = 'DOMContentLoaded',\n DOM_SUBTREE_MODIFIED = 'DOMSubtreeModified',\n \n PREFIX_TAG = '<',\n PREFIX_IS = '=',\n \n // valid and invalid node names\n validName = /^[A-Z][A-Z0-9]*(?:-[A-Z0-9]+)+$/,\n invalidNames = [\n 'ANNOTATION-XML',\n 'COLOR-PROFILE',\n 'FONT-FACE',\n 'FONT-FACE-SRC',\n 'FONT-FACE-URI',\n 'FONT-FACE-FORMAT',\n 'FONT-FACE-NAME',\n 'MISSING-GLYPH'\n ],\n \n // registered types and their prototypes\n types = [],\n protos = [],\n \n // to query subnodes\n query = '',\n \n // html shortcut used to feature detect\n documentElement = document.documentElement,\n \n // ES5 inline helpers || basic patches\n indexOf = types.indexOf || function (v) {\n for(var i = this.length; i-- && this[i] !== v;){}\n return i;\n },\n \n // other helpers / shortcuts\n OP = Object.prototype,\n hOP = OP.hasOwnProperty,\n iPO = OP.isPrototypeOf,\n \n defineProperty = Object.defineProperty,\n empty = [],\n gOPD = Object.getOwnPropertyDescriptor,\n gOPN = Object.getOwnPropertyNames,\n gPO = Object.getPrototypeOf,\n sPO = Object.setPrototypeOf,\n \n // jshint proto: true\n hasProto = !!Object.__proto__,\n \n // V1 helpers\n fixGetClass = false,\n DRECEV1 = '__dreCEv1',\n customElements = window.customElements,\n usableCustomElements = polyfill !== 'force' && !!(\n customElements &&\n customElements.define &&\n customElements.get &&\n customElements.whenDefined\n ),\n Dict = Object.create || Object,\n Map = window.Map || function Map() {\n var K = [], V = [], i;\n return {\n get: function (k) {\n return V[indexOf.call(K, k)];\n },\n set: function (k, v) {\n i = indexOf.call(K, k);\n if (i < 0) V[K.push(k) - 1] = v;\n else V[i] = v;\n }\n };\n },\n Promise = window.Promise || function (fn) {\n var\n notify = [],\n done = false,\n p = {\n 'catch': function () {\n return p;\n },\n 'then': function (cb) {\n notify.push(cb);\n if (done) setTimeout(resolve, 1);\n return p;\n }\n }\n ;\n function resolve(value) {\n done = true;\n while (notify.length) notify.shift()(value);\n }\n fn(resolve);\n return p;\n },\n justCreated = false,\n constructors = Dict(null),\n waitingList = Dict(null),\n nodeNames = new Map(),\n secondArgument = String,\n \n // used to create unique instances\n create = Object.create || function Bridge(proto) {\n // silly broken polyfill probably ever used but short enough to work\n return proto ? ((Bridge.prototype = proto), new Bridge()) : this;\n },\n \n // will set the prototype if possible\n // or copy over all properties\n setPrototype = sPO || (\n hasProto ?\n function (o, p) {\n o.__proto__ = p;\n return o;\n } : (\n (gOPN && gOPD) ?\n (function(){\n function setProperties(o, p) {\n for (var\n key,\n names = gOPN(p),\n i = 0, length = names.length;\n i < length; i++\n ) {\n key = names[i];\n if (!hOP.call(o, key)) {\n defineProperty(o, key, gOPD(p, key));\n }\n }\n }\n return function (o, p) {\n do {\n setProperties(o, p);\n } while ((p = gPO(p)) && !iPO.call(p, o));\n return o;\n };\n }()) :\n function (o, p) {\n for (var key in p) {\n o[key] = p[key];\n }\n return o;\n }\n )),\n \n // DOM shortcuts and helpers, if any\n \n MutationObserver = window.MutationObserver ||\n window.WebKitMutationObserver,\n \n HTMLElementPrototype = (\n window.HTMLElement ||\n window.Element ||\n window.Node\n ).prototype,\n \n IE8 = !iPO.call(HTMLElementPrototype, documentElement),\n \n safeProperty = IE8 ? function (o, k, d) {\n o[k] = d.value;\n return o;\n } : defineProperty,\n \n isValidNode = IE8 ?\n function (node) {\n return node.nodeType === 1;\n } :\n function (node) {\n return iPO.call(HTMLElementPrototype, node);\n },\n \n targets = IE8 && [],\n \n attachShadow = HTMLElementPrototype.attachShadow,\n cloneNode = HTMLElementPrototype.cloneNode,\n dispatchEvent = HTMLElementPrototype.dispatchEvent,\n getAttribute = HTMLElementPrototype.getAttribute,\n hasAttribute = HTMLElementPrototype.hasAttribute,\n removeAttribute = HTMLElementPrototype.removeAttribute,\n setAttribute = HTMLElementPrototype.setAttribute,\n \n // replaced later on\n createElement = document.createElement,\n patchedCreateElement = createElement,\n \n // shared observer for all attributes\n attributesObserver = MutationObserver && {\n attributes: true,\n characterData: true,\n attributeOldValue: true\n },\n \n // useful to detect only if there's no MutationObserver\n DOMAttrModified = MutationObserver || function(e) {\n doesNotSupportDOMAttrModified = false;\n documentElement.removeEventListener(\n DOM_ATTR_MODIFIED,\n DOMAttrModified\n );\n },\n \n // will both be used to make DOMNodeInserted asynchronous\n asapQueue,\n asapTimer = 0,\n \n // internal flags\n setListener = false,\n doesNotSupportDOMAttrModified = true,\n dropDomContentLoaded = true,\n \n // needed for the innerHTML helper\n notFromInnerHTMLHelper = true,\n \n // optionally defined later on\n onSubtreeModified,\n callDOMAttrModified,\n getAttributesMirror,\n observer,\n observe,\n \n // based on setting prototype capability\n // will check proto or the expando attribute\n // in order to setup the node once\n patchIfNotAlready,\n patch\n ;\n \n // only if needed\n if (!(REGISTER_ELEMENT in document)) {\n \n if (sPO || hasProto) {\n patchIfNotAlready = function (node, proto) {\n if (!iPO.call(proto, node)) {\n setupNode(node, proto);\n }\n };\n patch = setupNode;\n } else {\n patchIfNotAlready = function (node, proto) {\n if (!node[EXPANDO_UID]) {\n node[EXPANDO_UID] = Object(true);\n setupNode(node, proto);\n }\n };\n patch = patchIfNotAlready;\n }\n \n if (IE8) {\n doesNotSupportDOMAttrModified = false;\n (function (){\n var\n descriptor = gOPD(HTMLElementPrototype, ADD_EVENT_LISTENER),\n addEventListener = descriptor.value,\n patchedRemoveAttribute = function (name) {\n var e = new CustomEvent(DOM_ATTR_MODIFIED, {bubbles: true});\n e.attrName = name;\n e.prevValue = getAttribute.call(this, name);\n e.newValue = null;\n e[REMOVAL] = e.attrChange = 2;\n removeAttribute.call(this, name);\n dispatchEvent.call(this, e);\n },\n patchedSetAttribute = function (name, value) {\n var\n had = hasAttribute.call(this, name),\n old = had && getAttribute.call(this, name),\n e = new CustomEvent(DOM_ATTR_MODIFIED, {bubbles: true})\n ;\n setAttribute.call(this, name, value);\n e.attrName = name;\n e.prevValue = had ? old : null;\n e.newValue = value;\n if (had) {\n e[MODIFICATION] = e.attrChange = 1;\n } else {\n e[ADDITION] = e.attrChange = 0;\n }\n dispatchEvent.call(this, e);\n },\n onPropertyChange = function (e) {\n // jshint eqnull:true\n var\n node = e.currentTarget,\n superSecret = node[EXPANDO_UID],\n propertyName = e.propertyName,\n event\n ;\n if (superSecret.hasOwnProperty(propertyName)) {\n superSecret = superSecret[propertyName];\n event = new CustomEvent(DOM_ATTR_MODIFIED, {bubbles: true});\n event.attrName = superSecret.name;\n event.prevValue = superSecret.value || null;\n event.newValue = (superSecret.value = node[propertyName] || null);\n if (event.prevValue == null) {\n event[ADDITION] = event.attrChange = 0;\n } else {\n event[MODIFICATION] = event.attrChange = 1;\n }\n dispatchEvent.call(node, event);\n }\n }\n ;\n descriptor.value = function (type, handler, capture) {\n if (\n type === DOM_ATTR_MODIFIED &&\n this[ATTRIBUTE_CHANGED_CALLBACK] &&\n this.setAttribute !== patchedSetAttribute\n ) {\n this[EXPANDO_UID] = {\n className: {\n name: 'class',\n value: this.className\n }\n };\n this.setAttribute = patchedSetAttribute;\n this.removeAttribute = patchedRemoveAttribute;\n addEventListener.call(this, 'propertychange', onPropertyChange);\n }\n addEventListener.call(this, type, handler, capture);\n };\n defineProperty(HTMLElementPrototype, ADD_EVENT_LISTENER, descriptor);\n }());\n } else if (!MutationObserver) {\n documentElement[ADD_EVENT_LISTENER](DOM_ATTR_MODIFIED, DOMAttrModified);\n documentElement.setAttribute(EXPANDO_UID, 1);\n documentElement.removeAttribute(EXPANDO_UID);\n if (doesNotSupportDOMAttrModified) {\n onSubtreeModified = function (e) {\n var\n node = this,\n oldAttributes,\n newAttributes,\n key\n ;\n if (node === e.target) {\n oldAttributes = node[EXPANDO_UID];\n node[EXPANDO_UID] = (newAttributes = getAttributesMirror(node));\n for (key in newAttributes) {\n if (!(key in oldAttributes)) {\n // attribute was added\n return callDOMAttrModified(\n 0,\n node,\n key,\n oldAttributes[key],\n newAttributes[key],\n ADDITION\n );\n } else if (newAttributes[key] !== oldAttributes[key]) {\n // attribute was changed\n return callDOMAttrModified(\n 1,\n node,\n key,\n oldAttributes[key],\n newAttributes[key],\n MODIFICATION\n );\n }\n }\n // checking if it has been removed\n for (key in oldAttributes) {\n if (!(key in newAttributes)) {\n // attribute removed\n return callDOMAttrModified(\n 2,\n node,\n key,\n oldAttributes[key],\n newAttributes[key],\n REMOVAL\n );\n }\n }\n }\n };\n callDOMAttrModified = function (\n attrChange,\n currentTarget,\n attrName,\n prevValue,\n newValue,\n action\n ) {\n var e = {\n attrChange: attrChange,\n currentTarget: currentTarget,\n attrName: attrName,\n prevValue: prevValue,\n newValue: newValue\n };\n e[action] = attrChange;\n onDOMAttrModified(e);\n };\n getAttributesMirror = function (node) {\n for (var\n attr, name,\n result = {},\n attributes = node.attributes,\n i = 0, length = attributes.length;\n i < length; i++\n ) {\n attr = attributes[i];\n name = attr.name;\n if (name !== 'setAttribute') {\n result[name] = attr.value;\n }\n }\n return result;\n };\n }\n }\n \n // set as enumerable, writable and configurable\n document[REGISTER_ELEMENT] = function registerElement(type, options) {\n upperType = type.toUpperCase();\n if (!setListener) {\n // only first time document.registerElement is used\n // we need to set this listener\n // setting it by default might slow down for no reason\n setListener = true;\n if (MutationObserver) {\n observer = (function(attached, detached){\n function checkEmAll(list, callback) {\n for (var i = 0, length = list.length; i < length; callback(list[i++])){}\n }\n return new MutationObserver(function (records) {\n for (var\n current, node, newValue,\n i = 0, length = records.length; i < length; i++\n ) {\n current = records[i];\n if (current.type === 'childList') {\n checkEmAll(current.addedNodes, attached);\n checkEmAll(current.removedNodes, detached);\n } else {\n node = current.target;\n if (notFromInnerHTMLHelper &&\n node[ATTRIBUTE_CHANGED_CALLBACK] &&\n current.attributeName !== 'style') {\n newValue = getAttribute.call(node, current.attributeName);\n if (newValue !== current.oldValue) {\n node[ATTRIBUTE_CHANGED_CALLBACK](\n current.attributeName,\n current.oldValue,\n newValue\n );\n }\n }\n }\n }\n });\n }(executeAction(ATTACHED), executeAction(DETACHED)));\n observe = function (node) {\n observer.observe(\n node,\n {\n childList: true,\n subtree: true\n }\n );\n return node;\n };\n observe(document);\n if (attachShadow) {\n HTMLElementPrototype.attachShadow = function () {\n return observe(attachShadow.apply(this, arguments));\n };\n }\n } else {\n asapQueue = [];\n document[ADD_EVENT_LISTENER]('DOMNodeInserted', onDOMNode(ATTACHED));\n document[ADD_EVENT_LISTENER]('DOMNodeRemoved', onDOMNode(DETACHED));\n }\n \n document[ADD_EVENT_LISTENER](DOM_CONTENT_LOADED, onReadyStateChange);\n document[ADD_EVENT_LISTENER]('readystatechange', onReadyStateChange);\n \n HTMLElementPrototype.cloneNode = function (deep) {\n var\n node = cloneNode.call(this, !!deep),\n i = getTypeIndex(node)\n ;\n if (-1 < i) patch(node, protos[i]);\n if (deep) loopAndSetup(node.querySelectorAll(query));\n return node;\n };\n }\n \n if (-2 < (\n indexOf.call(types, PREFIX_IS + upperType) +\n indexOf.call(types, PREFIX_TAG + upperType)\n )) {\n throwTypeError(type);\n }\n \n if (!validName.test(upperType) || -1 < indexOf.call(invalidNames, upperType)) {\n throw new Error('The type ' + type + ' is invalid');\n }\n \n var\n constructor = function () {\n return extending ?\n document.createElement(nodeName, upperType) :\n document.createElement(nodeName);\n },\n opt = options || OP,\n extending = hOP.call(opt, EXTENDS),\n nodeName = extending ? options[EXTENDS].toUpperCase() : upperType,\n upperType,\n i\n ;\n \n if (extending && -1 < (\n indexOf.call(types, PREFIX_TAG + nodeName)\n )) {\n throwTypeError(nodeName);\n }\n \n i = types.push((extending ? PREFIX_IS : PREFIX_TAG) + upperType) - 1;\n \n query = query.concat(\n query.length ? ',' : '',\n extending ? nodeName + '[is=\"' + type.toLowerCase() + '\"]' : nodeName\n );\n \n constructor.prototype = (\n protos[i] = hOP.call(opt, 'prototype') ?\n opt.prototype :\n create(HTMLElementPrototype)\n );\n \n loopAndVerify(\n document.querySelectorAll(query),\n ATTACHED\n );\n \n return constructor;\n };\n \n document.createElement = (patchedCreateElement = function (localName, typeExtension) {\n var\n is = getIs(typeExtension),\n node = is ?\n createElement.call(document, localName, secondArgument(is)) :\n createElement.call(document, localName),\n name = '' + localName,\n i = indexOf.call(\n types,\n (is ? PREFIX_IS : PREFIX_TAG) +\n (is || name).toUpperCase()\n ),\n setup = -1 < i\n ;\n if (is) {\n node.setAttribute('is', is = is.toLowerCase());\n if (setup) {\n setup = isInQSA(name.toUpperCase(), is);\n }\n }\n notFromInnerHTMLHelper = !document.createElement.innerHTMLHelper;\n if (setup) patch(node, protos[i]);\n return node;\n });\n \n }\n \n function ASAP() {\n var queue = asapQueue.splice(0, asapQueue.length);\n asapTimer = 0;\n while (queue.length) {\n queue.shift().call(\n null, queue.shift()\n );\n }\n }\n \n function loopAndVerify(list, action) {\n for (var i = 0, length = list.length; i < length; i++) {\n verifyAndSetupAndAction(list[i], action);\n }\n }\n \n function loopAndSetup(list) {\n for (var i = 0, length = list.length, node; i < length; i++) {\n node = list[i];\n patch(node, protos[getTypeIndex(node)]);\n }\n }\n \n function executeAction(action) {\n return function (node) {\n if (isValidNode(node)) {\n verifyAndSetupAndAction(node, action);\n loopAndVerify(\n node.querySelectorAll(query),\n action\n );\n }\n };\n }\n \n function getTypeIndex(target) {\n var\n is = getAttribute.call(target, 'is'),\n nodeName = target.nodeName.toUpperCase(),\n i = indexOf.call(\n types,\n is ?\n PREFIX_IS + is.toUpperCase() :\n PREFIX_TAG + nodeName\n )\n ;\n return is && -1 < i && !isInQSA(nodeName, is) ? -1 : i;\n }\n \n function isInQSA(name, type) {\n return -1 < query.indexOf(name + '[is=\"' + type + '\"]');\n }\n \n function onDOMAttrModified(e) {\n var\n node = e.currentTarget,\n attrChange = e.attrChange,\n attrName = e.attrName,\n target = e.target,\n addition = e[ADDITION] || 2,\n removal = e[REMOVAL] || 3\n ;\n if (notFromInnerHTMLHelper &&\n (!target || target === node) &&\n node[ATTRIBUTE_CHANGED_CALLBACK] &&\n attrName !== 'style' && (\n e.prevValue !== e.newValue ||\n // IE9, IE10, and Opera 12 gotcha\n e.newValue === '' && (\n attrChange === addition ||\n attrChange === removal\n )\n )) {\n node[ATTRIBUTE_CHANGED_CALLBACK](\n attrName,\n attrChange === addition ? null : e.prevValue,\n attrChange === removal ? null : e.newValue\n );\n }\n }\n \n function onDOMNode(action) {\n var executor = executeAction(action);\n return function (e) {\n asapQueue.push(executor, e.target);\n if (asapTimer) clearTimeout(asapTimer);\n asapTimer = setTimeout(ASAP, 1);\n };\n }\n \n function onReadyStateChange(e) {\n if (dropDomContentLoaded) {\n dropDomContentLoaded = false;\n e.currentTarget.removeEventListener(DOM_CONTENT_LOADED, onReadyStateChange);\n }\n loopAndVerify(\n (e.target || document).querySelectorAll(query),\n e.detail === DETACHED ? DETACHED : ATTACHED\n );\n if (IE8) purge();\n }\n \n function patchedSetAttribute(name, value) {\n // jshint validthis:true\n var self = this;\n setAttribute.call(self, name, value);\n onSubtreeModified.call(self, {target: self});\n }\n \n function setupNode(node, proto) {\n setPrototype(node, proto);\n if (observer) {\n observer.observe(node, attributesObserver);\n } else {\n if (doesNotSupportDOMAttrModified) {\n node.setAttribute = patchedSetAttribute;\n node[EXPANDO_UID] = getAttributesMirror(node);\n node[ADD_EVENT_LISTENER](DOM_SUBTREE_MODIFIED, onSubtreeModified);\n }\n node[ADD_EVENT_LISTENER](DOM_ATTR_MODIFIED, onDOMAttrModified);\n }\n if (node[CREATED_CALLBACK] && notFromInnerHTMLHelper) {\n node.created = true;\n node[CREATED_CALLBACK]();\n node.created = false;\n }\n }\n \n function purge() {\n for (var\n node,\n i = 0,\n length = targets.length;\n i < length; i++\n ) {\n node = targets[i];\n if (!documentElement.contains(node)) {\n length--;\n targets.splice(i--, 1);\n verifyAndSetupAndAction(node, DETACHED);\n }\n }\n }\n \n function throwTypeError(type) {\n throw new Error('A ' + type + ' type is already registered');\n }\n \n function verifyAndSetupAndAction(node, action) {\n var\n fn,\n i = getTypeIndex(node)\n ;\n if (-1 < i) {\n patchIfNotAlready(node, protos[i]);\n i = 0;\n if (action === ATTACHED && !node[ATTACHED]) {\n node[DETACHED] = false;\n node[ATTACHED] = true;\n i = 1;\n if (IE8 && indexOf.call(targets, node) < 0) {\n targets.push(node);\n }\n } else if (action === DETACHED && !node[DETACHED]) {\n node[ATTACHED] = false;\n node[DETACHED] = true;\n i = 1;\n }\n if (i && (fn = node[action + CALLBACK])) fn.call(node);\n }\n }\n \n \n \n // V1 in da House!\n function CustomElementRegistry() {}\n \n CustomElementRegistry.prototype = {\n constructor: CustomElementRegistry,\n // a workaround for the stubborn WebKit\n define: usableCustomElements ?\n function (name, Class, options) {\n if (options) {\n CERDefine(name, Class, options);\n } else {\n var NAME = name.toUpperCase();\n constructors[NAME] = {\n constructor: Class,\n create: [NAME]\n };\n nodeNames.set(Class, NAME);\n customElements.define(name, Class);\n }\n } :\n CERDefine,\n get: usableCustomElements ?\n function (name) {\n return customElements.get(name) || get(name);\n } :\n get,\n whenDefined: usableCustomElements ?\n function (name) {\n return Promise.race([\n customElements.whenDefined(name),\n whenDefined(name)\n ]);\n } :\n whenDefined\n };\n \n function CERDefine(name, Class, options) {\n var\n is = options && options[EXTENDS] || '',\n CProto = Class.prototype,\n proto = create(CProto),\n attributes = Class.observedAttributes || empty,\n definition = {prototype: proto}\n ;\n // TODO: is this needed at all since it's inherited?\n // defineProperty(proto, 'constructor', {value: Class});\n safeProperty(proto, CREATED_CALLBACK, {\n value: function () {\n if (justCreated) justCreated = false;\n else if (!this[DRECEV1]) {\n this[DRECEV1] = true;\n new Class(this);\n if (CProto[CREATED_CALLBACK])\n CProto[CREATED_CALLBACK].call(this);\n var info = constructors[nodeNames.get(Class)];\n if (!usableCustomElements || info.create.length > 1) {\n notifyAttributes(this);\n }\n }\n }\n });\n safeProperty(proto, ATTRIBUTE_CHANGED_CALLBACK, {\n value: function (name) {\n if (-1 < indexOf.call(attributes, name))\n CProto[ATTRIBUTE_CHANGED_CALLBACK].apply(this, arguments);\n }\n });\n if (CProto[CONNECTED_CALLBACK]) {\n safeProperty(proto, ATTACHED_CALLBACK, {\n value: CProto[CONNECTED_CALLBACK]\n });\n }\n if (CProto[DISCONNECTED_CALLBACK]) {\n safeProperty(proto, DETACHED_CALLBACK, {\n value: CProto[DISCONNECTED_CALLBACK]\n });\n }\n if (is) definition[EXTENDS] = is;\n name = name.toUpperCase();\n constructors[name] = {\n constructor: Class,\n create: is ? [is, secondArgument(name)] : [name]\n };\n nodeNames.set(Class, name);\n document[REGISTER_ELEMENT](name.toLowerCase(), definition);\n whenDefined(name);\n waitingList[name].r();\n }\n \n function get(name) {\n var info = constructors[name.toUpperCase()];\n return info && info.constructor;\n }\n \n function getIs(options) {\n return typeof options === 'string' ?\n options : (options && options.is || '');\n }\n \n function notifyAttributes(self) {\n var\n callback = self[ATTRIBUTE_CHANGED_CALLBACK],\n attributes = callback ? self.attributes : empty,\n i = attributes.length,\n attribute\n ;\n while (i--) {\n attribute = attributes[i]; // || attributes.item(i);\n callback.call(\n self,\n attribute.name || attribute.nodeName,\n null,\n attribute.value || attribute.nodeValue\n );\n }\n }\n \n function whenDefined(name) {\n name = name.toUpperCase();\n if (!(name in waitingList)) {\n waitingList[name] = {};\n waitingList[name].p = new Promise(function (resolve) {\n waitingList[name].r = resolve;\n });\n }\n return waitingList[name].p;\n }\n \n function polyfillV1() {\n if (customElements) delete window.customElements;\n defineProperty(window, 'customElements', {\n configurable: true,\n value: new CustomElementRegistry()\n });\n defineProperty(window, 'CustomElementRegistry', {\n configurable: true,\n value: CustomElementRegistry\n });\n for (var\n patchClass = function (name) {\n var Class = window[name];\n if (Class) {\n window[name] = function CustomElementsV1(self) {\n var info, isNative;\n if (!self) self = this;\n if (!self[DRECEV1]) {\n justCreated = true;\n info = constructors[nodeNames.get(self.constructor)];\n isNative = usableCustomElements && info.create.length === 1;\n self = isNative ?\n Reflect.construct(Class, empty, info.constructor) :\n document.createElement.apply(document, info.create);\n self[DRECEV1] = true;\n justCreated = false;\n if (!isNative) notifyAttributes(self);\n }\n return self;\n };\n window[name].prototype = Class.prototype;\n try {\n Class.prototype.constructor = window[name];\n } catch(WebKit) {\n fixGetClass = true;\n defineProperty(Class, DRECEV1, {value: window[name]});\n }\n }\n },\n Classes = htmlClass.get(/^HTML[A-Z]*[a-z]/),\n i = Classes.length;\n i--;\n patchClass(Classes[i])\n ) {}\n (document.createElement = function (name, options) {\n var is = getIs(options);\n return is ?\n patchedCreateElement.call(this, name, secondArgument(is)) :\n patchedCreateElement.call(this, name);\n });\n }\n \n // if customElements is not there at all\n if (!customElements || polyfill === 'force') polyfillV1();\n else {\n // if available test extends work as expected\n try {\n (function (DRE, options, name) {\n options[EXTENDS] = 'a';\n DRE.prototype = create(HTMLAnchorElement.prototype);\n DRE.prototype.constructor = DRE;\n window.customElements.define(name, DRE, options);\n if (\n getAttribute.call(document.createElement('a', {is: name}), 'is') !== name ||\n (usableCustomElements && getAttribute.call(new DRE(), 'is') !== name)\n ) {\n throw options;\n }\n }(\n function DRE() {\n return Reflect.construct(HTMLAnchorElement, [], DRE);\n },\n {},\n 'document-register-element-a'\n ));\n } catch(o_O) {\n // or force the polyfill if not\n // and keep internal original reference\n polyfillV1();\n }\n }\n \n try {\n createElement.call(document, 'a', 'a');\n } catch(FireFox) {\n secondArgument = function (is) {\n return {is: is};\n };\n }\n \n}\n\nmodule.exports = installCustomElements;\ninstallCustomElements(global);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /opt/gitlab/embedded/service/gitlab-rails/node_modules/document-register-element/build/document-register-element.node.js\n// module id = ../../../node_modules/document-register-element/build/document-register-element.node.js\n// module chunks = main","(function() {\n var Query, pathScorer, pluckCandidates, scorer, sortCandidates;\n\n scorer = require('./scorer');\n\n pathScorer = require('./pathScorer');\n\n Query = require('./query');\n\n pluckCandidates = function(a) {\n return a.candidate;\n };\n\n sortCandidates = function(a, b) {\n return b.score - a.score;\n };\n\n module.exports = function(candidates, query, options) {\n var bKey, candidate, key, maxInners, maxResults, score, scoreProvider, scoredCandidates, spotLeft, string, usePathScoring, _i, _len;\n scoredCandidates = [];\n key = options.key, maxResults = options.maxResults, maxInners = options.maxInners, usePathScoring = options.usePathScoring;\n spotLeft = (maxInners != null) && maxInners > 0 ? maxInners : candidates.length + 1;\n bKey = key != null;\n scoreProvider = usePathScoring ? pathScorer : scorer;\n for (_i = 0, _len = candidates.length; _i < _len; _i++) {\n candidate = candidates[_i];\n string = bKey ? candidate[key] : candidate;\n if (!string) {\n continue;\n }\n score = scoreProvider.score(string, query, options);\n if (score > 0) {\n scoredCandidates.push({\n candidate: candidate,\n score: score\n });\n if (!--spotLeft) {\n break;\n }\n }\n }\n scoredCandidates.sort(sortCandidates);\n candidates = scoredCandidates.map(pluckCandidates);\n if (maxResults != null) {\n candidates = candidates.slice(0, maxResults);\n }\n return candidates;\n };\n\n}).call(this);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /opt/gitlab/embedded/service/gitlab-rails/node_modules/fuzzaldrin-plus/lib/filter.js\n// module id = ../../../node_modules/fuzzaldrin-plus/lib/filter.js\n// module chunks = main","(function() {\n var Query, defaultPathSeparator, filter, matcher, parseOptions, pathScorer, preparedQueryCache, scorer;\n\n filter = require('./filter');\n\n matcher = require('./matcher');\n\n scorer = require('./scorer');\n\n pathScorer = require('./pathScorer');\n\n Query = require('./query');\n\n preparedQueryCache = null;\n\n defaultPathSeparator = (typeof process !== \"undefined\" && process !== null ? process.platform : void 0) === \"win32\" ? '\\\\' : '/';\n\n module.exports = {\n filter: function(candidates, query, options) {\n if (options == null) {\n options = {};\n }\n if (!((query != null ? query.length : void 0) && (candidates != null ? candidates.length : void 0))) {\n return [];\n }\n options = parseOptions(options, query);\n return filter(candidates, query, options);\n },\n score: function(string, query, options) {\n if (options == null) {\n options = {};\n }\n if (!((string != null ? string.length : void 0) && (query != null ? query.length : void 0))) {\n return 0;\n }\n options = parseOptions(options, query);\n if (options.usePathScoring) {\n return pathScorer.score(string, query, options);\n } else {\n return scorer.score(string, query, options);\n }\n },\n match: function(string, query, options) {\n var _i, _ref, _results;\n if (options == null) {\n options = {};\n }\n if (!string) {\n return [];\n }\n if (!query) {\n return [];\n }\n if (string === query) {\n return (function() {\n _results = [];\n for (var _i = 0, _ref = string.length; 0 <= _ref ? _i < _ref : _i > _ref; 0 <= _ref ? _i++ : _i--){ _results.push(_i); }\n return _results;\n }).apply(this);\n }\n options = parseOptions(options, query);\n return matcher.match(string, query, options);\n },\n wrap: function(string, query, options) {\n if (options == null) {\n options = {};\n }\n if (!string) {\n return [];\n }\n if (!query) {\n return [];\n }\n options = parseOptions(options, query);\n return matcher.wrap(string, query, options);\n },\n prepareQuery: function(query, options) {\n if (options == null) {\n options = {};\n }\n options = parseOptions(options, query);\n return options.preparedQuery;\n }\n };\n\n parseOptions = function(options, query) {\n if (options.allowErrors == null) {\n options.allowErrors = false;\n }\n if (options.usePathScoring == null) {\n options.usePathScoring = true;\n }\n if (options.useExtensionBonus == null) {\n options.useExtensionBonus = false;\n }\n if (options.pathSeparator == null) {\n options.pathSeparator = defaultPathSeparator;\n }\n if (options.optCharRegEx == null) {\n options.optCharRegEx = null;\n }\n if (options.wrap == null) {\n options.wrap = null;\n }\n if (options.preparedQuery == null) {\n options.preparedQuery = preparedQueryCache && preparedQueryCache.query === query ? preparedQueryCache : (preparedQueryCache = new Query(query, options));\n }\n return options;\n };\n\n}).call(this);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /opt/gitlab/embedded/service/gitlab-rails/node_modules/fuzzaldrin-plus/lib/fuzzaldrin.js\n// module id = ../../../node_modules/fuzzaldrin-plus/lib/fuzzaldrin.js\n// module chunks = main","(function() {\n var basenameMatch, computeMatch, isMatch, isWordStart, match, mergeMatches, scoreAcronyms, scoreCharacter, scoreConsecutives, _ref;\n\n _ref = require('./scorer'), isMatch = _ref.isMatch, isWordStart = _ref.isWordStart, scoreConsecutives = _ref.scoreConsecutives, scoreCharacter = _ref.scoreCharacter, scoreAcronyms = _ref.scoreAcronyms;\n\n exports.match = match = function(string, query, options) {\n var allowErrors, baseMatches, matches, pathSeparator, preparedQuery, string_lw;\n allowErrors = options.allowErrors, preparedQuery = options.preparedQuery, pathSeparator = options.pathSeparator;\n if (!(allowErrors || isMatch(string, preparedQuery.core_lw, preparedQuery.core_up))) {\n return [];\n }\n string_lw = string.toLowerCase();\n matches = computeMatch(string, string_lw, preparedQuery);\n if (matches.length === 0) {\n return matches;\n }\n if (string.indexOf(pathSeparator) > -1) {\n baseMatches = basenameMatch(string, string_lw, preparedQuery, pathSeparator);\n matches = mergeMatches(matches, baseMatches);\n }\n return matches;\n };\n\n exports.wrap = function(string, query, options) {\n var matchIndex, matchPos, matchPositions, output, strPos, tagClass, tagClose, tagOpen, _ref1;\n if ((options.wrap != null)) {\n _ref1 = options.wrap, tagClass = _ref1.tagClass, tagOpen = _ref1.tagOpen, tagClose = _ref1.tagClose;\n }\n if (tagClass == null) {\n tagClass = 'highlight';\n }\n if (tagOpen == null) {\n tagOpen = '';\n }\n if (tagClose == null) {\n tagClose = '';\n }\n if (string === query) {\n return tagOpen + string + tagClose;\n }\n matchPositions = match(string, query, options);\n if (matchPositions.length === 0) {\n return string;\n }\n output = '';\n matchIndex = -1;\n strPos = 0;\n while (++matchIndex < matchPositions.length) {\n matchPos = matchPositions[matchIndex];\n if (matchPos > strPos) {\n output += string.substring(strPos, matchPos);\n strPos = matchPos;\n }\n while (++matchIndex < matchPositions.length) {\n if (matchPositions[matchIndex] === matchPos + 1) {\n matchPos++;\n } else {\n matchIndex--;\n break;\n }\n }\n matchPos++;\n if (matchPos > strPos) {\n output += tagOpen;\n output += string.substring(strPos, matchPos);\n output += tagClose;\n strPos = matchPos;\n }\n }\n if (strPos <= string.length - 1) {\n output += string.substring(strPos);\n }\n return output;\n };\n\n basenameMatch = function(subject, subject_lw, preparedQuery, pathSeparator) {\n var basePos, depth, end;\n end = subject.length - 1;\n while (subject[end] === pathSeparator) {\n end--;\n }\n basePos = subject.lastIndexOf(pathSeparator, end);\n if (basePos === -1) {\n return [];\n }\n depth = preparedQuery.depth;\n while (depth-- > 0) {\n basePos = subject.lastIndexOf(pathSeparator, basePos - 1);\n if (basePos === -1) {\n return [];\n }\n }\n basePos++;\n end++;\n return computeMatch(subject.slice(basePos, end), subject_lw.slice(basePos, end), preparedQuery, basePos);\n };\n\n mergeMatches = function(a, b) {\n var ai, bj, i, j, m, n, out;\n m = a.length;\n n = b.length;\n if (n === 0) {\n return a.slice();\n }\n if (m === 0) {\n return b.slice();\n }\n i = -1;\n j = 0;\n bj = b[j];\n out = [];\n while (++i < m) {\n ai = a[i];\n while (bj <= ai && ++j < n) {\n if (bj < ai) {\n out.push(bj);\n }\n bj = b[j];\n }\n out.push(ai);\n }\n while (j < n) {\n out.push(b[j++]);\n }\n return out;\n };\n\n computeMatch = function(subject, subject_lw, preparedQuery, offset) {\n var DIAGONAL, LEFT, STOP, UP, acro_score, align, backtrack, csc_diag, csc_row, csc_score, i, j, m, matches, move, n, pos, query, query_lw, score, score_diag, score_row, score_up, si_lw, start, trace;\n if (offset == null) {\n offset = 0;\n }\n query = preparedQuery.query;\n query_lw = preparedQuery.query_lw;\n m = subject.length;\n n = query.length;\n acro_score = scoreAcronyms(subject, subject_lw, query, query_lw).score;\n score_row = new Array(n);\n csc_row = new Array(n);\n STOP = 0;\n UP = 1;\n LEFT = 2;\n DIAGONAL = 3;\n trace = new Array(m * n);\n pos = -1;\n j = -1;\n while (++j < n) {\n score_row[j] = 0;\n csc_row[j] = 0;\n }\n i = -1;\n while (++i < m) {\n score = 0;\n score_up = 0;\n csc_diag = 0;\n si_lw = subject_lw[i];\n j = -1;\n while (++j < n) {\n csc_score = 0;\n align = 0;\n score_diag = score_up;\n if (query_lw[j] === si_lw) {\n start = isWordStart(i, subject, subject_lw);\n csc_score = csc_diag > 0 ? csc_diag : scoreConsecutives(subject, subject_lw, query, query_lw, i, j, start);\n align = score_diag + scoreCharacter(i, j, start, acro_score, csc_score);\n }\n score_up = score_row[j];\n csc_diag = csc_row[j];\n if (score > score_up) {\n move = LEFT;\n } else {\n score = score_up;\n move = UP;\n }\n if (align > score) {\n score = align;\n move = DIAGONAL;\n } else {\n csc_score = 0;\n }\n score_row[j] = score;\n csc_row[j] = csc_score;\n trace[++pos] = score > 0 ? move : STOP;\n }\n }\n i = m - 1;\n j = n - 1;\n pos = i * n + j;\n backtrack = true;\n matches = [];\n while (backtrack && i >= 0 && j >= 0) {\n switch (trace[pos]) {\n case UP:\n i--;\n pos -= n;\n break;\n case LEFT:\n j--;\n pos--;\n break;\n case DIAGONAL:\n matches.push(i + offset);\n j--;\n i--;\n pos -= n + 1;\n break;\n default:\n backtrack = false;\n }\n }\n matches.reverse();\n return matches;\n };\n\n}).call(this);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /opt/gitlab/embedded/service/gitlab-rails/node_modules/fuzzaldrin-plus/lib/matcher.js\n// module id = ../../../node_modules/fuzzaldrin-plus/lib/matcher.js\n// module chunks = main","(function() {\n var computeScore, countDir, file_coeff, getExtension, getExtensionScore, isMatch, scorePath, scoreSize, tau_depth, _ref;\n\n _ref = require('./scorer'), isMatch = _ref.isMatch, computeScore = _ref.computeScore, scoreSize = _ref.scoreSize;\n\n tau_depth = 13;\n\n file_coeff = 1.2;\n\n exports.score = function(string, query, options) {\n var allowErrors, preparedQuery, score, string_lw;\n preparedQuery = options.preparedQuery, allowErrors = options.allowErrors;\n if (!(allowErrors || isMatch(string, preparedQuery.core_lw, preparedQuery.core_up))) {\n return 0;\n }\n string_lw = string.toLowerCase();\n score = computeScore(string, string_lw, preparedQuery);\n score = scorePath(string, string_lw, score, options);\n return Math.ceil(score);\n };\n\n scorePath = function(subject, subject_lw, fullPathScore, options) {\n var alpha, basePathScore, basePos, depth, end, extAdjust, fileLength, pathSeparator, preparedQuery, useExtensionBonus;\n if (fullPathScore === 0) {\n return 0;\n }\n preparedQuery = options.preparedQuery, useExtensionBonus = options.useExtensionBonus, pathSeparator = options.pathSeparator;\n end = subject.length - 1;\n while (subject[end] === pathSeparator) {\n end--;\n }\n basePos = subject.lastIndexOf(pathSeparator, end);\n fileLength = end - basePos;\n extAdjust = 1.0;\n if (useExtensionBonus) {\n extAdjust += getExtensionScore(subject_lw, preparedQuery.ext, basePos, end, 2);\n fullPathScore *= extAdjust;\n }\n if (basePos === -1) {\n return fullPathScore;\n }\n depth = preparedQuery.depth;\n while (basePos > -1 && depth-- > 0) {\n basePos = subject.lastIndexOf(pathSeparator, basePos - 1);\n }\n basePathScore = basePos === -1 ? fullPathScore : extAdjust * computeScore(subject.slice(basePos + 1, end + 1), subject_lw.slice(basePos + 1, end + 1), preparedQuery);\n alpha = 0.5 * tau_depth / (tau_depth + countDir(subject, end + 1, pathSeparator));\n return alpha * basePathScore + (1 - alpha) * fullPathScore * scoreSize(0, file_coeff * fileLength);\n };\n\n exports.countDir = countDir = function(path, end, pathSeparator) {\n var count, i;\n if (end < 1) {\n return 0;\n }\n count = 0;\n i = -1;\n while (++i < end && path[i] === pathSeparator) {\n continue;\n }\n while (++i < end) {\n if (path[i] === pathSeparator) {\n count++;\n while (++i < end && path[i] === pathSeparator) {\n continue;\n }\n }\n }\n return count;\n };\n\n exports.getExtension = getExtension = function(str) {\n var pos;\n pos = str.lastIndexOf(\".\");\n if (pos < 0) {\n return \"\";\n } else {\n return str.substr(pos + 1);\n }\n };\n\n getExtensionScore = function(candidate, ext, startPos, endPos, maxDepth) {\n var m, matched, n, pos;\n if (!ext.length) {\n return 0;\n }\n pos = candidate.lastIndexOf(\".\", endPos);\n if (!(pos > startPos)) {\n return 0;\n }\n n = ext.length;\n m = endPos - pos;\n if (m < n) {\n n = m;\n m = ext.length;\n }\n pos++;\n matched = -1;\n while (++matched < n) {\n if (candidate[pos + matched] !== ext[matched]) {\n break;\n }\n }\n if (matched === 0 && maxDepth > 0) {\n return 0.9 * getExtensionScore(candidate, ext, startPos, pos - 2, maxDepth - 1);\n }\n return matched / m;\n };\n\n}).call(this);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /opt/gitlab/embedded/service/gitlab-rails/node_modules/fuzzaldrin-plus/lib/pathScorer.js\n// module id = ../../../node_modules/fuzzaldrin-plus/lib/pathScorer.js\n// module chunks = main","(function() {\n var Query, coreChars, countDir, getCharCodes, getExtension, opt_char_re, truncatedUpperCase, _ref;\n\n _ref = require(\"./pathScorer\"), countDir = _ref.countDir, getExtension = _ref.getExtension;\n\n module.exports = Query = (function() {\n function Query(query, _arg) {\n var optCharRegEx, pathSeparator, _ref1;\n _ref1 = _arg != null ? _arg : {}, optCharRegEx = _ref1.optCharRegEx, pathSeparator = _ref1.pathSeparator;\n if (!(query && query.length)) {\n return null;\n }\n this.query = query;\n this.query_lw = query.toLowerCase();\n this.core = coreChars(query, optCharRegEx);\n this.core_lw = this.core.toLowerCase();\n this.core_up = truncatedUpperCase(this.core);\n this.depth = countDir(query, query.length, pathSeparator);\n this.ext = getExtension(this.query_lw);\n this.charCodes = getCharCodes(this.query_lw);\n }\n\n return Query;\n\n })();\n\n opt_char_re = /[ _\\-:\\/\\\\]/g;\n\n coreChars = function(query, optCharRegEx) {\n if (optCharRegEx == null) {\n optCharRegEx = opt_char_re;\n }\n return query.replace(optCharRegEx, '');\n };\n\n truncatedUpperCase = function(str) {\n var char, upper, _i, _len;\n upper = \"\";\n for (_i = 0, _len = str.length; _i < _len; _i++) {\n char = str[_i];\n upper += char.toUpperCase()[0];\n }\n return upper;\n };\n\n getCharCodes = function(str) {\n var charCodes, i, len;\n len = str.length;\n i = -1;\n charCodes = [];\n while (++i < len) {\n charCodes[str.charCodeAt(i)] = true;\n }\n return charCodes;\n };\n\n}).call(this);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /opt/gitlab/embedded/service/gitlab-rails/node_modules/fuzzaldrin-plus/lib/query.js\n// module id = ../../../node_modules/fuzzaldrin-plus/lib/query.js\n// module chunks = main","(function() {\n var AcronymResult, computeScore, emptyAcronymResult, isAcronymFullWord, isMatch, isSeparator, isWordEnd, isWordStart, miss_coeff, pos_bonus, scoreAcronyms, scoreCharacter, scoreConsecutives, scoreExact, scoreExactMatch, scorePattern, scorePosition, scoreSize, tau_size, wm;\n\n wm = 150;\n\n pos_bonus = 20;\n\n tau_size = 85;\n\n miss_coeff = 0.75;\n\n exports.score = function(string, query, options) {\n var allowErrors, preparedQuery, score, string_lw;\n preparedQuery = options.preparedQuery, allowErrors = options.allowErrors;\n if (!(allowErrors || isMatch(string, preparedQuery.core_lw, preparedQuery.core_up))) {\n return 0;\n }\n string_lw = string.toLowerCase();\n score = computeScore(string, string_lw, preparedQuery);\n return Math.ceil(score);\n };\n\n exports.isMatch = isMatch = function(subject, query_lw, query_up) {\n var i, j, m, n, qj_lw, qj_up, si;\n m = subject.length;\n n = query_lw.length;\n if (!m || n > m) {\n return false;\n }\n i = -1;\n j = -1;\n while (++j < n) {\n qj_lw = query_lw.charCodeAt(j);\n qj_up = query_up.charCodeAt(j);\n while (++i < m) {\n si = subject.charCodeAt(i);\n if (si === qj_lw || si === qj_up) {\n break;\n }\n }\n if (i === m) {\n return false;\n }\n }\n return true;\n };\n\n exports.computeScore = computeScore = function(subject, subject_lw, preparedQuery) {\n var acro, acro_score, align, csc_diag, csc_row, csc_score, csc_should_rebuild, i, j, m, miss_budget, miss_left, n, pos, query, query_lw, record_miss, score, score_diag, score_row, score_up, si_lw, start, sz;\n query = preparedQuery.query;\n query_lw = preparedQuery.query_lw;\n m = subject.length;\n n = query.length;\n acro = scoreAcronyms(subject, subject_lw, query, query_lw);\n acro_score = acro.score;\n if (acro.count === n) {\n return scoreExact(n, m, acro_score, acro.pos);\n }\n pos = subject_lw.indexOf(query_lw);\n if (pos > -1) {\n return scoreExactMatch(subject, subject_lw, query, query_lw, pos, n, m);\n }\n score_row = new Array(n);\n csc_row = new Array(n);\n sz = scoreSize(n, m);\n miss_budget = Math.ceil(miss_coeff * n) + 5;\n miss_left = miss_budget;\n csc_should_rebuild = true;\n j = -1;\n while (++j < n) {\n score_row[j] = 0;\n csc_row[j] = 0;\n }\n i = -1;\n while (++i < m) {\n si_lw = subject_lw[i];\n if (!si_lw.charCodeAt(0) in preparedQuery.charCodes) {\n if (csc_should_rebuild) {\n j = -1;\n while (++j < n) {\n csc_row[j] = 0;\n }\n csc_should_rebuild = false;\n }\n continue;\n }\n score = 0;\n score_diag = 0;\n csc_diag = 0;\n record_miss = true;\n csc_should_rebuild = true;\n j = -1;\n while (++j < n) {\n score_up = score_row[j];\n if (score_up > score) {\n score = score_up;\n }\n csc_score = 0;\n if (query_lw[j] === si_lw) {\n start = isWordStart(i, subject, subject_lw);\n csc_score = csc_diag > 0 ? csc_diag : scoreConsecutives(subject, subject_lw, query, query_lw, i, j, start);\n align = score_diag + scoreCharacter(i, j, start, acro_score, csc_score);\n if (align > score) {\n score = align;\n miss_left = miss_budget;\n } else {\n if (record_miss && --miss_left <= 0) {\n return Math.max(score, score_row[n - 1]) * sz;\n }\n record_miss = false;\n }\n }\n score_diag = score_up;\n csc_diag = csc_row[j];\n csc_row[j] = csc_score;\n score_row[j] = score;\n }\n }\n score = score_row[n - 1];\n return score * sz;\n };\n\n exports.isWordStart = isWordStart = function(pos, subject, subject_lw) {\n var curr_s, prev_s;\n if (pos === 0) {\n return true;\n }\n curr_s = subject[pos];\n prev_s = subject[pos - 1];\n return isSeparator(prev_s) || (curr_s !== subject_lw[pos] && prev_s === subject_lw[pos - 1]);\n };\n\n exports.isWordEnd = isWordEnd = function(pos, subject, subject_lw, len) {\n var curr_s, next_s;\n if (pos === len - 1) {\n return true;\n }\n curr_s = subject[pos];\n next_s = subject[pos + 1];\n return isSeparator(next_s) || (curr_s === subject_lw[pos] && next_s !== subject_lw[pos + 1]);\n };\n\n isSeparator = function(c) {\n return c === ' ' || c === '.' || c === '-' || c === '_' || c === '/' || c === '\\\\';\n };\n\n scorePosition = function(pos) {\n var sc;\n if (pos < pos_bonus) {\n sc = pos_bonus - pos;\n return 100 + sc * sc;\n } else {\n return Math.max(100 + pos_bonus - pos, 0);\n }\n };\n\n exports.scoreSize = scoreSize = function(n, m) {\n return tau_size / (tau_size + Math.abs(m - n));\n };\n\n scoreExact = function(n, m, quality, pos) {\n return 2 * n * (wm * quality + scorePosition(pos)) * scoreSize(n, m);\n };\n\n exports.scorePattern = scorePattern = function(count, len, sameCase, start, end) {\n var bonus, sz;\n sz = count;\n bonus = 6;\n if (sameCase === count) {\n bonus += 2;\n }\n if (start) {\n bonus += 3;\n }\n if (end) {\n bonus += 1;\n }\n if (count === len) {\n if (start) {\n if (sameCase === len) {\n sz += 2;\n } else {\n sz += 1;\n }\n }\n if (end) {\n bonus += 1;\n }\n }\n return sameCase + sz * (sz + bonus);\n };\n\n exports.scoreCharacter = scoreCharacter = function(i, j, start, acro_score, csc_score) {\n var posBonus;\n posBonus = scorePosition(i);\n if (start) {\n return posBonus + wm * ((acro_score > csc_score ? acro_score : csc_score) + 10);\n }\n return posBonus + wm * csc_score;\n };\n\n exports.scoreConsecutives = scoreConsecutives = function(subject, subject_lw, query, query_lw, i, j, startOfWord) {\n var k, m, mi, n, nj, sameCase, sz;\n m = subject.length;\n n = query.length;\n mi = m - i;\n nj = n - j;\n k = mi < nj ? mi : nj;\n sameCase = 0;\n sz = 0;\n if (query[j] === subject[i]) {\n sameCase++;\n }\n while (++sz < k && query_lw[++j] === subject_lw[++i]) {\n if (query[j] === subject[i]) {\n sameCase++;\n }\n }\n if (sz === 1) {\n return 1 + 2 * sameCase;\n }\n return scorePattern(sz, n, sameCase, startOfWord, isWordEnd(i, subject, subject_lw, m));\n };\n\n exports.scoreExactMatch = scoreExactMatch = function(subject, subject_lw, query, query_lw, pos, n, m) {\n var end, i, pos2, sameCase, start;\n start = isWordStart(pos, subject, subject_lw);\n if (!start) {\n pos2 = subject_lw.indexOf(query_lw, pos + 1);\n if (pos2 > -1) {\n start = isWordStart(pos2, subject, subject_lw);\n if (start) {\n pos = pos2;\n }\n }\n }\n i = -1;\n sameCase = 0;\n while (++i < n) {\n if (query[pos + i] === subject[i]) {\n sameCase++;\n }\n }\n end = isWordEnd(pos + n - 1, subject, subject_lw, m);\n return scoreExact(n, m, scorePattern(n, n, sameCase, start, end), pos);\n };\n\n AcronymResult = (function() {\n function AcronymResult(score, pos, count) {\n this.score = score;\n this.pos = pos;\n this.count = count;\n }\n\n return AcronymResult;\n\n })();\n\n emptyAcronymResult = new AcronymResult(0, 0.1, 0);\n\n exports.scoreAcronyms = scoreAcronyms = function(subject, subject_lw, query, query_lw) {\n var count, fullWord, i, j, m, n, qj_lw, sameCase, score, sepCount, sumPos;\n m = subject.length;\n n = query.length;\n if (!(m > 1 && n > 1)) {\n return emptyAcronymResult;\n }\n count = 0;\n sepCount = 0;\n sumPos = 0;\n sameCase = 0;\n i = -1;\n j = -1;\n while (++j < n) {\n qj_lw = query_lw[j];\n if (isSeparator(qj_lw)) {\n i = subject_lw.indexOf(qj_lw, i + 1);\n if (i > -1) {\n sepCount++;\n continue;\n } else {\n break;\n }\n }\n while (++i < m) {\n if (qj_lw === subject_lw[i] && isWordStart(i, subject, subject_lw)) {\n if (query[j] === subject[i]) {\n sameCase++;\n }\n sumPos += i;\n count++;\n break;\n }\n }\n if (i === m) {\n break;\n }\n }\n if (count < 2) {\n return emptyAcronymResult;\n }\n fullWord = count === n ? isAcronymFullWord(subject, subject_lw, query, count) : false;\n score = scorePattern(count, n, sameCase, true, fullWord);\n return new AcronymResult(score, sumPos / count, count + sepCount);\n };\n\n isAcronymFullWord = function(subject, subject_lw, query, nbAcronymInQuery) {\n var count, i, m, n;\n m = subject.length;\n n = query.length;\n count = 0;\n if (m > 12 * n) {\n return false;\n }\n i = -1;\n while (++i < m) {\n if (isWordStart(i, subject, subject_lw) && ++count > nbAcronymInQuery) {\n return false;\n }\n }\n return true;\n };\n\n}).call(this);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /opt/gitlab/embedded/service/gitlab-rails/node_modules/fuzzaldrin-plus/lib/scorer.js\n// module id = ../../../node_modules/fuzzaldrin-plus/lib/scorer.js\n// module chunks = main","/**\n * Check if argument is a HTML element.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.node = function(value) {\n return value !== undefined\n && value instanceof HTMLElement\n && value.nodeType === 1;\n};\n\n/**\n * Check if argument is a list of HTML elements.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.nodeList = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return value !== undefined\n && (type === '[object NodeList]' || type === '[object HTMLCollection]')\n && ('length' in value)\n && (value.length === 0 || exports.node(value[0]));\n};\n\n/**\n * Check if argument is a string.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.string = function(value) {\n return typeof value === 'string'\n || value instanceof String;\n};\n\n/**\n * Check if argument is a function.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.fn = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return type === '[object Function]';\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /opt/gitlab/embedded/service/gitlab-rails/node_modules/good-listener/src/is.js\n// module id = ../../../node_modules/good-listener/src/is.js\n// module chunks = main","var is = require('./is');\nvar delegate = require('delegate');\n\n/**\n * Validates all params and calls the right\n * listener function based on its target type.\n *\n * @param {String|HTMLElement|HTMLCollection|NodeList} target\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listen(target, type, callback) {\n if (!target && !type && !callback) {\n throw new Error('Missing required arguments');\n }\n\n if (!is.string(type)) {\n throw new TypeError('Second argument must be a String');\n }\n\n if (!is.fn(callback)) {\n throw new TypeError('Third argument must be a Function');\n }\n\n if (is.node(target)) {\n return listenNode(target, type, callback);\n }\n else if (is.nodeList(target)) {\n return listenNodeList(target, type, callback);\n }\n else if (is.string(target)) {\n return listenSelector(target, type, callback);\n }\n else {\n throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');\n }\n}\n\n/**\n * Adds an event listener to a HTML element\n * and returns a remove listener function.\n *\n * @param {HTMLElement} node\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNode(node, type, callback) {\n node.addEventListener(type, callback);\n\n return {\n destroy: function() {\n node.removeEventListener(type, callback);\n }\n }\n}\n\n/**\n * Add an event listener to a list of HTML elements\n * and returns a remove listener function.\n *\n * @param {NodeList|HTMLCollection} nodeList\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNodeList(nodeList, type, callback) {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.addEventListener(type, callback);\n });\n\n return {\n destroy: function() {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.removeEventListener(type, callback);\n });\n }\n }\n}\n\n/**\n * Add an event listener to a selector\n * and returns a remove listener function.\n *\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenSelector(selector, type, callback) {\n return delegate(document.body, selector, type, callback);\n}\n\nmodule.exports = listen;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /opt/gitlab/embedded/service/gitlab-rails/node_modules/good-listener/src/listen.js\n// module id = ../../../node_modules/good-listener/src/listen.js\n// module chunks = main","/**\n * @preserve jed.js https://github.com/SlexAxton/Jed\n */\n/*\n-----------\nA gettext compatible i18n library for modern JavaScript Applications\n\nby Alex Sexton - AlexSexton [at] gmail - @SlexAxton\n\nMIT License\n\nA jQuery Foundation project - requires CLA to contribute -\nhttps://contribute.jquery.org/CLA/\n\n\n\nJed offers the entire applicable GNU gettext spec'd set of\nfunctions, but also offers some nicer wrappers around them.\nThe api for gettext was written for a language with no function\noverloading, so Jed allows a little more of that.\n\nMany thanks to Joshua I. Miller - unrtst@cpan.org - who wrote\ngettext.js back in 2008. I was able to vet a lot of my ideas\nagainst his. I also made sure Jed passed against his tests\nin order to offer easy upgrades -- jsgettext.berlios.de\n*/\n(function (root, undef) {\n\n // Set up some underscore-style functions, if you already have\n // underscore, feel free to delete this section, and use it\n // directly, however, the amount of functions used doesn't\n // warrant having underscore as a full dependency.\n // Underscore 1.3.0 was used to port and is licensed\n // under the MIT License by Jeremy Ashkenas.\n var ArrayProto = Array.prototype,\n ObjProto = Object.prototype,\n slice = ArrayProto.slice,\n hasOwnProp = ObjProto.hasOwnProperty,\n nativeForEach = ArrayProto.forEach,\n breaker = {};\n\n // We're not using the OOP style _ so we don't need the\n // extra level of indirection. This still means that you\n // sub out for real `_` though.\n var _ = {\n forEach : function( obj, iterator, context ) {\n var i, l, key;\n if ( obj === null ) {\n return;\n }\n\n if ( nativeForEach && obj.forEach === nativeForEach ) {\n obj.forEach( iterator, context );\n }\n else if ( obj.length === +obj.length ) {\n for ( i = 0, l = obj.length; i < l; i++ ) {\n if ( i in obj && iterator.call( context, obj[i], i, obj ) === breaker ) {\n return;\n }\n }\n }\n else {\n for ( key in obj) {\n if ( hasOwnProp.call( obj, key ) ) {\n if ( iterator.call (context, obj[key], key, obj ) === breaker ) {\n return;\n }\n }\n }\n }\n },\n extend : function( obj ) {\n this.forEach( slice.call( arguments, 1 ), function ( source ) {\n for ( var prop in source ) {\n obj[prop] = source[prop];\n }\n });\n return obj;\n }\n };\n // END Miniature underscore impl\n\n // Jed is a constructor function\n var Jed = function ( options ) {\n // Some minimal defaults\n this.defaults = {\n \"locale_data\" : {\n \"messages\" : {\n \"\" : {\n \"domain\" : \"messages\",\n \"lang\" : \"en\",\n \"plural_forms\" : \"nplurals=2; plural=(n != 1);\"\n }\n // There are no default keys, though\n }\n },\n // The default domain if one is missing\n \"domain\" : \"messages\",\n // enable debug mode to log untranslated strings to the console\n \"debug\" : false\n };\n\n // Mix in the sent options with the default options\n this.options = _.extend( {}, this.defaults, options );\n this.textdomain( this.options.domain );\n\n if ( options.domain && ! this.options.locale_data[ this.options.domain ] ) {\n throw new Error('Text domain set to non-existent domain: `' + options.domain + '`');\n }\n };\n\n // The gettext spec sets this character as the default\n // delimiter for context lookups.\n // e.g.: context\\u0004key\n // If your translation company uses something different,\n // just change this at any time and it will use that instead.\n Jed.context_delimiter = String.fromCharCode( 4 );\n\n function getPluralFormFunc ( plural_form_string ) {\n return Jed.PF.compile( plural_form_string || \"nplurals=2; plural=(n != 1);\");\n }\n\n function Chain( key, i18n ){\n this._key = key;\n this._i18n = i18n;\n }\n\n // Create a chainable api for adding args prettily\n _.extend( Chain.prototype, {\n onDomain : function ( domain ) {\n this._domain = domain;\n return this;\n },\n withContext : function ( context ) {\n this._context = context;\n return this;\n },\n ifPlural : function ( num, pkey ) {\n this._val = num;\n this._pkey = pkey;\n return this;\n },\n fetch : function ( sArr ) {\n if ( {}.toString.call( sArr ) != '[object Array]' ) {\n sArr = [].slice.call(arguments, 0);\n }\n return ( sArr && sArr.length ? Jed.sprintf : function(x){ return x; } )(\n this._i18n.dcnpgettext(this._domain, this._context, this._key, this._pkey, this._val),\n sArr\n );\n }\n });\n\n // Add functions to the Jed prototype.\n // These will be the functions on the object that's returned\n // from creating a `new Jed()`\n // These seem redundant, but they gzip pretty well.\n _.extend( Jed.prototype, {\n // The sexier api start point\n translate : function ( key ) {\n return new Chain( key, this );\n },\n\n textdomain : function ( domain ) {\n if ( ! domain ) {\n return this._textdomain;\n }\n this._textdomain = domain;\n },\n\n gettext : function ( key ) {\n return this.dcnpgettext.call( this, undef, undef, key );\n },\n\n dgettext : function ( domain, key ) {\n return this.dcnpgettext.call( this, domain, undef, key );\n },\n\n dcgettext : function ( domain , key /*, category */ ) {\n // Ignores the category anyways\n return this.dcnpgettext.call( this, domain, undef, key );\n },\n\n ngettext : function ( skey, pkey, val ) {\n return this.dcnpgettext.call( this, undef, undef, skey, pkey, val );\n },\n\n dngettext : function ( domain, skey, pkey, val ) {\n return this.dcnpgettext.call( this, domain, undef, skey, pkey, val );\n },\n\n dcngettext : function ( domain, skey, pkey, val/*, category */) {\n return this.dcnpgettext.call( this, domain, undef, skey, pkey, val );\n },\n\n pgettext : function ( context, key ) {\n return this.dcnpgettext.call( this, undef, context, key );\n },\n\n dpgettext : function ( domain, context, key ) {\n return this.dcnpgettext.call( this, domain, context, key );\n },\n\n dcpgettext : function ( domain, context, key/*, category */) {\n return this.dcnpgettext.call( this, domain, context, key );\n },\n\n npgettext : function ( context, skey, pkey, val ) {\n return this.dcnpgettext.call( this, undef, context, skey, pkey, val );\n },\n\n dnpgettext : function ( domain, context, skey, pkey, val ) {\n return this.dcnpgettext.call( this, domain, context, skey, pkey, val );\n },\n\n // The most fully qualified gettext function. It has every option.\n // Since it has every option, we can use it from every other method.\n // This is the bread and butter.\n // Technically there should be one more argument in this function for 'Category',\n // but since we never use it, we might as well not waste the bytes to define it.\n dcnpgettext : function ( domain, context, singular_key, plural_key, val ) {\n // Set some defaults\n\n plural_key = plural_key || singular_key;\n\n // Use the global domain default if one\n // isn't explicitly passed in\n domain = domain || this._textdomain;\n\n var fallback;\n\n // Handle special cases\n\n // No options found\n if ( ! this.options ) {\n // There's likely something wrong, but we'll return the correct key for english\n // We do this by instantiating a brand new Jed instance with the default set\n // for everything that could be broken.\n fallback = new Jed();\n return fallback.dcnpgettext.call( fallback, undefined, undefined, singular_key, plural_key, val );\n }\n\n // No translation data provided\n if ( ! this.options.locale_data ) {\n throw new Error('No locale data provided.');\n }\n\n if ( ! this.options.locale_data[ domain ] ) {\n throw new Error('Domain `' + domain + '` was not found.');\n }\n\n if ( ! this.options.locale_data[ domain ][ \"\" ] ) {\n throw new Error('No locale meta information provided.');\n }\n\n // Make sure we have a truthy key. Otherwise we might start looking\n // into the empty string key, which is the options for the locale\n // data.\n if ( ! singular_key ) {\n throw new Error('No translation key found.');\n }\n\n var key = context ? context + Jed.context_delimiter + singular_key : singular_key,\n locale_data = this.options.locale_data,\n dict = locale_data[ domain ],\n defaultConf = (locale_data.messages || this.defaults.locale_data.messages)[\"\"],\n pluralForms = dict[\"\"].plural_forms || dict[\"\"][\"Plural-Forms\"] || dict[\"\"][\"plural-forms\"] || defaultConf.plural_forms || defaultConf[\"Plural-Forms\"] || defaultConf[\"plural-forms\"],\n val_list,\n res;\n\n var val_idx;\n if (val === undefined) {\n // No value passed in; assume singular key lookup.\n val_idx = 0;\n\n } else {\n // Value has been passed in; use plural-forms calculations.\n\n // Handle invalid numbers, but try casting strings for good measure\n if ( typeof val != 'number' ) {\n val = parseInt( val, 10 );\n\n if ( isNaN( val ) ) {\n throw new Error('The number that was passed in is not a number.');\n }\n }\n\n val_idx = getPluralFormFunc(pluralForms)(val);\n }\n\n // Throw an error if a domain isn't found\n if ( ! dict ) {\n throw new Error('No domain named `' + domain + '` could be found.');\n }\n\n val_list = dict[ key ];\n\n // If there is no match, then revert back to\n // english style singular/plural with the keys passed in.\n if ( ! val_list || val_idx > val_list.length ) {\n if (this.options.missing_key_callback) {\n this.options.missing_key_callback(key, domain);\n }\n res = [ singular_key, plural_key ];\n\n // collect untranslated strings\n if (this.options.debug===true) {\n console.log(res[ getPluralFormFunc(pluralForms)( val ) ]);\n }\n return res[ getPluralFormFunc()( val ) ];\n }\n\n res = val_list[ val_idx ];\n\n // This includes empty strings on purpose\n if ( ! res ) {\n res = [ singular_key, plural_key ];\n return res[ getPluralFormFunc()( val ) ];\n }\n return res;\n }\n });\n\n\n // We add in sprintf capabilities for post translation value interolation\n // This is not internally used, so you can remove it if you have this\n // available somewhere else, or want to use a different system.\n\n // We _slightly_ modify the normal sprintf behavior to more gracefully handle\n // undefined values.\n\n /**\n sprintf() for JavaScript 0.7-beta1\n http://www.diveintojavascript.com/projects/javascript-sprintf\n\n Copyright (c) Alexandru Marasteanu \n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n * Neither the name of sprintf() for JavaScript nor the\n names of its contributors may be used to endorse or promote products\n derived from this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL Alexandru Marasteanu BE LIABLE FOR ANY\n DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n var sprintf = (function() {\n function get_type(variable) {\n return Object.prototype.toString.call(variable).slice(8, -1).toLowerCase();\n }\n function str_repeat(input, multiplier) {\n for (var output = []; multiplier > 0; output[--multiplier] = input) {/* do nothing */}\n return output.join('');\n }\n\n var str_format = function() {\n if (!str_format.cache.hasOwnProperty(arguments[0])) {\n str_format.cache[arguments[0]] = str_format.parse(arguments[0]);\n }\n return str_format.format.call(null, str_format.cache[arguments[0]], arguments);\n };\n\n str_format.format = function(parse_tree, argv) {\n var cursor = 1, tree_length = parse_tree.length, node_type = '', arg, output = [], i, k, match, pad, pad_character, pad_length;\n for (i = 0; i < tree_length; i++) {\n node_type = get_type(parse_tree[i]);\n if (node_type === 'string') {\n output.push(parse_tree[i]);\n }\n else if (node_type === 'array') {\n match = parse_tree[i]; // convenience purposes only\n if (match[2]) { // keyword argument\n arg = argv[cursor];\n for (k = 0; k < match[2].length; k++) {\n if (!arg.hasOwnProperty(match[2][k])) {\n throw(sprintf('[sprintf] property \"%s\" does not exist', match[2][k]));\n }\n arg = arg[match[2][k]];\n }\n }\n else if (match[1]) { // positional argument (explicit)\n arg = argv[match[1]];\n }\n else { // positional argument (implicit)\n arg = argv[cursor++];\n }\n\n if (/[^s]/.test(match[8]) && (get_type(arg) != 'number')) {\n throw(sprintf('[sprintf] expecting number but found %s', get_type(arg)));\n }\n\n // Jed EDIT\n if ( typeof arg == 'undefined' || arg === null ) {\n arg = '';\n }\n // Jed EDIT\n\n switch (match[8]) {\n case 'b': arg = arg.toString(2); break;\n case 'c': arg = String.fromCharCode(arg); break;\n case 'd': arg = parseInt(arg, 10); break;\n case 'e': arg = match[7] ? arg.toExponential(match[7]) : arg.toExponential(); break;\n case 'f': arg = match[7] ? parseFloat(arg).toFixed(match[7]) : parseFloat(arg); break;\n case 'o': arg = arg.toString(8); break;\n case 's': arg = ((arg = String(arg)) && match[7] ? arg.substring(0, match[7]) : arg); break;\n case 'u': arg = Math.abs(arg); break;\n case 'x': arg = arg.toString(16); break;\n case 'X': arg = arg.toString(16).toUpperCase(); break;\n }\n arg = (/[def]/.test(match[8]) && match[3] && arg >= 0 ? '+'+ arg : arg);\n pad_character = match[4] ? match[4] == '0' ? '0' : match[4].charAt(1) : ' ';\n pad_length = match[6] - String(arg).length;\n pad = match[6] ? str_repeat(pad_character, pad_length) : '';\n output.push(match[5] ? arg + pad : pad + arg);\n }\n }\n return output.join('');\n };\n\n str_format.cache = {};\n\n str_format.parse = function(fmt) {\n var _fmt = fmt, match = [], parse_tree = [], arg_names = 0;\n while (_fmt) {\n if ((match = /^[^\\x25]+/.exec(_fmt)) !== null) {\n parse_tree.push(match[0]);\n }\n else if ((match = /^\\x25{2}/.exec(_fmt)) !== null) {\n parse_tree.push('%');\n }\n else if ((match = /^\\x25(?:([1-9]\\d*)\\$|\\(([^\\)]+)\\))?(\\+)?(0|'[^$])?(-)?(\\d+)?(?:\\.(\\d+))?([b-fosuxX])/.exec(_fmt)) !== null) {\n if (match[2]) {\n arg_names |= 1;\n var field_list = [], replacement_field = match[2], field_match = [];\n if ((field_match = /^([a-z_][a-z_\\d]*)/i.exec(replacement_field)) !== null) {\n field_list.push(field_match[1]);\n while ((replacement_field = replacement_field.substring(field_match[0].length)) !== '') {\n if ((field_match = /^\\.([a-z_][a-z_\\d]*)/i.exec(replacement_field)) !== null) {\n field_list.push(field_match[1]);\n }\n else if ((field_match = /^\\[(\\d+)\\]/.exec(replacement_field)) !== null) {\n field_list.push(field_match[1]);\n }\n else {\n throw('[sprintf] huh?');\n }\n }\n }\n else {\n throw('[sprintf] huh?');\n }\n match[2] = field_list;\n }\n else {\n arg_names |= 2;\n }\n if (arg_names === 3) {\n throw('[sprintf] mixing positional and named placeholders is not (yet) supported');\n }\n parse_tree.push(match);\n }\n else {\n throw('[sprintf] huh?');\n }\n _fmt = _fmt.substring(match[0].length);\n }\n return parse_tree;\n };\n\n return str_format;\n })();\n\n var vsprintf = function(fmt, argv) {\n argv.unshift(fmt);\n return sprintf.apply(null, argv);\n };\n\n Jed.parse_plural = function ( plural_forms, n ) {\n plural_forms = plural_forms.replace(/n/g, n);\n return Jed.parse_expression(plural_forms);\n };\n\n Jed.sprintf = function ( fmt, args ) {\n if ( {}.toString.call( args ) == '[object Array]' ) {\n return vsprintf( fmt, [].slice.call(args) );\n }\n return sprintf.apply(this, [].slice.call(arguments) );\n };\n\n Jed.prototype.sprintf = function () {\n return Jed.sprintf.apply(this, arguments);\n };\n // END sprintf Implementation\n\n // Start the Plural forms section\n // This is a full plural form expression parser. It is used to avoid\n // running 'eval' or 'new Function' directly against the plural\n // forms.\n //\n // This can be important if you get translations done through a 3rd\n // party vendor. I encourage you to use this instead, however, I\n // also will provide a 'precompiler' that you can use at build time\n // to output valid/safe function representations of the plural form\n // expressions. This means you can build this code out for the most\n // part.\n Jed.PF = {};\n\n Jed.PF.parse = function ( p ) {\n var plural_str = Jed.PF.extractPluralExpr( p );\n return Jed.PF.parser.parse.call(Jed.PF.parser, plural_str);\n };\n\n Jed.PF.compile = function ( p ) {\n // Handle trues and falses as 0 and 1\n function imply( val ) {\n return (val === true ? 1 : val ? val : 0);\n }\n\n var ast = Jed.PF.parse( p );\n return function ( n ) {\n return imply( Jed.PF.interpreter( ast )( n ) );\n };\n };\n\n Jed.PF.interpreter = function ( ast ) {\n return function ( n ) {\n var res;\n switch ( ast.type ) {\n case 'GROUP':\n return Jed.PF.interpreter( ast.expr )( n );\n case 'TERNARY':\n if ( Jed.PF.interpreter( ast.expr )( n ) ) {\n return Jed.PF.interpreter( ast.truthy )( n );\n }\n return Jed.PF.interpreter( ast.falsey )( n );\n case 'OR':\n return Jed.PF.interpreter( ast.left )( n ) || Jed.PF.interpreter( ast.right )( n );\n case 'AND':\n return Jed.PF.interpreter( ast.left )( n ) && Jed.PF.interpreter( ast.right )( n );\n case 'LT':\n return Jed.PF.interpreter( ast.left )( n ) < Jed.PF.interpreter( ast.right )( n );\n case 'GT':\n return Jed.PF.interpreter( ast.left )( n ) > Jed.PF.interpreter( ast.right )( n );\n case 'LTE':\n return Jed.PF.interpreter( ast.left )( n ) <= Jed.PF.interpreter( ast.right )( n );\n case 'GTE':\n return Jed.PF.interpreter( ast.left )( n ) >= Jed.PF.interpreter( ast.right )( n );\n case 'EQ':\n return Jed.PF.interpreter( ast.left )( n ) == Jed.PF.interpreter( ast.right )( n );\n case 'NEQ':\n return Jed.PF.interpreter( ast.left )( n ) != Jed.PF.interpreter( ast.right )( n );\n case 'MOD':\n return Jed.PF.interpreter( ast.left )( n ) % Jed.PF.interpreter( ast.right )( n );\n case 'VAR':\n return n;\n case 'NUM':\n return ast.val;\n default:\n throw new Error(\"Invalid Token found.\");\n }\n };\n };\n\n Jed.PF.extractPluralExpr = function ( p ) {\n // trim first\n p = p.replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n\n if (! /;\\s*$/.test(p)) {\n p = p.concat(';');\n }\n\n var nplurals_re = /nplurals\\=(\\d+);/,\n plural_re = /plural\\=(.*);/,\n nplurals_matches = p.match( nplurals_re ),\n res = {},\n plural_matches;\n\n // Find the nplurals number\n if ( nplurals_matches.length > 1 ) {\n res.nplurals = nplurals_matches[1];\n }\n else {\n throw new Error('nplurals not found in plural_forms string: ' + p );\n }\n\n // remove that data to get to the formula\n p = p.replace( nplurals_re, \"\" );\n plural_matches = p.match( plural_re );\n\n if (!( plural_matches && plural_matches.length > 1 ) ) {\n throw new Error('`plural` expression not found: ' + p);\n }\n return plural_matches[ 1 ];\n };\n\n /* Jison generated parser */\n Jed.PF.parser = (function(){\n\nvar parser = {trace: function trace() { },\nyy: {},\nsymbols_: {\"error\":2,\"expressions\":3,\"e\":4,\"EOF\":5,\"?\":6,\":\":7,\"||\":8,\"&&\":9,\"<\":10,\"<=\":11,\">\":12,\">=\":13,\"!=\":14,\"==\":15,\"%\":16,\"(\":17,\")\":18,\"n\":19,\"NUMBER\":20,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",5:\"EOF\",6:\"?\",7:\":\",8:\"||\",9:\"&&\",10:\"<\",11:\"<=\",12:\">\",13:\">=\",14:\"!=\",15:\"==\",16:\"%\",17:\"(\",18:\")\",19:\"n\",20:\"NUMBER\"},\nproductions_: [0,[3,2],[4,5],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,1],[4,1]],\nperformAction: function anonymous(yytext,yyleng,yylineno,yy,yystate,$$,_$) {\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 1: return { type : 'GROUP', expr: $$[$0-1] };\nbreak;\ncase 2:this.$ = { type: 'TERNARY', expr: $$[$0-4], truthy : $$[$0-2], falsey: $$[$0] };\nbreak;\ncase 3:this.$ = { type: \"OR\", left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 4:this.$ = { type: \"AND\", left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 5:this.$ = { type: 'LT', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 6:this.$ = { type: 'LTE', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 7:this.$ = { type: 'GT', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 8:this.$ = { type: 'GTE', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 9:this.$ = { type: 'NEQ', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 10:this.$ = { type: 'EQ', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 11:this.$ = { type: 'MOD', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 12:this.$ = { type: 'GROUP', expr: $$[$0-1] };\nbreak;\ncase 13:this.$ = { type: 'VAR' };\nbreak;\ncase 14:this.$ = { type: 'NUM', val: Number(yytext) };\nbreak;\n}\n},\ntable: [{3:1,4:2,17:[1,3],19:[1,4],20:[1,5]},{1:[3]},{5:[1,6],6:[1,7],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16]},{4:17,17:[1,3],19:[1,4],20:[1,5]},{5:[2,13],6:[2,13],7:[2,13],8:[2,13],9:[2,13],10:[2,13],11:[2,13],12:[2,13],13:[2,13],14:[2,13],15:[2,13],16:[2,13],18:[2,13]},{5:[2,14],6:[2,14],7:[2,14],8:[2,14],9:[2,14],10:[2,14],11:[2,14],12:[2,14],13:[2,14],14:[2,14],15:[2,14],16:[2,14],18:[2,14]},{1:[2,1]},{4:18,17:[1,3],19:[1,4],20:[1,5]},{4:19,17:[1,3],19:[1,4],20:[1,5]},{4:20,17:[1,3],19:[1,4],20:[1,5]},{4:21,17:[1,3],19:[1,4],20:[1,5]},{4:22,17:[1,3],19:[1,4],20:[1,5]},{4:23,17:[1,3],19:[1,4],20:[1,5]},{4:24,17:[1,3],19:[1,4],20:[1,5]},{4:25,17:[1,3],19:[1,4],20:[1,5]},{4:26,17:[1,3],19:[1,4],20:[1,5]},{4:27,17:[1,3],19:[1,4],20:[1,5]},{6:[1,7],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[1,28]},{6:[1,7],7:[1,29],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16]},{5:[2,3],6:[2,3],7:[2,3],8:[2,3],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[2,3]},{5:[2,4],6:[2,4],7:[2,4],8:[2,4],9:[2,4],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[2,4]},{5:[2,5],6:[2,5],7:[2,5],8:[2,5],9:[2,5],10:[2,5],11:[2,5],12:[2,5],13:[2,5],14:[2,5],15:[2,5],16:[1,16],18:[2,5]},{5:[2,6],6:[2,6],7:[2,6],8:[2,6],9:[2,6],10:[2,6],11:[2,6],12:[2,6],13:[2,6],14:[2,6],15:[2,6],16:[1,16],18:[2,6]},{5:[2,7],6:[2,7],7:[2,7],8:[2,7],9:[2,7],10:[2,7],11:[2,7],12:[2,7],13:[2,7],14:[2,7],15:[2,7],16:[1,16],18:[2,7]},{5:[2,8],6:[2,8],7:[2,8],8:[2,8],9:[2,8],10:[2,8],11:[2,8],12:[2,8],13:[2,8],14:[2,8],15:[2,8],16:[1,16],18:[2,8]},{5:[2,9],6:[2,9],7:[2,9],8:[2,9],9:[2,9],10:[2,9],11:[2,9],12:[2,9],13:[2,9],14:[2,9],15:[2,9],16:[1,16],18:[2,9]},{5:[2,10],6:[2,10],7:[2,10],8:[2,10],9:[2,10],10:[2,10],11:[2,10],12:[2,10],13:[2,10],14:[2,10],15:[2,10],16:[1,16],18:[2,10]},{5:[2,11],6:[2,11],7:[2,11],8:[2,11],9:[2,11],10:[2,11],11:[2,11],12:[2,11],13:[2,11],14:[2,11],15:[2,11],16:[2,11],18:[2,11]},{5:[2,12],6:[2,12],7:[2,12],8:[2,12],9:[2,12],10:[2,12],11:[2,12],12:[2,12],13:[2,12],14:[2,12],15:[2,12],16:[2,12],18:[2,12]},{4:30,17:[1,3],19:[1,4],20:[1,5]},{5:[2,2],6:[1,7],7:[2,2],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[2,2]}],\ndefaultActions: {6:[2,1]},\nparseError: function parseError(str, hash) {\n throw new Error(str);\n},\nparse: function parse(input) {\n var self = this,\n stack = [0],\n vstack = [null], // semantic value stack\n lstack = [], // location stack\n table = this.table,\n yytext = '',\n yylineno = 0,\n yyleng = 0,\n recovering = 0,\n TERROR = 2,\n EOF = 1;\n\n //this.reductionCount = this.shiftCount = 0;\n\n this.lexer.setInput(input);\n this.lexer.yy = this.yy;\n this.yy.lexer = this.lexer;\n if (typeof this.lexer.yylloc == 'undefined')\n this.lexer.yylloc = {};\n var yyloc = this.lexer.yylloc;\n lstack.push(yyloc);\n\n if (typeof this.yy.parseError === 'function')\n this.parseError = this.yy.parseError;\n\n function popStack (n) {\n stack.length = stack.length - 2*n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n\n function lex() {\n var token;\n token = self.lexer.lex() || 1; // $end = 1\n // if token isn't its numeric value, convert\n if (typeof token !== 'number') {\n token = self.symbols_[token] || token;\n }\n return token;\n }\n\n var symbol, preErrorSymbol, state, action, a, r, yyval={},p,len,newState, expected;\n while (true) {\n // retreive state number from top of stack\n state = stack[stack.length-1];\n\n // use default actions if available\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol == null)\n symbol = lex();\n // read action for current state and first input\n action = table[state] && table[state][symbol];\n }\n\n // handle parse error\n _handle_error:\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n\n if (!recovering) {\n // Report error\n expected = [];\n for (p in table[state]) if (this.terminals_[p] && p > 2) {\n expected.push(\"'\"+this.terminals_[p]+\"'\");\n }\n var errStr = '';\n if (this.lexer.showPosition) {\n errStr = 'Parse error on line '+(yylineno+1)+\":\\n\"+this.lexer.showPosition()+\"\\nExpecting \"+expected.join(', ') + \", got '\" + this.terminals_[symbol]+ \"'\";\n } else {\n errStr = 'Parse error on line '+(yylineno+1)+\": Unexpected \" +\n (symbol == 1 /*EOF*/ ? \"end of input\" :\n (\"'\"+(this.terminals_[symbol] || symbol)+\"'\"));\n }\n this.parseError(errStr,\n {text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected});\n }\n\n // just recovered from another error\n if (recovering == 3) {\n if (symbol == EOF) {\n throw new Error(errStr || 'Parsing halted.');\n }\n\n // discard current lookahead and grab another\n yyleng = this.lexer.yyleng;\n yytext = this.lexer.yytext;\n yylineno = this.lexer.yylineno;\n yyloc = this.lexer.yylloc;\n symbol = lex();\n }\n\n // try to recover from error\n while (1) {\n // check for error recovery rule in this state\n if ((TERROR.toString()) in table[state]) {\n break;\n }\n if (state == 0) {\n throw new Error(errStr || 'Parsing halted.');\n }\n popStack(1);\n state = stack[stack.length-1];\n }\n\n preErrorSymbol = symbol; // save the lookahead token\n symbol = TERROR; // insert generic error symbol as new lookahead\n state = stack[stack.length-1];\n action = table[state] && table[state][TERROR];\n recovering = 3; // allow 3 real symbols to be shifted before reporting a new error\n }\n\n // this shouldn't happen, unless resolve defaults are off\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: '+state+', token: '+symbol);\n }\n\n switch (action[0]) {\n\n case 1: // shift\n //this.shiftCount++;\n\n stack.push(symbol);\n vstack.push(this.lexer.yytext);\n lstack.push(this.lexer.yylloc);\n stack.push(action[1]); // push state\n symbol = null;\n if (!preErrorSymbol) { // normal execution/no error\n yyleng = this.lexer.yyleng;\n yytext = this.lexer.yytext;\n yylineno = this.lexer.yylineno;\n yyloc = this.lexer.yylloc;\n if (recovering > 0)\n recovering--;\n } else { // error just occurred, resume old lookahead f/ before error\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n\n case 2: // reduce\n //this.reductionCount++;\n\n len = this.productions_[action[1]][1];\n\n // perform semantic action\n yyval.$ = vstack[vstack.length-len]; // default to $$ = $1\n // default location, uses first token for firsts, last for lasts\n yyval._$ = {\n first_line: lstack[lstack.length-(len||1)].first_line,\n last_line: lstack[lstack.length-1].last_line,\n first_column: lstack[lstack.length-(len||1)].first_column,\n last_column: lstack[lstack.length-1].last_column\n };\n r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack);\n\n if (typeof r !== 'undefined') {\n return r;\n }\n\n // pop off stack\n if (len) {\n stack = stack.slice(0,-1*len*2);\n vstack = vstack.slice(0, -1*len);\n lstack = lstack.slice(0, -1*len);\n }\n\n stack.push(this.productions_[action[1]][0]); // push nonterminal (reduce)\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n // goto new state = table[STATE][NONTERMINAL]\n newState = table[stack[stack.length-2]][stack[stack.length-1]];\n stack.push(newState);\n break;\n\n case 3: // accept\n return true;\n }\n\n }\n\n return true;\n}};/* Jison generated lexer */\nvar lexer = (function(){\n\nvar lexer = ({EOF:1,\nparseError:function parseError(str, hash) {\n if (this.yy.parseError) {\n this.yy.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\nsetInput:function (input) {\n this._input = input;\n this._more = this._less = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {first_line:1,first_column:0,last_line:1,last_column:0};\n return this;\n },\ninput:function () {\n var ch = this._input[0];\n this.yytext+=ch;\n this.yyleng++;\n this.match+=ch;\n this.matched+=ch;\n var lines = ch.match(/\\n/);\n if (lines) this.yylineno++;\n this._input = this._input.slice(1);\n return ch;\n },\nunput:function (ch) {\n this._input = ch + this._input;\n return this;\n },\nmore:function () {\n this._more = true;\n return this;\n },\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20)+(next.length > 20 ? '...':'')).replace(/\\n/g, \"\");\n },\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c+\"^\";\n },\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) this.done = true;\n\n var token,\n match,\n col,\n lines;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i=0;i < rules.length; i++) {\n match = this._input.match(this.rules[rules[i]]);\n if (match) {\n lines = match[0].match(/\\n.*/g);\n if (lines) this.yylineno += lines.length;\n this.yylloc = {first_line: this.yylloc.last_line,\n last_line: this.yylineno+1,\n first_column: this.yylloc.last_column,\n last_column: lines ? lines[lines.length-1].length-1 : this.yylloc.last_column + match[0].length}\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n this._more = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, rules[i],this.conditionStack[this.conditionStack.length-1]);\n if (token) return token;\n else return;\n }\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n this.parseError('Lexical error on line '+(this.yylineno+1)+'. Unrecognized text.\\n'+this.showPosition(),\n {text: \"\", token: null, line: this.yylineno});\n }\n },\nlex:function lex() {\n var r = this.next();\n if (typeof r !== 'undefined') {\n return r;\n } else {\n return this.lex();\n }\n },\nbegin:function begin(condition) {\n this.conditionStack.push(condition);\n },\npopState:function popState() {\n return this.conditionStack.pop();\n },\n_currentRules:function _currentRules() {\n return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules;\n },\ntopState:function () {\n return this.conditionStack[this.conditionStack.length-2];\n },\npushState:function begin(condition) {\n this.begin(condition);\n }});\nlexer.performAction = function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\n\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0:/* skip whitespace */\nbreak;\ncase 1:return 20\nbreak;\ncase 2:return 19\nbreak;\ncase 3:return 8\nbreak;\ncase 4:return 9\nbreak;\ncase 5:return 6\nbreak;\ncase 6:return 7\nbreak;\ncase 7:return 11\nbreak;\ncase 8:return 13\nbreak;\ncase 9:return 10\nbreak;\ncase 10:return 12\nbreak;\ncase 11:return 14\nbreak;\ncase 12:return 15\nbreak;\ncase 13:return 16\nbreak;\ncase 14:return 17\nbreak;\ncase 15:return 18\nbreak;\ncase 16:return 5\nbreak;\ncase 17:return 'INVALID'\nbreak;\n}\n};\nlexer.rules = [/^\\s+/,/^[0-9]+(\\.[0-9]+)?\\b/,/^n\\b/,/^\\|\\|/,/^&&/,/^\\?/,/^:/,/^<=/,/^>=/,/^/,/^!=/,/^==/,/^%/,/^\\(/,/^\\)/,/^$/,/^./];\nlexer.conditions = {\"INITIAL\":{\"rules\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],\"inclusive\":true}};return lexer;})()\nparser.lexer = lexer;\nreturn parser;\n})();\n// End parser\n\n // Handle node, amd, and global systems\n if (typeof exports !== 'undefined') {\n if (typeof module !== 'undefined' && module.exports) {\n exports = module.exports = Jed;\n }\n exports.Jed = Jed;\n }\n else {\n if (typeof define === 'function' && define.amd) {\n define(function() {\n return Jed;\n });\n }\n // Leak a global regardless of module system\n root['Jed'] = Jed;\n }\n\n})(this);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /opt/gitlab/embedded/service/gitlab-rails/node_modules/jed/jed.js\n// module id = ../../../node_modules/jed/jed.js\n// module chunks = main","/*!\n * JavaScript Cookie v2.1.3\n * https://github.com/js-cookie/js-cookie\n *\n * Copyright 2006, 2015 Klaus Hartl & Fagner Brack\n * Released under the MIT license\n */\n;(function (factory) {\n\tvar registeredInModuleLoader = false;\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(factory);\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (typeof exports === 'object') {\n\t\tmodule.exports = factory();\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (!registeredInModuleLoader) {\n\t\tvar OldCookies = window.Cookies;\n\t\tvar api = window.Cookies = factory();\n\t\tapi.noConflict = function () {\n\t\t\twindow.Cookies = OldCookies;\n\t\t\treturn api;\n\t\t};\n\t}\n}(function () {\n\tfunction extend () {\n\t\tvar i = 0;\n\t\tvar result = {};\n\t\tfor (; i < arguments.length; i++) {\n\t\t\tvar attributes = arguments[ i ];\n\t\t\tfor (var key in attributes) {\n\t\t\t\tresult[key] = attributes[key];\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tfunction init (converter) {\n\t\tfunction api (key, value, attributes) {\n\t\t\tvar result;\n\t\t\tif (typeof document === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Write\n\n\t\t\tif (arguments.length > 1) {\n\t\t\t\tattributes = extend({\n\t\t\t\t\tpath: '/'\n\t\t\t\t}, api.defaults, attributes);\n\n\t\t\t\tif (typeof attributes.expires === 'number') {\n\t\t\t\t\tvar expires = new Date();\n\t\t\t\t\texpires.setMilliseconds(expires.getMilliseconds() + attributes.expires * 864e+5);\n\t\t\t\t\tattributes.expires = expires;\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tresult = JSON.stringify(value);\n\t\t\t\t\tif (/^[\\{\\[]/.test(result)) {\n\t\t\t\t\t\tvalue = result;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {}\n\n\t\t\t\tif (!converter.write) {\n\t\t\t\t\tvalue = encodeURIComponent(String(value))\n\t\t\t\t\t\t.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);\n\t\t\t\t} else {\n\t\t\t\t\tvalue = converter.write(value, key);\n\t\t\t\t}\n\n\t\t\t\tkey = encodeURIComponent(String(key));\n\t\t\t\tkey = key.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent);\n\t\t\t\tkey = key.replace(/[\\(\\)]/g, escape);\n\n\t\t\t\treturn (document.cookie = [\n\t\t\t\t\tkey, '=', value,\n\t\t\t\t\tattributes.expires ? '; expires=' + attributes.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE\n\t\t\t\t\tattributes.path ? '; path=' + attributes.path : '',\n\t\t\t\t\tattributes.domain ? '; domain=' + attributes.domain : '',\n\t\t\t\t\tattributes.secure ? '; secure' : ''\n\t\t\t\t].join(''));\n\t\t\t}\n\n\t\t\t// Read\n\n\t\t\tif (!key) {\n\t\t\t\tresult = {};\n\t\t\t}\n\n\t\t\t// To prevent the for loop in the first place assign an empty array\n\t\t\t// in case there are no cookies at all. Also prevents odd result when\n\t\t\t// calling \"get()\"\n\t\t\tvar cookies = document.cookie ? document.cookie.split('; ') : [];\n\t\t\tvar rdecode = /(%[0-9A-Z]{2})+/g;\n\t\t\tvar i = 0;\n\n\t\t\tfor (; i < cookies.length; i++) {\n\t\t\t\tvar parts = cookies[i].split('=');\n\t\t\t\tvar cookie = parts.slice(1).join('=');\n\n\t\t\t\tif (cookie.charAt(0) === '\"') {\n\t\t\t\t\tcookie = cookie.slice(1, -1);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar name = parts[0].replace(rdecode, decodeURIComponent);\n\t\t\t\t\tcookie = converter.read ?\n\t\t\t\t\t\tconverter.read(cookie, name) : converter(cookie, name) ||\n\t\t\t\t\t\tcookie.replace(rdecode, decodeURIComponent);\n\n\t\t\t\t\tif (this.json) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tcookie = JSON.parse(cookie);\n\t\t\t\t\t\t} catch (e) {}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (key === name) {\n\t\t\t\t\t\tresult = cookie;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!key) {\n\t\t\t\t\t\tresult[name] = cookie;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {}\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\n\t\tapi.set = api;\n\t\tapi.get = function (key) {\n\t\t\treturn api.call(api, key);\n\t\t};\n\t\tapi.getJSON = function () {\n\t\t\treturn api.apply({\n\t\t\t\tjson: true\n\t\t\t}, [].slice.call(arguments));\n\t\t};\n\t\tapi.defaults = {};\n\n\t\tapi.remove = function (key, attributes) {\n\t\t\tapi(key, '', extend(attributes, {\n\t\t\t\texpires: -1\n\t\t\t}));\n\t\t};\n\n\t\tapi.withConverter = init;\n\n\t\treturn api;\n\t}\n\n\treturn init(function () {});\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /opt/gitlab/embedded/service/gitlab-rails/node_modules/js-cookie/src/js.cookie.js\n// module id = ../../../node_modules/js-cookie/src/js.cookie.js\n// module chunks = main","/*global define:false */\n/**\n * Copyright 2013 Craig Campbell\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * Mousetrap is a simple keyboard shortcut library for Javascript with\n * no external dependencies\n *\n * @version 1.4.6\n * @url craig.is/killing/mice\n */\n(function(window, document, undefined) {\n\n /**\n * mapping of special keycodes to their corresponding keys\n *\n * everything in this dictionary cannot use keypress events\n * so it has to be here to map to the correct keycodes for\n * keyup/keydown events\n *\n * @type {Object}\n */\n var _MAP = {\n 8: 'backspace',\n 9: 'tab',\n 13: 'enter',\n 16: 'shift',\n 17: 'ctrl',\n 18: 'alt',\n 20: 'capslock',\n 27: 'esc',\n 32: 'space',\n 33: 'pageup',\n 34: 'pagedown',\n 35: 'end',\n 36: 'home',\n 37: 'left',\n 38: 'up',\n 39: 'right',\n 40: 'down',\n 45: 'ins',\n 46: 'del',\n 91: 'meta',\n 93: 'meta',\n 224: 'meta'\n },\n\n /**\n * mapping for special characters so they can support\n *\n * this dictionary is only used incase you want to bind a\n * keyup or keydown event to one of these keys\n *\n * @type {Object}\n */\n _KEYCODE_MAP = {\n 106: '*',\n 107: '+',\n 109: '-',\n 110: '.',\n 111 : '/',\n 186: ';',\n 187: '=',\n 188: ',',\n 189: '-',\n 190: '.',\n 191: '/',\n 192: '`',\n 219: '[',\n 220: '\\\\',\n 221: ']',\n 222: '\\''\n },\n\n /**\n * this is a mapping of keys that require shift on a US keypad\n * back to the non shift equivelents\n *\n * this is so you can use keyup events with these keys\n *\n * note that this will only work reliably on US keyboards\n *\n * @type {Object}\n */\n _SHIFT_MAP = {\n '~': '`',\n '!': '1',\n '@': '2',\n '#': '3',\n '$': '4',\n '%': '5',\n '^': '6',\n '&': '7',\n '*': '8',\n '(': '9',\n ')': '0',\n '_': '-',\n '+': '=',\n ':': ';',\n '\\\"': '\\'',\n '<': ',',\n '>': '.',\n '?': '/',\n '|': '\\\\'\n },\n\n /**\n * this is a list of special strings you can use to map\n * to modifier keys when you specify your keyboard shortcuts\n *\n * @type {Object}\n */\n _SPECIAL_ALIASES = {\n 'option': 'alt',\n 'command': 'meta',\n 'return': 'enter',\n 'escape': 'esc',\n 'mod': /Mac|iPod|iPhone|iPad/.test(navigator.platform) ? 'meta' : 'ctrl'\n },\n\n /**\n * variable to store the flipped version of _MAP from above\n * needed to check if we should use keypress or not when no action\n * is specified\n *\n * @type {Object|undefined}\n */\n _REVERSE_MAP,\n\n /**\n * a list of all the callbacks setup via Mousetrap.bind()\n *\n * @type {Object}\n */\n _callbacks = {},\n\n /**\n * direct map of string combinations to callbacks used for trigger()\n *\n * @type {Object}\n */\n _directMap = {},\n\n /**\n * keeps track of what level each sequence is at since multiple\n * sequences can start out with the same sequence\n *\n * @type {Object}\n */\n _sequenceLevels = {},\n\n /**\n * variable to store the setTimeout call\n *\n * @type {null|number}\n */\n _resetTimer,\n\n /**\n * temporary state where we will ignore the next keyup\n *\n * @type {boolean|string}\n */\n _ignoreNextKeyup = false,\n\n /**\n * temporary state where we will ignore the next keypress\n *\n * @type {boolean}\n */\n _ignoreNextKeypress = false,\n\n /**\n * are we currently inside of a sequence?\n * type of action (\"keyup\" or \"keydown\" or \"keypress\") or false\n *\n * @type {boolean|string}\n */\n _nextExpectedAction = false;\n\n /**\n * loop through the f keys, f1 to f19 and add them to the map\n * programatically\n */\n for (var i = 1; i < 20; ++i) {\n _MAP[111 + i] = 'f' + i;\n }\n\n /**\n * loop through to map numbers on the numeric keypad\n */\n for (i = 0; i <= 9; ++i) {\n _MAP[i + 96] = i;\n }\n\n /**\n * cross browser add event method\n *\n * @param {Element|HTMLDocument} object\n * @param {string} type\n * @param {Function} callback\n * @returns void\n */\n function _addEvent(object, type, callback) {\n if (object.addEventListener) {\n object.addEventListener(type, callback, false);\n return;\n }\n\n object.attachEvent('on' + type, callback);\n }\n\n /**\n * takes the event and returns the key character\n *\n * @param {Event} e\n * @return {string}\n */\n function _characterFromEvent(e) {\n\n // for keypress events we should return the character as is\n if (e.type == 'keypress') {\n var character = String.fromCharCode(e.which);\n\n // if the shift key is not pressed then it is safe to assume\n // that we want the character to be lowercase. this means if\n // you accidentally have caps lock on then your key bindings\n // will continue to work\n //\n // the only side effect that might not be desired is if you\n // bind something like 'A' cause you want to trigger an\n // event when capital A is pressed caps lock will no longer\n // trigger the event. shift+a will though.\n if (!e.shiftKey) {\n character = character.toLowerCase();\n }\n\n return character;\n }\n\n // for non keypress events the special maps are needed\n if (_MAP[e.which]) {\n return _MAP[e.which];\n }\n\n if (_KEYCODE_MAP[e.which]) {\n return _KEYCODE_MAP[e.which];\n }\n\n // if it is not in the special map\n\n // with keydown and keyup events the character seems to always\n // come in as an uppercase character whether you are pressing shift\n // or not. we should make sure it is always lowercase for comparisons\n return String.fromCharCode(e.which).toLowerCase();\n }\n\n /**\n * checks if two arrays are equal\n *\n * @param {Array} modifiers1\n * @param {Array} modifiers2\n * @returns {boolean}\n */\n function _modifiersMatch(modifiers1, modifiers2) {\n return modifiers1.sort().join(',') === modifiers2.sort().join(',');\n }\n\n /**\n * resets all sequence counters except for the ones passed in\n *\n * @param {Object} doNotReset\n * @returns void\n */\n function _resetSequences(doNotReset) {\n doNotReset = doNotReset || {};\n\n var activeSequences = false,\n key;\n\n for (key in _sequenceLevels) {\n if (doNotReset[key]) {\n activeSequences = true;\n continue;\n }\n _sequenceLevels[key] = 0;\n }\n\n if (!activeSequences) {\n _nextExpectedAction = false;\n }\n }\n\n /**\n * finds all callbacks that match based on the keycode, modifiers,\n * and action\n *\n * @param {string} character\n * @param {Array} modifiers\n * @param {Event|Object} e\n * @param {string=} sequenceName - name of the sequence we are looking for\n * @param {string=} combination\n * @param {number=} level\n * @returns {Array}\n */\n function _getMatches(character, modifiers, e, sequenceName, combination, level) {\n var i,\n callback,\n matches = [],\n action = e.type;\n\n // if there are no events related to this keycode\n if (!_callbacks[character]) {\n return [];\n }\n\n // if a modifier key is coming up on its own we should allow it\n if (action == 'keyup' && _isModifier(character)) {\n modifiers = [character];\n }\n\n // loop through all callbacks for the key that was pressed\n // and see if any of them match\n for (i = 0; i < _callbacks[character].length; ++i) {\n callback = _callbacks[character][i];\n\n // if a sequence name is not specified, but this is a sequence at\n // the wrong level then move onto the next match\n if (!sequenceName && callback.seq && _sequenceLevels[callback.seq] != callback.level) {\n continue;\n }\n\n // if the action we are looking for doesn't match the action we got\n // then we should keep going\n if (action != callback.action) {\n continue;\n }\n\n // if this is a keypress event and the meta key and control key\n // are not pressed that means that we need to only look at the\n // character, otherwise check the modifiers as well\n //\n // chrome will not fire a keypress if meta or control is down\n // safari will fire a keypress if meta or meta+shift is down\n // firefox will fire a keypress if meta or control is down\n if ((action == 'keypress' && !e.metaKey && !e.ctrlKey) || _modifiersMatch(modifiers, callback.modifiers)) {\n\n // when you bind a combination or sequence a second time it\n // should overwrite the first one. if a sequenceName or\n // combination is specified in this call it does just that\n //\n // @todo make deleting its own method?\n var deleteCombo = !sequenceName && callback.combo == combination;\n var deleteSequence = sequenceName && callback.seq == sequenceName && callback.level == level;\n if (deleteCombo || deleteSequence) {\n _callbacks[character].splice(i, 1);\n }\n\n matches.push(callback);\n }\n }\n\n return matches;\n }\n\n /**\n * takes a key event and figures out what the modifiers are\n *\n * @param {Event} e\n * @returns {Array}\n */\n function _eventModifiers(e) {\n var modifiers = [];\n\n if (e.shiftKey) {\n modifiers.push('shift');\n }\n\n if (e.altKey) {\n modifiers.push('alt');\n }\n\n if (e.ctrlKey) {\n modifiers.push('ctrl');\n }\n\n if (e.metaKey) {\n modifiers.push('meta');\n }\n\n return modifiers;\n }\n\n /**\n * prevents default for this event\n *\n * @param {Event} e\n * @returns void\n */\n function _preventDefault(e) {\n if (e.preventDefault) {\n e.preventDefault();\n return;\n }\n\n e.returnValue = false;\n }\n\n /**\n * stops propogation for this event\n *\n * @param {Event} e\n * @returns void\n */\n function _stopPropagation(e) {\n if (e.stopPropagation) {\n e.stopPropagation();\n return;\n }\n\n e.cancelBubble = true;\n }\n\n /**\n * actually calls the callback function\n *\n * if your callback function returns false this will use the jquery\n * convention - prevent default and stop propogation on the event\n *\n * @param {Function} callback\n * @param {Event} e\n * @returns void\n */\n function _fireCallback(callback, e, combo, sequence) {\n\n // if this event should not happen stop here\n if (Mousetrap.stopCallback(e, e.target || e.srcElement, combo, sequence)) {\n return;\n }\n\n if (callback(e, combo) === false) {\n _preventDefault(e);\n _stopPropagation(e);\n }\n }\n\n /**\n * handles a character key event\n *\n * @param {string} character\n * @param {Array} modifiers\n * @param {Event} e\n * @returns void\n */\n function _handleKey(character, modifiers, e) {\n var callbacks = _getMatches(character, modifiers, e),\n i,\n doNotReset = {},\n maxLevel = 0,\n processedSequenceCallback = false;\n\n // Calculate the maxLevel for sequences so we can only execute the longest callback sequence\n for (i = 0; i < callbacks.length; ++i) {\n if (callbacks[i].seq) {\n maxLevel = Math.max(maxLevel, callbacks[i].level);\n }\n }\n\n // loop through matching callbacks for this key event\n for (i = 0; i < callbacks.length; ++i) {\n\n // fire for all sequence callbacks\n // this is because if for example you have multiple sequences\n // bound such as \"g i\" and \"g t\" they both need to fire the\n // callback for matching g cause otherwise you can only ever\n // match the first one\n if (callbacks[i].seq) {\n\n // only fire callbacks for the maxLevel to prevent\n // subsequences from also firing\n //\n // for example 'a option b' should not cause 'option b' to fire\n // even though 'option b' is part of the other sequence\n //\n // any sequences that do not match here will be discarded\n // below by the _resetSequences call\n if (callbacks[i].level != maxLevel) {\n continue;\n }\n\n processedSequenceCallback = true;\n\n // keep a list of which sequences were matches for later\n doNotReset[callbacks[i].seq] = 1;\n _fireCallback(callbacks[i].callback, e, callbacks[i].combo, callbacks[i].seq);\n continue;\n }\n\n // if there were no sequence matches but we are still here\n // that means this is a regular match so we should fire that\n if (!processedSequenceCallback) {\n _fireCallback(callbacks[i].callback, e, callbacks[i].combo);\n }\n }\n\n // if the key you pressed matches the type of sequence without\n // being a modifier (ie \"keyup\" or \"keypress\") then we should\n // reset all sequences that were not matched by this event\n //\n // this is so, for example, if you have the sequence \"h a t\" and you\n // type \"h e a r t\" it does not match. in this case the \"e\" will\n // cause the sequence to reset\n //\n // modifier keys are ignored because you can have a sequence\n // that contains modifiers such as \"enter ctrl+space\" and in most\n // cases the modifier key will be pressed before the next key\n //\n // also if you have a sequence such as \"ctrl+b a\" then pressing the\n // \"b\" key will trigger a \"keypress\" and a \"keydown\"\n //\n // the \"keydown\" is expected when there is a modifier, but the\n // \"keypress\" ends up matching the _nextExpectedAction since it occurs\n // after and that causes the sequence to reset\n //\n // we ignore keypresses in a sequence that directly follow a keydown\n // for the same character\n var ignoreThisKeypress = e.type == 'keypress' && _ignoreNextKeypress;\n if (e.type == _nextExpectedAction && !_isModifier(character) && !ignoreThisKeypress) {\n _resetSequences(doNotReset);\n }\n\n _ignoreNextKeypress = processedSequenceCallback && e.type == 'keydown';\n }\n\n /**\n * handles a keydown event\n *\n * @param {Event} e\n * @returns void\n */\n function _handleKeyEvent(e) {\n\n // normalize e.which for key events\n // @see http://stackoverflow.com/questions/4285627/javascript-keycode-vs-charcode-utter-confusion\n if (typeof e.which !== 'number') {\n e.which = e.keyCode;\n }\n\n var character = _characterFromEvent(e);\n\n // no character found then stop\n if (!character) {\n return;\n }\n\n // need to use === for the character check because the character can be 0\n if (e.type == 'keyup' && _ignoreNextKeyup === character) {\n _ignoreNextKeyup = false;\n return;\n }\n\n Mousetrap.handleKey(character, _eventModifiers(e), e);\n }\n\n /**\n * determines if the keycode specified is a modifier key or not\n *\n * @param {string} key\n * @returns {boolean}\n */\n function _isModifier(key) {\n return key == 'shift' || key == 'ctrl' || key == 'alt' || key == 'meta';\n }\n\n /**\n * called to set a 1 second timeout on the specified sequence\n *\n * this is so after each key press in the sequence you have 1 second\n * to press the next key before you have to start over\n *\n * @returns void\n */\n function _resetSequenceTimer() {\n clearTimeout(_resetTimer);\n _resetTimer = setTimeout(_resetSequences, 1000);\n }\n\n /**\n * reverses the map lookup so that we can look for specific keys\n * to see what can and can't use keypress\n *\n * @return {Object}\n */\n function _getReverseMap() {\n if (!_REVERSE_MAP) {\n _REVERSE_MAP = {};\n for (var key in _MAP) {\n\n // pull out the numeric keypad from here cause keypress should\n // be able to detect the keys from the character\n if (key > 95 && key < 112) {\n continue;\n }\n\n if (_MAP.hasOwnProperty(key)) {\n _REVERSE_MAP[_MAP[key]] = key;\n }\n }\n }\n return _REVERSE_MAP;\n }\n\n /**\n * picks the best action based on the key combination\n *\n * @param {string} key - character for key\n * @param {Array} modifiers\n * @param {string=} action passed in\n */\n function _pickBestAction(key, modifiers, action) {\n\n // if no action was picked in we should try to pick the one\n // that we think would work best for this key\n if (!action) {\n action = _getReverseMap()[key] ? 'keydown' : 'keypress';\n }\n\n // modifier keys don't work as expected with keypress,\n // switch to keydown\n if (action == 'keypress' && modifiers.length) {\n action = 'keydown';\n }\n\n return action;\n }\n\n /**\n * binds a key sequence to an event\n *\n * @param {string} combo - combo specified in bind call\n * @param {Array} keys\n * @param {Function} callback\n * @param {string=} action\n * @returns void\n */\n function _bindSequence(combo, keys, callback, action) {\n\n // start off by adding a sequence level record for this combination\n // and setting the level to 0\n _sequenceLevels[combo] = 0;\n\n /**\n * callback to increase the sequence level for this sequence and reset\n * all other sequences that were active\n *\n * @param {string} nextAction\n * @returns {Function}\n */\n function _increaseSequence(nextAction) {\n return function() {\n _nextExpectedAction = nextAction;\n ++_sequenceLevels[combo];\n _resetSequenceTimer();\n };\n }\n\n /**\n * wraps the specified callback inside of another function in order\n * to reset all sequence counters as soon as this sequence is done\n *\n * @param {Event} e\n * @returns void\n */\n function _callbackAndReset(e) {\n _fireCallback(callback, e, combo);\n\n // we should ignore the next key up if the action is key down\n // or keypress. this is so if you finish a sequence and\n // release the key the final key will not trigger a keyup\n if (action !== 'keyup') {\n _ignoreNextKeyup = _characterFromEvent(e);\n }\n\n // weird race condition if a sequence ends with the key\n // another sequence begins with\n setTimeout(_resetSequences, 10);\n }\n\n // loop through keys one at a time and bind the appropriate callback\n // function. for any key leading up to the final one it should\n // increase the sequence. after the final, it should reset all sequences\n //\n // if an action is specified in the original bind call then that will\n // be used throughout. otherwise we will pass the action that the\n // next key in the sequence should match. this allows a sequence\n // to mix and match keypress and keydown events depending on which\n // ones are better suited to the key provided\n for (var i = 0; i < keys.length; ++i) {\n var isFinal = i + 1 === keys.length;\n var wrappedCallback = isFinal ? _callbackAndReset : _increaseSequence(action || _getKeyInfo(keys[i + 1]).action);\n _bindSingle(keys[i], wrappedCallback, action, combo, i);\n }\n }\n\n /**\n * Converts from a string key combination to an array\n *\n * @param {string} combination like \"command+shift+l\"\n * @return {Array}\n */\n function _keysFromString(combination) {\n if (combination === '+') {\n return ['+'];\n }\n\n return combination.split('+');\n }\n\n /**\n * Gets info for a specific key combination\n *\n * @param {string} combination key combination (\"command+s\" or \"a\" or \"*\")\n * @param {string=} action\n * @returns {Object}\n */\n function _getKeyInfo(combination, action) {\n var keys,\n key,\n i,\n modifiers = [];\n\n // take the keys from this pattern and figure out what the actual\n // pattern is all about\n keys = _keysFromString(combination);\n\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n\n // normalize key names\n if (_SPECIAL_ALIASES[key]) {\n key = _SPECIAL_ALIASES[key];\n }\n\n // if this is not a keypress event then we should\n // be smart about using shift keys\n // this will only work for US keyboards however\n if (action && action != 'keypress' && _SHIFT_MAP[key]) {\n key = _SHIFT_MAP[key];\n modifiers.push('shift');\n }\n\n // if this key is a modifier then add it to the list of modifiers\n if (_isModifier(key)) {\n modifiers.push(key);\n }\n }\n\n // depending on what the key combination is\n // we will try to pick the best event for it\n action = _pickBestAction(key, modifiers, action);\n\n return {\n key: key,\n modifiers: modifiers,\n action: action\n };\n }\n\n /**\n * binds a single keyboard combination\n *\n * @param {string} combination\n * @param {Function} callback\n * @param {string=} action\n * @param {string=} sequenceName - name of sequence if part of sequence\n * @param {number=} level - what part of the sequence the command is\n * @returns void\n */\n function _bindSingle(combination, callback, action, sequenceName, level) {\n\n // store a direct mapped reference for use with Mousetrap.trigger\n _directMap[combination + ':' + action] = callback;\n\n // make sure multiple spaces in a row become a single space\n combination = combination.replace(/\\s+/g, ' ');\n\n var sequence = combination.split(' '),\n info;\n\n // if this pattern is a sequence of keys then run through this method\n // to reprocess each pattern one key at a time\n if (sequence.length > 1) {\n _bindSequence(combination, sequence, callback, action);\n return;\n }\n\n info = _getKeyInfo(combination, action);\n\n // make sure to initialize array if this is the first time\n // a callback is added for this key\n _callbacks[info.key] = _callbacks[info.key] || [];\n\n // remove an existing match if there is one\n _getMatches(info.key, info.modifiers, {type: info.action}, sequenceName, combination, level);\n\n // add this call back to the array\n // if it is a sequence put it at the beginning\n // if not put it at the end\n //\n // this is important because the way these are processed expects\n // the sequence ones to come first\n _callbacks[info.key][sequenceName ? 'unshift' : 'push']({\n callback: callback,\n modifiers: info.modifiers,\n action: info.action,\n seq: sequenceName,\n level: level,\n combo: combination\n });\n }\n\n /**\n * binds multiple combinations to the same callback\n *\n * @param {Array} combinations\n * @param {Function} callback\n * @param {string|undefined} action\n * @returns void\n */\n function _bindMultiple(combinations, callback, action) {\n for (var i = 0; i < combinations.length; ++i) {\n _bindSingle(combinations[i], callback, action);\n }\n }\n\n // start!\n _addEvent(document, 'keypress', _handleKeyEvent);\n _addEvent(document, 'keydown', _handleKeyEvent);\n _addEvent(document, 'keyup', _handleKeyEvent);\n\n var Mousetrap = {\n\n /**\n * binds an event to mousetrap\n *\n * can be a single key, a combination of keys separated with +,\n * an array of keys, or a sequence of keys separated by spaces\n *\n * be sure to list the modifier keys first to make sure that the\n * correct key ends up getting bound (the last key in the pattern)\n *\n * @param {string|Array} keys\n * @param {Function} callback\n * @param {string=} action - 'keypress', 'keydown', or 'keyup'\n * @returns void\n */\n bind: function(keys, callback, action) {\n keys = keys instanceof Array ? keys : [keys];\n _bindMultiple(keys, callback, action);\n return this;\n },\n\n /**\n * unbinds an event to mousetrap\n *\n * the unbinding sets the callback function of the specified key combo\n * to an empty function and deletes the corresponding key in the\n * _directMap dict.\n *\n * TODO: actually remove this from the _callbacks dictionary instead\n * of binding an empty function\n *\n * the keycombo+action has to be exactly the same as\n * it was defined in the bind method\n *\n * @param {string|Array} keys\n * @param {string} action\n * @returns void\n */\n unbind: function(keys, action) {\n return Mousetrap.bind(keys, function() {}, action);\n },\n\n /**\n * triggers an event that has already been bound\n *\n * @param {string} keys\n * @param {string=} action\n * @returns void\n */\n trigger: function(keys, action) {\n if (_directMap[keys + ':' + action]) {\n _directMap[keys + ':' + action]({}, keys);\n }\n return this;\n },\n\n /**\n * resets the library back to its initial state. this is useful\n * if you want to clear out the current keyboard shortcuts and bind\n * new ones - for example if you switch to another page\n *\n * @returns void\n */\n reset: function() {\n _callbacks = {};\n _directMap = {};\n return this;\n },\n\n /**\n * should we stop this event before firing off callbacks\n *\n * @param {Event} e\n * @param {Element} element\n * @return {boolean}\n */\n stopCallback: function(e, element) {\n\n // if the element has the class \"mousetrap\" then no need to stop\n if ((' ' + element.className + ' ').indexOf(' mousetrap ') > -1) {\n return false;\n }\n\n // stop for input, select, and textarea\n return element.tagName == 'INPUT' || element.tagName == 'SELECT' || element.tagName == 'TEXTAREA' || element.isContentEditable;\n },\n\n /**\n * exposes _handleKey publicly so it can be overwritten by extensions\n */\n handleKey: _handleKey\n };\n\n // expose mousetrap to the global object\n window.Mousetrap = Mousetrap;\n\n // expose mousetrap as an AMD module\n if (typeof define === 'function' && define.amd) {\n define(Mousetrap);\n }\n}) (window, document);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /opt/gitlab/embedded/service/gitlab-rails/node_modules/mousetrap/mousetrap.js\n// module id = ../../../node_modules/mousetrap/mousetrap.js\n// module chunks = main","function select(element) {\n var selectedText;\n\n if (element.nodeName === 'SELECT') {\n element.focus();\n\n selectedText = element.value;\n }\n else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {\n var isReadOnly = element.hasAttribute('readonly');\n\n if (!isReadOnly) {\n element.setAttribute('readonly', '');\n }\n\n element.select();\n element.setSelectionRange(0, element.value.length);\n\n if (!isReadOnly) {\n element.removeAttribute('readonly');\n }\n\n selectedText = element.value;\n }\n else {\n if (element.hasAttribute('contenteditable')) {\n element.focus();\n }\n\n var selection = window.getSelection();\n var range = document.createRange();\n\n range.selectNodeContents(element);\n selection.removeAllRanges();\n selection.addRange(range);\n\n selectedText = selection.toString();\n }\n\n return selectedText;\n}\n\nmodule.exports = select;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /opt/gitlab/embedded/service/gitlab-rails/node_modules/select/src/select.js\n// module id = ../../../node_modules/select/src/select.js\n// module chunks = main","!function(root, factory) {\n \"function\" == typeof define && define.amd ? // AMD. Register as an anonymous module unless amdModuleId is set\n define([], function() {\n return root.svg4everybody = factory();\n }) : \"object\" == typeof module && module.exports ? // Node. Does not work with strict CommonJS, but\n // only CommonJS-like environments that support module.exports,\n // like Node.\n module.exports = factory() : root.svg4everybody = factory();\n}(this, function() {\n /*! svg4everybody v2.1.9 | github.com/jonathantneal/svg4everybody */\n function embed(parent, svg, target) {\n // if the target exists\n if (target) {\n // create a document fragment to hold the contents of the target\n var fragment = document.createDocumentFragment(), viewBox = !svg.hasAttribute(\"viewBox\") && target.getAttribute(\"viewBox\");\n // conditionally set the viewBox on the svg\n viewBox && svg.setAttribute(\"viewBox\", viewBox);\n // copy the contents of the clone into the fragment\n for (// clone the target\n var clone = target.cloneNode(!0); clone.childNodes.length; ) {\n fragment.appendChild(clone.firstChild);\n }\n // append the fragment into the svg\n parent.appendChild(fragment);\n }\n }\n function loadreadystatechange(xhr) {\n // listen to changes in the request\n xhr.onreadystatechange = function() {\n // if the request is ready\n if (4 === xhr.readyState) {\n // get the cached html document\n var cachedDocument = xhr._cachedDocument;\n // ensure the cached html document based on the xhr response\n cachedDocument || (cachedDocument = xhr._cachedDocument = document.implementation.createHTMLDocument(\"\"), \n cachedDocument.body.innerHTML = xhr.responseText, xhr._cachedTarget = {}), // clear the xhr embeds list and embed each item\n xhr._embeds.splice(0).map(function(item) {\n // get the cached target\n var target = xhr._cachedTarget[item.id];\n // ensure the cached target\n target || (target = xhr._cachedTarget[item.id] = cachedDocument.getElementById(item.id)), \n // embed the target into the svg\n embed(item.parent, item.svg, target);\n });\n }\n }, // test the ready state change immediately\n xhr.onreadystatechange();\n }\n function svg4everybody(rawopts) {\n function oninterval() {\n // while the index exists in the live collection\n for (// get the cached index\n var index = 0; index < uses.length; ) {\n // get the current \n var use = uses[index], parent = use.parentNode, svg = getSVGAncestor(parent), src = use.getAttribute(\"xlink:href\") || use.getAttribute(\"href\");\n if (!src && opts.attributeName && (src = use.getAttribute(opts.attributeName)), \n svg && src) {\n if (polyfill) {\n if (!opts.validate || opts.validate(src, svg, use)) {\n // remove the element\n parent.removeChild(use);\n // parse the src and get the url and id\n var srcSplit = src.split(\"#\"), url = srcSplit.shift(), id = srcSplit.join(\"#\");\n // if the link is external\n if (url.length) {\n // get the cached xhr request\n var xhr = requests[url];\n // ensure the xhr request exists\n xhr || (xhr = requests[url] = new XMLHttpRequest(), xhr.open(\"GET\", url), xhr.send(), \n xhr._embeds = []), // add the svg and id as an item to the xhr embeds list\n xhr._embeds.push({\n parent: parent,\n svg: svg,\n id: id\n }), // prepare the xhr ready state change event\n loadreadystatechange(xhr);\n } else {\n // embed the local id into the svg\n embed(parent, svg, document.getElementById(id));\n }\n } else {\n // increase the index when the previous value was not \"valid\"\n ++index, ++numberOfSvgUseElementsToBypass;\n }\n }\n } else {\n // increase the index when the previous value was not \"valid\"\n ++index;\n }\n }\n // continue the interval\n (!uses.length || uses.length - numberOfSvgUseElementsToBypass > 0) && requestAnimationFrame(oninterval, 67);\n }\n var polyfill, opts = Object(rawopts), newerIEUA = /\\bTrident\\/[567]\\b|\\bMSIE (?:9|10)\\.0\\b/, webkitUA = /\\bAppleWebKit\\/(\\d+)\\b/, olderEdgeUA = /\\bEdge\\/12\\.(\\d+)\\b/, edgeUA = /\\bEdge\\/.(\\d+)\\b/, inIframe = window.top !== window.self;\n polyfill = \"polyfill\" in opts ? opts.polyfill : newerIEUA.test(navigator.userAgent) || (navigator.userAgent.match(olderEdgeUA) || [])[1] < 10547 || (navigator.userAgent.match(webkitUA) || [])[1] < 537 || edgeUA.test(navigator.userAgent) && inIframe;\n // create xhr requests object\n var requests = {}, requestAnimationFrame = window.requestAnimationFrame || setTimeout, uses = document.getElementsByTagName(\"use\"), numberOfSvgUseElementsToBypass = 0;\n // conditionally start the interval if the polyfill is active\n polyfill && oninterval();\n }\n function getSVGAncestor(node) {\n for (var svg = node; \"svg\" !== svg.nodeName.toLowerCase() && (svg = svg.parentNode); ) {}\n return svg;\n }\n return svg4everybody;\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// /opt/gitlab/embedded/service/gitlab-rails/node_modules/svg4everybody/dist/svg4everybody.js\n// module id = ../../../node_modules/svg4everybody/dist/svg4everybody.js\n// module chunks = main","!function(t,e){\"object\"==typeof module&&module.exports?(module.exports=e(),module.exports.default=module.exports):t.timeago=e()}(\"undefined\"!=typeof window?window:this,function(){function t(t){return t instanceof Date?t:isNaN(t)?/^\\d+$/.test(t)?new Date(e(t)):(t=(t||\"\").trim().replace(/\\.\\d+/,\"\").replace(/-/,\"/\").replace(/-/,\"/\").replace(/(\\d)T(\\d)/,\"$1 $2\").replace(/Z/,\" UTC\").replace(/([\\+\\-]\\d\\d)\\:?(\\d\\d)/,\" $1$2\"),new Date(t)):new Date(e(t))}function e(t){return parseInt(t)}function n(t,n,r){n=l[n]?n:l[r]?r:\"en\";for(var o=0,i=t<0?1:0,a=t=Math.abs(t);t>=p[o]&&o(0===o?9:1)&&(o+=1),l[n](t,o,a)[i].replace(\"%s\",t)}function r(e,n){return((n=n?t(n):new Date)-t(e))/1e3}function o(t){for(var e=1,n=0,r=Math.abs(t);t>=p[n]&&n1&&(n+=\"s\"),[t+\" \"+n+\" ago\",\"in \"+t+\" \"+n]},zh_CN:function(t,e){if(0===e)return[\"刚刚\",\"片刻后\"];var n=s[parseInt(e/2)];return[t+n+\"前\",t+n+\"后\"]}},p=[60,60,24,7,365/7/12,12],h=6,m=\"data-tid\",w={};return c.prototype.doRender=function(t,e,i){var a,c=r(e,this.nowDate),d=this;t.innerHTML=n(c,i,this.defaultLocale),w[a=setTimeout(function(){d.doRender(t,e,i),delete w[a]},Math.min(1e3*o(c),2147483647))]=0,u(t,a)},c.prototype.format=function(t,e){return n(r(t,this.nowDate),e,this.defaultLocale)},c.prototype.render=function(t,e){void 0===t.length&&(t=[t]);for(var n=0,r=t.length;n\n * MIT license\n *\n * Includes enhancements by Scott Trenda \n * and Kris Kowal \n *\n * Accepts a date, a mask, or a date and a mask.\n * Returns a formatted version of the given date.\n * The date defaults to the current date/time.\n * The mask defaults to dateFormat.masks.default.\n */\n (function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global.dateFormat = factory());\n }(this, (function () { 'use strict';\n var dateFormat = function () {\n var token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\\1?|[LloSZ]|\"[^\"]*\"|'[^']*'/g,\n timezone = /\\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\\d{4})?)\\b/g,\n timezoneClip = /[^-+\\dA-Z]/g,\n pad = function (val, len) {\n val = String(val);\n len = len || 2;\n while (val.length < len) val = \"0\" + val;\n return val;\n };\n\n // Regexes and supporting functions are cached through closure\n return function (date, mask, utc) {\n var dF = dateFormat;\n\n // You can't provide utc if you skip other args (use the \"UTC:\" mask prefix)\n if (arguments.length == 1 && Object.prototype.toString.call(date) == \"[object String]\" && !/\\d/.test(date)) {\n mask = date;\n date = undefined;\n }\n\n // Passing date through Date applies Date.parse, if necessary\n date = date ? new Date(date) : new Date;\n if (isNaN(date)) throw SyntaxError(\"invalid date\");\n\n mask = String(dF.masks[mask] || mask || dF.masks[\"default\"]);\n\n // Allow setting the utc argument via the mask\n if (mask.slice(0, 4) == \"UTC:\") {\n mask = mask.slice(4);\n utc = true;\n }\n\n var _ = utc ? \"getUTC\" : \"get\",\n d = date[_ + \"Date\"](),\n D = date[_ + \"Day\"](),\n m = date[_ + \"Month\"](),\n y = date[_ + \"FullYear\"](),\n H = date[_ + \"Hours\"](),\n M = date[_ + \"Minutes\"](),\n s = date[_ + \"Seconds\"](),\n L = date[_ + \"Milliseconds\"](),\n o = utc ? 0 : date.getTimezoneOffset(),\n flags = {\n d: d,\n dd: pad(d),\n ddd: dF.i18n.dayNames[D],\n dddd: dF.i18n.dayNames[D + 7],\n m: m + 1,\n mm: pad(m + 1),\n mmm: dF.i18n.monthNames[m],\n mmmm: dF.i18n.monthNames[m + 12],\n yy: String(y).slice(2),\n yyyy: y,\n h: H % 12 || 12,\n hh: pad(H % 12 || 12),\n H: H,\n HH: pad(H),\n M: M,\n MM: pad(M),\n s: s,\n ss: pad(s),\n l: pad(L, 3),\n L: pad(L > 99 ? Math.round(L / 10) : L),\n t: H < 12 ? \"a\" : \"p\",\n tt: H < 12 ? \"am\" : \"pm\",\n T: H < 12 ? \"A\" : \"P\",\n TT: H < 12 ? \"AM\" : \"PM\",\n Z: utc ? \"UTC\" : (String(date).match(timezone) || [\"\"]).pop().replace(timezoneClip, \"\"),\n o: (o > 0 ? \"-\" : \"+\") + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4),\n S: [\"th\", \"st\", \"nd\", \"rd\"][d % 10 > 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10]\n };\n\n return mask.replace(token, function ($0) {\n return $0 in flags ? flags[$0] : $0.slice(1, $0.length - 1);\n });\n };\n }();\n\n // Some common format strings\n dateFormat.masks = {\n \"default\": \"ddd mmm dd yyyy HH:MM:ss\",\n shortDate: \"m/d/yy\",\n mediumDate: \"mmm d, yyyy\",\n longDate: \"mmmm d, yyyy\",\n fullDate: \"dddd, mmmm d, yyyy\",\n shortTime: \"h:MM TT\",\n mediumTime: \"h:MM:ss TT\",\n longTime: \"h:MM:ss TT Z\",\n isoDate: \"yyyy-mm-dd\",\n isoTime: \"HH:MM:ss\",\n isoDateTime: \"yyyy-mm-dd'T'HH:MM:ss\",\n isoUtcDateTime: \"UTC:yyyy-mm-dd'T'HH:MM:ss'Z'\"\n };\n\n // Internationalization strings\n dateFormat.i18n = {\n dayNames: [\n \"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\",\n \"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"\n ],\n monthNames: [\n \"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\",\n \"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"\n ]\n };\n\n // For convenience...\n Date.prototype.format = function (mask, utc) {\n return dateFormat(this, mask, utc);\n };\n\n return dateFormat;\n})));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /opt/gitlab/embedded/service/gitlab-rails/vendor/assets/javascripts/date.format.js\n// module id = ../../../vendor/assets/javascripts/date.format.js\n// module chunks = main","import _ from 'underscore';\nimport axios from './lib/utils/axios_utils';\n\nconst Api = {\n groupsPath: '/api/:version/groups.json',\n groupPath: '/api/:version/groups/:id',\n namespacesPath: '/api/:version/namespaces.json',\n groupProjectsPath: '/api/:version/groups/:id/projects.json',\n projectsPath: '/api/:version/projects.json',\n projectPath: '/api/:version/projects/:id',\n projectLabelsPath: '/:namespace_path/:project_path/labels',\n groupLabelsPath: '/groups/:namespace_path/-/labels',\n licensePath: '/api/:version/templates/licenses/:key',\n gitignorePath: '/api/:version/templates/gitignores/:key',\n gitlabCiYmlPath: '/api/:version/templates/gitlab_ci_ymls/:key',\n dockerfilePath: '/api/:version/templates/dockerfiles/:key',\n issuableTemplatePath: '/:namespace_path/:project_path/templates/:type/:key',\n usersPath: '/api/:version/users.json',\n commitPath: '/api/:version/projects/:id/repository/commits',\n branchSinglePath: '/api/:version/projects/:id/repository/branches/:branch',\n createBranchPath: '/api/:version/projects/:id/repository/branches',\n\n group(groupId, callback) {\n const url = Api.buildUrl(Api.groupPath)\n .replace(':id', groupId);\n return axios.get(url)\n .then(({ data }) => {\n callback(data);\n\n return data;\n });\n },\n\n // Return groups list. Filtered by query\n groups(query, options, callback = $.noop) {\n const url = Api.buildUrl(Api.groupsPath);\n return axios.get(url, {\n params: Object.assign({\n search: query,\n per_page: 20,\n }, options),\n })\n .then(({ data }) => {\n callback(data);\n\n return data;\n });\n },\n\n // Return namespaces list. Filtered by query\n namespaces(query, callback) {\n const url = Api.buildUrl(Api.namespacesPath);\n return axios.get(url, {\n params: {\n search: query,\n per_page: 20,\n },\n })\n .then(({ data }) => callback(data));\n },\n\n // Return projects list. Filtered by query\n projects(query, options, callback = _.noop) {\n const url = Api.buildUrl(Api.projectsPath);\n const defaults = {\n search: query,\n per_page: 20,\n simple: true,\n };\n\n if (gon.current_user_id) {\n defaults.membership = true;\n }\n\n return axios.get(url, {\n params: Object.assign(defaults, options),\n })\n .then(({ data }) => {\n callback(data);\n\n return data;\n });\n },\n\n // Return single project\n project(projectPath) {\n const url = Api.buildUrl(Api.projectPath)\n .replace(':id', encodeURIComponent(projectPath));\n\n return axios.get(url);\n },\n\n newLabel(namespacePath, projectPath, data, callback) {\n let url;\n\n if (projectPath) {\n url = Api.buildUrl(Api.projectLabelsPath)\n .replace(':namespace_path', namespacePath)\n .replace(':project_path', projectPath);\n } else {\n url = Api.buildUrl(Api.groupLabelsPath).replace(':namespace_path', namespacePath);\n }\n\n return axios.post(url, {\n label: data,\n })\n .then(res => callback(res.data))\n .catch(e => callback(e.response.data));\n },\n\n // Return group projects list. Filtered by query\n groupProjects(groupId, query, callback) {\n const url = Api.buildUrl(Api.groupProjectsPath)\n .replace(':id', groupId);\n return axios.get(url, {\n params: {\n search: query,\n per_page: 20,\n },\n })\n .then(({ data }) => callback(data));\n },\n\n commitMultiple(id, data) {\n // see https://docs.gitlab.com/ce/api/commits.html#create-a-commit-with-multiple-files-and-actions\n const url = Api.buildUrl(Api.commitPath)\n .replace(':id', encodeURIComponent(id));\n return axios.post(url, JSON.stringify(data), {\n headers: {\n 'Content-Type': 'application/json; charset=utf-8',\n },\n });\n },\n\n branchSingle(id, branch) {\n const url = Api.buildUrl(Api.branchSinglePath)\n .replace(':id', encodeURIComponent(id))\n .replace(':branch', branch);\n\n return axios.get(url);\n },\n\n // Return text for a specific license\n licenseText(key, data, callback) {\n const url = Api.buildUrl(Api.licensePath)\n .replace(':key', key);\n return axios.get(url, {\n params: data,\n })\n .then(res => callback(res.data));\n },\n\n gitignoreText(key, callback) {\n const url = Api.buildUrl(Api.gitignorePath)\n .replace(':key', key);\n return axios.get(url)\n .then(({ data }) => callback(data));\n },\n\n gitlabCiYml(key, callback) {\n const url = Api.buildUrl(Api.gitlabCiYmlPath)\n .replace(':key', key);\n return axios.get(url)\n .then(({ data }) => callback(data));\n },\n\n dockerfileYml(key, callback) {\n const url = Api.buildUrl(Api.dockerfilePath).replace(':key', key);\n return axios.get(url)\n .then(({ data }) => callback(data));\n },\n\n issueTemplate(namespacePath, projectPath, key, type, callback) {\n const url = Api.buildUrl(Api.issuableTemplatePath)\n .replace(':key', encodeURIComponent(key))\n .replace(':type', type)\n .replace(':project_path', projectPath)\n .replace(':namespace_path', namespacePath);\n return axios.get(url)\n .then(({ data }) => callback(null, data))\n .catch(callback);\n },\n\n users(query, options) {\n const url = Api.buildUrl(this.usersPath);\n return axios.get(url, {\n params: Object.assign({\n search: query,\n per_page: 20,\n }, options),\n });\n },\n\n buildUrl(url) {\n let urlRoot = '';\n if (gon.relative_url_root != null) {\n urlRoot = gon.relative_url_root;\n }\n return urlRoot + url.replace(':version', gon.api_version);\n },\n};\n\nexport default Api;\n\n\n\n// WEBPACK FOOTER //\n// ./api.js","/* eslint-disable class-methods-use-this */\nimport _ from 'underscore';\nimport Cookies from 'js-cookie';\nimport { __ } from './locale';\nimport { isInIssuePage, isInMRPage, hasVueMRDiscussionsCookie, updateTooltipTitle } from './lib/utils/common_utils';\nimport flash from './flash';\nimport axios from './lib/utils/axios_utils';\n\nconst animationEndEventString = 'animationend webkitAnimationEnd MSAnimationEnd oAnimationEnd';\nconst transitionEndEventString = 'transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd';\nconst requestAnimationFrame = window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.setTimeout;\n\nconst FROM_SENTENCE_REGEX = /(?:, and | and |, )/; // For separating lists produced by ruby's Array#toSentence\n\nconst categoryLabelMap = {\n activity: 'Activity',\n people: 'People',\n nature: 'Nature',\n food: 'Food',\n travel: 'Travel',\n objects: 'Objects',\n symbols: 'Symbols',\n flags: 'Flags',\n};\n\nconst IS_VISIBLE = 'is-visible';\nconst IS_RENDERED = 'is-rendered';\n\nclass AwardsHandler {\n constructor(emoji) {\n this.emoji = emoji;\n this.eventListeners = [];\n // If the user shows intent let's pre-build the menu\n this.registerEventListener('one', $(document), 'mouseenter focus', '.js-add-award', 'mouseenter focus', () => {\n const $menu = $('.emoji-menu');\n if ($menu.length === 0) {\n requestAnimationFrame(() => {\n this.createEmojiMenu();\n });\n }\n });\n this.registerEventListener('on', $(document), 'click', '.js-add-award', (e) => {\n e.stopPropagation();\n e.preventDefault();\n this.showEmojiMenu($(e.currentTarget));\n });\n\n this.registerEventListener('on', $('html'), 'click', (e) => {\n const $target = $(e.target);\n if (!$target.closest('.emoji-menu').length) {\n $('.js-awards-block.current').removeClass('current');\n if ($('.emoji-menu').is(':visible')) {\n $('.js-add-award.is-active').removeClass('is-active');\n this.hideMenuElement($('.emoji-menu'));\n }\n }\n });\n this.registerEventListener('on', $(document), 'click', '.js-emoji-btn', (e) => {\n e.preventDefault();\n const $target = $(e.currentTarget);\n const $glEmojiElement = $target.find('gl-emoji');\n const $spriteIconElement = $target.find('.icon');\n const emojiName = ($glEmojiElement.length ? $glEmojiElement : $spriteIconElement).data('name');\n\n $target.closest('.js-awards-block').addClass('current');\n this.addAward(this.getVotesBlock(), this.getAwardUrl(), emojiName);\n });\n }\n\n registerEventListener(method = 'on', element, ...args) {\n element[method].call(element, ...args);\n this.eventListeners.push({\n element,\n args,\n });\n }\n\n showEmojiMenu($addBtn) {\n if ($addBtn.hasClass('js-note-emoji')) {\n $addBtn.closest('.note').find('.js-awards-block').addClass('current');\n } else {\n $addBtn.closest('.js-awards-block').addClass('current');\n }\n\n const $menu = $('.emoji-menu');\n const $thumbsBtn = $menu.find('[data-name=\"thumbsup\"], [data-name=\"thumbsdown\"]').parent();\n const $userAuthored = this.isUserAuthored($addBtn);\n if ($menu.length) {\n if ($menu.is('.is-visible')) {\n $addBtn.removeClass('is-active');\n this.hideMenuElement($menu);\n $('.js-emoji-menu-search').blur();\n } else {\n $addBtn.addClass('is-active');\n this.positionMenu($menu, $addBtn);\n this.showMenuElement($menu);\n $('.js-emoji-menu-search').focus();\n }\n } else {\n $addBtn.addClass('is-loading is-active');\n this.createEmojiMenu(() => {\n const $createdMenu = $('.emoji-menu');\n $addBtn.removeClass('is-loading');\n this.positionMenu($createdMenu, $addBtn);\n return setTimeout(() => {\n this.showMenuElement($createdMenu);\n $('.js-emoji-menu-search').focus();\n }, 200);\n });\n }\n\n $thumbsBtn.toggleClass('disabled', $userAuthored);\n $thumbsBtn.prop('disabled', $userAuthored);\n }\n\n // Create the emoji menu with the first category of emojis.\n // Then render the remaining categories of emojis one by one to avoid jank.\n createEmojiMenu(callback) {\n if (this.isCreatingEmojiMenu) {\n return;\n }\n this.isCreatingEmojiMenu = true;\n\n // Render the first category\n const categoryMap = this.emoji.getEmojiCategoryMap();\n const categoryNameKey = Object.keys(categoryMap)[0];\n const emojisInCategory = categoryMap[categoryNameKey];\n const firstCategory = this.renderCategory(categoryLabelMap[categoryNameKey], emojisInCategory);\n\n // Render the frequently used\n const frequentlyUsedEmojis = this.getFrequentlyUsedEmojis();\n let frequentlyUsedCatgegory = '';\n if (frequentlyUsedEmojis.length > 0) {\n frequentlyUsedCatgegory = this.renderCategory('Frequently used', frequentlyUsedEmojis, {\n menuListClass: 'frequent-emojis',\n });\n }\n\n const emojiMenuMarkup = `\n
    \n \n\n
    \n ${frequentlyUsedCatgegory}\n ${firstCategory}\n
    \n
    \n `;\n\n document.body.insertAdjacentHTML('beforeend', emojiMenuMarkup);\n\n this.addRemainingEmojiMenuCategories();\n this.setupSearch();\n if (callback) {\n callback();\n }\n }\n\n addRemainingEmojiMenuCategories() {\n if (this.isAddingRemainingEmojiMenuCategories) {\n return;\n }\n this.isAddingRemainingEmojiMenuCategories = true;\n\n const categoryMap = this.emoji.getEmojiCategoryMap();\n\n // Avoid the jank and render the remaining categories separately\n // This will take more time, but makes UI more responsive\n const menu = document.querySelector('.emoji-menu');\n const emojiContentElement = menu.querySelector('.emoji-menu-content');\n const remainingCategories = Object.keys(categoryMap).slice(1);\n const allCategoriesAddedPromise = remainingCategories.reduce(\n (promiseChain, categoryNameKey) =>\n promiseChain.then(() =>\n new Promise((resolve) => {\n const emojisInCategory = categoryMap[categoryNameKey];\n const categoryMarkup = this.renderCategory(\n categoryLabelMap[categoryNameKey],\n emojisInCategory,\n );\n requestAnimationFrame(() => {\n emojiContentElement.insertAdjacentHTML('beforeend', categoryMarkup);\n resolve();\n });\n }),\n ),\n Promise.resolve(),\n );\n\n allCategoriesAddedPromise.then(() => {\n // Used for tests\n // We check for the menu in case it was destroyed in the meantime\n if (menu) {\n menu.dispatchEvent(new CustomEvent('build-emoji-menu-finish'));\n }\n }).catch((err) => {\n emojiContentElement.insertAdjacentHTML('beforeend', '

    We encountered an error while adding the remaining categories

    ');\n throw new Error(`Error occurred in addRemainingEmojiMenuCategories: ${err.message}`);\n });\n }\n\n renderCategory(name, emojiList, opts = {}) {\n return `\n
    \n ${name}\n
    \n
      \n ${emojiList.map(emojiName => `\n
    • \n \n
    • \n `).join('\\n')}\n
    \n `;\n }\n\n positionMenu($menu, $addBtn) {\n const position = $addBtn.data('position');\n // The menu could potentially be off-screen or in a hidden overflow element\n // So we position the element absolute in the body\n const css = {\n top: `${$addBtn.offset().top + $addBtn.outerHeight()}px`,\n };\n if (position === 'right') {\n css.left = `${($addBtn.offset().left - $menu.outerWidth()) + 20}px`;\n $menu.addClass('is-aligned-right');\n } else {\n css.left = `${$addBtn.offset().left}px`;\n $menu.removeClass('is-aligned-right');\n }\n return $menu.css(css);\n }\n\n addAward(votesBlock, awardUrl, emoji, checkMutuality, callback) {\n const isMainAwardsBlock = votesBlock.closest('.js-noteable-awards').length;\n\n if (this.isInVueNoteablePage() && !isMainAwardsBlock) {\n const id = votesBlock.attr('id').replace('note_', '');\n\n this.hideMenuElement($('.emoji-menu'));\n\n $('.js-add-award.is-active').removeClass('is-active');\n const toggleAwardEvent = new CustomEvent('toggleAward', {\n detail: {\n awardName: emoji,\n noteId: id,\n },\n });\n\n document.querySelector('.js-vue-notes-event').dispatchEvent(toggleAwardEvent);\n }\n\n const normalizedEmoji = this.emoji.normalizeEmojiName(emoji);\n const $emojiButton = this.findEmojiIcon(votesBlock, normalizedEmoji).parent();\n\n this.postEmoji($emojiButton, awardUrl, normalizedEmoji, () => {\n this.addAwardToEmojiBar(votesBlock, normalizedEmoji, checkMutuality);\n return typeof callback === 'function' ? callback() : undefined;\n });\n\n this.hideMenuElement($('.emoji-menu'));\n\n return $('.js-add-award.is-active').removeClass('is-active');\n }\n\n addAwardToEmojiBar(votesBlock, emoji, checkForMutuality) {\n if (checkForMutuality || checkForMutuality === null) {\n this.checkMutuality(votesBlock, emoji);\n }\n this.addEmojiToFrequentlyUsedList(emoji);\n const normalizedEmoji = this.emoji.normalizeEmojiName(emoji);\n const $emojiButton = this.findEmojiIcon(votesBlock, normalizedEmoji).parent();\n if ($emojiButton.length > 0) {\n if (this.isActive($emojiButton)) {\n this.decrementCounter($emojiButton, normalizedEmoji);\n } else {\n const counter = $emojiButton.find('.js-counter');\n counter.text(parseInt(counter.text(), 10) + 1);\n $emojiButton.addClass('active');\n this.addYouToUserList(votesBlock, normalizedEmoji);\n this.animateEmoji($emojiButton);\n }\n } else {\n votesBlock.removeClass('hidden');\n this.createEmoji(votesBlock, normalizedEmoji);\n }\n }\n\n isVueMRDiscussions() {\n return isInMRPage() && hasVueMRDiscussionsCookie() && !$('#diffs').is(':visible');\n }\n\n isInVueNoteablePage() {\n return isInIssuePage() || this.isVueMRDiscussions();\n }\n\n getVotesBlock() {\n if (this.isInVueNoteablePage()) {\n const $el = $('.js-add-award.is-active').closest('.note.timeline-entry');\n\n if ($el.length) {\n return $el;\n }\n }\n\n const currentBlock = $('.js-awards-block.current');\n let resultantVotesBlock = currentBlock;\n if (currentBlock.length === 0) {\n resultantVotesBlock = $('.js-awards-block').eq(0);\n }\n\n return resultantVotesBlock;\n }\n\n getAwardUrl() {\n return this.getVotesBlock().data('awardUrl');\n }\n\n checkMutuality(votesBlock, emoji) {\n const awardUrl = this.getAwardUrl();\n if (emoji === 'thumbsup' || emoji === 'thumbsdown') {\n const mutualVote = emoji === 'thumbsup' ? 'thumbsdown' : 'thumbsup';\n const $emojiButton = votesBlock.find(`[data-name=\"${mutualVote}\"]`).parent();\n const isAlreadyVoted = $emojiButton.hasClass('active');\n if (isAlreadyVoted) {\n this.addAward(votesBlock, awardUrl, mutualVote, false);\n }\n }\n }\n\n isActive($emojiButton) {\n return $emojiButton.hasClass('active');\n }\n\n isUserAuthored($button) {\n return $button.hasClass('js-user-authored');\n }\n\n decrementCounter($emojiButton, emoji) {\n const counter = $('.js-counter', $emojiButton);\n const counterNumber = parseInt(counter.text(), 10);\n if (counterNumber > 1) {\n counter.text(counterNumber - 1);\n this.removeYouFromUserList($emojiButton);\n } else if (emoji === 'thumbsup' || emoji === 'thumbsdown') {\n $emojiButton.tooltip('destroy');\n counter.text('0');\n this.removeYouFromUserList($emojiButton);\n if ($emojiButton.parents('.note').length) {\n this.removeEmoji($emojiButton);\n }\n } else {\n this.removeEmoji($emojiButton);\n }\n return $emojiButton.removeClass('active');\n }\n\n removeEmoji($emojiButton) {\n $emojiButton.tooltip('destroy');\n $emojiButton.remove();\n const $votesBlock = this.getVotesBlock();\n if ($votesBlock.find('.js-emoji-btn').length === 0) {\n $votesBlock.addClass('hidden');\n }\n }\n\n getAwardTooltip($awardBlock) {\n return $awardBlock.attr('data-original-title') || $awardBlock.attr('data-title') || '';\n }\n\n toSentence(list) {\n let sentence;\n if (list.length <= 2) {\n sentence = list.join(' 和 ');\n } else {\n sentence = `${list.slice(0, -1).join(', ')}, 和 ${list[list.length - 1]}`;\n }\n\n return sentence;\n }\n\n removeYouFromUserList($emojiButton) {\n const awardBlock = $emojiButton;\n const originalTitle = this.getAwardTooltip(awardBlock);\n const authors = originalTitle.split(FROM_SENTENCE_REGEX);\n authors.splice(authors.indexOf('您'), 1);\n return awardBlock\n .closest('.js-emoji-btn')\n .removeData('title')\n .removeAttr('data-title')\n .removeAttr('data-original-title')\n .attr('title', this.toSentence(authors))\n .tooltip('fixTitle');\n }\n\n addYouToUserList(votesBlock, emoji) {\n const awardBlock = this.findEmojiIcon(votesBlock, emoji).parent();\n const origTitle = this.getAwardTooltip(awardBlock);\n let users = [];\n if (origTitle) {\n users = origTitle.trim().split(FROM_SENTENCE_REGEX);\n }\n users.unshift('You');\n return awardBlock\n .attr('title', this.toSentence(users))\n .tooltip('fixTitle');\n }\n\n createAwardButtonForVotesBlock(votesBlock, emojiName) {\n const buttonHtml = `\n \n `;\n const $emojiButton = $(buttonHtml);\n $emojiButton.insertBefore(votesBlock.find('.js-award-holder')).find('.emoji-icon').data('name', emojiName);\n this.animateEmoji($emojiButton);\n $('.award-control').tooltip();\n votesBlock.removeClass('current');\n }\n\n animateEmoji($emoji) {\n const className = 'pulse animated once short';\n $emoji.addClass(className);\n\n this.registerEventListener('on', $emoji, animationEndEventString, (e) => {\n $(e.currentTarget).removeClass(className);\n });\n }\n\n createEmoji(votesBlock, emoji) {\n if ($('.emoji-menu').length) {\n this.createAwardButtonForVotesBlock(votesBlock, emoji);\n }\n this.createEmojiMenu(() => {\n this.createAwardButtonForVotesBlock(votesBlock, emoji);\n });\n }\n\n postEmoji($emojiButton, awardUrl, emoji, callback) {\n if (this.isUserAuthored($emojiButton)) {\n this.userAuthored($emojiButton);\n } else {\n axios.post(awardUrl, {\n name: emoji,\n })\n .then(({ data }) => {\n if (data.ok) {\n callback();\n }\n })\n .catch(() => flash(__('Something went wrong on our end.')));\n }\n }\n\n findEmojiIcon(votesBlock, emoji) {\n return votesBlock.find(`.js-emoji-btn [data-name=\"${emoji}\"]`);\n }\n\n userAuthored($emojiButton) {\n const oldTitle = this.getAwardTooltip($emojiButton);\n const newTitle = '您不能给自己的问题、MR和注释投票';\n updateTooltipTitle($emojiButton, newTitle).tooltip('show');\n // Restore tooltip back to award list\n return setTimeout(() => {\n $emojiButton.tooltip('hide');\n updateTooltipTitle($emojiButton, oldTitle);\n }, 2800);\n }\n\n scrollToAwards() {\n const options = {\n scrollTop: $('.awards').offset().top - 110,\n };\n return $('body, html').animate(options, 200);\n }\n\n addEmojiToFrequentlyUsedList(emoji) {\n if (this.emoji.isEmojiNameValid(emoji)) {\n this.frequentlyUsedEmojis = _.uniq(this.getFrequentlyUsedEmojis().concat(emoji));\n Cookies.set('frequently_used_emojis', this.frequentlyUsedEmojis.join(','), { expires: 365 });\n }\n }\n\n getFrequentlyUsedEmojis() {\n return this.frequentlyUsedEmojis || (() => {\n const frequentlyUsedEmojis = _.uniq((Cookies.get('frequently_used_emojis') || '').split(','));\n this.frequentlyUsedEmojis = frequentlyUsedEmojis.filter(\n inputName => this.emoji.isEmojiNameValid(inputName),\n );\n\n return this.frequentlyUsedEmojis;\n })();\n }\n\n setupSearch() {\n const $search = $('.js-emoji-menu-search');\n\n this.registerEventListener('on', $search, 'input', (e) => {\n const term = $(e.target).val().trim();\n this.searchEmojis(term);\n });\n\n const $menu = $('.emoji-menu');\n this.registerEventListener('on', $menu, transitionEndEventString, (e) => {\n if (e.target === e.currentTarget) {\n // Clear the search\n this.searchEmojis('');\n }\n });\n }\n\n searchEmojis(term) {\n const $search = $('.js-emoji-menu-search');\n $search.val(term);\n\n // Clean previous search results\n $('ul.emoji-menu-search, h5.emoji-search-title').remove();\n if (term.length > 0) {\n // Generate a search result block\n const h5 = $('
    ').text('Search results');\n const foundEmojis = this.findMatchingEmojiElements(term).show();\n const ul = $('
      ').addClass('emoji-menu-list emoji-menu-search').append(foundEmojis);\n $('.emoji-menu-content ul, .emoji-menu-content h5').hide();\n $('.emoji-menu-content').append(h5).append(ul);\n } else {\n $('.emoji-menu-content').children().show();\n }\n }\n\n findMatchingEmojiElements(query) {\n const emojiMatches = this.emoji.filterEmojiNamesByAlias(query);\n const $emojiElements = $('.emoji-menu-list:not(.frequent-emojis) [data-name]');\n const $matchingElements = $emojiElements\n .filter((i, elm) => emojiMatches.indexOf(elm.dataset.name) >= 0);\n return $matchingElements.closest('li').clone();\n }\n\n /* showMenuElement and hideMenuElement are performance optimizations. We use\n * opacity to show/hide the emoji menu, because we can animate it. But opacity\n * leaves hidden elements in the render tree, which is unacceptable given the number\n * of emoji elements in the emoji menu (5k+). To get the best of both worlds, we separately\n * apply IS_RENDERED to add/remove the menu from the render tree and IS_VISIBLE to animate\n * the menu being opened and closed. */\n\n showMenuElement($emojiMenu) {\n $emojiMenu.addClass(IS_RENDERED);\n\n // enqueues animation as a microtask, so it begins ASAP once IS_RENDERED added\n return Promise.resolve()\n .then(() => $emojiMenu.addClass(IS_VISIBLE));\n }\n\n hideMenuElement($emojiMenu) {\n $emojiMenu.on(transitionEndEventString, (e) => {\n if (e.currentTarget === e.target) {\n $emojiMenu\n .removeClass(IS_RENDERED)\n .off(transitionEndEventString);\n }\n });\n\n $emojiMenu.removeClass(IS_VISIBLE);\n }\n\n destroy() {\n this.eventListeners.forEach((entry) => {\n entry.element.off.call(entry.element, ...entry.args);\n });\n $('.emoji-menu').remove();\n }\n}\n\nlet awardsHandlerPromise = null;\nexport default function loadAwardsHandler(reload = false) {\n if (!awardsHandlerPromise || reload) {\n awardsHandlerPromise = import(/* webpackChunkName: 'emoji' */ './emoji')\n .then(Emoji => new AwardsHandler(Emoji));\n }\n return awardsHandlerPromise;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./awards_handler.js","class BindInOut {\n constructor(bindIn, bindOut) {\n this.in = bindIn;\n this.out = bindOut;\n\n this.eventWrapper = {};\n this.eventType = /(INPUT|TEXTAREA)/.test(bindIn.tagName) ? 'keyup' : 'change';\n }\n\n addEvents() {\n this.eventWrapper.updateOut = this.updateOut.bind(this);\n\n this.in.addEventListener(this.eventType, this.eventWrapper.updateOut);\n\n return this;\n }\n\n updateOut() {\n this.out.textContent = this.in.value;\n\n return this;\n }\n\n removeEvents() {\n this.in.removeEventListener(this.eventType, this.eventWrapper.updateOut);\n\n return this;\n }\n\n static initAll() {\n const ins = document.querySelectorAll('*[data-bind-in]');\n\n return [].map.call(ins, anIn => BindInOut.init(anIn));\n }\n\n static init(anIn, anOut) {\n const out = anOut || document.querySelector(`*[data-bind-out=\"${anIn.dataset.bindIn}\"]`);\n\n if (!out) return null;\n\n const bindInOut = new BindInOut(anIn, out);\n\n return bindInOut.addEvents().updateOut();\n }\n}\n\nexport default BindInOut;\n\n\n\n// WEBPACK FOOTER //\n// ./behaviors/bind_in_out.js","/* eslint-disable class-methods-use-this, object-shorthand, no-unused-vars, no-use-before-define, no-new, max-len, no-restricted-syntax, guard-for-in, no-continue */\n\nimport _ from 'underscore';\nimport { insertText, getSelectedFragment, nodeMatchesSelector } from '../lib/utils/common_utils';\nimport { placeholderImage } from '../lazy_loader';\n\nconst gfmRules = {\n // The filters referenced in lib/banzai/pipeline/gfm_pipeline.rb convert\n // GitLab Flavored Markdown (GFM) to HTML.\n // These handlers consequently convert that same HTML to GFM to be copied to the clipboard.\n // Every filter in lib/banzai/pipeline/gfm_pipeline.rb that generates HTML\n // from GFM should have a handler here, in reverse order.\n // The GFM-to-HTML-to-GFM cycle is tested in spec/features/copy_as_gfm_spec.rb.\n InlineDiffFilter: {\n 'span.idiff.addition'(el, text) {\n return `{+${text}+}`;\n },\n 'span.idiff.deletion'(el, text) {\n return `{-${text}-}`;\n },\n },\n TaskListFilter: {\n 'input[type=checkbox].task-list-item-checkbox'(el) {\n return `[${el.checked ? 'x' : ' '}]`;\n },\n },\n ReferenceFilter: {\n '.tooltip'(el) {\n return '';\n },\n 'a.gfm:not([data-link=true])'(el, text) {\n return el.dataset.original || text;\n },\n },\n AutolinkFilter: {\n 'a'(el, text) {\n // Fallback on the regular MarkdownFilter's `a` handler.\n if (text !== el.getAttribute('href')) return false;\n\n return text;\n },\n },\n TableOfContentsFilter: {\n 'ul.section-nav'(el) {\n return '[[_TOC_]]';\n },\n },\n EmojiFilter: {\n 'img.emoji'(el) {\n return el.getAttribute('alt');\n },\n 'gl-emoji'(el) {\n return `:${el.getAttribute('data-name')}:`;\n },\n },\n ImageLinkFilter: {\n 'a.no-attachment-icon'(el, text) {\n return text;\n },\n },\n ImageLazyLoadFilter: {\n 'img'(el, text) {\n return `![${el.getAttribute('alt')}](${el.getAttribute('src')})`;\n },\n },\n VideoLinkFilter: {\n '.video-container'(el) {\n const videoEl = el.querySelector('video');\n if (!videoEl) return false;\n\n return CopyAsGFM.nodeToGFM(videoEl);\n },\n 'video'(el) {\n return `![${el.dataset.title}](${el.getAttribute('src')})`;\n },\n },\n MermaidFilter: {\n 'svg.mermaid'(el, text) {\n const sourceEl = el.querySelector('text.source');\n if (!sourceEl) return false;\n\n return `\\`\\`\\`mermaid\\n${CopyAsGFM.nodeToGFM(sourceEl)}\\n\\`\\`\\``;\n },\n 'svg.mermaid style, svg.mermaid g'(el, text) {\n // We don't want to include the content of these elements in the copied text.\n return '';\n },\n },\n MathFilter: {\n 'pre.code.math[data-math-style=display]'(el, text) {\n return `\\`\\`\\`math\\n${text.trim()}\\n\\`\\`\\``;\n },\n 'code.code.math[data-math-style=inline]'(el, text) {\n return `$\\`${text}\\`$`;\n },\n 'span.katex-display span.katex-mathml'(el) {\n const mathAnnotation = el.querySelector('annotation[encoding=\"application/x-tex\"]');\n if (!mathAnnotation) return false;\n\n return `\\`\\`\\`math\\n${CopyAsGFM.nodeToGFM(mathAnnotation)}\\n\\`\\`\\``;\n },\n 'span.katex-mathml'(el) {\n const mathAnnotation = el.querySelector('annotation[encoding=\"application/x-tex\"]');\n if (!mathAnnotation) return false;\n\n return `$\\`${CopyAsGFM.nodeToGFM(mathAnnotation)}\\`$`;\n },\n 'span.katex-html'(el) {\n // We don't want to include the content of this element in the copied text.\n return '';\n },\n 'annotation[encoding=\"application/x-tex\"]'(el, text) {\n return text.trim();\n },\n },\n SanitizationFilter: {\n 'a[name]:not([href]):empty'(el) {\n return el.outerHTML;\n },\n 'dl'(el, text) {\n let lines = text.trim().split('\\n');\n // Add two spaces to the front of subsequent list items lines,\n // or leave the line entirely blank.\n lines = lines.map((l) => {\n const line = l.trim();\n if (line.length === 0) return '';\n\n return ` ${line}`;\n });\n\n return `
      \\n${lines.join('\\n')}\\n
      `;\n },\n 'sub, dt, dd, kbd, q, samp, var, ruby, rt, rp, abbr, summary, details'(el, text) {\n const tag = el.nodeName.toLowerCase();\n return `<${tag}>${text}`;\n },\n },\n SyntaxHighlightFilter: {\n 'pre.code.highlight'(el, t) {\n const text = t.trimRight();\n\n let lang = el.getAttribute('lang');\n if (!lang || lang === 'plaintext') {\n lang = '';\n }\n\n // Prefixes lines with 4 spaces if the code contains triple backticks\n if (lang === '' && text.match(/^```/gm)) {\n return text.split('\\n').map((l) => {\n const line = l.trim();\n if (line.length === 0) return '';\n\n return ` ${line}`;\n }).join('\\n');\n }\n\n return `\\`\\`\\`${lang}\\n${text}\\n\\`\\`\\``;\n },\n 'pre > code'(el, text) {\n // Don't wrap code blocks in ``\n return text;\n },\n },\n MarkdownFilter: {\n 'br'(el) {\n // Two spaces at the end of a line are turned into a BR\n return ' ';\n },\n 'code'(el, text) {\n let backtickCount = 1;\n const backtickMatch = text.match(/`+/);\n if (backtickMatch) {\n backtickCount = backtickMatch[0].length + 1;\n }\n\n const backticks = Array(backtickCount + 1).join('`');\n const spaceOrNoSpace = backtickCount > 1 ? ' ' : '';\n\n return backticks + spaceOrNoSpace + text.trim() + spaceOrNoSpace + backticks;\n },\n 'blockquote'(el, text) {\n return text.trim().split('\\n').map(s => `> ${s}`.trim()).join('\\n');\n },\n 'img'(el) {\n const imageSrc = el.src;\n const imageUrl = imageSrc && imageSrc !== placeholderImage ? imageSrc : (el.dataset.src || '');\n return `![${el.getAttribute('alt')}](${imageUrl})`;\n },\n 'a.anchor'(el, text) {\n // Don't render a Markdown link for the anchor link inside a heading\n return text;\n },\n 'a'(el, text) {\n return `[${text}](${el.getAttribute('href')})`;\n },\n 'li'(el, text) {\n const lines = text.trim().split('\\n');\n const firstLine = `- ${lines.shift()}`;\n // Add four spaces to the front of subsequent list items lines,\n // or leave the line entirely blank.\n const nextLines = lines.map((s) => {\n if (s.trim().length === 0) return '';\n\n return ` ${s}`;\n });\n\n return `${firstLine}\\n${nextLines.join('\\n')}`;\n },\n 'ul'(el, text) {\n return text;\n },\n 'ol'(el, text) {\n // LIs get a `- ` prefix by default, which we replace by `1. ` for ordered lists.\n return text.replace(/^- /mg, '1. ');\n },\n 'h1'(el, text) {\n return `# ${text.trim()}`;\n },\n 'h2'(el, text) {\n return `## ${text.trim()}`;\n },\n 'h3'(el, text) {\n return `### ${text.trim()}`;\n },\n 'h4'(el, text) {\n return `#### ${text.trim()}`;\n },\n 'h5'(el, text) {\n return `##### ${text.trim()}`;\n },\n 'h6'(el, text) {\n return `###### ${text.trim()}`;\n },\n 'strong'(el, text) {\n return `**${text}**`;\n },\n 'em'(el, text) {\n return `_${text}_`;\n },\n 'del'(el, text) {\n return `~~${text}~~`;\n },\n 'sup'(el, text) {\n return `^${text}`;\n },\n 'hr'(el) {\n return '-----';\n },\n 'table'(el) {\n const theadEl = el.querySelector('thead');\n const tbodyEl = el.querySelector('tbody');\n if (!theadEl || !tbodyEl) return false;\n\n const theadText = CopyAsGFM.nodeToGFM(theadEl);\n const tbodyText = CopyAsGFM.nodeToGFM(tbodyEl);\n\n return [theadText, tbodyText].join('\\n');\n },\n 'thead'(el, text) {\n const cells = _.map(el.querySelectorAll('th'), (cell) => {\n let chars = CopyAsGFM.nodeToGFM(cell).length + 2;\n\n let before = '';\n let after = '';\n switch (cell.style.textAlign) {\n case 'center':\n before = ':';\n after = ':';\n chars -= 2;\n break;\n case 'right':\n after = ':';\n chars -= 1;\n break;\n default:\n break;\n }\n\n chars = Math.max(chars, 3);\n\n const middle = Array(chars + 1).join('-');\n\n return before + middle + after;\n });\n\n const separatorRow = `|${cells.join('|')}|`;\n\n return [text, separatorRow].join('\\n');\n },\n 'tr'(el) {\n const cellEls = el.querySelectorAll('td, th');\n if (cellEls.length === 0) return false;\n\n const cells = _.map(cellEls, cell => CopyAsGFM.nodeToGFM(cell));\n return `| ${cells.join(' | ')} |`;\n },\n },\n};\n\nexport class CopyAsGFM {\n constructor() {\n // iOS currently does not support clipboardData.setData(). This bug should\n // be fixed in iOS 12, but for now we'll disable this for all iOS browsers\n // ref: https://trac.webkit.org/changeset/222228/webkit\n const userAgent = (typeof navigator !== 'undefined' && navigator.userAgent) || '';\n const isIOS = /\\b(iPad|iPhone|iPod)(?=;)/.test(userAgent);\n if (isIOS) return;\n\n $(document).on('copy', '.md, .wiki', (e) => { CopyAsGFM.copyAsGFM(e, CopyAsGFM.transformGFMSelection); });\n $(document).on('copy', 'pre.code.highlight, .diff-content .line_content', (e) => { CopyAsGFM.copyAsGFM(e, CopyAsGFM.transformCodeSelection); });\n $(document).on('paste', '.js-gfm-input', CopyAsGFM.pasteGFM);\n }\n\n static copyAsGFM(e, transformer) {\n const clipboardData = e.originalEvent.clipboardData;\n if (!clipboardData) return;\n\n const documentFragment = getSelectedFragment();\n if (!documentFragment) return;\n\n const el = transformer(documentFragment.cloneNode(true), e.currentTarget);\n if (!el) return;\n\n e.preventDefault();\n e.stopPropagation();\n\n clipboardData.setData('text/plain', el.textContent);\n clipboardData.setData('text/x-gfm', this.nodeToGFM(el));\n }\n\n static pasteGFM(e) {\n const clipboardData = e.originalEvent.clipboardData;\n if (!clipboardData) return;\n\n const text = clipboardData.getData('text/plain');\n const gfm = clipboardData.getData('text/x-gfm');\n if (!gfm) return;\n\n e.preventDefault();\n\n window.gl.utils.insertText(e.target, (textBefore, textAfter) => {\n // If the text before the cursor contains an odd number of backticks,\n // we are either inside an inline code span that starts with 1 backtick\n // or a code block that starts with 3 backticks.\n // This logic still holds when there are one or more _closed_ code spans\n // or blocks that will have 2 or 6 backticks.\n // This will break down when the actual code block contains an uneven\n // number of backticks, but this is a rare edge case.\n const backtickMatch = textBefore.match(/`/g);\n const insideCodeBlock = backtickMatch && (backtickMatch.length % 2) === 1;\n\n if (insideCodeBlock) {\n return text;\n }\n\n return gfm;\n });\n }\n\n static transformGFMSelection(documentFragment) {\n const gfmElements = documentFragment.querySelectorAll('.md, .wiki');\n switch (gfmElements.length) {\n case 0: {\n return documentFragment;\n }\n case 1: {\n return gfmElements[0];\n }\n default: {\n const allGfmElement = document.createElement('div');\n\n for (let i = 0; i < gfmElements.length; i += 1) {\n const gfmElement = gfmElements[i];\n allGfmElement.appendChild(gfmElement);\n allGfmElement.appendChild(document.createTextNode('\\n\\n'));\n }\n\n return allGfmElement;\n }\n }\n }\n\n static transformCodeSelection(documentFragment, target) {\n let lineSelector = '.line';\n\n if (target) {\n const lineClass = ['left-side', 'right-side'].filter(name => target.classList.contains(name))[0];\n if (lineClass) {\n lineSelector = `.line_content.${lineClass} ${lineSelector}`;\n }\n }\n\n const lineElements = documentFragment.querySelectorAll(lineSelector);\n\n let codeElement;\n if (lineElements.length > 1) {\n codeElement = document.createElement('pre');\n codeElement.className = 'code highlight';\n\n const lang = lineElements[0].getAttribute('lang');\n if (lang) {\n codeElement.setAttribute('lang', lang);\n }\n } else {\n codeElement = document.createElement('code');\n }\n\n if (lineElements.length > 0) {\n for (let i = 0; i < lineElements.length; i += 1) {\n const lineElement = lineElements[i];\n codeElement.appendChild(lineElement);\n codeElement.appendChild(document.createTextNode('\\n'));\n }\n } else {\n codeElement.appendChild(documentFragment);\n }\n\n return codeElement;\n }\n\n static nodeToGFM(node, respectWhitespaceParam = false) {\n if (node.nodeType === Node.COMMENT_NODE) {\n return '';\n }\n\n if (node.nodeType === Node.TEXT_NODE) {\n return node.textContent;\n }\n\n const respectWhitespace = respectWhitespaceParam || (node.nodeName === 'PRE' || node.nodeName === 'CODE');\n\n const text = this.innerGFM(node, respectWhitespace);\n\n if (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n return text;\n }\n\n for (const filter in gfmRules) {\n const rules = gfmRules[filter];\n\n for (const selector in rules) {\n const func = rules[selector];\n\n if (!nodeMatchesSelector(node, selector)) continue;\n\n let result;\n if (func.length === 2) {\n // if `func` takes 2 arguments, it depends on text.\n // if there is no text, we don't need to generate GFM for this node.\n if (text.length === 0) continue;\n\n result = func(node, text);\n } else {\n result = func(node);\n }\n\n if (result === false) continue;\n\n return result;\n }\n }\n\n return text;\n }\n\n static innerGFM(parentNode, respectWhitespace = false) {\n const nodes = parentNode.childNodes;\n\n const clonedParentNode = parentNode.cloneNode(true);\n const clonedNodes = Array.prototype.slice.call(clonedParentNode.childNodes, 0);\n\n for (let i = 0; i < nodes.length; i += 1) {\n const node = nodes[i];\n const clonedNode = clonedNodes[i];\n\n const text = this.nodeToGFM(node, respectWhitespace);\n\n // `clonedNode.replaceWith(text)` is not yet widely supported\n clonedNode.parentNode.replaceChild(document.createTextNode(text), clonedNode);\n }\n\n let nodeText = clonedParentNode.innerText || clonedParentNode.textContent;\n\n if (!respectWhitespace) {\n nodeText = nodeText.trim();\n }\n\n return nodeText;\n }\n}\n\n// Export CopyAsGFM as a global for rspec to access\n// see /spec/features/copy_as_gfm_spec.rb\nif (process.env.NODE_ENV !== 'production') {\n window.CopyAsGFM = CopyAsGFM;\n}\n\nexport default function initCopyAsGFM() {\n return new CopyAsGFM();\n}\n\n\n\n// WEBPACK FOOTER //\n// ./behaviors/copy_as_gfm.js","import Clipboard from 'clipboard';\n\nfunction showTooltip(target, title) {\n const $target = $(target);\n const originalTitle = $target.data('originalTitle');\n\n if (!$target.data('hideTooltip')) {\n $target\n .attr('title', title)\n .tooltip('fixTitle')\n .tooltip('show')\n .attr('title', originalTitle)\n .tooltip('fixTitle');\n }\n}\n\nfunction genericSuccess(e) {\n showTooltip(e.trigger, 'Copied');\n // Clear the selection and blur the trigger so it loses its border\n e.clearSelection();\n $(e.trigger).blur();\n}\n\n/**\n * Safari > 10 doesn't support `execCommand`, so instead we inform the user to copy manually.\n * See http://clipboardjs.com/#browser-support\n */\nfunction genericError(e) {\n let key;\n if (/Mac/i.test(navigator.userAgent)) {\n key = '⌘'; // Command\n } else {\n key = 'Ctrl';\n }\n showTooltip(e.trigger, `Press ${key}-C to copy`);\n}\n\nexport default function initCopyToClipboard() {\n const clipboard = new Clipboard('[data-clipboard-target], [data-clipboard-text]');\n clipboard.on('success', genericSuccess);\n clipboard.on('error', genericError);\n\n /**\n * This a workaround around ClipboardJS limitations to allow the context-specific copy/pasting\n * of plain text or GFM. The Ruby `clipboard_button` helper sneaks a JSON hash with `text` and\n * `gfm` keys into the `data-clipboard-text` attribute that ClipboardJS reads from.\n * When ClipboardJS creates a new `textarea` (directly inside `body`, with a `readonly`\n * attribute`), sets its value to the value of this data attribute, focusses on it, and finally\n * programmatically issues the 'Copy' command, this code intercepts the copy command/event at\n * the last minute to deconstruct this JSON hash and set the `text/plain` and `text/x-gfm` copy\n * data types to the intended values.\n */\n $(document).on('copy', 'body > textarea[readonly]', (e) => {\n const clipboardData = e.originalEvent.clipboardData;\n if (!clipboardData) return;\n\n const text = e.target.value;\n\n let json;\n try {\n json = JSON.parse(text);\n } catch (ex) {\n return;\n }\n\n if (!json.text || !json.gfm) return;\n\n e.preventDefault();\n\n clipboardData.setData('text/plain', json.text);\n clipboardData.setData('text/x-gfm', json.gfm);\n });\n}\n\n\n\n// WEBPACK FOOTER //\n// ./behaviors/copy_to_clipboard.js","\n$(() => {\n $('body').on('click', '.js-details-target', function target() {\n $(this).closest('.js-details-container').toggleClass('open');\n });\n\n // Show details content. Hides link after click.\n //\n // %div\n // %a.js-details-expand\n // %div.js-details-content\n //\n $('body').on('click', '.js-details-expand', function expand(e) {\n e.preventDefault();\n $(this).next('.js-details-content').removeClass('hide');\n $(this).hide();\n\n const truncatedItem = $(this).siblings('.js-details-short');\n if (truncatedItem.length) {\n truncatedItem.addClass('hide');\n }\n });\n});\n\n\n\n// WEBPACK FOOTER //\n// ./behaviors/details_behavior.js","// On Windows, flags render as two-letter country codes, see http://emojipedia.org/flags/\nconst flagACodePoint = 127462; // parseInt('1F1E6', 16)\nconst flagZCodePoint = 127487; // parseInt('1F1FF', 16)\nfunction isFlagEmoji(emojiUnicode) {\n const cp = emojiUnicode.codePointAt(0);\n // Length 4 because flags are made of 2 characters which are surrogate pairs\n return emojiUnicode.length === 4 && cp >= flagACodePoint && cp <= flagZCodePoint;\n}\n\n// Tested on mac OS 10.12.6 and Windows 10 FCU, it renders as two separate characters\nconst baseFlagCodePoint = 127987; // parseInt('1F3F3', 16)\nconst rainbowCodePoint = 127752; // parseInt('1F308', 16)\nfunction isRainbowFlagEmoji(emojiUnicode) {\n const characters = Array.from(emojiUnicode);\n // Length 4 because flags are made of 2 characters which are surrogate pairs\n return emojiUnicode.length === 4 &&\n characters[0].codePointAt(0) === baseFlagCodePoint &&\n characters[1].codePointAt(0) === rainbowCodePoint;\n}\n\n// Chrome <57 renders keycaps oddly\n// See https://bugs.chromium.org/p/chromium/issues/detail?id=632294\n// Same issue on Windows also fixed in Chrome 57, http://i.imgur.com/rQF7woO.png\nfunction isKeycapEmoji(emojiUnicode) {\n return emojiUnicode.length === 3 && emojiUnicode[2] === '\\u20E3';\n}\n\n// Check for a skin tone variation emoji which aren't always supported\nconst tone1 = 127995;// parseInt('1F3FB', 16)\nconst tone5 = 127999;// parseInt('1F3FF', 16)\nfunction isSkinToneComboEmoji(emojiUnicode) {\n return emojiUnicode.length > 2 && Array.from(emojiUnicode).some((char) => {\n const cp = char.codePointAt(0);\n return cp >= tone1 && cp <= tone5;\n });\n}\n\n// macOS supports most skin tone emoji's but\n// doesn't support the skin tone versions of horse racing\nconst horseRacingCodePoint = 127943;// parseInt('1F3C7', 16)\nfunction isHorceRacingSkinToneComboEmoji(emojiUnicode) {\n const firstCharacter = Array.from(emojiUnicode)[0];\n return firstCharacter && firstCharacter.codePointAt(0) === horseRacingCodePoint &&\n isSkinToneComboEmoji(emojiUnicode);\n}\n\n// Check for `family_*`, `kiss_*`, `couple_*`\n// For ex. Windows 8.1 Firefox 51.0.1, doesn't support these\nconst zwj = 8205; // parseInt('200D', 16)\nconst personStartCodePoint = 128102; // parseInt('1F466', 16)\nconst personEndCodePoint = 128105; // parseInt('1F469', 16)\nfunction isPersonZwjEmoji(emojiUnicode) {\n let hasPersonEmoji = false;\n let hasZwj = false;\n Array.from(emojiUnicode).forEach((character) => {\n const cp = character.codePointAt(0);\n if (cp === zwj) {\n hasZwj = true;\n } else if (cp >= personStartCodePoint && cp <= personEndCodePoint) {\n hasPersonEmoji = true;\n }\n });\n\n return hasPersonEmoji && hasZwj;\n}\n\n// Helper so we don't have to run `isFlagEmoji` twice\n// in `isEmojiUnicodeSupported` logic\nfunction checkFlagEmojiSupport(unicodeSupportMap, emojiUnicode) {\n const isFlagResult = isFlagEmoji(emojiUnicode);\n const isRainbowFlagResult = isRainbowFlagEmoji(emojiUnicode);\n return (\n (unicodeSupportMap.flag && isFlagResult) ||\n (unicodeSupportMap.rainbowFlag && isRainbowFlagResult) ||\n (!isFlagResult && !isRainbowFlagResult)\n );\n}\n\n// Helper so we don't have to run `isSkinToneComboEmoji` twice\n// in `isEmojiUnicodeSupported` logic\nfunction checkSkinToneModifierSupport(unicodeSupportMap, emojiUnicode) {\n const isSkinToneResult = isSkinToneComboEmoji(emojiUnicode);\n return (\n (unicodeSupportMap.skinToneModifier && isSkinToneResult) ||\n !isSkinToneResult\n );\n}\n\n// Helper func so we don't have to run `isHorceRacingSkinToneComboEmoji` twice\n// in `isEmojiUnicodeSupported` logic\nfunction checkHorseRacingSkinToneComboEmojiSupport(unicodeSupportMap, emojiUnicode) {\n const isHorseRacingSkinToneResult = isHorceRacingSkinToneComboEmoji(emojiUnicode);\n return (\n (unicodeSupportMap.horseRacing && isHorseRacingSkinToneResult) ||\n !isHorseRacingSkinToneResult\n );\n}\n\n// Helper so we don't have to run `isPersonZwjEmoji` twice\n// in `isEmojiUnicodeSupported` logic\nfunction checkPersonEmojiSupport(unicodeSupportMap, emojiUnicode) {\n const isPersonZwjResult = isPersonZwjEmoji(emojiUnicode);\n return (\n (unicodeSupportMap.personZwj && isPersonZwjResult) ||\n !isPersonZwjResult\n );\n}\n\n// Takes in a support map and determines whether\n// the given unicode emoji is supported on the platform.\n//\n// Combines all the edge case tests into a one-stop shop method\nfunction isEmojiUnicodeSupported(unicodeSupportMap = {}, emojiUnicode, unicodeVersion) {\n const isOlderThanChrome57 = unicodeSupportMap.meta && unicodeSupportMap.meta.isChrome &&\n unicodeSupportMap.meta.chromeVersion < 57;\n\n // For comments about each scenario, see the comments above each individual respective function\n return unicodeSupportMap[unicodeVersion] &&\n !(isOlderThanChrome57 && isKeycapEmoji(emojiUnicode)) &&\n checkFlagEmojiSupport(unicodeSupportMap, emojiUnicode) &&\n checkSkinToneModifierSupport(unicodeSupportMap, emojiUnicode) &&\n checkHorseRacingSkinToneComboEmojiSupport(unicodeSupportMap, emojiUnicode) &&\n checkPersonEmojiSupport(unicodeSupportMap, emojiUnicode);\n}\n\nexport {\n isEmojiUnicodeSupported as default,\n isFlagEmoji,\n isRainbowFlagEmoji,\n isKeycapEmoji,\n isSkinToneComboEmoji,\n isHorceRacingSkinToneComboEmoji,\n isPersonZwjEmoji,\n};\n\n\n\n// WEBPACK FOOTER //\n// ./emoji/support/is_emoji_unicode_supported.js","import AccessorUtilities from '../../lib/utils/accessor';\n\nconst GL_EMOJI_VERSION = '0.2.0';\n\nconst unicodeSupportTestMap = {\n // man, student (emojione does not have any of these yet), http://emojipedia.org/emoji-zwj-sequences/\n // occupationZwj: '\\u{1F468}\\u{200D}\\u{1F393}',\n // woman, biking (emojione does not have any of these yet), http://emojipedia.org/emoji-zwj-sequences/\n // sexZwj: '\\u{1F6B4}\\u{200D}\\u{2640}',\n // family_mwgb\n // Windows 8.1, Firefox 51.0.1 does not support `family_`, `kiss_`, `couple_`\n personZwj: '\\u{1F468}\\u{200D}\\u{1F469}\\u{200D}\\u{1F467}\\u{200D}\\u{1F466}',\n // horse_racing_tone5\n // Special case that is not supported on macOS 10.12 even though `skinToneModifier` succeeds\n horseRacing: '\\u{1F3C7}\\u{1F3FF}',\n // US flag, http://emojipedia.org/flags/\n flag: '\\u{1F1FA}\\u{1F1F8}',\n rainbowFlag: '\\u{1F3F3}\\u{1F308}',\n // http://emojipedia.org/modifiers/\n skinToneModifier: [\n // spy_tone5\n '\\u{1F575}\\u{1F3FF}',\n // person_with_ball_tone5\n '\\u{26F9}\\u{1F3FF}',\n // angel_tone5\n '\\u{1F47C}\\u{1F3FF}',\n ],\n // rofl, http://emojipedia.org/unicode-9.0/\n '9.0': '\\u{1F923}',\n // metal, http://emojipedia.org/unicode-8.0/\n '8.0': '\\u{1F918}',\n // spy, http://emojipedia.org/unicode-7.0/\n '7.0': '\\u{1F575}',\n // expressionless, http://emojipedia.org/unicode-6.1/\n 6.1: '\\u{1F611}',\n // japanese_goblin, http://emojipedia.org/unicode-6.0/\n '6.0': '\\u{1F47A}',\n // sailboat, http://emojipedia.org/unicode-5.2/\n 5.2: '\\u{26F5}',\n // mahjong, http://emojipedia.org/unicode-5.1/\n 5.1: '\\u{1F004}',\n // gear, http://emojipedia.org/unicode-4.1/\n 4.1: '\\u{2699}',\n // zap, http://emojipedia.org/unicode-4.0/\n '4.0': '\\u{26A1}',\n // recycle, http://emojipedia.org/unicode-3.2/\n 3.2: '\\u{267B}',\n // information_source, http://emojipedia.org/unicode-3.0/\n '3.0': '\\u{2139}',\n // heart, http://emojipedia.org/unicode-1.1/\n 1.1: '\\u{2764}',\n};\n\nfunction checkPixelInImageDataArray(pixelOffset, imageDataArray) {\n // `4 *` because RGBA\n const indexOffset = 4 * pixelOffset;\n const hasColor = imageDataArray[indexOffset + 0] ||\n imageDataArray[indexOffset + 1] ||\n imageDataArray[indexOffset + 2];\n const isVisible = imageDataArray[indexOffset + 3];\n // Check for some sort of color other than black\n if (hasColor && isVisible) {\n return true;\n }\n return false;\n}\n\nconst chromeMatches = navigator.userAgent.match(/Chrom(?:e|ium)\\/([0-9]+)\\./);\nconst isChrome = chromeMatches && chromeMatches.length > 0;\nconst chromeVersion = chromeMatches && chromeMatches[1] && parseInt(chromeMatches[1], 10);\n\n// We use 16px because mobile Safari (iOS 9.3) doesn't properly scale emojis :/\n// See 32px, https://i.imgur.com/htY6Zym.png\n// See 16px, https://i.imgur.com/FPPsIF8.png\nconst fontSize = 16;\nfunction generateUnicodeSupportMap(testMap) {\n const testMapKeys = Object.keys(testMap);\n const numTestEntries = testMapKeys\n .reduce((list, testKey) => list.concat(testMap[testKey]), []).length;\n\n const canvas = document.createElement('canvas');\n (window.gl || window).testEmojiUnicodeSupportMapCanvas = canvas;\n const ctx = canvas.getContext('2d');\n canvas.width = (2 * fontSize);\n canvas.height = (numTestEntries * fontSize);\n ctx.fillStyle = '#000000';\n ctx.textBaseline = 'middle';\n ctx.font = `${fontSize}px \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"`;\n // Write each emoji to the canvas vertically\n let writeIndex = 0;\n testMapKeys.forEach((testKey) => {\n const testEntry = testMap[testKey];\n [].concat(testEntry).forEach((emojiUnicode) => {\n ctx.fillText(emojiUnicode, 0, (writeIndex * fontSize) + (fontSize / 2));\n writeIndex += 1;\n });\n });\n\n // Read from the canvas\n const resultMap = {};\n let readIndex = 0;\n testMapKeys.forEach((testKey) => {\n const testEntry = testMap[testKey];\n // This needs to be a `reduce` instead of `every` because we need to\n // keep the `readIndex` in sync from the writes by running all entries\n const isTestSatisfied = [].concat(testEntry).reduce((isSatisfied) => {\n // Sample along the vertical-middle for a couple of characters\n const imageData = ctx.getImageData(\n 0,\n (readIndex * fontSize) + (fontSize / 2),\n 2 * fontSize,\n 1,\n ).data;\n\n let isValidEmoji = false;\n for (let currentPixel = 0; currentPixel < 64; currentPixel += 1) {\n const isLookingAtFirstChar = currentPixel < fontSize;\n const isLookingAtSecondChar = currentPixel >= (fontSize + (fontSize / 2));\n // Check for the emoji somewhere along the row\n if (isLookingAtFirstChar && checkPixelInImageDataArray(currentPixel, imageData)) {\n isValidEmoji = true;\n\n // Check to see that nothing is rendered next to the first character\n // to ensure that the ZWJ sequence rendered as one piece\n } else if (isLookingAtSecondChar && checkPixelInImageDataArray(currentPixel, imageData)) {\n isValidEmoji = false;\n break;\n }\n }\n\n readIndex += 1;\n return isSatisfied && isValidEmoji;\n }, true);\n\n resultMap[testKey] = isTestSatisfied;\n });\n\n resultMap.meta = {\n isChrome,\n chromeVersion,\n };\n\n return resultMap;\n}\n\nexport default function getUnicodeSupportMap() {\n const isLocalStorageAvailable = AccessorUtilities.isLocalStorageAccessSafe();\n\n let glEmojiVersionFromCache;\n let userAgentFromCache;\n if (isLocalStorageAvailable) {\n glEmojiVersionFromCache = window.localStorage.getItem('gl-emoji-version');\n userAgentFromCache = window.localStorage.getItem('gl-emoji-user-agent');\n }\n\n let unicodeSupportMap;\n try {\n unicodeSupportMap = JSON.parse(window.localStorage.getItem('gl-emoji-unicode-support-map'));\n } catch (err) {\n // swallow\n }\n\n if (\n !unicodeSupportMap ||\n glEmojiVersionFromCache !== GL_EMOJI_VERSION ||\n userAgentFromCache !== navigator.userAgent\n ) {\n unicodeSupportMap = generateUnicodeSupportMap(unicodeSupportTestMap);\n\n if (isLocalStorageAvailable) {\n window.localStorage.setItem('gl-emoji-version', GL_EMOJI_VERSION);\n window.localStorage.setItem('gl-emoji-user-agent', navigator.userAgent);\n window.localStorage.setItem('gl-emoji-unicode-support-map', JSON.stringify(unicodeSupportMap));\n }\n }\n\n return unicodeSupportMap;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./emoji/support/unicode_support_map.js","import isEmojiUnicodeSupported from './is_emoji_unicode_supported';\nimport getUnicodeSupportMap from './unicode_support_map';\n\n// cache browser support map between calls\nlet browserUnicodeSupportMap;\n\nexport default function isEmojiUnicodeSupportedByBrowser(emojiUnicode, unicodeVersion) {\n browserUnicodeSupportMap = browserUnicodeSupportMap || getUnicodeSupportMap();\n return isEmojiUnicodeSupported(browserUnicodeSupportMap, emojiUnicode, unicodeVersion);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./emoji/support/index.js","import Autosize from 'autosize';\n\ndocument.addEventListener('DOMContentLoaded', () => {\n const autosizeEls = document.querySelectorAll('.js-autosize');\n\n Autosize(autosizeEls);\n Autosize.update(autosizeEls);\n});\n\n\n\n// WEBPACK FOOTER //\n// ./behaviors/autosize.js","import installCustomElements from 'document-register-element';\nimport isEmojiUnicodeSupported from '../emoji/support';\n\ninstallCustomElements(window);\n\nexport default function installGlEmojiElement() {\n const GlEmojiElementProto = Object.create(HTMLElement.prototype);\n GlEmojiElementProto.createdCallback = function createdCallback() {\n const emojiUnicode = this.textContent.trim();\n const {\n name,\n unicodeVersion,\n fallbackSrc,\n fallbackSpriteClass,\n } = this.dataset;\n\n const isEmojiUnicode = this.childNodes && Array.prototype.every.call(\n this.childNodes,\n childNode => childNode.nodeType === 3,\n );\n const hasImageFallback = fallbackSrc && fallbackSrc.length > 0;\n const hasCssSpriteFalback = fallbackSpriteClass && fallbackSpriteClass.length > 0;\n\n if (\n emojiUnicode &&\n isEmojiUnicode &&\n !isEmojiUnicodeSupported(emojiUnicode, unicodeVersion)\n ) {\n // CSS sprite fallback takes precedence over image fallback\n if (hasCssSpriteFalback) {\n // IE 11 doesn't like adding multiple at once :(\n this.classList.add('emoji-icon');\n this.classList.add(fallbackSpriteClass);\n } else {\n import(/* webpackChunkName: 'emoji' */ '../emoji')\n .then(({ emojiImageTag, emojiFallbackImageSrc }) => {\n if (hasImageFallback) {\n this.innerHTML = emojiImageTag(name, fallbackSrc);\n } else {\n const src = emojiFallbackImageSrc(name);\n this.innerHTML = emojiImageTag(name, src);\n }\n })\n .catch(() => {\n // do nothing\n });\n }\n }\n };\n\n document.registerElement('gl-emoji', {\n prototype: GlEmojiElementProto,\n });\n}\n\n\n\n// WEBPACK FOOTER //\n// ./behaviors/gl_emoji.js","import './autosize';\nimport './bind_in_out';\nimport initCopyAsGFM from './copy_as_gfm';\nimport initCopyToClipboard from './copy_to_clipboard';\nimport './details_behavior';\nimport installGlEmojiElement from './gl_emoji';\nimport './quick_submit';\nimport './requires_input';\nimport './toggler_behavior';\nimport '../preview_markdown';\n\ninstallGlEmojiElement();\ninitCopyAsGFM();\ninitCopyToClipboard();\n\n\n\n// WEBPACK FOOTER //\n// ./behaviors/index.js","import '../commons/bootstrap';\nimport { isInIssuePage } from '../lib/utils/common_utils';\n\n// Quick Submit behavior\n//\n// When a child field of a form with a `js-quick-submit` class receives a\n// \"Meta+Enter\" (Mac) or \"Ctrl+Enter\" (Linux/Windows) key combination, the form\n// is submitted.\n//\n// ### Example Markup\n//\n//
      \n// \n// \n// \n//
      \n//\n\nfunction isMac() {\n return navigator.userAgent.match(/Macintosh/);\n}\n\nfunction keyCodeIs(e, keyCode) {\n if ((e.originalEvent && e.originalEvent.repeat) || e.repeat) {\n return false;\n }\n return e.keyCode === keyCode;\n}\n\n$(document).on('keydown.quick_submit', '.js-quick-submit', (e) => {\n // Enter\n if (!keyCodeIs(e, 13)) {\n return;\n }\n\n const onlyMeta = e.metaKey && !e.altKey && !e.ctrlKey && !e.shiftKey;\n const onlyCtrl = e.ctrlKey && !e.altKey && !e.metaKey && !e.shiftKey;\n if (!onlyMeta && !onlyCtrl) {\n return;\n }\n\n e.preventDefault();\n const $form = $(e.target).closest('form');\n const $submitButton = $form.find('input[type=submit], button[type=submit]').first();\n\n if (!$submitButton.prop('disabled')) {\n $submitButton.trigger('click', [e]);\n\n if (!isInIssuePage()) {\n $submitButton.disable();\n }\n }\n});\n\n// If the user tabs to a submit button on a `js-quick-submit` form, display a\n// tooltip to let them know they could've used the hotkey\n$(document).on('keyup.quick_submit', '.js-quick-submit input[type=submit], .js-quick-submit button[type=submit]', function displayTooltip(e) {\n // Tab\n if (!keyCodeIs(e, 9)) {\n return;\n }\n\n const $this = $(this);\n const title = isMac() ?\n '您也可以按 ⌘-Enter' :\n '您也可以按 Ctrl-Enter';\n\n $this.tooltip({\n container: 'body',\n html: 'true',\n placement: 'auto top',\n title,\n trigger: 'manual',\n });\n $this.tooltip('show').one('blur', () => $this.tooltip('hide'));\n});\n\n\n\n// WEBPACK FOOTER //\n// ./behaviors/quick_submit.js","import _ from 'underscore';\nimport '../commons/bootstrap';\n\n// Requires Input behavior\n//\n// When called on a form with input fields with the `required` attribute, the\n// form's submit button will be disabled until all required fields have values.\n//\n// ### Example Markup\n//\n//
      \n// \n// \n//
      \n//\n\n$.fn.requiresInput = function requiresInput() {\n const $form = $(this);\n const $button = $('button[type=submit], input[type=submit]', $form);\n const fieldSelector = 'input[required=required], select[required=required], textarea[required=required]';\n\n function requireInput() {\n // Collect the input values of *all* required fields\n const values = _.map($(fieldSelector, $form), field => field.value);\n\n // Disable the button if any required fields are empty\n if (values.length && _.any(values, _.isEmpty)) {\n $button.disable();\n } else {\n $button.enable();\n }\n }\n\n // Set initial button state\n requireInput();\n $form.on('change input', fieldSelector, requireInput);\n};\n\n// Hide or Show the help block when creating a new project\n// based on the option selected\nfunction hideOrShowHelpBlock(form) {\n const selected = $('.js-select-namespace option:selected');\n if (selected.length && selected.data('optionsParent') === 'groups') {\n form.find('.help-block').hide();\n } else if (selected.length) {\n form.find('.help-block').show();\n }\n}\n\n$(() => {\n const $form = $('form.js-requires-input');\n if ($form) {\n $form.requiresInput();\n hideOrShowHelpBlock($form);\n $('.select2.js-select-namespace').change(() => hideOrShowHelpBlock($form));\n }\n});\n\n\n\n// WEBPACK FOOTER //\n// ./behaviors/requires_input.js","// Toggle button. Show/hide content inside parent container.\n// Button does not change visibility. If button has icon - it changes chevron style.\n//\n// %div.js-toggle-container\n// %button.js-toggle-button\n// %div.js-toggle-content\n//\nimport { getLocationHash } from '../lib/utils/url_utility';\n\n$(() => {\n function toggleContainer(container, toggleState) {\n const $container = $(container);\n\n $container\n .find('.js-toggle-button .fa-chevron-up, .js-toggle-button .fa-chevron-down')\n .toggleClass('fa-chevron-up', toggleState)\n .toggleClass('fa-chevron-down', toggleState !== undefined ? !toggleState : undefined);\n\n $container\n .find('.js-toggle-content')\n .toggle(toggleState);\n }\n\n $('body').on('click', '.js-toggle-button', function toggleButton(e) {\n e.currentTarget.classList.toggle(e.currentTarget.dataset.toggleOpenClass || 'open');\n toggleContainer($(this).closest('.js-toggle-container'));\n\n const targetTag = e.currentTarget.tagName.toLowerCase();\n if (targetTag === 'a' || targetTag === 'button') {\n e.preventDefault();\n }\n });\n\n // If we're accessing a permalink, ensure it is not inside a\n // closed js-toggle-container!\n const hash = getLocationHash();\n const anchor = hash && document.getElementById(hash);\n const container = anchor && $(anchor).closest('.js-toggle-container');\n\n if (container) {\n toggleContainer(container, true);\n anchor.scrollIntoView();\n }\n});\n\n\n\n// WEBPACK FOOTER //\n// ./behaviors/toggler_behavior.js","export const addTooltipToEl = (el) => {\n const textEl = el.querySelector('.js-breadcrumb-item-text');\n\n if (textEl && textEl.scrollWidth > textEl.offsetWidth) {\n el.setAttribute('title', el.textContent);\n el.setAttribute('data-container', 'body');\n el.classList.add('has-tooltip');\n }\n};\n\nexport default () => {\n const breadcrumbs = document.querySelector('.js-breadcrumbs-list');\n\n if (breadcrumbs) {\n const topLevelLinks = [...breadcrumbs.children].filter(el => !el.classList.contains('dropdown'))\n .map(el => el.querySelector('a'))\n .filter(el => el);\n const $expander = $('.js-breadcrumbs-collapsed-expander');\n\n topLevelLinks.forEach(el => addTooltipToEl(el));\n\n $expander.closest('.dropdown')\n .on('show.bs.dropdown hide.bs.dropdown', (e) => {\n $('.js-breadcrumbs-collapsed-expander', e.currentTarget).toggleClass('open')\n .tooltip('hide');\n });\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./breadcrumb.js","export const breakpoints = {\n lg: 1200,\n md: 992,\n sm: 768,\n xs: 0,\n};\n\nconst BreakpointInstance = {\n windowWidth: () => window.innerWidth,\n getBreakpointSize() {\n const windowWidth = this.windowWidth();\n\n const breakpoint = Object.keys(breakpoints).find(key => windowWidth > breakpoints[key]);\n\n return breakpoint;\n },\n};\n\nexport default BreakpointInstance;\n\n\n\n// WEBPACK FOOTER //\n// ./breakpoints.js","/* eslint-disable func-names, space-before-function-paren, wrap-iife, one-var, no-var, camelcase, one-var-declaration-per-line, no-else-return, max-len */\nimport { rstrip } from './lib/utils/common_utils';\n\nwindow.ConfirmDangerModal = (function() {\n function ConfirmDangerModal(form, text) {\n var project_path, submit;\n this.form = form;\n $('.js-confirm-text').text(text || '');\n $('.js-confirm-danger-input').val('');\n $('#modal-confirm-danger').modal('show');\n project_path = $('.js-confirm-danger-match').text();\n submit = $('.js-confirm-danger-submit');\n submit.disable();\n $('.js-confirm-danger-input').off('input');\n $('.js-confirm-danger-input').on('input', function() {\n if (rstrip($(this).val()) === project_path) {\n return submit.enable();\n } else {\n return submit.disable();\n }\n });\n $('.js-confirm-danger-submit').off('click');\n $('.js-confirm-danger-submit').on('click', (function(_this) {\n return function() {\n return _this.form.submit();\n };\n })(this));\n }\n\n return ConfirmDangerModal;\n})();\n\n\n\n// WEBPACK FOOTER //\n// ./confirm_danger_modal.js","import Cookies from 'js-cookie';\nimport _ from 'underscore';\nimport bp from './breakpoints';\n\nexport default class ContextualSidebar {\n constructor() {\n this.initDomElements();\n this.render();\n }\n\n initDomElements() {\n this.$page = $('.layout-page');\n this.$sidebar = $('.nav-sidebar');\n this.$innerScroll = $('.nav-sidebar-inner-scroll', this.$sidebar);\n this.$overlay = $('.mobile-overlay');\n this.$openSidebar = $('.toggle-mobile-nav');\n this.$closeSidebar = $('.close-nav-button');\n this.$sidebarToggle = $('.js-toggle-sidebar');\n }\n\n bindEvents() {\n document.addEventListener('click', (e) => {\n if (!e.target.closest('.nav-sidebar') && (bp.getBreakpointSize() === 'sm' || bp.getBreakpointSize() === 'md')) {\n this.toggleCollapsedSidebar(true);\n }\n });\n this.$openSidebar.on('click', () => this.toggleSidebarNav(true));\n this.$closeSidebar.on('click', () => this.toggleSidebarNav(false));\n this.$overlay.on('click', () => this.toggleSidebarNav(false));\n this.$sidebarToggle.on('click', () => {\n const value = !this.$sidebar.hasClass('sidebar-collapsed-desktop');\n this.toggleCollapsedSidebar(value);\n });\n\n $(window).on('resize', () => _.debounce(this.render(), 100));\n }\n\n static setCollapsedCookie(value) {\n if (bp.getBreakpointSize() !== 'lg') {\n return;\n }\n Cookies.set('sidebar_collapsed', value, { expires: 365 * 10 });\n }\n\n toggleSidebarNav(show) {\n this.$sidebar.toggleClass('sidebar-expanded-mobile', show);\n this.$overlay.toggleClass('mobile-nav-open', show);\n this.$sidebar.removeClass('sidebar-collapsed-desktop');\n }\n\n toggleCollapsedSidebar(collapsed) {\n const breakpoint = bp.getBreakpointSize();\n\n if (this.$sidebar.length) {\n this.$sidebar.toggleClass('sidebar-collapsed-desktop', collapsed);\n this.$page.toggleClass('page-with-icon-sidebar', breakpoint === 'sm' ? true : collapsed);\n }\n ContextualSidebar.setCollapsedCookie(collapsed);\n\n this.toggleSidebarOverflow();\n }\n\n toggleSidebarOverflow() {\n if (this.$innerScroll.prop('scrollHeight') > this.$innerScroll.prop('offsetHeight')) {\n this.$innerScroll.css('overflow-y', 'scroll');\n } else {\n this.$innerScroll.css('overflow-y', '');\n }\n }\n\n render() {\n const breakpoint = bp.getBreakpointSize();\n\n if (breakpoint === 'sm' || breakpoint === 'md') {\n this.toggleCollapsedSidebar(true);\n } else if (breakpoint === 'lg') {\n const collapse = Cookies.get('sidebar_collapsed') === 'true';\n this.toggleCollapsedSidebar(collapse);\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./contextual_sidebar.js","/* eslint-disable func-names, space-before-function-paren, no-var, prefer-arrow-callback, wrap-iife, no-shadow, consistent-return, one-var, one-var-declaration-per-line, camelcase, default-case, no-new, quotes, no-duplicate-case, no-case-declarations, no-fallthrough, max-len */\nimport Flash from './flash';\nimport GfmAutoComplete from './gfm_auto_complete';\nimport { convertPermissionToBoolean } from './lib/utils/common_utils';\nimport GlFieldErrors from './gl_field_errors';\nimport Shortcuts from './shortcuts';\nimport SearchAutocomplete from './search_autocomplete';\n\nfunction initSearch() {\n // Only when search form is present\n if ($('.search').length) {\n return new SearchAutocomplete();\n }\n}\n\nfunction initFieldErrors() {\n $('.gl-show-field-errors').each((i, form) => {\n new GlFieldErrors(form);\n });\n}\n\nfunction initPageShortcuts(page) {\n const pagesWithCustomShortcuts = [\n 'projects:activity',\n 'projects:artifacts:browse',\n 'projects:artifacts:file',\n 'projects:blame:show',\n 'projects:blob:show',\n 'projects:commit:show',\n 'projects:commits:show',\n 'projects:find_file:show',\n 'projects:issues:edit',\n 'projects:issues:index',\n 'projects:issues:new',\n 'projects:issues:show',\n 'projects:merge_requests:creations:diffs',\n 'projects:merge_requests:creations:new',\n 'projects:merge_requests:edit',\n 'projects:merge_requests:index',\n 'projects:merge_requests:show',\n 'projects:network:show',\n 'projects:show',\n 'projects:tree:show',\n 'groups:show',\n ];\n\n if (pagesWithCustomShortcuts.indexOf(page) === -1) {\n new Shortcuts();\n }\n}\n\nfunction initGFMInput() {\n $('.js-gfm-input:not(.js-vue-textarea)').each((i, el) => {\n const gfm = new GfmAutoComplete(gl.GfmAutoComplete && gl.GfmAutoComplete.dataSources);\n const enableGFM = convertPermissionToBoolean(el.dataset.supportsAutocomplete);\n gfm.setup($(el), {\n emojis: true,\n members: enableGFM,\n issues: enableGFM,\n milestones: enableGFM,\n mergeRequests: enableGFM,\n labels: enableGFM,\n });\n });\n}\n\nfunction initPerformanceBar() {\n if (document.querySelector('#peek')) {\n import('./performance_bar')\n .then(m => new m.default({ container: '#peek' })) // eslint-disable-line new-cap\n .catch(() => Flash('Error loading performance bar module'));\n }\n}\n\nexport default () => {\n initSearch();\n initFieldErrors();\n\n const page = $('body').attr('data-page');\n if (page) {\n initPageShortcuts(page);\n initGFMInput();\n initPerformanceBar();\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./dispatcher.js","const DATA_TRIGGER = 'data-dropdown-trigger';\nconst DATA_DROPDOWN = 'data-dropdown';\nconst SELECTED_CLASS = 'droplab-item-selected';\nconst ACTIVE_CLASS = 'droplab-item-active';\nconst IGNORE_CLASS = 'droplab-item-ignore';\n// Matches `{{anything}}` and `{{ everything }}`.\nconst TEMPLATE_REGEX = /\\{\\{(.+?)\\}\\}/g;\n\nexport {\n DATA_TRIGGER,\n DATA_DROPDOWN,\n SELECTED_CLASS,\n ACTIVE_CLASS,\n TEMPLATE_REGEX,\n IGNORE_CLASS,\n};\n\n\n\n// WEBPACK FOOTER //\n// ./droplab/constants.js","/* eslint-disable */\n\nimport { template as _template } from 'underscore';\nimport { DATA_TRIGGER, DATA_DROPDOWN, TEMPLATE_REGEX } from './constants';\n\nconst utils = {\n toCamelCase(attr) {\n return this.camelize(attr.split('-').slice(1).join(' '));\n },\n\n template(templateString, data) {\n const template = _template(templateString, {\n escape: TEMPLATE_REGEX,\n });\n\n return template(data);\n },\n\n camelize(str) {\n return str.replace(/(?:^\\w|[A-Z]|\\b\\w)/g, (letter, index) => {\n return index === 0 ? letter.toLowerCase() : letter.toUpperCase();\n }).replace(/\\s+/g, '');\n },\n\n closest(thisTag, stopTag) {\n while (thisTag && thisTag.tagName !== stopTag && thisTag.tagName !== 'HTML') {\n thisTag = thisTag.parentNode;\n }\n return thisTag;\n },\n\n isDropDownParts(target) {\n if (!target || !target.hasAttribute || target.tagName === 'HTML') return false;\n return target.hasAttribute(DATA_TRIGGER) || target.hasAttribute(DATA_DROPDOWN);\n },\n};\n\nexport default utils;\n\n\n\n// WEBPACK FOOTER //\n// ./droplab/utils.js","import utils from './utils';\nimport { SELECTED_CLASS, IGNORE_CLASS } from './constants';\n\nclass DropDown {\n constructor(list, config = { }) {\n this.currentIndex = 0;\n this.hidden = true;\n this.list = typeof list === 'string' ? document.querySelector(list) : list;\n this.items = [];\n this.eventWrapper = {};\n this.hideOnClick = config.hideOnClick !== false;\n\n if (config.addActiveClassToDropdownButton) {\n this.dropdownToggle = this.list.parentNode.querySelector('.js-dropdown-toggle');\n }\n\n this.getItems();\n this.initTemplateString();\n this.addEvents();\n\n this.initialState = list.innerHTML;\n }\n\n getItems() {\n this.items = [].slice.call(this.list.querySelectorAll('li'));\n return this.items;\n }\n\n initTemplateString() {\n const items = this.items || this.getItems();\n\n let templateString = '';\n if (items.length > 0) templateString = items[items.length - 1].outerHTML;\n this.templateString = templateString;\n\n return this.templateString;\n }\n\n clickEvent(e) {\n if (e.target.tagName === 'UL') return;\n if (e.target.closest(`.${IGNORE_CLASS}`)) return;\n\n const selected = e.target.closest('li');\n if (!selected) return;\n\n this.addSelectedClass(selected);\n\n e.preventDefault();\n if (this.hideOnClick) {\n this.hide();\n }\n\n const listEvent = new CustomEvent('click.dl', {\n detail: {\n list: this,\n selected,\n data: e.target.dataset,\n },\n });\n this.list.dispatchEvent(listEvent);\n }\n\n addSelectedClass(selected) {\n this.removeSelectedClasses();\n selected.classList.add(SELECTED_CLASS);\n }\n\n removeSelectedClasses() {\n const items = this.items || this.getItems();\n\n items.forEach(item => item.classList.remove(SELECTED_CLASS));\n }\n\n addEvents() {\n this.eventWrapper.clickEvent = this.clickEvent.bind(this);\n this.eventWrapper.closeDropdown = this.closeDropdown.bind(this);\n\n this.list.addEventListener('click', this.eventWrapper.clickEvent);\n this.list.addEventListener('keyup', this.eventWrapper.closeDropdown);\n }\n\n closeDropdown(event) {\n // `ESC` key closes the dropdown.\n if (event.keyCode === 27) {\n event.preventDefault();\n return this.toggle();\n }\n\n return true;\n }\n\n setData(data) {\n this.data = data;\n this.render(data);\n }\n\n addData(data) {\n this.data = (this.data || []).concat(data);\n this.render(this.data);\n }\n\n render(data) {\n const children = data ? data.map(this.renderChildren.bind(this)) : [];\n const renderableList = this.list.querySelector('ul[data-dynamic]') || this.list;\n\n renderableList.innerHTML = children.join('');\n\n const listEvent = new CustomEvent('render.dl', {\n detail: {\n list: this,\n },\n });\n this.list.dispatchEvent(listEvent);\n }\n\n renderChildren(data) {\n const html = utils.template(this.templateString, data);\n const template = document.createElement('div');\n\n template.innerHTML = html;\n DropDown.setImagesSrc(template);\n template.firstChild.style.display = data.droplab_hidden ? 'none' : 'block';\n\n return template.firstChild.outerHTML;\n }\n\n show() {\n if (!this.hidden) return;\n this.list.style.display = 'block';\n this.currentIndex = 0;\n this.hidden = false;\n\n if (this.dropdownToggle) this.dropdownToggle.classList.add('active');\n }\n\n hide() {\n if (this.hidden) return;\n this.list.style.display = 'none';\n this.currentIndex = 0;\n this.hidden = true;\n\n if (this.dropdownToggle) this.dropdownToggle.classList.remove('active');\n }\n\n toggle() {\n if (this.hidden) return this.show();\n\n return this.hide();\n }\n\n destroy() {\n this.hide();\n this.list.removeEventListener('click', this.eventWrapper.clickEvent);\n this.list.removeEventListener('keyup', this.eventWrapper.closeDropdown);\n }\n\n static setImagesSrc(template) {\n const images = [...template.querySelectorAll('img[data-src]')];\n\n images.forEach((image) => {\n const img = image;\n\n img.src = img.getAttribute('data-src');\n img.removeAttribute('data-src');\n });\n }\n}\n\nexport default DropDown;\n\n\n\n// WEBPACK FOOTER //\n// ./droplab/drop_down.js","import DropDown from './drop_down';\n\nclass Hook {\n constructor(trigger, list, plugins, config) {\n this.trigger = trigger;\n this.list = new DropDown(list, config);\n this.type = 'Hook';\n this.event = 'click';\n this.plugins = plugins || [];\n this.config = config || {};\n this.id = trigger.id;\n }\n}\n\nexport default Hook;\n\n\n\n// WEBPACK FOOTER //\n// ./droplab/hook.js","import Hook from './hook';\n\nclass HookButton extends Hook {\n constructor(trigger, list, plugins, config) {\n super(trigger, list, plugins, config);\n\n this.type = 'button';\n this.event = 'click';\n\n this.eventWrapper = {};\n\n this.addEvents();\n this.addPlugins();\n }\n\n addPlugins() {\n this.plugins.forEach(plugin => plugin.init(this));\n }\n\n clicked(e) {\n const buttonEvent = new CustomEvent('click.dl', {\n detail: {\n hook: this,\n },\n bubbles: true,\n cancelable: true,\n });\n e.target.dispatchEvent(buttonEvent);\n\n this.list.toggle();\n }\n\n addEvents() {\n this.eventWrapper.clicked = this.clicked.bind(this);\n this.trigger.addEventListener('click', this.eventWrapper.clicked);\n }\n\n removeEvents() {\n this.trigger.removeEventListener('click', this.eventWrapper.clicked);\n }\n\n restoreInitialState() {\n this.list.list.innerHTML = this.list.initialState;\n }\n\n removePlugins() {\n this.plugins.forEach(plugin => plugin.destroy());\n }\n\n destroy() {\n this.restoreInitialState();\n\n this.removeEvents();\n this.removePlugins();\n }\n}\n\nexport default HookButton;\n\n\n\n// WEBPACK FOOTER //\n// ./droplab/hook_button.js","import Hook from './hook';\n\nclass HookInput extends Hook {\n constructor(trigger, list, plugins, config) {\n super(trigger, list, plugins, config);\n\n this.type = 'input';\n this.event = 'input';\n\n this.eventWrapper = {};\n\n this.addEvents();\n this.addPlugins();\n }\n\n addPlugins() {\n this.plugins.forEach(plugin => plugin.init(this));\n }\n\n addEvents() {\n this.eventWrapper.mousedown = this.mousedown.bind(this);\n this.eventWrapper.input = this.input.bind(this);\n this.eventWrapper.keyup = this.keyup.bind(this);\n this.eventWrapper.keydown = this.keydown.bind(this);\n\n this.trigger.addEventListener('mousedown', this.eventWrapper.mousedown);\n this.trigger.addEventListener('input', this.eventWrapper.input);\n this.trigger.addEventListener('keyup', this.eventWrapper.keyup);\n this.trigger.addEventListener('keydown', this.eventWrapper.keydown);\n }\n\n removeEvents() {\n this.hasRemovedEvents = true;\n\n this.trigger.removeEventListener('mousedown', this.eventWrapper.mousedown);\n this.trigger.removeEventListener('input', this.eventWrapper.input);\n this.trigger.removeEventListener('keyup', this.eventWrapper.keyup);\n this.trigger.removeEventListener('keydown', this.eventWrapper.keydown);\n }\n\n input(e) {\n if (this.hasRemovedEvents) return;\n\n this.list.show();\n\n const inputEvent = new CustomEvent('input.dl', {\n detail: {\n hook: this,\n text: e.target.value,\n },\n bubbles: true,\n cancelable: true,\n });\n e.target.dispatchEvent(inputEvent);\n }\n\n mousedown(e) {\n if (this.hasRemovedEvents) return;\n\n const mouseEvent = new CustomEvent('mousedown.dl', {\n detail: {\n hook: this,\n text: e.target.value,\n },\n bubbles: true,\n cancelable: true,\n });\n e.target.dispatchEvent(mouseEvent);\n }\n\n keyup(e) {\n if (this.hasRemovedEvents) return;\n\n this.keyEvent(e, 'keyup.dl');\n }\n\n keydown(e) {\n if (this.hasRemovedEvents) return;\n\n this.keyEvent(e, 'keydown.dl');\n }\n\n keyEvent(e, eventName) {\n this.list.show();\n\n const keyEvent = new CustomEvent(eventName, {\n detail: {\n hook: this,\n text: e.target.value,\n which: e.which,\n key: e.key,\n },\n bubbles: true,\n cancelable: true,\n });\n e.target.dispatchEvent(keyEvent);\n }\n\n restoreInitialState() {\n this.list.list.innerHTML = this.list.initialState;\n }\n\n removePlugins() {\n this.plugins.forEach(plugin => plugin.destroy());\n }\n\n destroy() {\n this.restoreInitialState();\n\n this.removeEvents();\n this.removePlugins();\n\n this.list.destroy();\n }\n}\n\nexport default HookInput;\n\n\n\n// WEBPACK FOOTER //\n// ./droplab/hook_input.js","/* eslint-disable */\n\nimport { ACTIVE_CLASS } from './constants';\n\nconst Keyboard = function () {\n var currentKey;\n var currentFocus;\n var isUpArrow = false;\n var isDownArrow = false;\n var removeHighlight = function removeHighlight(list) {\n var itemElements = Array.prototype.slice.call(list.list.querySelectorAll('li:not(.divider):not(.hidden)'), 0);\n var listItems = [];\n for(var i = 0; i < itemElements.length; i++) {\n var listItem = itemElements[i];\n listItem.classList.remove(ACTIVE_CLASS);\n\n if (listItem.style.display !== 'none') {\n listItems.push(listItem);\n }\n }\n return listItems;\n };\n\n var setMenuForArrows = function setMenuForArrows(list) {\n var listItems = removeHighlight(list);\n if(list.currentIndex>0){\n if(!listItems[list.currentIndex-1]){\n list.currentIndex = list.currentIndex-1;\n }\n\n if (listItems[list.currentIndex-1]) {\n var el = listItems[list.currentIndex-1];\n var filterDropdownEl = el.closest('.filter-dropdown');\n el.classList.add(ACTIVE_CLASS);\n\n if (filterDropdownEl) {\n var filterDropdownBottom = filterDropdownEl.offsetHeight;\n var elOffsetTop = el.offsetTop - 30;\n\n if (elOffsetTop > filterDropdownBottom) {\n filterDropdownEl.scrollTop = elOffsetTop - filterDropdownBottom;\n }\n }\n }\n }\n };\n\n var mousedown = function mousedown(e) {\n var list = e.detail.hook.list;\n removeHighlight(list);\n list.show();\n list.currentIndex = 0;\n isUpArrow = false;\n isDownArrow = false;\n };\n var selectItem = function selectItem(list) {\n var listItems = removeHighlight(list);\n var currentItem = listItems[list.currentIndex-1];\n var listEvent = new CustomEvent('click.dl', {\n detail: {\n list: list,\n selected: currentItem,\n data: currentItem.dataset,\n },\n });\n list.list.dispatchEvent(listEvent);\n list.hide();\n }\n\n var keydown = function keydown(e){\n var typedOn = e.target;\n var list = e.detail.hook.list;\n var currentIndex = list.currentIndex;\n isUpArrow = false;\n isDownArrow = false;\n\n if(e.detail.which){\n currentKey = e.detail.which;\n if(currentKey === 13){\n selectItem(e.detail.hook.list);\n return;\n }\n if(currentKey === 38) {\n isUpArrow = true;\n }\n if(currentKey === 40) {\n isDownArrow = true;\n }\n } else if(e.detail.key) {\n currentKey = e.detail.key;\n if(currentKey === 'Enter'){\n selectItem(e.detail.hook.list);\n return;\n }\n if(currentKey === 'ArrowUp') {\n isUpArrow = true;\n }\n if(currentKey === 'ArrowDown') {\n isDownArrow = true;\n }\n }\n if(isUpArrow){ currentIndex--; }\n if(isDownArrow){ currentIndex++; }\n if(currentIndex < 0){ currentIndex = 0; }\n list.currentIndex = currentIndex;\n setMenuForArrows(e.detail.hook.list);\n };\n\n document.addEventListener('mousedown.dl', mousedown);\n document.addEventListener('keydown.dl', keydown);\n};\n\nexport default Keyboard;\n\n\n\n// WEBPACK FOOTER //\n// ./droplab/keyboard.js","import HookButton from './hook_button';\nimport HookInput from './hook_input';\nimport utils from './utils';\nimport Keyboard from './keyboard';\nimport { DATA_TRIGGER } from './constants';\n\nclass DropLab {\n constructor() {\n this.ready = false;\n this.hooks = [];\n this.queuedData = [];\n this.config = {};\n\n this.eventWrapper = {};\n }\n\n loadStatic() {\n const dropdownTriggers = [].slice.apply(document.querySelectorAll(`[${DATA_TRIGGER}]`));\n this.addHooks(dropdownTriggers);\n }\n\n addData(...args) {\n this.applyArgs(args, 'processAddData');\n }\n\n setData(...args) {\n this.applyArgs(args, 'processSetData');\n }\n\n destroy() {\n this.hooks.forEach(hook => hook.destroy());\n this.hooks = [];\n this.removeEvents();\n }\n\n applyArgs(args, methodName) {\n if (this.ready) return this[methodName](...args);\n\n this.queuedData = this.queuedData || [];\n this.queuedData.push(args);\n\n return this.ready;\n }\n\n processAddData(trigger, data) {\n this.processData(trigger, data, 'addData');\n }\n\n processSetData(trigger, data) {\n this.processData(trigger, data, 'setData');\n }\n\n processData(trigger, data, methodName) {\n this.hooks.forEach((hook) => {\n if (Array.isArray(trigger)) hook.list[methodName](trigger);\n\n if (hook.trigger.id === trigger) hook.list[methodName](data);\n });\n }\n\n addEvents() {\n this.eventWrapper.documentClicked = this.documentClicked.bind(this);\n document.addEventListener('click', this.eventWrapper.documentClicked);\n }\n\n documentClicked(e) {\n let thisTag = e.target;\n\n if (thisTag.tagName !== 'UL') thisTag = utils.closest(thisTag, 'UL');\n if (utils.isDropDownParts(thisTag, this.hooks)) return;\n if (utils.isDropDownParts(e.target, this.hooks)) return;\n\n this.hooks.forEach(hook => hook.list.hide());\n }\n\n removeEvents() {\n document.removeEventListener('click', this.eventWrapper.documentClicked);\n }\n\n changeHookList(trigger, list, plugins, config) {\n const availableTrigger = typeof trigger === 'string' ? document.getElementById(trigger) : trigger;\n\n this.hooks.forEach((hook, i) => {\n const aHook = hook;\n\n aHook.list.list.dataset.dropdownActive = false;\n\n if (aHook.trigger !== availableTrigger) return;\n\n aHook.destroy();\n this.hooks.splice(i, 1);\n this.addHook(availableTrigger, list, plugins, config);\n });\n }\n\n addHook(hook, list, plugins, config) {\n const availableHook = typeof hook === 'string' ? document.querySelector(hook) : hook;\n let availableList;\n\n if (typeof list === 'string') {\n availableList = document.querySelector(list);\n } else if (list instanceof Element) {\n availableList = list;\n } else {\n availableList = document.querySelector(hook.dataset[utils.toCamelCase(DATA_TRIGGER)]);\n }\n\n availableList.dataset.dropdownActive = true;\n\n const HookObject = availableHook.tagName === 'INPUT' ? HookInput : HookButton;\n this.hooks.push(new HookObject(availableHook, availableList, plugins, config));\n\n return this;\n }\n\n addHooks(hooks, plugins, config) {\n hooks.forEach(hook => this.addHook(hook, null, plugins, config));\n return this;\n }\n\n setConfig(obj) {\n this.config = obj;\n }\n\n fireReady() {\n const readyEvent = new CustomEvent('ready.dl', {\n detail: {\n dropdown: this,\n },\n });\n document.dispatchEvent(readyEvent);\n\n this.ready = true;\n }\n\n init(hook, list, plugins, config) {\n if (hook) {\n this.addHook(hook, list, plugins, config);\n } else {\n this.loadStatic();\n }\n\n this.addEvents();\n\n Keyboard();\n\n this.fireReady();\n\n this.queuedData.forEach(data => this.addData(data));\n this.queuedData = [];\n\n return this;\n }\n}\n\nexport default DropLab;\n\n\n\n// WEBPACK FOOTER //\n// ./droplab/drop_lab.js","import _ from 'underscore';\nimport {\n getSelector,\n togglePopover,\n inserted,\n mouseenter,\n mouseleave,\n} from './feature_highlight_helper';\n\nexport function setupFeatureHighlightPopover(id, debounceTimeout = 300) {\n const $selector = $(getSelector(id));\n const $parent = $selector.parent();\n const $popoverContent = $parent.siblings('.feature-highlight-popover-content');\n const hideOnScroll = togglePopover.bind($selector, false);\n const debouncedMouseleave = _.debounce(mouseleave, debounceTimeout);\n\n $selector\n // Setup popover\n .data('content', $popoverContent.prop('outerHTML'))\n .popover({\n html: true,\n // Override the existing template to add custom CSS classes\n template: `\n
      \n
      \n
      \n
      \n `,\n })\n .on('mouseenter', mouseenter)\n .on('mouseleave', debouncedMouseleave)\n .on('inserted.bs.popover', inserted)\n .on('show.bs.popover', () => {\n window.addEventListener('scroll', hideOnScroll);\n })\n .on('hide.bs.popover', () => {\n window.removeEventListener('scroll', hideOnScroll);\n })\n // Display feature highlight\n .removeAttr('disabled');\n}\n\nexport function findHighestPriorityFeature() {\n let priorityFeature;\n\n const sortedFeatureEls = [].slice.call(document.querySelectorAll('.js-feature-highlight')).sort((a, b) =>\n (a.dataset.highlightPriority || 0) < (b.dataset.highlightPriority || 0));\n\n const [priorityFeatureEl] = sortedFeatureEls;\n if (priorityFeatureEl) {\n priorityFeature = priorityFeatureEl.dataset.highlight;\n }\n\n return priorityFeature;\n}\n\nexport function highlightFeatures() {\n const priorityFeature = findHighestPriorityFeature();\n\n if (priorityFeature) {\n setupFeatureHighlightPopover(priorityFeature);\n }\n\n return priorityFeature;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./feature_highlight/feature_highlight.js","import axios from '../lib/utils/axios_utils';\nimport { __ } from '../locale';\nimport Flash from '../flash';\nimport LazyLoader from '../lazy_loader';\n\nexport const getSelector = highlightId => `.js-feature-highlight[data-highlight=${highlightId}]`;\n\nexport function togglePopover(show) {\n const isAlreadyShown = this.hasClass('js-popover-show');\n if ((show && isAlreadyShown) || (!show && !isAlreadyShown)) {\n return false;\n }\n this.popover(show ? 'show' : 'hide');\n this.toggleClass('disable-animation js-popover-show', show);\n\n return true;\n}\n\nexport function dismiss(highlightId) {\n axios.post(this.attr('data-dismiss-endpoint'), {\n feature_name: highlightId,\n })\n .catch(() => Flash(__('An error occurred while dismissing the feature highlight. Refresh the page and try dismissing again.')));\n\n togglePopover.call(this, false);\n this.hide();\n}\n\nexport function mouseleave() {\n if (!$('.popover:hover').length > 0) {\n const $featureHighlight = $(this);\n togglePopover.call($featureHighlight, false);\n }\n}\n\nexport function mouseenter() {\n const $featureHighlight = $(this);\n\n const showedPopover = togglePopover.call($featureHighlight, true);\n if (showedPopover) {\n $('.popover')\n .on('mouseleave', mouseleave.bind($featureHighlight));\n }\n}\n\nexport function inserted() {\n const popoverId = this.getAttribute('aria-describedby');\n const highlightId = this.dataset.highlight;\n const $popover = $(this);\n const dismissWrapper = dismiss.bind($popover, highlightId);\n\n $(`#${popoverId} .dismiss-feature-highlight`)\n .on('click', dismissWrapper);\n\n const lazyImg = $(`#${popoverId} .feature-highlight-illustration`)[0];\n if (lazyImg) {\n LazyLoader.loadImage(lazyImg);\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./feature_highlight/feature_highlight_helper.js","import { highlightFeatures } from './feature_highlight';\nimport bp from '../breakpoints';\n\nexport default function domContentLoaded() {\n if (bp.getBreakpointSize() === 'lg') {\n highlightFeatures();\n return true;\n }\n return false;\n}\n\ndocument.addEventListener('DOMContentLoaded', domContentLoaded);\n\n\n\n// WEBPACK FOOTER //\n// ./feature_highlight/feature_highlight_options.js","/* eslint-disable class-methods-use-this */\nlet container = document;\n\nclass FilteredSearchContainerClass {\n set container(containerParam) {\n container = containerParam;\n }\n\n get container() {\n return container;\n }\n}\n\nexport default new FilteredSearchContainerClass();\n\n\n\n// WEBPACK FOOTER //\n// ./filtered_search/container.js","import _ from 'underscore';\nimport FilteredSearchContainer from './container';\nimport FilteredSearchTokenizer from './filtered_search_tokenizer';\nimport FilteredSearchDropdownManager from './filtered_search_dropdown_manager';\nimport FilteredSearchVisualTokens from './filtered_search_visual_tokens';\n\nexport default class DropdownUtils {\n static getEscapedText(text) {\n let escapedText = text;\n const hasSpace = text.indexOf(' ') !== -1;\n const hasDoubleQuote = text.indexOf('\"') !== -1;\n\n // Encapsulate value with quotes if it has spaces\n // Known side effect: values's with both single and double quotes\n // won't escape properly\n if (hasSpace) {\n if (hasDoubleQuote) {\n escapedText = `'${text}'`;\n } else {\n // Encapsulate singleQuotes or if it hasSpace\n escapedText = `\"${text}\"`;\n }\n }\n\n return escapedText;\n }\n\n static filterWithSymbol(filterSymbol, input, item) {\n const updatedItem = item;\n const searchInput = DropdownUtils.getSearchInput(input);\n\n const title = updatedItem.title.toLowerCase();\n let value = searchInput.toLowerCase();\n let symbol = '';\n\n // Remove the symbol for filter\n if (value[0] === filterSymbol) {\n symbol = value[0];\n value = value.slice(1);\n }\n\n // Removes the first character if it is a quotation so that we can search\n // with multiple words\n if ((value[0] === '\"' || value[0] === '\\'') && title.indexOf(' ') !== -1) {\n value = value.slice(1);\n }\n\n // Eg. filterSymbol = ~ for labels\n const matchWithoutSymbol = symbol === filterSymbol && title.indexOf(value) !== -1;\n const match = title.indexOf(`${symbol}${value}`) !== -1;\n\n updatedItem.droplab_hidden = !match && !matchWithoutSymbol;\n\n return updatedItem;\n }\n\n static mergeDuplicateLabels(dataMap, newLabel) {\n const updatedMap = dataMap;\n const key = newLabel.title;\n\n const hasKeyProperty = Object.prototype.hasOwnProperty.call(updatedMap, key);\n\n if (!hasKeyProperty) {\n updatedMap[key] = newLabel;\n } else {\n const existing = updatedMap[key];\n\n if (!existing.multipleColors) {\n existing.multipleColors = [existing.color];\n }\n\n existing.multipleColors.push(newLabel.color);\n }\n\n return updatedMap;\n }\n\n static duplicateLabelColor(labelColors) {\n const colors = labelColors;\n const spacing = 100 / colors.length;\n\n // Reduce the colors to 4\n colors.length = Math.min(colors.length, 4);\n\n const color = colors.map((c, i) => {\n const percentFirst = Math.floor(spacing * i);\n const percentSecond = Math.floor(spacing * (i + 1));\n return `${c} ${percentFirst}%, ${c} ${percentSecond}%`;\n }).join(', ');\n\n return `linear-gradient(${color})`;\n }\n\n static duplicateLabelPreprocessing(data) {\n const results = [];\n const dataMap = {};\n\n data.forEach(DropdownUtils.mergeDuplicateLabels.bind(null, dataMap));\n\n Object.keys(dataMap)\n .forEach((key) => {\n const label = dataMap[key];\n\n if (label.multipleColors) {\n label.color = DropdownUtils.duplicateLabelColor(label.multipleColors);\n label.text_color = '#000000';\n }\n\n results.push(label);\n });\n\n results.preprocessed = true;\n\n return results;\n }\n\n static filterHint(config, item) {\n const { input, allowedKeys } = config;\n const updatedItem = item;\n const searchInput = DropdownUtils.getSearchQuery(input);\n const { lastToken, tokens } =\n FilteredSearchTokenizer.processTokens(searchInput, allowedKeys);\n const lastKey = lastToken.key || lastToken || '';\n const allowMultiple = item.type === 'array';\n const itemInExistingTokens = tokens.some(t => t.key === item.hint);\n\n if (!allowMultiple && itemInExistingTokens) {\n updatedItem.droplab_hidden = true;\n } else if (!lastKey || _.last(searchInput.split('')) === ' ') {\n updatedItem.droplab_hidden = false;\n } else if (lastKey) {\n const split = lastKey.split(':');\n const tokenName = _.last(split[0].split(' '));\n\n const match = updatedItem.hint.indexOf(tokenName.toLowerCase()) === -1;\n updatedItem.droplab_hidden = tokenName ? match : false;\n }\n\n return updatedItem;\n }\n\n static setDataValueIfSelected(filter, selected) {\n const dataValue = selected.getAttribute('data-value');\n\n if (dataValue) {\n FilteredSearchDropdownManager.addWordToInput(filter, dataValue, true);\n }\n\n // Return boolean based on whether it was set\n return dataValue !== null;\n }\n\n static getVisualTokenValues(visualToken) {\n const tokenName = visualToken && visualToken.querySelector('.name').textContent.trim();\n let tokenValue = visualToken && visualToken.querySelector('.value') && visualToken.querySelector('.value').textContent.trim();\n if (tokenName === 'label' && tokenValue) {\n // remove leading symbol and wrapping quotes\n tokenValue = tokenValue.replace(/^~(\"|')?(.*)/, '$2').replace(/(\"|')$/, '');\n }\n return { tokenName, tokenValue };\n }\n\n // Determines the full search query (visual tokens + input)\n static getSearchQuery(untilInput = false) {\n const container = FilteredSearchContainer.container;\n const tokens = [].slice.call(container.querySelectorAll('.tokens-container li'));\n const values = [];\n\n if (untilInput) {\n const inputIndex = _.findIndex(tokens, t => t.classList.contains('input-token'));\n // Add one to include input-token to the tokens array\n tokens.splice(inputIndex + 1);\n }\n\n tokens.forEach((token) => {\n if (token.classList.contains('js-visual-token')) {\n const name = token.querySelector('.name');\n const value = token.querySelector('.value');\n const valueContainer = token.querySelector('.value-container');\n const symbol = value && value.dataset.symbol ? value.dataset.symbol : '';\n let valueText = '';\n\n if (valueContainer && valueContainer.dataset.originalValue) {\n valueText = valueContainer.dataset.originalValue;\n } else if (value && value.innerText) {\n valueText = value.innerText;\n }\n\n if (token.className.indexOf('filtered-search-token') !== -1) {\n values.push(`${name.innerText.toLowerCase()}:${symbol}${valueText}`);\n } else {\n values.push(name.innerText);\n }\n } else if (token.classList.contains('input-token')) {\n const { isLastVisualTokenValid } =\n FilteredSearchVisualTokens.getLastVisualTokenBeforeInput();\n\n const input = FilteredSearchContainer.container.querySelector('.filtered-search');\n const inputValue = input && input.value;\n\n if (isLastVisualTokenValid) {\n values.push(inputValue);\n } else {\n const previous = values.pop();\n values.push(`${previous}${inputValue}`);\n }\n }\n });\n\n return values\n .map(value => value.trim())\n .join(' ');\n }\n\n static getSearchInput(filteredSearchInput) {\n const inputValue = filteredSearchInput.value;\n const { right } = DropdownUtils.getInputSelectionPosition(filteredSearchInput);\n\n return inputValue.slice(0, right);\n }\n\n static getInputSelectionPosition(input) {\n const selectionStart = input.selectionStart;\n let inputValue = input.value;\n // Replace all spaces inside quote marks with underscores\n // (will continue to match entire string until an end quote is found if any)\n // This helps with matching the beginning & end of a token:key\n inputValue = inputValue.replace(/(('[^']*'{0,1})|(\"[^\"]*\"{0,1})|:\\s+)/g, str => str.replace(/\\s/g, '_'));\n\n // Get the right position for the word selected\n // Regex matches first space\n let right = inputValue.slice(selectionStart).search(/\\s/);\n\n if (right >= 0) {\n right += selectionStart;\n } else if (right < 0) {\n right = inputValue.length;\n }\n\n // Get the left position for the word selected\n // Regex matches last non-whitespace character\n let left = inputValue.slice(0, right).search(/\\S+$/);\n\n if (selectionStart === 0) {\n left = 0;\n } else if (selectionStart === inputValue.length && left < 0) {\n left = inputValue.length;\n } else if (left < 0) {\n left = selectionStart;\n }\n\n return {\n left,\n right,\n };\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./filtered_search/dropdown_utils.js","/* eslint-disable */\n\nconst Filter = {\n keydown: function(e){\n if (this.destroyed) return;\n\n var hiddenCount = 0;\n var dataHiddenCount = 0;\n\n var list = e.detail.hook.list;\n var data = list.data;\n var value = e.detail.hook.trigger.value.toLowerCase();\n var config = e.detail.hook.config.Filter;\n var matches = [];\n var filterFunction;\n // will only work on dynamically set data\n if(!data){\n return;\n }\n\n if (config && config.filterFunction && typeof config.filterFunction === 'function') {\n filterFunction = config.filterFunction;\n } else {\n filterFunction = function(o){\n // cheap string search\n o.droplab_hidden = o[config.template].toLowerCase().indexOf(value) === -1;\n return o;\n };\n }\n\n dataHiddenCount = data.filter(function(o) {\n return !o.droplab_hidden;\n }).length;\n\n matches = data.map(function(o) {\n return filterFunction(o, value);\n });\n\n hiddenCount = matches.filter(function(o) {\n return !o.droplab_hidden;\n }).length;\n\n if (dataHiddenCount !== hiddenCount) {\n list.setData(matches);\n list.currentIndex = 0;\n }\n },\n\n debounceKeydown: function debounceKeydown(e) {\n if ([\n 13, // enter\n 16, // shift\n 17, // ctrl\n 18, // alt\n 20, // caps lock\n 37, // left arrow\n 38, // up arrow\n 39, // right arrow\n 40, // down arrow\n 91, // left window\n 92, // right window\n 93, // select\n ].indexOf(e.detail.which || e.detail.keyCode) > -1) return;\n\n if (this.timeout) clearTimeout(this.timeout);\n this.timeout = setTimeout(this.keydown.bind(this, e), 200);\n },\n\n init: function init(hook) {\n var config = hook.config.Filter;\n\n if (!config || !config.template) return;\n\n this.hook = hook;\n this.destroyed = false;\n\n this.eventWrapper = {};\n this.eventWrapper.debounceKeydown = this.debounceKeydown.bind(this);\n\n this.hook.trigger.addEventListener('keydown.dl', this.eventWrapper.debounceKeydown);\n this.hook.trigger.addEventListener('mousedown.dl', this.eventWrapper.debounceKeydown);\n },\n\n destroy: function destroy() {\n if (this.timeout) clearTimeout(this.timeout);\n this.destroyed = true;\n\n this.hook.trigger.removeEventListener('keydown.dl', this.eventWrapper.debounceKeydown);\n this.hook.trigger.removeEventListener('mousedown.dl', this.eventWrapper.debounceKeydown);\n }\n};\n\nexport default Filter;\n\n\n\n// WEBPACK FOOTER //\n// ./droplab/plugins/filter.js","import DropdownUtils from './dropdown_utils';\nimport FilteredSearchDropdownManager from './filtered_search_dropdown_manager';\n\nconst DATA_DROPDOWN_TRIGGER = 'data-dropdown-trigger';\n\nexport default class FilteredSearchDropdown {\n constructor({ droplab, dropdown, input, filter }) {\n this.droplab = droplab;\n this.hookId = input && input.id;\n this.input = input;\n this.filter = filter;\n this.dropdown = dropdown;\n this.loadingTemplate = `
      \n \n
      `;\n this.bindEvents();\n }\n\n bindEvents() {\n this.itemClickedWrapper = this.itemClicked.bind(this);\n this.dropdown.addEventListener('click.dl', this.itemClickedWrapper);\n }\n\n unbindEvents() {\n this.dropdown.removeEventListener('click.dl', this.itemClickedWrapper);\n }\n\n getCurrentHook() {\n return this.droplab.hooks.filter(h => h.id === this.hookId)[0] || null;\n }\n\n itemClicked(e, getValueFunction) {\n const { selected } = e.detail;\n\n if (selected.tagName === 'LI' && selected.innerHTML) {\n const dataValueSet = DropdownUtils.setDataValueIfSelected(this.filter, selected);\n\n if (!dataValueSet) {\n const value = getValueFunction(selected);\n FilteredSearchDropdownManager.addWordToInput(this.filter, value, true);\n }\n\n this.resetFilters();\n this.dismissDropdown();\n this.dispatchInputEvent();\n }\n }\n\n setAsDropdown() {\n this.input.setAttribute(DATA_DROPDOWN_TRIGGER, `#${this.dropdown.id}`);\n }\n\n setOffset(offset = 0) {\n if (window.innerWidth > 480) {\n this.dropdown.style.left = `${offset}px`;\n } else {\n this.dropdown.style.left = '0px';\n }\n }\n\n renderContent(forceShowList = false) {\n const currentHook = this.getCurrentHook();\n if (forceShowList && currentHook && currentHook.list.hidden) {\n currentHook.list.show();\n }\n }\n\n render(forceRenderContent = false, forceShowList = false) {\n this.setAsDropdown();\n\n const currentHook = this.getCurrentHook();\n const firstTimeInitialized = currentHook === null;\n\n if (firstTimeInitialized || forceRenderContent) {\n this.renderContent(forceShowList);\n } else if (currentHook.list.list.id !== this.dropdown.id) {\n this.renderContent(forceShowList);\n }\n }\n\n dismissDropdown() {\n // Focusing on the input will dismiss dropdown\n // (default droplab functionality)\n this.input.focus();\n }\n\n dispatchInputEvent() {\n // Propogate input change to FilteredSearchDropdownManager\n // so that it can determine which dropdowns to open\n this.input.dispatchEvent(new CustomEvent('input', {\n bubbles: true,\n cancelable: true,\n }));\n }\n\n dispatchFormSubmitEvent() {\n // dispatchEvent() is necessary as form.submit() does not\n // trigger event handlers\n this.input.form.dispatchEvent(new Event('submit'));\n }\n\n hideDropdown() {\n const currentHook = this.getCurrentHook();\n if (currentHook) {\n currentHook.list.hide();\n }\n }\n\n resetFilters() {\n const hook = this.getCurrentHook();\n\n if (hook) {\n const data = hook.list.data || [];\n\n if (!data) return;\n\n const results = data.map((o) => {\n const updated = o;\n updated.droplab_hidden = false;\n return updated;\n });\n hook.list.render(results);\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./filtered_search/filtered_search_dropdown.js","import Filter from '~/droplab/plugins/filter';\nimport FilteredSearchDropdown from './filtered_search_dropdown';\nimport DropdownUtils from './dropdown_utils';\nimport FilteredSearchDropdownManager from './filtered_search_dropdown_manager';\nimport FilteredSearchVisualTokens from './filtered_search_visual_tokens';\n\nexport default class DropdownHint extends FilteredSearchDropdown {\n constructor(options = {}) {\n const { input, tokenKeys } = options;\n super(options);\n this.config = {\n Filter: {\n template: 'hint',\n filterFunction: DropdownUtils.filterHint.bind(null, {\n input,\n allowedKeys: tokenKeys.getKeys(),\n }),\n },\n };\n this.tokenKeys = tokenKeys;\n }\n\n itemClicked(e) {\n const { selected } = e.detail;\n\n if (selected.tagName === 'LI') {\n if (selected.hasAttribute('data-value')) {\n this.dismissDropdown();\n } else if (selected.getAttribute('data-action') === 'submit') {\n this.dismissDropdown();\n this.dispatchFormSubmitEvent();\n } else {\n const token = selected.querySelector('.js-filter-hint').innerText.trim();\n const tag = selected.querySelector('.js-filter-tag').innerText.trim();\n\n if (tag.length) {\n // Get previous input values in the input field and convert them into visual tokens\n const previousInputValues = this.input.value.split(' ');\n const searchTerms = [];\n\n previousInputValues.forEach((value, index) => {\n searchTerms.push(value);\n\n if (index === previousInputValues.length - 1\n && token.indexOf(value.toLowerCase()) !== -1) {\n searchTerms.pop();\n }\n });\n\n if (searchTerms.length > 0) {\n FilteredSearchVisualTokens.addSearchVisualToken(searchTerms.join(' '));\n }\n\n FilteredSearchDropdownManager.addWordToInput(token.replace(':', ''), '', false, this.container);\n }\n this.dismissDropdown();\n this.dispatchInputEvent();\n }\n }\n }\n\n renderContent() {\n const dropdownData = this.tokenKeys.get()\n .map(tokenKey => ({\n icon: `fa-${tokenKey.icon}`,\n hint: tokenKey.key,\n tag: `:${tokenKey.tag}`,\n type: tokenKey.type,\n }));\n\n this.droplab.changeHookList(this.hookId, this.dropdown, [Filter], this.config);\n this.droplab.setData(this.hookId, dropdownData);\n }\n\n init() {\n this.droplab.addHook(this.input, this.dropdown, [Filter], this.config).init();\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./filtered_search/dropdown_hint.js","/* eslint-disable */\n\nimport AjaxCache from '~/lib/utils/ajax_cache';\n\nconst Ajax = {\n _loadData: function _loadData(data, config, self) {\n if (config.loadingTemplate) {\n var dataLoadingTemplate = self.hook.list.list.querySelector('[data-loading-template]');\n if (dataLoadingTemplate) dataLoadingTemplate.outerHTML = self.listTemplate;\n }\n\n if (!self.destroyed) self.hook.list[config.method].call(self.hook.list, data);\n },\n preprocessing: function preprocessing(config, data) {\n let results = data;\n\n if (config.preprocessing && !data.preprocessed) {\n results = config.preprocessing(data);\n AjaxCache.override(config.endpoint, results);\n }\n\n return results;\n },\n init: function init(hook) {\n var self = this;\n self.destroyed = false;\n var config = hook.config.Ajax;\n this.hook = hook;\n if (!config || !config.endpoint || !config.method) {\n return;\n }\n if (config.method !== 'setData' && config.method !== 'addData') {\n return;\n }\n if (config.loadingTemplate) {\n var dynamicList = hook.list.list.querySelector('[data-dynamic]');\n var loadingTemplate = document.createElement('div');\n loadingTemplate.innerHTML = config.loadingTemplate;\n loadingTemplate.setAttribute('data-loading-template', '');\n this.listTemplate = dynamicList.outerHTML;\n dynamicList.outerHTML = loadingTemplate.outerHTML;\n }\n\n return AjaxCache.retrieve(config.endpoint)\n .then(self.preprocessing.bind(null, config))\n .then((data) => self._loadData(data, config, self))\n .catch(config.onError);\n },\n destroy: function() {\n this.destroyed = true;\n }\n};\n\nexport default Ajax;\n\n\n\n// WEBPACK FOOTER //\n// ./droplab/plugins/ajax.js","import Flash from '../flash';\nimport Ajax from '../droplab/plugins/ajax';\nimport Filter from '../droplab/plugins/filter';\nimport FilteredSearchDropdown from './filtered_search_dropdown';\nimport DropdownUtils from './dropdown_utils';\n\nexport default class DropdownEmoji extends FilteredSearchDropdown {\n constructor(options = {}) {\n super(options);\n this.config = {\n Ajax: {\n endpoint: `${gon.relative_url_root || ''}/autocomplete/award_emojis`,\n method: 'setData',\n loadingTemplate: this.loadingTemplate,\n onError() {\n /* eslint-disable no-new */\n new Flash('An error occurred fetching the dropdown data.');\n /* eslint-enable no-new */\n },\n },\n Filter: {\n template: 'name',\n },\n };\n\n import(/* webpackChunkName: 'emoji' */ '~/emoji')\n .then(({ glEmojiTag }) => { this.glEmojiTag = glEmojiTag; })\n .catch(() => { /* ignore error and leave emoji name in the search bar */ });\n\n this.unbindEvents();\n this.bindEvents();\n }\n\n bindEvents() {\n super.bindEvents();\n\n this.listRenderedWrapper = this.listRendered.bind(this);\n this.dropdown.addEventListener('render.dl', this.listRenderedWrapper);\n }\n\n unbindEvents() {\n this.dropdown.removeEventListener('render.dl', this.listRenderedWrapper);\n super.unbindEvents();\n }\n\n listRendered() {\n this.replaceEmojiElement();\n }\n\n itemClicked(e) {\n super.itemClicked(e, (selected) => {\n const name = selected.querySelector('.js-data-value').innerText.trim();\n return DropdownUtils.getEscapedText(name);\n });\n }\n\n renderContent(forceShowList = false) {\n this.droplab.changeHookList(this.hookId, this.dropdown, [Ajax, Filter], this.config);\n super.renderContent(forceShowList);\n }\n\n replaceEmojiElement() {\n if (!this.glEmojiTag) return;\n\n // Replace empty gl-emoji tag to real content\n const dropdownItems = [...this.dropdown.querySelectorAll('.filter-dropdown-item')];\n dropdownItems.forEach((dropdownItem) => {\n const name = dropdownItem.querySelector('.js-data-value').innerText;\n const emojiTag = this.glEmojiTag(name);\n const emojiElement = dropdownItem.querySelector('gl-emoji');\n emojiElement.outerHTML = emojiTag;\n });\n }\n\n init() {\n this.droplab\n .addHook(this.input, this.dropdown, [Ajax, Filter], this.config).init();\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./filtered_search/dropdown_emoji.js","import Flash from '../flash';\nimport Ajax from '../droplab/plugins/ajax';\nimport Filter from '../droplab/plugins/filter';\nimport FilteredSearchDropdown from './filtered_search_dropdown';\nimport DropdownUtils from './dropdown_utils';\n\nexport default class DropdownNonUser extends FilteredSearchDropdown {\n constructor(options = {}) {\n const { input, endpoint, symbol, preprocessing } = options;\n super(options);\n this.symbol = symbol;\n this.config = {\n Ajax: {\n endpoint,\n method: 'setData',\n loadingTemplate: this.loadingTemplate,\n preprocessing,\n onError() {\n /* eslint-disable no-new */\n new Flash('An error occurred fetching the dropdown data.');\n /* eslint-enable no-new */\n },\n },\n Filter: {\n filterFunction: DropdownUtils.filterWithSymbol.bind(null, this.symbol, input),\n template: 'title',\n },\n };\n }\n\n itemClicked(e) {\n super.itemClicked(e, (selected) => {\n const title = selected.querySelector('.js-data-value').innerText.trim();\n return `${this.symbol}${DropdownUtils.getEscapedText(title)}`;\n });\n }\n\n renderContent(forceShowList = false) {\n this.droplab\n .changeHookList(this.hookId, this.dropdown, [Ajax, Filter], this.config);\n super.renderContent(forceShowList);\n }\n\n init() {\n this.droplab\n .addHook(this.input, this.dropdown, [Ajax, Filter], this.config).init();\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./filtered_search/dropdown_non_user.js","/* eslint-disable */\nimport AjaxCache from '../../lib/utils/ajax_cache';\n\nconst AjaxFilter = {\n init: function(hook) {\n this.destroyed = false;\n this.hook = hook;\n this.notLoading();\n\n this.eventWrapper = {};\n this.eventWrapper.debounceTrigger = this.debounceTrigger.bind(this);\n this.hook.trigger.addEventListener('keydown.dl', this.eventWrapper.debounceTrigger);\n this.hook.trigger.addEventListener('focus', this.eventWrapper.debounceTrigger);\n\n this.trigger(true);\n },\n\n notLoading: function notLoading() {\n this.loading = false;\n },\n\n debounceTrigger: function debounceTrigger(e) {\n var NON_CHARACTER_KEYS = [16, 17, 18, 20, 37, 38, 39, 40, 91, 93];\n var invalidKeyPressed = NON_CHARACTER_KEYS.indexOf(e.detail.which || e.detail.keyCode) > -1;\n var focusEvent = e.type === 'focus';\n if (invalidKeyPressed || this.loading) {\n return;\n }\n if (this.timeout) {\n clearTimeout(this.timeout);\n }\n this.timeout = setTimeout(this.trigger.bind(this, focusEvent), 200);\n },\n\n trigger: function trigger(getEntireList) {\n var config = this.hook.config.AjaxFilter;\n var searchValue = this.trigger.value;\n if (!config || !config.endpoint || !config.searchKey) {\n return;\n }\n if (config.searchValueFunction) {\n searchValue = config.searchValueFunction();\n }\n if (config.loadingTemplate && this.hook.list.data === undefined ||\n this.hook.list.data.length === 0) {\n var dynamicList = this.hook.list.list.querySelector('[data-dynamic]');\n var loadingTemplate = document.createElement('div');\n loadingTemplate.innerHTML = config.loadingTemplate;\n loadingTemplate.setAttribute('data-loading-template', true);\n this.listTemplate = dynamicList.outerHTML;\n dynamicList.outerHTML = loadingTemplate.outerHTML;\n }\n if (getEntireList) {\n searchValue = '';\n }\n if (config.searchKey === searchValue) {\n return this.list.show();\n }\n this.loading = true;\n var params = config.params || {};\n params[config.searchKey] = searchValue;\n var url = config.endpoint + this.buildParams(params);\n return AjaxCache.retrieve(url)\n .then((data) => {\n this._loadData(data, config);\n if (config.onLoadingFinished) {\n config.onLoadingFinished(data);\n }\n })\n .catch(config.onError);\n },\n\n _loadData(data, config) {\n const list = this.hook.list;\n if (config.loadingTemplate && list.data === undefined ||\n list.data.length === 0) {\n const dataLoadingTemplate = list.list.querySelector('[data-loading-template]');\n if (dataLoadingTemplate) {\n dataLoadingTemplate.outerHTML = this.listTemplate;\n }\n }\n if (!this.destroyed) {\n var hookListChildren = list.list.children;\n var onlyDynamicList = hookListChildren.length === 1 && hookListChildren[0].hasAttribute('data-dynamic');\n if (onlyDynamicList && data.length === 0) {\n list.hide();\n }\n list.setData.call(list, data);\n }\n this.notLoading();\n list.currentIndex = 0;\n },\n\n buildParams: function(params) {\n if (!params) return '';\n var paramsArray = Object.keys(params).map(function(param) {\n return param + '=' + (params[param] || '');\n });\n return '?' + paramsArray.join('&');\n },\n\n destroy: function destroy() {\n if (this.timeout)clearTimeout(this.timeout);\n this.destroyed = true;\n\n this.hook.trigger.removeEventListener('keydown.dl', this.eventWrapper.debounceTrigger);\n this.hook.trigger.removeEventListener('focus', this.eventWrapper.debounceTrigger);\n }\n};\n\nexport default AjaxFilter;\n\n\n\n// WEBPACK FOOTER //\n// ./droplab/plugins/ajax_filter.js","import Flash from '../flash';\nimport AjaxFilter from '../droplab/plugins/ajax_filter';\nimport FilteredSearchDropdown from './filtered_search_dropdown';\nimport { addClassIfElementExists } from '../lib/utils/dom_utils';\nimport DropdownUtils from './dropdown_utils';\nimport FilteredSearchTokenizer from './filtered_search_tokenizer';\n\nexport default class DropdownUser extends FilteredSearchDropdown {\n constructor(options = {}) {\n const { tokenKeys } = options;\n super(options);\n this.config = {\n AjaxFilter: {\n endpoint: `${gon.relative_url_root || ''}/autocomplete/users.json`,\n searchKey: 'search',\n params: {\n active: true,\n group_id: this.getGroupId(),\n project_id: this.getProjectId(),\n current_user: true,\n },\n searchValueFunction: this.getSearchInput.bind(this),\n loadingTemplate: this.loadingTemplate,\n onLoadingFinished: () => {\n this.hideCurrentUser();\n },\n onError() {\n /* eslint-disable no-new */\n new Flash('An error occurred fetching the dropdown data.');\n /* eslint-enable no-new */\n },\n },\n };\n this.tokenKeys = tokenKeys;\n }\n\n hideCurrentUser() {\n addClassIfElementExists(this.dropdown.querySelector('.js-current-user'), 'hidden');\n }\n\n itemClicked(e) {\n super.itemClicked(e,\n selected => selected.querySelector('.dropdown-light-content').innerText.trim());\n }\n\n renderContent(forceShowList = false) {\n this.droplab.changeHookList(this.hookId, this.dropdown, [AjaxFilter], this.config);\n super.renderContent(forceShowList);\n }\n\n getGroupId() {\n return this.input.getAttribute('data-group-id');\n }\n\n getProjectId() {\n return this.input.getAttribute('data-project-id');\n }\n\n getSearchInput() {\n const query = DropdownUtils.getSearchInput(this.input);\n const { lastToken } = FilteredSearchTokenizer.processTokens(query, this.tokenKeys.get());\n\n let value = lastToken || '';\n\n if (value[0] === '@') {\n value = value.slice(1);\n }\n\n // Removes the first character if it is a quotation so that we can search\n // with multiple words\n if (value[0] === '\"' || value[0] === '\\'') {\n value = value.slice(1);\n }\n\n return value;\n }\n\n init() {\n this.droplab.addHook(this.input, this.dropdown, [AjaxFilter], this.config).init();\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./filtered_search/dropdown_user.js","import _ from 'underscore';\nimport DropLab from '~/droplab/drop_lab';\nimport FilteredSearchContainer from './container';\nimport FilteredSearchTokenKeys from './filtered_search_token_keys';\nimport DropdownUtils from './dropdown_utils';\nimport DropdownHint from './dropdown_hint';\nimport DropdownEmoji from './dropdown_emoji';\nimport DropdownNonUser from './dropdown_non_user';\nimport DropdownUser from './dropdown_user';\nimport FilteredSearchVisualTokens from './filtered_search_visual_tokens';\n\nexport default class FilteredSearchDropdownManager {\n constructor({\n baseEndpoint = '',\n tokenizer,\n page,\n isGroup,\n isGroupAncestor,\n isGroupDecendent,\n filteredSearchTokenKeys,\n }) {\n this.container = FilteredSearchContainer.container;\n this.baseEndpoint = baseEndpoint.replace(/\\/$/, '');\n this.tokenizer = tokenizer;\n this.filteredSearchTokenKeys = filteredSearchTokenKeys || FilteredSearchTokenKeys;\n this.filteredSearchInput = this.container.querySelector('.filtered-search');\n this.page = page;\n this.groupsOnly = isGroup;\n this.groupAncestor = isGroupAncestor;\n this.isGroupDecendent = isGroupDecendent;\n\n this.setupMapping();\n\n this.cleanupWrapper = this.cleanup.bind(this);\n document.addEventListener('beforeunload', this.cleanupWrapper);\n }\n\n cleanup() {\n if (this.droplab) {\n this.droplab.destroy();\n this.droplab = null;\n }\n\n this.setupMapping();\n\n document.removeEventListener('beforeunload', this.cleanupWrapper);\n }\n\n setupMapping() {\n const supportedTokens = this.filteredSearchTokenKeys.getKeys();\n const allowedMappings = {\n hint: {\n reference: null,\n gl: DropdownHint,\n element: this.container.querySelector('#js-dropdown-hint'),\n },\n };\n const availableMappings = {\n author: {\n reference: null,\n gl: DropdownUser,\n element: this.container.querySelector('#js-dropdown-author'),\n },\n assignee: {\n reference: null,\n gl: DropdownUser,\n element: this.container.querySelector('#js-dropdown-assignee'),\n },\n milestone: {\n reference: null,\n gl: DropdownNonUser,\n extraArguments: {\n endpoint: this.getMilestoneEndpoint(),\n symbol: '%',\n },\n element: this.container.querySelector('#js-dropdown-milestone'),\n },\n label: {\n reference: null,\n gl: DropdownNonUser,\n extraArguments: {\n endpoint: this.getLabelsEndpoint(),\n symbol: '~',\n preprocessing: DropdownUtils.duplicateLabelPreprocessing,\n },\n element: this.container.querySelector('#js-dropdown-label'),\n },\n 'my-reaction': {\n reference: null,\n gl: DropdownEmoji,\n element: this.container.querySelector('#js-dropdown-my-reaction'),\n },\n };\n\n supportedTokens.forEach((type) => {\n if (availableMappings[type]) {\n allowedMappings[type] = availableMappings[type];\n }\n });\n\n this.mapping = allowedMappings;\n }\n\n getMilestoneEndpoint() {\n const endpoint = `${this.baseEndpoint}/milestones.json`;\n\n return endpoint;\n }\n\n getLabelsEndpoint() {\n const endpoint = `${this.baseEndpoint}/labels.json`;\n\n return endpoint;\n }\n\n static addWordToInput(tokenName, tokenValue = '', clicked = false) {\n const input = FilteredSearchContainer.container.querySelector('.filtered-search');\n\n FilteredSearchVisualTokens.addFilterVisualToken(tokenName, tokenValue);\n input.value = '';\n\n if (clicked) {\n FilteredSearchVisualTokens.moveInputToTheRight();\n }\n }\n\n updateCurrentDropdownOffset() {\n this.updateDropdownOffset(this.currentDropdown);\n }\n\n updateDropdownOffset(key) {\n // Always align dropdown with the input field\n let offset = this.filteredSearchInput.getBoundingClientRect().left - this.container.querySelector('.scroll-container').getBoundingClientRect().left;\n\n const maxInputWidth = 240;\n const currentDropdownWidth = this.mapping[key].element.clientWidth || maxInputWidth;\n\n // Make sure offset never exceeds the input container\n const offsetMaxWidth = this.container.querySelector('.scroll-container').clientWidth - currentDropdownWidth;\n if (offsetMaxWidth < offset) {\n offset = offsetMaxWidth;\n }\n\n this.mapping[key].reference.setOffset(offset);\n }\n\n load(key, firstLoad = false) {\n const mappingKey = this.mapping[key];\n const glClass = mappingKey.gl;\n const element = mappingKey.element;\n let forceShowList = false;\n\n if (!mappingKey.reference) {\n const defaultArguments = {\n droplab: this.droplab,\n dropdown: element,\n input: this.filteredSearchInput,\n tokenKeys: this.filteredSearchTokenKeys,\n filter: key,\n };\n const extraArguments = mappingKey.extraArguments || {};\n const glArguments = Object.assign({}, defaultArguments, extraArguments);\n\n // Passing glArguments to `new glClass()`\n mappingKey.reference =\n new (Function.prototype.bind.apply(glClass, [null, glArguments]))();\n }\n\n if (firstLoad) {\n mappingKey.reference.init();\n }\n\n if (this.currentDropdown === 'hint') {\n // Force the dropdown to show if it was clicked from the hint dropdown\n forceShowList = true;\n }\n\n this.updateDropdownOffset(key);\n mappingKey.reference.render(firstLoad, forceShowList);\n\n this.currentDropdown = key;\n }\n\n loadDropdown(dropdownName = '') {\n let firstLoad = false;\n\n if (!this.droplab) {\n firstLoad = true;\n this.droplab = new DropLab();\n }\n\n const match = this.filteredSearchTokenKeys.searchByKey(dropdownName.toLowerCase());\n const shouldOpenFilterDropdown = match && this.currentDropdown !== match.key\n && this.mapping[match.key];\n const shouldOpenHintDropdown = !match && this.currentDropdown !== 'hint';\n\n if (shouldOpenFilterDropdown || shouldOpenHintDropdown) {\n const key = match && match.key ? match.key : 'hint';\n this.load(key, firstLoad);\n }\n }\n\n setDropdown() {\n const query = DropdownUtils.getSearchQuery(true);\n const { lastToken, searchToken } =\n this.tokenizer.processTokens(query, this.filteredSearchTokenKeys.getKeys());\n\n if (this.currentDropdown) {\n this.updateCurrentDropdownOffset();\n }\n\n if (lastToken === searchToken && lastToken !== null) {\n // Token is not fully initialized yet because it has no value\n // Eg. token = 'label:'\n\n const split = lastToken.split(':');\n const dropdownName = _.last(split[0].split(' '));\n this.loadDropdown(split.length > 1 ? dropdownName : '');\n } else if (lastToken) {\n // Token has been initialized into an object because it has a value\n this.loadDropdown(lastToken.key);\n } else {\n this.loadDropdown('hint');\n }\n }\n\n resetDropdowns() {\n if (!this.currentDropdown) {\n return;\n }\n\n // Force current dropdown to hide\n this.mapping[this.currentDropdown].reference.hideDropdown();\n\n // Re-Load dropdown\n this.setDropdown();\n\n // Reset filters for current dropdown\n this.mapping[this.currentDropdown].reference.resetFilters();\n\n // Reposition dropdown so that it is aligned with cursor\n this.updateDropdownOffset(this.currentDropdown);\n }\n\n destroyDroplab() {\n this.droplab.destroy();\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./filtered_search/filtered_search_dropdown_manager.js","const tokenKeys = [{\n key: 'author',\n type: 'string',\n param: 'username',\n symbol: '@',\n icon: 'pencil',\n tag: '@author',\n}, {\n key: 'assignee',\n type: 'string',\n param: 'username',\n symbol: '@',\n icon: 'user',\n tag: '@assignee',\n}, {\n key: 'milestone',\n type: 'string',\n param: 'title',\n symbol: '%',\n icon: 'clock-o',\n tag: '%milestone',\n}, {\n key: 'label',\n type: 'array',\n param: 'name[]',\n symbol: '~',\n icon: 'tag',\n tag: '~label',\n}];\n\nif (gon.current_user_id) {\n // Appending tokenkeys only logged-in\n tokenKeys.push({\n key: 'my-reaction',\n type: 'string',\n param: 'emoji',\n symbol: '',\n icon: 'thumbs-up',\n tag: 'emoji',\n });\n}\n\nconst alternativeTokenKeys = [{\n key: 'label',\n type: 'string',\n param: 'name',\n symbol: '~',\n}];\n\nconst tokenKeysWithAlternative = tokenKeys.concat(alternativeTokenKeys);\n\nconst conditions = [{\n url: 'assignee_id=0',\n tokenKey: 'assignee',\n value: 'none',\n}, {\n url: 'milestone_title=No+Milestone',\n tokenKey: 'milestone',\n value: 'none',\n}, {\n url: 'milestone_title=%23upcoming',\n tokenKey: 'milestone',\n value: 'upcoming',\n}, {\n url: 'milestone_title=%23started',\n tokenKey: 'milestone',\n value: 'started',\n}, {\n url: 'label_name[]=No+Label',\n tokenKey: 'label',\n value: 'none',\n}];\n\nexport default class FilteredSearchTokenKeys {\n static get() {\n return tokenKeys;\n }\n\n static getKeys() {\n return tokenKeys.map(i => i.key);\n }\n\n static getAlternatives() {\n return alternativeTokenKeys;\n }\n\n static getConditions() {\n return conditions;\n }\n\n static searchByKey(key) {\n return tokenKeys.find(tokenKey => tokenKey.key === key) || null;\n }\n\n static searchBySymbol(symbol) {\n return tokenKeys.find(tokenKey => tokenKey.symbol === symbol) || null;\n }\n\n static searchByKeyParam(keyParam) {\n return tokenKeysWithAlternative.find((tokenKey) => {\n let tokenKeyParam = tokenKey.key;\n\n // Replace hyphen with underscore to compare keyParam with tokenKeyParam\n // e.g. 'my-reaction' => 'my_reaction'\n tokenKeyParam = tokenKeyParam.replace('-', '_');\n\n if (tokenKey.param) {\n tokenKeyParam += `_${tokenKey.param}`;\n }\n\n return keyParam === tokenKeyParam;\n }) || null;\n }\n\n static searchByConditionUrl(url) {\n return conditions.find(condition => condition.url === url) || null;\n }\n\n static searchByConditionKeyValue(key, value) {\n return conditions\n .find(condition => condition.tokenKey === key && condition.value === value) || null;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./filtered_search/filtered_search_token_keys.js","import './filtered_search_token_keys';\n\nexport default class FilteredSearchTokenizer {\n static processTokens(input, allowedKeys) {\n // Regex extracts `(token):(symbol)(value)`\n // Values that start with a double quote must end in a double quote (same for single)\n const tokenRegex = new RegExp(`(${allowedKeys.join('|')}):([~%@]?)(?:('[^']*'{0,1})|(\"[^\"]*\"{0,1})|(\\\\S+))`, 'g');\n const tokens = [];\n const tokenIndexes = []; // stores key+value for simple search\n let lastToken = null;\n const searchToken = input.replace(tokenRegex, (match, key, symbol, v1, v2, v3) => {\n let tokenValue = v1 || v2 || v3;\n let tokenSymbol = symbol;\n let tokenIndex = '';\n\n if (tokenValue === '~' || tokenValue === '%' || tokenValue === '@') {\n tokenSymbol = tokenValue;\n tokenValue = '';\n }\n\n tokenIndex = `${key}:${tokenValue}`;\n\n // Prevent adding duplicates\n if (tokenIndexes.indexOf(tokenIndex) === -1) {\n tokenIndexes.push(tokenIndex);\n\n tokens.push({\n key,\n value: tokenValue || '',\n symbol: tokenSymbol || '',\n });\n }\n\n return '';\n }).replace(/\\s{2,}/g, ' ').trim() || '';\n\n if (tokens.length > 0) {\n const last = tokens[tokens.length - 1];\n const lastString = `${last.key}:${last.symbol}${last.value}`;\n lastToken = input.lastIndexOf(lastString) ===\n input.length - lastString.length ? last : searchToken;\n } else {\n lastToken = searchToken;\n }\n\n return {\n tokens,\n lastToken,\n searchToken,\n };\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./filtered_search/filtered_search_tokenizer.js","import Api from '../../api';\nimport Cache from './cache';\n\nclass UsersCache extends Cache {\n retrieve(username) {\n if (this.hasData(username)) {\n return Promise.resolve(this.get(username));\n }\n\n return Api.users('', { username })\n .then(({ data }) => {\n if (!data.length) {\n throw new Error(`User \"${username}\" could not be found!`);\n }\n\n if (data.length > 1) {\n throw new Error(`Expected username \"${username}\" to be unique!`);\n }\n\n const user = data[0];\n this.internalStorage[username] = user;\n return user;\n });\n // missing catch is intentional, error handling depends on use case\n }\n}\n\nexport default new UsersCache();\n\n\n\n// WEBPACK FOOTER //\n// ./lib/utils/users_cache.js","import _ from 'underscore';\nimport AjaxCache from '~/lib/utils/ajax_cache';\nimport { objectToQueryString } from '~/lib/utils/common_utils';\nimport Flash from '../flash';\nimport FilteredSearchContainer from './container';\nimport UsersCache from '../lib/utils/users_cache';\nimport DropdownUtils from './dropdown_utils';\n\nexport default class FilteredSearchVisualTokens {\n static getLastVisualTokenBeforeInput() {\n const inputLi = FilteredSearchContainer.container.querySelector('.input-token');\n const lastVisualToken = inputLi && inputLi.previousElementSibling;\n\n return {\n lastVisualToken,\n isLastVisualTokenValid: lastVisualToken === null || lastVisualToken.className.indexOf('filtered-search-term') !== -1 || (lastVisualToken && lastVisualToken.querySelector('.value') !== null),\n };\n }\n\n /**\n * Returns a computed API endpoint\n * and query string composed of values from endpointQueryParams\n * @param {String} endpoint\n * @param {String} endpointQueryParams\n */\n static getEndpointWithQueryParams(endpoint, endpointQueryParams) {\n if (!endpointQueryParams) {\n return endpoint;\n }\n\n const queryString = objectToQueryString(JSON.parse(endpointQueryParams));\n return `${endpoint}?${queryString}`;\n }\n\n static unselectTokens() {\n const otherTokens = FilteredSearchContainer.container.querySelectorAll('.js-visual-token .selectable.selected');\n [].forEach.call(otherTokens, t => t.classList.remove('selected'));\n }\n\n static selectToken(tokenButton, forceSelection = false) {\n const selected = tokenButton.classList.contains('selected');\n FilteredSearchVisualTokens.unselectTokens();\n\n if (!selected || forceSelection) {\n tokenButton.classList.add('selected');\n }\n }\n\n static removeSelectedToken() {\n const selected = FilteredSearchContainer.container.querySelector('.js-visual-token .selected');\n\n if (selected) {\n const li = selected.closest('.js-visual-token');\n li.parentElement.removeChild(li);\n }\n }\n\n static createVisualTokenElementHTML(canEdit = true) {\n return `\n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n `;\n }\n\n static setTokenStyle(tokenContainer, backgroundColor, textColor) {\n const token = tokenContainer;\n\n // Labels with linear gradient should not override default background color\n if (backgroundColor.indexOf('linear-gradient') === -1) {\n token.style.backgroundColor = backgroundColor;\n }\n\n token.style.color = textColor;\n\n if (textColor === '#FFFFFF') {\n const removeToken = token.querySelector('.remove-token');\n removeToken.classList.add('inverted');\n }\n\n return token;\n }\n\n static preprocessLabel(labelsEndpoint, labels) {\n let processed = labels;\n\n if (!labels.preprocessed) {\n processed = DropdownUtils.duplicateLabelPreprocessing(labels);\n AjaxCache.override(labelsEndpoint, processed);\n processed.preprocessed = true;\n }\n\n return processed;\n }\n\n static updateLabelTokenColor(tokenValueContainer, tokenValue) {\n const filteredSearchInput = FilteredSearchContainer.container.querySelector('.filtered-search');\n const baseEndpoint = filteredSearchInput.dataset.baseEndpoint;\n const labelsEndpoint = FilteredSearchVisualTokens.getEndpointWithQueryParams(\n `${baseEndpoint}/labels.json`,\n filteredSearchInput.dataset.endpointQueryParams,\n );\n\n return AjaxCache.retrieve(labelsEndpoint)\n .then(FilteredSearchVisualTokens.preprocessLabel.bind(null, labelsEndpoint))\n .then((labels) => {\n const matchingLabel = (labels || []).find(label => `~${DropdownUtils.getEscapedText(label.title)}` === tokenValue);\n\n if (!matchingLabel) {\n return;\n }\n\n FilteredSearchVisualTokens\n .setTokenStyle(tokenValueContainer, matchingLabel.color, matchingLabel.text_color);\n })\n .catch(() => new Flash('An error occurred while fetching label colors.'));\n }\n\n static updateUserTokenAppearance(tokenValueContainer, tokenValueElement, tokenValue) {\n if (tokenValue === 'none') {\n return Promise.resolve();\n }\n\n const username = tokenValue.replace(/^@/, '');\n return UsersCache.retrieve(username)\n .then((user) => {\n if (!user) {\n return;\n }\n\n /* eslint-disable no-param-reassign */\n tokenValueContainer.dataset.originalValue = tokenValue;\n tokenValueElement.innerHTML = `\n \"\"\n ${_.escape(user.name)}\n `;\n /* eslint-enable no-param-reassign */\n })\n // ignore error and leave username in the search bar\n .catch(() => { });\n }\n\n static updateEmojiTokenAppearance(tokenValueContainer, tokenValueElement, tokenValue) {\n const container = tokenValueContainer;\n const element = tokenValueElement;\n\n return import(/* webpackChunkName: 'emoji' */ '../emoji')\n .then((Emoji) => {\n if (!Emoji.isEmojiNameValid(tokenValue)) {\n return;\n }\n\n container.dataset.originalValue = tokenValue;\n element.innerHTML = Emoji.glEmojiTag(tokenValue);\n })\n // ignore error and leave emoji name in the search bar\n .catch(() => { });\n }\n\n static renderVisualTokenValue(parentElement, tokenName, tokenValue) {\n const tokenValueContainer = parentElement.querySelector('.value-container');\n const tokenValueElement = tokenValueContainer.querySelector('.value');\n tokenValueElement.innerText = tokenValue;\n\n const tokenType = tokenName.toLowerCase();\n if (tokenType === 'label') {\n FilteredSearchVisualTokens.updateLabelTokenColor(tokenValueContainer, tokenValue);\n } else if ((tokenType === 'author') || (tokenType === 'assignee')) {\n FilteredSearchVisualTokens.updateUserTokenAppearance(\n tokenValueContainer, tokenValueElement, tokenValue,\n );\n } else if (tokenType === 'my-reaction') {\n FilteredSearchVisualTokens.updateEmojiTokenAppearance(\n tokenValueContainer, tokenValueElement, tokenValue,\n );\n }\n }\n\n static addVisualTokenElement(name, value, isSearchTerm, canEdit) {\n const li = document.createElement('li');\n li.classList.add('js-visual-token');\n li.classList.add(isSearchTerm ? 'filtered-search-term' : 'filtered-search-token');\n\n if (value) {\n li.innerHTML = FilteredSearchVisualTokens.createVisualTokenElementHTML(canEdit);\n FilteredSearchVisualTokens.renderVisualTokenValue(li, name, value);\n } else {\n li.innerHTML = '
      ';\n }\n li.querySelector('.name').innerText = name;\n\n const tokensContainer = FilteredSearchContainer.container.querySelector('.tokens-container');\n const input = FilteredSearchContainer.container.querySelector('.filtered-search');\n tokensContainer.insertBefore(li, input.parentElement);\n }\n\n static addValueToPreviousVisualTokenElement(value) {\n const { lastVisualToken, isLastVisualTokenValid } =\n FilteredSearchVisualTokens.getLastVisualTokenBeforeInput();\n\n if (!isLastVisualTokenValid && lastVisualToken.classList.contains('filtered-search-token')) {\n const name = FilteredSearchVisualTokens.getLastTokenPartial();\n lastVisualToken.innerHTML = FilteredSearchVisualTokens.createVisualTokenElementHTML();\n lastVisualToken.querySelector('.name').innerText = name;\n FilteredSearchVisualTokens.renderVisualTokenValue(lastVisualToken, name, value);\n }\n }\n\n static addFilterVisualToken(tokenName, tokenValue, canEdit) {\n const { lastVisualToken, isLastVisualTokenValid }\n = FilteredSearchVisualTokens.getLastVisualTokenBeforeInput();\n const addVisualTokenElement = FilteredSearchVisualTokens.addVisualTokenElement;\n\n if (isLastVisualTokenValid) {\n addVisualTokenElement(tokenName, tokenValue, false, canEdit);\n } else {\n const previousTokenName = lastVisualToken.querySelector('.name').innerText;\n const tokensContainer = FilteredSearchContainer.container.querySelector('.tokens-container');\n tokensContainer.removeChild(lastVisualToken);\n\n const value = tokenValue || tokenName;\n addVisualTokenElement(previousTokenName, value, false, canEdit);\n }\n }\n\n static addSearchVisualToken(searchTerm) {\n const { lastVisualToken } = FilteredSearchVisualTokens.getLastVisualTokenBeforeInput();\n\n if (lastVisualToken && lastVisualToken.classList.contains('filtered-search-term')) {\n lastVisualToken.querySelector('.name').innerText += ` ${searchTerm}`;\n } else {\n FilteredSearchVisualTokens.addVisualTokenElement(searchTerm, null, true);\n }\n }\n\n static getLastTokenPartial() {\n const { lastVisualToken } = FilteredSearchVisualTokens.getLastVisualTokenBeforeInput();\n\n if (!lastVisualToken) return '';\n\n const valueContainer = lastVisualToken.querySelector('.value-container');\n const originalValue = valueContainer && valueContainer.dataset.originalValue;\n if (originalValue) {\n return originalValue;\n }\n\n const value = lastVisualToken.querySelector('.value');\n const name = lastVisualToken.querySelector('.name');\n\n const valueText = value ? value.innerText : '';\n const nameText = name ? name.innerText : '';\n\n return valueText || nameText;\n }\n\n static removeLastTokenPartial() {\n const { lastVisualToken } = FilteredSearchVisualTokens.getLastVisualTokenBeforeInput();\n\n if (lastVisualToken) {\n const value = lastVisualToken.querySelector('.value');\n\n if (value) {\n const button = lastVisualToken.querySelector('.selectable');\n const valueContainer = lastVisualToken.querySelector('.value-container');\n button.removeChild(valueContainer);\n lastVisualToken.innerHTML = button.innerHTML;\n } else {\n lastVisualToken.closest('.tokens-container').removeChild(lastVisualToken);\n }\n }\n }\n\n static tokenizeInput() {\n const input = FilteredSearchContainer.container.querySelector('.filtered-search');\n const { isLastVisualTokenValid } =\n FilteredSearchVisualTokens.getLastVisualTokenBeforeInput();\n\n if (input.value) {\n if (isLastVisualTokenValid) {\n FilteredSearchVisualTokens.addSearchVisualToken(input.value);\n } else {\n FilteredSearchVisualTokens.addValueToPreviousVisualTokenElement(input.value);\n }\n\n input.value = '';\n }\n }\n\n static editToken(token) {\n const input = FilteredSearchContainer.container.querySelector('.filtered-search');\n\n FilteredSearchVisualTokens.tokenizeInput();\n\n // Replace token with input field\n const tokenContainer = token.parentElement;\n const inputLi = input.parentElement;\n tokenContainer.replaceChild(inputLi, token);\n\n const nameElement = token.querySelector('.name');\n let value;\n\n if (token.classList.contains('filtered-search-token')) {\n FilteredSearchVisualTokens.addFilterVisualToken(nameElement.innerText);\n\n const valueContainerElement = token.querySelector('.value-container');\n value = valueContainerElement.dataset.originalValue;\n\n if (!value) {\n const valueElement = valueContainerElement.querySelector('.value');\n value = valueElement.innerText;\n }\n }\n\n // token is a search term\n if (!value) {\n value = nameElement.innerText;\n }\n\n input.value = value;\n\n // Opens dropdown\n const inputEvent = new Event('input');\n input.dispatchEvent(inputEvent);\n\n // Adds cursor to input\n input.focus();\n }\n\n static moveInputToTheRight() {\n const input = FilteredSearchContainer.container.querySelector('.filtered-search');\n\n if (!input) return;\n\n const inputLi = input.parentElement;\n const tokenContainer = FilteredSearchContainer.container.querySelector('.tokens-container');\n\n FilteredSearchVisualTokens.tokenizeInput();\n\n if (!tokenContainer.lastElementChild.isEqualNode(inputLi)) {\n const { isLastVisualTokenValid } =\n FilteredSearchVisualTokens.getLastVisualTokenBeforeInput();\n\n if (!isLastVisualTokenValid) {\n const lastPartial = FilteredSearchVisualTokens.getLastTokenPartial();\n FilteredSearchVisualTokens.removeLastTokenPartial();\n FilteredSearchVisualTokens.addSearchVisualToken(lastPartial);\n }\n\n tokenContainer.removeChild(inputLi);\n tokenContainer.appendChild(inputLi);\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./filtered_search/filtered_search_visual_tokens.js","import _ from 'underscore';\n\nconst hideFlash = (flashEl, fadeTransition = true) => {\n if (fadeTransition) {\n Object.assign(flashEl.style, {\n transition: 'opacity .3s',\n opacity: '0',\n });\n }\n\n flashEl.addEventListener('transitionend', () => {\n flashEl.remove();\n if (document.body.classList.contains('flash-shown')) document.body.classList.remove('flash-shown');\n }, {\n once: true,\n passive: true,\n });\n\n if (!fadeTransition) flashEl.dispatchEvent(new Event('transitionend'));\n};\n\nconst createAction = config => `\n \n ${_.escape(config.title)}\n \n`;\n\nconst createFlashEl = (message, type, isInContentWrapper = false) => `\n \n \n ${_.escape(message)}\n \n \n`;\n\nconst removeFlashClickListener = (flashEl, fadeTransition) => {\n flashEl.addEventListener('click', () => hideFlash(flashEl, fadeTransition));\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 */\nconst createFlash = function createFlash(\n message,\n type = 'alert',\n parent = document,\n actionConfig = null,\n fadeTransition = true,\n addBodyClass = false,\n) {\n const flashContainer = parent.querySelector('.flash-container');\n\n if (!flashContainer) return null;\n\n const isInContentWrapper = flashContainer.parentNode.classList.contains('content-wrapper');\n\n flashContainer.innerHTML = createFlashEl(message, type, isInContentWrapper);\n\n const 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', e => actionConfig.clickHandler(e));\n }\n }\n\n flashContainer.style.display = 'block';\n\n if (addBodyClass) document.body.classList.add('flash-shown');\n\n return flashContainer;\n};\n\nexport {\n createFlash as default,\n createFlashEl,\n createAction,\n hideFlash,\n removeFlashClickListener,\n};\nwindow.Flash = createFlash;\n\n\n\n// WEBPACK FOOTER //\n// ./flash.js","import bp from './breakpoints';\n\nconst HIDE_INTERVAL_TIMEOUT = 300;\nconst IS_OVER_CLASS = 'is-over';\nconst IS_ABOVE_CLASS = 'is-above';\nconst IS_SHOWING_FLY_OUT_CLASS = 'is-showing-fly-out';\nlet currentOpenMenu = null;\nlet menuCornerLocs;\nlet timeoutId;\nlet sidebar;\n\nexport const mousePos = [];\n\nexport const setSidebar = (el) => { sidebar = el; };\nexport const getOpenMenu = () => currentOpenMenu;\nexport const setOpenMenu = (menu = null) => { currentOpenMenu = menu; };\n\nexport const slope = (a, b) => (b.y - a.y) / (b.x - a.x);\n\nlet headerHeight = 50;\n\nexport const getHeaderHeight = () => headerHeight;\n\nexport const isSidebarCollapsed = () => sidebar && sidebar.classList.contains('sidebar-collapsed-desktop');\n\nexport const canShowActiveSubItems = (el) => {\n if (el.classList.contains('active') && !isSidebarCollapsed()) {\n return false;\n }\n\n return true;\n};\n\nexport const canShowSubItems = () => bp.getBreakpointSize() === 'sm' || bp.getBreakpointSize() === 'md' || bp.getBreakpointSize() === 'lg';\n\nexport const getHideSubItemsInterval = () => {\n if (!currentOpenMenu || !mousePos.length) return 0;\n\n const currentMousePos = mousePos[mousePos.length - 1];\n const prevMousePos = mousePos[0];\n const currentMousePosY = currentMousePos.y;\n const [menuTop, menuBottom] = menuCornerLocs;\n\n if (currentMousePosY < menuTop.y ||\n currentMousePosY > menuBottom.y) return 0;\n\n if (slope(prevMousePos, menuBottom) < slope(currentMousePos, menuBottom) &&\n slope(prevMousePos, menuTop) > slope(currentMousePos, menuTop)) {\n return HIDE_INTERVAL_TIMEOUT;\n }\n\n return 0;\n};\n\nexport const calculateTop = (boundingRect, outerHeight) => {\n const windowHeight = window.innerHeight;\n const bottomOverflow = windowHeight - (boundingRect.top + outerHeight);\n\n return bottomOverflow < 0 ? (boundingRect.top - outerHeight) + boundingRect.height :\n boundingRect.top;\n};\n\nexport const hideMenu = (el) => {\n if (!el) return;\n\n const 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\nexport const moveSubItemsToPosition = (el, subItems) => {\n const boundingRect = el.getBoundingClientRect();\n const top = calculateTop(boundingRect, subItems.offsetHeight);\n const left = sidebar ? sidebar.offsetWidth : 50;\n const 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 const subItemsRect = subItems.getBoundingClientRect();\n\n menuCornerLocs = [\n {\n x: subItemsRect.left, // left position of the sub items\n y: subItemsRect.top, // top position of the sub items\n },\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\n if (isAbove) {\n subItems.classList.add(IS_ABOVE_CLASS);\n }\n};\n\nexport const showSubLevelItems = (el) => {\n const subItems = el.querySelector('.sidebar-sub-level-items');\n const 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\nexport const mouseEnterTopItems = (el, timeout = getHideSubItemsInterval()) => {\n clearTimeout(timeoutId);\n\n timeoutId = setTimeout(() => {\n if (currentOpenMenu) hideMenu(currentOpenMenu);\n\n showSubLevelItems(el);\n }, timeout);\n};\n\nexport const mouseLeaveTopItem = (el) => {\n const subItems = el.querySelector('.sidebar-sub-level-items');\n\n if (!canShowSubItems() || !canShowActiveSubItems(el) ||\n (subItems && subItems === currentOpenMenu)) return;\n\n el.classList.remove(IS_OVER_CLASS);\n};\n\nexport const documentMouseMove = (e) => {\n mousePos.push({\n x: e.clientX,\n y: e.clientY,\n });\n\n if (mousePos.length > 6) mousePos.shift();\n};\n\nexport const subItemsMouseLeave = (relatedTarget) => {\n clearTimeout(timeoutId);\n\n if (relatedTarget && !relatedTarget.closest(`.${IS_OVER_CLASS}`)) {\n hideMenu(currentOpenMenu);\n }\n};\n\nexport default () => {\n sidebar = document.querySelector('.nav-sidebar');\n\n if (!sidebar) return;\n\n const items = [...sidebar.querySelectorAll('.sidebar-top-level-items > li')];\n\n const topItems = sidebar.querySelector('.sidebar-top-level-items');\n if (topItems) {\n sidebar.querySelector('.sidebar-top-level-items').addEventListener('mouseleave', () => {\n clearTimeout(timeoutId);\n\n timeoutId = setTimeout(() => {\n if (currentOpenMenu) hideMenu(currentOpenMenu);\n }, getHideSubItemsInterval());\n });\n }\n\n headerHeight = document.querySelector('.nav-sidebar').offsetTop;\n\n items.forEach((el) => {\n const subItems = el.querySelector('.sidebar-sub-level-items');\n\n if (subItems) {\n subItems.addEventListener('mouseleave', e => subItemsMouseLeave(e.relatedTarget));\n }\n\n el.addEventListener('mouseenter', e => mouseEnterTopItems(e.currentTarget));\n el.addEventListener('mouseleave', e => mouseLeaveTopItem(e.currentTarget));\n });\n\n document.addEventListener('mousemove', documentMouseMove);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./fly_out_nav.js","import _ from 'underscore';\nimport glRegexp from './lib/utils/regexp';\nimport AjaxCache from './lib/utils/ajax_cache';\n\nfunction sanitize(str) {\n return str.replace(/<(?:.|\\n)*?>/gm, '');\n}\n\nclass GfmAutoComplete {\n constructor(dataSources) {\n this.dataSources = dataSources || {};\n this.cachedData = {};\n this.isLoadingData = {};\n }\n\n setup(input, enableMap = {\n emojis: true,\n members: true,\n issues: true,\n milestones: true,\n mergeRequests: true,\n labels: true,\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 setupLifecycle() {\n this.input.each((i, input) => {\n const $input = $(input);\n $input.off('focus.setupAtWho').on('focus.setupAtWho', this.setupAtWho.bind(this, $input));\n $input.on('change.atwho', () => input.dispatchEvent(new Event('input')));\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', () => this.clearCache());\n });\n }\n\n 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(value) {\n if (GfmAutoComplete.isLoading(value)) return GfmAutoComplete.Loading.template;\n // eslint-disable-next-line no-template-curly-in-string\n let tpl = '
    • /${name}';\n if (value.aliases.length > 0) {\n tpl += ' (or /<%- aliases.join(\", /\") %>)';\n }\n if (value.params.length > 0) {\n tpl += ' <%- params.join(\" \") %>';\n }\n if (value.description !== '') {\n tpl += '<%- description %>';\n }\n tpl += '
    • ';\n return _.template(tpl)(value);\n },\n insertTpl(value) {\n // eslint-disable-next-line no-template-curly-in-string\n let tpl = '/${name} ';\n let referencePrefix = null;\n if (value.params.length > 0) {\n referencePrefix = value.params[0][0];\n if (/^[@%~]/.test(referencePrefix)) {\n tpl += '<%- referencePrefix %>';\n }\n }\n return _.template(tpl)({ referencePrefix });\n },\n suffix: '',\n callbacks: {\n ...this.getDefaultCallbacks(),\n beforeSave(commands) {\n if (GfmAutoComplete.isLoading(commands)) return commands;\n return $.map(commands, (c) => {\n let search = c.name;\n if (c.aliases.length > 0) {\n search = `${search} ${c.aliases.join(' ')}`;\n }\n return {\n name: c.name,\n aliases: c.aliases,\n params: c.params,\n description: c.description,\n search,\n };\n });\n },\n matcher(flag, subtext) {\n const regexp = /(?:^|\\n)\\/([A-Za-z_]*)$/gi;\n const match = regexp.exec(subtext);\n if (match) {\n return match[1];\n }\n return null;\n },\n },\n });\n }\n\n setupEmoji($input) {\n // Emoji\n $input.atwho({\n at: ':',\n displayTpl(value) {\n let tmpl = GfmAutoComplete.Loading.template;\n if (value && value.name) {\n tmpl = GfmAutoComplete.Emoji.templateFunction(value.name);\n }\n return tmpl;\n },\n // eslint-disable-next-line no-template-curly-in-string\n insertTpl: ':${name}:',\n skipSpecialCharacterTest: true,\n data: GfmAutoComplete.defaultLoadingData,\n callbacks: {\n ...this.getDefaultCallbacks(),\n matcher(flag, subtext) {\n const relevantText = subtext.trim().split(/\\s/).pop();\n const regexp = new RegExp(`(?:[^${glRegexp.unicodeLetters}0-9:]|\\n|^):([^:]*)$`, 'gi');\n const match = regexp.exec(relevantText);\n\n return match && match.length ? match[1] : null;\n },\n },\n });\n }\n\n setupMembers($input) {\n // Team Members\n $input.atwho({\n at: '@',\n displayTpl(value) {\n let tmpl = GfmAutoComplete.Loading.template;\n if (value.username != null) {\n tmpl = GfmAutoComplete.Members.template;\n }\n return tmpl;\n },\n // eslint-disable-next-line no-template-curly-in-string\n insertTpl: '${atwho-at}${username}',\n searchKey: 'search',\n alwaysHighlightFirst: true,\n skipSpecialCharacterTest: true,\n data: GfmAutoComplete.defaultLoadingData,\n callbacks: {\n ...this.getDefaultCallbacks(),\n beforeSave(members) {\n return $.map(members, (m) => {\n let title = '';\n if (m.username == null) {\n return m;\n }\n title = m.name;\n if (m.count) {\n title += ` (${m.count})`;\n }\n\n const autoCompleteAvatar = m.avatar_url || m.username.charAt(0).toUpperCase();\n const imgAvatar = `\"${m.username}\"`;\n const txtAvatar = `
      ${autoCompleteAvatar}
      `;\n\n return {\n username: m.username,\n avatarTag: autoCompleteAvatar.length === 1 ? txtAvatar : imgAvatar,\n title: sanitize(title),\n search: sanitize(`${m.username} ${m.name}`),\n };\n });\n },\n },\n });\n }\n\n setupIssues($input) {\n $input.atwho({\n at: '#',\n alias: 'issues',\n searchKey: 'search',\n displayTpl(value) {\n let tmpl = GfmAutoComplete.Loading.template;\n if (value.title != null) {\n tmpl = GfmAutoComplete.Issues.template;\n }\n return tmpl;\n },\n data: GfmAutoComplete.defaultLoadingData,\n // eslint-disable-next-line no-template-curly-in-string\n insertTpl: '${atwho-at}${id}',\n callbacks: {\n ...this.getDefaultCallbacks(),\n beforeSave(issues) {\n return $.map(issues, (i) => {\n if (i.title == null) {\n return i;\n }\n return {\n id: i.iid,\n title: sanitize(i.title),\n search: `${i.iid} ${i.title}`,\n };\n });\n },\n },\n });\n }\n\n setupMilestones($input) {\n $input.atwho({\n at: '%',\n alias: 'milestones',\n searchKey: 'search',\n // eslint-disable-next-line no-template-curly-in-string\n insertTpl: '${atwho-at}${title}',\n displayTpl(value) {\n let tmpl = GfmAutoComplete.Loading.template;\n if (value.title != null) {\n tmpl = GfmAutoComplete.Milestones.template;\n }\n return tmpl;\n },\n data: GfmAutoComplete.defaultLoadingData,\n callbacks: {\n ...this.getDefaultCallbacks(),\n beforeSave(milestones) {\n return $.map(milestones, (m) => {\n if (m.title == null) {\n return m;\n }\n return {\n id: m.iid,\n title: sanitize(m.title),\n search: m.title,\n };\n });\n },\n },\n });\n }\n\n setupMergeRequests($input) {\n $input.atwho({\n at: '!',\n alias: 'mergerequests',\n searchKey: 'search',\n displayTpl(value) {\n let tmpl = GfmAutoComplete.Loading.template;\n if (value.title != null) {\n tmpl = GfmAutoComplete.Issues.template;\n }\n return tmpl;\n },\n data: GfmAutoComplete.defaultLoadingData,\n // eslint-disable-next-line no-template-curly-in-string\n insertTpl: '${atwho-at}${id}',\n callbacks: {\n ...this.getDefaultCallbacks(),\n beforeSave(merges) {\n return $.map(merges, (m) => {\n if (m.title == null) {\n return m;\n }\n return {\n id: m.iid,\n title: sanitize(m.title),\n search: `${m.iid} ${m.title}`,\n };\n });\n },\n },\n });\n }\n\n setupLabels($input) {\n const fetchData = this.fetchData.bind(this);\n const LABEL_COMMAND = { LABEL: '/label', UNLABEL: '/unlabel', RELABEL: '/relabel' };\n let command = '';\n\n $input.atwho({\n at: '~',\n alias: 'labels',\n searchKey: 'search',\n data: GfmAutoComplete.defaultLoadingData,\n displayTpl(value) {\n let tmpl = GfmAutoComplete.Labels.template;\n if (GfmAutoComplete.isLoading(value)) {\n tmpl = GfmAutoComplete.Loading.template;\n }\n return tmpl;\n },\n // eslint-disable-next-line no-template-curly-in-string\n insertTpl: '${atwho-at}${title}',\n callbacks: {\n ...this.getDefaultCallbacks(),\n beforeSave(merges) {\n if (GfmAutoComplete.isLoading(merges)) return merges;\n return $.map(merges, m => ({\n title: sanitize(m.title),\n color: m.color,\n search: m.title,\n set: m.set,\n }));\n },\n matcher(flag, subtext) {\n const match = GfmAutoComplete.defaultMatcher(flag, subtext, this.app.controllers);\n const subtextNodes = subtext.split(/\\n+/g).pop().split(GfmAutoComplete.regexSubtext);\n\n // Check if ~ is followed by '/label', '/relabel' or '/unlabel' commands.\n command = subtextNodes.find((node) => {\n if (node === LABEL_COMMAND.LABEL ||\n node === LABEL_COMMAND.RELABEL ||\n node === LABEL_COMMAND.UNLABEL) { return node; }\n return null;\n });\n\n return match && match.length ? match[1] : null;\n },\n filter(query, data, searchKey) {\n if (GfmAutoComplete.isLoading(data)) {\n fetchData(this.$inputor, this.at);\n return data;\n }\n\n if (data === GfmAutoComplete.defaultLoadingData) {\n return $.fn.atwho.default.callbacks.filter(query, data, searchKey);\n }\n\n // The `LABEL_COMMAND.RELABEL` is intentionally skipped\n // because we want to return all the labels (unfiltered) for that command.\n if (command === LABEL_COMMAND.LABEL) {\n // Return labels with set: undefined.\n return data.filter(label => !label.set);\n } else if (command === LABEL_COMMAND.UNLABEL) {\n // Return labels with set: true.\n return data.filter(label => label.set);\n }\n\n return data;\n },\n },\n });\n }\n\n getDefaultCallbacks() {\n const fetchData = this.fetchData.bind(this);\n\n return {\n sorter(query, items, searchKey) {\n this.setting.highlightFirst = this.setting.alwaysHighlightFirst || query.length > 0;\n if (GfmAutoComplete.isLoading(items)) {\n this.setting.highlightFirst = false;\n return items;\n }\n return $.fn.atwho.default.callbacks.sorter(query, items, searchKey);\n },\n filter(query, data, searchKey) {\n if (GfmAutoComplete.isLoading(data)) {\n fetchData(this.$inputor, this.at);\n return data;\n }\n return $.fn.atwho.default.callbacks.filter(query, data, searchKey);\n },\n beforeInsert(value) {\n let resultantValue = value;\n if (value && !this.setting.skipSpecialCharacterTest) {\n const withoutAt = value.substring(1);\n const regex = value.charAt() === '~' ? /\\W|^\\d+$/ : /\\W/;\n if (withoutAt && regex.test(withoutAt)) {\n resultantValue = `${value.charAt()}\"${withoutAt}\"`;\n }\n }\n return resultantValue;\n },\n matcher(flag, subtext) {\n const match = GfmAutoComplete.defaultMatcher(flag, subtext, this.app.controllers);\n\n if (match) {\n return match[1];\n }\n return null;\n },\n };\n }\n\n fetchData($input, at) {\n if (this.isLoadingData[at]) return;\n this.isLoadingData[at] = true;\n if (this.cachedData[at]) {\n this.loadData($input, at, this.cachedData[at]);\n } else if (GfmAutoComplete.atTypeMap[at] === 'emojis') {\n import(/* webpackChunkName: 'emoji' */ './emoji')\n .then(({ validEmojiNames, glEmojiTag }) => {\n this.loadData($input, at, validEmojiNames);\n GfmAutoComplete.glEmojiTag = glEmojiTag;\n })\n .catch(() => { this.isLoadingData[at] = false; });\n } else {\n AjaxCache.retrieve(this.dataSources[GfmAutoComplete.atTypeMap[at]], true)\n .then((data) => {\n this.loadData($input, at, data);\n })\n .catch(() => { this.isLoadingData[at] = false; });\n }\n }\n\n loadData($input, at, data) {\n this.isLoadingData[at] = false;\n this.cachedData[at] = data;\n $input.atwho('load', at, data);\n // This trigger at.js again\n // otherwise we would be stuck with loading until the user types\n return $input.trigger('keyup');\n }\n\n clearCache() {\n this.cachedData = {};\n }\n\n destroy() {\n this.input.each((i, input) => {\n const $input = $(input);\n $input.atwho('destroy');\n });\n }\n\n static isLoading(data) {\n let dataToInspect = data;\n if (data && data.length > 0) {\n dataToInspect = data[0];\n }\n\n const loadingState = GfmAutoComplete.defaultLoadingData[0];\n return dataToInspect &&\n (dataToInspect === loadingState || dataToInspect.name === loadingState);\n }\n\n static defaultMatcher(flag, subtext, controllers) {\n // The below is taken from At.js source\n // Tweaked to commands to start without a space only if char before is a non-word character\n // https://github.com/ichord/At.js\n const atSymbolsWithBar = Object.keys(controllers).join('|');\n const atSymbolsWithoutBar = Object.keys(controllers).join('');\n const targetSubtext = subtext.split(GfmAutoComplete.regexSubtext).pop();\n const resultantFlag = flag.replace(/[-[\\]/{}()*+?.\\\\^$|]/g, '\\\\$&');\n\n const accentAChar = decodeURI('%C3%80');\n const accentYChar = decodeURI('%C3%BF');\n\n const regexp = new RegExp(`^(?:\\\\B|[^a-zA-Z0-9_\\`${atSymbolsWithoutBar}]|\\\\s)${resultantFlag}(?!${atSymbolsWithBar})((?:[A-Za-z${accentAChar}-${accentYChar}0-9_'.+-]|[^\\\\x00-\\\\x7a])*)$`, 'gi');\n\n return regexp.exec(targetSubtext);\n }\n}\n\nGfmAutoComplete.regexSubtext = new RegExp(/\\s+/g);\n\nGfmAutoComplete.defaultLoadingData = ['loading'];\n\nGfmAutoComplete.atTypeMap = {\n ':': 'emojis',\n '@': 'members',\n '#': 'issues',\n '!': 'mergeRequests',\n '~': 'labels',\n '%': 'milestones',\n '/': 'commands',\n};\n\n// Emoji\nGfmAutoComplete.glEmojiTag = null;\nGfmAutoComplete.Emoji = {\n templateFunction(name) {\n // glEmojiTag helper is loaded on-demand in fetchData()\n if (GfmAutoComplete.glEmojiTag) {\n return `
    • ${name} ${GfmAutoComplete.glEmojiTag(name)}
    • `;\n }\n return `
    • ${name}
    • `;\n },\n};\n// Team Members\nGfmAutoComplete.Members = {\n // eslint-disable-next-line no-template-curly-in-string\n template: '
    • ${avatarTag} ${username} ${title}
    • ',\n};\nGfmAutoComplete.Labels = {\n // eslint-disable-next-line no-template-curly-in-string\n template: '
    • ${title}
    • ',\n};\n// Issues and MergeRequests\nGfmAutoComplete.Issues = {\n // eslint-disable-next-line no-template-curly-in-string\n template: '
    • ${id} ${title}
    • ',\n};\n// Milestones\nGfmAutoComplete.Milestones = {\n // eslint-disable-next-line no-template-curly-in-string\n template: '
    • ${title}
    • ',\n};\nGfmAutoComplete.Loading = {\n template: '
    • Loading...
    • ',\n};\n\nexport default GfmAutoComplete;\n\n\n\n// WEBPACK FOOTER //\n// ./gfm_auto_complete.js","/* eslint-disable func-names, no-underscore-dangle, space-before-function-paren, no-var, one-var, one-var-declaration-per-line, prefer-rest-params, max-len, vars-on-top, wrap-iife, no-unused-vars, quotes, no-shadow, no-cond-assign, prefer-arrow-callback, no-return-assign, no-else-return, camelcase, comma-dangle, no-lonely-if, guard-for-in, no-restricted-syntax, consistent-return, prefer-template, no-param-reassign, no-loop-func, no-mixed-operators */\n/* global fuzzaldrinPlus */\nimport _ from 'underscore';\nimport fuzzaldrinPlus from 'fuzzaldrin-plus';\nimport axios from './lib/utils/axios_utils';\nimport { visitUrl } from './lib/utils/url_utility';\nimport { isObject } from './lib/utils/type_utility';\n\nvar GitLabDropdown, GitLabDropdownFilter, GitLabDropdownRemote, GitLabDropdownInput;\n\nGitLabDropdownInput = (function() {\n function GitLabDropdownInput(input, options) {\n var $inputContainer, $clearButton;\n var _this = this;\n this.input = input;\n this.options = options;\n this.fieldName = this.options.fieldName || 'field-name';\n $inputContainer = this.input.parent();\n $clearButton = $inputContainer.find('.js-dropdown-input-clear');\n $clearButton.on('click', (function(_this) {\n // Clear click\n return function(e) {\n e.preventDefault();\n e.stopPropagation();\n return _this.input.val('').trigger('input').focus();\n };\n })(this));\n\n this.input\n .on('keydown', function (e) {\n var keyCode = e.which;\n if (keyCode === 13 && !options.elIsInput) {\n e.preventDefault();\n }\n })\n .on('input', function(e) {\n var val = e.currentTarget.value || _this.options.inputFieldName;\n val = val.split(' ').join('-') // replaces space with dash\n .replace(/[^a-zA-Z0-9 -]/g, '').toLowerCase() // replace non alphanumeric\n .replace(/(-)\\1+/g, '-'); // replace repeated dashes\n _this.cb(_this.options.fieldName, val, {}, true);\n _this.input.closest('.dropdown')\n .find('.dropdown-toggle-text')\n .text(val);\n });\n }\n\n GitLabDropdownInput.prototype.onInput = function(cb) {\n this.cb = cb;\n };\n\n return GitLabDropdownInput;\n})();\n\nGitLabDropdownFilter = (function() {\n var ARROW_KEY_CODES, BLUR_KEYCODES, HAS_VALUE_CLASS;\n\n BLUR_KEYCODES = [27, 40];\n\n ARROW_KEY_CODES = [38, 40];\n\n HAS_VALUE_CLASS = \"has-value\";\n\n function GitLabDropdownFilter(input, options) {\n var $clearButton, $inputContainer, ref, timeout;\n this.input = input;\n this.options = options;\n this.filterInputBlur = (ref = this.options.filterInputBlur) != null ? ref : true;\n $inputContainer = this.input.parent();\n $clearButton = $inputContainer.find('.js-dropdown-input-clear');\n $clearButton.on('click', (function(_this) {\n // Clear click\n return function(e) {\n e.preventDefault();\n e.stopPropagation();\n return _this.input.val('').trigger('input').focus();\n };\n })(this));\n // Key events\n timeout = \"\";\n this.input\n .on('keydown', function (e) {\n var keyCode = e.which;\n if (keyCode === 13 && !options.elIsInput) {\n e.preventDefault();\n }\n })\n .on('input', function() {\n if (this.input.val() !== \"\" && !$inputContainer.hasClass(HAS_VALUE_CLASS)) {\n $inputContainer.addClass(HAS_VALUE_CLASS);\n } else if (this.input.val() === \"\" && $inputContainer.hasClass(HAS_VALUE_CLASS)) {\n $inputContainer.removeClass(HAS_VALUE_CLASS);\n }\n // Only filter asynchronously only if option remote is set\n if (this.options.remote) {\n clearTimeout(timeout);\n return timeout = setTimeout(function() {\n $inputContainer.parent().addClass('is-loading');\n\n return this.options.query(this.input.val(), function(data) {\n $inputContainer.parent().removeClass('is-loading');\n return this.options.callback(data);\n }.bind(this));\n }.bind(this), 250);\n } else {\n return this.filter(this.input.val());\n }\n }.bind(this));\n }\n\n GitLabDropdownFilter.prototype.shouldBlur = function(keyCode) {\n return BLUR_KEYCODES.indexOf(keyCode) !== -1;\n };\n\n GitLabDropdownFilter.prototype.filter = function(search_text) {\n var data, elements, group, key, results, tmp;\n if (this.options.onFilter) {\n this.options.onFilter(search_text);\n }\n data = this.options.data();\n if ((data != null) && !this.options.filterByText) {\n results = data;\n if (search_text !== '') {\n // When data is an array of objects therefore [object Array] e.g.\n // [\n // { prop: 'foo' },\n // { prop: 'baz' }\n // ]\n if (_.isArray(data)) {\n results = fuzzaldrinPlus.filter(data, search_text, {\n key: this.options.keys\n });\n } else {\n // If data is grouped therefore an [object Object]. e.g.\n // {\n // groupName1: [\n // { prop: 'foo' },\n // { prop: 'baz' }\n // ],\n // groupName2: [\n // { prop: 'abc' },\n // { prop: 'def' }\n // ]\n // }\n if (isObject(data)) {\n results = {};\n for (key in data) {\n group = data[key];\n tmp = fuzzaldrinPlus.filter(group, search_text, {\n key: this.options.keys\n });\n if (tmp.length) {\n results[key] = tmp.map(function(item) {\n return item;\n });\n }\n }\n }\n }\n }\n return this.options.callback(results);\n } else {\n elements = this.options.elements();\n if (search_text) {\n elements.each(function() {\n var $el, matches;\n $el = $(this);\n matches = fuzzaldrinPlus.match($el.text().trim(), search_text);\n if (!$el.is('.dropdown-header')) {\n if (matches.length) {\n return $el.show().removeClass('option-hidden');\n } else {\n return $el.hide().addClass('option-hidden');\n }\n }\n });\n } else {\n elements.show().removeClass('option-hidden');\n }\n\n elements.parent().find('.dropdown-menu-empty-item').toggleClass('hidden', elements.is(':visible'));\n }\n };\n\n return GitLabDropdownFilter;\n})();\n\nGitLabDropdownRemote = (function() {\n function GitLabDropdownRemote(dataEndpoint, options) {\n this.dataEndpoint = dataEndpoint;\n this.options = options;\n }\n\n GitLabDropdownRemote.prototype.execute = function() {\n if (typeof this.dataEndpoint === \"string\") {\n return this.fetchData();\n } else if (typeof this.dataEndpoint === \"function\") {\n if (this.options.beforeSend) {\n this.options.beforeSend();\n }\n return this.dataEndpoint(\"\", (function(_this) {\n // Fetch the data by calling the data funcfion\n return function(data) {\n if (_this.options.success) {\n _this.options.success(data);\n }\n if (_this.options.beforeSend) {\n return _this.options.beforeSend();\n }\n };\n })(this));\n }\n };\n\n GitLabDropdownRemote.prototype.fetchData = function() {\n if (this.options.beforeSend) {\n this.options.beforeSend();\n }\n\n // Fetch the data through ajax if the data is a string\n return axios.get(this.dataEndpoint)\n .then(({ data }) => {\n if (this.options.success) {\n return this.options.success(data);\n }\n });\n };\n\n return GitLabDropdownRemote;\n})();\n\nGitLabDropdown = (function() {\n var ACTIVE_CLASS, FILTER_INPUT, NO_FILTER_INPUT, INDETERMINATE_CLASS, LOADING_CLASS, PAGE_TWO_CLASS, NON_SELECTABLE_CLASSES, SELECTABLE_CLASSES, CURSOR_SELECT_SCROLL_PADDING, currentIndex;\n\n LOADING_CLASS = \"is-loading\";\n\n PAGE_TWO_CLASS = \"is-page-two\";\n\n ACTIVE_CLASS = \"is-active\";\n\n INDETERMINATE_CLASS = \"is-indeterminate\";\n\n currentIndex = -1;\n\n NON_SELECTABLE_CLASSES = '.divider, .separator, .dropdown-header, .dropdown-menu-empty-item';\n\n SELECTABLE_CLASSES = \".dropdown-content li:not(\" + NON_SELECTABLE_CLASSES + \", .option-hidden)\";\n\n CURSOR_SELECT_SCROLL_PADDING = 5;\n\n FILTER_INPUT = '.dropdown-input .dropdown-input-field:not(.dropdown-no-filter)';\n\n NO_FILTER_INPUT = '.dropdown-input .dropdown-input-field.dropdown-no-filter';\n\n function GitLabDropdown(el1, options) {\n var searchFields, selector, self;\n this.el = el1;\n this.options = options;\n this.updateLabel = this.updateLabel.bind(this);\n this.hidden = this.hidden.bind(this);\n this.opened = this.opened.bind(this);\n this.shouldPropagate = this.shouldPropagate.bind(this);\n self = this;\n selector = $(this.el).data(\"target\");\n this.dropdown = selector != null ? $(selector) : $(this.el).parent();\n // Set Defaults\n this.filterInput = this.options.filterInput || this.getElement(FILTER_INPUT);\n this.noFilterInput = this.options.noFilterInput || this.getElement(NO_FILTER_INPUT);\n this.highlight = !!this.options.highlight;\n this.filterInputBlur = this.options.filterInputBlur != null\n ? this.options.filterInputBlur\n : true;\n // If no input is passed create a default one\n self = this;\n // If selector was passed\n if (_.isString(this.filterInput)) {\n this.filterInput = this.getElement(this.filterInput);\n }\n searchFields = this.options.search ? this.options.search.fields : [];\n if (this.options.data) {\n // If we provided data\n // data could be an array of objects or a group of arrays\n if (_.isObject(this.options.data) && !_.isFunction(this.options.data)) {\n this.fullData = this.options.data;\n currentIndex = -1;\n this.parseData(this.options.data);\n this.focusTextInput();\n } else {\n this.remote = new GitLabDropdownRemote(this.options.data, {\n dataType: this.options.dataType,\n beforeSend: this.toggleLoading.bind(this),\n success: (function(_this) {\n return function(data) {\n _this.fullData = data;\n _this.parseData(_this.fullData);\n _this.focusTextInput();\n if (_this.options.filterable && _this.filter && _this.filter.input && _this.filter.input.val() && _this.filter.input.val().trim() !== '') {\n return _this.filter.input.trigger('input');\n }\n };\n // Remote data\n })(this),\n instance: this,\n });\n }\n }\n if (this.noFilterInput.length) {\n this.plainInput = new GitLabDropdownInput(this.noFilterInput, this.options);\n this.plainInput.onInput(this.addInput.bind(this));\n }\n // Init filterable\n if (this.options.filterable) {\n this.filter = new GitLabDropdownFilter(this.filterInput, {\n elIsInput: $(this.el).is('input'),\n filterInputBlur: this.filterInputBlur,\n filterByText: this.options.filterByText,\n onFilter: this.options.onFilter,\n remote: this.options.filterRemote,\n query: this.options.data,\n keys: searchFields,\n instance: this,\n elements: (function(_this) {\n return function() {\n selector = '.dropdown-content li:not(' + NON_SELECTABLE_CLASSES + ')';\n if (_this.dropdown.find('.dropdown-toggle-page').length) {\n selector = \".dropdown-page-one \" + selector;\n }\n return $(selector, this.instance.dropdown);\n };\n })(this),\n data: (function(_this) {\n return function() {\n return _this.fullData;\n };\n })(this),\n callback: (function(_this) {\n return function(data) {\n _this.parseData(data);\n if (_this.filterInput.val() !== '') {\n selector = SELECTABLE_CLASSES;\n if (_this.dropdown.find('.dropdown-toggle-page').length) {\n selector = \".dropdown-page-one \" + selector;\n }\n if ($(_this.el).is('input')) {\n currentIndex = -1;\n } else {\n $(selector, _this.dropdown).first().find('a').addClass('is-focused');\n currentIndex = 0;\n }\n }\n };\n })(this)\n });\n }\n // Event listeners\n this.dropdown.on(\"shown.bs.dropdown\", this.opened);\n this.dropdown.on(\"hidden.bs.dropdown\", this.hidden);\n $(this.el).on(\"update.label\", this.updateLabel);\n this.dropdown.on(\"click\", \".dropdown-menu, .dropdown-menu-close\", this.shouldPropagate);\n this.dropdown.on('keyup', (function(_this) {\n return function(e) {\n // Escape key\n if (e.which === 27) {\n return $('.dropdown-menu-close', _this.dropdown).trigger('click');\n }\n };\n })(this));\n this.dropdown.on('blur', 'a', (function(_this) {\n return function(e) {\n var $dropdownMenu, $relatedTarget;\n if (e.relatedTarget != null) {\n $relatedTarget = $(e.relatedTarget);\n $dropdownMenu = $relatedTarget.closest('.dropdown-menu');\n if ($dropdownMenu.length === 0) {\n return _this.dropdown.removeClass('open');\n }\n }\n };\n })(this));\n if (this.dropdown.find(\".dropdown-toggle-page\").length) {\n this.dropdown.find(\".dropdown-toggle-page, .dropdown-menu-back\").on(\"click\", (function(_this) {\n return function(e) {\n e.preventDefault();\n e.stopPropagation();\n return _this.togglePage();\n };\n })(this));\n }\n if (this.options.selectable) {\n selector = \".dropdown-content a\";\n if (this.dropdown.find(\".dropdown-toggle-page\").length) {\n selector = \".dropdown-page-one .dropdown-content a\";\n }\n this.dropdown.on(\"click\", selector, function(e) {\n var $el, selected, selectedObj, isMarking;\n $el = $(e.currentTarget);\n selected = self.rowClicked($el);\n selectedObj = selected ? selected[0] : null;\n isMarking = selected ? selected[1] : null;\n if (this.options.clicked) {\n this.options.clicked.call(this, {\n selectedObj,\n $el,\n e,\n isMarking,\n });\n }\n\n // Update label right after all modifications in dropdown has been done\n if (this.options.toggleLabel) {\n this.updateLabel(selectedObj, $el, this);\n }\n\n $el.trigger('blur');\n }.bind(this));\n }\n }\n\n // Finds an element inside wrapper element\n GitLabDropdown.prototype.getElement = function(selector) {\n return this.dropdown.find(selector);\n };\n\n GitLabDropdown.prototype.toggleLoading = function() {\n return $('.dropdown-menu', this.dropdown).toggleClass(LOADING_CLASS);\n };\n\n GitLabDropdown.prototype.togglePage = function() {\n var menu;\n menu = $('.dropdown-menu', this.dropdown);\n if (menu.hasClass(PAGE_TWO_CLASS)) {\n if (this.remote) {\n this.remote.execute();\n }\n }\n menu.toggleClass(PAGE_TWO_CLASS);\n // Focus first visible input on active page\n return this.dropdown.find('[class^=\"dropdown-page-\"]:visible :text:visible:first').focus();\n };\n\n GitLabDropdown.prototype.parseData = function(data) {\n var full_html, groupData, html, name;\n this.renderedData = data;\n if (this.options.filterable && data.length === 0) {\n // render no matching results\n html = [this.noResults()];\n } else {\n // Handle array groups\n if (isObject(data)) {\n html = [];\n for (name in data) {\n groupData = data[name];\n html.push(this.renderItem({\n header: name\n // Add header for each group\n }, name));\n this.renderData(groupData, name).map(function(item) {\n return html.push(item);\n });\n }\n } else {\n // Render each row\n html = this.renderData(data);\n }\n }\n // Render the full menu\n full_html = this.renderMenu(html);\n return this.appendMenu(full_html);\n };\n\n GitLabDropdown.prototype.renderData = function(data, group) {\n if (group == null) {\n group = false;\n }\n return data.map((function(_this) {\n return function(obj, index) {\n return _this.renderItem(obj, group, index);\n };\n })(this));\n };\n\n GitLabDropdown.prototype.shouldPropagate = function(e) {\n var $target;\n if (this.options.multiSelect || this.options.shouldPropagate === false) {\n $target = $(e.target);\n if ($target && !$target.hasClass('dropdown-menu-close') &&\n !$target.hasClass('dropdown-menu-close-icon') &&\n !$target.data('isLink')) {\n e.stopPropagation();\n return false;\n } else {\n return true;\n }\n }\n };\n\n GitLabDropdown.prototype.filteredFullData = function() {\n return this.fullData.filter(r => typeof r === 'object'\n && !Object.prototype.hasOwnProperty.call(r, 'beforeDivider')\n && !Object.prototype.hasOwnProperty.call(r, 'header')\n );\n };\n\n GitLabDropdown.prototype.opened = function(e) {\n var contentHtml;\n this.resetRows();\n this.addArrowKeyEvent();\n\n const dropdownToggle = this.dropdown.find('.dropdown-menu-toggle');\n const hasFilterBulkUpdate = dropdownToggle.hasClass('js-filter-bulk-update');\n const shouldRefreshOnOpen = dropdownToggle.hasClass('js-gl-dropdown-refresh-on-open');\n const hasMultiSelect = dropdownToggle.hasClass('js-multiselect');\n\n // Makes indeterminate items effective\n if (this.fullData && (shouldRefreshOnOpen || hasFilterBulkUpdate)) {\n this.parseData(this.fullData);\n }\n\n // Process the data to make sure rendered data\n // matches the correct layout\n const inputValue = this.filterInput.val();\n if (this.fullData && hasMultiSelect && this.options.processData && inputValue.length === 0) {\n this.options.processData.call(this.options, inputValue, this.filteredFullData(), this.parseData.bind(this));\n }\n\n contentHtml = $('.dropdown-content', this.dropdown).html();\n if (this.remote && contentHtml === \"\") {\n this.remote.execute();\n } else {\n this.focusTextInput();\n }\n\n if (this.options.showMenuAbove) {\n this.positionMenuAbove();\n }\n\n if (this.options.opened) {\n this.options.opened.call(this, e);\n }\n\n return this.dropdown.trigger('shown.gl.dropdown');\n };\n\n GitLabDropdown.prototype.positionMenuAbove = function() {\n var $menu = this.dropdown.find('.dropdown-menu');\n\n $menu.addClass('dropdown-open-top');\n $menu.css('top', 'initial');\n $menu.css('bottom', '100%');\n };\n\n GitLabDropdown.prototype.hidden = function(e) {\n var $input;\n this.resetRows();\n this.removeArrayKeyEvent();\n $input = this.dropdown.find(\".dropdown-input-field\");\n if (this.options.filterable) {\n $input.blur();\n }\n if (this.dropdown.find(\".dropdown-toggle-page\").length) {\n $('.dropdown-menu', this.dropdown).removeClass(PAGE_TWO_CLASS);\n }\n if (this.options.hidden) {\n this.options.hidden.call(this, e);\n }\n return this.dropdown.trigger('hidden.gl.dropdown');\n };\n\n // Render the full menu\n GitLabDropdown.prototype.renderMenu = function(html) {\n if (this.options.renderMenu) {\n return this.options.renderMenu(html);\n } else {\n var ul = document.createElement('ul');\n\n for (var i = 0; i < html.length; i += 1) {\n var el = html[i];\n\n if (el instanceof jQuery) {\n el = el.get(0);\n }\n\n if (typeof el === 'string') {\n ul.innerHTML += el;\n } else {\n ul.appendChild(el);\n }\n }\n\n return ul;\n }\n };\n\n // Append the menu into the dropdown\n GitLabDropdown.prototype.appendMenu = function(html) {\n return this.clearMenu().append(html);\n };\n\n GitLabDropdown.prototype.clearMenu = function() {\n var selector;\n selector = '.dropdown-content';\n if (this.dropdown.find(\".dropdown-toggle-page\").length) {\n selector = \".dropdown-page-one .dropdown-content\";\n }\n\n return $(selector, this.dropdown).empty();\n };\n\n GitLabDropdown.prototype.renderItem = function(data, group, index) {\n var field, fieldName, html, selected, text, url, value, rowHidden;\n\n if (!this.options.renderRow) {\n value = this.options.id ? this.options.id(data) : data.id;\n\n if (value) {\n value = value.toString().replace(/'/g, '\\\\\\'');\n }\n }\n\n // Hide element\n if (this.options.hideRow && this.options.hideRow(value)) {\n rowHidden = true;\n }\n if (group == null) {\n group = false;\n }\n if (index == null) {\n // Render the row\n index = false;\n }\n html = document.createElement('li');\n\n if (data === 'divider' || data === 'separator') {\n html.className = data;\n return html;\n }\n // Header\n if (data.header != null) {\n html.className = 'dropdown-header';\n html.innerHTML = data.header;\n return html;\n }\n if (this.options.renderRow) {\n // Call the render function\n html = this.options.renderRow.call(this.options, data, this);\n } else {\n if (!selected) {\n fieldName = this.options.fieldName;\n\n if (value) {\n field = this.dropdown.parent().find(`input[name='${fieldName}'][value='${value}']`);\n if (field.length) {\n selected = true;\n }\n } else {\n field = this.dropdown.parent().find(`input[name='${fieldName}']`);\n selected = !field.length;\n }\n }\n // Set URL\n if (this.options.url != null) {\n url = this.options.url(data);\n } else {\n url = data.url != null ? data.url : '#';\n }\n // Set Text\n if (this.options.text != null) {\n text = this.options.text(data);\n } else {\n text = data.text != null ? data.text : '';\n }\n if (this.highlight) {\n text = this.highlightTextMatches(text, this.filterInput.val());\n }\n // Create the list item & the link\n var link = document.createElement('a');\n\n link.href = url;\n\n if (this.highlight) {\n link.innerHTML = text;\n } else {\n link.textContent = text;\n }\n\n if (selected) {\n link.className = 'is-active';\n }\n\n if (group) {\n link.dataset.group = group;\n link.dataset.index = index;\n }\n\n html.appendChild(link);\n }\n return html;\n };\n\n GitLabDropdown.prototype.highlightTextMatches = function(text, term) {\n const occurrences = fuzzaldrinPlus.match(text, term);\n const indexOf = [].indexOf;\n return text.split('').map(function(character, i) {\n if (indexOf.call(occurrences, i) !== -1) {\n return \"\" + character + \"\";\n } else {\n return character;\n }\n }).join('');\n };\n\n GitLabDropdown.prototype.noResults = function() {\n var html;\n return '
    • No matching results
    • ';\n };\n\n GitLabDropdown.prototype.rowClicked = function(el) {\n var field, fieldName, groupName, isInput, selectedIndex, selectedObject, value, isMarking;\n\n fieldName = this.options.fieldName;\n isInput = $(this.el).is('input');\n if (this.renderedData) {\n groupName = el.data('group');\n if (groupName) {\n selectedIndex = el.data('index');\n selectedObject = this.renderedData[groupName][selectedIndex];\n } else {\n selectedIndex = el.closest('li').index();\n selectedObject = this.renderedData[selectedIndex];\n }\n }\n\n if (this.options.vue) {\n if (el.hasClass(ACTIVE_CLASS)) {\n el.removeClass(ACTIVE_CLASS);\n } else {\n el.addClass(ACTIVE_CLASS);\n }\n\n return [selectedObject];\n }\n\n field = [];\n value = this.options.id\n ? this.options.id(selectedObject, el)\n : selectedObject.id;\n if (isInput) {\n field = $(this.el);\n } else if (value != null) {\n field = this.dropdown.parent().find(\"input[name='\" + fieldName + \"'][value='\" + value.toString().replace(/'/g, '\\\\\\'') + \"']\");\n }\n\n if (this.options.isSelectable && !this.options.isSelectable(selectedObject, el)) {\n return;\n }\n\n if (el.hasClass(ACTIVE_CLASS) && value !== 0) {\n isMarking = false;\n el.removeClass(ACTIVE_CLASS);\n if (field && field.length) {\n this.clearField(field, isInput);\n }\n } else if (el.hasClass(INDETERMINATE_CLASS)) {\n isMarking = true;\n el.addClass(ACTIVE_CLASS);\n el.removeClass(INDETERMINATE_CLASS);\n if (field && field.length && value == null) {\n this.clearField(field, isInput);\n }\n if ((!field || !field.length) && fieldName) {\n this.addInput(fieldName, value, selectedObject);\n }\n } else {\n isMarking = true;\n if (!this.options.multiSelect || el.hasClass('dropdown-clear-active')) {\n this.dropdown.find(\".\" + ACTIVE_CLASS).removeClass(ACTIVE_CLASS);\n if (!isInput) {\n this.dropdown.parent().find(\"input[name='\" + fieldName + \"']\").remove();\n }\n }\n if (field && field.length && value == null) {\n this.clearField(field, isInput);\n }\n // Toggle active class for the tick mark\n el.addClass(ACTIVE_CLASS);\n if (value != null) {\n if ((!field || !field.length) && fieldName) {\n this.addInput(fieldName, value, selectedObject);\n } else if (field && field.length) {\n field.val(value).trigger('change');\n }\n }\n }\n\n return [selectedObject, isMarking];\n };\n\n GitLabDropdown.prototype.focusTextInput = function() {\n if (this.options.filterable) {\n const initialScrollTop = $(window).scrollTop();\n\n if (this.dropdown.is('.open')) {\n this.filterInput.focus();\n }\n\n if ($(window).scrollTop() < initialScrollTop) {\n $(window).scrollTop(initialScrollTop);\n }\n }\n };\n\n GitLabDropdown.prototype.addInput = function(fieldName, value, selectedObject, single) {\n var $input;\n // Create hidden input for form\n if (single) {\n $('input[name=\"' + fieldName + '\"]').remove();\n }\n\n $input = $('').attr('type', 'hidden').attr('name', fieldName).val(value);\n if (this.options.inputId != null) {\n $input.attr('id', this.options.inputId);\n }\n\n if (this.options.multiSelect) {\n Object.keys(selectedObject).forEach((attribute) => {\n $input.attr(`data-${attribute}`, selectedObject[attribute]);\n });\n }\n\n if (this.options.inputMeta) {\n $input.attr('data-meta', selectedObject[this.options.inputMeta]);\n }\n\n this.dropdown.before($input).trigger('change');\n };\n\n GitLabDropdown.prototype.selectRowAtIndex = function(index) {\n var $el, selector;\n // If we pass an option index\n if (typeof index !== \"undefined\") {\n selector = SELECTABLE_CLASSES + \":eq(\" + index + \") a\";\n } else {\n selector = \".dropdown-content .is-focused\";\n }\n if (this.dropdown.find(\".dropdown-toggle-page\").length) {\n selector = \".dropdown-page-one \" + selector;\n }\n // simulate a click on the first link\n $el = $(selector, this.dropdown);\n if ($el.length) {\n var href = $el.attr('href');\n if (href && href !== '#') {\n visitUrl(href);\n } else {\n $el.trigger('click');\n }\n }\n };\n\n GitLabDropdown.prototype.addArrowKeyEvent = function() {\n var $input, ARROW_KEY_CODES, selector;\n ARROW_KEY_CODES = [38, 40];\n $input = this.dropdown.find(\".dropdown-input-field\");\n selector = SELECTABLE_CLASSES;\n if (this.dropdown.find(\".dropdown-toggle-page\").length) {\n selector = \".dropdown-page-one \" + selector;\n }\n return $('body').on('keydown', (function(_this) {\n return function(e) {\n var $listItems, PREV_INDEX, currentKeyCode;\n currentKeyCode = e.which;\n if (ARROW_KEY_CODES.indexOf(currentKeyCode) !== -1) {\n e.preventDefault();\n e.stopImmediatePropagation();\n PREV_INDEX = currentIndex;\n $listItems = $(selector, _this.dropdown);\n // if @options.filterable\n // $input.blur()\n if (currentKeyCode === 40) {\n // Move down\n if (currentIndex < ($listItems.length - 1)) {\n currentIndex += 1;\n }\n } else if (currentKeyCode === 38) {\n // Move up\n if (currentIndex > 0) {\n currentIndex -= 1;\n }\n }\n if (currentIndex !== PREV_INDEX) {\n _this.highlightRowAtIndex($listItems, currentIndex);\n }\n return false;\n }\n if (currentKeyCode === 13 && currentIndex !== -1) {\n e.preventDefault();\n _this.selectRowAtIndex();\n }\n };\n })(this));\n };\n\n GitLabDropdown.prototype.removeArrayKeyEvent = function() {\n return $('body').off('keydown');\n };\n\n GitLabDropdown.prototype.resetRows = function resetRows() {\n currentIndex = -1;\n $('.is-focused', this.dropdown).removeClass('is-focused');\n };\n\n GitLabDropdown.prototype.highlightRowAtIndex = function($listItems, index) {\n var $dropdownContent, $listItem, dropdownContentBottom, dropdownContentHeight, dropdownContentTop, dropdownScrollTop, listItemBottom, listItemHeight, listItemTop;\n // Remove the class for the previously focused row\n $('.is-focused', this.dropdown).removeClass('is-focused');\n // Update the class for the row at the specific index\n $listItem = $listItems.eq(index);\n $listItem.find('a:first-child').addClass(\"is-focused\");\n // Dropdown content scroll area\n $dropdownContent = $listItem.closest('.dropdown-content');\n dropdownScrollTop = $dropdownContent.scrollTop();\n dropdownContentHeight = $dropdownContent.outerHeight();\n dropdownContentTop = $dropdownContent.prop('offsetTop');\n dropdownContentBottom = dropdownContentTop + dropdownContentHeight;\n // Get the offset bottom of the list item\n listItemHeight = $listItem.outerHeight();\n listItemTop = $listItem.prop('offsetTop');\n listItemBottom = listItemTop + listItemHeight;\n if (!index) {\n // Scroll the dropdown content to the top\n $dropdownContent.scrollTop(0);\n } else if (index === ($listItems.length - 1)) {\n // Scroll the dropdown content to the bottom\n $dropdownContent.scrollTop($dropdownContent.prop('scrollHeight'));\n } else if (listItemBottom > (dropdownContentBottom + dropdownScrollTop)) {\n // Scroll the dropdown content down\n $dropdownContent.scrollTop(listItemBottom - dropdownContentBottom + CURSOR_SELECT_SCROLL_PADDING);\n } else if (listItemTop < (dropdownContentTop + dropdownScrollTop)) {\n // Scroll the dropdown content up\n return $dropdownContent.scrollTop(listItemTop - dropdownContentTop - CURSOR_SELECT_SCROLL_PADDING);\n }\n };\n\n GitLabDropdown.prototype.updateLabel = function(selected, el, instance) {\n if (selected == null) {\n selected = null;\n }\n if (el == null) {\n el = null;\n }\n if (instance == null) {\n instance = null;\n }\n\n let toggleText = this.options.toggleLabel(selected, el, instance);\n if (this.options.updateLabel) {\n // Option to override the dropdown label text\n toggleText = this.options.updateLabel;\n }\n\n return $(this.el).find(\".dropdown-toggle-text\").text(toggleText);\n };\n\n GitLabDropdown.prototype.clearField = function(field, isInput) {\n return isInput ? field.val('') : field.remove();\n };\n\n return GitLabDropdown;\n})();\n\n$.fn.glDropdown = function(opts) {\n return this.each(function() {\n if (!$.data(this, 'glDropdown')) {\n return $.data(this, 'glDropdown', new GitLabDropdown(this, opts));\n }\n });\n};\n\n\n\n// WEBPACK FOOTER //\n// ./gl_dropdown.js","/**\n * This class overrides the browser's validation error bubbles, displaying custom\n * error messages for invalid fields instead. To begin validating any form, add the\n * class `gl-show-field-errors` to the form element, and ensure error messages are\n * declared in each inputs' `title` attribute. If no title is declared for an invalid\n * field the user attempts to submit, \"This field is required.\" will be shown by default.\n *\n * Opt not to validate certain fields by adding the class `gl-field-error-ignore` to the input.\n *\n * Set a custom error anchor for error message to be injected after with the\n * class `gl-field-error-anchor`\n *\n * Examples:\n *\n * Basic:\n *\n *
      \n * \n *
      \n *\n * Ignore specific inputs (e.g. UsernameValidator):\n *\n *
      \n *
      \n * \n *
      \n *
      \n * \n *
      \n *
      \n *\n * Custom Error Anchor (allows error message to be injected after specified element):\n *\n *
      \n *
      \n * \n * // Error message typically injected here\n *
      \n * // Error message now injected here\n *
      \n *\n */\n\n/**\n * Regex Patterns in use:\n *\n * Only alphanumeric: : \"[a-zA-Z0-9]+\"\n * No special characters : \"[a-zA-Z0-9-_]+\",\n *\n */\n\nconst errorMessageClass = 'gl-field-error';\nconst inputErrorClass = 'gl-field-error-outline';\nconst errorAnchorSelector = '.gl-field-error-anchor';\nconst ignoreInputSelector = '.gl-field-error-ignore';\n\nexport default class GlFieldError {\n constructor({ input, formErrors }) {\n this.inputElement = $(input);\n this.inputDomElement = this.inputElement.get(0);\n this.form = formErrors;\n this.errorMessage = this.inputElement.attr('title') || 'This field is required.';\n this.fieldErrorElement = $(`

      ${this.errorMessage}

      `);\n\n this.state = {\n valid: false,\n empty: true,\n submitted: false,\n };\n\n this.initFieldValidation();\n }\n\n initFieldValidation() {\n const customErrorAnchor = this.inputElement.parents(errorAnchorSelector);\n const errorAnchor = customErrorAnchor.length ? customErrorAnchor : this.inputElement;\n\n // hidden when injected into DOM\n errorAnchor.after(this.fieldErrorElement);\n this.inputElement.off('invalid').on('invalid', this.handleInvalidSubmit.bind(this));\n this.scopedSiblings = this.safelySelectSiblings();\n }\n\n safelySelectSiblings() {\n // Apply `ignoreSelector` in markup to siblings whose visibility should not be toggled\n const unignoredSiblings = this.inputElement.siblings(`p:not(${ignoreInputSelector})`);\n const parentContainer = this.inputElement.parent('.form-group');\n\n // Only select siblings when they're scoped within a form-group with one input\n const safelyScoped = parentContainer.length && parentContainer.find('input').length === 1;\n\n return safelyScoped ? unignoredSiblings : this.fieldErrorElement;\n }\n\n renderValidity() {\n this.renderClear();\n\n if (this.state.valid) {\n this.renderValid();\n } else if (this.state.empty) {\n this.renderEmpty();\n } else if (!this.state.valid) {\n this.renderInvalid();\n }\n }\n\n handleInvalidSubmit(event) {\n event.preventDefault();\n const currentValue = this.accessCurrentValue();\n this.state.valid = false;\n this.state.empty = currentValue === '';\n this.state.submitted = true;\n this.renderValidity();\n this.form.focusOnFirstInvalid.apply(this.form);\n\n // For UX, wait til after first invalid submission to check each keyup\n this.inputElement.off('keyup.fieldValidator')\n .on('keyup.fieldValidator', this.updateValidity.bind(this));\n }\n\n /* Get or set current input value */\n accessCurrentValue(newVal) {\n return newVal ? this.inputElement.val(newVal) : this.inputElement.val();\n }\n\n getInputValidity() {\n return this.inputDomElement.validity.valid;\n }\n\n updateValidity() {\n const inputVal = this.accessCurrentValue();\n this.state.empty = !inputVal.length;\n this.state.valid = this.getInputValidity();\n this.renderValidity();\n }\n\n renderValid() {\n return this.renderClear();\n }\n\n renderEmpty() {\n return this.renderInvalid();\n }\n\n renderInvalid() {\n this.inputElement.addClass(inputErrorClass);\n this.scopedSiblings.hide();\n return this.fieldErrorElement.show();\n }\n\n renderClear() {\n const inputVal = this.accessCurrentValue();\n if (!inputVal.split(' ').length) {\n const trimmedInput = inputVal.trim();\n this.accessCurrentValue(trimmedInput);\n }\n this.inputElement.removeClass(inputErrorClass);\n this.scopedSiblings.hide();\n this.fieldErrorElement.hide();\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./gl_field_error.js","import GlFieldError from './gl_field_error';\n\nconst customValidationFlag = 'gl-field-error-ignore';\n\nexport default class GlFieldErrors {\n constructor(form) {\n this.form = $(form);\n this.state = {\n inputs: [],\n valid: false,\n };\n this.initValidators();\n }\n\n initValidators() {\n // register selectors here as needed\n const validateSelectors = [':text', ':password', '[type=email]']\n .map(selector => `input${selector}`).join(',');\n\n this.state.inputs = this.form.find(validateSelectors).toArray()\n .filter(input => !input.classList.contains(customValidationFlag))\n .map(input => new GlFieldError({ input, formErrors: this }));\n\n this.form.on('submit', GlFieldErrors.catchInvalidFormSubmit);\n }\n\n /* Neccessary to prevent intercept and override invalid form submit\n * because Safari & iOS quietly allow form submission when form is invalid\n * and prevents disabling of invalid submit button by application.js */\n\n static catchInvalidFormSubmit(e) {\n const $form = $(e.currentTarget);\n\n if (!$form.attr('novalidate')) {\n if (!e.currentTarget.checkValidity()) {\n e.preventDefault();\n e.stopPropagation();\n }\n }\n }\n\n /* Public method for triggering validity updates manually */\n updateFormValidityState() {\n this.state.inputs.forEach((field) => {\n if (field.state.submitted) {\n field.updateValidity();\n }\n });\n }\n\n focusOnFirstInvalid() {\n const firstInvalid = this.state.inputs\n .filter(input => !input.inputDomElement.validity.valid)[0];\n firstInvalid.inputElement.focus();\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./gl_field_errors.js","import { highCountTrim } from '~/lib/utils/text_utility';\n\n/**\n * Updates todo counter when todos are toggled.\n * When count is 0, we hide the badge.\n *\n * @param {jQuery.Event} e\n * @param {String} count\n */\nexport default function initTodoToggle() {\n $(document).on('todo:toggle', (e, count) => {\n const parsedCount = parseInt(count, 10);\n const $todoPendingCount = $('.todos-count');\n\n $todoPendingCount.text(highCountTrim(parsedCount));\n $todoPendingCount.toggleClass('hidden', parsedCount === 0);\n });\n}\n\n\n\n// WEBPACK FOOTER //\n// ./header.js","import _ from 'underscore';\nimport { __, sprintf } from './locale';\nimport axios from './lib/utils/axios_utils';\nimport flash from './flash';\nimport { convertPermissionToBoolean } from './lib/utils/common_utils';\n\nclass ImporterStatus {\n constructor({ jobsUrl, importUrl, ciCdOnly }) {\n this.jobsUrl = jobsUrl;\n this.importUrl = importUrl;\n this.ciCdOnly = ciCdOnly;\n this.initStatusPage();\n this.setAutoUpdate();\n }\n\n initStatusPage() {\n $('.js-add-to-import')\n .off('click')\n .on('click', this.addToImport.bind(this));\n\n $('.js-import-all')\n .off('click')\n .on('click', function onClickImportAll() {\n const $btn = $(this);\n $btn.disable().addClass('is-loading');\n return $('.js-add-to-import').each(function triggerAddImport() {\n return $(this).trigger('click');\n });\n });\n }\n\n addToImport(event) {\n const $btn = $(event.currentTarget);\n const $tr = $btn.closest('tr');\n const $targetField = $tr.find('.import-target');\n const $namespaceInput = $targetField.find('.js-select-namespace option:selected');\n const id = $tr.attr('id').replace('repo_', '');\n let targetNamespace;\n let newName;\n if ($namespaceInput.length > 0) {\n targetNamespace = $namespaceInput[0].innerHTML;\n newName = $targetField.find('#path').prop('value');\n $targetField.empty().append(`${targetNamespace}/${newName}`);\n }\n $btn.disable().addClass('is-loading');\n\n return axios.post(this.importUrl, {\n repo_id: id,\n target_namespace: targetNamespace,\n new_name: newName,\n ci_cd_only: this.ciCdOnly,\n })\n .then(({ data }) => {\n const job = $(`tr#repo_${id}`);\n job.attr('id', `project_${data.id}`);\n\n job.find('.import-target').html(`${data.full_path}`);\n $('table.import-jobs tbody').prepend(job);\n\n job.addClass('active');\n const connectingVerb = this.ciCdOnly ? __('connecting') : __('importing');\n job.find('.import-actions').html(sprintf(\n _.escape(__('%{loadingIcon} Started')), {\n loadingIcon: ``,\n },\n false,\n ));\n })\n .catch(() => flash(__('An error occurred while importing project')));\n }\n\n autoUpdate() {\n return axios.get(this.jobsUrl)\n .then(({ data = [] }) => {\n data.forEach((job) => {\n const jobItem = $(`#project_${job.id}`);\n const statusField = jobItem.find('.job-status');\n\n const spinner = '';\n\n switch (job.import_status) {\n case 'finished':\n jobItem.removeClass('active').addClass('success');\n statusField.html(` ${__('Done')}`);\n break;\n case 'scheduled':\n statusField.html(`${spinner} ${__('Scheduled')}`);\n break;\n case 'started':\n statusField.html(`${spinner} ${__('Started')}`);\n break;\n case 'failed':\n statusField.html(__('Failed'));\n break;\n default:\n statusField.html(job.import_status);\n break;\n }\n });\n });\n }\n\n setAutoUpdate() {\n setInterval(this.autoUpdate.bind(this), 4000);\n }\n}\n\n// eslint-disable-next-line consistent-return\nfunction initImporterStatus() {\n const importerStatus = document.querySelector('.js-importer-status');\n\n if (importerStatus) {\n const data = importerStatus.dataset;\n return new ImporterStatus({\n jobsUrl: data.jobsImportPath,\n importUrl: data.importPath,\n ciCdOnly: convertPermissionToBoolean(data.ciCdOnly),\n });\n }\n}\n\nexport {\n initImporterStatus as default,\n ImporterStatus,\n};\n\n\n\n// WEBPACK FOOTER //\n// ./importer_status.js","import ContextualSidebar from './contextual_sidebar';\nimport initFlyOutNav from './fly_out_nav';\n\nfunction hideEndFade($scrollingTabs) {\n $scrollingTabs.each(function scrollTabsLoop() {\n const $this = $(this);\n $this.siblings('.fade-right').toggleClass('scrolling', Math.round($this.width()) < $this.prop('scrollWidth'));\n });\n}\n\nexport default function initLayoutNav() {\n const contextualSidebar = new ContextualSidebar();\n contextualSidebar.bindEvents();\n\n initFlyOutNav();\n\n $(document).on('init.scrolling-tabs', () => {\n const $scrollingTabs = $('.scrolling-tabs').not('.is-initialized');\n $scrollingTabs.addClass('is-initialized');\n\n $(window).on('resize.nav', () => {\n hideEndFade($scrollingTabs);\n }).trigger('resize.nav');\n\n $scrollingTabs.on('scroll', function tabsScrollEvent() {\n const $this = $(this);\n const currentPosition = $this.scrollLeft();\n const maxPosition = $this.prop('scrollWidth') - $this.outerWidth();\n\n $this.siblings('.fade-left').toggleClass('scrolling', currentPosition > 0);\n $this.siblings('.fade-right').toggleClass('scrolling', currentPosition < maxPosition - 1);\n });\n\n $scrollingTabs.each(function scrollTabsEachLoop() {\n const $this = $(this);\n const scrollingTabWidth = $this.width();\n const $active = $this.find('.active');\n const activeWidth = $active.width();\n\n if ($active.length) {\n const offset = $active.offset().left + activeWidth;\n\n if (offset > scrollingTabWidth - 30) {\n const scrollLeft = (offset - (scrollingTabWidth / 2)) - (activeWidth / 2);\n\n $this.scrollLeft(scrollLeft);\n }\n }\n });\n }).trigger('init.scrolling-tabs');\n}\n\n\n\n// WEBPACK FOOTER //\n// ./layout_nav.js","import _ from 'underscore';\n\nexport const placeholderImage = 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==';\nconst SCROLL_THRESHOLD = 300;\n\nexport default class LazyLoader {\n constructor(options = {}) {\n this.lazyImages = [];\n this.observerNode = options.observerNode || '#content-body';\n\n const throttledScrollCheck = _.throttle(() => this.scrollCheck(), 300);\n const debouncedElementsInView = _.debounce(() => this.checkElementsInView(), 300);\n\n window.addEventListener('scroll', throttledScrollCheck);\n window.addEventListener('resize', debouncedElementsInView);\n\n const scrollContainer = options.scrollContainer || window;\n scrollContainer.addEventListener('load', () => this.loadCheck());\n }\n searchLazyImages() {\n this.lazyImages = [].slice.call(document.querySelectorAll('.lazy'));\n\n if (this.lazyImages.length) {\n this.checkElementsInView();\n }\n }\n startContentObserver() {\n const contentNode = document.querySelector(this.observerNode) || document.querySelector('body');\n\n if (contentNode) {\n const observer = new MutationObserver(() => this.searchLazyImages());\n\n observer.observe(contentNode, {\n childList: true,\n subtree: true,\n });\n }\n }\n loadCheck() {\n this.searchLazyImages();\n this.startContentObserver();\n }\n scrollCheck() {\n requestAnimationFrame(() => this.checkElementsInView());\n }\n checkElementsInView() {\n const scrollTop = pageYOffset;\n const visHeight = scrollTop + innerHeight + SCROLL_THRESHOLD;\n\n // Loading Images which are in the current viewport or close to them\n this.lazyImages = this.lazyImages.filter((selectedImage) => {\n if (selectedImage.getAttribute('data-src')) {\n const imgBoundRect = selectedImage.getBoundingClientRect();\n const imgTop = scrollTop + imgBoundRect.top;\n const imgBound = imgTop + imgBoundRect.height;\n\n if (scrollTop < imgBound && visHeight > imgTop) {\n LazyLoader.loadImage(selectedImage);\n return false;\n }\n\n return true;\n }\n return false;\n });\n }\n static loadImage(img) {\n if (img.getAttribute('data-src')) {\n img.setAttribute('src', img.getAttribute('data-src'));\n img.removeAttribute('data-src');\n img.classList.remove('lazy');\n img.classList.add('js-lazy-loaded');\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./lazy_loader.js","function isPropertyAccessSafe(base, property) {\n let safe;\n\n try {\n safe = !!base[property];\n } catch (error) {\n safe = false;\n }\n\n return safe;\n}\n\nfunction isFunctionCallSafe(base, functionName, ...args) {\n let safe = true;\n\n try {\n base[functionName](...args);\n } catch (error) {\n safe = false;\n }\n\n return safe;\n}\n\nfunction isLocalStorageAccessSafe() {\n let safe;\n\n const TEST_KEY = 'isLocalStorageAccessSafe';\n const TEST_VALUE = 'true';\n\n safe = isPropertyAccessSafe(window, 'localStorage');\n if (!safe) return safe;\n\n safe = isFunctionCallSafe(window.localStorage, 'setItem', TEST_KEY, TEST_VALUE);\n\n if (safe) window.localStorage.removeItem(TEST_KEY);\n\n return safe;\n}\n\nconst AccessorUtilities = {\n isPropertyAccessSafe,\n isFunctionCallSafe,\n isLocalStorageAccessSafe,\n};\n\nexport default AccessorUtilities;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/utils/accessor.js","import axios from './axios_utils';\nimport Cache from './cache';\n\nclass AjaxCache extends Cache {\n constructor() {\n super();\n this.pendingRequests = { };\n }\n\n override(endpoint, data) {\n this.internalStorage[endpoint] = data;\n }\n\n retrieve(endpoint, forceRetrieve) {\n if (this.hasData(endpoint) && !forceRetrieve) {\n return Promise.resolve(this.get(endpoint));\n }\n\n let pendingRequest = this.pendingRequests[endpoint];\n\n if (!pendingRequest) {\n pendingRequest = axios.get(endpoint)\n .then(({ data }) => {\n this.internalStorage[endpoint] = data;\n delete this.pendingRequests[endpoint];\n })\n .catch((e) => {\n const error = new Error(`${endpoint}: ${e.message}`);\n error.textStatus = e.message;\n\n delete this.pendingRequests[endpoint];\n throw error;\n });\n\n this.pendingRequests[endpoint] = pendingRequest;\n }\n\n return pendingRequest.then(() => this.get(endpoint));\n }\n}\n\nexport default new AjaxCache();\n\n\n\n// WEBPACK FOOTER //\n// ./lib/utils/ajax_cache.js","export default class Cache {\n constructor() {\n this.internalStorage = { };\n }\n\n get(key) {\n return this.internalStorage[key];\n }\n\n hasData(key) {\n return Object.prototype.hasOwnProperty.call(this.internalStorage, key);\n }\n\n remove(key) {\n delete this.internalStorage[key];\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./lib/utils/cache.js","import jQuery from 'jquery';\nimport Cookies from 'js-cookie';\nimport axios from './axios_utils';\nimport { getLocationHash } from './url_utility';\nimport { convertToCamelCase } from './text_utility';\n\nexport const getPagePath = (index = 0) => $('body').attr('data-page').split(':')[index];\n\nexport const isInGroupsPage = () => getPagePath() === 'groups';\n\nexport const isInProjectPage = () => getPagePath() === 'projects';\n\nexport const getProjectSlug = () => {\n if (isInProjectPage()) {\n return $('body').data('project');\n }\n return null;\n};\n\nexport const getGroupSlug = () => {\n if (isInGroupsPage()) {\n return $('body').data('group');\n }\n return null;\n};\n\nexport const checkPageAndAction = (page, action) => {\n const pagePath = getPagePath(1);\n const actionPath = getPagePath(2);\n\n return pagePath === page && actionPath === action;\n};\n\nexport const isInIssuePage = () => checkPageAndAction('issues', 'show');\nexport const isInMRPage = () => checkPageAndAction('merge_requests', 'show');\nexport const isInNoteablePage = () => isInIssuePage() || isInMRPage();\nexport const hasVueMRDiscussionsCookie = () => Cookies.get('vue_mr_discussions');\n\nexport const ajaxGet = url => axios.get(url, {\n params: { format: 'js' },\n responseType: 'text',\n}).then(({ data }) => {\n $.globalEval(data);\n});\n\nexport const rstrip = (val) => {\n if (val) {\n return val.replace(/\\s+$/, '');\n }\n return val;\n};\n\nexport const updateTooltipTitle = ($tooltipEl, newTitle) => $tooltipEl.attr('title', newTitle).tooltip('fixTitle');\n\nexport const disableButtonIfEmptyField = (fieldSelector, buttonSelector, eventName = 'input') => {\n const field = $(fieldSelector);\n const closestSubmit = field.closest('form').find(buttonSelector);\n if (rstrip(field.val()) === '') {\n closestSubmit.disable();\n }\n // eslint-disable-next-line func-names\n return field.on(eventName, function () {\n if (rstrip($(this).val()) === '') {\n return closestSubmit.disable();\n }\n return closestSubmit.enable();\n });\n};\n\n// automatically adjust scroll position for hash urls taking the height of the navbar into account\n// https://github.com/twitter/bootstrap/issues/1768\nexport const handleLocationHash = () => {\n let hash = getLocationHash();\n if (!hash) return;\n\n // This is required to handle non-unicode characters in hash\n hash = decodeURIComponent(hash);\n\n const target = document.getElementById(hash) || document.getElementById(`user-content-${hash}`);\n const fixedTabs = document.querySelector('.js-tabs-affix');\n const fixedDiffStats = document.querySelector('.js-diff-files-changed.is-stuck');\n const fixedNav = document.querySelector('.navbar-gitlab');\n\n let adjustment = 0;\n if (fixedNav) adjustment -= fixedNav.offsetHeight;\n\n if (target && target.scrollIntoView) {\n target.scrollIntoView(true);\n }\n\n if (fixedTabs) {\n adjustment -= fixedTabs.offsetHeight;\n }\n\n if (fixedDiffStats) {\n adjustment -= fixedDiffStats.offsetHeight;\n }\n\n window.scrollBy(0, adjustment);\n};\n\n// Check if element scrolled into viewport from above or below\n// Courtesy http://stackoverflow.com/a/7557433/414749\nexport const isInViewport = (el) => {\n const rect = el.getBoundingClientRect();\n\n return (\n rect.top >= 0 &&\n rect.left >= 0 &&\n rect.bottom <= window.innerHeight &&\n rect.right <= window.innerWidth\n );\n};\n\nexport const parseUrl = (url) => {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n};\n\nexport const parseUrlPathname = (url) => {\n const parsedUrl = parseUrl(url);\n // parsedUrl.pathname will return an absolute path for Firefox and a relative path for IE11\n // We have to make sure we always have an absolute path.\n return parsedUrl.pathname.charAt(0) === '/' ? parsedUrl.pathname : `/${parsedUrl.pathname}`;\n};\n\n// We can trust that each param has one & since values containing & will be encoded\n// Remove the first character of search as it is always ?\nexport const getUrlParamsArray = () => window.location.search.slice(1).split('&').map((param) => {\n const split = param.split('=');\n return [decodeURI(split[0]), split[1]].join('=');\n});\n\nexport const isMetaKey = e => e.metaKey || e.ctrlKey || e.altKey || e.shiftKey;\n\n// Identify following special clicks\n// 1) Cmd + Click on Mac (e.metaKey)\n// 2) Ctrl + Click on PC (e.ctrlKey)\n// 3) Middle-click or Mouse Wheel Click (e.which is 2)\nexport const isMetaClick = e => e.metaKey || e.ctrlKey || e.which === 2;\n\nexport const scrollToElement = (element) => {\n let $el = element;\n if (!(element instanceof jQuery)) {\n $el = $(element);\n }\n const top = $el.offset().top;\n const mrTabsHeight = $('.merge-request-tabs').height() || 0;\n const headerHeight = $('.navbar-gitlab').height() || 0;\n\n return $('body, html').animate({\n scrollTop: top - mrTabsHeight - headerHeight,\n }, 200);\n};\n\n/**\n this will take in the `name` of the param you want to parse in the url\n if the name does not exist this function will return `null`\n otherwise it will return the value of the param key provided\n*/\nexport const getParameterByName = (name, urlToParse) => {\n const url = urlToParse || window.location.href;\n const parsedName = name.replace(/[[\\]]/g, '\\\\$&');\n const regex = new RegExp(`[?&]${parsedName}(=([^&#]*)|&|#|$)`);\n const results = regex.exec(url);\n if (!results) return null;\n if (!results[2]) return '';\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\n};\n\nexport const getSelectedFragment = () => {\n const selection = window.getSelection();\n if (selection.rangeCount === 0) return null;\n const documentFragment = document.createDocumentFragment();\n for (let i = 0; i < selection.rangeCount; i += 1) {\n documentFragment.appendChild(selection.getRangeAt(i).cloneContents());\n }\n if (documentFragment.textContent.length === 0) return null;\n\n return documentFragment;\n};\n\nexport const insertText = (target, text) => {\n // Firefox doesn't support `document.execCommand('insertText', false, text)` on textareas\n const selectionStart = target.selectionStart;\n const selectionEnd = target.selectionEnd;\n const value = target.value;\n\n const textBefore = value.substring(0, selectionStart);\n const textAfter = value.substring(selectionEnd, value.length);\n\n const insertedText = text instanceof Function ? text(textBefore, textAfter) : text;\n const newText = textBefore + insertedText + textAfter;\n\n // eslint-disable-next-line no-param-reassign\n target.value = newText;\n // eslint-disable-next-line no-param-reassign\n target.selectionStart = target.selectionEnd = selectionStart + insertedText.length;\n\n // Trigger autosave\n target.dispatchEvent(new Event('input'));\n\n // Trigger autosize\n const event = document.createEvent('Event');\n event.initEvent('autosize:update', true, false);\n target.dispatchEvent(event);\n};\n\nexport const nodeMatchesSelector = (node, selector) => {\n const matches = Element.prototype.matches ||\n Element.prototype.matchesSelector ||\n Element.prototype.mozMatchesSelector ||\n Element.prototype.msMatchesSelector ||\n Element.prototype.oMatchesSelector ||\n Element.prototype.webkitMatchesSelector;\n\n if (matches) {\n return matches.call(node, selector);\n }\n\n // IE11 doesn't support `node.matches(selector)`\n\n let parentNode = node.parentNode;\n if (!parentNode) {\n parentNode = document.createElement('div');\n // eslint-disable-next-line no-param-reassign\n node = node.cloneNode(true);\n parentNode.appendChild(node);\n }\n\n const matchingNodes = parentNode.querySelectorAll(selector);\n return Array.prototype.indexOf.call(matchingNodes, node) !== -1;\n};\n\n/**\n this will take in the headers from an API response and normalize them\n this way we don't run into production issues when nginx gives us lowercased header keys\n*/\nexport const normalizeHeaders = (headers) => {\n const upperCaseHeaders = {};\n\n Object.keys(headers || {}).forEach((e) => {\n upperCaseHeaders[e.toUpperCase()] = headers[e];\n });\n\n return upperCaseHeaders;\n};\n\n/**\n this will take in the getAllResponseHeaders result and normalize them\n this way we don't run into production issues when nginx gives us lowercased header keys\n*/\nexport const normalizeCRLFHeaders = (headers) => {\n const headersObject = {};\n const headersArray = headers.split('\\n');\n\n headersArray.forEach((header) => {\n const keyValue = header.split(': ');\n headersObject[keyValue[0]] = keyValue[1];\n });\n\n return normalizeHeaders(headersObject);\n};\n\n/**\n * Parses pagination object string values into numbers.\n *\n * @param {Object} paginationInformation\n * @returns {Object}\n */\nexport const parseIntPagination = paginationInformation => ({\n perPage: parseInt(paginationInformation['X-PER-PAGE'], 10),\n page: parseInt(paginationInformation['X-PAGE'], 10),\n total: parseInt(paginationInformation['X-TOTAL'], 10),\n totalPages: parseInt(paginationInformation['X-TOTAL-PAGES'], 10),\n nextPage: parseInt(paginationInformation['X-NEXT-PAGE'], 10),\n previousPage: parseInt(paginationInformation['X-PREV-PAGE'], 10),\n});\n\n/**\n * Given a string of query parameters creates an object.\n *\n * @example\n * `scope=all&page=2` -> { scope: 'all', page: '2'}\n * `scope=all` -> { scope: 'all' }\n * ``-> {}\n * @param {String} query\n * @returns {Object}\n */\nexport const parseQueryStringIntoObject = (query = '') => {\n if (query === '') return {};\n\n return query\n .split('&')\n .reduce((acc, element) => {\n const val = element.split('=');\n Object.assign(acc, {\n [val[0]]: decodeURIComponent(val[1]),\n });\n return acc;\n }, {});\n};\n\n/**\n * Converts object with key-value pairs\n * into query-param string\n *\n * @param {Object} params\n */\nexport const objectToQueryString = (params = {}) => Object.keys(params).map(param => `${param}=${params[param]}`).join('&');\n\nexport const buildUrlWithCurrentLocation = param => (param ? `${window.location.pathname}${param}` : window.location.pathname);\n\n/**\n * Based on the current location and the string parameters provided\n * creates a new entry in the history without reloading the page.\n *\n * @param {String} param\n */\nexport const historyPushState = (newUrl) => {\n window.history.pushState({}, document.title, newUrl);\n};\n\n/**\n * Converts permission provided as strings to booleans.\n *\n * @param {String} string\n * @returns {Boolean}\n */\nexport const convertPermissionToBoolean = permission => permission === 'true';\n\n/**\n * Back Off exponential algorithm\n * backOff :: (Function, Number) -> Promise\n *\n * @param {Function} fn function to be called\n * @param {Number} timeout\n * @return {Promise}\n * @example\n * ```\n * backOff(function (next, stop) {\n * // Let's perform this function repeatedly for 60s or for the timeout provided.\n *\n * ourFunction()\n * .then(function (result) {\n * // continue if result is not what we need\n * next();\n *\n * // when result is what we need let's stop with the repetions and jump out of the cycle\n * stop(result);\n * })\n * .catch(function (error) {\n * // if there is an error, we need to stop this with an error.\n * stop(error);\n * })\n * }, 60000)\n * .then(function (result) {})\n * .catch(function (error) {\n * // deal with errors passed to stop()\n * })\n * ```\n */\nexport const backOff = (fn, timeout = 60000) => {\n const maxInterval = 32000;\n let nextInterval = 2000;\n let timeElapsed = 0;\n\n return new Promise((resolve, reject) => {\n const stop = arg => ((arg instanceof Error) ? reject(arg) : resolve(arg));\n\n const next = () => {\n if (timeElapsed < timeout) {\n setTimeout(() => fn(next, stop), nextInterval);\n timeElapsed += nextInterval;\n nextInterval = Math.min(nextInterval + nextInterval, maxInterval);\n } else {\n reject(new Error('BACKOFF_TIMEOUT'));\n }\n };\n\n fn(next, stop);\n });\n};\n\nexport const setFavicon = (faviconPath) => {\n const faviconEl = document.getElementById('favicon');\n if (faviconEl && faviconPath) {\n faviconEl.setAttribute('href', faviconPath);\n }\n};\n\nexport const resetFavicon = () => {\n const faviconEl = document.getElementById('favicon');\n const originalFavicon = faviconEl ? faviconEl.getAttribute('href') : null;\n if (faviconEl) {\n faviconEl.setAttribute('href', originalFavicon);\n }\n};\n\nexport const setCiStatusFavicon = pageUrl =>\n axios.get(pageUrl)\n .then(({ data }) => {\n if (data && data.favicon) {\n setFavicon(data.favicon);\n } else {\n resetFavicon();\n }\n })\n .catch(resetFavicon);\n\nexport const spriteIcon = (icon, className = '') => {\n const classAttribute = className.length > 0 ? `class=\"${className}\"` : '';\n\n return ``;\n};\n\n/**\n * This method takes in object with snake_case property names\n * and returns new object with camelCase property names\n *\n * Reasoning for this method is to ensure consistent property\n * naming conventions across JS code.\n */\nexport const convertObjectPropsToCamelCase = (obj = {}) => {\n if (obj === null) {\n return {};\n }\n\n return Object.keys(obj).reduce((acc, prop) => {\n const result = acc;\n\n result[convertToCamelCase(prop)] = obj[prop];\n return acc;\n }, {});\n};\n\nexport const imagePath = imgUrl => `${gon.asset_host || ''}${gon.relative_url_root || ''}/assets/${imgUrl}`;\n\nexport const addSelectOnFocusBehaviour = (selector = '.js-select-on-focus') => {\n // Click a .js-select-on-focus field, select the contents\n // Prevent a mouseup event from deselecting the input\n $(selector).on('focusin', function selectOnFocusCallback() {\n $(this).select().one('mouseup', (e) => {\n e.preventDefault();\n });\n });\n};\n\nwindow.gl = window.gl || {};\nwindow.gl.utils = {\n ...(window.gl.utils || {}),\n getPagePath,\n isInGroupsPage,\n isInProjectPage,\n getProjectSlug,\n getGroupSlug,\n isInIssuePage,\n ajaxGet,\n rstrip,\n updateTooltipTitle,\n disableButtonIfEmptyField,\n handleLocationHash,\n isInViewport,\n parseUrl,\n parseUrlPathname,\n getUrlParamsArray,\n isMetaKey,\n isMetaClick,\n scrollToElement,\n getParameterByName,\n getSelectedFragment,\n insertText,\n nodeMatchesSelector,\n spriteIcon,\n imagePath,\n};\n\n\n\n// WEBPACK FOOTER //\n// ./lib/utils/common_utils.js","import timeago from 'timeago.js';\nimport dateFormat from 'vendor/date.format';\nimport { pluralize } from './text_utility';\nimport {\n languageCode,\n s__,\n} from '../../locale';\n\nwindow.timeago = timeago;\nwindow.dateFormat = dateFormat;\n\n/**\n * Returns i18n month names array.\n * If `abbreviated` is provided, returns abbreviated\n * name.\n *\n * @param {Boolean} abbreviated\n */\nconst getMonthNames = (abbreviated) => {\n if (abbreviated) {\n return [s__('Jan'), s__('Feb'), s__('Mar'), s__('Apr'), s__('May'), s__('Jun'), s__('Jul'), s__('Aug'), s__('Sep'), s__('Oct'), s__('Nov'), s__('Dec')];\n }\n return [s__('January'), s__('February'), s__('March'), s__('April'), s__('May'), s__('June'), s__('July'), s__('August'), s__('September'), s__('October'), s__('November'), s__('December')];\n};\n\n/**\n * Given a date object returns the day of the week in English\n * @param {date} date\n * @returns {String}\n */\nexport const getDayName = date => ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'][date.getDay()];\n\n/**\n * @example\n * dateFormat('2017-12-05','mmm d, yyyy h:MMtt Z' ) -> \"Dec 5, 2017 12:00am GMT+0000\"\n * @param {date} datetime\n * @returns {String}\n */\nexport const formatDate = datetime => dateFormat(datetime, 'mmm d, yyyy h:MMtt Z');\n\n/**\n * Timeago uses underscores instead of dashes to separate language from country code.\n *\n * see https://github.com/hustcc/timeago.js/tree/v3.0.0/locales\n */\nconst timeagoLanguageCode = languageCode().replace(/-/g, '_');\n\nlet timeagoInstance;\n\n/**\n * Sets a timeago Instance\n */\nexport function getTimeago() {\n if (!timeagoInstance) {\n const localeRemaining = function getLocaleRemaining(number, index) {\n return [\n [s__('Timeago|less than a minute ago'), s__('Timeago|in a while')],\n [s__('Timeago|less than a minute ago'), s__('Timeago|%s seconds remaining')],\n [s__('Timeago|about a minute ago'), s__('Timeago|1 minute remaining')],\n [s__('Timeago|%s minutes ago'), s__('Timeago|%s minutes remaining')],\n [s__('Timeago|about an hour ago'), s__('Timeago|1 hour remaining')],\n [s__('Timeago|about %s hours ago'), s__('Timeago|%s hours remaining')],\n [s__('Timeago|a day ago'), s__('Timeago|1 day remaining')],\n [s__('Timeago|%s days ago'), s__('Timeago|%s days remaining')],\n [s__('Timeago|a week ago'), s__('Timeago|1 week remaining')],\n [s__('Timeago|%s weeks ago'), s__('Timeago|%s weeks remaining')],\n [s__('Timeago|a month ago'), s__('Timeago|1 month remaining')],\n [s__('Timeago|%s months ago'), s__('Timeago|%s months remaining')],\n [s__('Timeago|a year ago'), s__('Timeago|1 year remaining')],\n [s__('Timeago|%s years ago'), s__('Timeago|%s years remaining')],\n ][index];\n };\n const locale = function getLocale(number, index) {\n return [\n [s__('Timeago|less than a minute ago'), s__('Timeago|in a while')],\n [s__('Timeago|less than a minute ago'), s__('Timeago|in %s seconds')],\n [s__('Timeago|about a minute ago'), s__('Timeago|in 1 minute')],\n [s__('Timeago|%s minutes ago'), s__('Timeago|in %s minutes')],\n [s__('Timeago|about an hour ago'), s__('Timeago|in 1 hour')],\n [s__('Timeago|about %s hours ago'), s__('Timeago|in %s hours')],\n [s__('Timeago|a day ago'), s__('Timeago|in 1 day')],\n [s__('Timeago|%s days ago'), s__('Timeago|in %s days')],\n [s__('Timeago|a week ago'), s__('Timeago|in 1 week')],\n [s__('Timeago|%s weeks ago'), s__('Timeago|in %s weeks')],\n [s__('Timeago|a month ago'), s__('Timeago|in 1 month')],\n [s__('Timeago|%s months ago'), s__('Timeago|in %s months')],\n [s__('Timeago|a year ago'), s__('Timeago|in 1 year')],\n [s__('Timeago|%s years ago'), s__('Timeago|in %s years')],\n ][index];\n };\n\n timeago.register(timeagoLanguageCode, locale);\n timeago.register(`${timeagoLanguageCode}-remaining`, localeRemaining);\n timeagoInstance = timeago();\n }\n\n return timeagoInstance;\n}\n\n/**\n * For the given element, renders a timeago instance.\n * @param {jQuery} $els\n */\nexport const renderTimeago = ($els) => {\n const timeagoEls = $els || document.querySelectorAll('.js-timeago-render');\n\n // timeago.js sets timeouts internally for each timeago value to be updated in real time\n getTimeago().render(timeagoEls, timeagoLanguageCode);\n};\n\n/**\n * For the given elements, sets a tooltip with a formatted date.\n * @param {jQuery}\n * @param {Boolean} setTimeago\n */\nexport const localTimeAgo = ($timeagoEls, setTimeago = true) => {\n $timeagoEls.each((i, el) => {\n if (setTimeago) {\n // Recreate with custom template\n $(el).tooltip({\n template: '
      ',\n });\n }\n\n el.classList.add('js-timeago-render');\n });\n\n renderTimeago($timeagoEls);\n};\n\n/**\n * Returns remaining or passed time over the given time.\n * @param {*} time\n * @param {*} expiredLabel\n */\nexport const timeFor = (time, expiredLabel) => {\n if (!time) {\n return '';\n }\n if (new Date(time) < new Date()) {\n return expiredLabel || s__('Timeago|Past due');\n }\n return getTimeago().format(time, `${timeagoLanguageCode}-remaining`).trim();\n};\n\nexport const getDayDifference = (a, b) => {\n const millisecondsPerDay = 1000 * 60 * 60 * 24;\n const date1 = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate());\n const date2 = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate());\n\n return Math.floor((date2 - date1) / millisecondsPerDay);\n};\n\n/**\n * Port of ruby helper time_interval_in_words.\n *\n * @param {Number} seconds\n * @return {String}\n */\nexport function timeIntervalInWords(intervalInSeconds) {\n const secondsInteger = parseInt(intervalInSeconds, 10);\n const minutes = Math.floor(secondsInteger / 60);\n const seconds = secondsInteger - (minutes * 60);\n let text = '';\n\n if (minutes >= 1) {\n text = `${minutes} ${pluralize('minute', minutes)} ${seconds} ${pluralize('second', seconds)}`;\n } else {\n text = `${seconds} ${pluralize('second', seconds)}`;\n }\n return text;\n}\n\nexport function dateInWords(date, abbreviated = false, hideYear = false) {\n if (!date) return date;\n\n const month = date.getMonth();\n const year = date.getFullYear();\n\n const monthNames = [s__('January'), s__('February'), s__('March'), s__('April'), s__('May'), s__('June'), s__('July'), s__('August'), s__('September'), s__('October'), s__('November'), s__('December')];\n const monthNamesAbbr = [s__('Jan'), s__('Feb'), s__('Mar'), s__('Apr'), s__('May'), s__('Jun'), s__('Jul'), s__('Aug'), s__('Sep'), s__('Oct'), s__('Nov'), s__('Dec')];\n\n const monthName = abbreviated ? monthNamesAbbr[month] : monthNames[month];\n\n if (hideYear) {\n return `${monthName} ${date.getDate()}`;\n }\n\n return `${monthName} ${date.getDate()}, ${year}`;\n}\n\n/**\n * Returns month name based on provided date.\n *\n * @param {Date} date\n * @param {Boolean} abbreviated\n */\nexport const monthInWords = (date, abbreviated = false) => {\n if (!date) {\n return '';\n }\n\n return getMonthNames(abbreviated)[date.getMonth()];\n};\n\n/**\n * Returns number of days in a month for provided date.\n * courtesy: https://stacko(verflow.com/a/1185804/414749\n *\n * @param {Date} date\n */\nexport const totalDaysInMonth = (date) => {\n if (!date) {\n return 0;\n }\n return new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate();\n};\n\n/**\n * Returns list of Dates referring to Sundays of the month\n * based on provided date\n *\n * @param {Date} date\n */\nexport const getSundays = (date) => {\n if (!date) {\n return [];\n }\n\n const daysToSunday = ['Saturday', 'Friday', 'Thursday', 'Wednesday', 'Tuesday', 'Monday', 'Sunday'];\n\n const month = date.getMonth();\n const year = date.getFullYear();\n const sundays = [];\n const dateOfMonth = new Date(year, month, 1);\n\n while (dateOfMonth.getMonth() === month) {\n const dayName = getDayName(dateOfMonth);\n if (dayName === 'Sunday') {\n sundays.push(new Date(dateOfMonth.getTime()));\n }\n\n const daysUntilNextSunday = daysToSunday.indexOf(dayName) + 1;\n dateOfMonth.setDate(dateOfMonth.getDate() + daysUntilNextSunday);\n }\n\n return sundays;\n};\n\n/**\n * Returns list of Dates representing a timeframe of Months from month of provided date (inclusive)\n * up to provided length\n *\n * For eg;\n * If current month is January 2018 and `length` provided is `6`\n * Then this method will return list of Date objects as follows;\n *\n * [ October 2017, November 2017, December 2017, January 2018, February 2018, March 2018 ]\n *\n * If current month is March 2018 and `length` provided is `3`\n * Then this method will return list of Date objects as follows;\n *\n * [ February 2018, March 2018, April 2018 ]\n *\n * @param {Number} length\n * @param {Date} date\n */\nexport const getTimeframeWindow = (length, date) => {\n if (!length) {\n return [];\n }\n\n const currentDate = date instanceof Date ? date : new Date();\n const currentMonthIndex = Math.floor(length / 2);\n const timeframe = [];\n\n // Move date object backward to the first month of timeframe\n currentDate.setDate(1);\n currentDate.setMonth(currentDate.getMonth() - currentMonthIndex);\n\n // Iterate and update date for the size of length\n // and push date reference to timeframe list\n for (let i = 0; i < length; i += 1) {\n timeframe.push(new Date(currentDate.getTime()));\n currentDate.setMonth(currentDate.getMonth() + 1);\n }\n\n // Change date of last timeframe item to last date of the month\n timeframe[length - 1].setDate(totalDaysInMonth(timeframe[length - 1]));\n\n return timeframe;\n};\n\nwindow.gl = window.gl || {};\nwindow.gl.utils = {\n ...(window.gl.utils || {}),\n getTimeago,\n localTimeAgo,\n};\n\n\n\n// WEBPACK FOOTER //\n// ./lib/utils/datetime_utility.js","/* eslint-disable import/prefer-default-export */\n\nexport const addClassIfElementExists = (element, className) => {\n if (element) {\n element.classList.add(className);\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./lib/utils/dom_utils.js","/**\n * Regexp utility for the convenience of working with regular expressions.\n *\n */\n\n// Inspired by https://github.com/mishoo/UglifyJS/blob/2bc1d02363db3798d5df41fb5059a19edca9b7eb/lib/parse-js.js#L203\n// Unicode 6.1\nconst unicodeLetters = '\\\\u0041-\\\\u005A\\\\u0061-\\\\u007A\\\\u00AA\\\\u00B5\\\\u00BA\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0370-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u048A-\\\\u0527\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0620-\\\\u064A\\\\u066E\\\\u066F\\\\u0671-\\\\u06D3\\\\u06D5\\\\u06E5\\\\u06E6\\\\u06EE\\\\u06EF\\\\u06FA-\\\\u06FC\\\\u06FF\\\\u0710\\\\u0712-\\\\u072F\\\\u074D-\\\\u07A5\\\\u07B1\\\\u07CA-\\\\u07EA\\\\u07F4\\\\u07F5\\\\u07FA\\\\u0800-\\\\u0815\\\\u081A\\\\u0824\\\\u0828\\\\u0840-\\\\u0858\\\\u08A0\\\\u08A2-\\\\u08AC\\\\u0904-\\\\u0939\\\\u093D\\\\u0950\\\\u0958-\\\\u0961\\\\u0971-\\\\u0977\\\\u0979-\\\\u097F\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BD\\\\u09CE\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E1\\\\u09F0\\\\u09F1\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A72-\\\\u0A74\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABD\\\\u0AD0\\\\u0AE0\\\\u0AE1\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3D\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B61\\\\u0B71\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BD0\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C33\\\\u0C35-\\\\u0C39\\\\u0C3D\\\\u0C58\\\\u0C59\\\\u0C60\\\\u0C61\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBD\\\\u0CDE\\\\u0CE0\\\\u0CE1\\\\u0CF1\\\\u0CF2\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D\\\\u0D4E\\\\u0D60\\\\u0D61\\\\u0D7A-\\\\u0D7F\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0E01-\\\\u0E30\\\\u0E32\\\\u0E33\\\\u0E40-\\\\u0E46\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB0\\\\u0EB2\\\\u0EB3\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F40-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F88-\\\\u0F8C\\\\u1000-\\\\u102A\\\\u103F\\\\u1050-\\\\u1055\\\\u105A-\\\\u105D\\\\u1061\\\\u1065\\\\u1066\\\\u106E-\\\\u1070\\\\u1075-\\\\u1081\\\\u108E\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F0\\\\u1700-\\\\u170C\\\\u170E-\\\\u1711\\\\u1720-\\\\u1731\\\\u1740-\\\\u1751\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1780-\\\\u17B3\\\\u17D7\\\\u17DC\\\\u1820-\\\\u1877\\\\u1880-\\\\u18A8\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191C\\\\u1950-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19C1-\\\\u19C7\\\\u1A00-\\\\u1A16\\\\u1A20-\\\\u1A54\\\\u1AA7\\\\u1B05-\\\\u1B33\\\\u1B45-\\\\u1B4B\\\\u1B83-\\\\u1BA0\\\\u1BAE\\\\u1BAF\\\\u1BBA-\\\\u1BE5\\\\u1C00-\\\\u1C23\\\\u1C4D-\\\\u1C4F\\\\u1C5A-\\\\u1C7D\\\\u1CE9-\\\\u1CEC\\\\u1CEE-\\\\u1CF1\\\\u1CF5\\\\u1CF6\\\\u1D00-\\\\u1DBF\\\\u1E00-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2160-\\\\u2188\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CEE\\\\u2CF2\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D80-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u3029\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FCC\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA61F\\\\uA62A\\\\uA62B\\\\uA640-\\\\uA66E\\\\uA67F-\\\\uA697\\\\uA6A0-\\\\uA6EF\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA78E\\\\uA790-\\\\uA793\\\\uA7A0-\\\\uA7AA\\\\uA7F8-\\\\uA801\\\\uA803-\\\\uA805\\\\uA807-\\\\uA80A\\\\uA80C-\\\\uA822\\\\uA840-\\\\uA873\\\\uA882-\\\\uA8B3\\\\uA8F2-\\\\uA8F7\\\\uA8FB\\\\uA90A-\\\\uA925\\\\uA930-\\\\uA946\\\\uA960-\\\\uA97C\\\\uA984-\\\\uA9B2\\\\uA9CF\\\\uAA00-\\\\uAA28\\\\uAA40-\\\\uAA42\\\\uAA44-\\\\uAA4B\\\\uAA60-\\\\uAA76\\\\uAA7A\\\\uAA80-\\\\uAAAF\\\\uAAB1\\\\uAAB5\\\\uAAB6\\\\uAAB9-\\\\uAABD\\\\uAAC0\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEA\\\\uAAF2-\\\\uAAF4\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uABC0-\\\\uABE2\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D\\\\uFB1F-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF21-\\\\uFF3A\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC';\n\nexport default { unicodeLetters };\n\n\n\n// WEBPACK FOOTER //\n// ./lib/utils/regexp.js","/**\n * Adds a , to a string composed by numbers, at every 3 chars.\n *\n * 2333 -> 2,333\n * 232324 -> 232,324\n *\n * @param {String} text\n * @returns {String}\n */\nexport const addDelimiter = text => (text ? text.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',') : text);\n\n/**\n * Returns '99+' for numbers bigger than 99.\n *\n * @param {Number} count\n * @return {Number|String}\n */\nexport const highCountTrim = count => (count > 99 ? '99+' : count);\n\n/**\n * Converts first char to uppercase and replaces undercores with spaces\n * @param {String} string\n * @requires {String}\n */\nexport const humanize = string => string.charAt(0).toUpperCase() + string.replace(/_/g, ' ').slice(1);\n\n/**\n * Adds an 's' to the end of the string when count is bigger than 0\n * @param {String} str\n * @param {Number} count\n * @returns {String}\n */\nexport const pluralize = (str, count) => str + (count > 1 || count === 0 ? 's' : '');\n\n/**\n * Replaces underscores with dashes\n * @param {*} str\n * @returns {String}\n */\nexport const dasherize = str => str.replace(/[_\\s]+/g, '-');\n\n/**\n * Removes accents and converts to lower case\n * @param {String} str\n * @returns {String}\n */\nexport const slugify = str => str.trim().toLowerCase();\n\n/**\n * Truncates given text\n *\n * @param {String} string\n * @param {Number} maxLength\n * @returns {String}\n */\nexport const truncate = (string, maxLength) => `${string.substr(0, (maxLength - 3))}...`;\n\n/**\n * Capitalizes first character\n *\n * @param {String} text\n * @return {String}\n */\nexport function capitalizeFirstCharacter(text) {\n return `${text[0].toUpperCase()}${text.slice(1)}`;\n}\n\nexport function camelCase(str) {\n return str.replace(/_+([a-z])/gi, ($1, $2) => $2.toUpperCase());\n}\n\nexport function camelCaseKeys(obj = {}) {\n return Object.keys(obj).reduce((acc, key) => {\n const camelKey = camelCase(key);\n return {\n ...acc,\n [camelKey]: obj[key],\n };\n }, {});\n}\n\n/**\n * Replaces all html tags from a string with the given replacement.\n *\n * @param {String} string\n * @param {*} replace\n * @returns {String}\n */\nexport const stripHtml = (string, replace = '') => string.replace(/<[^>]*>/g, replace);\n\n/**\n * Converts snake_case string to camelCase\n *\n * @param {*} string\n */\nexport const convertToCamelCase = string => string.replace(/(_\\w)/g, s => s[1].toUpperCase());\n\n\n\n// WEBPACK FOOTER //\n// ./lib/utils/text_utility.js","// eslint-disable-next-line import/prefer-default-export\nexport const isObject = obj => obj && obj.constructor === Object;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/utils/type_utility.js","// Returns an array containing the value(s) of the\n// of the key passed as an argument\nexport function getParameterValues(sParam) {\n const sPageURL = decodeURIComponent(window.location.search.substring(1));\n\n return sPageURL.split('&').reduce((acc, urlParam) => {\n const sParameterName = urlParam.split('=');\n\n if (sParameterName[0] === sParam) {\n acc.push(sParameterName[1].replace(/\\+/g, ' '));\n }\n\n return acc;\n }, []);\n}\n\n// @param {Object} params - url keys and value to merge\n// @param {String} url\nexport function mergeUrlParams(params, url) {\n let newUrl = Object.keys(params).reduce((acc, paramName) => {\n const paramValue = encodeURIComponent(params[paramName]);\n const pattern = new RegExp(`\\\\b(${paramName}=).*?(&|$)`);\n\n if (paramValue === null) {\n return acc.replace(pattern, '');\n } else if (url.search(pattern) !== -1) {\n return acc.replace(pattern, `$1${paramValue}$2`);\n }\n\n return `${acc}${acc.indexOf('?') > 0 ? '&' : '?'}${paramName}=${paramValue}`;\n }, decodeURIComponent(url));\n\n // Remove a trailing ampersand\n const lastChar = newUrl[newUrl.length - 1];\n\n if (lastChar === '&') {\n newUrl = newUrl.slice(0, -1);\n }\n\n return newUrl;\n}\n\nexport function removeParamQueryString(url, param) {\n const decodedUrl = decodeURIComponent(url);\n const urlVariables = decodedUrl.split('&');\n\n return urlVariables.filter(variable => variable.indexOf(param) === -1).join('&');\n}\n\nexport function removeParams(params) {\n const url = document.createElement('a');\n url.href = window.location.href;\n\n params.forEach((param) => {\n url.search = removeParamQueryString(url.search, param);\n });\n\n return url.href;\n}\n\nexport function getLocationHash(url = window.location.href) {\n const hashIndex = url.indexOf('#');\n\n return hashIndex === -1 ? null : url.substring(hashIndex + 1);\n}\n\nexport function visitUrl(url, external = false) {\n if (external) {\n // Simulate `target=\"blank\" rel=\"noopener noreferrer\"`\n // See https://mathiasbynens.github.io/rel-noopener/\n const otherWindow = window.open();\n otherWindow.opener = null;\n otherWindow.location = url;\n } else {\n window.location.href = url;\n }\n}\n\nexport function refreshCurrentPage() {\n visitUrl(window.location.href);\n}\n\nexport function redirectTo(url) {\n return window.location.assign(url);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./lib/utils/url_utility.js","import _ from 'underscore';\n\n/**\n Very limited implementation of sprintf supporting only named parameters.\n\n @param input (translated) text with parameters (e.g. '%{num_users} users use us')\n @param parameters object mapping parameter names to values (e.g. { num_users: 5 })\n @param escapeParameters whether parameter values should be escaped (see http://underscorejs.org/#escape)\n @returns {String} the text with parameters replaces (e.g. '5 users use us')\n\n @see https://ruby-doc.org/core-2.3.3/Kernel.html#method-i-sprintf\n @see https://gitlab.com/gitlab-org/gitlab-ce/issues/37992\n**/\nexport default (input, parameters, escapeParameters = true) => {\n let output = input;\n\n if (parameters) {\n Object.keys(parameters).forEach((parameterName) => {\n const parameterValue = parameters[parameterName];\n const escapedParameterValue = escapeParameters ? _.escape(parameterValue) : parameterValue;\n output = output.replace(new RegExp(`%{${parameterName}}`, 'g'), escapedParameterValue);\n });\n }\n\n return output;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./locale/sprintf.js","import Jed from 'jed';\nimport sprintf from './sprintf';\n\nconst languageCode = () => document.querySelector('html').getAttribute('lang') || 'en';\nconst locale = new Jed(window.translations || {});\ndelete window.translations;\n\n/**\n Translates `text`\n @param text The text to be translated\n @returns {String} The translated text\n**/\nconst gettext = locale.gettext.bind(locale);\n\n/**\n Translate the text with a number\n if the number is more than 1 it will use the `pluralText` translation.\n This method allows for contexts, see below re. contexts\n\n @param text Singular text to translate (eg. '%d day')\n @param pluralText Plural text to translate (eg. '%d days')\n @param count Number to decide which translation to use (eg. 2)\n @returns {String} Translated text with the number replaced (eg. '2 days')\n**/\nconst ngettext = (text, pluralText, count) => {\n const translated = locale.ngettext(text, pluralText, count).replace(/%d/g, count).split('|');\n\n return translated[translated.length - 1];\n};\n\n/**\n Translate context based text\n Either pass in the context translation like `Context|Text to translate`\n or allow for dynamic text by doing passing in the context first & then the text to translate\n\n @param keyOrContext Can be either the key to translate including the context\n (eg. 'Context|Text') or just the context for the translation\n (eg. 'Context')\n @param key Is the dynamic variable you want to be translated\n @returns {String} Translated context based text\n**/\nconst pgettext = (keyOrContext, key) => {\n const normalizedKey = key ? `${keyOrContext}|${key}` : keyOrContext;\n const translated = gettext(normalizedKey).split('|');\n\n return translated[translated.length - 1];\n};\n\n/**\n Creates an instance of Intl.DateTimeFormat for the current locale.\n\n @param formatOptions for available options, please see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n @returns {Intl.DateTimeFormat}\n*/\nconst createDateTimeFormat =\n formatOptions => Intl.DateTimeFormat(languageCode(), formatOptions);\n\nexport { languageCode };\nexport { gettext as __ };\nexport { ngettext as n__ };\nexport { pgettext as s__ };\nexport { sprintf };\nexport { createDateTimeFormat };\nexport default locale;\n\n\n\n// WEBPACK FOOTER //\n// ./locale/index.js","export default function initLogoAnimation() {\n window.addEventListener('beforeunload', () => {\n $('.tanuki-logo').addClass('animate');\n });\n}\n\n\n\n// WEBPACK FOOTER //\n// ./logo.js","/* eslint-disable import/first */\n/* global ConfirmDangerModal */\n\nimport jQuery from 'jquery';\nimport Cookies from 'js-cookie';\nimport svg4everybody from 'svg4everybody';\n\n// expose common libraries as globals (TODO: remove these)\nwindow.jQuery = jQuery;\nwindow.$ = jQuery;\n\n// lib/utils\nimport { handleLocationHash, addSelectOnFocusBehaviour } from './lib/utils/common_utils';\nimport { localTimeAgo } from './lib/utils/datetime_utility';\nimport { getLocationHash, visitUrl } from './lib/utils/url_utility';\n\n// behaviors\nimport './behaviors/';\n\n// everything else\nimport loadAwardsHandler from './awards_handler';\nimport bp from './breakpoints';\nimport './confirm_danger_modal';\nimport Flash, { removeFlashClickListener } from './flash';\nimport './gl_dropdown';\nimport initTodoToggle from './header';\nimport initImporterStatus from './importer_status';\nimport initLayoutNav from './layout_nav';\nimport './feature_highlight/feature_highlight_options';\nimport LazyLoader from './lazy_loader';\nimport initLogoAnimation from './logo';\nimport './milestone_select';\nimport './projects_dropdown';\nimport './render_gfm';\nimport initBreadcrumbs from './breadcrumb';\n\nimport initDispatcher from './dispatcher';\n\n// inject test utilities if necessary\nif (process.env.NODE_ENV !== 'production' && gon && gon.test_env) {\n $.fx.off = true;\n import(/* webpackMode: \"eager\" */ './test_utils/');\n}\n\nsvg4everybody();\n\ndocument.addEventListener('beforeunload', () => {\n // Unbind scroll events\n $(document).off('scroll');\n // Close any open tooltips\n $('.has-tooltip, [data-toggle=\"tooltip\"]').tooltip('destroy');\n // Close any open popover\n $('[data-toggle=\"popover\"]').popover('destroy');\n});\n\nwindow.addEventListener('hashchange', handleLocationHash);\nwindow.addEventListener('load', function onLoad() {\n window.removeEventListener('load', onLoad, false);\n handleLocationHash();\n}, false);\n\ngl.lazyLoader = new LazyLoader({\n scrollContainer: window,\n observerNode: '#content-body',\n});\n\ndocument.addEventListener('DOMContentLoaded', () => {\n const $body = $('body');\n const $document = $(document);\n const $window = $(window);\n const $sidebarGutterToggle = $('.js-sidebar-toggle');\n let bootstrapBreakpoint = bp.getBreakpointSize();\n\n initBreadcrumbs();\n initLayoutNav();\n initImporterStatus();\n initTodoToggle();\n initLogoAnimation();\n\n // Set the default path for all cookies to GitLab's root directory\n Cookies.defaults.path = gon.relative_url_root || '/';\n\n // `hashchange` is not triggered when link target is already in window.location\n $body.on('click', 'a[href^=\"#\"]', function clickHashLinkCallback() {\n const href = this.getAttribute('href');\n if (href.substr(1) === getLocationHash()) {\n setTimeout(handleLocationHash, 1);\n }\n });\n\n if (bootstrapBreakpoint === 'xs') {\n const $rightSidebar = $('aside.right-sidebar, .layout-page');\n\n $rightSidebar\n .removeClass('right-sidebar-expanded')\n .addClass('right-sidebar-collapsed');\n }\n\n // prevent default action for disabled buttons\n $('.btn').click(function clickDisabledButtonCallback(e) {\n if ($(this).hasClass('disabled')) {\n e.preventDefault();\n e.stopImmediatePropagation();\n return false;\n }\n\n return true;\n });\n\n addSelectOnFocusBehaviour('.js-select-on-focus');\n\n $('.remove-row').on('ajax:success', function removeRowAjaxSuccessCallback() {\n $(this).tooltip('destroy')\n .closest('li')\n .fadeOut();\n });\n\n $('.js-remove-tr').on('ajax:before', function removeTRAjaxBeforeCallback() {\n $(this).hide();\n });\n\n $('.js-remove-tr').on('ajax:success', function removeTRAjaxSuccessCallback() {\n $(this).closest('tr').fadeOut();\n });\n\n // Initialize select2 selects\n $('select.select2').select2({\n width: 'resolve',\n dropdownAutoWidth: true,\n });\n\n // Close select2 on escape\n $('.js-select2').on('select2-close', () => {\n setTimeout(() => {\n $('.select2-container-active').removeClass('select2-container-active');\n $(':focus').blur();\n }, 1);\n });\n\n // Initialize tooltips\n $.fn.tooltip.Constructor.DEFAULTS.trigger = 'hover';\n $body.tooltip({\n selector: '.has-tooltip, [data-toggle=\"tooltip\"]',\n placement(tip, el) {\n return $(el).data('placement') || 'bottom';\n },\n });\n\n // Initialize popovers\n $body.popover({\n selector: '[data-toggle=\"popover\"]',\n trigger: 'focus',\n // set the viewport to the main content, excluding the navigation bar, so\n // the navigation can't overlap the popover\n viewport: '.layout-page',\n });\n\n // Form submitter\n $('.trigger-submit').on('change', function triggerSubmitCallback() {\n $(this).parents('form').submit();\n });\n\n localTimeAgo($('abbr.timeago, .js-timeago'), true);\n\n // Disable form buttons while a form is submitting\n $body.on('ajax:complete, ajax:beforeSend, submit', 'form', function ajaxCompleteCallback(e) {\n const $buttons = $('[type=\"submit\"], .js-disable-on-submit', this);\n switch (e.type) {\n case 'ajax:beforeSend':\n case 'submit':\n return $buttons.disable();\n default:\n return $buttons.enable();\n }\n });\n\n $(document).ajaxError((e, xhrObj) => {\n const ref = xhrObj.status;\n\n if (ref === 401) {\n Flash('您需要登录。');\n } else if (ref === 404 || ref === 500) {\n Flash('服务器端出现了错误。');\n }\n });\n\n // Commit show suppressed diff\n $document.on('click', '.diff-content .js-show-suppressed-diff', function showDiffCallback() {\n const $container = $(this).parent();\n $container.next('table').show();\n $container.remove();\n });\n\n $('.navbar-toggle').on('click', () => {\n $('.header-content').toggleClass('menu-expanded');\n gl.lazyLoader.loadCheck();\n });\n\n // Show/hide comments on diff\n $body.on('click', '.js-toggle-diff-comments', function toggleDiffCommentsCallback(e) {\n const $this = $(this);\n const notesHolders = $this.closest('.diff-file').find('.notes_holder');\n\n e.preventDefault();\n\n $this.toggleClass('active');\n\n if ($this.hasClass('active')) {\n notesHolders.show().find('.hide, .content').show();\n } else {\n notesHolders.hide().find('.content').hide();\n }\n\n $(document).trigger('toggle.comments');\n });\n\n $document.on('click', '.js-confirm-danger', (e) => {\n const btn = $(e.target);\n const form = btn.closest('form');\n const text = btn.data('confirmDangerMessage');\n e.preventDefault();\n\n // eslint-disable-next-line no-new\n new ConfirmDangerModal(form, text);\n });\n\n $document.on('breakpoint:change', (e, breakpoint) => {\n if (breakpoint === 'sm' || breakpoint === 'xs') {\n const $gutterIcon = $sidebarGutterToggle.find('i');\n if ($gutterIcon.hasClass('fa-angle-double-right')) {\n $sidebarGutterToggle.trigger('click');\n }\n }\n });\n\n function fitSidebarForSize() {\n const oldBootstrapBreakpoint = bootstrapBreakpoint;\n bootstrapBreakpoint = bp.getBreakpointSize();\n\n if (bootstrapBreakpoint !== oldBootstrapBreakpoint) {\n $document.trigger('breakpoint:change', [bootstrapBreakpoint]);\n }\n }\n\n $window.on('resize.app', fitSidebarForSize);\n\n loadAwardsHandler();\n\n $('form.filter-form').on('submit', function filterFormSubmitCallback(event) {\n const link = document.createElement('a');\n link.href = this.action;\n\n const action = `${this.action}${link.search === '' ? '?' : '&'}`;\n\n event.preventDefault();\n visitUrl(`${action}${$(this).serialize()}`);\n });\n\n const flashContainer = document.querySelector('.flash-container');\n\n if (flashContainer && flashContainer.children.length) {\n flashContainer.querySelectorAll('.flash-alert, .flash-notice, .flash-success').forEach((flashEl) => {\n removeFlashClickListener(flashEl);\n });\n }\n\n initDispatcher();\n});\n\n\n\n// WEBPACK FOOTER //\n// ./main.js","/* eslint-disable func-names, space-before-function-paren, wrap-iife, no-underscore-dangle, prefer-arrow-callback, max-len, one-var, one-var-declaration-per-line, no-unused-vars, object-shorthand, comma-dangle, no-else-return, no-self-compare, consistent-return, no-param-reassign, no-shadow */\n/* global Issuable */\n/* global ListMilestone */\nimport _ from 'underscore';\nimport axios from './lib/utils/axios_utils';\nimport { timeFor } from './lib/utils/datetime_utility';\n\nexport default class MilestoneSelect {\n constructor(currentProject, els, options = {}) {\n if (currentProject !== null) {\n this.currentProject = typeof currentProject === 'string' ? JSON.parse(currentProject) : currentProject;\n }\n\n this.init(els, options);\n }\n\n init(els, options) {\n let $els = $(els);\n\n if (!els) {\n $els = $('.js-milestone-select');\n }\n\n $els.each((i, dropdown) => {\n let collapsedSidebarLabelTemplate, milestoneLinkNoneTemplate, milestoneLinkTemplate, selectedMilestone, selectedMilestoneDefault;\n const $dropdown = $(dropdown);\n const projectId = $dropdown.data('projectId');\n const milestonesUrl = $dropdown.data('milestones');\n const issueUpdateURL = $dropdown.data('issueUpdate');\n const showNo = $dropdown.data('showNo');\n const showAny = $dropdown.data('showAny');\n const showMenuAbove = $dropdown.data('showMenuAbove');\n const showUpcoming = $dropdown.data('showUpcoming');\n const showStarted = $dropdown.data('showStarted');\n const useId = $dropdown.data('useId');\n const defaultLabel = $dropdown.data('defaultLabel');\n const defaultNo = $dropdown.data('defaultNo');\n const issuableId = $dropdown.data('issuableId');\n const abilityName = $dropdown.data('abilityName');\n const $selectBox = $dropdown.closest('.selectbox');\n const $block = $selectBox.closest('.block');\n const $sidebarCollapsedValue = $block.find('.sidebar-collapsed-icon');\n const $value = $block.find('.value');\n const $loading = $block.find('.block-loading').fadeOut();\n selectedMilestoneDefault = (showAny ? '' : null);\n selectedMilestoneDefault = (showNo && defaultNo ? 'No Milestone' : selectedMilestoneDefault);\n selectedMilestone = $dropdown.data('selected') || selectedMilestoneDefault;\n\n if (issueUpdateURL) {\n milestoneLinkTemplate = _.template('/milestones/<%- iid %>\" class=\"bold has-tooltip\" data-container=\"body\" title=\"<%- remaining %>\"><%- title %>');\n milestoneLinkNoneTemplate = 'None';\n collapsedSidebarLabelTemplate = _.template('
      <%- remaining %>\" data-placement=\"left\" data-html=\"true\"> <%- title %>
      ');\n }\n return $dropdown.glDropdown({\n showMenuAbove: showMenuAbove,\n data: (term, callback) => axios.get(milestonesUrl)\n .then(({ data }) => {\n const extraOptions = [];\n if (showAny) {\n extraOptions.push({\n id: 0,\n name: '',\n title: '所有里程碑'\n });\n }\n if (showNo) {\n extraOptions.push({\n id: -1,\n name: 'No Milestone',\n title: '无里程碑'\n });\n }\n if (showUpcoming) {\n extraOptions.push({\n id: -2,\n name: '#upcoming',\n title: '即将到来'\n });\n }\n if (showStarted) {\n extraOptions.push({\n id: -3,\n name: '#started',\n title: '已开始'\n });\n }\n if (extraOptions.length) {\n extraOptions.push('divider');\n }\n\n callback(extraOptions.concat(data));\n if (showMenuAbove) {\n $dropdown.data('glDropdown').positionMenuAbove();\n }\n $(`[data-milestone-id=\"${_.escape(selectedMilestone)}\"] > a`).addClass('is-active');\n }),\n renderRow: milestone => `\n
    • \n \n ${_.escape(milestone.title)}\n \n
    • \n `,\n filterable: true,\n search: {\n fields: ['title']\n },\n selectable: true,\n toggleLabel: (selected, el, e) => {\n if (selected && 'id' in selected && $(el).hasClass('is-active')) {\n return selected.title;\n } else {\n return defaultLabel;\n }\n },\n defaultLabel: defaultLabel,\n fieldName: $dropdown.data('fieldName'),\n text: milestone => _.escape(milestone.title),\n id: (milestone) => {\n if (!useId && !$dropdown.is('.js-issuable-form-dropdown')) {\n return milestone.name;\n } else {\n return milestone.id;\n }\n },\n hidden: () => {\n $selectBox.hide();\n // display:block overrides the hide-collapse rule\n return $value.css('display', '');\n },\n opened: (e) => {\n const $el = $(e.currentTarget);\n if ($dropdown.hasClass('js-issue-board-sidebar') || options.handleClick) {\n selectedMilestone = $dropdown[0].dataset.selected || selectedMilestoneDefault;\n }\n $('a.is-active', $el).removeClass('is-active');\n $(`[data-milestone-id=\"${_.escape(selectedMilestone)}\"] > a`, $el).addClass('is-active');\n },\n vue: $dropdown.hasClass('js-issue-board-sidebar'),\n clicked: (clickEvent) => {\n const { $el, e } = clickEvent;\n let selected = clickEvent.selectedObj;\n\n let data, boardsStore;\n if (!selected) return;\n\n if (options.handleClick) {\n e.preventDefault();\n options.handleClick(selected);\n return;\n }\n\n const page = $('body').attr('data-page');\n const isIssueIndex = page === 'projects:issues:index';\n const isMRIndex = (page === page && page === 'projects:merge_requests:index');\n const isSelecting = (selected.name !== selectedMilestone);\n selectedMilestone = isSelecting ? selected.name : selectedMilestoneDefault;\n\n if ($dropdown.hasClass('js-filter-bulk-update') || $dropdown.hasClass('js-issuable-form-dropdown')) {\n e.preventDefault();\n return;\n }\n\n if ($dropdown.closest('.add-issues-modal').length) {\n boardsStore = gl.issueBoards.ModalStore.store.filter;\n }\n\n if (boardsStore) {\n boardsStore[$dropdown.data('fieldName')] = selected.name;\n e.preventDefault();\n } else if ($dropdown.hasClass('js-filter-submit') && (isIssueIndex || isMRIndex)) {\n return Issuable.filterResults($dropdown.closest('form'));\n } else if ($dropdown.hasClass('js-filter-submit')) {\n return $dropdown.closest('form').submit();\n } else if ($dropdown.hasClass('js-issue-board-sidebar')) {\n if (selected.id !== -1 && isSelecting) {\n gl.issueBoards.boardStoreIssueSet('milestone', new ListMilestone({\n id: selected.id,\n title: selected.name\n }));\n } else {\n gl.issueBoards.boardStoreIssueDelete('milestone');\n }\n\n $dropdown.trigger('loading.gl.dropdown');\n $loading.removeClass('hidden').fadeIn();\n\n gl.issueBoards.BoardsStore.detail.issue.update($dropdown.attr('data-issue-update'))\n .then(() => {\n $dropdown.trigger('loaded.gl.dropdown');\n $loading.fadeOut();\n })\n .catch(() => {\n $loading.fadeOut();\n });\n } else {\n selected = $selectBox.find('input[type=\"hidden\"]').val();\n data = {};\n data[abilityName] = {};\n data[abilityName].milestone_id = selected != null ? selected : null;\n $loading.removeClass('hidden').fadeIn();\n $dropdown.trigger('loading.gl.dropdown');\n return axios.put(issueUpdateURL, data)\n .then(({ data }) => {\n $dropdown.trigger('loaded.gl.dropdown');\n $loading.fadeOut();\n $selectBox.hide();\n $value.css('display', '');\n if (data.milestone != null) {\n data.milestone.full_path = this.currentProject.full_path;\n data.milestone.remaining = timeFor(data.milestone.due_date);\n data.milestone.name = data.milestone.title;\n $value.html(milestoneLinkTemplate(data.milestone));\n return $sidebarCollapsedValue.find('span').html(collapsedSidebarLabelTemplate(data.milestone));\n } else {\n $value.html(milestoneLinkNoneTemplate);\n return $sidebarCollapsedValue.find('span').text('No');\n }\n })\n .catch(() => {\n $loading.fadeOut();\n });\n }\n }\n });\n });\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./milestone_select.js","/* eslint-disable func-names, no-var, object-shorthand, comma-dangle, prefer-arrow-callback */\n\n// MarkdownPreview\n//\n// Handles toggling the \"Write\" and \"Preview\" tab clicks, rendering the preview\n// (including the explanation of quick actions), and showing a warning when\n// more than `x` users are referenced.\n//\n\nimport axios from '~/lib/utils/axios_utils';\nimport flash from '~/flash';\nimport { __ } from '~/locale';\n\nvar lastTextareaPreviewed;\nvar lastTextareaHeight = null;\nvar markdownPreview;\nvar previewButtonSelector;\nvar writeButtonSelector;\n\nfunction MarkdownPreview() {}\n\n// Minimum number of users referenced before triggering a warning\nMarkdownPreview.prototype.referenceThreshold = 10;\nMarkdownPreview.prototype.emptyMessage = 'Nothing to preview.';\n\nMarkdownPreview.prototype.ajaxCache = {};\n\nMarkdownPreview.prototype.showPreview = function ($form) {\n var mdText;\n var preview = $form.find('.js-md-preview');\n var url = preview.data('url');\n if (preview.hasClass('md-preview-loading')) {\n return;\n }\n mdText = $form.find('textarea.markdown-area').val();\n\n if (mdText.trim().length === 0) {\n preview.text(this.emptyMessage);\n this.hideReferencedUsers($form);\n } else {\n preview.addClass('md-preview-loading').text('Loading...');\n this.fetchMarkdownPreview(mdText, url, (function (response) {\n var body;\n if (response.body.length > 0) {\n body = response.body;\n } else {\n body = this.emptyMessage;\n }\n\n preview.removeClass('md-preview-loading').html(body);\n preview.renderGFM();\n this.renderReferencedUsers(response.references.users, $form);\n\n if (response.references.commands) {\n this.renderReferencedCommands(response.references.commands, $form);\n }\n }).bind(this));\n }\n};\n\nMarkdownPreview.prototype.fetchMarkdownPreview = function (text, url, success) {\n if (!url) {\n return;\n }\n if (text === this.ajaxCache.text) {\n success(this.ajaxCache.response);\n return;\n }\n axios.post(url, {\n text,\n })\n .then(({ data }) => {\n this.ajaxCache = {\n text: text,\n response: data,\n };\n success(data);\n })\n .catch(() => flash(__('An error occurred while fetching markdown preview')));\n};\n\nMarkdownPreview.prototype.hideReferencedUsers = function ($form) {\n $form.find('.referenced-users').hide();\n};\n\nMarkdownPreview.prototype.renderReferencedUsers = function (users, $form) {\n var referencedUsers;\n referencedUsers = $form.find('.referenced-users');\n if (referencedUsers.length) {\n if (users.length >= this.referenceThreshold) {\n referencedUsers.show();\n referencedUsers.find('.js-referenced-users-count').text(users.length);\n } else {\n referencedUsers.hide();\n }\n }\n};\n\nMarkdownPreview.prototype.hideReferencedCommands = function ($form) {\n $form.find('.referenced-commands').hide();\n};\n\nMarkdownPreview.prototype.renderReferencedCommands = function (commands, $form) {\n var referencedCommands;\n referencedCommands = $form.find('.referenced-commands');\n if (commands.length > 0) {\n referencedCommands.html(commands);\n referencedCommands.show();\n } else {\n referencedCommands.html('');\n referencedCommands.hide();\n }\n};\n\nmarkdownPreview = new MarkdownPreview();\n\npreviewButtonSelector = '.js-md-preview-button';\nwriteButtonSelector = '.js-md-write-button';\nlastTextareaPreviewed = null;\nconst markdownToolbar = $('.md-header-toolbar');\n\n$.fn.setupMarkdownPreview = function () {\n var $form = $(this);\n $form.find('textarea.markdown-area').on('input', function () {\n markdownPreview.hideReferencedUsers($form);\n });\n};\n\n$(document).on('markdown-preview:show', function (e, $form) {\n if (!$form) {\n return;\n }\n\n lastTextareaPreviewed = $form.find('textarea.markdown-area');\n lastTextareaHeight = lastTextareaPreviewed.height();\n\n // toggle tabs\n $form.find(writeButtonSelector).parent().removeClass('active');\n $form.find(previewButtonSelector).parent().addClass('active');\n\n // toggle content\n $form.find('.md-write-holder').hide();\n $form.find('.md-preview-holder').show();\n markdownToolbar.removeClass('active');\n markdownPreview.showPreview($form);\n});\n\n$(document).on('markdown-preview:hide', function (e, $form) {\n if (!$form) {\n return;\n }\n lastTextareaPreviewed = null;\n\n if (lastTextareaHeight) {\n $form.find('textarea.markdown-area').height(lastTextareaHeight);\n }\n\n // toggle tabs\n $form.find(writeButtonSelector).parent().addClass('active');\n $form.find(previewButtonSelector).parent().removeClass('active');\n\n // toggle content\n $form.find('.md-write-holder').show();\n $form.find('textarea.markdown-area').focus();\n $form.find('.md-preview-holder').hide();\n markdownToolbar.addClass('active');\n\n markdownPreview.hideReferencedCommands($form);\n});\n\n$(document).on('markdown-preview:toggle', function (e, keyboardEvent) {\n var $target;\n $target = $(keyboardEvent.target);\n if ($target.is('textarea.markdown-area')) {\n $(document).triggerHandler('markdown-preview:show', [$target.closest('form')]);\n keyboardEvent.preventDefault();\n } else if (lastTextareaPreviewed) {\n $target = lastTextareaPreviewed;\n $(document).triggerHandler('markdown-preview:hide', [$target.closest('form')]);\n keyboardEvent.preventDefault();\n }\n});\n\n$(document).on('click', previewButtonSelector, function (e) {\n var $form;\n e.preventDefault();\n $form = $(this).closest('form');\n $(document).triggerHandler('markdown-preview:show', [$form]);\n});\n\n$(document).on('click', writeButtonSelector, function (e) {\n var $form;\n e.preventDefault();\n $form = $(this).closest('form');\n $(document).triggerHandler('markdown-preview:hide', [$form]);\n});\n\nexport default MarkdownPreview;\n\n\n\n// WEBPACK FOOTER //\n// ./preview_markdown.js","\n\n\n\n\n\n// WEBPACK FOOTER //\n// projects_dropdown/components/projects_list_item.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('li',{staticClass:\"projects-list-item-container\"},[_c('a',{staticClass:\"clearfix\",attrs:{\"href\":_vm.webUrl}},[_c('div',{staticClass:\"project-item-avatar-container\"},[(_vm.hasAvatar)?_c('img',{staticClass:\"avatar s32\",attrs:{\"src\":_vm.avatarUrl}}):_c('identicon',{attrs:{\"size-class\":\"s32\",\"entity-id\":_vm.projectId,\"entity-name\":_vm.projectName}})],1),_vm._v(\" \"),_c('div',{staticClass:\"project-item-metadata-container\"},[_c('div',{staticClass:\"project-title\",attrs:{\"title\":_vm.projectName},domProps:{\"innerHTML\":_vm._s(_vm.highlightedProjectName)}}),_vm._v(\" \"),_c('div',{staticClass:\"project-namespace\",attrs:{\"title\":_vm.namespace}},[_vm._v(_vm._s(_vm.truncatedNamespace))])])])])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }\n\n\n//////////////////\n// WEBPACK FOOTER\n// /opt/gitlab/embedded/service/gitlab-rails/node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-809bd0d0\",\"hasScoped\":false,\"buble\":{\"transforms\":{}}}!/opt/gitlab/embedded/service/gitlab-rails/node_modules/vue-loader/lib/selector.js?type=template&index=0!./projects_dropdown/components/projects_list_item.vue\n// module id = null\n// module chunks = ","/* script */\nexport * from \"!!babel-loader!../../../../../node_modules/vue-loader/lib/selector?type=script&index=0!./projects_list_item.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../../../node_modules/vue-loader/lib/selector?type=script&index=0!./projects_list_item.vue\"\n/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-809bd0d0\\\",\\\"hasScoped\\\":false,\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../../../node_modules/vue-loader/lib/selector?type=template&index=0!./projects_list_item.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./projects_dropdown/components/projects_list_item.vue\n// module id = null\n// module chunks = ","\n\n\n\n\n\n// WEBPACK FOOTER //\n// projects_dropdown/components/projects_list_frequent.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"projects-list-frequent-container\"},[_c('ul',{staticClass:\"list-unstyled\"},[(_vm.isListEmpty)?_c('li',{staticClass:\"section-empty\"},[_vm._v(\"\\n \"+_vm._s(_vm.listEmptyMessage)+\"\\n \")]):_vm._l((_vm.projects),function(project,index){return _c('projects-list-item',{key:index,attrs:{\"project-id\":project.id,\"project-name\":project.name,\"namespace\":project.namespace,\"web-url\":project.webUrl,\"avatar-url\":project.avatarUrl}})})],2)])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }\n\n\n//////////////////\n// WEBPACK FOOTER\n// /opt/gitlab/embedded/service/gitlab-rails/node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-16d7450a\",\"hasScoped\":false,\"buble\":{\"transforms\":{}}}!/opt/gitlab/embedded/service/gitlab-rails/node_modules/vue-loader/lib/selector.js?type=template&index=0!./projects_dropdown/components/projects_list_frequent.vue\n// module id = null\n// module chunks = ","/* script */\nexport * from \"!!babel-loader!../../../../../node_modules/vue-loader/lib/selector?type=script&index=0!./projects_list_frequent.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../../../node_modules/vue-loader/lib/selector?type=script&index=0!./projects_list_frequent.vue\"\n/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-16d7450a\\\",\\\"hasScoped\\\":false,\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../../../node_modules/vue-loader/lib/selector?type=template&index=0!./projects_list_frequent.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./projects_dropdown/components/projects_list_frequent.vue\n// module id = null\n// module chunks = ","\n\n\n\n\n\n// WEBPACK FOOTER //\n// projects_dropdown/components/projects_list_search.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"projects-list-search-container\"},[_c('ul',{staticClass:\"list-unstyled\"},[(_vm.isListEmpty)?_c('li',{staticClass:\"section-empty\",class:{ 'section-failure': _vm.searchFailed }},[_vm._v(\"\\n \"+_vm._s(_vm.listEmptyMessage)+\"\\n \")]):_vm._l((_vm.projects),function(project,index){return _c('projects-list-item',{key:index,attrs:{\"project-id\":project.id,\"project-name\":project.name,\"namespace\":project.namespace,\"web-url\":project.webUrl,\"avatar-url\":project.avatarUrl,\"matcher\":_vm.matcher}})})],2)])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }\n\n\n//////////////////\n// WEBPACK FOOTER\n// /opt/gitlab/embedded/service/gitlab-rails/node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-8cb67a3a\",\"hasScoped\":false,\"buble\":{\"transforms\":{}}}!/opt/gitlab/embedded/service/gitlab-rails/node_modules/vue-loader/lib/selector.js?type=template&index=0!./projects_dropdown/components/projects_list_search.vue\n// module id = null\n// module chunks = ","/* script */\nexport * from \"!!babel-loader!../../../../../node_modules/vue-loader/lib/selector?type=script&index=0!./projects_list_search.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../../../node_modules/vue-loader/lib/selector?type=script&index=0!./projects_list_search.vue\"\n/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-8cb67a3a\\\",\\\"hasScoped\\\":false,\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../../../node_modules/vue-loader/lib/selector?type=template&index=0!./projects_list_search.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./projects_dropdown/components/projects_list_search.vue\n// module id = null\n// module chunks = ","\n\n\n\n\n\n// WEBPACK FOOTER //\n// projects_dropdown/components/search.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"search-input-container hidden-xs\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.searchQuery),expression:\"searchQuery\"}],ref:\"search\",staticClass:\"form-control\",attrs:{\"type\":\"search\",\"placeholder\":_vm.s__('ProjectsDropdown|Search your projects')},domProps:{\"value\":(_vm.searchQuery)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.searchQuery=$event.target.value}}}),_vm._v(\" \"),(!_vm.searchQuery)?_c('i',{staticClass:\"search-icon fa fa-fw fa-search\",attrs:{\"aria-hidden\":\"true\"}}):_vm._e()])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }\n\n\n//////////////////\n// WEBPACK FOOTER\n// /opt/gitlab/embedded/service/gitlab-rails/node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-93d44b6e\",\"hasScoped\":false,\"buble\":{\"transforms\":{}}}!/opt/gitlab/embedded/service/gitlab-rails/node_modules/vue-loader/lib/selector.js?type=template&index=0!./projects_dropdown/components/search.vue\n// module id = null\n// module chunks = ","/* script */\nexport * from \"!!babel-loader!../../../../../node_modules/vue-loader/lib/selector?type=script&index=0!./search.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../../../node_modules/vue-loader/lib/selector?type=script&index=0!./search.vue\"\n/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-93d44b6e\\\",\\\"hasScoped\\\":false,\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../../../node_modules/vue-loader/lib/selector?type=template&index=0!./search.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./projects_dropdown/components/search.vue\n// module id = null\n// module chunks = ","\n\n\n\n\n\n// WEBPACK FOOTER //\n// projects_dropdown/components/app.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('search'),_vm._v(\" \"),(_vm.isLoadingProjects)?_c('loading-icon',{staticClass:\"loading-animation prepend-top-20\",attrs:{\"size\":\"2\",\"label\":_vm.s__('ProjectsDropdown|Loading projects')}}):_vm._e(),_vm._v(\" \"),(_vm.isFrequentsListVisible)?_c('div',{staticClass:\"section-header\"},[_vm._v(\"\\n \"+_vm._s(_vm.s__('ProjectsDropdown|Frequently visited'))+\"\\n \")]):_vm._e(),_vm._v(\" \"),(_vm.isFrequentsListVisible)?_c('projects-list-frequent',{attrs:{\"local-storage-failed\":_vm.isLocalStorageFailed,\"projects\":_vm.frequentProjects}}):_vm._e(),_vm._v(\" \"),(_vm.isSearchListVisible)?_c('projects-list-search',{attrs:{\"search-failed\":_vm.isSearchFailed,\"matcher\":_vm.searchQuery,\"projects\":_vm.searchProjects}}):_vm._e()],1)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }\n\n\n//////////////////\n// WEBPACK FOOTER\n// /opt/gitlab/embedded/service/gitlab-rails/node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-20d5e68f\",\"hasScoped\":false,\"buble\":{\"transforms\":{}}}!/opt/gitlab/embedded/service/gitlab-rails/node_modules/vue-loader/lib/selector.js?type=template&index=0!./projects_dropdown/components/app.vue\n// module id = null\n// module chunks = ","/* script */\nexport * from \"!!babel-loader!../../../../../node_modules/vue-loader/lib/selector?type=script&index=0!./app.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../../../node_modules/vue-loader/lib/selector?type=script&index=0!./app.vue\"\n/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-20d5e68f\\\",\\\"hasScoped\\\":false,\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../../../node_modules/vue-loader/lib/selector?type=template&index=0!./app.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./projects_dropdown/components/app.vue\n// module id = null\n// module chunks = ","import Vue from 'vue';\n\nexport default new Vue();\n\n\n\n// WEBPACK FOOTER //\n// ./projects_dropdown/event_hub.js","import Vue from 'vue';\n\nimport Translate from '../vue_shared/translate';\nimport eventHub from './event_hub';\nimport ProjectsService from './service/projects_service';\nimport ProjectsStore from './store/projects_store';\n\nimport projectsDropdownApp from './components/app.vue';\n\nVue.use(Translate);\n\ndocument.addEventListener('DOMContentLoaded', () => {\n const el = document.getElementById('js-projects-dropdown');\n const navEl = document.getElementById('nav-projects-dropdown');\n\n // Don't do anything if element doesn't exist (No projects dropdown)\n // This is for when the user accesses GitLab without logging in\n if (!el || !navEl) {\n return;\n }\n\n $(navEl).on('shown.bs.dropdown', () => {\n eventHub.$emit('dropdownOpen');\n });\n\n // eslint-disable-next-line no-new\n new Vue({\n el,\n components: {\n projectsDropdownApp,\n },\n data() {\n const dataset = this.$options.el.dataset;\n const store = new ProjectsStore();\n const service = new ProjectsService(dataset.userName);\n\n const project = {\n id: Number(dataset.projectId),\n name: dataset.projectName,\n namespace: dataset.projectNamespace,\n webUrl: dataset.projectWebUrl,\n avatarUrl: dataset.projectAvatarUrl || null,\n lastAccessedOn: Date.now(),\n };\n\n return {\n store,\n service,\n state: store.state,\n currentUserName: dataset.userName,\n currentProject: project,\n };\n },\n render(createElement) {\n return createElement('projects-dropdown-app', {\n props: {\n currentUserName: this.currentUserName,\n currentProject: this.currentProject,\n store: this.store,\n service: this.service,\n },\n });\n },\n });\n});\n\n\n\n// WEBPACK FOOTER //\n// ./projects_dropdown/index.js","export const FREQUENT_PROJECTS = {\n MAX_COUNT: 20,\n LIST_COUNT_DESKTOP: 5,\n LIST_COUNT_MOBILE: 3,\n ELIGIBLE_FREQUENCY: 3,\n};\n\nexport const HOUR_IN_MS = 3600000;\n\nexport const STORAGE_KEY = 'frequent-projects';\n\n\n\n// WEBPACK FOOTER //\n// ./projects_dropdown/constants.js","import _ from 'underscore';\nimport Vue from 'vue';\nimport VueResource from 'vue-resource';\n\nimport bp from '../../breakpoints';\nimport Api from '../../api';\nimport AccessorUtilities from '../../lib/utils/accessor';\n\nimport { FREQUENT_PROJECTS, HOUR_IN_MS, STORAGE_KEY } from '../constants';\n\nVue.use(VueResource);\n\nexport default class ProjectsService {\n constructor(currentUserName) {\n this.isLocalStorageAvailable = AccessorUtilities.isLocalStorageAccessSafe();\n this.currentUserName = currentUserName;\n this.storageKey = `${this.currentUserName}/${STORAGE_KEY}`;\n this.projectsPath = Vue.resource(Api.buildUrl(Api.projectsPath));\n }\n\n getSearchedProjects(searchQuery) {\n return this.projectsPath.get({\n simple: true,\n per_page: 20,\n membership: !!gon.current_user_id,\n order_by: 'last_activity_at',\n search: searchQuery,\n });\n }\n\n getFrequentProjects() {\n if (this.isLocalStorageAvailable) {\n return this.getTopFrequentProjects();\n }\n return null;\n }\n\n logProjectAccess(project) {\n let matchFound = false;\n let storedFrequentProjects;\n\n if (this.isLocalStorageAvailable) {\n const storedRawProjects = localStorage.getItem(this.storageKey);\n\n // Check if there's any frequent projects list set\n if (!storedRawProjects) {\n // No frequent projects list set, set one up.\n storedFrequentProjects = [];\n storedFrequentProjects.push({ ...project, frequency: 1 });\n } else {\n // Check if project is already present in frequents list\n // When found, update metadata of it.\n storedFrequentProjects = JSON.parse(storedRawProjects).map((projectItem) => {\n if (projectItem.id === project.id) {\n matchFound = true;\n const diff = Math.abs(project.lastAccessedOn - projectItem.lastAccessedOn) / HOUR_IN_MS;\n const updatedProject = {\n ...project,\n frequency: projectItem.frequency,\n lastAccessedOn: projectItem.lastAccessedOn,\n };\n\n // Check if duration since last access of this project\n // is over an hour\n if (diff > 1) {\n return {\n ...updatedProject,\n frequency: updatedProject.frequency + 1,\n lastAccessedOn: Date.now(),\n };\n }\n\n return {\n ...updatedProject,\n };\n }\n\n return projectItem;\n });\n\n // Check whether currently logged project is present in frequents list\n if (!matchFound) {\n // We always keep size of frequents collection to 20 projects\n // out of which only 5 projects with\n // highest value of `frequency` and most recent `lastAccessedOn`\n // are shown in projects dropdown\n if (storedFrequentProjects.length === FREQUENT_PROJECTS.MAX_COUNT) {\n storedFrequentProjects.shift(); // Remove an item from head of array\n }\n\n storedFrequentProjects.push({ ...project, frequency: 1 });\n }\n }\n\n localStorage.setItem(this.storageKey, JSON.stringify(storedFrequentProjects));\n }\n }\n\n getTopFrequentProjects() {\n const storedFrequentProjects = JSON.parse(localStorage.getItem(this.storageKey));\n let frequentProjectsCount = FREQUENT_PROJECTS.LIST_COUNT_DESKTOP;\n\n if (!storedFrequentProjects) {\n return [];\n }\n\n if (bp.getBreakpointSize() === 'sm' ||\n bp.getBreakpointSize() === 'xs') {\n frequentProjectsCount = FREQUENT_PROJECTS.LIST_COUNT_MOBILE;\n }\n\n const frequentProjects = storedFrequentProjects\n .filter(project => project.frequency >= FREQUENT_PROJECTS.ELIGIBLE_FREQUENCY);\n\n // Sort all frequent projects in decending order of frequency\n // and then by lastAccessedOn with recent most first\n frequentProjects.sort((projectA, projectB) => {\n if (projectA.frequency < projectB.frequency) {\n return 1;\n } else if (projectA.frequency > projectB.frequency) {\n return -1;\n } else if (projectA.lastAccessedOn < projectB.lastAccessedOn) {\n return 1;\n } else if (projectA.lastAccessedOn > projectB.lastAccessedOn) {\n return -1;\n }\n\n return 0;\n });\n\n return _.first(frequentProjects, frequentProjectsCount);\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./projects_dropdown/service/projects_service.js","export default class ProjectsStore {\n constructor() {\n this.state = {};\n this.state.frequentProjects = [];\n this.state.searchedProjects = [];\n }\n\n setFrequentProjects(rawProjects) {\n this.state.frequentProjects = rawProjects;\n }\n\n getFrequentProjects() {\n return this.state.frequentProjects;\n }\n\n setSearchedProjects(rawProjects) {\n this.state.searchedProjects = rawProjects.map(rawProject => ({\n id: rawProject.id,\n name: rawProject.name,\n namespace: rawProject.name_with_namespace,\n webUrl: rawProject.web_url,\n avatarUrl: rawProject.avatar_url,\n }));\n }\n\n getSearchedProjects() {\n return this.state.searchedProjects;\n }\n\n clearSearchedProjects() {\n this.state.searchedProjects = [];\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./projects_dropdown/store/projects_store.js","import renderMath from './render_math';\nimport renderMermaid from './render_mermaid';\nimport syntaxHighlight from './syntax_highlight';\n\n// Render Gitlab flavoured Markdown\n//\n// Delegates to syntax highlight and render math & mermaid diagrams.\n//\n$.fn.renderGFM = function renderGFM() {\n syntaxHighlight(this.find('.js-syntax-highlight'));\n renderMath(this.find('.js-render-math'));\n renderMermaid(this.find('.js-render-mermaid'));\n return this;\n};\n\n$(() => $('body').renderGFM());\n\n\n\n// WEBPACK FOOTER //\n// ./render_gfm.js","import { __ } from './locale';\nimport flash from './flash';\n\n// Renders math using KaTeX in any element with the\n// `js-render-math` class\n//\n// ### Example Markup\n//\n// \n//\n\n// Loop over all math elements and render math\nfunction renderWithKaTeX(elements, katex) {\n elements.each(function katexElementsLoop() {\n const mathNode = $('');\n const $this = $(this);\n\n const display = $this.attr('data-math-style') === 'display';\n try {\n katex.render($this.text(), mathNode.get(0), { displayMode: display, throwOnError: false });\n mathNode.insertAfter($this);\n $this.remove();\n } catch (err) {\n throw err;\n }\n });\n}\n\nexport default function renderMath($els) {\n if (!$els.length) return;\n Promise.all([\n import(/* webpackChunkName: 'katex' */ 'katex'),\n import(/* webpackChunkName: 'katex' */ 'katex/dist/katex.css'),\n ]).then(([katex]) => {\n renderWithKaTeX($els, katex);\n }).catch(() => flash(__('An error occurred while rendering KaTeX')));\n}\n\n\n\n// WEBPACK FOOTER //\n// ./render_math.js","// Renders diagrams and flowcharts from text using Mermaid in any element with the\n// `js-render-mermaid` class.\n//\n// Example markup:\n//\n//
      \n//  graph TD;\n//    A-- > B;\n//    A-- > C;\n//    B-- > D;\n//    C-- > D;\n// 
      \n//\n\nimport Flash from './flash';\n\nexport default function renderMermaid($els) {\n if (!$els.length) return;\n\n import(/* webpackChunkName: 'mermaid' */ 'blackst0ne-mermaid').then((mermaid) => {\n mermaid.initialize({\n // mermaid core options\n mermaid: {\n startOnLoad: false,\n },\n // mermaidAPI options\n theme: 'neutral',\n });\n\n $els.each((i, el) => {\n const source = el.textContent;\n\n // Remove any extra spans added by the backend syntax highlighting.\n Object.assign(el, { textContent: source });\n\n mermaid.init(undefined, el, (id) => {\n const svg = document.getElementById(id);\n\n svg.classList.add('mermaid');\n\n // pre > code > svg\n svg.closest('pre').replaceWith(svg);\n\n // We need to add the original source into the DOM to allow Copy-as-GFM\n // to access it.\n const sourceEl = document.createElement('text');\n sourceEl.classList.add('source');\n sourceEl.setAttribute('display', 'none');\n sourceEl.textContent = source;\n\n svg.appendChild(sourceEl);\n });\n });\n }).catch((err) => {\n Flash(`Can't load mermaid module: ${err}`);\n });\n}\n\n\n\n// WEBPACK FOOTER //\n// ./render_mermaid.js","/* eslint-disable no-return-assign, one-var, no-var, no-underscore-dangle, one-var-declaration-per-line, no-unused-vars, no-cond-assign, consistent-return, object-shorthand, prefer-arrow-callback, func-names, space-before-function-paren, prefer-template, quotes, class-methods-use-this, no-sequences, wrap-iife, no-lonely-if, no-else-return, no-param-reassign, vars-on-top, max-len */\nimport axios from './lib/utils/axios_utils';\nimport DropdownUtils from './filtered_search/dropdown_utils';\nimport { isInGroupsPage, isInProjectPage, getGroupSlug, getProjectSlug } from './lib/utils/common_utils';\n\n/**\n * Search input in top navigation bar.\n * On click, opens a dropdown\n * As the user types it filters the results\n * When the user clicks `x` button it cleans the input and closes the dropdown.\n */\n\nconst KEYCODE = {\n ESCAPE: 27,\n BACKSPACE: 8,\n ENTER: 13,\n UP: 38,\n DOWN: 40,\n};\n\nfunction setSearchOptions() {\n var $projectOptionsDataEl = $('.js-search-project-options');\n var $groupOptionsDataEl = $('.js-search-group-options');\n var $dashboardOptionsDataEl = $('.js-search-dashboard-options');\n\n if ($projectOptionsDataEl.length) {\n gl.projectOptions = gl.projectOptions || {};\n\n var projectPath = $projectOptionsDataEl.data('projectPath');\n\n gl.projectOptions[projectPath] = {\n name: $projectOptionsDataEl.data('name'),\n issuesPath: $projectOptionsDataEl.data('issuesPath'),\n issuesDisabled: $projectOptionsDataEl.data('issuesDisabled'),\n mrPath: $projectOptionsDataEl.data('mrPath'),\n };\n }\n\n if ($groupOptionsDataEl.length) {\n gl.groupOptions = gl.groupOptions || {};\n\n var groupPath = $groupOptionsDataEl.data('groupPath');\n\n gl.groupOptions[groupPath] = {\n name: $groupOptionsDataEl.data('name'),\n issuesPath: $groupOptionsDataEl.data('issuesPath'),\n mrPath: $groupOptionsDataEl.data('mrPath'),\n };\n }\n\n if ($dashboardOptionsDataEl.length) {\n gl.dashboardOptions = {\n issuesPath: $dashboardOptionsDataEl.data('issuesPath'),\n mrPath: $dashboardOptionsDataEl.data('mrPath'),\n };\n }\n}\n\nexport default class SearchAutocomplete {\n constructor({ wrap, optsEl, autocompletePath, projectId, projectRef } = {}) {\n setSearchOptions();\n this.bindEventContext();\n this.wrap = wrap || $('.search');\n this.optsEl = optsEl || this.wrap.find('.search-autocomplete-opts');\n this.autocompletePath = autocompletePath || this.optsEl.data('autocompletePath');\n this.projectId = projectId || (this.optsEl.data('autocompleteProjectId') || '');\n this.projectRef = projectRef || (this.optsEl.data('autocompleteProjectRef') || '');\n this.dropdown = this.wrap.find('.dropdown');\n this.dropdownToggle = this.wrap.find('.js-dropdown-search-toggle');\n this.dropdownContent = this.dropdown.find('.dropdown-content');\n this.locationBadgeEl = this.getElement('.location-badge');\n this.scopeInputEl = this.getElement('#scope');\n this.searchInput = this.getElement('.search-input');\n this.projectInputEl = this.getElement('#search_project_id');\n this.groupInputEl = this.getElement('#group_id');\n this.searchCodeInputEl = this.getElement('#search_code');\n this.repositoryInputEl = this.getElement('#repository_ref');\n this.clearInput = this.getElement('.js-clear-input');\n this.saveOriginalState();\n\n // Only when user is logged in\n if (gon.current_user_id) {\n this.createAutocomplete();\n }\n\n this.searchInput.addClass('disabled');\n this.saveTextLength();\n this.bindEvents();\n this.dropdownToggle.dropdown();\n }\n\n // Finds an element inside wrapper element\n bindEventContext() {\n this.onSearchInputBlur = this.onSearchInputBlur.bind(this);\n this.onClearInputClick = this.onClearInputClick.bind(this);\n this.onSearchInputFocus = this.onSearchInputFocus.bind(this);\n this.onSearchInputKeyUp = this.onSearchInputKeyUp.bind(this);\n this.onSearchInputKeyDown = this.onSearchInputKeyDown.bind(this);\n }\n getElement(selector) {\n return this.wrap.find(selector);\n }\n\n saveOriginalState() {\n return this.originalState = this.serializeState();\n }\n\n saveTextLength() {\n return this.lastTextLength = this.searchInput.val().length;\n }\n\n createAutocomplete() {\n return this.searchInput.glDropdown({\n filterInputBlur: false,\n filterable: true,\n filterRemote: true,\n highlight: true,\n enterCallback: false,\n filterInput: 'input#search',\n search: {\n fields: ['text'],\n },\n id: this.getSearchText,\n data: this.getData.bind(this),\n selectable: true,\n clicked: this.onClick.bind(this),\n });\n }\n\n getSearchText(selectedObject, el) {\n return selectedObject.id ? selectedObject.text : '';\n }\n\n getData(term, callback) {\n if (!term) {\n const contents = this.getCategoryContents();\n if (contents) {\n this.searchInput.data('glDropdown').filter.options.callback(contents);\n this.enableAutocomplete();\n }\n return;\n }\n\n // Prevent multiple ajax calls\n if (this.loadingSuggestions) {\n return;\n }\n\n this.loadingSuggestions = true;\n\n return axios.get(this.autocompletePath, {\n params: {\n project_id: this.projectId,\n project_ref: this.projectRef,\n term: term,\n },\n }).then((response) => {\n // Hide dropdown menu if no suggestions returns\n if (!response.data.length) {\n this.disableAutocomplete();\n return;\n }\n\n const data = [];\n // List results\n let firstCategory = true;\n let lastCategory;\n for (let i = 0, len = response.data.length; i < len; i += 1) {\n const suggestion = response.data[i];\n // Add group header before list each group\n if (lastCategory !== suggestion.category) {\n if (!firstCategory) {\n data.push('separator');\n }\n if (firstCategory) {\n firstCategory = false;\n }\n data.push({\n header: suggestion.category,\n });\n lastCategory = suggestion.category;\n }\n data.push({\n id: `${suggestion.category.toLowerCase()}-${suggestion.id}`,\n category: suggestion.category,\n text: suggestion.label,\n url: suggestion.url,\n });\n }\n // Add option to proceed with the search\n if (data.length) {\n data.push('separator');\n data.push({\n text: `Result name contains \"${term}\"`,\n url: `/search?search=${term}&project_id=${this.projectInputEl.val()}&group_id=${this.groupInputEl.val()}`,\n });\n }\n\n callback(data);\n\n this.loadingSuggestions = false;\n }).catch(() => {\n this.loadingSuggestions = false;\n });\n }\n\n getCategoryContents() {\n const userId = gon.current_user_id;\n const userName = gon.current_username;\n const { projectOptions, groupOptions, dashboardOptions } = gl;\n\n // Get options\n let options;\n if (isInGroupsPage() && groupOptions) {\n options = groupOptions[getGroupSlug()];\n } else if (isInProjectPage() && projectOptions) {\n options = projectOptions[getProjectSlug()];\n } else if (dashboardOptions) {\n options = dashboardOptions;\n }\n\n const { issuesPath, mrPath, name, issuesDisabled } = options;\n const baseItems = [];\n\n if (name) {\n baseItems.push({\n header: `${name}`,\n });\n }\n\n const issueItems = [\n {\n text: 'Issues assigned to me',\n url: `${issuesPath}/?assignee_username=${userName}`,\n },\n {\n text: \"Issues I've created\",\n url: `${issuesPath}/?author_username=${userName}`,\n },\n ];\n const mergeRequestItems = [\n {\n text: 'Merge requests assigned to me',\n url: `${mrPath}/?assignee_username=${userName}`,\n },\n {\n text: \"Merge requests I've created\",\n url: `${mrPath}/?author_username=${userName}`,\n },\n ];\n\n let items;\n if (issuesDisabled) {\n items = baseItems.concat(mergeRequestItems);\n } else {\n items = baseItems.concat(...issueItems, 'separator', ...mergeRequestItems);\n }\n return items;\n }\n\n serializeState() {\n return {\n // Search Criteria\n search_project_id: this.projectInputEl.val(),\n group_id: this.groupInputEl.val(),\n search_code: this.searchCodeInputEl.val(),\n repository_ref: this.repositoryInputEl.val(),\n scope: this.scopeInputEl.val(),\n // Location badge\n _location: this.locationBadgeEl.text(),\n };\n }\n\n bindEvents() {\n this.searchInput.on('keydown', this.onSearchInputKeyDown);\n this.searchInput.on('keyup', this.onSearchInputKeyUp);\n this.searchInput.on('focus', this.onSearchInputFocus);\n this.searchInput.on('blur', this.onSearchInputBlur);\n this.clearInput.on('click', this.onClearInputClick);\n this.locationBadgeEl.on('click', () => this.searchInput.focus());\n }\n\n enableAutocomplete() {\n // No need to enable anything if user is not logged in\n if (!gon.current_user_id) {\n return;\n }\n\n // If the dropdown is closed, we'll open it\n if (!this.dropdown.hasClass('open')) {\n this.loadingSuggestions = false;\n this.dropdownToggle.dropdown('toggle');\n return this.searchInput.removeClass('disabled');\n }\n }\n\n // Saves last length of the entered text\n onSearchInputKeyDown() {\n return this.saveTextLength();\n }\n\n onSearchInputKeyUp(e) {\n switch (e.keyCode) {\n case KEYCODE.BACKSPACE:\n // when trying to remove the location badge\n if (this.lastTextLength === 0 && this.badgePresent()) {\n this.removeLocationBadge();\n }\n // When removing the last character and no badge is present\n if (this.lastTextLength === 1) {\n this.disableAutocomplete();\n }\n // When removing any character from existin value\n if (this.lastTextLength > 1) {\n this.enableAutocomplete();\n }\n break;\n case KEYCODE.ESCAPE:\n this.restoreOriginalState();\n break;\n case KEYCODE.ENTER:\n this.disableAutocomplete();\n break;\n case KEYCODE.UP:\n case KEYCODE.DOWN:\n return;\n default:\n // Handle the case when deleting the input value other than backspace\n // e.g. Pressing ctrl + backspace or ctrl + x\n if (this.searchInput.val() === '') {\n this.disableAutocomplete();\n } else {\n // We should display the menu only when input is not empty\n if (e.keyCode !== KEYCODE.ENTER) {\n this.enableAutocomplete();\n }\n }\n }\n this.wrap.toggleClass('has-value', !!e.target.value);\n }\n\n onSearchInputFocus() {\n this.isFocused = true;\n this.wrap.addClass('search-active');\n if (this.getValue() === '') {\n return this.getData();\n }\n }\n\n getValue() {\n return this.searchInput.val();\n }\n\n onClearInputClick(e) {\n e.preventDefault();\n this.wrap.toggleClass('has-value', !!e.target.value);\n return this.searchInput.val('').focus();\n }\n\n onSearchInputBlur(e) {\n this.isFocused = false;\n this.wrap.removeClass('search-active');\n // If input is blank then restore state\n if (this.searchInput.val() === '') {\n return this.restoreOriginalState();\n }\n }\n\n addLocationBadge(item) {\n var badgeText, category, value;\n category = item.category != null ? item.category + \": \" : '';\n value = item.value != null ? item.value : '';\n badgeText = \"\" + category + value;\n this.locationBadgeEl.text(badgeText).show();\n return this.wrap.addClass('has-location-badge');\n }\n\n hasLocationBadge() {\n return this.wrap.is('.has-location-badge');\n }\n\n restoreOriginalState() {\n var i, input, inputs, len;\n inputs = Object.keys(this.originalState);\n for (i = 0, len = inputs.length; i < len; i += 1) {\n input = inputs[i];\n this.getElement(\"#\" + input).val(this.originalState[input]);\n }\n if (this.originalState._location === '') {\n return this.locationBadgeEl.hide();\n } else {\n return this.addLocationBadge({\n value: this.originalState._location,\n });\n }\n }\n\n badgePresent() {\n return this.locationBadgeEl.length;\n }\n\n resetSearchState() {\n var i, input, inputs, len, results;\n inputs = Object.keys(this.originalState);\n results = [];\n for (i = 0, len = inputs.length; i < len; i += 1) {\n input = inputs[i];\n // _location isnt a input\n if (input === '_location') {\n break;\n }\n results.push(this.getElement(\"#\" + input).val(''));\n }\n return results;\n }\n\n removeLocationBadge() {\n this.locationBadgeEl.hide();\n this.resetSearchState();\n this.wrap.removeClass('has-location-badge');\n return this.disableAutocomplete();\n }\n\n disableAutocomplete() {\n if (!this.searchInput.hasClass('disabled') && this.dropdown.hasClass('open')) {\n this.searchInput.addClass('disabled');\n this.dropdown.removeClass('open').trigger('hidden.bs.dropdown');\n this.restoreMenu();\n }\n }\n\n restoreMenu() {\n var html;\n html = '';\n return this.dropdownContent.html(html);\n }\n\n onClick(item, $el, e) {\n if (location.pathname.indexOf(item.url) !== -1) {\n if (!e.metaKey) e.preventDefault();\n if (!this.badgePresent) {\n if (item.category === 'Projects') {\n this.projectInputEl.val(item.id);\n this.addLocationBadge({\n value: '这个项目',\n });\n }\n if (item.category === 'Groups') {\n this.groupInputEl.val(item.id);\n this.addLocationBadge({\n value: '这个群组',\n });\n }\n }\n $el.removeClass('is-active');\n this.disableAutocomplete();\n return this.searchInput.val('').focus();\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./search_autocomplete.js","import Cookies from 'js-cookie';\nimport Mousetrap from 'mousetrap';\nimport axios from './lib/utils/axios_utils';\nimport { refreshCurrentPage, visitUrl } from './lib/utils/url_utility';\nimport findAndFollowLink from './shortcuts_dashboard_navigation';\n\nconst defaultStopCallback = Mousetrap.stopCallback;\nMousetrap.stopCallback = (e, element, combo) => {\n if (['ctrl+shift+p', 'command+shift+p'].indexOf(combo) !== -1) {\n return false;\n }\n\n return defaultStopCallback(e, element, combo);\n};\n\nexport default class Shortcuts {\n constructor() {\n this.onToggleHelp = this.onToggleHelp.bind(this);\n this.enabledHelp = [];\n\n Mousetrap.bind('?', this.onToggleHelp);\n Mousetrap.bind('s', Shortcuts.focusSearch);\n Mousetrap.bind('f', this.focusFilter.bind(this));\n Mousetrap.bind('p b', Shortcuts.onTogglePerfBar);\n\n const findFileURL = document.body.dataset.findFile;\n\n Mousetrap.bind('shift+t', () => findAndFollowLink('.shortcuts-todos'));\n Mousetrap.bind('shift+a', () => findAndFollowLink('.dashboard-shortcuts-activity'));\n Mousetrap.bind('shift+i', () => findAndFollowLink('.dashboard-shortcuts-issues'));\n Mousetrap.bind('shift+m', () => findAndFollowLink('.dashboard-shortcuts-merge_requests'));\n Mousetrap.bind('shift+p', () => findAndFollowLink('.dashboard-shortcuts-projects'));\n Mousetrap.bind('shift+g', () => findAndFollowLink('.dashboard-shortcuts-groups'));\n Mousetrap.bind('shift+l', () => findAndFollowLink('.dashboard-shortcuts-milestones'));\n Mousetrap.bind('shift+s', () => findAndFollowLink('.dashboard-shortcuts-snippets'));\n\n Mousetrap.bind(['ctrl+shift+p', 'command+shift+p'], Shortcuts.toggleMarkdownPreview);\n\n if (typeof findFileURL !== 'undefined' && findFileURL !== null) {\n Mousetrap.bind('t', () => {\n visitUrl(findFileURL);\n });\n }\n\n $(document).on('click.more_help', '.js-more-help-button', function clickMoreHelp(e) {\n $(this).remove();\n $('.hidden-shortcut').show();\n e.preventDefault();\n });\n }\n\n onToggleHelp(e) {\n if (e.preventDefault) {\n e.preventDefault();\n }\n\n Shortcuts.toggleHelp(this.enabledHelp);\n }\n\n static onTogglePerfBar(e) {\n e.preventDefault();\n const performanceBarCookieName = 'perf_bar_enabled';\n if (Cookies.get(performanceBarCookieName) === 'true') {\n Cookies.set(performanceBarCookieName, 'false', { path: '/' });\n } else {\n Cookies.set(performanceBarCookieName, 'true', { path: '/' });\n }\n refreshCurrentPage();\n }\n\n static toggleMarkdownPreview(e) {\n // Check if short-cut was triggered while in Write Mode\n const $target = $(e.target);\n const $form = $target.closest('form');\n\n if ($target.hasClass('js-note-text')) {\n $('.js-md-preview-button', $form).focus();\n }\n $(document).triggerHandler('markdown-preview:toggle', [e]);\n }\n\n static toggleHelp(location) {\n const $modal = $('#modal-shortcuts');\n\n if ($modal.length) {\n $modal.modal('toggle');\n }\n\n return axios.get(gon.shortcuts_path, {\n responseType: 'text',\n }).then(({ data }) => {\n $.globalEval(data);\n\n if (location && location.length > 0) {\n const results = [];\n for (let i = 0, len = location.length; i < len; i += 1) {\n results.push($(location[i]).show());\n }\n return results;\n }\n\n $('.hidden-shortcut').show();\n return $('.js-more-help-button').remove();\n });\n }\n\n focusFilter(e) {\n if (!this.filterInput) {\n this.filterInput = $('input[type=search]', '.nav-controls');\n }\n this.filterInput.focus();\n e.preventDefault();\n }\n\n static focusSearch(e) {\n $('#search').focus();\n\n if (e.preventDefault) {\n e.preventDefault();\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./shortcuts.js","/**\n * Helper function that finds the href of the fiven selector and updates the location.\n *\n * @param {String} selector\n */\nexport default (selector) => {\n const link = document.querySelector(selector).getAttribute('href');\n\n if (link) {\n window.location = link;\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./shortcuts_dashboard_navigation.js","/* eslint-disable func-names, space-before-function-paren, consistent-return, no-var, no-else-return, prefer-arrow-callback, max-len */\n\n// Syntax Highlighter\n//\n// Applies a syntax highlighting color scheme CSS class to any element with the\n// `js-syntax-highlight` class\n//\n// ### Example Markup\n//\n//
      \n//\n\nexport default function syntaxHighlight(el) {\n if ($(el).hasClass('js-syntax-highlight')) {\n // Given the element itself, apply highlighting\n return $(el).addClass(gon.user_color_scheme);\n } else {\n // Given a parent element, recurse to any of its applicable children\n const $children = $(el).find('.js-syntax-highlight');\n if ($children.length) {\n return syntaxHighlight($children);\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./syntax_highlight.js","\n\n\n\n\n\n// WEBPACK FOOTER //\n// vue_shared/components/identicon.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"avatar identicon\",class:_vm.sizeClass,style:(_vm.identiconStyles)},[_vm._v(\"\\n \"+_vm._s(_vm.identiconTitle)+\"\\n\")])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }\n\n\n//////////////////\n// WEBPACK FOOTER\n// /opt/gitlab/embedded/service/gitlab-rails/node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-57b01142\",\"hasScoped\":false,\"buble\":{\"transforms\":{}}}!/opt/gitlab/embedded/service/gitlab-rails/node_modules/vue-loader/lib/selector.js?type=template&index=0!./vue_shared/components/identicon.vue\n// module id = null\n// module chunks = ","/* script */\nexport * from \"!!babel-loader!../../../../../node_modules/vue-loader/lib/selector?type=script&index=0!./identicon.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../../../node_modules/vue-loader/lib/selector?type=script&index=0!./identicon.vue\"\n/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-57b01142\\\",\\\"hasScoped\\\":false,\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../../../node_modules/vue-loader/lib/selector?type=template&index=0!./identicon.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./vue_shared/components/identicon.vue\n// module id = null\n// module chunks = ","\n\n\n\n\n// WEBPACK FOOTER //\n// vue_shared/components/loading_icon.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c(_vm.rootElementType,{tag:\"component\",staticClass:\"loading-container text-center\"},[_c('i',{staticClass:\"fa fa-spin fa-spinner\",class:_vm.cssClass,attrs:{\"aria-hidden\":\"true\",\"aria-label\":_vm.label}})])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }\n\n\n//////////////////\n// WEBPACK FOOTER\n// /opt/gitlab/embedded/service/gitlab-rails/node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-6f46572f\",\"hasScoped\":false,\"buble\":{\"transforms\":{}}}!/opt/gitlab/embedded/service/gitlab-rails/node_modules/vue-loader/lib/selector.js?type=template&index=0!./vue_shared/components/loading_icon.vue\n// module id = null\n// module chunks = ","/* script */\nexport * from \"!!babel-loader!../../../../../node_modules/vue-loader/lib/selector?type=script&index=0!./loading_icon.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../../../node_modules/vue-loader/lib/selector?type=script&index=0!./loading_icon.vue\"\n/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-6f46572f\\\",\\\"hasScoped\\\":false,\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../../../node_modules/vue-loader/lib/selector?type=template&index=0!./loading_icon.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./vue_shared/components/loading_icon.vue\n// module id = null\n// module chunks = ","import {\n __,\n n__,\n s__,\n sprintf,\n} from '../locale';\n\nexport default (Vue) => {\n Vue.mixin({\n methods: {\n /**\n Translates `text`\n\n @param text The text to be translated\n @returns {String} The translated text\n **/\n __,\n /**\n Translate the text with a number\n if the number is more than 1 it will use the `pluralText` translation.\n This method allows for contexts, see below re. contexts\n\n @param text Singular text to translate (eg. '%d day')\n @param pluralText Plural text to translate (eg. '%d days')\n @param count Number to decide which translation to use (eg. 2)\n @returns {String} Translated text with the number replaced (eg. '2 days')\n **/\n n__,\n /**\n Translate context based text\n Either pass in the context translation like `Context|Text to translate`\n or allow for dynamic text by doing passing in the context first & then the text to translate\n\n @param keyOrContext Can be either the key to translate including the context\n (eg. 'Context|Text') or just the context for the translation\n (eg. 'Context')\n @param key Is the dynamic variable you want to be translated\n @returns {String} Translated context based text\n **/\n s__,\n sprintf,\n },\n });\n};\n\n\n\n// WEBPACK FOOTER //\n// ./vue_shared/translate.js"],"sourceRoot":""}