{"version":3,"sources":["webpack:///main.1b26159fcc681f215a1f.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/deckar01-task_list/dist/task_list.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/dropzone/dist/dropzone.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/mousetrap/plugins/pause/mousetrap-pause.js","webpack:////opt/gitlab/embedded/service/gitlab-rails/node_modules/pikaday/pikaday.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/component-normalizer.js","webpack:////opt/gitlab/embedded/service/gitlab-rails/node_modules/vue-resource/dist/vue-resource.esm.js","webpack:///(webpack)/buildin/module.js","webpack:////opt/gitlab/embedded/service/gitlab-rails/vendor/assets/javascripts/date.format.js","webpack:///./api.js","webpack:///./autosave.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:///./blob/blob_fork_suggestion.js","webpack:///./breadcrumb.js","webpack:///./breakpoints.js","webpack:///./commit/image_file.js","webpack:///./confirm_danger_modal.js","webpack:///./contextual_sidebar.js","webpack:///./create_label.js","webpack:///./diff.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:///./droplab/plugins/input_setter.js","webpack:///./dropzone_input.js","webpack:///./due_date_select.js","webpack:///./feature_highlight/feature_highlight.js","webpack:///./feature_highlight/feature_highlight_helper.js","webpack:///./feature_highlight/feature_highlight_options.js","webpack:///./files_comment_button.js","webpack:///./filtered_search/container.js","webpack:///./filtered_search/dropdown_utils.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:///./gl_form.js","webpack:///./header.js","webpack:///./helpers/issuables_helper.js","webpack:///./close_reopen_report_toggle.js","webpack:///./image_diff/helpers/badge_helper.js","webpack:///./image_diff/helpers/comment_indicator_helper.js","webpack:///./image_diff/helpers/dom_helper.js","webpack:///./image_diff/view_types.js","webpack:///./image_diff/helpers/utils_helper.js","webpack:///./image_diff/replaced_image_diff.js","webpack:///./image_diff/helpers/index.js","webpack:///./image_diff/image_badge.js","webpack:///./image_diff/image_diff.js","webpack:///./image_diff/init_discussion_tab.js","webpack:///./importer_status.js","webpack:///./init_changes_dropdown.js","webpack:///./init_issuable_sidebar.js","webpack:///./init_notes.js","webpack:///./issuable_bulk_update_actions.js","webpack:///./issuable_context.js","webpack:///./labels_select.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/datefix.js","webpack:///./lib/utils/datetime_utility.js","webpack:///./lib/utils/image_utility.js","webpack:///./lib/utils/regexp.js","webpack:///./lib/utils/sticky.js","webpack:///./lib/utils/text_markdown.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:///./merge_request.js","webpack:///./merge_request_tabs.js","webpack:///./milestone_select.js","webpack:///./notes.js","webpack:///./comment_type_toggle.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:///./right_sidebar.js","webpack:///./search_autocomplete.js","webpack:///./shortcuts.js","webpack:///./shortcuts_dashboard_navigation.js","webpack:///./shortcuts_issuable.js","webpack:///./single_file_diff.js","webpack:///./syntax_highlight.js","webpack:///./task_list.js","webpack:///./users_select.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","webpack:///./zen_mode.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/deckar01-task_list/dist/task_list.js","jQuery","root","modules","moduleId","installedModules","l","m","c","d","getter","o","n","object","property","hasOwnProperty","p","s","NodeArray","TaskList","closest","item","nodeList","slice","className","classList","contains","eventName","detail","event","cancelable","initCustomEvent","el1","field","updateTaskList","enable","querySelectorAll","add","checkbox","disabled","disable","remove","changeEvent","changedEvent","checkboxes","checked","defaultPrevented","updateSource","incomplete","complete","escapePattern","str","replace","incompletePattern","RegExp","completePattern","itemPattern","startFencesPattern","endFencesPattern","itemsInParasPattern","source","itemIndex","clean","inCodeBlock","line","result","split","len","ref","results","match","join","fn","taskList","method","each","data","../../../node_modules/delegate/src/closest.js","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","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","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","throwTypeError","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","Promise","resolve","polyfillV1","customElements","Classes","htmlClass","isNative","Reflect","construct","WebKit","fixGetClass","patchedCreateElement","section","tags","catchClass","filterBy","re","tag","register","test","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","iPO","isPrototypeOf","gOPD","getOwnPropertyDescriptor","gOPN","getOwnPropertyNames","gPO","sPO","hasProto","define","Dict","K","V","k","done","notify","catch","then","cb","String","Bridge","setProperties","names","MutationObserver","WebKitMutationObserver","HTMLElementPrototype","Node","attachShadow","cloneNode","removeAttribute","characterData","attributeOldValue","DOMAttrModified","setListener","patchedRemoveAttribute","CustomEvent","had","old","onPropertyChange","superSecret","propertyName","handler","capture","oldAttributes","newAttributes","attr","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/dropzone/dist/dropzone.js","Dropzone","Emitter","camelize","contentLoaded","detectVerticalSquash","drawImageIOSFix","noop","without","__slice","__hasProp","__extends","child","parent","ctor","__super__","on","_callbacks","args","callbacks","_i","_len","removeListener","off","removeAllListeners","_super","elementOptions","fallback","_ref","version","defaultOptions","previewTemplate","clickableElements","listeners","files","dropzone","instances","optionsForElement","extend","forceFallback","isBrowserSupported","url","acceptedFiles","acceptedMimeTypes","getExistingFallback","previewsContainer","getElement","clickable","getElements","init","resolveOption","events","withCredentials","parallelUploads","uploadMultiple","maxFilesize","paramName","createImageThumbnails","maxThumbnailFilesize","thumbnailWidth","thumbnailHeight","filesizeBase","maxFiles","params","ignoreHiddenFiles","autoProcessQueue","autoQueue","addRemoveLinks","hiddenInputContainer","dictDefaultMessage","dictFallbackMessage","dictFallbackText","dictFileTooBig","dictInvalidFileType","dictResponseError","dictCancelUpload","dictCancelUploadConfirmation","dictRemoveFile","dictRemoveFileConfirmation","dictMaxFilesExceeded","accept","file","messageElement","span","getElementsByTagName","textContent","innerText","getFallbackForm","srcRatio","trgRatio","srcX","srcY","srcWidth","srcHeight","optWidth","optHeight","trgHeight","trgWidth","drop","dragstart","dragend","dragenter","dragover","dragleave","paste","reset","addedfile","removeFileEvent","removeLink","_j","_k","_len1","_len2","_ref1","_ref2","_results","previewElement","trim","innerHTML","filesize","size","_removeLink","preventDefault","stopPropagation","status","UPLOADING","confirm","removeFile","removedfile","_updateMaxFilesReachedClass","thumbnail","dataUrl","thumbnailElement","alt","src","error","message","errormultiple","processing","processingmultiple","uploadprogress","progress","bytesSent","totaluploadprogress","sending","sendingmultiple","success","successmultiple","canceled","canceledmultiple","completemultiple","maxfilesexceeded","maxfilesreached","queuecomplete","addedfiles","objects","val","getAcceptedFiles","accepted","getRejectedFiles","getFilesWithStatus","getQueuedFiles","QUEUED","getUploadingFiles","getAddedFiles","ADDED","getActiveFiles","noPropagation","setupHiddenFileInput","tagName","hiddenFileInput","visibility","left","addFile","URL","webkitURL","updateTotalUploadProgress","returnValue","efct","dataTransfer","effectAllowed","_error","dropEffect","clickableElement","click","elementInside","removeAllFiles","activeFiles","totalBytes","totalBytesSent","totalUploadProgress","upload","total","_getParamName","existingFallback","fields","fieldsString","form","getFallback","setupEventListeners","elementListeners","_results1","removeEventListeners","cancelUpload","cutoff","selectedSize","selectedUnit","unit","units","pow","items","webkitGetAsEntry","_addFilesFromItems","handleFiles","clipboardData","entry","isFile","getAsFile","isDirectory","_addFilesFromDirectory","kind","directory","path","dirReader","entriesReader","createReader","entries","substring","fullPath","readEntries","console","log","isValidFile","_enqueueThumbnail","_errorProcessing","enqueueFile","enqueueFiles","processQueue","_thumbnailQueue","_processingThumbnail","_processThumbnailQueue","createThumbnail","cancelIfNecessary","fileReader","FileReader","onload","createThumbnailFromUrl","readAsDataURL","imageUrl","crossOrigin","img","canvas","ctx","resizeInfo","_ref3","getContext","trgX","trgY","toDataURL","onerror","processingLength","queuedFiles","processFiles","processFile","uploadFiles","_getFilesWithXhr","xhr","groupedFile","groupedFiles","CANCELED","abort","option","uploadFile","formData","handleError","headerName","headerValue","headers","input","inputName","inputType","progressObj","response","updateProgress","_l","_len3","_m","_ref4","_ref5","XMLHttpRequest","open","allFilesFinished","loaded","readyState","responseText","getResponseHeader","JSON","parse","_finished","onprogress","Accept","Cache-Control","X-Requested-With","setRequestHeader","FormData","append","selected","submitRequest","send","SUCCESS","ERROR","forElement","autoDiscover","discover","checkElements","dropzones","blacklistedBrowsers","capableBrowser","regex","File","FileList","Blob","navigator","userAgent","rejectedItem","charAt","string","div","childNodes","els","question","rejected","baseMimeType","mimeType","validType","ACCEPTED","PROCESSING","alpha","ey","ih","py","ratio","sy","naturalWidth","naturalHeight","drawImage","getImageData","sx","sw","sh","dx","dy","dw","dh","vertSquashRatio","win","doc","poll","pre","rem","doScroll","createEventObject","frameElement","_autoDiscoverFunction","../../../node_modules/fuzzaldrin-plus/lib/filter.js","pathScorer","pluckCandidates","scorer","sortCandidates","a","candidate","b","score","candidates","bKey","maxInners","maxResults","scoreProvider","scoredCandidates","spotLeft","usePathScoring","sort","../../../node_modules/fuzzaldrin-plus/lib/fuzzaldrin.js","process","Query","defaultPathSeparator","filter","matcher","parseOptions","preparedQueryCache","platform","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","subject","subject_lw","basePos","depth","end","lastIndexOf","ai","bj","j","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","basePathScore","extAdjust","fileLength","ext","count","getExtension","substr","startPos","endPos","maxDepth","matched","../../../node_modules/fuzzaldrin-plus/lib/query.js","coreChars","getCharCodes","opt_char_re","truncatedUpperCase","_arg","core","charCodes","char","upper","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","sc","abs","quality","sameCase","bonus","posBonus","startOfWord","mi","nj","pos2","fullWord","sepCount","sumPos","nbAcronymInQuery","../../../node_modules/good-listener/src/is.js","toString","../../../node_modules/good-listener/src/listen.js","listen","listenNode","listenNodeList","listenSelector","../../../node_modules/jed/jed.js","undef","getPluralFormFunc","plural_form_string","Jed","PF","compile","Chain","i18n","_key","_i18n","ArrayProto","ObjProto","hasOwnProp","nativeForEach","breaker","_","context","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","dngettext","dcngettext","pgettext","dpgettext","dcpgettext","npgettext","dnpgettext","singular_key","plural_key","val_list","res","val_idx","dict","defaultConf","pluralForms","parseInt","missing_key_callback","get_type","variable","str_repeat","multiplier","str_format","cache","format","parse_tree","argv","arg","pad","pad_character","pad_length","cursor","tree_length","node_type","toExponential","toFixed","fmt","_fmt","arg_names","exec","field_list","replacement_field","field_match","vsprintf","unshift","parse_plural","parse_expression","plural_str","extractPluralExpr","parser","imply","ast","interpreter","expr","truthy","falsey","right","plural_matches","nplurals_re","plural_re","nplurals_matches","nplurals","yy","symbols_","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","loc","first_line","last_line","first_column","last_column","_input","_more","_less","conditionStack","ch","unput","more","pastInput","past","upcomingInput","next","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","converter","expires","Date","setMilliseconds","getMilliseconds","stringify","write","encodeURIComponent","decodeURIComponent","escape","cookie","toUTCString","secure","cookies","rdecode","parts","read","json","getJSON","withConverter","../../../node_modules/mousetrap/mousetrap.js","_addEvent","attachEvent","_characterFromEvent","character","which","shiftKey","_MAP","_KEYCODE_MAP","_modifiersMatch","modifiers1","modifiers2","_resetSequences","doNotReset","activeSequences","_sequenceLevels","_nextExpectedAction","_getMatches","modifiers","sequenceName","combination","level","_isModifier","seq","metaKey","ctrlKey","deleteCombo","combo","deleteSequence","_eventModifiers","altKey","_preventDefault","_stopPropagation","cancelBubble","_fireCallback","sequence","Mousetrap","stopCallback","srcElement","_handleKey","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","~","!","@","#","^","&","*","+","\"","|","command","return","mod","unbind","isContentEditable","../../../node_modules/mousetrap/plugins/pause/mousetrap-pause.js","_originalStopCallback","enabled","pause","unpause","../../../node_modules/pikaday/pikaday.js","moment","code","hasMoment","hasEventListeners","sto","addEvent","removeEvent","detachEvent","hasClass","cn","addClass","removeClass","isArray","isDate","getTime","isWeekend","date","day","getDay","isLeapYear","year","getDaysInMonth","month","setToStartOfDay","setHours","compareDates","to","from","overwrite","hasProp","fireEvent","ev","adjustCalendar","calendar","floor","bound","reposition","defaultDate","setDefaultDate","firstDay","formatStrict","minDate","maxDate","yearRange","showWeekNumber","pickWholeWeek","minYear","maxYear","minMonth","maxMonth","startRange","endRange","yearSuffix","showMonthAfterYear","showDaysInNextAndPreviousMonths","enableSelectionDaysInNextAndPreviousMonths","numberOfMonths","mainCalendar","blurFieldOnSelect","previousMonth","nextMonth","months","weekdays","weekdaysShort","theme","onSelect","onOpen","onClose","onDraw","renderDayName","opts","abbr","renderDay","ariaSelected","isEmpty","isDisabled","isToday","isSelected","hasEvent","isInRange","isStartRange","isEndRange","renderWeek","y","onejan","renderRow","days","isRowSelected","renderBody","rows","renderHead","renderTitle","refYear","randId","monthHtml","yearHtml","_o","isMinYear","isMaxYear","html","prev","renderTable","Pikaday","config","_onMouseDown","_v","prevMonth","setDate","hide","blur","_c","_onChange","gotoMonth","gotoYear","_onKeyChange","isVisible","adjustDate","_onInputChange","firedBy","isValid","toDate","show","_onInputFocus","_onInputClick","_onInputBlur","pEl","activeElement","_b","_onClick","onchange","insertBefore","nextSibling","defDate","gotoDate","disableWeekends","disableDayFn","nom","setMinDate","setMaxDate","getFullYear","_d","toDateString","getMoment","setMoment","preventOnSelect","isMoment","getDate","draw","min","newCalendar","calendars","firstVisibleDate","lastVisibleDate","visibleDate","setMonth","getMonth","adjustCalendars","sign","newDay","difference","valueOf","gotoToday","setStartRange","setEndRange","force","_y","render","adjustPosition","viewportWidth","viewportHeight","clientRect","innerWidth","innerHeight","clientHeight","getBoundingClientRect","pageXOffset","bottom","offsetLeft","offsetTop","offsetParent","now","before","row","yearOfPreviousMonth","yearOfNextMonth","daysInPreviousMonth","cells","after","isWeekSelected","dayNumber","monthNumber","yearNumber","dayConfig","../../../node_modules/select/src/select.js","select","isReadOnly","setSelectionRange","selection","range","createRange","selectNodeContents","addRange","../../../node_modules/svg4everybody/dist/svg4everybody.js","svg4everybody","embed","svg","fragment","createDocumentFragment","viewBox","clone","firstChild","loadreadystatechange","onreadystatechange","cachedDocument","_cachedDocument","implementation","createHTMLDocument","_cachedTarget","_embeds","id","getElementById","rawopts","oninterval","uses","use","getSVGAncestor","validate","srcSplit","requests","numberOfSvgUseElementsToBypass","requestAnimationFrame","newerIEUA","webkitUA","olderEdgeUA","edgeUA","inIframe","../../../node_modules/timeago.js/dist/timeago.min.js","t","timeago","h","u","nowDate","defaultLocale","f","en","zh_CN","w","doRender","setLocale","cancel","../../../node_modules/tiny-emitter/index.js","E","once","evtArr","evts","liveEvents","../../../node_modules/vue-loader/lib/component-normalizer.js","rawScriptExports","compiledTemplate","functionalTemplate","injectStyles","scopeId","moduleIdentifier","esModule","scriptExports","staticRenderFns","_compiled","functional","_scopeId","hook","$vnode","ssrContext","__VUE_SSR_CONTEXT__","_registeredComponents","_ssrRegister","existing","beforeCreate","_injectStyles","../../../node_modules/vue-resource/dist/vue-resource.esm.js","__webpack_exports__","Promise$1","PENDING","deferred","promise","reject","PromiseObj","Util","nextTick","ntick","silent","warn","msg","trimEnd","chars","toLower","toUpper","isString","isFunction","isObject","isPlainObject","isBlob","isFormData","when","fulfilled","merge","$vm","$options","_merge","_assign","options$$1","urlParams","Url","expand","variables","tmpl","expanded","vars","template","operators","expression","literal","operator","tmp","getValues","separator","encodeReserved","modifier","isDefined","encodeValue","isKeyOperator","part","encodeURI","transform","transforms","vm","serialize","scope","array","plain","xdrClient","request","xdr","XDomainRequest","respondWith","getUrl","timeout","onabort","ontimeout","getBody","cors","inBrowser","orgUrl","location","href","reqUrl","protocol","host","emulateHTTP","SUPPORTS_CORS","client","emulateJSON","bodyText","isJson","[","{","jsonpClient","script","jsonp","jsonpCallback","async","header","Http","common","custom","xhrClient","statusText","getAllResponseHeaders","responseType","credentials","nodeClient","resp","statusCode","statusMessage","error$$1","Client","reqHandlers","resHandlers","sendRequest","getName","reduce","curr","normalizeName","blobText","reader","readAsText","isBlobText","interceptors","interceptor","Request","ok","Resource","resource","$http","plugin","Vue","installed","http","$url","$resource","$promise","this$1","all","iterable","p$1","called","reason","onResolved","onRejected","finally","ref$1","documentMode","port","hostname","pathname","search","Headers","getAll","deleteAll","thisArg","Response","bodyBlob","blob","COMMON_HEADERS","JSON_CONTENT_TYPE","Content-Type","put","post","method$$1","save","../../../node_modules/webpack/buildin/module.js","webpackPolyfill","deprecate","paths","children","../../../vendor/assets/javascripts/date.format.js","dateFormat","timezone","timezoneClip","mask","utc","dF","SyntaxError","masks","D","H","M","L","getTimezoneOffset","flags","dd","ddd","dayNames","dddd","mm","mmm","monthNames","mmmm","yyyy","hh","HH","MM","ss","tt","T","TT","Z","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","per_page","namespaces","projects","simple","gon","current_user_id","membership","project","newLabel","namespacePath","label","groupProjects","commitMultiple","branchSingle","branch","licenseText","gitignoreText","_ref6","gitlabCiYml","_ref7","dockerfileYml","_ref8","issueTemplate","_ref9","users","urlRoot","relative_url_root","api_version","./autosave.js","__WEBPACK_IMPORTED_MODULE_0__lib_utils_accessor__","Autosave","isLocalStorageAvailable","isLocalStorageAccessSafe","restore","localStorage","getItem","setItem","removeItem","./awards_handler.js","_toConsumableArray","arr2","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","symbols","emoji","eventListeners","registerEventListener","createEmojiMenu","showEmojiMenu","$target","hideMenuElement","$glEmojiElement","find","$spriteIconElement","emojiName","addAward","getVotesBlock","getAwardUrl","_element$method","$addBtn","$menu","$thumbsBtn","$userAuthored","isUserAuthored","positionMenu","showMenuElement","$createdMenu","toggleClass","isCreatingEmojiMenu","categoryMap","getEmojiCategoryMap","categoryNameKey","emojisInCategory","firstCategory","renderCategory","frequentlyUsedEmojis","getFrequentlyUsedEmojis","frequentlyUsedCatgegory","menuListClass","emojiMenuMarkup","insertAdjacentHTML","addRemainingEmojiMenuCategories","setupSearch","_this3","isAddingRemainingEmojiMenuCategories","menu","emojiContentElement","promiseChain","categoryMarkup","emojiList","_this4","glEmojiTag","sprite","css","outerHeight","outerWidth","votesBlock","awardUrl","checkMutuality","_this5","isMainAwardsBlock","toggleAwardEvent","awardName","noteId","normalizedEmoji","normalizeEmojiName","$emojiButton","findEmojiIcon","postEmoji","addAwardToEmojiBar","checkForMutuality","addEmojiToFrequentlyUsedList","isActive","decrementCounter","counter","addYouToUserList","animateEmoji","createEmoji","$el","currentBlock","resultantVotesBlock","eq","mutualVote","$button","counterNumber","removeYouFromUserList","tooltip","parents","removeEmoji","$votesBlock","$awardBlock","awardBlock","originalTitle","getAwardTooltip","authors","removeData","removeAttr","toSentence","origTitle","buttonHtml","$emoji","_this6","createAwardButtonForVotesBlock","userAuthored","oldTitle","animate","isEmojiNameValid","uniq","_this7","_this8","$search","term","searchEmojis","h5","foundEmojis","findMatchingEmojiElements","ul","emojiMatches","filterEmojiNamesByAlias","elm","dataset","$emojiMenu","_entry$element$off","./behaviors/bind_in_out.js","BindInOut","bindIn","bindOut","in","eventWrapper","eventType","updateOut","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","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","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","backtickCount","backtickMatch","backticks","spaceOrNoSpace","blockquote","imageSrc","a.anchor","li","firstLine","ol","h1","h2","h3","h4","h6","strong","em","del","sup","hr","theadEl","tbodyEl","thead","separatorRow","cell","textAlign","tr","cellEls","copyAsGFM","transformGFMSelection","transformCodeSelection","pasteGFM","transformer","originalEvent","documentFragment","setData","getData","gfm","gl","utils","insertText","textBefore","textAfter","gfmElements","allGfmElement","gfmElement","createTextNode","lineSelector","lineClass","lineElements","codeElement","lineElement","respectWhitespaceParam","COMMENT_NODE","TEXT_NODE","respectWhitespace","innerGFM","DOCUMENT_FRAGMENT_NODE","func","clonedParentNode","clonedNodes","clonedNode","replaceChild","nodeText","./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","generateUnicodeSupportMap","testMap","testMapKeys","numTestEntries","testKey","testEmojiUnicodeSupportMapCanvas","fillStyle","textBaseline","font","writeIndex","fillText","resultMap","readIndex","testEntry","isTestSatisfied","isSatisfied","imageData","isValidEmoji","currentPixel","isLookingAtFirstChar","isLookingAtSecondChar","getUnicodeSupportMap","accessor","glEmojiVersionFromCache","userAgentFromCache","GL_EMOJI_VERSION","unicodeSupportTestMap","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","$this","placement","one","./behaviors/requires_input.js","hideOrShowHelpBlock","requiresInput","requireInput","fieldSelector","any","change","./behaviors/toggler_behavior.js","__WEBPACK_IMPORTED_MODULE_0__lib_utils_url_utility__","toggleContainer","toggleState","$container","toggle","targetTag","anchor","scrollIntoView","./blob/blob_fork_suggestion.js","openButtons","forkButtons","cancelButtons","suggestionSections","actionTextPieces","BlobForkSuggestion","elementMap","onOpenButtonClick","onCancelButtonClick","bindEvents","forkPath","showSuggestionSection","hideSuggestionSection","./breadcrumb.js","addTooltipToEl","textEl","scrollWidth","breadcrumbs","topLevelLinks","$expander","./breakpoints.js","breakpoints","lg","md","sm","xs","BreakpointInstance","windowWidth","getBreakpointSize","./commit/image_file.js","__WEBPACK_IMPORTED_MODULE_0_vendor_jquery_waitforimages__","availWidth","viewModes","ImageFile","views","two-up","requestImageInfo","swipe","maxHeight","maxWidth","view","$swipeWrap","$swipeBar","$swipeFrame","wrapPadding","prepareFrames","initDraggable","onion-skin","dragTrackWidth","$frame","$track","$dragger","$frameAdded","framePadding","opacity","deletedWidth","deletedHeight","initViewModes","waitForImages","initView","viewMode","activateViewMode","fadeOut","fadeIn","dragging","$body","$offsetEl","pageX","frame","domImg","./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","./create_label.js","__WEBPACK_IMPORTED_MODULE_0__api__","__WEBPACK_IMPORTED_MODULE_1__lib_utils_text_utility__","CreateLabelDropdown","$dropdownBack","$cancelButton","$newLabelField","$newColorField","$colorPreview","$newLabelError","$newLabelCreateButton","$colorSuggestions","cleanBinding","addBinding","addColorValue","enableLabelCreateButton","resetForm","saveLabel","color","errors","./diff.js","__WEBPACK_IMPORTED_MODULE_1__files_comment_button__","__WEBPACK_IMPORTED_MODULE_2__single_file_diff__","__WEBPACK_IMPORTED_MODULE_3__image_diff_helpers_index__","_slicedToArray","sliceIterator","_arr","_n","_e","_s","isBound","Diff","$diffFile","tab","isLocked","firstFile","canCreateNote","initImageDiff","handleClickUnfold","handleClickLineNum","handleParallelLineDown","highlightSelectedLine","openAnchoredDiff","_lineNumbers","lineNumbers","_lineNumbers2","oldLineNumber","newLineNumber","since","unfold","lineNumber","prevNewLine","link","replaceWith","locationHash","anchoredDiff","diffTitle","diffFile","clickTarget","toggleDiff","history","toArray","$diffFiles","./dispatcher.js","initDispatcher","Dispatcher","__WEBPACK_IMPORTED_MODULE_0__merge_request__","__WEBPACK_IMPORTED_MODULE_1__flash__","__WEBPACK_IMPORTED_MODULE_2__gfm_auto_complete__","__WEBPACK_IMPORTED_MODULE_3__zen_mode__","__WEBPACK_IMPORTED_MODULE_4__init_notes__","__WEBPACK_IMPORTED_MODULE_5__init_issuable_sidebar__","__WEBPACK_IMPORTED_MODULE_6__lib_utils_common_utils__","__WEBPACK_IMPORTED_MODULE_7__gl_field_errors__","__WEBPACK_IMPORTED_MODULE_8__shortcuts__","__WEBPACK_IMPORTED_MODULE_9__shortcuts_issuable__","__WEBPACK_IMPORTED_MODULE_10__diff__","__WEBPACK_IMPORTED_MODULE_11__search_autocomplete__","initSearch","initFieldErrors","initPageScripts","shortcut_handler","page","fail","callDefault","GfmAutoComplete","dataSources","enableGFM","supportsAutocomplete","emojis","members","issues","milestones","mergeRequests","labels","mrShowNode","mergeRequest","mrAction","./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","templateString","letter","thisTag","stopTag","isDropDownParts","droplab_utils","drop_down_DropDown","DropDown","currentIndex","hidden","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","buttonEvent","clicked","restoreInitialState","removeEvents","removePlugins","hook_button","hook_input__createClass","HookInput","mousedown","keyup","keydown","hasRemovedEvents","inputEvent","mouseEvent","keyEvent","hook_input","keyboard_Keyboard","currentKey","isUpArrow","isDownArrow","removeHighlight","itemElements","listItems","listItem","setMenuForArrows","filterDropdownEl","filterDropdownBottom","elOffsetTop","selectItem","currentItem","keyboard","drop_lab__createClass","drop_lab_DropLab","DropLab","ready","hooks","queuedData","dropdownTriggers","addHooks","applyArgs","_key2","methodName","processData","documentClicked","availableTrigger","aHook","dropdownActive","addHook","availableHook","availableList","HookObject","readyEvent","dropdown","loadStatic","fireReady","addData","./droplab/plugins/input_setter.js","InputSetter","destroyed","setInputs","selectedItem","valueAttribute","inputAttribute","./dropzone_input.js","dropzoneInput","$attachButton","$attachingFileMessage","$retryLink","$uploadProgress","$uploadingErrorContainer","$uploadingErrorMessage","$uploadingProgressContainer","uploadsPath","uploads_path","maxFileSize","max_file_size","formTextarea","handlePaste","pasteText","addFileToForm","updateAttachingMessage","isImage","getFilename","$mdArea","setupMarkdownPreview","$formDropzone","__WEBPACK_IMPORTED_MODULE_3__lib_utils_csrf__","previewContainer","alert","processingFileCount","shouldPad","markdown","errorMessage","__WEBPACK_IMPORTED_MODULE_0_dropzone___default","dropzoneInstance","failedFiles","failedFile","pasteEvent","filename","formattedText","textarea","caretStart","selectionStart","caretEnd","selectionEnd","textEnd","beforeSelection","afterSelection","showSpinner","closeSpinner","showError","closeAlertMessage","insertToTextArea","$child","__WEBPACK_IMPORTED_MODULE_4__lib_utils_axios_utils__","messageContainer","attachingMessage","filesCount","__WEBPACK_IMPORTED_MODULE_0_dropzone__","./due_date_select.js","__WEBPACK_IMPORTED_MODULE_0_pikaday__","__WEBPACK_IMPORTED_MODULE_0_pikaday___default","__WEBPACK_IMPORTED_MODULE_2__lib_utils_datefix__","DueDateSelect","$dropdown","$loading","$dropdownParent","$block","$datePicker","$selectbox","$value","$valueContent","$sidebarValue","fieldName","abilityName","issueUpdateURL","rawSelectedDate","displayedDate","datePayload","initGlDropdown","initRemoveDueDate","initDatePicker","glDropdown","opened","$dueDateInput","dateString","dateText","issueBoards","BoardsStore","issue","dueDate","updateIssueBoardIssue","saveDueDate","isDropdown","parseSelectedDate","prepSelectedDate","submitSelectedDate","dateArray","dateObj","due_date","fadeOutLoader","selectedDateValue","displayedDateStyle","DueDateSelectors","initMilestoneDatePicker","initIssuableSelect","./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","priorityFeatureEl","highlight","highlightFeatures","./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__","./files_comment_button.js","userCanCreateNote","isParallelView","LINE_COLUMN_CLASSES","showButton","hideButton","buttonParentElement","getButtonParent","validateButtonParent","nextElementSibling","hoveredElement","previousElementSibling","./filtered_search/container.js","FilteredSearchContainerClass","containerParam","./filtered_search/dropdown_utils.js","__WEBPACK_IMPORTED_MODULE_1__container__","DropdownUtils","escapedText","hasSpace","hasDoubleQuote","filterSymbol","updatedItem","searchInput","getSearchInput","matchWithoutSymbol","dataMap","updatedMap","multipleColors","labelColors","colors","spacing","mergeDuplicateLabels","duplicateLabelColor","text_color","preprocessed","allowedKeys","getSearchQuery","_gl$FilteredSearchTok","FilteredSearchTokenizer","processTokens","lastToken","tokens","lastKey","allowMultiple","itemInExistingTokens","hint","last","tokenName","dataValue","FilteredSearchDropdownManager","addWordToInput","visualToken","tokenValue","untilInput","inputIndex","findIndex","valueContainer","valueText","originalValue","_gl$FilteredSearchVis","FilteredSearchVisualTokens","getLastVisualTokenBeforeInput","isLastVisualTokenValid","inputValue","previous","filteredSearchInput","_gl$DropdownUtils$get","getInputSelectionPosition","./flash.js","createFlash","removeFlashClickListener","hideFlash","flashEl","fadeTransition","transition","passive","createAction","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","hideMenu","parentEl","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","searchKey","skipSpecialCharacterTest","defaultLoadingData","displayTpl","isLoading","Loading","tpl","aliases","description","insertTpl","referencePrefix","getDefaultCallbacks","beforeSave","commands","subtext","regexp","templateFunction","relevantText","unicodeLetters","username","Members","alwaysHighlightFirst","autoCompleteAvatar","avatar_url","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","loadData","atTypeMap","validEmojiNames","retrieve","dataToInspect","loadingState","atSymbolsWithBar","atSymbolsWithoutBar","targetSubtext","resultantFlag","accentAChar","decodeURI","accentYChar","/","./gl_dropdown.js","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","elIsInput","inputFieldName","onInput","filterInputBlur","HAS_VALUE_CLASS","remote","BLUR_KEYCODES","shouldBlur","search_text","onFilter","filterByText","dataEndpoint","execute","beforeSend","searchFields","updateLabel","shouldPropagate","filterInput","FILTER_INPUT","noFilterInput","NO_FILTER_INPUT","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","renderData","renderMenu","appendMenu","multiSelect","filteredFullData","contentHtml","resetRows","addArrowKeyEvent","hasFilterBulkUpdate","shouldRefreshOnOpen","hasMultiSelect","showMenuAbove","positionMenuAbove","removeArrayKeyEvent","clearMenu","highlightTextMatches","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","./gl_field_error.js","errorMessageClass","GlFieldError","formErrors","inputElement","inputDomElement","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","catchInvalidFormSubmit","checkValidity","./gl_form.js","__WEBPACK_IMPORTED_MODULE_0__gfm_auto_complete__","__WEBPACK_IMPORTED_MODULE_1__dropzone_input__","__WEBPACK_IMPORTED_MODULE_2__lib_utils_text_markdown__","GLForm","setupForm","clearEventListeners","autoComplete","isNewForm","disableButtonIfEmptyField","addEventListeners","isAutosizeable","setupAutosize","setHeightData","destroyAutosize","removeListeners","./header.js","initTodoToggle","parsedCount","$todoPendingCount","__WEBPACK_IMPORTED_MODULE_0__lib_utils_text_utility__","./helpers/issuables_helper.js","initCloseReopenReport","dropdownTrigger","dropdownList","button","closeReopenReportToggle","close_reopen_report_toggle","initDroplab","drop_lab","input_setter","close_reopen_report_toggle_CloseReopenReportToggle","CloseReopenReportToggle","reopenItem","closeItem","droplab","setConfig","isClosed","toggleButtonType","_getButtonTypes","getButtonTypes","_getButtonTypes2","showItem","hideItem","IssuablesHelper","./image_diff/helpers/index.js","createImageBadge","classNames","buttonEl","addImageBadge","containerEl","coordinate","badgeText","addImageCommentBadge","spriteIcon","addAvatarBadge","_event$detail","badgeNumber","avatarBadgeEl","addCommentIndicator","removeCommentIndicator","imageFrameEl","commentIndicatorEl","imageEl","willRemove","removed","showCommentIndicator","commentIndicatorOnClick","setPositionDataAttribute","positionObject","updateDiscussionAvatarBadgeNumber","discussionEl","newBadgeNumber","updateDiscussionBadgeNumber","toggleCollapsed","toggleButtonEl","discussionNotesEl","formEl","isCollapsed","isValidViewType","viewTypes","viewType","_defineProperty","resizeCoordinatesToImageElement","imageWidth","imageHeight","widthRatio","heightRatio","generateBadgeFromDiscussionDOM","firstNoteEl","image_badge","actual","discussionId","getTargetSelection","offsetX","offsetY","actualWidth","normalizedX","normalizedY","browser","fileEl","renderCommentBadge","diff","image_file","image_diff","replaced_image_diff","TWO_UP","SWIPE","ONION_SKIN","_get","receiver","Function","desc","replaced_image_diff_ReplacedImageDiff","_ImageDiff","ReplacedImageDiff","_imageFrameEls","_viewModesEls","defaultViewType","imageFrameEls","viewModesEl","viewModesEls","currentView","generateImageEls","imageEls","changeToViewTwoUp","changeView","changeToViewSwipe","changeToViewOnionSkin","newView","indicator","helpers","badge","imageBadges","renderNewView","renderBadges","normalizedIndicator","./image_diff/image_badge.js","__WEBPACK_IMPORTED_MODULE_0__helpers_index__","defaultMeta","ImageBadge","./image_diff/image_diff.js","__WEBPACK_IMPORTED_MODULE_1__image_badge__","__WEBPACK_IMPORTED_MODULE_2__lib_utils_image_utility__","ImageDiff","$noteContainer","imageClickedWrapper","imageClicked","imageBlurredWrapper","addBadgeWrapper","addBadge","removeBadgeWrapper","removeBadge","renderBadgesWrapper","customEvent","renderBadge","imageBadge","numberBadgeOptions","indexToRemove","imageBadgeEls","updatedBadgeNumber","./image_diff/init_discussion_tab.js","diffFileEl","./importer_status.js","initImporterStatus","importerStatus","ImporterStatus","jobsImportPath","importPath","jobsUrl","importUrl","initStatusPage","setAutoUpdate","$btn","$tr","$targetField","$namespaceInput","targetNamespace","newName","repo_id","target_namespace","new_name","setInterval","job","jobItem","statusField","spinner","import_status","./init_changes_dropdown.js","__WEBPACK_IMPORTED_MODULE_0__lib_utils_sticky__","stickyTop","remoteFilter","./init_issuable_sidebar.js","__WEBPACK_IMPORTED_MODULE_0__milestone_select__","__WEBPACK_IMPORTED_MODULE_1__labels_select__","__WEBPACK_IMPORTED_MODULE_2__issuable_context__","__WEBPACK_IMPORTED_MODULE_3__right_sidebar__","__WEBPACK_IMPORTED_MODULE_4__due_date_select__","sidebarOptions","full_path","currentUser","initialize","./init_notes.js","__WEBPACK_IMPORTED_MODULE_0__notes__","dataEl","_JSON$parse","notesUrl","notesIds","diffView","autocomplete","./issuable_bulk_update_actions.js","prefixId","$labelDropdown","willUpdateLabels","onFormSubmit","getFormDataAsObject","onFormSubmitFailure","getSelectedIssues","getLabelsFromSelection","labelsData","labelId","getUnmarkedIndeterminedLabels","labelsToKeep","state_event","assignee_id","assignee_ids","milestone_id","issuable_ids","subscription_event","add_label_ids","remove_label_ids","setOriginalDropdownData","$labelSelect","getOriginalCommonIds","getOriginalMarkedIds","getOriginalIndeterminateIds","labelIds","intersection","uniqueIds","issuableLabels","scopeEl","./issuable_context.js","__WEBPACK_IMPORTED_MODULE_2__users_select__","IssuableContext","userSelect","select2","dropdownAutoWidth","bpBreakpoint","./labels_select.js","__WEBPACK_IMPORTED_MODULE_3__issuable_bulk_update_actions__","__WEBPACK_IMPORTED_MODULE_5__create_label__","__WEBPACK_IMPORTED_MODULE_6__flash__","LabelsSelect","$els","$sidebarCollapsedValue","defaultLabel","issueURLSplit","labelHTMLTemplate","labelNoneHTMLTemplate","labelUrl","saveLabelData","selectedLabel","showAny","showNo","$sidebarLabelTooltip","initialSelected","useId","$dropdownContainer","handleClick","isEqual","label_ids","labelCount","labelTooltipTitle","labelTitles","chain","groupBy","dup","duplicate","extraData","isAny","$a","$li","colorEl","indeterminate","removesAll","selectedClass","marked","dropdownName","dropdownValue","selectedLabels","isIssueIndex","isMRIndex","Issuable","filterResults","boardsModel","enableBulkLabelDropdown","setDropdownData","ModalStore","store","ListLabel","textColor","onSelectCheckboxIssue","markedIds","unmarkedIds","indeterminateIds","./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","AccessorUtilities","./lib/utils/ajax_cache.js","__WEBPACK_IMPORTED_MODULE_0__axios_utils__","__WEBPACK_IMPORTED_MODULE_1__cache__","AjaxCache","_Cache","pendingRequests","endpoint","internalStorage","forceRetrieve","hasData","pendingRequest","textStatus","./lib/utils/cache.js","Cache","./lib/utils/common_utils.js","getPagePath","isInGroupsPage","isInProjectPage","getProjectSlug","getGroupSlug","isInIssuePage","ajaxGet","rstrip","updateTooltipTitle","handleLocationHash","isInViewport","parseUrlPathname","getUrlParamsArray","isMetaKey","isMetaClick","scrollToElement","getParameterByName","getSelectedFragment","nodeMatchesSelector","normalizeHeaders","normalizeCRLFHeaders","parseIntPagination","parseQueryStringIntoObject","buildUrlWithCurrentLocation","historyPushState","convertPermissionToBoolean","backOff","setFavicon","setCiStatusFavicon","__WEBPACK_IMPORTED_MODULE_1__url_utility__","globalEval","$tooltipEl","newTitle","buttonSelector","closestSubmit","fixedTabs","fixedDiffStats","fixedNav","adjustment","scrollBy","rect","parseUrl","parsedUrl","param","mrTabsHeight","urlToParse","parsedName","rangeCount","getRangeAt","cloneContents","insertedText","newText","matchingNodes","upperCaseHeaders","headersObject","keyValue","paginationInformation","perPage","totalPages","nextPage","previousPage","acc","newUrl","permission","nextInterval","timeElapsed","stop","faviconPath","faviconEl","resetFavicon","originalFavicon","pageUrl","favicon","icon","sprite_icons","imagePath","imgUrl","asset_host","./lib/utils/datefix.js","parsePikadayDate","pikadayToString","./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","datetime","renderTimeago","timeagoEls","$timeagoEls","setTimeago","time","expiredLabel","date1","UTC","date2","./lib/utils/image_utility.js","isImageLoaded","./lib/utils/regexp.js","./lib/utils/sticky.js","createPlaceholder","placeholder","isSticky","scrollY","insertPlaceholder","heightBefore","CSS","supports","./lib/utils/text_markdown.js","textUtils","lineBefore","lineAfter","blockTagText","textArea","blockTag","selectedSplit","startChar","removedLastNewLine","removedFirstNewLine","currentLineEmpty","lastNewLine","replaceRange","moveCursor","wrapped","updateText","$textArea","substitute","./lib/utils/text_utility.js","addDelimiter","highCountTrim","humanize","pluralize","dasherize","slugify","truncate","stripHtml","convertToCamelCase","maxLength","./lib/utils/type_utility.js","./lib/utils/url_utility.js","getParameterValues","sParam","urlParam","sParameterName","mergeUrlParams","paramValue","pattern","removeParamQueryString","removeParams","getLocationHash","hashIndex","visitUrl","otherWindow","opener","refreshCurrentPage","redirectTo","./locale/index.js","jed","jed_default","underscore_default","parameters","escapeParameters","parameterName","parameterValue","escapedParameterValue","languageCode","createDateTimeFormat","translations","pluralText","translated","keyOrContext","normalizedKey","formatOptions","Intl","DateTimeFormat","./logo.js","initLogoAnimation","./main.js","__WEBPACK_IMPORTED_MODULE_0_jquery__","__WEBPACK_IMPORTED_MODULE_0_jquery___default","__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","$window","$sidebarGutterToggle","DEFAULTS","tip","viewport","$buttons","ajaxError","xhrObj","notesHolders","btn","./merge_request.js","MergeRequest","submitNoteForm","showAllCommits","initTabs","initMRBtnListeners","initCommitMessageListeners","__WEBPACK_IMPORTED_MODULE_4__helpers_issuables_helper__","__WEBPACK_IMPORTED_MODULE_2__task_list__","onSuccess","task_status","task_status_short","__WEBPACK_IMPORTED_MODULE_3__merge_request_tabs__","__WEBPACK_IMPORTED_MODULE_5__lib_utils_text_utility__","mrTabs","unbindEvents","shouldSubmit","setDisable","noteText","setStatusBoxToMerged","decreaseCounter","by","hideCloseButton","closeDropdownItem","./merge_request_tabs.js","__WEBPACK_IMPORTED_MODULE_3__blob_blob_fork_suggestion__","__WEBPACK_IMPORTED_MODULE_4__init_changes_dropdown__","__WEBPACK_IMPORTED_MODULE_5__breakpoints__","__WEBPACK_IMPORTED_MODULE_7__lib_utils_url_utility__","__WEBPACK_IMPORTED_MODULE_8__image_diff_init_discussion_tab__","__WEBPACK_IMPORTED_MODULE_9__diff__","__WEBPACK_IMPORTED_MODULE_10__lib_utils_datetime_utility__","__WEBPACK_IMPORTED_MODULE_11__syntax_highlight__","__WEBPACK_IMPORTED_MODULE_12__notes__","MergeRequestTabs","setUrl","stubLocation","mergeRequestTabs","navbar","diffsLoaded","pipelinesLoaded","commitsLoaded","fixedLayoutPref","setCurrentAction","tabShown","showTab","activateTab","initAffix","clickTab","commitPipelinesTable","$destroy","targetLink","loadCommits","expandView","resetViewContainer","destroyPipelinesView","isDiffAction","loadDiff","shrinkView","diffViewType","expandViewContainer","mountPipelinesView","scrollTo","currentAction","replaceState","pipelineTableViewEl","CommitPipelinesTable","propsData","helpPagePath","emptyStateSvgPath","errorStateSvgPath","autoDevopsHelpPath","helpAutoDevopsPath","$mount","urlPathname","diffNotesCompileComponents","notesContent","lineType","toggleDiffNote","forceShow","$wrapper","$gutterIcon","$tabs","$fixedNav","$diffTabs","affix","marginTop","./milestone_select.js","__WEBPACK_IMPORTED_MODULE_2__lib_utils_datetime_utility__","MilestoneSelect","currentProject","collapsedSidebarLabelTemplate","milestoneLinkNoneTemplate","milestoneLinkTemplate","selectedMilestone","selectedMilestoneDefault","milestonesUrl","showUpcoming","showStarted","defaultNo","$selectBox","extraOptions","milestone","boardsStore","isSelecting","remaining","boardStoreIssueSet","ListMilestone","boardStoreIssueDelete","./notes.js","notes__classCallCheck","normalizeNewlines","jquery","jquery_default","js_cookie","js_cookie_default","ajax_cache","axios_utils","url_utility","flash","comment_type_toggle_CommentTypeToggle","CommentTypeToggle","noteTypeInput","submitButton","closeButton","reopenButton","comment_type_toggle","gl_form","awards_handler","autosave","task_list","common_utils","datetime_utility","notes__createClass","REGEX_QUICK_ACTIONS","notes_Notes","Notes","notes_url","note_ids","last_fetched_at","updateTargetButtons","updateComment","visibilityChange","cancelDiscussionForm","onAddDiffNote","onAddImageDiffNote","setupDiscussionNoteForm","onReplyToDiscussionNote","removeNote","cancelEdit","updateNote","addDiscussionNote","addNoteError","addNote","resetMainTargetForm","refresh","keydownNoteText","toggleCommitList","postComment","clearFlashWrapper","clearFlash","onHashChange","updatedNotesTrackingMap","noteable_url","notesCountBadge","basePollingInterval","maxPollingSteps","setPollingInterval","setupMainTargetNoteForm","collapseLongCommitList","setViewType","insertAfter","showEditForm","removeAttachment","updateFormAttachment","reenableTargetFormSubmitButton","$textarea","discussionNoteForm","editNote","myLastNote","myLastNoteEditBtn","originalText","removeDiscussionNoteForm","removeNoteEditForm","interval","clearInterval","pollingInterval","getContent","refreshing","X-Last-Fetched-At","notes","note","renderNote","shouldReset","nthInterval","initRefresh","noteEntity","commands_changes","checkMergeRequestStatus","awardsHandler","emoji_award","scrollToAwards","$note","updateNoteTargetSelector","$noteToCleanHighlight","$notesList","discussion_html","renderDiscussionNote","commands_only","addFlash","parentTimeline","isNewNote","$newNote","animateAppendNote","setupNewNote","updateNotesCount","isUpdatedNote","isEditing","initialContent","currentContent","sanitizedNoteNote","isTextareaUntouched","putConflictEditWarningInPlace","$updatedNote","animateUpdateNote","discussionContainer","diffAvatarContainer","discussion_id","discussion_line_code","on_image","prevAll","diff_discussion_html","$discussion","renderGFM","$notes","contentContainerClass","discussion_resolvable","renderDiscussionAvatar","changesDiscussionContainer","avatarHolder","formClone","setupNoteForm","initCommentTypeToggle","glForm","formParentTimeline","$parentTimeline","isNewDiffComment","mergeRequestId","ResolveService","toggleResolveForDiscussion","$targetNote","$noteEntityEl","$note_li","revertNoteEditForm","isAllowed","$editForm","getEditFormSelector","$currentlyEditing","checkContentToAllowEditing","putEditFormInPlace","noteElId","diffNoteApps","notesTr","removeBadgeEvent","replyToDiscussionNote","replyLink","cleanForm","dataHolder","diffFileData","discussionID","$link","showReplyInput","newForm","appendTo","addForm","hasNotes","noteForm","replyButton","rowCssToAdd","_ref2$showReplyInput","nextRow","targetRow","lineTypeSelector","notesContentSelector","isCurrentlyShown","isForced","showNow","blurEvent","closebtn","closetext","discardbtn","reopenbtn","reopentext","$originalContentEl","originalContent","postUrl","targetId","targetType","updateCount","$element","$closestSystemCommitList","systemNotes","systemNote","$systemNote","headerMessage","flashParams","content","formContent","formAction","formContentOriginal","availableQuickActions","tempFormContent","executedCommands","commandDescription","uniqueId","isDiscussionNote","currentUsername","currentUserFullname","currentUserAvatar","discussionClass","$tempNote","$submitBtn","$closeBtn","isMainForm","isDiscussionForm","isDiscussionResolve","_getFormData","getFormData","noteUniqueId","systemNoteUniqueId","hasQuickActions","$notesContainer","stripQuickActions","createPlaceholderNote","current_username","current_user_fullname","current_user_avatar_url","createPlaceholderSystemNote","getQuickActionDescription","notePosition","addBadgeEvent","handleQuickActions","closestDiffFile","$editingNote","$noteBody","$noteBodyText","_getFormData2","cachedNoteBodyText","updateNoteError","addTargetClass","Boolean","noteIds","inArray","mrWidget","checkStatus","noteHtml","./preview_markdown.js","MarkdownPreview","lastTextareaPreviewed","markdownPreview","previewButtonSelector","writeButtonSelector","lastTextareaHeight","referenceThreshold","emptyMessage","ajaxCache","showPreview","mdText","preview","hideReferencedUsers","fetchMarkdownPreview","renderReferencedUsers","references","renderReferencedCommands","referencedUsers","hideReferencedCommands","referencedCommands","markdownToolbar","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","_self","staticClass","attrs","size-class","entity-id","entity-name","domProps","esExports","components_projects_list_item","normalizeComponent","Component","projects_dropdown_components_projects_list_item","projects_list_frequent","projectsListItem","localStorageFailed","isListEmpty","listEmptyMessage","projects_list_frequent_render","project-id","project-name","web-url","avatar-url","projects_list_frequent_staticRenderFns","projects_list_frequent_esExports","components_projects_list_frequent","projects_list_frequent_normalizeComponent","projects_list_frequent_Component","projects_dropdown_components_projects_list_frequent","projects_list_search","searchFailed","projects_list_search_render","class","section-failure","projects_list_search_staticRenderFns","projects_list_search_esExports","components_projects_list_search","projects_list_search_normalizeComponent","projects_list_search_Component","projects_dropdown_components_projects_list_search","searchQuery","watch","handleInput","mounted","$on","setFocus","beforeDestroy","$off","$refs","emitSearchEvents","$emit","search_render","directives","rawName","s__","$event","composing","aria-hidden","search_staticRenderFns","search_esExports","components_search","search_normalizeComponent","search_Component","projects_dropdown_components_search","loadingIcon","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","local-storage-failed","search-failed","app_staticRenderFns","app_esExports","components_app","app_normalizeComponent","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","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","order_by","getTopFrequentProjects","matchFound","storedFrequentProjects","storedRawProjects","projectItem","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","renderMath","__WEBPACK_IMPORTED_MODULE_0__locale__","./render_mermaid.js","renderMermaid","mermaid","startOnLoad","__WEBPACK_IMPORTED_MODULE_0__flash__","./right_sidebar.js","Sidebar","toggleTodo","__WEBPACK_IMPORTED_MODULE_3__lib_utils_axios_utils__","sidebarCollapseClicked","onSidebarDropdownHidden","sidebarDropdownLoading","sidebarDropdownLoaded","sidebarToggleClicked","triggered","$allGutterToggleIcons","$thisIcon","ajaxType","issuable_id","issuable_type","todoUpdateDone","deletePath","delete_path","attrPrefix","$todoBtns","$elText","$sidebarCollapsedIcon","openDropdown","blockOrName","getBlock","isOpen","setCollapseAfterUpdate","toggleSidebar","sidebarDropdownHidden","triggerOpenSidebar","./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_id","project_ref","disableAutocomplete","lastCategory","suggestion","category","_gl","_options","baseItems","issueItems","mergeRequestItems","search_project_id","group_id","search_code","repository_ref","_location","badgePresent","removeLocationBadge","restoreOriginalState","isFocused","getValue","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","./shortcuts_issuable.js","__WEBPACK_IMPORTED_MODULE_0_mousetrap__","__WEBPACK_IMPORTED_MODULE_0_mousetrap___default","__WEBPACK_IMPORTED_MODULE_2__right_sidebar__","__WEBPACK_IMPORTED_MODULE_3__shortcuts__","__WEBPACK_IMPORTED_MODULE_4__behaviors_copy_as_gfm__","ShortcutsIssuable","_Shortcuts","isMergeRequest","$replyField","openSidebarDropdown","replyWithSelectedText","editIssue","quote","./single_file_diff.js","__WEBPACK_IMPORTED_MODULE_3__files_comment_button__","__WEBPACK_IMPORTED_MODULE_4__image_diff_helpers_index__","__WEBPACK_IMPORTED_MODULE_5__syntax_highlight__","WRAPPER","LOADING_HTML","COLLAPSED_HTML","SingleFileDiff","$toggleIcon","diffForPath","collapsedContent","loadingContent","hasError","getContentHTML","$file","./syntax_highlight.js","syntaxHighlight","user_color_scheme","$children","./task_list.js","__WEBPACK_IMPORTED_MODULE_0_deckar01_task_list__","onError","errorMessages","patchData","./users_select.js","UsersSelect","user","userPath","$collapsedSidebar","assignTo","assigneeTemplate","collapsedAssigneeTemplate","defaultNullUser","firstUser","issueURL","selectedId","selectedIdDefault","showAnyUser","showNullUser","showCurrentUser","todoFilter","todoStateFilter","authorId","assignYourself","unassignedSelected","currentUserInfo","getSelectedUserInputs","getSelected","checkMaxSelect","maxSelect","firstSelectedId","emitSidebarEvent","getMultiSelectDropdownTitle","selectedUser","selectedUsers","otherSelected","assignee","avatar","selectedInputs","userId","_input$dataset","anyUser","showDivider","beforeDivider","previouslySelected","highlightSelected","default_avatar_url","showEmailUser","skipLdap","skipUsers","multiple","minimumInputLength","emailUser","nullUser","trimmed","invite","formatResult","formatSelection","dropdownCssClass","escapeMarkup","user_id","active","skip_ldap","todo_filter","todo_state_filter","current_user","author_id","skip_users","./vue_shared/components/identicon.vue","entityId","entityName","sizeClass","identiconStyles","identiconTitle","components_identicon","./vue_shared/components/loading_icon.vue","inline","rootElementType","cssClass","aria-label","components_loading_icon","./vue_shared/translate.js","mixin","__","n__","./zen_mode.js","__WEBPACK_IMPORTED_MODULE_0_vendor_jquery_scrollTo__","__WEBPACK_IMPORTED_MODULE_1_dropzone__","__WEBPACK_IMPORTED_MODULE_1_dropzone___default","__WEBPACK_IMPORTED_MODULE_2_mousetrap__","__WEBPACK_IMPORTED_MODULE_2_mousetrap___default","__WEBPACK_IMPORTED_MODULE_3_mousetrap_plugins_pause_mousetrap_pause__","ZenMode","active_backdrop","active_textarea","enter","exit","backdrop","$dropzone","zen_area","ignored /opt/gitlab/embedded/service/gitlab-rails/node_modules/vue-resource/dist got"],"mappings":"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","file":"main.1b26159fcc681f215a1f.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/deckar01-task_list/dist/task_list.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(jQuery) {(function webpackUniversalModuleDefinition(root, factory) {\n\tif(true)\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"TaskList\"] = factory();\n\telse\n\t\troot[\"TaskList\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports) {\n\nvar NodeArray, TaskList, closest, createEvent,\n indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\n\nNodeArray = function(nodeList) {\n return Array.prototype.slice.apply(nodeList);\n};\n\nclosest = function(el, className) {\n while (el && !el.classList.contains(className)) {\n el = el.parentNode;\n }\n return el;\n};\n\ncreateEvent = function(eventName, detail) {\n var event;\n if (typeof Event === 'function') {\n event = new Event(eventName, {\n bubbles: true,\n cancelable: true\n });\n event.detail = detail;\n } else {\n event = document.createEvent('CustomEvent');\n event.initCustomEvent(eventName, true, true, detail);\n }\n return event;\n};\n\nTaskList = (function() {\n function TaskList(el1) {\n this.el = el1;\n this.container = closest(this.el, 'js-task-list-container');\n this.field = this.container.querySelector('.js-task-list-field');\n this.container.addEventListener('change', (function(_this) {\n return function(event) {\n if (event.target.classList.contains('task-list-item-checkbox')) {\n return _this.updateTaskList(event.target);\n }\n };\n })(this));\n this.enable();\n }\n\n TaskList.prototype.enable = function() {\n var event;\n if (this.container.querySelectorAll('.js-task-list-field').length > 0) {\n NodeArray(this.container.querySelectorAll('.task-list-item')).forEach(function(item) {\n return item.classList.add('enabled');\n });\n NodeArray(this.container.querySelectorAll('.task-list-item-checkbox')).forEach(function(checkbox) {\n return checkbox.disabled = false;\n });\n this.container.classList.add('is-task-list-enabled');\n event = createEvent('tasklist:enabled');\n return this.container.dispatchEvent(event);\n }\n };\n\n TaskList.prototype.disable = function() {\n var event;\n NodeArray(this.container.querySelectorAll('.task-list-item')).forEach(function(item) {\n return item.classList.remove('enabled');\n });\n NodeArray(this.container.querySelectorAll('.task-list-item-checkbox')).forEach(function(checkbox) {\n return checkbox.disabled = true;\n });\n this.container.classList.remove('is-task-list-enabled');\n event = createEvent('tasklist:disabled');\n return this.container.dispatchEvent(event);\n };\n\n TaskList.prototype.updateTaskList = function(item) {\n var changeEvent, changedEvent, checkboxes, index;\n checkboxes = this.container.querySelectorAll('.task-list-item-checkbox');\n index = 1 + NodeArray(checkboxes).indexOf(item);\n changeEvent = createEvent('tasklist:change', {\n index: index,\n checked: item.checked\n });\n this.field.dispatchEvent(changeEvent);\n if (!changeEvent.defaultPrevented) {\n this.field.value = TaskList.updateSource(this.field.value, index, item.checked);\n changeEvent = createEvent('change');\n this.field.dispatchEvent(changeEvent);\n changedEvent = createEvent('tasklist:changed', {\n index: index,\n checked: item.checked\n });\n return this.field.dispatchEvent(changedEvent);\n }\n };\n\n TaskList.incomplete = \"[ ]\";\n\n TaskList.complete = \"[x]\";\n\n TaskList.escapePattern = function(str) {\n return str.replace(/([\\[\\]])/g, \"\\\\$1\").replace(/\\s/, \"\\\\s\").replace(\"x\", \"[xX]\");\n };\n\n TaskList.incompletePattern = RegExp(\"\" + (TaskList.escapePattern(TaskList.incomplete)));\n\n TaskList.completePattern = RegExp(\"\" + (TaskList.escapePattern(TaskList.complete)));\n\n TaskList.itemPattern = RegExp(\"^(?:\\\\s*(?:>\\\\s*)*(?:[-+*]|(?:\\\\d+\\\\.)))\\\\s*(\" + (TaskList.escapePattern(TaskList.complete)) + \"|\" + (TaskList.escapePattern(TaskList.incomplete)) + \")\\\\s+(?!\\\\(.*?\\\\))(?=(?:\\\\[.*?\\\\]\\\\s*(?:\\\\[.*?\\\\]|\\\\(.*?\\\\))\\\\s*)*(?:[^\\\\[]|$))\");\n\n TaskList.startFencesPattern = /^`{3}.*$/;\n\n TaskList.endFencesPattern = /^`{3}$/;\n\n TaskList.itemsInParasPattern = RegExp(\"^(\" + (TaskList.escapePattern(TaskList.complete)) + \"|\" + (TaskList.escapePattern(TaskList.incomplete)) + \").+$\", \"g\");\n\n TaskList.updateSource = function(source, itemIndex, checked) {\n var clean, inCodeBlock, index, line, result;\n clean = source.replace(/\\r/g, '').replace(this.itemsInParasPattern, '').split(\"\\n\");\n index = 0;\n inCodeBlock = false;\n result = (function() {\n var i, len, ref, results;\n ref = source.split(\"\\n\");\n results = [];\n for (i = 0, len = ref.length; i < len; i++) {\n line = ref[i];\n if (inCodeBlock) {\n if (line.match(this.endFencesPattern)) {\n inCodeBlock = false;\n }\n } else if (line.match(this.startFencesPattern)) {\n inCodeBlock = true;\n } else if (indexOf.call(clean, line) >= 0 && line.match(this.itemPattern)) {\n index += 1;\n if (index === itemIndex) {\n line = checked ? line.replace(this.incompletePattern, this.complete) : line.replace(this.completePattern, this.incomplete);\n }\n }\n results.push(line);\n }\n return results;\n }).call(this);\n return result.join(\"\\n\");\n };\n\n return TaskList;\n\n})();\n\nif (typeof jQuery !== 'undefined') {\n jQuery.fn.taskList = function(method) {\n return this.each(function(index, el) {\n var taskList;\n taskList = jQuery(el).data('task-list');\n if (!taskList) {\n taskList = new TaskList(el);\n jQuery(el).data('task-list', taskList);\n if (!method || method === 'enable') {\n return;\n }\n }\n return taskList[method || 'enable']();\n });\n };\n}\n\nmodule.exports = TaskList;\n\n\n/***/ })\n/******/ ]);\n});\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\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/dropzone/dist/dropzone.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(jQuery, module) {\n/*\n *\n * More info at [www.dropzonejs.com](http://www.dropzonejs.com)\n *\n * Copyright (c) 2012, Matias Meno\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n *\n */\n\n(function() {\n var Dropzone, Emitter, camelize, contentLoaded, detectVerticalSquash, drawImageIOSFix, noop, without,\n __slice = [].slice,\n __hasProp = {}.hasOwnProperty,\n __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n noop = function() {};\n\n Emitter = (function() {\n function Emitter() {}\n\n Emitter.prototype.addEventListener = Emitter.prototype.on;\n\n Emitter.prototype.on = function(event, fn) {\n this._callbacks = this._callbacks || {};\n if (!this._callbacks[event]) {\n this._callbacks[event] = [];\n }\n this._callbacks[event].push(fn);\n return this;\n };\n\n Emitter.prototype.emit = function() {\n var args, callback, callbacks, event, _i, _len;\n event = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\n this._callbacks = this._callbacks || {};\n callbacks = this._callbacks[event];\n if (callbacks) {\n for (_i = 0, _len = callbacks.length; _i < _len; _i++) {\n callback = callbacks[_i];\n callback.apply(this, args);\n }\n }\n return this;\n };\n\n Emitter.prototype.removeListener = Emitter.prototype.off;\n\n Emitter.prototype.removeAllListeners = Emitter.prototype.off;\n\n Emitter.prototype.removeEventListener = Emitter.prototype.off;\n\n Emitter.prototype.off = function(event, fn) {\n var callback, callbacks, i, _i, _len;\n if (!this._callbacks || arguments.length === 0) {\n this._callbacks = {};\n return this;\n }\n callbacks = this._callbacks[event];\n if (!callbacks) {\n return this;\n }\n if (arguments.length === 1) {\n delete this._callbacks[event];\n return this;\n }\n for (i = _i = 0, _len = callbacks.length; _i < _len; i = ++_i) {\n callback = callbacks[i];\n if (callback === fn) {\n callbacks.splice(i, 1);\n break;\n }\n }\n return this;\n };\n\n return Emitter;\n\n })();\n\n Dropzone = (function(_super) {\n var extend, resolveOption;\n\n __extends(Dropzone, _super);\n\n Dropzone.prototype.Emitter = Emitter;\n\n\n /*\n This is a list of all available events you can register on a dropzone object.\n \n You can register an event handler like this:\n \n dropzone.on(\"dragEnter\", function() { });\n */\n\n Dropzone.prototype.events = [\"drop\", \"dragstart\", \"dragend\", \"dragenter\", \"dragover\", \"dragleave\", \"addedfile\", \"addedfiles\", \"removedfile\", \"thumbnail\", \"error\", \"errormultiple\", \"processing\", \"processingmultiple\", \"uploadprogress\", \"totaluploadprogress\", \"sending\", \"sendingmultiple\", \"success\", \"successmultiple\", \"canceled\", \"canceledmultiple\", \"complete\", \"completemultiple\", \"reset\", \"maxfilesexceeded\", \"maxfilesreached\", \"queuecomplete\"];\n\n Dropzone.prototype.defaultOptions = {\n url: null,\n method: \"post\",\n withCredentials: false,\n parallelUploads: 2,\n uploadMultiple: false,\n maxFilesize: 256,\n paramName: \"file\",\n createImageThumbnails: true,\n maxThumbnailFilesize: 10,\n thumbnailWidth: 120,\n thumbnailHeight: 120,\n filesizeBase: 1000,\n maxFiles: null,\n params: {},\n clickable: true,\n ignoreHiddenFiles: true,\n acceptedFiles: null,\n acceptedMimeTypes: null,\n autoProcessQueue: true,\n autoQueue: true,\n addRemoveLinks: false,\n previewsContainer: null,\n hiddenInputContainer: \"body\",\n capture: null,\n dictDefaultMessage: \"Drop files here to upload\",\n dictFallbackMessage: \"Your browser does not support drag'n'drop file uploads.\",\n dictFallbackText: \"Please use the fallback form below to upload your files like in the olden days.\",\n dictFileTooBig: \"File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.\",\n dictInvalidFileType: \"You can't upload files of this type.\",\n dictResponseError: \"Server responded with {{statusCode}} code.\",\n dictCancelUpload: \"Cancel upload\",\n dictCancelUploadConfirmation: \"Are you sure you want to cancel this upload?\",\n dictRemoveFile: \"Remove file\",\n dictRemoveFileConfirmation: null,\n dictMaxFilesExceeded: \"You can not upload any more files.\",\n accept: function(file, done) {\n return done();\n },\n init: function() {\n return noop;\n },\n forceFallback: false,\n fallback: function() {\n var child, messageElement, span, _i, _len, _ref;\n this.element.className = \"\" + this.element.className + \" dz-browser-not-supported\";\n _ref = this.element.getElementsByTagName(\"div\");\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n child = _ref[_i];\n if (/(^| )dz-message($| )/.test(child.className)) {\n messageElement = child;\n child.className = \"dz-message\";\n continue;\n }\n }\n if (!messageElement) {\n messageElement = Dropzone.createElement(\"
\");\n this.element.appendChild(messageElement);\n }\n span = messageElement.getElementsByTagName(\"span\")[0];\n if (span) {\n if (span.textContent != null) {\n span.textContent = this.options.dictFallbackMessage;\n } else if (span.innerText != null) {\n span.innerText = this.options.dictFallbackMessage;\n }\n }\n return this.element.appendChild(this.getFallbackForm());\n },\n resize: function(file) {\n var info, srcRatio, trgRatio;\n info = {\n srcX: 0,\n srcY: 0,\n srcWidth: file.width,\n srcHeight: file.height\n };\n srcRatio = file.width / file.height;\n info.optWidth = this.options.thumbnailWidth;\n info.optHeight = this.options.thumbnailHeight;\n if ((info.optWidth == null) && (info.optHeight == null)) {\n info.optWidth = info.srcWidth;\n info.optHeight = info.srcHeight;\n } else if (info.optWidth == null) {\n info.optWidth = srcRatio * info.optHeight;\n } else if (info.optHeight == null) {\n info.optHeight = (1 / srcRatio) * info.optWidth;\n }\n trgRatio = info.optWidth / info.optHeight;\n if (file.height < info.optHeight || file.width < info.optWidth) {\n info.trgHeight = info.srcHeight;\n info.trgWidth = info.srcWidth;\n } else {\n if (srcRatio > trgRatio) {\n info.srcHeight = file.height;\n info.srcWidth = info.srcHeight * trgRatio;\n } else {\n info.srcWidth = file.width;\n info.srcHeight = info.srcWidth / trgRatio;\n }\n }\n info.srcX = (file.width - info.srcWidth) / 2;\n info.srcY = (file.height - info.srcHeight) / 2;\n return info;\n },\n\n /*\n Those functions register themselves to the events on init and handle all\n the user interface specific stuff. Overwriting them won't break the upload\n but can break the way it's displayed.\n You can overwrite them if you don't like the default behavior. If you just\n want to add an additional event handler, register it on the dropzone object\n and don't overwrite those options.\n */\n drop: function(e) {\n return this.element.classList.remove(\"dz-drag-hover\");\n },\n dragstart: noop,\n dragend: function(e) {\n return this.element.classList.remove(\"dz-drag-hover\");\n },\n dragenter: function(e) {\n return this.element.classList.add(\"dz-drag-hover\");\n },\n dragover: function(e) {\n return this.element.classList.add(\"dz-drag-hover\");\n },\n dragleave: function(e) {\n return this.element.classList.remove(\"dz-drag-hover\");\n },\n paste: noop,\n reset: function() {\n return this.element.classList.remove(\"dz-started\");\n },\n addedfile: function(file) {\n var node, removeFileEvent, removeLink, _i, _j, _k, _len, _len1, _len2, _ref, _ref1, _ref2, _results;\n if (this.element === this.previewsContainer) {\n this.element.classList.add(\"dz-started\");\n }\n if (this.previewsContainer) {\n file.previewElement = Dropzone.createElement(this.options.previewTemplate.trim());\n file.previewTemplate = file.previewElement;\n this.previewsContainer.appendChild(file.previewElement);\n _ref = file.previewElement.querySelectorAll(\"[data-dz-name]\");\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n node = _ref[_i];\n node.textContent = file.name;\n }\n _ref1 = file.previewElement.querySelectorAll(\"[data-dz-size]\");\n for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {\n node = _ref1[_j];\n node.innerHTML = this.filesize(file.size);\n }\n if (this.options.addRemoveLinks) {\n file._removeLink = Dropzone.createElement(\"\" + this.options.dictRemoveFile + \"\");\n file.previewElement.appendChild(file._removeLink);\n }\n removeFileEvent = (function(_this) {\n return function(e) {\n e.preventDefault();\n e.stopPropagation();\n if (file.status === Dropzone.UPLOADING) {\n return Dropzone.confirm(_this.options.dictCancelUploadConfirmation, function() {\n return _this.removeFile(file);\n });\n } else {\n if (_this.options.dictRemoveFileConfirmation) {\n return Dropzone.confirm(_this.options.dictRemoveFileConfirmation, function() {\n return _this.removeFile(file);\n });\n } else {\n return _this.removeFile(file);\n }\n }\n };\n })(this);\n _ref2 = file.previewElement.querySelectorAll(\"[data-dz-remove]\");\n _results = [];\n for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) {\n removeLink = _ref2[_k];\n _results.push(removeLink.addEventListener(\"click\", removeFileEvent));\n }\n return _results;\n }\n },\n removedfile: function(file) {\n var _ref;\n if (file.previewElement) {\n if ((_ref = file.previewElement) != null) {\n _ref.parentNode.removeChild(file.previewElement);\n }\n }\n return this._updateMaxFilesReachedClass();\n },\n thumbnail: function(file, dataUrl) {\n var thumbnailElement, _i, _len, _ref;\n if (file.previewElement) {\n file.previewElement.classList.remove(\"dz-file-preview\");\n _ref = file.previewElement.querySelectorAll(\"[data-dz-thumbnail]\");\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n thumbnailElement = _ref[_i];\n thumbnailElement.alt = file.name;\n thumbnailElement.src = dataUrl;\n }\n return setTimeout(((function(_this) {\n return function() {\n return file.previewElement.classList.add(\"dz-image-preview\");\n };\n })(this)), 1);\n }\n },\n error: function(file, message) {\n var node, _i, _len, _ref, _results;\n if (file.previewElement) {\n file.previewElement.classList.add(\"dz-error\");\n if (typeof message !== \"String\" && message.error) {\n message = message.error;\n }\n _ref = file.previewElement.querySelectorAll(\"[data-dz-errormessage]\");\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n node = _ref[_i];\n _results.push(node.textContent = message);\n }\n return _results;\n }\n },\n errormultiple: noop,\n processing: function(file) {\n if (file.previewElement) {\n file.previewElement.classList.add(\"dz-processing\");\n if (file._removeLink) {\n return file._removeLink.textContent = this.options.dictCancelUpload;\n }\n }\n },\n processingmultiple: noop,\n uploadprogress: function(file, progress, bytesSent) {\n var node, _i, _len, _ref, _results;\n if (file.previewElement) {\n _ref = file.previewElement.querySelectorAll(\"[data-dz-uploadprogress]\");\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n node = _ref[_i];\n if (node.nodeName === 'PROGRESS') {\n _results.push(node.value = progress);\n } else {\n _results.push(node.style.width = \"\" + progress + \"%\");\n }\n }\n return _results;\n }\n },\n totaluploadprogress: noop,\n sending: noop,\n sendingmultiple: noop,\n success: function(file) {\n if (file.previewElement) {\n return file.previewElement.classList.add(\"dz-success\");\n }\n },\n successmultiple: noop,\n canceled: function(file) {\n return this.emit(\"error\", file, \"Upload canceled.\");\n },\n canceledmultiple: noop,\n complete: function(file) {\n if (file._removeLink) {\n file._removeLink.textContent = this.options.dictRemoveFile;\n }\n if (file.previewElement) {\n return file.previewElement.classList.add(\"dz-complete\");\n }\n },\n completemultiple: noop,\n maxfilesexceeded: noop,\n maxfilesreached: noop,\n queuecomplete: noop,\n addedfiles: noop,\n previewTemplate: \"
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n \\n Check\\n \\n \\n \\n \\n \\n
\\n
\\n \\n Error\\n \\n \\n \\n \\n \\n \\n \\n
\\n
\"\n };\n\n extend = function() {\n var key, object, objects, target, val, _i, _len;\n target = arguments[0], objects = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\n for (_i = 0, _len = objects.length; _i < _len; _i++) {\n object = objects[_i];\n for (key in object) {\n val = object[key];\n target[key] = val;\n }\n }\n return target;\n };\n\n function Dropzone(element, options) {\n var elementOptions, fallback, _ref;\n this.element = element;\n this.version = Dropzone.version;\n this.defaultOptions.previewTemplate = this.defaultOptions.previewTemplate.replace(/\\n*/g, \"\");\n this.clickableElements = [];\n this.listeners = [];\n this.files = [];\n if (typeof this.element === \"string\") {\n this.element = document.querySelector(this.element);\n }\n if (!(this.element && (this.element.nodeType != null))) {\n throw new Error(\"Invalid dropzone element.\");\n }\n if (this.element.dropzone) {\n throw new Error(\"Dropzone already attached.\");\n }\n Dropzone.instances.push(this);\n this.element.dropzone = this;\n elementOptions = (_ref = Dropzone.optionsForElement(this.element)) != null ? _ref : {};\n this.options = extend({}, this.defaultOptions, elementOptions, options != null ? options : {});\n if (this.options.forceFallback || !Dropzone.isBrowserSupported()) {\n return this.options.fallback.call(this);\n }\n if (this.options.url == null) {\n this.options.url = this.element.getAttribute(\"action\");\n }\n if (!this.options.url) {\n throw new Error(\"No URL provided.\");\n }\n if (this.options.acceptedFiles && this.options.acceptedMimeTypes) {\n throw new Error(\"You can't provide both 'acceptedFiles' and 'acceptedMimeTypes'. 'acceptedMimeTypes' is deprecated.\");\n }\n if (this.options.acceptedMimeTypes) {\n this.options.acceptedFiles = this.options.acceptedMimeTypes;\n delete this.options.acceptedMimeTypes;\n }\n this.options.method = this.options.method.toUpperCase();\n if ((fallback = this.getExistingFallback()) && fallback.parentNode) {\n fallback.parentNode.removeChild(fallback);\n }\n if (this.options.previewsContainer !== false) {\n if (this.options.previewsContainer) {\n this.previewsContainer = Dropzone.getElement(this.options.previewsContainer, \"previewsContainer\");\n } else {\n this.previewsContainer = this.element;\n }\n }\n if (this.options.clickable) {\n if (this.options.clickable === true) {\n this.clickableElements = [this.element];\n } else {\n this.clickableElements = Dropzone.getElements(this.options.clickable, \"clickable\");\n }\n }\n this.init();\n }\n\n Dropzone.prototype.getAcceptedFiles = function() {\n var file, _i, _len, _ref, _results;\n _ref = this.files;\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n file = _ref[_i];\n if (file.accepted) {\n _results.push(file);\n }\n }\n return _results;\n };\n\n Dropzone.prototype.getRejectedFiles = function() {\n var file, _i, _len, _ref, _results;\n _ref = this.files;\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n file = _ref[_i];\n if (!file.accepted) {\n _results.push(file);\n }\n }\n return _results;\n };\n\n Dropzone.prototype.getFilesWithStatus = function(status) {\n var file, _i, _len, _ref, _results;\n _ref = this.files;\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n file = _ref[_i];\n if (file.status === status) {\n _results.push(file);\n }\n }\n return _results;\n };\n\n Dropzone.prototype.getQueuedFiles = function() {\n return this.getFilesWithStatus(Dropzone.QUEUED);\n };\n\n Dropzone.prototype.getUploadingFiles = function() {\n return this.getFilesWithStatus(Dropzone.UPLOADING);\n };\n\n Dropzone.prototype.getAddedFiles = function() {\n return this.getFilesWithStatus(Dropzone.ADDED);\n };\n\n Dropzone.prototype.getActiveFiles = function() {\n var file, _i, _len, _ref, _results;\n _ref = this.files;\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n file = _ref[_i];\n if (file.status === Dropzone.UPLOADING || file.status === Dropzone.QUEUED) {\n _results.push(file);\n }\n }\n return _results;\n };\n\n Dropzone.prototype.init = function() {\n var eventName, noPropagation, setupHiddenFileInput, _i, _len, _ref, _ref1;\n if (this.element.tagName === \"form\") {\n this.element.setAttribute(\"enctype\", \"multipart/form-data\");\n }\n if (this.element.classList.contains(\"dropzone\") && !this.element.querySelector(\".dz-message\")) {\n this.element.appendChild(Dropzone.createElement(\"
\" + this.options.dictDefaultMessage + \"
\"));\n }\n if (this.clickableElements.length) {\n setupHiddenFileInput = (function(_this) {\n return function() {\n if (_this.hiddenFileInput) {\n _this.hiddenFileInput.parentNode.removeChild(_this.hiddenFileInput);\n }\n _this.hiddenFileInput = document.createElement(\"input\");\n _this.hiddenFileInput.setAttribute(\"type\", \"file\");\n if ((_this.options.maxFiles == null) || _this.options.maxFiles > 1) {\n _this.hiddenFileInput.setAttribute(\"multiple\", \"multiple\");\n }\n _this.hiddenFileInput.className = \"dz-hidden-input\";\n if (_this.options.acceptedFiles != null) {\n _this.hiddenFileInput.setAttribute(\"accept\", _this.options.acceptedFiles);\n }\n if (_this.options.capture != null) {\n _this.hiddenFileInput.setAttribute(\"capture\", _this.options.capture);\n }\n _this.hiddenFileInput.style.visibility = \"hidden\";\n _this.hiddenFileInput.style.position = \"absolute\";\n _this.hiddenFileInput.style.top = \"0\";\n _this.hiddenFileInput.style.left = \"0\";\n _this.hiddenFileInput.style.height = \"0\";\n _this.hiddenFileInput.style.width = \"0\";\n document.querySelector(_this.options.hiddenInputContainer).appendChild(_this.hiddenFileInput);\n return _this.hiddenFileInput.addEventListener(\"change\", function() {\n var file, files, _i, _len;\n files = _this.hiddenFileInput.files;\n if (files.length) {\n for (_i = 0, _len = files.length; _i < _len; _i++) {\n file = files[_i];\n _this.addFile(file);\n }\n }\n _this.emit(\"addedfiles\", files);\n return setupHiddenFileInput();\n });\n };\n })(this);\n setupHiddenFileInput();\n }\n this.URL = (_ref = window.URL) != null ? _ref : window.webkitURL;\n _ref1 = this.events;\n for (_i = 0, _len = _ref1.length; _i < _len; _i++) {\n eventName = _ref1[_i];\n this.on(eventName, this.options[eventName]);\n }\n this.on(\"uploadprogress\", (function(_this) {\n return function() {\n return _this.updateTotalUploadProgress();\n };\n })(this));\n this.on(\"removedfile\", (function(_this) {\n return function() {\n return _this.updateTotalUploadProgress();\n };\n })(this));\n this.on(\"canceled\", (function(_this) {\n return function(file) {\n return _this.emit(\"complete\", file);\n };\n })(this));\n this.on(\"complete\", (function(_this) {\n return function(file) {\n if (_this.getAddedFiles().length === 0 && _this.getUploadingFiles().length === 0 && _this.getQueuedFiles().length === 0) {\n return setTimeout((function() {\n return _this.emit(\"queuecomplete\");\n }), 0);\n }\n };\n })(this));\n noPropagation = function(e) {\n e.stopPropagation();\n if (e.preventDefault) {\n return e.preventDefault();\n } else {\n return e.returnValue = false;\n }\n };\n this.listeners = [\n {\n element: this.element,\n events: {\n \"dragstart\": (function(_this) {\n return function(e) {\n return _this.emit(\"dragstart\", e);\n };\n })(this),\n \"dragenter\": (function(_this) {\n return function(e) {\n noPropagation(e);\n return _this.emit(\"dragenter\", e);\n };\n })(this),\n \"dragover\": (function(_this) {\n return function(e) {\n var efct;\n try {\n efct = e.dataTransfer.effectAllowed;\n } catch (_error) {}\n e.dataTransfer.dropEffect = 'move' === efct || 'linkMove' === efct ? 'move' : 'copy';\n noPropagation(e);\n return _this.emit(\"dragover\", e);\n };\n })(this),\n \"dragleave\": (function(_this) {\n return function(e) {\n return _this.emit(\"dragleave\", e);\n };\n })(this),\n \"drop\": (function(_this) {\n return function(e) {\n noPropagation(e);\n return _this.drop(e);\n };\n })(this),\n \"dragend\": (function(_this) {\n return function(e) {\n return _this.emit(\"dragend\", e);\n };\n })(this)\n }\n }\n ];\n this.clickableElements.forEach((function(_this) {\n return function(clickableElement) {\n return _this.listeners.push({\n element: clickableElement,\n events: {\n \"click\": function(evt) {\n if ((clickableElement !== _this.element) || (evt.target === _this.element || Dropzone.elementInside(evt.target, _this.element.querySelector(\".dz-message\")))) {\n _this.hiddenFileInput.click();\n }\n return true;\n }\n }\n });\n };\n })(this));\n this.enable();\n return this.options.init.call(this);\n };\n\n Dropzone.prototype.destroy = function() {\n var _ref;\n this.disable();\n this.removeAllFiles(true);\n if ((_ref = this.hiddenFileInput) != null ? _ref.parentNode : void 0) {\n this.hiddenFileInput.parentNode.removeChild(this.hiddenFileInput);\n this.hiddenFileInput = null;\n }\n delete this.element.dropzone;\n return Dropzone.instances.splice(Dropzone.instances.indexOf(this), 1);\n };\n\n Dropzone.prototype.updateTotalUploadProgress = function() {\n var activeFiles, file, totalBytes, totalBytesSent, totalUploadProgress, _i, _len, _ref;\n totalBytesSent = 0;\n totalBytes = 0;\n activeFiles = this.getActiveFiles();\n if (activeFiles.length) {\n _ref = this.getActiveFiles();\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n file = _ref[_i];\n totalBytesSent += file.upload.bytesSent;\n totalBytes += file.upload.total;\n }\n totalUploadProgress = 100 * totalBytesSent / totalBytes;\n } else {\n totalUploadProgress = 100;\n }\n return this.emit(\"totaluploadprogress\", totalUploadProgress, totalBytes, totalBytesSent);\n };\n\n Dropzone.prototype._getParamName = function(n) {\n if (typeof this.options.paramName === \"function\") {\n return this.options.paramName(n);\n } else {\n return \"\" + this.options.paramName + (this.options.uploadMultiple ? \"[\" + n + \"]\" : \"\");\n }\n };\n\n Dropzone.prototype.getFallbackForm = function() {\n var existingFallback, fields, fieldsString, form;\n if (existingFallback = this.getExistingFallback()) {\n return existingFallback;\n }\n fieldsString = \"
\";\n if (this.options.dictFallbackText) {\n fieldsString += \"

\" + this.options.dictFallbackText + \"

\";\n }\n fieldsString += \"
\";\n fields = Dropzone.createElement(fieldsString);\n if (this.element.tagName !== \"FORM\") {\n form = Dropzone.createElement(\"
\");\n form.appendChild(fields);\n } else {\n this.element.setAttribute(\"enctype\", \"multipart/form-data\");\n this.element.setAttribute(\"method\", this.options.method);\n }\n return form != null ? form : fields;\n };\n\n Dropzone.prototype.getExistingFallback = function() {\n var fallback, getFallback, tagName, _i, _len, _ref;\n getFallback = function(elements) {\n var el, _i, _len;\n for (_i = 0, _len = elements.length; _i < _len; _i++) {\n el = elements[_i];\n if (/(^| )fallback($| )/.test(el.className)) {\n return el;\n }\n }\n };\n _ref = [\"div\", \"form\"];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n tagName = _ref[_i];\n if (fallback = getFallback(this.element.getElementsByTagName(tagName))) {\n return fallback;\n }\n }\n };\n\n Dropzone.prototype.setupEventListeners = function() {\n var elementListeners, event, listener, _i, _len, _ref, _results;\n _ref = this.listeners;\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n elementListeners = _ref[_i];\n _results.push((function() {\n var _ref1, _results1;\n _ref1 = elementListeners.events;\n _results1 = [];\n for (event in _ref1) {\n listener = _ref1[event];\n _results1.push(elementListeners.element.addEventListener(event, listener, false));\n }\n return _results1;\n })());\n }\n return _results;\n };\n\n Dropzone.prototype.removeEventListeners = function() {\n var elementListeners, event, listener, _i, _len, _ref, _results;\n _ref = this.listeners;\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n elementListeners = _ref[_i];\n _results.push((function() {\n var _ref1, _results1;\n _ref1 = elementListeners.events;\n _results1 = [];\n for (event in _ref1) {\n listener = _ref1[event];\n _results1.push(elementListeners.element.removeEventListener(event, listener, false));\n }\n return _results1;\n })());\n }\n return _results;\n };\n\n Dropzone.prototype.disable = function() {\n var file, _i, _len, _ref, _results;\n this.clickableElements.forEach(function(element) {\n return element.classList.remove(\"dz-clickable\");\n });\n this.removeEventListeners();\n _ref = this.files;\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n file = _ref[_i];\n _results.push(this.cancelUpload(file));\n }\n return _results;\n };\n\n Dropzone.prototype.enable = function() {\n this.clickableElements.forEach(function(element) {\n return element.classList.add(\"dz-clickable\");\n });\n return this.setupEventListeners();\n };\n\n Dropzone.prototype.filesize = function(size) {\n var cutoff, i, selectedSize, selectedUnit, unit, units, _i, _len;\n selectedSize = 0;\n selectedUnit = \"b\";\n if (size > 0) {\n units = ['TB', 'GB', 'MB', 'KB', 'b'];\n for (i = _i = 0, _len = units.length; _i < _len; i = ++_i) {\n unit = units[i];\n cutoff = Math.pow(this.options.filesizeBase, 4 - i) / 10;\n if (size >= cutoff) {\n selectedSize = size / Math.pow(this.options.filesizeBase, 4 - i);\n selectedUnit = unit;\n break;\n }\n }\n selectedSize = Math.round(10 * selectedSize) / 10;\n }\n return \"\" + selectedSize + \" \" + selectedUnit;\n };\n\n Dropzone.prototype._updateMaxFilesReachedClass = function() {\n if ((this.options.maxFiles != null) && this.getAcceptedFiles().length >= this.options.maxFiles) {\n if (this.getAcceptedFiles().length === this.options.maxFiles) {\n this.emit('maxfilesreached', this.files);\n }\n return this.element.classList.add(\"dz-max-files-reached\");\n } else {\n return this.element.classList.remove(\"dz-max-files-reached\");\n }\n };\n\n Dropzone.prototype.drop = function(e) {\n var files, items;\n if (!e.dataTransfer) {\n return;\n }\n this.emit(\"drop\", e);\n files = e.dataTransfer.files;\n this.emit(\"addedfiles\", files);\n if (files.length) {\n items = e.dataTransfer.items;\n if (items && items.length && (items[0].webkitGetAsEntry != null)) {\n this._addFilesFromItems(items);\n } else {\n this.handleFiles(files);\n }\n }\n };\n\n Dropzone.prototype.paste = function(e) {\n var items, _ref;\n if ((e != null ? (_ref = e.clipboardData) != null ? _ref.items : void 0 : void 0) == null) {\n return;\n }\n this.emit(\"paste\", e);\n items = e.clipboardData.items;\n if (items.length) {\n return this._addFilesFromItems(items);\n }\n };\n\n Dropzone.prototype.handleFiles = function(files) {\n var file, _i, _len, _results;\n _results = [];\n for (_i = 0, _len = files.length; _i < _len; _i++) {\n file = files[_i];\n _results.push(this.addFile(file));\n }\n return _results;\n };\n\n Dropzone.prototype._addFilesFromItems = function(items) {\n var entry, item, _i, _len, _results;\n _results = [];\n for (_i = 0, _len = items.length; _i < _len; _i++) {\n item = items[_i];\n if ((item.webkitGetAsEntry != null) && (entry = item.webkitGetAsEntry())) {\n if (entry.isFile) {\n _results.push(this.addFile(item.getAsFile()));\n } else if (entry.isDirectory) {\n _results.push(this._addFilesFromDirectory(entry, entry.name));\n } else {\n _results.push(void 0);\n }\n } else if (item.getAsFile != null) {\n if ((item.kind == null) || item.kind === \"file\") {\n _results.push(this.addFile(item.getAsFile()));\n } else {\n _results.push(void 0);\n }\n } else {\n _results.push(void 0);\n }\n }\n return _results;\n };\n\n Dropzone.prototype._addFilesFromDirectory = function(directory, path) {\n var dirReader, entriesReader;\n dirReader = directory.createReader();\n entriesReader = (function(_this) {\n return function(entries) {\n var entry, _i, _len;\n for (_i = 0, _len = entries.length; _i < _len; _i++) {\n entry = entries[_i];\n if (entry.isFile) {\n entry.file(function(file) {\n if (_this.options.ignoreHiddenFiles && file.name.substring(0, 1) === '.') {\n return;\n }\n file.fullPath = \"\" + path + \"/\" + file.name;\n return _this.addFile(file);\n });\n } else if (entry.isDirectory) {\n _this._addFilesFromDirectory(entry, \"\" + path + \"/\" + entry.name);\n }\n }\n };\n })(this);\n return dirReader.readEntries(entriesReader, function(error) {\n return typeof console !== \"undefined\" && console !== null ? typeof console.log === \"function\" ? console.log(error) : void 0 : void 0;\n });\n };\n\n Dropzone.prototype.accept = function(file, done) {\n if (file.size > this.options.maxFilesize * 1024 * 1024) {\n return done(this.options.dictFileTooBig.replace(\"{{filesize}}\", Math.round(file.size / 1024 / 10.24) / 100).replace(\"{{maxFilesize}}\", this.options.maxFilesize));\n } else if (!Dropzone.isValidFile(file, this.options.acceptedFiles)) {\n return done(this.options.dictInvalidFileType);\n } else if ((this.options.maxFiles != null) && this.getAcceptedFiles().length >= this.options.maxFiles) {\n done(this.options.dictMaxFilesExceeded.replace(\"{{maxFiles}}\", this.options.maxFiles));\n return this.emit(\"maxfilesexceeded\", file);\n } else {\n return this.options.accept.call(this, file, done);\n }\n };\n\n Dropzone.prototype.addFile = function(file) {\n file.upload = {\n progress: 0,\n total: file.size,\n bytesSent: 0\n };\n this.files.push(file);\n file.status = Dropzone.ADDED;\n this.emit(\"addedfile\", file);\n this._enqueueThumbnail(file);\n return this.accept(file, (function(_this) {\n return function(error) {\n if (error) {\n file.accepted = false;\n _this._errorProcessing([file], error);\n } else {\n file.accepted = true;\n if (_this.options.autoQueue) {\n _this.enqueueFile(file);\n }\n }\n return _this._updateMaxFilesReachedClass();\n };\n })(this));\n };\n\n Dropzone.prototype.enqueueFiles = function(files) {\n var file, _i, _len;\n for (_i = 0, _len = files.length; _i < _len; _i++) {\n file = files[_i];\n this.enqueueFile(file);\n }\n return null;\n };\n\n Dropzone.prototype.enqueueFile = function(file) {\n if (file.status === Dropzone.ADDED && file.accepted === true) {\n file.status = Dropzone.QUEUED;\n if (this.options.autoProcessQueue) {\n return setTimeout(((function(_this) {\n return function() {\n return _this.processQueue();\n };\n })(this)), 0);\n }\n } else {\n throw new Error(\"This file can't be queued because it has already been processed or was rejected.\");\n }\n };\n\n Dropzone.prototype._thumbnailQueue = [];\n\n Dropzone.prototype._processingThumbnail = false;\n\n Dropzone.prototype._enqueueThumbnail = function(file) {\n if (this.options.createImageThumbnails && file.type.match(/image.*/) && file.size <= this.options.maxThumbnailFilesize * 1024 * 1024) {\n this._thumbnailQueue.push(file);\n return setTimeout(((function(_this) {\n return function() {\n return _this._processThumbnailQueue();\n };\n })(this)), 0);\n }\n };\n\n Dropzone.prototype._processThumbnailQueue = function() {\n if (this._processingThumbnail || this._thumbnailQueue.length === 0) {\n return;\n }\n this._processingThumbnail = true;\n return this.createThumbnail(this._thumbnailQueue.shift(), (function(_this) {\n return function() {\n _this._processingThumbnail = false;\n return _this._processThumbnailQueue();\n };\n })(this));\n };\n\n Dropzone.prototype.removeFile = function(file) {\n if (file.status === Dropzone.UPLOADING) {\n this.cancelUpload(file);\n }\n this.files = without(this.files, file);\n this.emit(\"removedfile\", file);\n if (this.files.length === 0) {\n return this.emit(\"reset\");\n }\n };\n\n Dropzone.prototype.removeAllFiles = function(cancelIfNecessary) {\n var file, _i, _len, _ref;\n if (cancelIfNecessary == null) {\n cancelIfNecessary = false;\n }\n _ref = this.files.slice();\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n file = _ref[_i];\n if (file.status !== Dropzone.UPLOADING || cancelIfNecessary) {\n this.removeFile(file);\n }\n }\n return null;\n };\n\n Dropzone.prototype.createThumbnail = function(file, callback) {\n var fileReader;\n fileReader = new FileReader;\n fileReader.onload = (function(_this) {\n return function() {\n if (file.type === \"image/svg+xml\") {\n _this.emit(\"thumbnail\", file, fileReader.result);\n if (callback != null) {\n callback();\n }\n return;\n }\n return _this.createThumbnailFromUrl(file, fileReader.result, callback);\n };\n })(this);\n return fileReader.readAsDataURL(file);\n };\n\n Dropzone.prototype.createThumbnailFromUrl = function(file, imageUrl, callback, crossOrigin) {\n var img;\n img = document.createElement(\"img\");\n if (crossOrigin) {\n img.crossOrigin = crossOrigin;\n }\n img.onload = (function(_this) {\n return function() {\n var canvas, ctx, resizeInfo, thumbnail, _ref, _ref1, _ref2, _ref3;\n file.width = img.width;\n file.height = img.height;\n resizeInfo = _this.options.resize.call(_this, file);\n if (resizeInfo.trgWidth == null) {\n resizeInfo.trgWidth = resizeInfo.optWidth;\n }\n if (resizeInfo.trgHeight == null) {\n resizeInfo.trgHeight = resizeInfo.optHeight;\n }\n canvas = document.createElement(\"canvas\");\n ctx = canvas.getContext(\"2d\");\n canvas.width = resizeInfo.trgWidth;\n canvas.height = resizeInfo.trgHeight;\n drawImageIOSFix(ctx, img, (_ref = resizeInfo.srcX) != null ? _ref : 0, (_ref1 = resizeInfo.srcY) != null ? _ref1 : 0, resizeInfo.srcWidth, resizeInfo.srcHeight, (_ref2 = resizeInfo.trgX) != null ? _ref2 : 0, (_ref3 = resizeInfo.trgY) != null ? _ref3 : 0, resizeInfo.trgWidth, resizeInfo.trgHeight);\n thumbnail = canvas.toDataURL(\"image/png\");\n _this.emit(\"thumbnail\", file, thumbnail);\n if (callback != null) {\n return callback();\n }\n };\n })(this);\n if (callback != null) {\n img.onerror = callback;\n }\n return img.src = imageUrl;\n };\n\n Dropzone.prototype.processQueue = function() {\n var i, parallelUploads, processingLength, queuedFiles;\n parallelUploads = this.options.parallelUploads;\n processingLength = this.getUploadingFiles().length;\n i = processingLength;\n if (processingLength >= parallelUploads) {\n return;\n }\n queuedFiles = this.getQueuedFiles();\n if (!(queuedFiles.length > 0)) {\n return;\n }\n if (this.options.uploadMultiple) {\n return this.processFiles(queuedFiles.slice(0, parallelUploads - processingLength));\n } else {\n while (i < parallelUploads) {\n if (!queuedFiles.length) {\n return;\n }\n this.processFile(queuedFiles.shift());\n i++;\n }\n }\n };\n\n Dropzone.prototype.processFile = function(file) {\n return this.processFiles([file]);\n };\n\n Dropzone.prototype.processFiles = function(files) {\n var file, _i, _len;\n for (_i = 0, _len = files.length; _i < _len; _i++) {\n file = files[_i];\n file.processing = true;\n file.status = Dropzone.UPLOADING;\n this.emit(\"processing\", file);\n }\n if (this.options.uploadMultiple) {\n this.emit(\"processingmultiple\", files);\n }\n return this.uploadFiles(files);\n };\n\n Dropzone.prototype._getFilesWithXhr = function(xhr) {\n var file, files;\n return files = (function() {\n var _i, _len, _ref, _results;\n _ref = this.files;\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n file = _ref[_i];\n if (file.xhr === xhr) {\n _results.push(file);\n }\n }\n return _results;\n }).call(this);\n };\n\n Dropzone.prototype.cancelUpload = function(file) {\n var groupedFile, groupedFiles, _i, _j, _len, _len1, _ref;\n if (file.status === Dropzone.UPLOADING) {\n groupedFiles = this._getFilesWithXhr(file.xhr);\n for (_i = 0, _len = groupedFiles.length; _i < _len; _i++) {\n groupedFile = groupedFiles[_i];\n groupedFile.status = Dropzone.CANCELED;\n }\n file.xhr.abort();\n for (_j = 0, _len1 = groupedFiles.length; _j < _len1; _j++) {\n groupedFile = groupedFiles[_j];\n this.emit(\"canceled\", groupedFile);\n }\n if (this.options.uploadMultiple) {\n this.emit(\"canceledmultiple\", groupedFiles);\n }\n } else if ((_ref = file.status) === Dropzone.ADDED || _ref === Dropzone.QUEUED) {\n file.status = Dropzone.CANCELED;\n this.emit(\"canceled\", file);\n if (this.options.uploadMultiple) {\n this.emit(\"canceledmultiple\", [file]);\n }\n }\n if (this.options.autoProcessQueue) {\n return this.processQueue();\n }\n };\n\n resolveOption = function() {\n var args, option;\n option = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\n if (typeof option === 'function') {\n return option.apply(this, args);\n }\n return option;\n };\n\n Dropzone.prototype.uploadFile = function(file) {\n return this.uploadFiles([file]);\n };\n\n Dropzone.prototype.uploadFiles = function(files) {\n var file, formData, handleError, headerName, headerValue, headers, i, input, inputName, inputType, key, method, option, progressObj, response, updateProgress, url, value, xhr, _i, _j, _k, _l, _len, _len1, _len2, _len3, _m, _ref, _ref1, _ref2, _ref3, _ref4, _ref5;\n xhr = new XMLHttpRequest();\n for (_i = 0, _len = files.length; _i < _len; _i++) {\n file = files[_i];\n file.xhr = xhr;\n }\n method = resolveOption(this.options.method, files);\n url = resolveOption(this.options.url, files);\n xhr.open(method, url, true);\n xhr.withCredentials = !!this.options.withCredentials;\n response = null;\n handleError = (function(_this) {\n return function() {\n var _j, _len1, _results;\n _results = [];\n for (_j = 0, _len1 = files.length; _j < _len1; _j++) {\n file = files[_j];\n _results.push(_this._errorProcessing(files, response || _this.options.dictResponseError.replace(\"{{statusCode}}\", xhr.status), xhr));\n }\n return _results;\n };\n })(this);\n updateProgress = (function(_this) {\n return function(e) {\n var allFilesFinished, progress, _j, _k, _l, _len1, _len2, _len3, _results;\n if (e != null) {\n progress = 100 * e.loaded / e.total;\n for (_j = 0, _len1 = files.length; _j < _len1; _j++) {\n file = files[_j];\n file.upload = {\n progress: progress,\n total: e.total,\n bytesSent: e.loaded\n };\n }\n } else {\n allFilesFinished = true;\n progress = 100;\n for (_k = 0, _len2 = files.length; _k < _len2; _k++) {\n file = files[_k];\n if (!(file.upload.progress === 100 && file.upload.bytesSent === file.upload.total)) {\n allFilesFinished = false;\n }\n file.upload.progress = progress;\n file.upload.bytesSent = file.upload.total;\n }\n if (allFilesFinished) {\n return;\n }\n }\n _results = [];\n for (_l = 0, _len3 = files.length; _l < _len3; _l++) {\n file = files[_l];\n _results.push(_this.emit(\"uploadprogress\", file, progress, file.upload.bytesSent));\n }\n return _results;\n };\n })(this);\n xhr.onload = (function(_this) {\n return function(e) {\n var _ref;\n if (files[0].status === Dropzone.CANCELED) {\n return;\n }\n if (xhr.readyState !== 4) {\n return;\n }\n response = xhr.responseText;\n if (xhr.getResponseHeader(\"content-type\") && ~xhr.getResponseHeader(\"content-type\").indexOf(\"application/json\")) {\n try {\n response = JSON.parse(response);\n } catch (_error) {\n e = _error;\n response = \"Invalid JSON response from server.\";\n }\n }\n updateProgress();\n if (!((200 <= (_ref = xhr.status) && _ref < 300))) {\n return handleError();\n } else {\n return _this._finished(files, response, e);\n }\n };\n })(this);\n xhr.onerror = (function(_this) {\n return function() {\n if (files[0].status === Dropzone.CANCELED) {\n return;\n }\n return handleError();\n };\n })(this);\n progressObj = (_ref = xhr.upload) != null ? _ref : xhr;\n progressObj.onprogress = updateProgress;\n headers = {\n \"Accept\": \"application/json\",\n \"Cache-Control\": \"no-cache\",\n \"X-Requested-With\": \"XMLHttpRequest\"\n };\n if (this.options.headers) {\n extend(headers, this.options.headers);\n }\n for (headerName in headers) {\n headerValue = headers[headerName];\n if (headerValue) {\n xhr.setRequestHeader(headerName, headerValue);\n }\n }\n formData = new FormData();\n if (this.options.params) {\n _ref1 = this.options.params;\n for (key in _ref1) {\n value = _ref1[key];\n formData.append(key, value);\n }\n }\n for (_j = 0, _len1 = files.length; _j < _len1; _j++) {\n file = files[_j];\n this.emit(\"sending\", file, xhr, formData);\n }\n if (this.options.uploadMultiple) {\n this.emit(\"sendingmultiple\", files, xhr, formData);\n }\n if (this.element.tagName === \"FORM\") {\n _ref2 = this.element.querySelectorAll(\"input, textarea, select, button\");\n for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) {\n input = _ref2[_k];\n inputName = input.getAttribute(\"name\");\n inputType = input.getAttribute(\"type\");\n if (input.tagName === \"SELECT\" && input.hasAttribute(\"multiple\")) {\n _ref3 = input.options;\n for (_l = 0, _len3 = _ref3.length; _l < _len3; _l++) {\n option = _ref3[_l];\n if (option.selected) {\n formData.append(inputName, option.value);\n }\n }\n } else if (!inputType || ((_ref4 = inputType.toLowerCase()) !== \"checkbox\" && _ref4 !== \"radio\") || input.checked) {\n formData.append(inputName, input.value);\n }\n }\n }\n for (i = _m = 0, _ref5 = files.length - 1; 0 <= _ref5 ? _m <= _ref5 : _m >= _ref5; i = 0 <= _ref5 ? ++_m : --_m) {\n formData.append(this._getParamName(i), files[i], files[i].name);\n }\n return this.submitRequest(xhr, formData, files);\n };\n\n Dropzone.prototype.submitRequest = function(xhr, formData, files) {\n return xhr.send(formData);\n };\n\n Dropzone.prototype._finished = function(files, responseText, e) {\n var file, _i, _len;\n for (_i = 0, _len = files.length; _i < _len; _i++) {\n file = files[_i];\n file.status = Dropzone.SUCCESS;\n this.emit(\"success\", file, responseText, e);\n this.emit(\"complete\", file);\n }\n if (this.options.uploadMultiple) {\n this.emit(\"successmultiple\", files, responseText, e);\n this.emit(\"completemultiple\", files);\n }\n if (this.options.autoProcessQueue) {\n return this.processQueue();\n }\n };\n\n Dropzone.prototype._errorProcessing = function(files, message, xhr) {\n var file, _i, _len;\n for (_i = 0, _len = files.length; _i < _len; _i++) {\n file = files[_i];\n file.status = Dropzone.ERROR;\n this.emit(\"error\", file, message, xhr);\n this.emit(\"complete\", file);\n }\n if (this.options.uploadMultiple) {\n this.emit(\"errormultiple\", files, message, xhr);\n this.emit(\"completemultiple\", files);\n }\n if (this.options.autoProcessQueue) {\n return this.processQueue();\n }\n };\n\n return Dropzone;\n\n })(Emitter);\n\n Dropzone.version = \"4.2.0\";\n\n Dropzone.options = {};\n\n Dropzone.optionsForElement = function(element) {\n if (element.getAttribute(\"id\")) {\n return Dropzone.options[camelize(element.getAttribute(\"id\"))];\n } else {\n return void 0;\n }\n };\n\n Dropzone.instances = [];\n\n Dropzone.forElement = function(element) {\n if (typeof element === \"string\") {\n element = document.querySelector(element);\n }\n if ((element != null ? element.dropzone : void 0) == null) {\n throw new Error(\"No Dropzone found for given element. This is probably because you're trying to access it before Dropzone had the time to initialize. Use the `init` option to setup any additional observers on your Dropzone.\");\n }\n return element.dropzone;\n };\n\n Dropzone.autoDiscover = true;\n\n Dropzone.discover = function() {\n var checkElements, dropzone, dropzones, _i, _len, _results;\n if (document.querySelectorAll) {\n dropzones = document.querySelectorAll(\".dropzone\");\n } else {\n dropzones = [];\n checkElements = function(elements) {\n var el, _i, _len, _results;\n _results = [];\n for (_i = 0, _len = elements.length; _i < _len; _i++) {\n el = elements[_i];\n if (/(^| )dropzone($| )/.test(el.className)) {\n _results.push(dropzones.push(el));\n } else {\n _results.push(void 0);\n }\n }\n return _results;\n };\n checkElements(document.getElementsByTagName(\"div\"));\n checkElements(document.getElementsByTagName(\"form\"));\n }\n _results = [];\n for (_i = 0, _len = dropzones.length; _i < _len; _i++) {\n dropzone = dropzones[_i];\n if (Dropzone.optionsForElement(dropzone) !== false) {\n _results.push(new Dropzone(dropzone));\n } else {\n _results.push(void 0);\n }\n }\n return _results;\n };\n\n Dropzone.blacklistedBrowsers = [/opera.*Macintosh.*version\\/12/i];\n\n Dropzone.isBrowserSupported = function() {\n var capableBrowser, regex, _i, _len, _ref;\n capableBrowser = true;\n if (window.File && window.FileReader && window.FileList && window.Blob && window.FormData && document.querySelector) {\n if (!(\"classList\" in document.createElement(\"a\"))) {\n capableBrowser = false;\n } else {\n _ref = Dropzone.blacklistedBrowsers;\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n regex = _ref[_i];\n if (regex.test(navigator.userAgent)) {\n capableBrowser = false;\n continue;\n }\n }\n }\n } else {\n capableBrowser = false;\n }\n return capableBrowser;\n };\n\n without = function(list, rejectedItem) {\n var item, _i, _len, _results;\n _results = [];\n for (_i = 0, _len = list.length; _i < _len; _i++) {\n item = list[_i];\n if (item !== rejectedItem) {\n _results.push(item);\n }\n }\n return _results;\n };\n\n camelize = function(str) {\n return str.replace(/[\\-_](\\w)/g, function(match) {\n return match.charAt(1).toUpperCase();\n });\n };\n\n Dropzone.createElement = function(string) {\n var div;\n div = document.createElement(\"div\");\n div.innerHTML = string;\n return div.childNodes[0];\n };\n\n Dropzone.elementInside = function(element, container) {\n if (element === container) {\n return true;\n }\n while (element = element.parentNode) {\n if (element === container) {\n return true;\n }\n }\n return false;\n };\n\n Dropzone.getElement = function(el, name) {\n var element;\n if (typeof el === \"string\") {\n element = document.querySelector(el);\n } else if (el.nodeType != null) {\n element = el;\n }\n if (element == null) {\n throw new Error(\"Invalid `\" + name + \"` option provided. Please provide a CSS selector or a plain HTML element.\");\n }\n return element;\n };\n\n Dropzone.getElements = function(els, name) {\n var e, el, elements, _i, _j, _len, _len1, _ref;\n if (els instanceof Array) {\n elements = [];\n try {\n for (_i = 0, _len = els.length; _i < _len; _i++) {\n el = els[_i];\n elements.push(this.getElement(el, name));\n }\n } catch (_error) {\n e = _error;\n elements = null;\n }\n } else if (typeof els === \"string\") {\n elements = [];\n _ref = document.querySelectorAll(els);\n for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) {\n el = _ref[_j];\n elements.push(el);\n }\n } else if (els.nodeType != null) {\n elements = [els];\n }\n if (!((elements != null) && elements.length)) {\n throw new Error(\"Invalid `\" + name + \"` option provided. Please provide a CSS selector, a plain HTML element or a list of those.\");\n }\n return elements;\n };\n\n Dropzone.confirm = function(question, accepted, rejected) {\n if (window.confirm(question)) {\n return accepted();\n } else if (rejected != null) {\n return rejected();\n }\n };\n\n Dropzone.isValidFile = function(file, acceptedFiles) {\n var baseMimeType, mimeType, validType, _i, _len;\n if (!acceptedFiles) {\n return true;\n }\n acceptedFiles = acceptedFiles.split(\",\");\n mimeType = file.type;\n baseMimeType = mimeType.replace(/\\/.*$/, \"\");\n for (_i = 0, _len = acceptedFiles.length; _i < _len; _i++) {\n validType = acceptedFiles[_i];\n validType = validType.trim();\n if (validType.charAt(0) === \".\") {\n if (file.name.toLowerCase().indexOf(validType.toLowerCase(), file.name.length - validType.length) !== -1) {\n return true;\n }\n } else if (/\\/\\*$/.test(validType)) {\n if (baseMimeType === validType.replace(/\\/.*$/, \"\")) {\n return true;\n }\n } else {\n if (mimeType === validType) {\n return true;\n }\n }\n }\n return false;\n };\n\n if (typeof jQuery !== \"undefined\" && jQuery !== null) {\n jQuery.fn.dropzone = function(options) {\n return this.each(function() {\n return new Dropzone(this, options);\n });\n };\n }\n\n if (typeof module !== \"undefined\" && module !== null) {\n module.exports = Dropzone;\n } else {\n window.Dropzone = Dropzone;\n }\n\n Dropzone.ADDED = \"added\";\n\n Dropzone.QUEUED = \"queued\";\n\n Dropzone.ACCEPTED = Dropzone.QUEUED;\n\n Dropzone.UPLOADING = \"uploading\";\n\n Dropzone.PROCESSING = Dropzone.UPLOADING;\n\n Dropzone.CANCELED = \"canceled\";\n\n Dropzone.ERROR = \"error\";\n\n Dropzone.SUCCESS = \"success\";\n\n\n /*\n \n Bugfix for iOS 6 and 7\n Source: http://stackoverflow.com/questions/11929099/html5-canvas-drawimage-ratio-bug-ios\n based on the work of https://github.com/stomita/ios-imagefile-megapixel\n */\n\n detectVerticalSquash = function(img) {\n var alpha, canvas, ctx, data, ey, ih, iw, py, ratio, sy;\n iw = img.naturalWidth;\n ih = img.naturalHeight;\n canvas = document.createElement(\"canvas\");\n canvas.width = 1;\n canvas.height = ih;\n ctx = canvas.getContext(\"2d\");\n ctx.drawImage(img, 0, 0);\n data = ctx.getImageData(0, 0, 1, ih).data;\n sy = 0;\n ey = ih;\n py = ih;\n while (py > sy) {\n alpha = data[(py - 1) * 4 + 3];\n if (alpha === 0) {\n ey = py;\n } else {\n sy = py;\n }\n py = (ey + sy) >> 1;\n }\n ratio = py / ih;\n if (ratio === 0) {\n return 1;\n } else {\n return ratio;\n }\n };\n\n drawImageIOSFix = function(ctx, img, sx, sy, sw, sh, dx, dy, dw, dh) {\n var vertSquashRatio;\n vertSquashRatio = detectVerticalSquash(img);\n return ctx.drawImage(img, sx, sy, sw, sh, dx, dy, dw, dh / vertSquashRatio);\n };\n\n\n /*\n * contentloaded.js\n *\n * Author: Diego Perini (diego.perini at gmail.com)\n * Summary: cross-browser wrapper for DOMContentLoaded\n * Updated: 20101020\n * License: MIT\n * Version: 1.2\n *\n * URL:\n * http://javascript.nwbox.com/ContentLoaded/\n * http://javascript.nwbox.com/ContentLoaded/MIT-LICENSE\n */\n\n contentLoaded = function(win, fn) {\n var add, doc, done, init, poll, pre, rem, root, top;\n done = false;\n top = true;\n doc = win.document;\n root = doc.documentElement;\n add = (doc.addEventListener ? \"addEventListener\" : \"attachEvent\");\n rem = (doc.addEventListener ? \"removeEventListener\" : \"detachEvent\");\n pre = (doc.addEventListener ? \"\" : \"on\");\n init = function(e) {\n if (e.type === \"readystatechange\" && doc.readyState !== \"complete\") {\n return;\n }\n (e.type === \"load\" ? win : doc)[rem](pre + e.type, init, false);\n if (!done && (done = true)) {\n return fn.call(win, e.type || e);\n }\n };\n poll = function() {\n var e;\n try {\n root.doScroll(\"left\");\n } catch (_error) {\n e = _error;\n setTimeout(poll, 50);\n return;\n }\n return init(\"poll\");\n };\n if (doc.readyState !== \"complete\") {\n if (doc.createEventObject && root.doScroll) {\n try {\n top = !win.frameElement;\n } catch (_error) {}\n if (top) {\n poll();\n }\n }\n doc[add](pre + \"DOMContentLoaded\", init, false);\n doc[add](pre + \"readystatechange\", init, false);\n return win[add](pre + \"load\", init, false);\n }\n };\n\n Dropzone._autoDiscoverFunction = function() {\n if (Dropzone.autoDiscover) {\n return Dropzone.discover();\n }\n };\n\n contentLoaded(window, Dropzone._autoDiscoverFunction);\n\n}).call(this);\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\"), __webpack_require__(\"../../../node_modules/webpack/buildin/module.js\")(module)))\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/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/mousetrap/plugins/pause/mousetrap-pause.js\":\n/***/ (function(module, exports) {\n\n/**\n * adds a pause and unpause method to Mousetrap\n * this allows you to enable or disable keyboard shortcuts\n * without having to reset Mousetrap and rebind everything\n */\n/* global Mousetrap:true */\nMousetrap = (function(Mousetrap) {\n var self = Mousetrap,\n _originalStopCallback = self.stopCallback,\n enabled = true;\n\n self.stopCallback = function(e, element, combo) {\n if (!enabled) {\n return true;\n }\n\n return _originalStopCallback(e, element, combo);\n };\n\n self.pause = function() {\n enabled = false;\n };\n\n self.unpause = function() {\n enabled = true;\n };\n\n return self;\n}) (Mousetrap);\n\n\n/***/ }),\n\n/***/ \"../../../node_modules/pikaday/pikaday.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/*!\n * Pikaday\n *\n * Copyright © 2014 David Bushell | BSD & MIT license | https://github.com/dbushell/Pikaday\n */\n\n(function (root, factory)\n{\n 'use strict';\n\n var moment;\n if (true) {\n // CommonJS module\n // Load moment.js as an optional dependency\n try { moment = __webpack_require__(!(function webpackMissingModule() { var e = new Error(\"Cannot find module \\\"moment\\\"\"); e.code = 'MODULE_NOT_FOUND'; throw e; }())); } catch (e) {}\n module.exports = factory(moment);\n } else if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(function (req)\n {\n // Load moment.js as an optional dependency\n var id = 'moment';\n try { moment = req(id); } catch (e) {}\n return factory(moment);\n });\n } else {\n root.Pikaday = factory(root.moment);\n }\n}(this, function (moment)\n{\n 'use strict';\n\n /**\n * feature detection and helper functions\n */\n var hasMoment = typeof moment === 'function',\n\n hasEventListeners = !!window.addEventListener,\n\n document = window.document,\n\n sto = window.setTimeout,\n\n addEvent = function(el, e, callback, capture)\n {\n if (hasEventListeners) {\n el.addEventListener(e, callback, !!capture);\n } else {\n el.attachEvent('on' + e, callback);\n }\n },\n\n removeEvent = function(el, e, callback, capture)\n {\n if (hasEventListeners) {\n el.removeEventListener(e, callback, !!capture);\n } else {\n el.detachEvent('on' + e, callback);\n }\n },\n\n trim = function(str)\n {\n return str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g,'');\n },\n\n hasClass = function(el, cn)\n {\n return (' ' + el.className + ' ').indexOf(' ' + cn + ' ') !== -1;\n },\n\n addClass = function(el, cn)\n {\n if (!hasClass(el, cn)) {\n el.className = (el.className === '') ? cn : el.className + ' ' + cn;\n }\n },\n\n removeClass = function(el, cn)\n {\n el.className = trim((' ' + el.className + ' ').replace(' ' + cn + ' ', ' '));\n },\n\n isArray = function(obj)\n {\n return (/Array/).test(Object.prototype.toString.call(obj));\n },\n\n isDate = function(obj)\n {\n return (/Date/).test(Object.prototype.toString.call(obj)) && !isNaN(obj.getTime());\n },\n\n isWeekend = function(date)\n {\n var day = date.getDay();\n return day === 0 || day === 6;\n },\n\n isLeapYear = function(year)\n {\n // solution by Matti Virkkunen: http://stackoverflow.com/a/4881951\n return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;\n },\n\n getDaysInMonth = function(year, month)\n {\n return [31, isLeapYear(year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n },\n\n setToStartOfDay = function(date)\n {\n if (isDate(date)) date.setHours(0,0,0,0);\n },\n\n compareDates = function(a,b)\n {\n // weak date comparison (use setToStartOfDay(date) to ensure correct result)\n return a.getTime() === b.getTime();\n },\n\n extend = function(to, from, overwrite)\n {\n var prop, hasProp;\n for (prop in from) {\n hasProp = to[prop] !== undefined;\n if (hasProp && typeof from[prop] === 'object' && from[prop] !== null && from[prop].nodeName === undefined) {\n if (isDate(from[prop])) {\n if (overwrite) {\n to[prop] = new Date(from[prop].getTime());\n }\n }\n else if (isArray(from[prop])) {\n if (overwrite) {\n to[prop] = from[prop].slice(0);\n }\n } else {\n to[prop] = extend({}, from[prop], overwrite);\n }\n } else if (overwrite || !hasProp) {\n to[prop] = from[prop];\n }\n }\n return to;\n },\n\n fireEvent = function(el, eventName, data)\n {\n var ev;\n\n if (document.createEvent) {\n ev = document.createEvent('HTMLEvents');\n ev.initEvent(eventName, true, false);\n ev = extend(ev, data);\n el.dispatchEvent(ev);\n } else if (document.createEventObject) {\n ev = document.createEventObject();\n ev = extend(ev, data);\n el.fireEvent('on' + eventName, ev);\n }\n },\n\n adjustCalendar = function(calendar) {\n if (calendar.month < 0) {\n calendar.year -= Math.ceil(Math.abs(calendar.month)/12);\n calendar.month += 12;\n }\n if (calendar.month > 11) {\n calendar.year += Math.floor(Math.abs(calendar.month)/12);\n calendar.month -= 12;\n }\n return calendar;\n },\n\n /**\n * defaults and localisation\n */\n defaults = {\n\n // bind the picker to a form field\n field: null,\n\n // automatically show/hide the picker on `field` focus (default `true` if `field` is set)\n bound: undefined,\n\n // position of the datepicker, relative to the field (default to bottom & left)\n // ('bottom' & 'left' keywords are not used, 'top' & 'right' are modifier on the bottom/left position)\n position: 'bottom left',\n\n // automatically fit in the viewport even if it means repositioning from the position option\n reposition: true,\n\n // the default output format for `.toString()` and `field` value\n format: 'YYYY-MM-DD',\n\n // the toString function which gets passed a current date object and format\n // and returns a string\n toString: null,\n\n // used to create date object from current input string\n parse: null,\n\n // the initial date to view when first opened\n defaultDate: null,\n\n // make the `defaultDate` the initial selected value\n setDefaultDate: false,\n\n // first day of week (0: Sunday, 1: Monday etc)\n firstDay: 0,\n\n // the default flag for moment's strict date parsing\n formatStrict: false,\n\n // the minimum/earliest date that can be selected\n minDate: null,\n // the maximum/latest date that can be selected\n maxDate: null,\n\n // number of years either side, or array of upper/lower range\n yearRange: 10,\n\n // show week numbers at head of row\n showWeekNumber: false,\n\n // Week picker mode\n pickWholeWeek: false,\n\n // used internally (don't config outside)\n minYear: 0,\n maxYear: 9999,\n minMonth: undefined,\n maxMonth: undefined,\n\n startRange: null,\n endRange: null,\n\n isRTL: false,\n\n // Additional text to append to the year in the calendar title\n yearSuffix: '',\n\n // Render the month after year in the calendar title\n showMonthAfterYear: false,\n\n // Render days of the calendar grid that fall in the next or previous month\n showDaysInNextAndPreviousMonths: false,\n\n // Allows user to select days that fall in the next or previous month\n enableSelectionDaysInNextAndPreviousMonths: false,\n\n // how many months are visible\n numberOfMonths: 1,\n\n // when numberOfMonths is used, this will help you to choose where the main calendar will be (default `left`, can be set to `right`)\n // only used for the first display or when a selected date is not visible\n mainCalendar: 'left',\n\n // Specify a DOM element to render the calendar in\n container: undefined,\n\n // Blur field when date is selected\n blurFieldOnSelect : true,\n\n // internationalization\n i18n: {\n previousMonth : 'Previous Month',\n nextMonth : 'Next Month',\n months : ['January','February','March','April','May','June','July','August','September','October','November','December'],\n weekdays : ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'],\n weekdaysShort : ['Sun','Mon','Tue','Wed','Thu','Fri','Sat']\n },\n\n // Theme Classname\n theme: null,\n\n // events array\n events: [],\n\n // callback function\n onSelect: null,\n onOpen: null,\n onClose: null,\n onDraw: null\n },\n\n\n /**\n * templating functions to abstract HTML rendering\n */\n renderDayName = function(opts, day, abbr)\n {\n day += opts.firstDay;\n while (day >= 7) {\n day -= 7;\n }\n return abbr ? opts.i18n.weekdaysShort[day] : opts.i18n.weekdays[day];\n },\n\n renderDay = function(opts)\n {\n var arr = [];\n var ariaSelected = 'false';\n if (opts.isEmpty) {\n if (opts.showDaysInNextAndPreviousMonths) {\n arr.push('is-outside-current-month');\n\n if(!opts.enableSelectionDaysInNextAndPreviousMonths) {\n arr.push('is-selection-disabled');\n }\n\n } else {\n return '';\n }\n }\n if (opts.isDisabled) {\n arr.push('is-disabled');\n }\n if (opts.isToday) {\n arr.push('is-today');\n }\n if (opts.isSelected) {\n arr.push('is-selected');\n ariaSelected = 'true';\n }\n if (opts.hasEvent) {\n arr.push('has-event');\n }\n if (opts.isInRange) {\n arr.push('is-inrange');\n }\n if (opts.isStartRange) {\n arr.push('is-startrange');\n }\n if (opts.isEndRange) {\n arr.push('is-endrange');\n }\n return '' +\n '' +\n '';\n },\n\n renderWeek = function (d, m, y) {\n // Lifted from http://javascript.about.com/library/blweekyear.htm, lightly modified.\n var onejan = new Date(y, 0, 1),\n weekNum = Math.ceil((((new Date(y, m, d) - onejan) / 86400000) + onejan.getDay()+1)/7);\n return '' + weekNum + '';\n },\n\n renderRow = function(days, isRTL, pickWholeWeek, isRowSelected)\n {\n return '' + (isRTL ? days.reverse() : days).join('') + '';\n },\n\n renderBody = function(rows)\n {\n return '' + rows.join('') + '';\n },\n\n renderHead = function(opts)\n {\n var i, arr = [];\n if (opts.showWeekNumber) {\n arr.push('');\n }\n for (i = 0; i < 7; i++) {\n arr.push('' + renderDayName(opts, i, true) + '');\n }\n return '' + (opts.isRTL ? arr.reverse() : arr).join('') + '';\n },\n\n renderTitle = function(instance, c, year, month, refYear, randId)\n {\n var i, j, arr,\n opts = instance._o,\n isMinYear = year === opts.minYear,\n isMaxYear = year === opts.maxYear,\n html = '
',\n monthHtml,\n yearHtml,\n prev = true,\n next = true;\n\n for (arr = [], i = 0; i < 12; i++) {\n arr.push('');\n }\n\n monthHtml = '
' + opts.i18n.months[month] + '
';\n\n if (isArray(opts.yearRange)) {\n i = opts.yearRange[0];\n j = opts.yearRange[1] + 1;\n } else {\n i = year - opts.yearRange;\n j = 1 + year + opts.yearRange;\n }\n\n for (arr = []; i < j && i <= opts.maxYear; i++) {\n if (i >= opts.minYear) {\n arr.push('');\n }\n }\n yearHtml = '
' + year + opts.yearSuffix + '
';\n\n if (opts.showMonthAfterYear) {\n html += yearHtml + monthHtml;\n } else {\n html += monthHtml + yearHtml;\n }\n\n if (isMinYear && (month === 0 || opts.minMonth >= month)) {\n prev = false;\n }\n\n if (isMaxYear && (month === 11 || opts.maxMonth <= month)) {\n next = false;\n }\n\n if (c === 0) {\n html += '';\n }\n if (c === (instance._o.numberOfMonths - 1) ) {\n html += '';\n }\n\n return html += '
';\n },\n\n renderTable = function(opts, data, randId)\n {\n return '' + renderHead(opts) + renderBody(data) + '
';\n },\n\n\n /**\n * Pikaday constructor\n */\n Pikaday = function(options)\n {\n var self = this,\n opts = self.config(options);\n\n self._onMouseDown = function(e)\n {\n if (!self._v) {\n return;\n }\n e = e || window.event;\n var target = e.target || e.srcElement;\n if (!target) {\n return;\n }\n\n if (!hasClass(target, 'is-disabled')) {\n if (hasClass(target, 'pika-button') && !hasClass(target, 'is-empty') && !hasClass(target.parentNode, 'is-disabled')) {\n self.setDate(new Date(target.getAttribute('data-pika-year'), target.getAttribute('data-pika-month'), target.getAttribute('data-pika-day')));\n if (opts.bound) {\n sto(function() {\n self.hide();\n if (opts.blurFieldOnSelect && opts.field) {\n opts.field.blur();\n }\n }, 100);\n }\n }\n else if (hasClass(target, 'pika-prev')) {\n self.prevMonth();\n }\n else if (hasClass(target, 'pika-next')) {\n self.nextMonth();\n }\n }\n if (!hasClass(target, 'pika-select')) {\n // if this is touch event prevent mouse events emulation\n if (e.preventDefault) {\n e.preventDefault();\n } else {\n e.returnValue = false;\n return false;\n }\n } else {\n self._c = true;\n }\n };\n\n self._onChange = function(e)\n {\n e = e || window.event;\n var target = e.target || e.srcElement;\n if (!target) {\n return;\n }\n if (hasClass(target, 'pika-select-month')) {\n self.gotoMonth(target.value);\n }\n else if (hasClass(target, 'pika-select-year')) {\n self.gotoYear(target.value);\n }\n };\n\n self._onKeyChange = function(e)\n {\n e = e || window.event;\n\n if (self.isVisible()) {\n\n switch(e.keyCode){\n case 13:\n case 27:\n if (opts.field) {\n opts.field.blur();\n }\n break;\n case 37:\n e.preventDefault();\n self.adjustDate('subtract', 1);\n break;\n case 38:\n self.adjustDate('subtract', 7);\n break;\n case 39:\n self.adjustDate('add', 1);\n break;\n case 40:\n self.adjustDate('add', 7);\n break;\n }\n }\n };\n\n self._onInputChange = function(e)\n {\n var date;\n\n if (e.firedBy === self) {\n return;\n }\n if (opts.parse) {\n date = opts.parse(opts.field.value, opts.format);\n } else if (hasMoment) {\n date = moment(opts.field.value, opts.format, opts.formatStrict);\n date = (date && date.isValid()) ? date.toDate() : null;\n }\n else {\n date = new Date(Date.parse(opts.field.value));\n }\n if (isDate(date)) {\n self.setDate(date);\n }\n if (!self._v) {\n self.show();\n }\n };\n\n self._onInputFocus = function()\n {\n self.show();\n };\n\n self._onInputClick = function()\n {\n self.show();\n };\n\n self._onInputBlur = function()\n {\n // IE allows pika div to gain focus; catch blur the input field\n var pEl = document.activeElement;\n do {\n if (hasClass(pEl, 'pika-single')) {\n return;\n }\n }\n while ((pEl = pEl.parentNode));\n\n if (!self._c) {\n self._b = sto(function() {\n self.hide();\n }, 50);\n }\n self._c = false;\n };\n\n self._onClick = function(e)\n {\n e = e || window.event;\n var target = e.target || e.srcElement,\n pEl = target;\n if (!target) {\n return;\n }\n if (!hasEventListeners && hasClass(target, 'pika-select')) {\n if (!target.onchange) {\n target.setAttribute('onchange', 'return;');\n addEvent(target, 'change', self._onChange);\n }\n }\n do {\n if (hasClass(pEl, 'pika-single') || pEl === opts.trigger) {\n return;\n }\n }\n while ((pEl = pEl.parentNode));\n if (self._v && target !== opts.trigger && pEl !== opts.trigger) {\n self.hide();\n }\n };\n\n self.el = document.createElement('div');\n self.el.className = 'pika-single' + (opts.isRTL ? ' is-rtl' : '') + (opts.theme ? ' ' + opts.theme : '');\n\n addEvent(self.el, 'mousedown', self._onMouseDown, true);\n addEvent(self.el, 'touchend', self._onMouseDown, true);\n addEvent(self.el, 'change', self._onChange);\n addEvent(document, 'keydown', self._onKeyChange);\n\n if (opts.field) {\n if (opts.container) {\n opts.container.appendChild(self.el);\n } else if (opts.bound) {\n document.body.appendChild(self.el);\n } else {\n opts.field.parentNode.insertBefore(self.el, opts.field.nextSibling);\n }\n addEvent(opts.field, 'change', self._onInputChange);\n\n if (!opts.defaultDate) {\n if (hasMoment && opts.field.value) {\n opts.defaultDate = moment(opts.field.value, opts.format).toDate();\n } else {\n opts.defaultDate = new Date(Date.parse(opts.field.value));\n }\n opts.setDefaultDate = true;\n }\n }\n\n var defDate = opts.defaultDate;\n\n if (isDate(defDate)) {\n if (opts.setDefaultDate) {\n self.setDate(defDate, true);\n } else {\n self.gotoDate(defDate);\n }\n } else {\n self.gotoDate(new Date());\n }\n\n if (opts.bound) {\n this.hide();\n self.el.className += ' is-bound';\n addEvent(opts.trigger, 'click', self._onInputClick);\n addEvent(opts.trigger, 'focus', self._onInputFocus);\n addEvent(opts.trigger, 'blur', self._onInputBlur);\n } else {\n this.show();\n }\n };\n\n\n /**\n * public Pikaday API\n */\n Pikaday.prototype = {\n\n\n /**\n * configure functionality\n */\n config: function(options)\n {\n if (!this._o) {\n this._o = extend({}, defaults, true);\n }\n\n var opts = extend(this._o, options, true);\n\n opts.isRTL = !!opts.isRTL;\n\n opts.field = (opts.field && opts.field.nodeName) ? opts.field : null;\n\n opts.theme = (typeof opts.theme) === 'string' && opts.theme ? opts.theme : null;\n\n opts.bound = !!(opts.bound !== undefined ? opts.field && opts.bound : opts.field);\n\n opts.trigger = (opts.trigger && opts.trigger.nodeName) ? opts.trigger : opts.field;\n\n opts.disableWeekends = !!opts.disableWeekends;\n\n opts.disableDayFn = (typeof opts.disableDayFn) === 'function' ? opts.disableDayFn : null;\n\n var nom = parseInt(opts.numberOfMonths, 10) || 1;\n opts.numberOfMonths = nom > 4 ? 4 : nom;\n\n if (!isDate(opts.minDate)) {\n opts.minDate = false;\n }\n if (!isDate(opts.maxDate)) {\n opts.maxDate = false;\n }\n if ((opts.minDate && opts.maxDate) && opts.maxDate < opts.minDate) {\n opts.maxDate = opts.minDate = false;\n }\n if (opts.minDate) {\n this.setMinDate(opts.minDate);\n }\n if (opts.maxDate) {\n this.setMaxDate(opts.maxDate);\n }\n\n if (isArray(opts.yearRange)) {\n var fallback = new Date().getFullYear() - 10;\n opts.yearRange[0] = parseInt(opts.yearRange[0], 10) || fallback;\n opts.yearRange[1] = parseInt(opts.yearRange[1], 10) || fallback;\n } else {\n opts.yearRange = Math.abs(parseInt(opts.yearRange, 10)) || defaults.yearRange;\n if (opts.yearRange > 100) {\n opts.yearRange = 100;\n }\n }\n\n return opts;\n },\n\n /**\n * return a formatted string of the current selection (using Moment.js if available)\n */\n toString: function(format)\n {\n format = format || this._o.format;\n if (!isDate(this._d)) {\n return '';\n }\n if (this._o.toString) {\n return this._o.toString(this._d, format);\n }\n if (hasMoment) {\n return moment(this._d).format(format);\n }\n return this._d.toDateString();\n },\n\n /**\n * return a Moment.js object of the current selection (if available)\n */\n getMoment: function()\n {\n return hasMoment ? moment(this._d) : null;\n },\n\n /**\n * set the current selection from a Moment.js object (if available)\n */\n setMoment: function(date, preventOnSelect)\n {\n if (hasMoment && moment.isMoment(date)) {\n this.setDate(date.toDate(), preventOnSelect);\n }\n },\n\n /**\n * return a Date object of the current selection\n */\n getDate: function()\n {\n return isDate(this._d) ? new Date(this._d.getTime()) : null;\n },\n\n /**\n * set the current selection\n */\n setDate: function(date, preventOnSelect)\n {\n if (!date) {\n this._d = null;\n\n if (this._o.field) {\n this._o.field.value = '';\n fireEvent(this._o.field, 'change', { firedBy: this });\n }\n\n return this.draw();\n }\n if (typeof date === 'string') {\n date = new Date(Date.parse(date));\n }\n if (!isDate(date)) {\n return;\n }\n\n var min = this._o.minDate,\n max = this._o.maxDate;\n\n if (isDate(min) && date < min) {\n date = min;\n } else if (isDate(max) && date > max) {\n date = max;\n }\n\n this._d = new Date(date.getTime());\n setToStartOfDay(this._d);\n this.gotoDate(this._d);\n\n if (this._o.field) {\n this._o.field.value = this.toString();\n fireEvent(this._o.field, 'change', { firedBy: this });\n }\n if (!preventOnSelect && typeof this._o.onSelect === 'function') {\n this._o.onSelect.call(this, this.getDate());\n }\n },\n\n /**\n * change view to a specific date\n */\n gotoDate: function(date)\n {\n var newCalendar = true;\n\n if (!isDate(date)) {\n return;\n }\n\n if (this.calendars) {\n var firstVisibleDate = new Date(this.calendars[0].year, this.calendars[0].month, 1),\n lastVisibleDate = new Date(this.calendars[this.calendars.length-1].year, this.calendars[this.calendars.length-1].month, 1),\n visibleDate = date.getTime();\n // get the end of the month\n lastVisibleDate.setMonth(lastVisibleDate.getMonth()+1);\n lastVisibleDate.setDate(lastVisibleDate.getDate()-1);\n newCalendar = (visibleDate < firstVisibleDate.getTime() || lastVisibleDate.getTime() < visibleDate);\n }\n\n if (newCalendar) {\n this.calendars = [{\n month: date.getMonth(),\n year: date.getFullYear()\n }];\n if (this._o.mainCalendar === 'right') {\n this.calendars[0].month += 1 - this._o.numberOfMonths;\n }\n }\n\n this.adjustCalendars();\n },\n\n adjustDate: function(sign, days) {\n\n var day = this.getDate() || new Date();\n var difference = parseInt(days)*24*60*60*1000;\n\n var newDay;\n\n if (sign === 'add') {\n newDay = new Date(day.valueOf() + difference);\n } else if (sign === 'subtract') {\n newDay = new Date(day.valueOf() - difference);\n }\n\n this.setDate(newDay);\n },\n\n adjustCalendars: function() {\n this.calendars[0] = adjustCalendar(this.calendars[0]);\n for (var c = 1; c < this._o.numberOfMonths; c++) {\n this.calendars[c] = adjustCalendar({\n month: this.calendars[0].month + c,\n year: this.calendars[0].year\n });\n }\n this.draw();\n },\n\n gotoToday: function()\n {\n this.gotoDate(new Date());\n },\n\n /**\n * change view to a specific month (zero-index, e.g. 0: January)\n */\n gotoMonth: function(month)\n {\n if (!isNaN(month)) {\n this.calendars[0].month = parseInt(month, 10);\n this.adjustCalendars();\n }\n },\n\n nextMonth: function()\n {\n this.calendars[0].month++;\n this.adjustCalendars();\n },\n\n prevMonth: function()\n {\n this.calendars[0].month--;\n this.adjustCalendars();\n },\n\n /**\n * change view to a specific full year (e.g. \"2012\")\n */\n gotoYear: function(year)\n {\n if (!isNaN(year)) {\n this.calendars[0].year = parseInt(year, 10);\n this.adjustCalendars();\n }\n },\n\n /**\n * change the minDate\n */\n setMinDate: function(value)\n {\n if(value instanceof Date) {\n setToStartOfDay(value);\n this._o.minDate = value;\n this._o.minYear = value.getFullYear();\n this._o.minMonth = value.getMonth();\n } else {\n this._o.minDate = defaults.minDate;\n this._o.minYear = defaults.minYear;\n this._o.minMonth = defaults.minMonth;\n this._o.startRange = defaults.startRange;\n }\n\n this.draw();\n },\n\n /**\n * change the maxDate\n */\n setMaxDate: function(value)\n {\n if(value instanceof Date) {\n setToStartOfDay(value);\n this._o.maxDate = value;\n this._o.maxYear = value.getFullYear();\n this._o.maxMonth = value.getMonth();\n } else {\n this._o.maxDate = defaults.maxDate;\n this._o.maxYear = defaults.maxYear;\n this._o.maxMonth = defaults.maxMonth;\n this._o.endRange = defaults.endRange;\n }\n\n this.draw();\n },\n\n setStartRange: function(value)\n {\n this._o.startRange = value;\n },\n\n setEndRange: function(value)\n {\n this._o.endRange = value;\n },\n\n /**\n * refresh the HTML\n */\n draw: function(force)\n {\n if (!this._v && !force) {\n return;\n }\n var opts = this._o,\n minYear = opts.minYear,\n maxYear = opts.maxYear,\n minMonth = opts.minMonth,\n maxMonth = opts.maxMonth,\n html = '',\n randId;\n\n if (this._y <= minYear) {\n this._y = minYear;\n if (!isNaN(minMonth) && this._m < minMonth) {\n this._m = minMonth;\n }\n }\n if (this._y >= maxYear) {\n this._y = maxYear;\n if (!isNaN(maxMonth) && this._m > maxMonth) {\n this._m = maxMonth;\n }\n }\n\n randId = 'pika-title-' + Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 2);\n\n for (var c = 0; c < opts.numberOfMonths; c++) {\n html += '
' + renderTitle(this, c, this.calendars[c].year, this.calendars[c].month, this.calendars[0].year, randId) + this.render(this.calendars[c].year, this.calendars[c].month, randId) + '
';\n }\n\n this.el.innerHTML = html;\n\n if (opts.bound) {\n if(opts.field.type !== 'hidden') {\n sto(function() {\n opts.trigger.focus();\n }, 1);\n }\n }\n\n if (typeof this._o.onDraw === 'function') {\n this._o.onDraw(this);\n }\n\n if (opts.bound) {\n // let the screen reader user know to use arrow keys\n opts.field.setAttribute('aria-label', 'Use the arrow keys to pick a date');\n }\n },\n\n adjustPosition: function()\n {\n var field, pEl, width, height, viewportWidth, viewportHeight, scrollTop, left, top, clientRect;\n\n if (this._o.container) return;\n\n this.el.style.position = 'absolute';\n\n field = this._o.trigger;\n pEl = field;\n width = this.el.offsetWidth;\n height = this.el.offsetHeight;\n viewportWidth = window.innerWidth || document.documentElement.clientWidth;\n viewportHeight = window.innerHeight || document.documentElement.clientHeight;\n scrollTop = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop;\n\n if (typeof field.getBoundingClientRect === 'function') {\n clientRect = field.getBoundingClientRect();\n left = clientRect.left + window.pageXOffset;\n top = clientRect.bottom + window.pageYOffset;\n } else {\n left = pEl.offsetLeft;\n top = pEl.offsetTop + pEl.offsetHeight;\n while((pEl = pEl.offsetParent)) {\n left += pEl.offsetLeft;\n top += pEl.offsetTop;\n }\n }\n\n // default position is bottom & left\n if ((this._o.reposition && left + width > viewportWidth) ||\n (\n this._o.position.indexOf('right') > -1 &&\n left - width + field.offsetWidth > 0\n )\n ) {\n left = left - width + field.offsetWidth;\n }\n if ((this._o.reposition && top + height > viewportHeight + scrollTop) ||\n (\n this._o.position.indexOf('top') > -1 &&\n top - height - field.offsetHeight > 0\n )\n ) {\n top = top - height - field.offsetHeight;\n }\n\n this.el.style.left = left + 'px';\n this.el.style.top = top + 'px';\n },\n\n /**\n * render HTML for a particular month\n */\n render: function(year, month, randId)\n {\n var opts = this._o,\n now = new Date(),\n days = getDaysInMonth(year, month),\n before = new Date(year, month, 1).getDay(),\n data = [],\n row = [];\n setToStartOfDay(now);\n if (opts.firstDay > 0) {\n before -= opts.firstDay;\n if (before < 0) {\n before += 7;\n }\n }\n var previousMonth = month === 0 ? 11 : month - 1,\n nextMonth = month === 11 ? 0 : month + 1,\n yearOfPreviousMonth = month === 0 ? year - 1 : year,\n yearOfNextMonth = month === 11 ? year + 1 : year,\n daysInPreviousMonth = getDaysInMonth(yearOfPreviousMonth, previousMonth);\n var cells = days + before,\n after = cells;\n while(after > 7) {\n after -= 7;\n }\n cells += 7 - after;\n var isWeekSelected = false;\n for (var i = 0, r = 0; i < cells; i++)\n {\n var day = new Date(year, month, 1 + (i - before)),\n isSelected = isDate(this._d) ? compareDates(day, this._d) : false,\n isToday = compareDates(day, now),\n hasEvent = opts.events.indexOf(day.toDateString()) !== -1 ? true : false,\n isEmpty = i < before || i >= (days + before),\n dayNumber = 1 + (i - before),\n monthNumber = month,\n yearNumber = year,\n isStartRange = opts.startRange && compareDates(opts.startRange, day),\n isEndRange = opts.endRange && compareDates(opts.endRange, day),\n isInRange = opts.startRange && opts.endRange && opts.startRange < day && day < opts.endRange,\n isDisabled = (opts.minDate && day < opts.minDate) ||\n (opts.maxDate && day > opts.maxDate) ||\n (opts.disableWeekends && isWeekend(day)) ||\n (opts.disableDayFn && opts.disableDayFn(day));\n\n if (isEmpty) {\n if (i < before) {\n dayNumber = daysInPreviousMonth + dayNumber;\n monthNumber = previousMonth;\n yearNumber = yearOfPreviousMonth;\n } else {\n dayNumber = dayNumber - days;\n monthNumber = nextMonth;\n yearNumber = yearOfNextMonth;\n }\n }\n\n var dayConfig = {\n day: dayNumber,\n month: monthNumber,\n year: yearNumber,\n hasEvent: hasEvent,\n isSelected: isSelected,\n isToday: isToday,\n isDisabled: isDisabled,\n isEmpty: isEmpty,\n isStartRange: isStartRange,\n isEndRange: isEndRange,\n isInRange: isInRange,\n showDaysInNextAndPreviousMonths: opts.showDaysInNextAndPreviousMonths,\n enableSelectionDaysInNextAndPreviousMonths: opts.enableSelectionDaysInNextAndPreviousMonths\n };\n\n if (opts.pickWholeWeek && isSelected) {\n isWeekSelected = true;\n }\n\n row.push(renderDay(dayConfig));\n\n if (++r === 7) {\n if (opts.showWeekNumber) {\n row.unshift(renderWeek(i - before, month, year));\n }\n data.push(renderRow(row, opts.isRTL, opts.pickWholeWeek, isWeekSelected));\n row = [];\n r = 0;\n isWeekSelected = false;\n }\n }\n return renderTable(opts, data, randId);\n },\n\n isVisible: function()\n {\n return this._v;\n },\n\n show: function()\n {\n if (!this.isVisible()) {\n this._v = true;\n this.draw();\n removeClass(this.el, 'is-hidden');\n if (this._o.bound) {\n addEvent(document, 'click', this._onClick);\n this.adjustPosition();\n }\n if (typeof this._o.onOpen === 'function') {\n this._o.onOpen.call(this);\n }\n }\n },\n\n hide: function()\n {\n var v = this._v;\n if (v !== false) {\n if (this._o.bound) {\n removeEvent(document, 'click', this._onClick);\n }\n this.el.style.position = 'static'; // reset\n this.el.style.left = 'auto';\n this.el.style.top = 'auto';\n addClass(this.el, 'is-hidden');\n this._v = false;\n if (v !== undefined && typeof this._o.onClose === 'function') {\n this._o.onClose.call(this);\n }\n }\n },\n\n /**\n * GAME OVER\n */\n destroy: function()\n {\n this.hide();\n removeEvent(this.el, 'mousedown', this._onMouseDown, true);\n removeEvent(this.el, 'touchend', this._onMouseDown, true);\n removeEvent(this.el, 'change', this._onChange);\n removeEvent(document, 'keydown', this._onKeyChange);\n if (this._o.field) {\n removeEvent(this._o.field, 'change', this._onInputChange);\n if (this._o.bound) {\n removeEvent(this._o.trigger, 'click', this._onInputClick);\n removeEvent(this._o.trigger, 'focus', this._onInputFocus);\n removeEvent(this._o.trigger, 'blur', this._onInputBlur);\n }\n }\n if (this.el.parentNode) {\n this.el.parentNode.removeChild(this.el);\n }\n }\n\n };\n\n return Pikaday;\n\n}));\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= 200 && status < 300;\n this.status = status || 0;\n this.statusText = statusText || '';\n this.headers = new Headers(headers);\n this.body = body;\n\n if (isString(body)) {\n\n this.bodyText = body;\n\n } else if (isBlob(body)) {\n\n this.bodyBlob = body;\n\n if (isBlobText(body)) {\n this.bodyText = blobText(body);\n }\n }\n};\n\nResponse.prototype.blob = function blob () {\n return when(this.bodyBlob);\n};\n\nResponse.prototype.text = function text () {\n return when(this.bodyText);\n};\n\nResponse.prototype.json = function json () {\n return when(this.text(), function (text) { return JSON.parse(text); });\n};\n\nObject.defineProperty(Response.prototype, 'data', {\n\n get: function get() {\n return this.body;\n },\n\n set: function set(body) {\n this.body = body;\n }\n\n});\n\nfunction blobText(body) {\n return new PromiseObj(function (resolve) {\n\n var reader = new FileReader();\n\n reader.readAsText(body);\n reader.onload = function () {\n resolve(reader.result);\n };\n\n });\n}\n\nfunction isBlobText(body) {\n return body.type.indexOf('text') === 0 || body.type.indexOf('json') !== -1;\n}\n\n/**\n * HTTP Request.\n */\n\nvar Request = function Request(options$$1) {\n\n this.body = null;\n this.params = {};\n\n assign(this, options$$1, {\n method: toUpper(options$$1.method || 'GET')\n });\n\n if (!(this.headers instanceof Headers)) {\n this.headers = new Headers(this.headers);\n }\n};\n\nRequest.prototype.getUrl = function getUrl (){\n return Url(this);\n};\n\nRequest.prototype.getBody = function getBody (){\n return this.body;\n};\n\nRequest.prototype.respondWith = function respondWith (body, options$$1) {\n return new Response(body, assign(options$$1 || {}, {url: this.getUrl()}));\n};\n\n/**\n * Service for sending network requests.\n */\n\nvar COMMON_HEADERS = {'Accept': 'application/json, text/plain, */*'};\nvar JSON_CONTENT_TYPE = {'Content-Type': 'application/json;charset=utf-8'};\n\nfunction Http(options$$1) {\n\n var self = this || {}, client = Client(self.$vm);\n\n defaults(options$$1 || {}, self.$options, Http.options);\n\n Http.interceptors.forEach(function (handler) {\n\n if (isString(handler)) {\n handler = Http.interceptor[handler];\n }\n\n if (isFunction(handler)) {\n client.use(handler);\n }\n\n });\n\n return client(new Request(options$$1)).then(function (response) {\n\n return response.ok ? response : PromiseObj.reject(response);\n\n }, function (response) {\n\n if (response instanceof Error) {\n error(response);\n }\n\n return PromiseObj.reject(response);\n });\n}\n\nHttp.options = {};\n\nHttp.headers = {\n put: JSON_CONTENT_TYPE,\n post: JSON_CONTENT_TYPE,\n patch: JSON_CONTENT_TYPE,\n delete: JSON_CONTENT_TYPE,\n common: COMMON_HEADERS,\n custom: {}\n};\n\nHttp.interceptor = {before: before, method: method, jsonp: jsonp, json: json, form: form, header: header, cors: cors};\nHttp.interceptors = ['before', 'method', 'jsonp', 'json', 'form', 'header', 'cors'];\n\n['get', 'delete', 'head', 'jsonp'].forEach(function (method$$1) {\n\n Http[method$$1] = function (url, options$$1) {\n return this(assign(options$$1 || {}, {url: url, method: method$$1}));\n };\n\n});\n\n['post', 'put', 'patch'].forEach(function (method$$1) {\n\n Http[method$$1] = function (url, body, options$$1) {\n return this(assign(options$$1 || {}, {url: url, method: method$$1, body: body}));\n };\n\n});\n\n/**\n * Service for interacting with RESTful services.\n */\n\nfunction Resource(url, params, actions, options$$1) {\n\n var self = this || {}, resource = {};\n\n actions = assign({},\n Resource.actions,\n actions\n );\n\n each(actions, function (action, name) {\n\n action = merge({url: url, params: assign({}, params)}, options$$1, action);\n\n resource[name] = function () {\n return (self.$http || Http)(opts(action, arguments));\n };\n });\n\n return resource;\n}\n\nfunction opts(action, args) {\n\n var options$$1 = assign({}, action), params = {}, body;\n\n switch (args.length) {\n\n case 2:\n\n params = args[0];\n body = args[1];\n\n break;\n\n case 1:\n\n if (/^(POST|PUT|PATCH)$/i.test(options$$1.method)) {\n body = args[0];\n } else {\n params = args[0];\n }\n\n break;\n\n case 0:\n\n break;\n\n default:\n\n throw 'Expected up to 2 arguments [params, body], got ' + args.length + ' arguments';\n }\n\n options$$1.body = body;\n options$$1.params = assign({}, options$$1.params, params);\n\n return options$$1;\n}\n\nResource.actions = {\n\n get: {method: 'GET'},\n save: {method: 'POST'},\n query: {method: 'GET'},\n update: {method: 'PUT'},\n remove: {method: 'DELETE'},\n delete: {method: 'DELETE'}\n\n};\n\n/**\n * Install plugin.\n */\n\nfunction plugin(Vue) {\n\n if (plugin.installed) {\n return;\n }\n\n Util(Vue);\n\n Vue.url = Url;\n Vue.http = Http;\n Vue.resource = Resource;\n Vue.Promise = PromiseObj;\n\n Object.defineProperties(Vue.prototype, {\n\n $url: {\n get: function get() {\n return options(Vue.url, this, this.$options.url);\n }\n },\n\n $http: {\n get: function get() {\n return options(Vue.http, this, this.$options.http);\n }\n },\n\n $resource: {\n get: function get() {\n return Vue.resource.bind(this);\n }\n },\n\n $promise: {\n get: function get() {\n var this$1 = this;\n\n return function (executor) { return new Vue.Promise(executor, this$1); };\n }\n }\n\n });\n}\n\nif (typeof window !== 'undefined' && window.Vue) {\n window.Vue.use(plugin);\n}\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (plugin);\n\n\n\n/***/ }),\n\n/***/ \"../../../node_modules/webpack/buildin/module.js\":\n/***/ (function(module, exports) {\n\nmodule.exports = function(module) {\r\n\tif(!module.webpackPolyfill) {\r\n\t\tmodule.deprecate = function() {};\r\n\t\tmodule.paths = [];\r\n\t\t// module.parent = undefined by default\r\n\t\tif(!module.children) module.children = [];\r\n\t\tObject.defineProperty(module, \"loaded\", {\r\n\t\t\tenumerable: true,\r\n\t\t\tget: function() {\r\n\t\t\t\treturn module.l;\r\n\t\t\t}\r\n\t\t});\r\n\t\tObject.defineProperty(module, \"id\", {\r\n\t\t\tenumerable: true,\r\n\t\t\tget: function() {\r\n\t\t\t\treturn module.i;\r\n\t\t\t}\r\n\t\t});\r\n\t\tmodule.webpackPolyfill = 1;\r\n\t}\r\n\treturn module;\r\n};\r\n\n\n/***/ }),\n\n/***/ \"../../../vendor/assets/javascripts/date.format.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/*\n * Date Format 1.2.3\n * (c) 2007-2009 Steven Levithan \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/* 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, callback) {\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\n/***/ }),\n\n/***/ \"./autosave.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__lib_utils_accessor__ = __webpack_require__(\"./lib/utils/accessor.js\");\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/* eslint-disable no-param-reassign, prefer-template, no-var, no-void, consistent-return */\n\n\n\nvar Autosave = function () {\n function Autosave(field, key, resource) {\n var _this = this;\n\n _classCallCheck(this, Autosave);\n\n this.field = field;\n this.isLocalStorageAvailable = __WEBPACK_IMPORTED_MODULE_0__lib_utils_accessor__[\"a\" /* default */].isLocalStorageAccessSafe();\n this.resource = resource;\n if (key.join != null) {\n key = key.join('/');\n }\n this.key = 'autosave/' + key;\n this.field.data('autosave', this);\n this.restore();\n this.field.on('input', function () {\n return _this.save();\n });\n }\n\n _createClass(Autosave, [{\n key: 'restore',\n value: function restore() {\n var text;\n\n if (!this.isLocalStorageAvailable) return;\n\n text = window.localStorage.getItem(this.key);\n\n if ((text != null ? text.length : void 0) > 0) {\n this.field.val(text);\n }\n if (!this.resource && this.resource !== 'issue') {\n this.field.trigger('input');\n } else {\n // v-model does not update with jQuery trigger\n // https://github.com/vuejs/vue/issues/2804#issuecomment-216968137\n var event = new Event('change', { bubbles: true, cancelable: false });\n var field = this.field.get(0);\n if (field) {\n field.dispatchEvent(event);\n }\n }\n }\n }, {\n key: 'save',\n value: function save() {\n var text;\n text = this.field.val();\n\n if (this.isLocalStorageAvailable && (text != null ? text.length : void 0) > 0) {\n return window.localStorage.setItem(this.key, text);\n }\n\n return this.reset();\n }\n }, {\n key: 'reset',\n value: function reset() {\n if (!this.isLocalStorageAvailable) return;\n\n return window.localStorage.removeItem(this.key);\n }\n }]);\n\n return Autosave;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (Autosave);\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-content').length) {\n $('.js-awards-block.current').removeClass('current');\n }\n if (!$target.closest('.emoji-menu').length) {\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-issue-note-awards').length;\n\n if (Object(__WEBPACK_IMPORTED_MODULE_3__lib_utils_common_utils__[\"n\" /* isInIssuePage */])() && !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: 'getVotesBlock',\n value: function getVotesBlock() {\n if (Object(__WEBPACK_IMPORTED_MODULE_3__lib_utils_common_utils__[\"n\" /* isInIssuePage */])()) {\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('award-url');\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__[\"__\"])('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__[\"D\" /* 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__[\"D\" /* 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__[\"i\" /* 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__[\"s\" /* 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('original-title');\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.attr('disabled')) {\n $submitButton.trigger('click', [e]);\n\n if (!Object(__WEBPACK_IMPORTED_MODULE_1__lib_utils_common_utils__[\"n\" /* 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('options-parent') === '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').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.target.classList.toggle('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/***/ \"./blob/blob_fork_suggestion.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\nvar defaults = {\n // Buttons that will show the `suggestionSections`\n // has `data-fork-path`, and `data-action`\n openButtons: [],\n // Update the href(from `openButton` -> `data-fork-path`)\n // whenever a `openButton` is clicked\n forkButtons: [],\n // Buttons to hide the `suggestionSections`\n cancelButtons: [],\n // Section to show/hide\n suggestionSections: [],\n // Pieces of text that need updating depending on the action, `edit`, `replace`, `delete`\n actionTextPieces: []\n};\n\nvar BlobForkSuggestion = function () {\n function BlobForkSuggestion(options) {\n _classCallCheck(this, BlobForkSuggestion);\n\n this.elementMap = Object.assign({}, defaults, options);\n this.onOpenButtonClick = this.onOpenButtonClick.bind(this);\n this.onCancelButtonClick = this.onCancelButtonClick.bind(this);\n }\n\n _createClass(BlobForkSuggestion, [{\n key: 'init',\n value: function init() {\n this.bindEvents();\n\n return this;\n }\n }, {\n key: 'bindEvents',\n value: function bindEvents() {\n $(this.elementMap.openButtons).on('click', this.onOpenButtonClick);\n $(this.elementMap.cancelButtons).on('click', this.onCancelButtonClick);\n }\n }, {\n key: 'showSuggestionSection',\n value: function showSuggestionSection(forkPath) {\n var action = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'edit';\n\n $(this.elementMap.suggestionSections).removeClass('hidden');\n $(this.elementMap.forkButtons).attr('href', forkPath);\n $(this.elementMap.actionTextPieces).text(action);\n }\n }, {\n key: 'hideSuggestionSection',\n value: function hideSuggestionSection() {\n $(this.elementMap.suggestionSections).addClass('hidden');\n }\n }, {\n key: 'onOpenButtonClick',\n value: function onOpenButtonClick(e) {\n var forkPath = $(e.currentTarget).attr('data-fork-path');\n var action = $(e.currentTarget).attr('data-action');\n this.showSuggestionSection(forkPath, action);\n }\n }, {\n key: 'onCancelButtonClick',\n value: function onCancelButtonClick() {\n this.hideSuggestionSection();\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n $(this.elementMap.openButtons).off('click', this.onOpenButtonClick);\n $(this.elementMap.cancelButtons).off('click', this.onCancelButtonClick);\n }\n }]);\n\n return BlobForkSuggestion;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (BlobForkSuggestion);\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/***/ \"./commit/image_file.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_vendor_jquery_waitforimages__ = __webpack_require__(\"../../../vendor/assets/javascripts/jquery.waitforimages.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_vendor_jquery_waitforimages___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_vendor_jquery_waitforimages__);\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-var, no-use-before-define, prefer-arrow-callback, no-else-return, consistent-return, prefer-template, quotes, one-var, one-var-declaration-per-line, no-unused-vars, no-return-assign, comma-dangle, quote-props, no-unused-expressions, no-sequences, object-shorthand, max-len */\n\n\n// Width where images must fits in, for 2-up this gets divided by 2\nvar availWidth = 900;\nvar viewModes = ['two-up', 'swipe'];\n\nvar ImageFile = function () {\n function ImageFile(file) {\n _classCallCheck(this, ImageFile);\n\n this.views = {\n 'two-up': function twoUp() {\n return $('.two-up.view .wrap', this.file).each(function (_this) {\n return function (index, wrap) {\n $('img', wrap).each(function () {\n var currentWidth;\n currentWidth = $(this).width();\n if (currentWidth > availWidth / 2) {\n return $(this).width(availWidth / 2);\n }\n });\n return _this.requestImageInfo($('img', wrap), function (width, height) {\n $('.image-info .meta-width', wrap).text(width + \"px\");\n $('.image-info .meta-height', wrap).text(height + \"px\");\n return $('.image-info', wrap).removeClass('hide');\n });\n };\n }(this));\n },\n 'swipe': function swipe() {\n var maxHeight, maxWidth;\n maxWidth = 0;\n maxHeight = 0;\n return $('.swipe.view', this.file).each(function (_this) {\n return function (index, view) {\n var $swipeWrap, $swipeBar, $swipeFrame, wrapPadding, ref;\n ref = _this.prepareFrames(view), maxWidth = ref[0], maxHeight = ref[1];\n $swipeFrame = $('.swipe-frame', view);\n $swipeWrap = $('.swipe-wrap', view);\n $swipeBar = $('.swipe-bar', view);\n\n $swipeFrame.css({\n width: maxWidth + 16,\n height: maxHeight + 28\n });\n $swipeWrap.css({\n width: maxWidth + 1,\n height: maxHeight + 2\n });\n // Set swipeBar left position to match image frame\n $swipeBar.css({\n left: 1\n });\n\n wrapPadding = parseInt($swipeWrap.css('right').replace('px', ''), 10);\n\n _this.initDraggable($swipeBar, wrapPadding, function (e, left) {\n if (left > 0 && left < $swipeFrame.width() - wrapPadding * 2) {\n $swipeWrap.width(maxWidth + 1 - left);\n $swipeBar.css('left', left);\n }\n });\n };\n }(this));\n },\n 'onion-skin': function onionSkin() {\n var dragTrackWidth, maxHeight, maxWidth;\n maxWidth = 0;\n maxHeight = 0;\n dragTrackWidth = $('.drag-track', this.file).width() - $('.dragger', this.file).width();\n return $('.onion-skin.view', this.file).each(function (_this) {\n return function (index, view) {\n var $frame,\n $track,\n $dragger,\n $frameAdded,\n framePadding,\n ref,\n dragging = false;\n ref = _this.prepareFrames(view), maxWidth = ref[0], maxHeight = ref[1];\n $frame = $('.onion-skin-frame', view);\n $frameAdded = $('.frame.added', view);\n $track = $('.drag-track', view);\n $dragger = $('.dragger', $track);\n\n $frame.css({\n width: maxWidth + 16,\n height: maxHeight + 28\n });\n $('.swipe-wrap', view).css({\n width: maxWidth + 1,\n height: maxHeight + 2\n });\n $dragger.css({\n left: dragTrackWidth\n });\n\n $frameAdded.css('opacity', 1);\n framePadding = parseInt($frameAdded.css('right').replace('px', ''), 10);\n\n _this.initDraggable($dragger, framePadding, function (e, left) {\n var opacity = left / dragTrackWidth;\n\n if (opacity >= 0 && opacity <= 1) {\n $dragger.css('left', left);\n $frameAdded.css('opacity', opacity);\n }\n });\n };\n }(this));\n }\n };\n\n this.file = file;\n this.requestImageInfo($('.two-up.view .frame.deleted img', this.file), function (_this) {\n return function (deletedWidth, deletedHeight) {\n return _this.requestImageInfo($('.two-up.view .frame.added img', _this.file), function (width, height) {\n _this.initViewModes();\n\n // Load two-up view after images are loaded\n // so that we can display the correct width and height information\n var $images = $('.two-up.view img', _this.file);\n\n $images.waitForImages(function () {\n _this.initView('two-up');\n });\n });\n };\n }(this));\n }\n\n _createClass(ImageFile, [{\n key: 'initViewModes',\n value: function initViewModes() {\n var viewMode = viewModes[0];\n $('.view-modes', this.file).removeClass('hide');\n $('.view-modes-menu', this.file).on('click', 'li', function (_this) {\n return function (event) {\n if (!$(event.currentTarget).hasClass('active')) {\n return _this.activateViewMode(event.currentTarget.className);\n }\n };\n }(this));\n return this.activateViewMode(viewMode);\n }\n }, {\n key: 'activateViewMode',\n value: function activateViewMode(viewMode) {\n $('.view-modes-menu li', this.file).removeClass('active').filter(\".\" + viewMode).addClass('active');\n return $(\".view:visible:not(.\" + viewMode + \")\", this.file).fadeOut(200, function (_this) {\n return function () {\n $(\".view.\" + viewMode, _this.file).fadeIn(200);\n return _this.initView(viewMode);\n };\n }(this));\n }\n }, {\n key: 'initView',\n value: function initView(viewMode) {\n return this.views[viewMode].call(this);\n }\n // eslint-disable-next-line class-methods-use-this\n\n }, {\n key: 'initDraggable',\n value: function initDraggable($el, padding, callback) {\n var dragging = false;\n var $body = $('body');\n var $offsetEl = $el.parent();\n\n $el.off('mousedown').on('mousedown', function () {\n dragging = true;\n $body.css('user-select', 'none');\n });\n\n $body.off('mouseup').off('mousemove').on('mouseup', function () {\n dragging = false;\n $body.css('user-select', '');\n }).on('mousemove', function (e) {\n var left;\n if (!dragging) return;\n\n left = e.pageX - ($offsetEl.offset().left + padding);\n\n callback(e, left);\n });\n }\n }, {\n key: 'prepareFrames',\n value: function prepareFrames(view) {\n var maxHeight, maxWidth;\n maxWidth = 0;\n maxHeight = 0;\n $('.frame', view).each(function (_this) {\n return function (index, frame) {\n var height, width;\n width = $(frame).width();\n height = $(frame).height();\n maxWidth = width > maxWidth ? width : maxWidth;\n return maxHeight = height > maxHeight ? height : maxHeight;\n };\n }(this)).css({\n width: maxWidth,\n height: maxHeight\n });\n return [maxWidth, maxHeight];\n }\n // eslint-disable-next-line\n\n }, {\n key: 'requestImageInfo',\n value: function requestImageInfo(img, callback) {\n var domImg = img.get(0);\n if (domImg) {\n if (domImg.complete) {\n return callback.call(this, domImg.naturalWidth, domImg.naturalHeight);\n } else {\n return img.on('load', function (_this) {\n return function () {\n return callback.call(_this, domImg.naturalWidth, domImg.naturalHeight);\n };\n }(this));\n }\n }\n }\n }]);\n\n return ImageFile;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (ImageFile);\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\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__[\"y\" /* 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/***/ \"./create_label.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__api__ = __webpack_require__(\"./api.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__lib_utils_text_utility__ = __webpack_require__(\"./lib/utils/text_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, prefer-arrow-callback */\n\n\n\nvar CreateLabelDropdown = function () {\n function CreateLabelDropdown($el, namespacePath, projectPath) {\n _classCallCheck(this, CreateLabelDropdown);\n\n this.$el = $el;\n this.namespacePath = namespacePath;\n this.projectPath = projectPath;\n this.$dropdownBack = $('.dropdown-menu-back', this.$el.closest('.dropdown'));\n this.$cancelButton = $('.js-cancel-label-btn', this.$el);\n this.$newLabelField = $('#new_label_name', this.$el);\n this.$newColorField = $('#new_label_color', this.$el);\n this.$colorPreview = $('.js-dropdown-label-color-preview', this.$el);\n this.$newLabelError = $('.js-label-error', this.$el);\n this.$newLabelCreateButton = $('.js-new-label-btn', this.$el);\n this.$colorSuggestions = $('.suggest-colors-dropdown a', this.$el);\n\n this.$newLabelError.hide();\n this.$newLabelCreateButton.disable();\n\n this.cleanBinding();\n this.addBinding();\n }\n\n _createClass(CreateLabelDropdown, [{\n key: 'cleanBinding',\n value: function cleanBinding() {\n this.$colorSuggestions.off('click');\n this.$newLabelField.off('keyup change');\n this.$newColorField.off('keyup change');\n this.$dropdownBack.off('click');\n this.$cancelButton.off('click');\n this.$newLabelCreateButton.off('click');\n }\n }, {\n key: 'addBinding',\n value: function addBinding() {\n var self = this;\n\n this.$colorSuggestions.on('click', function (e) {\n var $this = $(this);\n self.addColorValue(e, $this);\n });\n\n this.$newLabelField.on('keyup change', this.enableLabelCreateButton.bind(this));\n this.$newColorField.on('keyup change', this.enableLabelCreateButton.bind(this));\n\n this.$dropdownBack.on('click', this.resetForm.bind(this));\n\n this.$cancelButton.on('click', function (e) {\n e.preventDefault();\n e.stopPropagation();\n\n self.resetForm();\n self.$dropdownBack.trigger('click');\n });\n\n this.$newLabelCreateButton.on('click', this.saveLabel.bind(this));\n }\n }, {\n key: 'addColorValue',\n value: function addColorValue(e, $this) {\n e.preventDefault();\n e.stopPropagation();\n\n this.$newColorField.val($this.data('color')).trigger('change');\n this.$colorPreview.css('background-color', $this.data('color')).parent().addClass('is-active');\n }\n }, {\n key: 'enableLabelCreateButton',\n value: function enableLabelCreateButton() {\n if (this.$newLabelField.val() !== '' && this.$newColorField.val() !== '') {\n this.$newLabelError.hide();\n this.$newLabelCreateButton.enable();\n } else {\n this.$newLabelCreateButton.disable();\n }\n }\n }, {\n key: 'resetForm',\n value: function resetForm() {\n this.$newLabelField.val('').trigger('change');\n\n this.$newColorField.val('').trigger('change');\n\n this.$colorPreview.css('background-color', '').parent().removeClass('is-active');\n }\n }, {\n key: 'saveLabel',\n value: function saveLabel(e) {\n var _this = this;\n\n e.preventDefault();\n e.stopPropagation();\n\n __WEBPACK_IMPORTED_MODULE_0__api__[\"a\" /* default */].newLabel(this.namespacePath, this.projectPath, {\n title: this.$newLabelField.val(),\n color: this.$newColorField.val()\n }, function (label) {\n _this.$newLabelCreateButton.enable();\n\n if (label.message) {\n var errors = void 0;\n\n if (typeof label.message === 'string') {\n errors = label.message;\n } else {\n errors = Object.keys(label.message).map(function (key) {\n return Object(__WEBPACK_IMPORTED_MODULE_1__lib_utils_text_utility__[\"e\" /* humanize */])(key) + ' ' + label.message[key].join(', ');\n }).join('
    ');\n }\n\n _this.$newLabelError.html(errors).show();\n } else {\n _this.$dropdownBack.trigger('click');\n\n $(document).trigger('created.label', label);\n }\n });\n }\n }]);\n\n return CreateLabelDropdown;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (CreateLabelDropdown);\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\n\n/***/ }),\n\n/***/ \"./diff.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/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__files_comment_button__ = __webpack_require__(\"./files_comment_button.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__single_file_diff__ = __webpack_require__(\"./single_file_diff.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__image_diff_helpers_index__ = __webpack_require__(\"./image_diff/helpers/index.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\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\nvar UNFOLD_COUNT = 20;\nvar isBound = false;\n\nvar Diff = function () {\n function Diff() {\n _classCallCheck(this, Diff);\n\n var $diffFile = $('.files .diff-file');\n\n $diffFile.each(function (index, file) {\n if (!$.data(file, 'singleFileDiff')) {\n $.data(file, 'singleFileDiff', new __WEBPACK_IMPORTED_MODULE_2__single_file_diff__[\"a\" /* default */](file));\n }\n });\n\n var tab = document.getElementById('diffs');\n if (!tab || tab && tab.dataset && tab.dataset.isLocked !== '') __WEBPACK_IMPORTED_MODULE_1__files_comment_button__[\"a\" /* default */].init($diffFile);\n\n var firstFile = $('.files').first().get(0);\n var canCreateNote = firstFile && firstFile.hasAttribute('data-can-create-note');\n $diffFile.each(function (index, file) {\n return __WEBPACK_IMPORTED_MODULE_3__image_diff_helpers_index__[\"a\" /* default */].initImageDiff(file, canCreateNote);\n });\n\n if (!isBound) {\n $(document).on('click', '.js-unfold', this.handleClickUnfold.bind(this)).on('click', '.diff-line-num a', this.handleClickLineNum.bind(this)).on('mousedown', 'td.line_content.parallel', this.handleParallelLineDown.bind(this));\n isBound = true;\n }\n\n if (Object(__WEBPACK_IMPORTED_MODULE_0__lib_utils_url_utility__[\"a\" /* getLocationHash */])()) {\n this.highlightSelectedLine();\n }\n\n this.openAnchoredDiff();\n }\n\n _createClass(Diff, [{\n key: 'handleClickUnfold',\n value: function handleClickUnfold(e) {\n var $target = $(e.target);\n\n var _lineNumbers = this.lineNumbers($target.parent()),\n _lineNumbers2 = _slicedToArray(_lineNumbers, 2),\n oldLineNumber = _lineNumbers2[0],\n newLineNumber = _lineNumbers2[1];\n\n var offset = newLineNumber - oldLineNumber;\n var bottom = $target.hasClass('js-unfold-bottom');\n var since = void 0;\n var to = void 0;\n var unfold = true;\n\n if (bottom) {\n var lineNumber = newLineNumber + 1;\n since = lineNumber;\n to = lineNumber + UNFOLD_COUNT;\n } else {\n var _lineNumber = newLineNumber - 1;\n since = _lineNumber - UNFOLD_COUNT;\n to = _lineNumber;\n\n // make sure we aren't loading more than we need\n var prevNewLine = this.lineNumbers($target.parent().prev())[1];\n if (since <= prevNewLine + 1) {\n since = prevNewLine + 1;\n unfold = false;\n }\n }\n\n var file = $target.parents('.diff-file');\n var link = file.data('blob-diff-path');\n var view = file.data('view');\n\n var params = { since: since, to: to, bottom: bottom, offset: offset, unfold: unfold, view: view };\n $.get(link, params, function (response) {\n return $target.parent().replaceWith(response);\n });\n }\n }, {\n key: 'openAnchoredDiff',\n value: function openAnchoredDiff(cb) {\n var _this = this;\n\n var locationHash = Object(__WEBPACK_IMPORTED_MODULE_0__lib_utils_url_utility__[\"a\" /* getLocationHash */])();\n var anchoredDiff = locationHash && locationHash.split('_')[0];\n\n if (!anchoredDiff) return;\n\n var diffTitle = $('#' + anchoredDiff);\n var diffFile = diffTitle.closest('.diff-file');\n var nothingHereBlock = $('.nothing-here-block:visible', diffFile);\n if (nothingHereBlock.length) {\n var clickTarget = $('.js-file-title, .click-to-expand', diffFile);\n diffFile.data('singleFileDiff').toggleDiff(clickTarget, function () {\n _this.highlightSelectedLine();\n if (cb) cb();\n });\n } else if (cb) {\n cb();\n }\n }\n }, {\n key: 'handleClickLineNum',\n value: function handleClickLineNum(e) {\n var hash = $(e.currentTarget).attr('href');\n e.preventDefault();\n if (window.history.pushState) {\n window.history.pushState(null, null, hash);\n } else {\n window.location.hash = hash;\n }\n this.highlightSelectedLine();\n }\n // eslint-disable-next-line class-methods-use-this\n\n }, {\n key: 'handleParallelLineDown',\n value: function handleParallelLineDown(e) {\n var line = $(e.currentTarget);\n var table = line.closest('table');\n\n table.removeClass('left-side-selected right-side-selected');\n\n var lineClass = ['left-side', 'right-side'].filter(function (name) {\n return line.hasClass(name);\n })[0];\n if (lineClass) {\n table.addClass(lineClass + '-selected');\n }\n }\n // eslint-disable-next-line class-methods-use-this\n\n }, {\n key: 'diffViewType',\n value: function diffViewType() {\n return $('.inline-parallel-buttons a.active').data('view-type');\n }\n // eslint-disable-next-line class-methods-use-this\n\n }, {\n key: 'lineNumbers',\n value: function lineNumbers(line) {\n var children = line.find('.diff-line-num').toArray();\n if (children.length !== 2) {\n return [0, 0];\n }\n return children.map(function (elm) {\n return parseInt($(elm).data('linenumber'), 10) || 0;\n });\n }\n // eslint-disable-next-line class-methods-use-this\n\n }, {\n key: 'highlightSelectedLine',\n value: function highlightSelectedLine() {\n var hash = Object(__WEBPACK_IMPORTED_MODULE_0__lib_utils_url_utility__[\"a\" /* getLocationHash */])();\n var $diffFiles = $('.diff-file');\n $diffFiles.find('.hll').removeClass('hll');\n\n if (hash) {\n $diffFiles.find('tr#' + hash + ':not(.match) td, td#' + hash + ', td[data-line-code=\"' + hash + '\"]').addClass('hll');\n }\n }\n }]);\n\n return Diff;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (Diff);\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 export (immutable) */ __webpack_exports__[\"a\"] = initDispatcher;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__merge_request__ = __webpack_require__(\"./merge_request.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__flash__ = __webpack_require__(\"./flash.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__gfm_auto_complete__ = __webpack_require__(\"./gfm_auto_complete.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__zen_mode__ = __webpack_require__(\"./zen_mode.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__init_notes__ = __webpack_require__(\"./init_notes.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__init_issuable_sidebar__ = __webpack_require__(\"./init_issuable_sidebar.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__lib_utils_common_utils__ = __webpack_require__(\"./lib/utils/common_utils.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__gl_field_errors__ = __webpack_require__(\"./gl_field_errors.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__shortcuts__ = __webpack_require__(\"./shortcuts.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__shortcuts_issuable__ = __webpack_require__(\"./shortcuts_issuable.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__diff__ = __webpack_require__(\"./diff.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__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\n\n\n\n\n\n\nvar Dispatcher;\n\n(function () {\n Dispatcher = function () {\n function Dispatcher() {\n this.initSearch();\n this.initFieldErrors();\n this.initPageScripts();\n }\n\n Dispatcher.prototype.initPageScripts = function () {\n var path, shortcut_handler;\n var page = $('body').attr('data-page');\n if (!page) {\n return false;\n }\n\n var fail = function fail() {\n return Object(__WEBPACK_IMPORTED_MODULE_1__flash__[\"a\" /* default */])('Error loading dynamic module');\n };\n var callDefault = function callDefault(m) {\n return m.default();\n };\n\n path = page.split(':');\n shortcut_handler = null;\n\n $('.js-gfm-input:not(.js-vue-textarea)').each(function (i, el) {\n var gfm = new __WEBPACK_IMPORTED_MODULE_2__gfm_auto_complete__[\"a\" /* default */](gl.GfmAutoComplete && gl.GfmAutoComplete.dataSources);\n var enableGFM = Object(__WEBPACK_IMPORTED_MODULE_6__lib_utils_common_utils__[\"d\" /* 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 switch (page) {\n case 'projects:environments:metrics':\n __webpack_require__.e/* import() */(\"constants.js-32ae3d\").then(__webpack_require__.bind(null, \"./pages/projects/environments/metrics/index.js\")).then(callDefault).catch(fail);\n break;\n case 'projects:merge_requests:index':\n case 'projects:issues:index':\n case 'projects:issues:show':\n shortcut_handler = true;\n break;\n case 'projects:milestones:index':\n __webpack_require__.e/* import() */(\"milestones__shared__event_hub.js-238786\").then(__webpack_require__.bind(null, \"./pages/projects/milestones/index/index.js\")).then(callDefault).catch(fail);\n break;\n case 'projects:milestones:show':\n __webpack_require__.e/* import() */(\"milestone.js-3de9a7\").then(__webpack_require__.bind(null, \"./pages/projects/milestones/show/index.js\")).then(callDefault).catch(fail);\n break;\n case 'groups:milestones:show':\n __webpack_require__.e/* import() */(\"milestone.js-54963d\").then(__webpack_require__.bind(null, \"./pages/groups/milestones/show/index.js\")).then(callDefault).catch(fail);\n break;\n case 'dashboard:milestones:show':\n __webpack_require__.e/* import() */(\"milestone.js-1f924b\").then(__webpack_require__.bind(null, \"./pages/dashboard/milestones/show/index.js\")).then(callDefault).catch(fail);\n break;\n case 'dashboard:issues':\n __webpack_require__.e/* import() */(\"init_legacy_filters.js-24b25b\").then(__webpack_require__.bind(null, \"./pages/dashboard/issues/index.js\")).then(callDefault).catch(fail);\n break;\n case 'dashboard:merge_requests':\n __webpack_require__.e/* import() */(\"init_legacy_filters.js-4653ae\").then(__webpack_require__.bind(null, \"./pages/dashboard/merge_requests/index.js\")).then(callDefault).catch(fail);\n break;\n case 'groups:issues':\n __webpack_require__.e/* import() */(\"constants.js-f16f28\").then(__webpack_require__.bind(null, \"./pages/groups/issues/index.js\")).then(callDefault).catch(fail);\n break;\n case 'groups:merge_requests':\n __webpack_require__.e/* import() */(\"constants.js-3a7476\").then(__webpack_require__.bind(null, \"./pages/groups/merge_requests/index.js\")).then(callDefault).catch(fail);\n break;\n case 'dashboard:todos:index':\n __webpack_require__.e/* import() */(\"dashboard__todos__index-7d5f19\").then(__webpack_require__.bind(null, \"./pages/dashboard/todos/index/index.js\")).then(callDefault).catch(fail);\n break;\n case 'admin:jobs:index':\n __webpack_require__.e/* import() */(\"admin__jobs__index__components__stop_jobs_modal.vue-05a5c7\").then(__webpack_require__.bind(null, \"./pages/admin/jobs/index/index.js\")).then(callDefault).catch(fail);\n break;\n case 'admin:projects:index':\n __webpack_require__.e/* import() */(\"admin__projects__index-14d1d0\").then(__webpack_require__.bind(null, \"./pages/admin/projects/index/index.js\")).then(callDefault).catch(fail);\n break;\n case 'admin:users:index':\n __webpack_require__.e/* import() */(\"admin__users__shared-1d0dd6\").then(__webpack_require__.bind(null, \"./pages/admin/users/shared/index.js\")).then(callDefault).catch(fail);\n break;\n case 'admin:users:show':\n __webpack_require__.e/* import() */(\"admin__users__shared-1d0dd6\"/* duplicate */).then(__webpack_require__.bind(null, \"./pages/admin/users/shared/index.js\")).then(callDefault).catch(fail);\n break;\n case 'dashboard:projects:index':\n case 'dashboard:projects:starred':\n __webpack_require__.e/* import() */(\"filterable_list.js-450471\").then(__webpack_require__.bind(null, \"./pages/dashboard/projects/index.js\")).then(callDefault).catch(fail);\n break;\n case 'explore:projects:index':\n case 'explore:projects:trending':\n case 'explore:projects:starred':\n __webpack_require__.e/* import() */(\"filterable_list.js-690751\").then(__webpack_require__.bind(null, \"./pages/explore/projects/index.js\")).then(callDefault).catch(fail);\n break;\n case 'explore:groups:index':\n __webpack_require__.e/* import() */(\"filterable_list.js-cf4b97\").then(__webpack_require__.bind(null, \"./pages/explore/groups/index.js\")).then(callDefault).catch(fail);\n break;\n case 'projects:milestones:new':\n case 'projects:milestones:create':\n __webpack_require__.e/* import() */(\"projects__milestones__new-94b5fd\").then(__webpack_require__.bind(null, \"./pages/projects/milestones/new/index.js\")).then(callDefault).catch(fail);\n break;\n case 'projects:milestones:edit':\n case 'projects:milestones:update':\n __webpack_require__.e/* import() */(\"projects__milestones__edit-5e47f2\").then(__webpack_require__.bind(null, \"./pages/projects/milestones/edit/index.js\")).then(callDefault).catch(fail);\n break;\n case 'groups:milestones:new':\n case 'groups:milestones:create':\n __webpack_require__.e/* import() */(\"groups__milestones__new-8eee7c\").then(__webpack_require__.bind(null, \"./pages/groups/milestones/new/index.js\")).then(callDefault).catch(fail);\n break;\n case 'groups:milestones:edit':\n case 'groups:milestones:update':\n __webpack_require__.e/* import() */(\"groups__milestones__edit-6ef230\").then(__webpack_require__.bind(null, \"./pages/groups/milestones/edit/index.js\")).then(callDefault).catch(fail);\n break;\n case 'projects:compare:show':\n __webpack_require__.e/* import() */(\"projects__compare__show-46fdc7\").then(__webpack_require__.bind(null, \"./pages/projects/compare/show/index.js\")).then(callDefault).catch(fail);\n break;\n case 'projects:branches:new':\n __webpack_require__.e/* import() */(\"new_branch_form.js-f2ed03\").then(__webpack_require__.bind(null, \"./pages/projects/branches/new/index.js\")).then(callDefault).catch(fail);\n break;\n case 'projects:branches:create':\n __webpack_require__.e/* import() */(\"new_branch_form.js-f2ed03\"/* duplicate */).then(__webpack_require__.bind(null, \"./pages/projects/branches/new/index.js\")).then(callDefault).catch(fail);\n break;\n case 'projects:branches:index':\n __webpack_require__.e/* import() */(\"ajax_loading_spinner.js-b0a51e\").then(__webpack_require__.bind(null, \"./pages/projects/branches/index/index.js\")).then(callDefault).catch(fail);\n break;\n case 'projects:issues:new':\n __webpack_require__.e/* import() */(\"template_selector.js-894bcb\").then(__webpack_require__.bind(null, \"./pages/projects/issues/new/index.js\")).then(callDefault).catch(fail);\n shortcut_handler = true;\n break;\n case 'projects:issues:edit':\n __webpack_require__.e/* import() */(\"template_selector.js-36c179\").then(__webpack_require__.bind(null, \"./pages/projects/issues/edit/index.js\")).then(callDefault).catch(fail);\n shortcut_handler = true;\n break;\n case 'projects:merge_requests:creations:new':\n __webpack_require__.e/* import() */(\"compare.js-af88d2\").then(__webpack_require__.bind(null, \"./pages/projects/merge_requests/creations/new/index.js\")).then(callDefault).catch(fail);\n case 'projects:merge_requests:creations:diffs':\n __webpack_require__.e/* import() */(\"template_selector.js-95d92f\").then(__webpack_require__.bind(null, \"./pages/projects/merge_requests/creations/diffs/index.js\")).then(callDefault).catch(fail);\n shortcut_handler = true;\n break;\n case 'projects:merge_requests:edit':\n __webpack_require__.e/* import() */(\"template_selector.js-358e6b\").then(__webpack_require__.bind(null, \"./pages/projects/merge_requests/edit/index.js\")).then(callDefault).catch(fail);\n shortcut_handler = true;\n break;\n case 'projects:tags:new':\n __webpack_require__.e/* import() */(\"projects__tags__new-6a60df\").then(__webpack_require__.bind(null, \"./pages/projects/tags/new/index.js\")).then(callDefault).catch(fail);\n break;\n case 'projects:snippets:show':\n __webpack_require__.e/* import() */(\"index.js-6f683b\").then(__webpack_require__.bind(null, \"./pages/projects/snippets/show/index.js\")).then(callDefault).catch(fail);\n break;\n case 'projects:snippets:new':\n case 'projects:snippets:create':\n __webpack_require__.e/* import() */(\"projects__init_form.js-12b1ac\").then(__webpack_require__.bind(null, \"./pages/projects/snippets/new/index.js\")).then(callDefault).catch(fail);\n break;\n case 'projects:snippets:edit':\n case 'projects:snippets:update':\n __webpack_require__.e/* import() */(\"projects__init_form.js-1432bf\").then(__webpack_require__.bind(null, \"./pages/projects/snippets/edit/index.js\")).then(callDefault).catch(fail);\n break;\n case 'snippets:new':\n __webpack_require__.e/* import() */(\"snippets__form.js-83b226\").then(__webpack_require__.bind(null, \"./pages/snippets/new/index.js\")).then(callDefault).catch(fail);\n break;\n case 'snippets:edit':\n __webpack_require__.e/* import() */(\"snippets__edit-ae6661\").then(__webpack_require__.bind(null, \"./pages/snippets/edit/index.js\")).then(callDefault).catch(fail);\n break;\n case 'snippets:create':\n __webpack_require__.e/* import() */(\"snippets__form.js-83b226\"/* duplicate */).then(__webpack_require__.bind(null, \"./pages/snippets/new/index.js\")).then(callDefault).catch(fail);\n break;\n case 'snippets:update':\n __webpack_require__.e/* import() */(\"snippets__edit-ae6661\"/* duplicate */).then(__webpack_require__.bind(null, \"./pages/snippets/edit/index.js\")).then(callDefault).catch(fail);\n break;\n case 'projects:releases:edit':\n __webpack_require__.e/* import() */(\"projects__init_form.js-324eea\").then(__webpack_require__.bind(null, \"./pages/projects/releases/edit/index.js\")).then(callDefault).catch(fail);\n break;\n case 'projects:merge_requests:show':\n new __WEBPACK_IMPORTED_MODULE_10__diff__[\"a\" /* default */]();\n new __WEBPACK_IMPORTED_MODULE_3__zen_mode__[\"a\" /* default */]();\n\n Object(__WEBPACK_IMPORTED_MODULE_5__init_issuable_sidebar__[\"a\" /* default */])();\n Object(__WEBPACK_IMPORTED_MODULE_4__init_notes__[\"a\" /* default */])();\n\n var mrShowNode = document.querySelector('.merge-request');\n window.mergeRequest = new __WEBPACK_IMPORTED_MODULE_0__merge_request__[\"a\" /* default */]({\n action: mrShowNode.dataset.mrAction\n });\n shortcut_handler = new __WEBPACK_IMPORTED_MODULE_9__shortcuts_issuable__[\"a\" /* default */](true);\n break;\n case 'dashboard:activity':\n __webpack_require__.e/* import() */(\"activities.js-c713b6\").then(__webpack_require__.bind(null, \"./pages/dashboard/activity/index.js\")).then(callDefault).catch(fail);\n break;\n case 'projects:commit:show':\n __webpack_require__.e/* import() */(\"commit_merge_requests.js-fb0352\").then(__webpack_require__.bind(null, \"./pages/projects/commit/show/index.js\")).then(callDefault).catch(fail);\n shortcut_handler = true;\n break;\n case 'projects:commit:pipelines':\n __webpack_require__.e/* import() */(\"mini_pipeline_graph_dropdown.js-ea0fc7\").then(__webpack_require__.bind(null, \"./pages/projects/commit/pipelines/index.js\")).then(callDefault).catch(fail);\n break;\n case 'projects:activity':\n __webpack_require__.e/* import() */(\"activities.js-d97f77\").then(__webpack_require__.bind(null, \"./pages/projects/activity/index.js\")).then(callDefault).catch(fail);\n shortcut_handler = true;\n break;\n case 'projects:commits:show':\n __webpack_require__.e/* import() */(\"commits.js-cccfe7\").then(__webpack_require__.bind(null, \"./pages/projects/commits/show/index.js\")).then(callDefault).catch(fail);\n shortcut_handler = true;\n break;\n case 'projects:show':\n shortcut_handler = true;\n break;\n case 'projects:edit':\n __webpack_require__.e/* import() */(\"projects__edit-81f12c\").then(__webpack_require__.bind(null, \"./pages/projects/edit/index.js\")).then(callDefault).catch(fail);\n break;\n case 'projects:imports:show':\n __webpack_require__.e/* import() */(\"project_import.js-de8cb7\").then(__webpack_require__.bind(null, \"./pages/projects/imports/show/index.js\")).then(callDefault).catch(fail);\n break;\n case 'projects:pipelines:new':\n case 'projects:pipelines:create':\n __webpack_require__.e/* import() */(\"new_branch_form.js-fd64db\").then(__webpack_require__.bind(null, \"./pages/projects/pipelines/new/index.js\")).then(callDefault).catch(fail);\n break;\n case 'projects:pipelines:builds':\n case 'projects:pipelines:failures':\n case 'projects:pipelines:show':\n __webpack_require__.e/* import() */(\"bootstrap_linked_tabs.js-e85d5d\").then(__webpack_require__.bind(null, \"./pages/projects/pipelines/builds/index.js\")).then(callDefault).catch(fail);\n break;\n case 'groups:activity':\n __webpack_require__.e/* import() */(\"activities.js-ff09fc\").then(__webpack_require__.bind(null, \"./pages/groups/activity/index.js\")).then(callDefault).catch(fail);\n break;\n case 'groups:show':\n shortcut_handler = true;\n break;\n case 'groups:group_members:index':\n __webpack_require__.e/* import() */(\"member_expiration_date.js-601da8\").then(__webpack_require__.bind(null, \"./pages/groups/group_members/index/index.js\")).then(callDefault).catch(fail);\n break;\n case 'projects:project_members:index':\n __webpack_require__.e/* import() */(\"groups_select.js-e93bae\").then(__webpack_require__.bind(null, \"./pages/projects/project_members/index.js\")).then(callDefault).catch(fail);\n break;\n case 'groups:create':\n case 'groups:new':\n __webpack_require__.e/* import() */(\"group.js-12561d\").then(__webpack_require__.bind(null, \"./pages/groups/new/index.js\")).then(callDefault).catch(fail);\n break;\n case 'groups:edit':\n __webpack_require__.e/* import() */(\"group_avatar.js-dbf2fa\").then(__webpack_require__.bind(null, \"./pages/groups/edit/index.js\")).then(callDefault).catch(fail);\n break;\n case 'admin:groups:create':\n case 'admin:groups:new':\n __webpack_require__.e/* import() */(\"group.js-4147ed\").then(__webpack_require__.bind(null, \"./pages/admin/groups/new/index.js\")).then(callDefault).catch(fail);\n break;\n case 'admin:groups:edit':\n __webpack_require__.e/* import() */(\"group_avatar.js-8eb307\").then(__webpack_require__.bind(null, \"./pages/admin/groups/edit/index.js\")).then(callDefault).catch(fail);\n break;\n case 'projects:tree:show':\n __webpack_require__.e/* import() */(\"index.js-90ab02\").then(__webpack_require__.bind(null, \"./pages/projects/tree/show/index.js\")).then(callDefault).catch(fail);\n shortcut_handler = true;\n break;\n case 'projects:find_file:show':\n __webpack_require__.e/* import() */(\"projects__find_file__show-ca9c2a\").then(__webpack_require__.bind(null, \"./pages/projects/find_file/show/index.js\")).then(callDefault).catch(fail);\n shortcut_handler = true;\n break;\n case 'projects:blob:show':\n __webpack_require__.e/* import() */(\"blob_line_permalink_updater.js-f77812\").then(__webpack_require__.bind(null, \"./pages/projects/blob/show/index.js\")).then(callDefault).catch(fail);\n shortcut_handler = true;\n break;\n case 'projects:blame:show':\n __webpack_require__.e/* import() */(\"blob_line_permalink_updater.js-042870\").then(__webpack_require__.bind(null, \"./pages/projects/blame/show/index.js\")).then(callDefault).catch(fail);\n shortcut_handler = true;\n break;\n case 'groups:labels:new':\n __webpack_require__.e/* import() */(\"labels.js-5b23ce\").then(__webpack_require__.bind(null, \"./pages/groups/labels/new/index.js\")).then(callDefault).catch(fail);\n break;\n case 'groups:labels:edit':\n __webpack_require__.e/* import() */(\"labels.js-e85950\").then(__webpack_require__.bind(null, \"./pages/groups/labels/edit/index.js\")).then(callDefault).catch(fail);\n break;\n case 'projects:labels:new':\n __webpack_require__.e/* import() */(\"labels.js-18ed0e\").then(__webpack_require__.bind(null, \"./pages/projects/labels/new/index.js\")).then(callDefault).catch(fail);\n break;\n case 'projects:labels:edit':\n __webpack_require__.e/* import() */(\"labels.js-adf66e\").then(__webpack_require__.bind(null, \"./pages/projects/labels/edit/index.js\")).then(callDefault).catch(fail);\n break;\n case 'groups:labels:index':\n __webpack_require__.e/* import() */(\"group_label_subscription.js-d81390\").then(__webpack_require__.bind(null, \"./pages/groups/labels/index/index.js\")).then(callDefault).catch(fail);\n break;\n case 'projects:labels:index':\n __webpack_require__.e/* import() */(\"group_label_subscription.js-01d44f\").then(__webpack_require__.bind(null, \"./pages/projects/labels/index/index.js\")).then(callDefault).catch(fail);\n break;\n case 'projects:network:show':\n // Ensure we don't create a particular shortcut handler here. This is\n // already created, where the network graph is created.\n shortcut_handler = true;\n break;\n case 'projects:forks:new':\n __webpack_require__.e/* import() */(\"projects__forks__new-73b3f1\").then(__webpack_require__.bind(null, \"./pages/projects/forks/new/index.js\")).then(callDefault).catch(fail);\n break;\n case 'projects:artifacts:browse':\n __webpack_require__.e/* import() */(\"build_artifacts.js-b742f2\").then(__webpack_require__.bind(null, \"./pages/projects/artifacts/browse/index.js\")).then(callDefault).catch(fail);\n shortcut_handler = true;\n break;\n case 'projects:artifacts:file':\n __webpack_require__.e/* import() */(\"index.js-218100\").then(__webpack_require__.bind(null, \"./pages/projects/artifacts/file/index.js\")).then(callDefault).catch(fail);\n shortcut_handler = true;\n break;\n case 'help:index':\n __webpack_require__.e/* import() */(\"help-89b6b3\").then(__webpack_require__.bind(null, \"./pages/help/index.js\")).then(callDefault).catch(fail);\n break;\n case 'search:show':\n __webpack_require__.e/* import() */(\"search__show-fef815\").then(__webpack_require__.bind(null, \"./pages/search/show/index.js\")).then(callDefault).catch(fail);\n break;\n case 'projects:settings:repository:show':\n __webpack_require__.e/* import() */(\"projects__settings__repository__show-fdbe6d\").then(__webpack_require__.bind(null, \"./pages/projects/settings/repository/show/index.js\")).then(callDefault).catch(fail);\n break;\n case 'projects:settings:ci_cd:show':\n __webpack_require__.e/* import() */(\"secret_values.js-195ef4\").then(__webpack_require__.bind(null, \"./pages/projects/settings/ci_cd/show/index.js\")).then(callDefault).catch(fail);\n break;\n case 'groups:settings:ci_cd:show':\n __webpack_require__.e/* import() */(\"secret_values.js-df7dc0\").then(__webpack_require__.bind(null, \"./pages/groups/settings/ci_cd/show/index.js\")).then(callDefault).catch(fail);\n break;\n case 'ci:lints:create':\n case 'ci:lints:show':\n __webpack_require__.e/* import() */(\"ci__lints__ci_lint_editor.js-4b7659\").then(__webpack_require__.bind(null, \"./pages/ci/lints/index.js\")).then(callDefault).catch(fail);\n break;\n case 'users:show':\n __webpack_require__.e/* import() */(\"users__show-059dce\").then(__webpack_require__.bind(null, \"./pages/users/show/index.js\")).then(callDefault).catch(fail);\n break;\n case 'admin:conversational_development_index:show':\n __webpack_require__.e/* import() */(\"admin__conversational_development_index__show-c382c0\").then(__webpack_require__.bind(null, \"./pages/admin/conversational_development_index/show/index.js\")).then(callDefault).catch(fail);\n break;\n case 'snippets:show':\n __webpack_require__.e/* import() */(\"index.js-efbbb8\").then(__webpack_require__.bind(null, \"./pages/snippets/show/index.js\")).then(callDefault).catch(fail);\n break;\n case 'import:fogbugz:new_user_map':\n __webpack_require__.e/* import() */(\"import__fogbugz__new_user_map-96fad2\").then(__webpack_require__.bind(null, \"./pages/import/fogbugz/new_user_map/index.js\")).then(callDefault).catch(fail);\n break;\n case 'profiles:personal_access_tokens:index':\n __webpack_require__.e/* import() */(\"profiles__personal_access_tokens-96b51f\").then(__webpack_require__.bind(null, \"./pages/profiles/personal_access_tokens/index.js\")).then(callDefault).catch(fail);\n break;\n case 'admin:impersonation_tokens:index':\n __webpack_require__.e/* import() */(\"admin__impersonation_tokens-e5ebf8\").then(__webpack_require__.bind(null, \"./pages/admin/impersonation_tokens/index.js\")).then(callDefault).catch(fail);\n break;\n case 'projects:clusters:show':\n case 'projects:clusters:update':\n case 'projects:clusters:destroy':\n __webpack_require__.e/* import() */(\"event_hub.js-63dd04\").then(__webpack_require__.bind(null, \"./pages/projects/clusters/show/index.js\")).then(callDefault).catch(fail);\n break;\n case 'projects:clusters:index':\n __webpack_require__.e/* import() */(\"clusters_index.js-b18cdb\").then(__webpack_require__.bind(null, \"./pages/projects/clusters/index/index.js\")).then(callDefault).catch(fail);\n break;\n case 'dashboard:groups:index':\n __webpack_require__.e/* import() */(\"filterable_list.js-9fb8bf\").then(__webpack_require__.bind(null, \"./pages/dashboard/groups/index/index.js\")).then(callDefault).catch(fail);\n break;\n }\n switch (path[0]) {\n case 'sessions':\n __webpack_require__.e/* import() */(\"sessions-55b6a2\").then(__webpack_require__.bind(null, \"./pages/sessions/index.js\")).then(callDefault).catch(fail);\n break;\n case 'omniauth_callbacks':\n __webpack_require__.e/* import() */(\"omniauth_callbacks-08e7d9\").then(__webpack_require__.bind(null, \"./pages/omniauth_callbacks/index.js\")).then(callDefault).catch(fail);\n break;\n case 'admin':\n __webpack_require__.e/* import() */(\"admin__admin.js-7ae8c5\").then(__webpack_require__.bind(null, \"./pages/admin/index.js\")).then(callDefault).catch(fail);\n switch (path[1]) {\n case 'broadcast_messages':\n __webpack_require__.e/* import() */(\"admin__broadcast_messages__broadcast_message.js-7f870d\").then(__webpack_require__.bind(null, \"./pages/admin/broadcast_messages/index.js\")).then(callDefault).catch(fail);\n break;\n case 'cohorts':\n __webpack_require__.e/* import() */(\"admin__cohorts__usage_ping.js-0be64a\").then(__webpack_require__.bind(null, \"./pages/admin/cohorts/index.js\")).then(callDefault).catch(fail);\n break;\n case 'groups':\n switch (path[2]) {\n case 'show':\n __webpack_require__.e/* import() */(\"admin__groups__show-22eadf\").then(__webpack_require__.bind(null, \"./pages/admin/groups/show/index.js\")).then(callDefault).catch(fail);\n break;\n }\n break;\n case 'projects':\n __webpack_require__.e/* import() */(\"filterable_list.js-d09b39\").then(__webpack_require__.bind(null, \"./pages/admin/projects/index.js\")).then(callDefault).catch(fail);\n break;\n case 'labels':\n switch (path[2]) {\n case 'new':\n __webpack_require__.e/* import() */(\"labels.js-c7bb4a\").then(__webpack_require__.bind(null, \"./pages/admin/labels/new/index.js\")).then(callDefault).catch(fail);\n break;\n case 'edit':\n __webpack_require__.e/* import() */(\"labels.js-7f9f8a\").then(__webpack_require__.bind(null, \"./pages/admin/labels/edit/index.js\")).then(callDefault).catch(fail);\n break;\n }\n case 'abuse_reports':\n __webpack_require__.e/* import() */(\"admin__abuse_reports__abuse_reports.js-19643f\").then(__webpack_require__.bind(null, \"./pages/admin/abuse_reports/index.js\")).then(callDefault).catch(fail);\n break;\n }\n break;\n case 'profiles':\n __webpack_require__.e/* import() */(\"notifications_dropdown.js-a36362\").then(__webpack_require__.bind(null, \"./pages/profiles/index/index.js\")).then(callDefault).catch(fail);\n break;\n case 'projects':\n __webpack_require__.e/* import() */(\"projects-03eda0\").then(__webpack_require__.bind(null, \"./pages/projects/index.js\")).then(callDefault).catch(fail);\n shortcut_handler = true;\n switch (path[1]) {\n case 'compare':\n __webpack_require__.e/* import() */(\"compare_autocomplete.js-d5e234\").then(__webpack_require__.bind(null, \"./pages/projects/compare/index.js\")).then(callDefault).catch(fail);\n break;\n case 'create':\n case 'new':\n __webpack_require__.e/* import() */(\"projects__new-b3e663\").then(__webpack_require__.bind(null, \"./pages/projects/new/index.js\")).then(callDefault).catch(fail);\n break;\n case 'wikis':\n __webpack_require__.e/* import() */(\"projects__wikis-4eb413\").then(__webpack_require__.bind(null, \"./pages/projects/wikis/index.js\")).then(callDefault).catch(fail);\n shortcut_handler = true;\n break;\n }\n break;\n }\n // If we haven't installed a custom shortcut handler, install the default one\n if (!shortcut_handler) {\n new __WEBPACK_IMPORTED_MODULE_8__shortcuts__[\"a\" /* default */]();\n }\n\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(fail);\n }\n };\n\n Dispatcher.prototype.initSearch = function () {\n // Only when search form is present\n if ($('.search').length) {\n return new __WEBPACK_IMPORTED_MODULE_11__search_autocomplete__[\"a\" /* default */]();\n }\n };\n\n Dispatcher.prototype.initFieldErrors = function () {\n $('.gl-show-field-errors').each(function (i, form) {\n new __WEBPACK_IMPORTED_MODULE_7__gl_field_errors__[\"a\" /* default */](form);\n });\n };\n\n return Dispatcher;\n }();\n})();\n\nfunction initDispatcher() {\n return new Dispatcher();\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/***/ \"./droplab/plugins/input_setter.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* eslint-disable */\n\nvar InputSetter = {\n init: function init(hook) {\n this.hook = hook;\n this.destroyed = false;\n this.config = hook.config.InputSetter || (this.hook.config.InputSetter = {});\n\n this.eventWrapper = {};\n\n this.addEvents();\n },\n addEvents: function addEvents() {\n this.eventWrapper.setInputs = this.setInputs.bind(this);\n this.hook.list.list.addEventListener('click.dl', this.eventWrapper.setInputs);\n },\n removeEvents: function removeEvents() {\n this.hook.list.list.removeEventListener('click.dl', this.eventWrapper.setInputs);\n },\n setInputs: function setInputs(e) {\n var _this = this;\n\n if (this.destroyed) return;\n\n var selectedItem = e.detail.selected;\n\n if (!Array.isArray(this.config)) this.config = [this.config];\n\n this.config.forEach(function (config) {\n return _this.setInput(config, selectedItem);\n });\n },\n setInput: function setInput(config, selectedItem) {\n var input = config.input || this.hook.trigger;\n var newValue = selectedItem.getAttribute(config.valueAttribute);\n var inputAttribute = config.inputAttribute;\n\n if (input.hasAttribute(inputAttribute)) return input.setAttribute(inputAttribute, newValue);\n if (input.tagName === 'INPUT') return input.value = newValue;\n return input.textContent = newValue;\n },\n destroy: function destroy() {\n this.destroyed = true;\n\n this.removeEvents();\n }\n};\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (InputSetter);\n\n/***/ }),\n\n/***/ \"./dropzone_input.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {/* harmony export (immutable) */ __webpack_exports__[\"a\"] = dropzoneInput;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_dropzone__ = __webpack_require__(\"../../../node_modules/dropzone/dist/dropzone.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_dropzone___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_dropzone__);\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__preview_markdown__ = __webpack_require__(\"./preview_markdown.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__lib_utils_csrf__ = __webpack_require__(\"./lib/utils/csrf.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__lib_utils_axios_utils__ = __webpack_require__(\"./lib/utils/axios_utils.js\");\n\n\n\n\n\n\n__WEBPACK_IMPORTED_MODULE_0_dropzone___default.a.autoDiscover = false;\n\nfunction dropzoneInput(form) {\n var divHover = '
    ';\n var iconPaperclip = '';\n var $attachButton = form.find('.button-attach-file');\n var $attachingFileMessage = form.find('.attaching-file-message');\n var $cancelButton = form.find('.button-cancel-uploading-files');\n var $retryLink = form.find('.retry-uploading-link');\n var $uploadProgress = form.find('.uploading-progress');\n var $uploadingErrorContainer = form.find('.uploading-error-container');\n var $uploadingErrorMessage = form.find('.uploading-error-message');\n var $uploadingProgressContainer = form.find('.uploading-progress-container');\n var uploadsPath = window.uploads_path || null;\n var maxFileSize = gon.max_file_size || 10;\n var formTextarea = form.find('.js-gfm-input');\n var handlePaste = void 0;\n var pasteText = void 0;\n var addFileToForm = void 0;\n var updateAttachingMessage = void 0;\n var isImage = void 0;\n var getFilename = void 0;\n var uploadFile = void 0;\n\n formTextarea.wrap('
    ');\n formTextarea.on('paste', function (event) {\n return handlePaste(event);\n });\n\n // Add dropzone area to the form.\n var $mdArea = formTextarea.closest('.md-area');\n form.setupMarkdownPreview();\n var $formDropzone = form.find('.div-dropzone');\n $formDropzone.parent().addClass('div-dropzone-wrapper');\n $formDropzone.append(divHover);\n $formDropzone.find('.div-dropzone-hover').append(iconPaperclip);\n\n if (!uploadsPath) {\n $formDropzone.addClass('js-invalid-dropzone');\n return;\n }\n\n var dropzone = $formDropzone.dropzone({\n url: uploadsPath,\n dictDefaultMessage: '',\n clickable: true,\n paramName: 'file',\n maxFilesize: maxFileSize,\n uploadMultiple: false,\n headers: __WEBPACK_IMPORTED_MODULE_3__lib_utils_csrf__[\"a\" /* default */].headers,\n previewContainer: false,\n processing: function processing() {\n return $('.div-dropzone-alert').alert('close');\n },\n dragover: function dragover() {\n $mdArea.addClass('is-dropzone-hover');\n form.find('.div-dropzone-hover').css('opacity', 0.7);\n },\n dragleave: function dragleave() {\n $mdArea.removeClass('is-dropzone-hover');\n form.find('.div-dropzone-hover').css('opacity', 0);\n },\n drop: function drop() {\n $mdArea.removeClass('is-dropzone-hover');\n form.find('.div-dropzone-hover').css('opacity', 0);\n formTextarea.focus();\n },\n success: function success(header, response) {\n var processingFileCount = this.getQueuedFiles().length + this.getUploadingFiles().length;\n var shouldPad = processingFileCount >= 1;\n\n pasteText(response.link.markdown, shouldPad);\n // Show 'Attach a file' link only when all files have been uploaded.\n if (!processingFileCount) $attachButton.removeClass('hide');\n addFileToForm(response.link.url);\n },\n\n error: function error(file) {\n var errorMessage = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'Attaching the file failed.';\n var xhr = arguments[2];\n\n // If 'error' event is fired by dropzone, the second parameter is error message.\n // If the 'errorMessage' parameter is empty, the default error message is set.\n // If the 'error' event is fired by backend (xhr) error response, the third parameter is\n // xhr object (xhr.responseText is error message).\n // On error we hide the 'Attach' and 'Cancel' buttons\n // and show an error.\n\n // If there's xhr error message, let's show it instead of dropzone's one.\n var message = xhr ? xhr.responseText : errorMessage;\n\n $uploadingErrorContainer.removeClass('hide');\n $uploadingErrorMessage.html(message);\n $attachButton.addClass('hide');\n $cancelButton.addClass('hide');\n },\n totaluploadprogress: function totaluploadprogress(totalUploadProgress) {\n updateAttachingMessage(this.files, $attachingFileMessage);\n $uploadProgress.text(Math.round(totalUploadProgress) + '%');\n },\n\n sending: function sending() {\n // DOM elements already exist.\n // Instead of dynamically generating them,\n // we just either hide or show them.\n $attachButton.addClass('hide');\n $uploadingErrorContainer.addClass('hide');\n $uploadingProgressContainer.removeClass('hide');\n $cancelButton.removeClass('hide');\n },\n removedfile: function removedfile() {\n $attachButton.removeClass('hide');\n $cancelButton.addClass('hide');\n $uploadingProgressContainer.addClass('hide');\n $uploadingErrorContainer.addClass('hide');\n },\n queuecomplete: function queuecomplete() {\n $('.dz-preview').remove();\n $('.markdown-area').trigger('input');\n\n $uploadingProgressContainer.addClass('hide');\n $cancelButton.addClass('hide');\n }\n });\n\n var child = $(dropzone[0]).children('textarea');\n\n // removeAllFiles(true) stops uploading files (if any)\n // and remove them from dropzone files queue.\n $cancelButton.on('click', function (e) {\n e.preventDefault();\n e.stopPropagation();\n __WEBPACK_IMPORTED_MODULE_0_dropzone___default.a.forElement($formDropzone.get(0)).removeAllFiles(true);\n });\n\n // If 'error' event is fired, we store a failed files,\n // clear dropzone files queue, change status of failed files to undefined,\n // and add that files to the dropzone files queue again.\n // addFile() adds file to dropzone files queue and upload it.\n $retryLink.on('click', function (e) {\n var dropzoneInstance = __WEBPACK_IMPORTED_MODULE_0_dropzone___default.a.forElement(e.target.closest('.js-main-target-form').querySelector('.div-dropzone'));\n var failedFiles = dropzoneInstance.files;\n\n e.preventDefault();\n\n // 'true' parameter of removeAllFiles() cancels\n // uploading of files that are being uploaded at the moment.\n dropzoneInstance.removeAllFiles(true);\n\n failedFiles.map(function (failedFile) {\n var file = failedFile;\n\n if (file.status === __WEBPACK_IMPORTED_MODULE_0_dropzone___default.a.ERROR) {\n file.status = undefined;\n file.accepted = undefined;\n }\n\n return dropzoneInstance.addFile(file);\n });\n });\n // eslint-disable-next-line consistent-return\n handlePaste = function handlePaste(event) {\n var pasteEvent = event.originalEvent;\n if (pasteEvent.clipboardData && pasteEvent.clipboardData.items) {\n var image = isImage(pasteEvent);\n if (image) {\n event.preventDefault();\n var filename = getFilename(pasteEvent) || 'image.png';\n var text = '{{' + filename + '}}';\n pasteText(text);\n return uploadFile(image.getAsFile(), filename);\n }\n }\n };\n\n isImage = function isImage(data) {\n var i = 0;\n while (i < data.clipboardData.items.length) {\n var item = data.clipboardData.items[i];\n if (item.type.indexOf('image') !== -1) {\n return item;\n }\n i += 1;\n }\n return false;\n };\n\n pasteText = function pasteText(text, shouldPad) {\n var formattedText = text;\n if (shouldPad) {\n formattedText += '\\n\\n';\n }\n var textarea = child.get(0);\n var caretStart = textarea.selectionStart;\n var caretEnd = textarea.selectionEnd;\n var textEnd = $(child).val().length;\n var beforeSelection = $(child).val().substring(0, caretStart);\n var afterSelection = $(child).val().substring(caretEnd, textEnd);\n $(child).val(beforeSelection + formattedText + afterSelection);\n textarea.setSelectionRange(caretStart + formattedText.length, caretEnd + formattedText.length);\n textarea.style.height = textarea.scrollHeight + 'px';\n formTextarea.get(0).dispatchEvent(new Event('input'));\n return formTextarea.trigger('input');\n };\n\n addFileToForm = function addFileToForm(path) {\n $(form).append('');\n };\n\n getFilename = function getFilename(e) {\n var value = void 0;\n if (window.clipboardData && window.clipboardData.getData) {\n value = window.clipboardData.getData('Text');\n } else if (e.clipboardData && e.clipboardData.getData) {\n value = e.clipboardData.getData('text/plain');\n }\n value = value.split('\\r');\n return value[0];\n };\n\n var showSpinner = function showSpinner() {\n return $uploadingProgressContainer.removeClass('hide');\n };\n\n var closeSpinner = function closeSpinner() {\n return $uploadingProgressContainer.addClass('hide');\n };\n\n var showError = function showError(message) {\n $uploadingErrorContainer.removeClass('hide');\n $uploadingErrorMessage.html(message);\n };\n\n var closeAlertMessage = function closeAlertMessage() {\n return form.find('.div-dropzone-alert').alert('close');\n };\n\n var insertToTextArea = function insertToTextArea(filename, url) {\n var $child = $(child);\n $child.val(function (index, val) {\n return val.replace('{{' + filename + '}}', url);\n });\n\n $child.trigger('change');\n };\n\n uploadFile = function uploadFile(item, filename) {\n var formData = new FormData();\n formData.append('file', item, filename);\n\n showSpinner();\n closeAlertMessage();\n\n __WEBPACK_IMPORTED_MODULE_4__lib_utils_axios_utils__[\"a\" /* default */].post(uploadsPath, formData).then(function (_ref) {\n var data = _ref.data;\n\n var md = data.link.markdown;\n\n insertToTextArea(filename, md);\n closeSpinner();\n }).catch(function (e) {\n showError(e.response.data.message);\n closeSpinner();\n });\n };\n\n updateAttachingMessage = function updateAttachingMessage(files, messageContainer) {\n var attachingMessage = void 0;\n var filesCount = files.filter(function (file) {\n return file.status === 'uploading' || file.status === 'queued';\n }).length;\n\n // Dinamycally change uploading files text depending on files number in\n // dropzone files queue.\n if (filesCount > 1) {\n attachingMessage = 'Attaching ' + filesCount + ' files -';\n } else {\n attachingMessage = 'Attaching a file -';\n }\n\n messageContainer.text(attachingMessage);\n };\n\n form.find('.markdown-selector').click(function onMarkdownClick(e) {\n e.preventDefault();\n $(this).closest('.gfm-form').find('.div-dropzone').click();\n formTextarea.focus();\n });\n}\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\n\n/***/ }),\n\n/***/ \"./due_date_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_pikaday__ = __webpack_require__(\"../../../node_modules/pikaday/pikaday.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_pikaday___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_pikaday__);\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_datefix__ = __webpack_require__(\"./lib/utils/datefix.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/* global dateFormat */\n\n\n\n\n\nvar DueDateSelect = function () {\n function DueDateSelect() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n $dropdown = _ref.$dropdown,\n $loading = _ref.$loading;\n\n _classCallCheck(this, DueDateSelect);\n\n var $dropdownParent = $dropdown.closest('.dropdown');\n var $block = $dropdown.closest('.block');\n this.$loading = $loading;\n this.$dropdown = $dropdown;\n this.$dropdownParent = $dropdownParent;\n this.$datePicker = $dropdownParent.find('.js-due-date-calendar');\n this.$block = $block;\n this.$selectbox = $dropdown.closest('.selectbox');\n this.$value = $block.find('.value');\n this.$valueContent = $block.find('.value-content');\n this.$sidebarValue = $('.js-due-date-sidebar-value', $block);\n this.fieldName = $dropdown.data('field-name');\n this.abilityName = $dropdown.data('ability-name');\n this.issueUpdateURL = $dropdown.data('issue-update');\n\n this.rawSelectedDate = null;\n this.displayedDate = null;\n this.datePayload = null;\n\n this.initGlDropdown();\n this.initRemoveDueDate();\n this.initDatePicker();\n }\n\n _createClass(DueDateSelect, [{\n key: 'initGlDropdown',\n value: function initGlDropdown() {\n var _this = this;\n\n this.$dropdown.glDropdown({\n opened: function opened() {\n var calendar = _this.$datePicker.data('pikaday');\n calendar.show();\n },\n hidden: function hidden() {\n _this.$selectbox.hide();\n _this.$value.css('display', '');\n }\n });\n }\n }, {\n key: 'initDatePicker',\n value: function initDatePicker() {\n var _this2 = this;\n\n var $dueDateInput = $('input[name=\\'' + this.fieldName + '\\']');\n var calendar = new __WEBPACK_IMPORTED_MODULE_0_pikaday___default.a({\n field: $dueDateInput.get(0),\n theme: 'gitlab-theme',\n format: 'yyyy-mm-dd',\n parse: function parse(dateString) {\n return Object(__WEBPACK_IMPORTED_MODULE_2__lib_utils_datefix__[\"a\" /* parsePikadayDate */])(dateString);\n },\n toString: function toString(date) {\n return Object(__WEBPACK_IMPORTED_MODULE_2__lib_utils_datefix__[\"b\" /* pikadayToString */])(date);\n },\n onSelect: function onSelect(dateText) {\n $dueDateInput.val(calendar.toString(dateText));\n\n if (_this2.$dropdown.hasClass('js-issue-boards-due-date')) {\n gl.issueBoards.BoardsStore.detail.issue.dueDate = $dueDateInput.val();\n _this2.updateIssueBoardIssue();\n } else {\n _this2.saveDueDate(true);\n }\n }\n });\n\n calendar.setDate(Object(__WEBPACK_IMPORTED_MODULE_2__lib_utils_datefix__[\"a\" /* parsePikadayDate */])($dueDateInput.val()));\n this.$datePicker.append(calendar.el);\n this.$datePicker.data('pikaday', calendar);\n }\n }, {\n key: 'initRemoveDueDate',\n value: function initRemoveDueDate() {\n var _this3 = this;\n\n this.$block.on('click', '.js-remove-due-date', function (e) {\n var calendar = _this3.$datePicker.data('pikaday');\n e.preventDefault();\n\n calendar.setDate(null);\n\n if (_this3.$dropdown.hasClass('js-issue-boards-due-date')) {\n gl.issueBoards.BoardsStore.detail.issue.dueDate = '';\n _this3.updateIssueBoardIssue();\n } else {\n $('input[name=\\'' + _this3.fieldName + '\\']').val('');\n _this3.saveDueDate(false);\n }\n });\n }\n }, {\n key: 'saveDueDate',\n value: function saveDueDate(isDropdown) {\n this.parseSelectedDate();\n this.prepSelectedDate();\n this.submitSelectedDate(isDropdown);\n }\n }, {\n key: 'parseSelectedDate',\n value: function parseSelectedDate() {\n this.rawSelectedDate = $('input[name=\\'' + this.fieldName + '\\']').val();\n\n if (this.rawSelectedDate.length) {\n // Construct Date object manually to avoid buggy dateString support within Date constructor\n var dateArray = this.rawSelectedDate.split('-').map(function (v) {\n return parseInt(v, 10);\n });\n var dateObj = new Date(dateArray[0], dateArray[1] - 1, dateArray[2]);\n this.displayedDate = dateFormat(dateObj, 'mmm d, yyyy');\n } else {\n this.displayedDate = 'No due date';\n }\n }\n }, {\n key: 'prepSelectedDate',\n value: function prepSelectedDate() {\n var datePayload = {};\n datePayload[this.abilityName] = {};\n datePayload[this.abilityName].due_date = this.rawSelectedDate;\n this.datePayload = datePayload;\n }\n }, {\n key: 'updateIssueBoardIssue',\n value: function updateIssueBoardIssue() {\n var _this4 = this;\n\n this.$loading.fadeIn();\n this.$dropdown.trigger('loading.gl.dropdown');\n this.$selectbox.hide();\n this.$value.css('display', '');\n var fadeOutLoader = function fadeOutLoader() {\n _this4.$loading.fadeOut();\n };\n\n gl.issueBoards.BoardsStore.detail.issue.update(this.$dropdown.attr('data-issue-update')).then(fadeOutLoader).catch(fadeOutLoader);\n }\n }, {\n key: 'submitSelectedDate',\n value: function submitSelectedDate(isDropdown) {\n var _this5 = this;\n\n var selectedDateValue = this.datePayload[this.abilityName].due_date;\n var displayedDateStyle = this.displayedDate !== 'No due date' ? 'bold' : 'no-value';\n\n this.$loading.removeClass('hidden').fadeIn();\n\n if (isDropdown) {\n this.$dropdown.trigger('loading.gl.dropdown');\n this.$selectbox.hide();\n }\n\n this.$value.css('display', '');\n this.$valueContent.html('' + this.displayedDate + '');\n this.$sidebarValue.html(this.displayedDate);\n\n $('.js-remove-due-date-holder').toggleClass('hidden', selectedDateValue.length);\n\n return __WEBPACK_IMPORTED_MODULE_1__lib_utils_axios_utils__[\"a\" /* default */].put(this.issueUpdateURL, this.datePayload).then(function () {\n if (isDropdown) {\n _this5.$dropdown.trigger('loaded.gl.dropdown');\n _this5.$dropdown.dropdown('toggle');\n }\n return _this5.$loading.fadeOut();\n });\n }\n }]);\n\n return DueDateSelect;\n}();\n\nvar DueDateSelectors = function () {\n function DueDateSelectors() {\n _classCallCheck(this, DueDateSelectors);\n\n this.initMilestoneDatePicker();\n this.initIssuableSelect();\n }\n // eslint-disable-next-line class-methods-use-this\n\n\n _createClass(DueDateSelectors, [{\n key: 'initMilestoneDatePicker',\n value: function initMilestoneDatePicker() {\n $('.datepicker').each(function initPikadayMilestone() {\n var $datePicker = $(this);\n var calendar = new __WEBPACK_IMPORTED_MODULE_0_pikaday___default.a({\n field: $datePicker.get(0),\n theme: 'gitlab-theme animate-picker',\n format: 'yyyy-mm-dd',\n container: $datePicker.parent().get(0),\n parse: function parse(dateString) {\n return Object(__WEBPACK_IMPORTED_MODULE_2__lib_utils_datefix__[\"a\" /* parsePikadayDate */])(dateString);\n },\n toString: function toString(date) {\n return Object(__WEBPACK_IMPORTED_MODULE_2__lib_utils_datefix__[\"b\" /* pikadayToString */])(date);\n },\n onSelect: function onSelect(dateText) {\n $datePicker.val(calendar.toString(dateText));\n }\n });\n\n calendar.setDate(Object(__WEBPACK_IMPORTED_MODULE_2__lib_utils_datefix__[\"a\" /* parsePikadayDate */])($datePicker.val()));\n\n $datePicker.data('pikaday', calendar);\n });\n\n $('.js-clear-due-date,.js-clear-start-date').on('click', function (e) {\n e.preventDefault();\n var calendar = $(e.target).siblings('.datepicker').data('pikaday');\n calendar.setDate(null);\n });\n }\n // eslint-disable-next-line class-methods-use-this\n\n }, {\n key: 'initIssuableSelect',\n value: function initIssuableSelect() {\n var $loading = $('.js-issuable-update .due_date').find('.block-loading').hide();\n\n $('.js-due-date-select').each(function (i, dropdown) {\n var $dropdown = $(dropdown);\n // eslint-disable-next-line no-new\n new DueDateSelect({\n $dropdown: $dropdown,\n $loading: $loading\n });\n });\n }\n }]);\n\n return DueDateSelectors;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (DueDateSelectors);\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\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__[\"__\"])('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/***/ \"./files_comment_button.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* 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/* Developer beware! Do not add logic to showButton or hideButton\n * that will force a reflow. Doing so will create a signficant performance\n * bottleneck for pages with large diffs. For a comprehensive list of what\n * causes reflows, visit https://gist.github.com/paulirish/5d52fb081b3570c81e3a\n */\n\n\n\nvar LINE_NUMBER_CLASS = 'diff-line-num';\nvar UNFOLDABLE_LINE_CLASS = 'js-unfold';\nvar NO_COMMENT_CLASS = 'no-comment-btn';\nvar EMPTY_CELL_CLASS = 'empty-cell';\nvar OLD_LINE_CLASS = 'old_line';\nvar LINE_COLUMN_CLASSES = '.' + LINE_NUMBER_CLASS + ', .line_content';\nvar DIFF_CONTAINER_SELECTOR = '.files';\nvar DIFF_EXPANDED_CLASS = 'diff-expanded';\n\n/* harmony default export */ __webpack_exports__[\"a\"] = ({\n init: function init($diffFile) {\n var _this = this;\n\n /* Caching is used only when the following members are *true*.\n * This is because there are likely to be\n * differently configured versions of diffs in the same session.\n * However if these values are true, they\n * will be true in all cases */\n\n if (!this.userCanCreateNote) {\n // data-can-create-note is an empty string when true, otherwise undefined\n this.userCanCreateNote = $diffFile.closest(DIFF_CONTAINER_SELECTOR).data('can-create-note') === '';\n }\n\n this.isParallelView = __WEBPACK_IMPORTED_MODULE_0_js_cookie___default.a.get('diff_view') === 'parallel';\n\n if (this.userCanCreateNote) {\n $diffFile.on('mouseover', LINE_COLUMN_CLASSES, function (e) {\n return _this.showButton(_this.isParallelView, e);\n }).on('mouseleave', LINE_COLUMN_CLASSES, function (e) {\n return _this.hideButton(_this.isParallelView, e);\n });\n }\n },\n showButton: function showButton(isParallelView, e) {\n var buttonParentElement = this.getButtonParent(e.currentTarget, isParallelView);\n\n if (!this.validateButtonParent(buttonParentElement)) return;\n\n buttonParentElement.classList.add('is-over');\n buttonParentElement.nextElementSibling.classList.add('is-over');\n },\n hideButton: function hideButton(isParallelView, e) {\n var buttonParentElement = this.getButtonParent(e.currentTarget, isParallelView);\n\n buttonParentElement.classList.remove('is-over');\n buttonParentElement.nextElementSibling.classList.remove('is-over');\n },\n getButtonParent: function getButtonParent(hoveredElement, isParallelView) {\n if (isParallelView) {\n if (!hoveredElement.classList.contains(LINE_NUMBER_CLASS)) {\n return hoveredElement.previousElementSibling;\n }\n } else if (!hoveredElement.classList.contains(OLD_LINE_CLASS)) {\n return hoveredElement.parentNode.querySelector('.' + OLD_LINE_CLASS);\n }\n return hoveredElement;\n },\n validateButtonParent: function validateButtonParent(buttonParentElement) {\n return !buttonParentElement.classList.contains(EMPTY_CELL_CLASS) && !buttonParentElement.classList.contains(UNFOLDABLE_LINE_CLASS) && !buttonParentElement.classList.contains(NO_COMMENT_CLASS) && !buttonParentElement.parentNode.classList.contains(DIFF_EXPANDED_CLASS);\n }\n});\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\");\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 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 = gl.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 = gl.DropdownUtils.getSearchQuery(input);\n\n var _gl$FilteredSearchTok = gl.FilteredSearchTokenizer.processTokens(searchInput, allowedKeys),\n lastToken = _gl$FilteredSearchTok.lastToken,\n tokens = _gl$FilteredSearchTok.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 gl.FilteredSearchDropdownManager.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 _gl$FilteredSearchVis = gl.FilteredSearchVisualTokens.getLastVisualTokenBeforeInput(),\n isLastVisualTokenValid = _gl$FilteredSearchVis.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 _gl$DropdownUtils$get = gl.DropdownUtils.getInputSelectionPosition(filteredSearchInput),\n right = _gl$DropdownUtils$get.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\nwindow.gl = window.gl || {};\ngl.DropdownUtils = DropdownUtils;\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('is-link')) {\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;\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 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 value = this.options.id ? this.options.id(data) : data.id;\n fieldName = this.options.fieldName;\n\n if (value) {\n value = value.toString().replace(/'/g, '\\\\\\'');\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/***/ \"./gl_form.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__gfm_auto_complete__ = __webpack_require__(\"./gfm_auto_complete.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__dropzone_input__ = __webpack_require__(\"./dropzone_input.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__lib_utils_text_markdown__ = __webpack_require__(\"./lib/utils/text_markdown.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/* global autosize */\n\n\n\n\n\nvar GLForm = function () {\n function GLForm(form) {\n var enableGFM = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n _classCallCheck(this, GLForm);\n\n this.form = form;\n this.textarea = this.form.find('textarea.js-gfm-input');\n this.enableGFM = enableGFM;\n // Before we start, we should clean up any previous data for this form\n this.destroy();\n // Setup the form\n this.setupForm();\n this.form.data('gl-form', this);\n }\n\n _createClass(GLForm, [{\n key: 'destroy',\n value: function destroy() {\n // Clean form listeners\n this.clearEventListeners();\n if (this.autoComplete) {\n this.autoComplete.destroy();\n }\n this.form.data('gl-form', null);\n }\n }, {\n key: 'setupForm',\n value: function setupForm() {\n var isNewForm = this.form.is(':not(.gfm-form)');\n this.form.removeClass('js-new-note-form');\n if (isNewForm) {\n this.form.find('.div-dropzone').remove();\n this.form.addClass('gfm-form');\n // remove notify commit author checkbox for non-commit notes\n gl.utils.disableButtonIfEmptyField(this.form.find('.js-note-text'), this.form.find('.js-comment-button, .js-note-new-discussion'));\n this.autoComplete = new __WEBPACK_IMPORTED_MODULE_0__gfm_auto_complete__[\"a\" /* default */](gl.GfmAutoComplete && gl.GfmAutoComplete.dataSources);\n this.autoComplete.setup(this.form.find('.js-gfm-input'), {\n emojis: true,\n members: this.enableGFM,\n issues: this.enableGFM,\n milestones: this.enableGFM,\n mergeRequests: this.enableGFM,\n labels: this.enableGFM\n });\n Object(__WEBPACK_IMPORTED_MODULE_1__dropzone_input__[\"a\" /* default */])(this.form);\n autosize(this.textarea);\n }\n // form and textarea event listeners\n this.addEventListeners();\n __WEBPACK_IMPORTED_MODULE_2__lib_utils_text_markdown__[\"a\" /* default */].init(this.form);\n // hide discard button\n this.form.find('.js-note-discard').hide();\n this.form.show();\n if (this.isAutosizeable) this.setupAutosize();\n }\n }, {\n key: 'setupAutosize',\n value: function setupAutosize() {\n var _this = this;\n\n this.textarea.off('autosize:resized').on('autosize:resized', this.setHeightData.bind(this));\n\n this.textarea.off('mouseup.autosize').on('mouseup.autosize', this.destroyAutosize.bind(this));\n\n setTimeout(function () {\n autosize(_this.textarea);\n _this.textarea.css('resize', 'vertical');\n }, 0);\n }\n }, {\n key: 'setHeightData',\n value: function setHeightData() {\n this.textarea.data('height', this.textarea.outerHeight());\n }\n }, {\n key: 'destroyAutosize',\n value: function destroyAutosize() {\n var outerHeight = this.textarea.outerHeight();\n\n if (this.textarea.data('height') === outerHeight) return;\n\n autosize.destroy(this.textarea);\n\n this.textarea.data('height', outerHeight);\n this.textarea.outerHeight(outerHeight);\n this.textarea.css('max-height', window.outerHeight);\n }\n }, {\n key: 'clearEventListeners',\n value: function clearEventListeners() {\n this.textarea.off('focus');\n this.textarea.off('blur');\n __WEBPACK_IMPORTED_MODULE_2__lib_utils_text_markdown__[\"a\" /* default */].removeListeners(this.form);\n }\n }, {\n key: 'addEventListeners',\n value: function addEventListeners() {\n this.textarea.on('focus', function focusTextArea() {\n $(this).closest('.md-area').addClass('is-focused');\n });\n this.textarea.on('blur', function blurTextArea() {\n $(this).closest('.md-area').removeClass('is-focused');\n });\n }\n }]);\n\n return GLForm;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (GLForm);\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__[\"d\" /* 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/***/ \"./helpers/issuables_helper.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n\n// EXTERNAL MODULE: ./droplab/drop_lab.js + 7 modules\nvar drop_lab = __webpack_require__(\"./droplab/drop_lab.js\");\n\n// EXTERNAL MODULE: ./droplab/plugins/input_setter.js\nvar input_setter = __webpack_require__(\"./droplab/plugins/input_setter.js\");\n\n// CONCATENATED MODULE: ./close_reopen_report_toggle.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\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// Todo: Remove this when fixing issue in input_setter plugin\nvar InputSetter = Object.assign({}, input_setter[\"a\" /* default */]);\n\nvar close_reopen_report_toggle_CloseReopenReportToggle = function () {\n function CloseReopenReportToggle() {\n var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, CloseReopenReportToggle);\n\n this.dropdownTrigger = opts.dropdownTrigger;\n this.dropdownList = opts.dropdownList;\n this.button = opts.button;\n }\n\n _createClass(CloseReopenReportToggle, [{\n key: 'initDroplab',\n value: function initDroplab() {\n this.reopenItem = this.dropdownList.querySelector('.reopen-item');\n this.closeItem = this.dropdownList.querySelector('.close-item');\n\n this.droplab = new drop_lab[\"a\" /* default */]();\n\n var config = this.setConfig();\n\n this.droplab.init(this.dropdownTrigger, this.dropdownList, [InputSetter], config);\n }\n }, {\n key: 'updateButton',\n value: function updateButton(isClosed) {\n this.toggleButtonType(isClosed);\n\n this.button.blur();\n }\n }, {\n key: 'toggleButtonType',\n value: function toggleButtonType(isClosed) {\n var _getButtonTypes = this.getButtonTypes(isClosed),\n _getButtonTypes2 = _slicedToArray(_getButtonTypes, 2),\n showItem = _getButtonTypes2[0],\n hideItem = _getButtonTypes2[1];\n\n showItem.classList.remove('hidden');\n showItem.classList.add('droplab-item-selected');\n\n hideItem.classList.add('hidden');\n hideItem.classList.remove('droplab-item-selected');\n\n showItem.click();\n }\n }, {\n key: 'getButtonTypes',\n value: function getButtonTypes(isClosed) {\n return isClosed ? [this.reopenItem, this.closeItem] : [this.closeItem, this.reopenItem];\n }\n }, {\n key: 'setDisable',\n value: function setDisable() {\n var shouldDisable = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n if (shouldDisable) {\n this.button.setAttribute('disabled', 'true');\n this.dropdownTrigger.setAttribute('disabled', 'true');\n } else {\n this.button.removeAttribute('disabled');\n this.dropdownTrigger.removeAttribute('disabled');\n }\n }\n }, {\n key: 'setConfig',\n value: function setConfig() {\n var config = {\n InputSetter: [{\n input: this.button,\n valueAttribute: 'data-text',\n inputAttribute: 'data-value'\n }, {\n input: this.button,\n valueAttribute: 'data-text',\n inputAttribute: 'title'\n }, {\n input: this.button,\n valueAttribute: 'data-button-class',\n inputAttribute: 'class'\n }, {\n input: this.dropdownTrigger,\n valueAttribute: 'data-toggle-class',\n inputAttribute: 'class'\n }, {\n input: this.button,\n valueAttribute: 'data-url',\n inputAttribute: 'href'\n }, {\n input: this.button,\n valueAttribute: 'data-method',\n inputAttribute: 'data-method'\n }]\n };\n\n return config;\n }\n }]);\n\n return CloseReopenReportToggle;\n}();\n\n/* harmony default export */ var close_reopen_report_toggle = (close_reopen_report_toggle_CloseReopenReportToggle);\n// CONCATENATED MODULE: ./helpers/issuables_helper.js\n\n\nfunction initCloseReopenReport() {\n var container = document.querySelector('.js-issuable-close-dropdown');\n\n if (!container) return undefined;\n\n var dropdownTrigger = container.querySelector('.js-issuable-close-toggle');\n var dropdownList = container.querySelector('.js-issuable-close-menu');\n var button = container.querySelector('.js-issuable-close-button');\n\n var closeReopenReportToggle = new close_reopen_report_toggle({\n dropdownTrigger: dropdownTrigger,\n dropdownList: dropdownList,\n button: button\n });\n\n closeReopenReportToggle.initDroplab();\n\n return closeReopenReportToggle;\n}\n\nvar IssuablesHelper = {\n initCloseReopenReport: initCloseReopenReport\n};\n\n/* harmony default export */ var issuables_helper = __webpack_exports__[\"a\"] = (IssuablesHelper);\n\n/***/ }),\n\n/***/ \"./image_diff/helpers/index.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n\n// CONCATENATED MODULE: ./image_diff/helpers/badge_helper.js\nfunction createImageBadge(noteId, _ref) {\n var x = _ref.x,\n y = _ref.y;\n var classNames = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n\n var buttonEl = document.createElement('button');\n var classList = classNames.concat(['js-image-badge']);\n classList.forEach(function (className) {\n return buttonEl.classList.add(className);\n });\n buttonEl.setAttribute('type', 'button');\n buttonEl.setAttribute('disabled', true);\n buttonEl.dataset.noteId = noteId;\n buttonEl.style.left = x + 'px';\n buttonEl.style.top = y + 'px';\n\n return buttonEl;\n}\n\nfunction addImageBadge(containerEl, _ref2) {\n var coordinate = _ref2.coordinate,\n badgeText = _ref2.badgeText,\n noteId = _ref2.noteId;\n\n var buttonEl = createImageBadge(noteId, coordinate, ['badge']);\n buttonEl.innerText = badgeText;\n\n containerEl.appendChild(buttonEl);\n}\n\nfunction addImageCommentBadge(containerEl, _ref3) {\n var coordinate = _ref3.coordinate,\n noteId = _ref3.noteId;\n\n var buttonEl = createImageBadge(noteId, coordinate, ['image-comment-badge']);\n buttonEl.innerHTML = gl.utils.spriteIcon('image-comment-dark');\n\n containerEl.appendChild(buttonEl);\n}\n\nfunction addAvatarBadge(el, event) {\n var _event$detail = event.detail,\n noteId = _event$detail.noteId,\n badgeNumber = _event$detail.badgeNumber;\n\n // Add badge to new comment\n\n var avatarBadgeEl = el.querySelector('#' + noteId + ' .badge');\n avatarBadgeEl.innerText = badgeNumber;\n avatarBadgeEl.classList.remove('hidden');\n}\n// CONCATENATED MODULE: ./image_diff/helpers/comment_indicator_helper.js\nfunction addCommentIndicator(containerEl, _ref) {\n var x = _ref.x,\n y = _ref.y;\n\n var buttonEl = document.createElement('button');\n buttonEl.classList.add('btn-transparent');\n buttonEl.classList.add('comment-indicator');\n buttonEl.setAttribute('type', 'button');\n buttonEl.style.left = x + 'px';\n buttonEl.style.top = y + 'px';\n\n buttonEl.innerHTML = gl.utils.spriteIcon('image-comment-dark');\n\n containerEl.appendChild(buttonEl);\n}\n\nfunction removeCommentIndicator(imageFrameEl) {\n var commentIndicatorEl = imageFrameEl.querySelector('.comment-indicator');\n var imageEl = imageFrameEl.querySelector('img');\n var willRemove = !!commentIndicatorEl;\n var meta = {};\n\n if (willRemove) {\n meta = {\n x: parseInt(commentIndicatorEl.style.left, 10),\n y: parseInt(commentIndicatorEl.style.top, 10),\n image: {\n width: imageEl.width,\n height: imageEl.height\n }\n };\n\n commentIndicatorEl.remove();\n }\n\n return Object.assign({}, meta, {\n removed: willRemove\n });\n}\n\nfunction showCommentIndicator(imageFrameEl, coordinate) {\n var x = coordinate.x,\n y = coordinate.y;\n\n var commentIndicatorEl = imageFrameEl.querySelector('.comment-indicator');\n\n if (commentIndicatorEl) {\n commentIndicatorEl.style.left = x + 'px';\n commentIndicatorEl.style.top = y + 'px';\n } else {\n addCommentIndicator(imageFrameEl, coordinate);\n }\n}\n\nfunction commentIndicatorOnClick(event) {\n // Prevent from triggering onAddImageDiffNote in notes.js\n event.stopPropagation();\n\n var buttonEl = event.currentTarget;\n var diffViewerEl = buttonEl.closest('.diff-viewer');\n var textareaEl = diffViewerEl.querySelector('.note-container .note-textarea');\n textareaEl.focus();\n}\n// CONCATENATED MODULE: ./image_diff/helpers/dom_helper.js\nfunction setPositionDataAttribute(el, options) {\n // Update position data attribute so that the\n // new comment form can use this data for ajax request\n var x = options.x,\n y = options.y,\n width = options.width,\n height = options.height;\n\n var position = el.dataset.position;\n var positionObject = Object.assign({}, JSON.parse(position), {\n x: x,\n y: y,\n width: width,\n height: height\n });\n\n el.setAttribute('data-position', JSON.stringify(positionObject));\n}\n\nfunction updateDiscussionAvatarBadgeNumber(discussionEl, newBadgeNumber) {\n var avatarBadgeEl = discussionEl.querySelector('.image-diff-avatar-link .badge');\n avatarBadgeEl.innerText = newBadgeNumber;\n}\n\nfunction updateDiscussionBadgeNumber(discussionEl, newBadgeNumber) {\n var discussionBadgeEl = discussionEl.querySelector('.badge');\n discussionBadgeEl.innerText = newBadgeNumber;\n}\n\nfunction toggleCollapsed(event) {\n var toggleButtonEl = event.currentTarget;\n var discussionNotesEl = toggleButtonEl.closest('.discussion-notes');\n var formEl = discussionNotesEl.querySelector('.discussion-form');\n var isCollapsed = discussionNotesEl.classList.contains('collapsed');\n\n if (isCollapsed) {\n discussionNotesEl.classList.remove('collapsed');\n } else {\n discussionNotesEl.classList.add('collapsed');\n }\n\n // Override the inline display style set in notes.js\n if (formEl && !isCollapsed) {\n formEl.style.display = 'none';\n } else if (formEl && isCollapsed) {\n formEl.style.display = 'block';\n }\n}\n// EXTERNAL MODULE: ./image_diff/image_badge.js\nvar image_badge = __webpack_require__(\"./image_diff/image_badge.js\");\n\n// EXTERNAL MODULE: ./image_diff/image_diff.js\nvar image_diff = __webpack_require__(\"./image_diff/image_diff.js\");\n\n// CONCATENATED MODULE: ./image_diff/view_types.js\nvar viewTypes = {\n TWO_UP: 'TWO_UP',\n SWIPE: 'SWIPE',\n ONION_SKIN: 'ONION_SKIN'\n};\n\nfunction isValidViewType(validate) {\n return !!Object.getOwnPropertyNames(viewTypes).find(function (viewType) {\n return viewType === validate;\n });\n}\n// CONCATENATED MODULE: ./image_diff/replaced_image_diff.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\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 _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\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\n\nvar replaced_image_diff_ReplacedImageDiff = function (_ImageDiff) {\n _inherits(ReplacedImageDiff, _ImageDiff);\n\n function ReplacedImageDiff() {\n _classCallCheck(this, ReplacedImageDiff);\n\n return _possibleConstructorReturn(this, (ReplacedImageDiff.__proto__ || Object.getPrototypeOf(ReplacedImageDiff)).apply(this, arguments));\n }\n\n _createClass(ReplacedImageDiff, [{\n key: 'init',\n value: function init() {\n var _imageFrameEls, _viewModesEls;\n\n var defaultViewType = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : viewTypes.TWO_UP;\n\n this.imageFrameEls = (_imageFrameEls = {}, _defineProperty(_imageFrameEls, viewTypes.TWO_UP, this.el.querySelector('.two-up .js-image-frame')), _defineProperty(_imageFrameEls, viewTypes.SWIPE, this.el.querySelector('.swipe .js-image-frame')), _defineProperty(_imageFrameEls, viewTypes.ONION_SKIN, this.el.querySelector('.onion-skin .js-image-frame')), _imageFrameEls);\n\n var viewModesEl = this.el.querySelector('.view-modes-menu');\n this.viewModesEls = (_viewModesEls = {}, _defineProperty(_viewModesEls, viewTypes.TWO_UP, viewModesEl.querySelector('.two-up')), _defineProperty(_viewModesEls, viewTypes.SWIPE, viewModesEl.querySelector('.swipe')), _defineProperty(_viewModesEls, viewTypes.ONION_SKIN, viewModesEl.querySelector('.onion-skin')), _viewModesEls);\n\n this.currentView = defaultViewType;\n this.generateImageEls();\n this.bindEvents();\n }\n }, {\n key: 'generateImageEls',\n value: function generateImageEls() {\n var _this2 = this;\n\n this.imageEls = {};\n\n var viewTypeNames = Object.getOwnPropertyNames(viewTypes);\n viewTypeNames.forEach(function (viewType) {\n _this2.imageEls[viewType] = _this2.imageFrameEls[viewType].querySelector('img');\n });\n }\n }, {\n key: 'bindEvents',\n value: function bindEvents() {\n _get(ReplacedImageDiff.prototype.__proto__ || Object.getPrototypeOf(ReplacedImageDiff.prototype), 'bindEvents', this).call(this);\n\n this.changeToViewTwoUp = this.changeView.bind(this, viewTypes.TWO_UP);\n this.changeToViewSwipe = this.changeView.bind(this, viewTypes.SWIPE);\n this.changeToViewOnionSkin = this.changeView.bind(this, viewTypes.ONION_SKIN);\n\n this.viewModesEls[viewTypes.TWO_UP].addEventListener('click', this.changeToViewTwoUp);\n this.viewModesEls[viewTypes.SWIPE].addEventListener('click', this.changeToViewSwipe);\n this.viewModesEls[viewTypes.ONION_SKIN].addEventListener('click', this.changeToViewOnionSkin);\n }\n }, {\n key: 'changeView',\n value: function changeView(newView) {\n if (!isValidViewType(newView)) {\n return;\n }\n\n var indicator = helpers.removeCommentIndicator(this.imageFrameEl);\n\n this.currentView = newView;\n\n // Clear existing badges on new view\n var existingBadges = this.imageFrameEl.querySelectorAll('.badge');\n [].concat(_toConsumableArray(existingBadges)).map(function (badge) {\n return badge.remove();\n });\n\n // Remove existing references to old view image badges\n this.imageBadges = [];\n\n // Image_file.js has a fade animation of 200ms for loading the view\n // Need to wait an additional 250ms for the images to be displayed\n // on window in order to re-normalize their dimensions\n setTimeout(this.renderNewView.bind(this, indicator), 250);\n }\n }, {\n key: 'renderNewView',\n value: function renderNewView(indicator) {\n // Generate badge coordinates on new view\n this.renderBadges();\n\n // Re-render indicator in new view\n if (indicator.removed) {\n var normalizedIndicator = helpers.resizeCoordinatesToImageElement(this.imageEl, {\n x: indicator.x,\n y: indicator.y,\n width: indicator.image.width,\n height: indicator.image.height\n });\n helpers.showCommentIndicator(this.imageFrameEl, normalizedIndicator);\n }\n }\n }, {\n key: 'imageEl',\n get: function get() {\n return this.imageEls[this.currentView];\n }\n }, {\n key: 'imageFrameEl',\n get: function get() {\n return this.imageFrameEls[this.currentView];\n }\n }]);\n\n return ReplacedImageDiff;\n}(image_diff[\"a\" /* default */]);\n\n/* harmony default export */ var replaced_image_diff = (replaced_image_diff_ReplacedImageDiff);\n// EXTERNAL MODULE: ./commit/image_file.js\nvar image_file = __webpack_require__(\"./commit/image_file.js\");\n\n// CONCATENATED MODULE: ./image_diff/helpers/utils_helper.js\n\n\n\n\n\nfunction resizeCoordinatesToImageElement(imageEl, meta) {\n var x = meta.x,\n y = meta.y,\n width = meta.width,\n height = meta.height;\n\n\n var imageWidth = imageEl.width;\n var imageHeight = imageEl.height;\n\n var widthRatio = imageWidth / width;\n var heightRatio = imageHeight / height;\n\n return {\n x: Math.round(x * widthRatio),\n y: Math.round(y * heightRatio),\n width: imageWidth,\n height: imageHeight\n };\n}\n\nfunction generateBadgeFromDiscussionDOM(imageFrameEl, discussionEl) {\n var position = JSON.parse(discussionEl.dataset.position);\n var firstNoteEl = discussionEl.querySelector('.note');\n var badge = new image_badge[\"a\" /* default */]({\n actual: position,\n imageEl: imageFrameEl.querySelector('img'),\n noteId: firstNoteEl.id,\n discussionId: discussionEl.dataset.discussionId\n });\n\n return badge;\n}\n\nfunction getTargetSelection(event) {\n var containerEl = event.currentTarget;\n var imageEl = containerEl.querySelector('img');\n\n var x = event.offsetX;\n var y = event.offsetY;\n\n var width = imageEl.width;\n var height = imageEl.height;\n\n var actualWidth = imageEl.naturalWidth;\n var actualHeight = imageEl.naturalHeight;\n\n var widthRatio = actualWidth / width;\n var heightRatio = actualHeight / height;\n\n // Browser will include the frame as a clickable target,\n // which would result in potential 1px out of bounds value\n // This bound the coordinates to inside the frame\n var normalizedX = Math.max(0, x) && Math.min(x, width);\n var normalizedY = Math.max(0, y) && Math.min(y, height);\n\n return {\n browser: {\n x: normalizedX,\n y: normalizedY,\n width: width,\n height: height\n },\n actual: {\n // Round x, y so that we don't need to deal with decimals\n x: Math.round(normalizedX * widthRatio),\n y: Math.round(normalizedY * heightRatio),\n width: actualWidth,\n height: actualHeight\n }\n };\n}\n\nfunction initImageDiff(fileEl, canCreateNote, renderCommentBadge) {\n var options = {\n canCreateNote: canCreateNote,\n renderCommentBadge: renderCommentBadge\n };\n var diff = void 0;\n\n // ImageFile needs to be invoked before initImageDiff so that badges\n // can mount to the correct location\n new image_file[\"a\" /* default */](fileEl); // eslint-disable-line no-new\n\n if (fileEl.querySelector('.diff-file .js-single-image')) {\n diff = new image_diff[\"a\" /* default */](fileEl, options);\n diff.init();\n } else if (fileEl.querySelector('.diff-file .js-replaced-image')) {\n diff = new replaced_image_diff(fileEl, options);\n diff.init();\n }\n\n return diff;\n}\n// CONCATENATED MODULE: ./image_diff/helpers/index.js\n\n\n\n\n\n/* harmony default export */ var helpers = __webpack_exports__[\"a\"] = ({\n addCommentIndicator: addCommentIndicator,\n removeCommentIndicator: removeCommentIndicator,\n showCommentIndicator: showCommentIndicator,\n commentIndicatorOnClick: commentIndicatorOnClick,\n\n addImageBadge: addImageBadge,\n addImageCommentBadge: addImageCommentBadge,\n addAvatarBadge: addAvatarBadge,\n\n setPositionDataAttribute: setPositionDataAttribute,\n updateDiscussionAvatarBadgeNumber: updateDiscussionAvatarBadgeNumber,\n updateDiscussionBadgeNumber: updateDiscussionBadgeNumber,\n toggleCollapsed: toggleCollapsed,\n\n resizeCoordinatesToImageElement: resizeCoordinatesToImageElement,\n generateBadgeFromDiscussionDOM: generateBadgeFromDiscussionDOM,\n getTargetSelection: getTargetSelection,\n initImageDiff: initImageDiff\n});\n\n/***/ }),\n\n/***/ \"./image_diff/image_badge.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__helpers_index__ = __webpack_require__(\"./image_diff/helpers/index.js\");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\nvar defaultMeta = {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n};\n\nvar ImageBadge = function ImageBadge(options) {\n _classCallCheck(this, ImageBadge);\n\n var noteId = options.noteId,\n discussionId = options.discussionId;\n\n\n this.actual = options.actual || defaultMeta;\n this.browser = options.browser || defaultMeta;\n this.noteId = noteId;\n this.discussionId = discussionId;\n\n if (options.imageEl && !options.browser) {\n this.browser = __WEBPACK_IMPORTED_MODULE_0__helpers_index__[\"a\" /* default */].resizeCoordinatesToImageElement(options.imageEl, this.actual);\n }\n};\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (ImageBadge);\n\n/***/ }),\n\n/***/ \"./image_diff/image_diff.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__helpers_index__ = __webpack_require__(\"./image_diff/helpers/index.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__image_badge__ = __webpack_require__(\"./image_diff/image_badge.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__lib_utils_image_utility__ = __webpack_require__(\"./lib/utils/image_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 _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\n\nvar ImageDiff = function () {\n function ImageDiff(el, options) {\n _classCallCheck(this, ImageDiff);\n\n this.el = el;\n this.canCreateNote = !!(options && options.canCreateNote);\n this.renderCommentBadge = !!(options && options.renderCommentBadge);\n this.$noteContainer = $('.note-container', this.el);\n this.imageBadges = [];\n }\n\n _createClass(ImageDiff, [{\n key: 'init',\n value: function init() {\n this.imageFrameEl = this.el.querySelector('.diff-file .js-image-frame');\n this.imageEl = this.imageFrameEl.querySelector('img');\n\n this.bindEvents();\n }\n }, {\n key: 'bindEvents',\n value: function bindEvents() {\n this.imageClickedWrapper = this.imageClicked.bind(this);\n this.imageBlurredWrapper = __WEBPACK_IMPORTED_MODULE_0__helpers_index__[\"a\" /* default */].removeCommentIndicator.bind(null, this.imageFrameEl);\n this.addBadgeWrapper = this.addBadge.bind(this);\n this.removeBadgeWrapper = this.removeBadge.bind(this);\n this.renderBadgesWrapper = this.renderBadges.bind(this);\n\n // Render badges\n if (Object(__WEBPACK_IMPORTED_MODULE_2__lib_utils_image_utility__[\"a\" /* isImageLoaded */])(this.imageEl)) {\n this.renderBadges();\n } else {\n this.imageEl.addEventListener('load', this.renderBadgesWrapper);\n }\n\n // jquery makes the event delegation here much simpler\n this.$noteContainer.on('click', '.js-diff-notes-toggle', __WEBPACK_IMPORTED_MODULE_0__helpers_index__[\"a\" /* default */].toggleCollapsed);\n $(this.el).on('click', '.comment-indicator', __WEBPACK_IMPORTED_MODULE_0__helpers_index__[\"a\" /* default */].commentIndicatorOnClick);\n\n if (this.canCreateNote) {\n this.el.addEventListener('click.imageDiff', this.imageClickedWrapper);\n this.el.addEventListener('blur.imageDiff', this.imageBlurredWrapper);\n this.el.addEventListener('addBadge.imageDiff', this.addBadgeWrapper);\n this.el.addEventListener('removeBadge.imageDiff', this.removeBadgeWrapper);\n }\n }\n }, {\n key: 'imageClicked',\n value: function imageClicked(event) {\n var customEvent = event.detail;\n var selection = __WEBPACK_IMPORTED_MODULE_0__helpers_index__[\"a\" /* default */].getTargetSelection(customEvent);\n var el = customEvent.currentTarget;\n\n __WEBPACK_IMPORTED_MODULE_0__helpers_index__[\"a\" /* default */].setPositionDataAttribute(el, selection.actual);\n __WEBPACK_IMPORTED_MODULE_0__helpers_index__[\"a\" /* default */].showCommentIndicator(this.imageFrameEl, selection.browser);\n }\n }, {\n key: 'renderBadges',\n value: function renderBadges() {\n var discussionsEls = this.el.querySelectorAll('.note-container .discussion-notes .notes');\n [].concat(_toConsumableArray(discussionsEls)).forEach(this.renderBadge.bind(this));\n }\n }, {\n key: 'renderBadge',\n value: function renderBadge(discussionEl, index) {\n var imageBadge = __WEBPACK_IMPORTED_MODULE_0__helpers_index__[\"a\" /* default */].generateBadgeFromDiscussionDOM(this.imageFrameEl, discussionEl);\n\n this.imageBadges.push(imageBadge);\n\n var options = {\n coordinate: imageBadge.browser,\n noteId: imageBadge.noteId\n };\n\n if (this.renderCommentBadge) {\n __WEBPACK_IMPORTED_MODULE_0__helpers_index__[\"a\" /* default */].addImageCommentBadge(this.imageFrameEl, options);\n } else {\n var numberBadgeOptions = Object.assign({}, options, {\n badgeText: index + 1\n });\n\n __WEBPACK_IMPORTED_MODULE_0__helpers_index__[\"a\" /* default */].addImageBadge(this.imageFrameEl, numberBadgeOptions);\n }\n }\n }, {\n key: 'addBadge',\n value: function addBadge(event) {\n var _event$detail = event.detail,\n x = _event$detail.x,\n y = _event$detail.y,\n width = _event$detail.width,\n height = _event$detail.height,\n noteId = _event$detail.noteId,\n discussionId = _event$detail.discussionId;\n\n var badgeText = this.imageBadges.length + 1;\n var imageBadge = new __WEBPACK_IMPORTED_MODULE_1__image_badge__[\"a\" /* default */]({\n actual: {\n x: x,\n y: y,\n width: width,\n height: height\n },\n imageEl: this.imageFrameEl.querySelector('img'),\n noteId: noteId,\n discussionId: discussionId\n });\n\n this.imageBadges.push(imageBadge);\n\n __WEBPACK_IMPORTED_MODULE_0__helpers_index__[\"a\" /* default */].addImageBadge(this.imageFrameEl, {\n coordinate: imageBadge.browser,\n badgeText: badgeText,\n noteId: noteId\n });\n\n __WEBPACK_IMPORTED_MODULE_0__helpers_index__[\"a\" /* default */].addAvatarBadge(this.el, {\n detail: {\n noteId: noteId,\n badgeNumber: badgeText\n }\n });\n\n var discussionEl = this.el.querySelector('#discussion_' + discussionId);\n __WEBPACK_IMPORTED_MODULE_0__helpers_index__[\"a\" /* default */].updateDiscussionBadgeNumber(discussionEl, badgeText);\n }\n }, {\n key: 'removeBadge',\n value: function removeBadge(event) {\n var _this = this;\n\n var badgeNumber = event.detail.badgeNumber;\n\n var indexToRemove = badgeNumber - 1;\n var imageBadgeEls = this.imageFrameEl.querySelectorAll('.badge');\n\n if (this.imageBadges.length !== badgeNumber) {\n // Cascade badges count numbers for (avatar badges + image badges)\n this.imageBadges.forEach(function (badge, index) {\n if (index > indexToRemove) {\n var discussionId = badge.discussionId;\n\n var updatedBadgeNumber = index;\n var discussionEl = _this.el.querySelector('#discussion_' + discussionId);\n\n imageBadgeEls[index].innerText = updatedBadgeNumber;\n\n __WEBPACK_IMPORTED_MODULE_0__helpers_index__[\"a\" /* default */].updateDiscussionBadgeNumber(discussionEl, updatedBadgeNumber);\n __WEBPACK_IMPORTED_MODULE_0__helpers_index__[\"a\" /* default */].updateDiscussionAvatarBadgeNumber(discussionEl, updatedBadgeNumber);\n }\n });\n }\n\n this.imageBadges.splice(indexToRemove, 1);\n\n var imageBadgeEl = imageBadgeEls[indexToRemove];\n imageBadgeEl.remove();\n }\n }]);\n\n return ImageDiff;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (ImageDiff);\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\n\n/***/ }),\n\n/***/ \"./image_diff/init_discussion_tab.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__helpers_index__ = __webpack_require__(\"./image_diff/helpers/index.js\");\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\n/* harmony default export */ __webpack_exports__[\"a\"] = (function () {\n // Always pass can-create-note as false because a user\n // cannot place new badge markers on discussion tab\n var canCreateNote = false;\n var renderCommentBadge = true;\n\n var diffFileEls = document.querySelectorAll('.timeline-content .diff-file.js-image-file');\n [].concat(_toConsumableArray(diffFileEls)).forEach(function (diffFileEl) {\n return __WEBPACK_IMPORTED_MODULE_0__helpers_index__[\"a\" /* default */].initImageDiff(diffFileEl, canCreateNote, renderCommentBadge);\n });\n});\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 (immutable) */ __webpack_exports__[\"a\"] = initImporterStatus;\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 ImporterStatus = function () {\n function ImporterStatus(jobsUrl, importUrl) {\n _classCallCheck(this, ImporterStatus);\n\n this.jobsUrl = jobsUrl;\n this.importUrl = importUrl;\n this.initStatusPage();\n this.setAutoUpdate();\n }\n\n _createClass(ImporterStatus, [{\n key: 'initStatusPage',\n value: function initStatusPage() {\n var _this = this;\n\n $('.js-add-to-import').off('click').on('click', function (event) {\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 $.post(_this.importUrl, {\n repo_id: id,\n target_namespace: targetNamespace,\n new_name: newName\n }, {\n dataType: 'script'\n });\n });\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: 'setAutoUpdate',\n value: function setAutoUpdate() {\n var _this2 = this;\n\n return setInterval(function () {\n return $.get(_this2.jobsUrl, function (data) {\n return $.each(data, function (i, 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(' done');\n break;\n case 'scheduled':\n statusField.html(spinner + ' scheduled');\n break;\n case 'started':\n statusField.html(spinner + ' started');\n break;\n default:\n statusField.html(job.import_status);\n break;\n }\n });\n });\n }, 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(data.jobsImportPath, data.importPath);\n }\n}\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\n\n/***/ }),\n\n/***/ \"./init_changes_dropdown.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_sticky__ = __webpack_require__(\"./lib/utils/sticky.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (function (stickyTop) {\n Object(__WEBPACK_IMPORTED_MODULE_0__lib_utils_sticky__[\"a\" /* default */])(document.querySelector('.js-diff-files-changed'), stickyTop);\n\n $('.js-diff-stats-dropdown').glDropdown({\n filterable: true,\n remoteFilter: false\n });\n});\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\n\n/***/ }),\n\n/***/ \"./init_issuable_sidebar.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__milestone_select__ = __webpack_require__(\"./milestone_select.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__labels_select__ = __webpack_require__(\"./labels_select.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__issuable_context__ = __webpack_require__(\"./issuable_context.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__right_sidebar__ = __webpack_require__(\"./right_sidebar.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__due_date_select__ = __webpack_require__(\"./due_date_select.js\");\n/* eslint-disable no-new */\n\n\n\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (function () {\n var sidebarOptions = JSON.parse(document.querySelector('.js-sidebar-options').innerHTML);\n\n new __WEBPACK_IMPORTED_MODULE_0__milestone_select__[\"a\" /* default */]({\n full_path: sidebarOptions.fullPath\n });\n new __WEBPACK_IMPORTED_MODULE_1__labels_select__[\"a\" /* default */]();\n new __WEBPACK_IMPORTED_MODULE_2__issuable_context__[\"a\" /* default */](sidebarOptions.currentUser);\n new __WEBPACK_IMPORTED_MODULE_4__due_date_select__[\"a\" /* default */]();\n __WEBPACK_IMPORTED_MODULE_3__right_sidebar__[\"a\" /* default */].initialize();\n});\n\n/***/ }),\n\n/***/ \"./init_notes.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__notes__ = __webpack_require__(\"./notes.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (function () {\n var dataEl = document.querySelector('.js-notes-data');\n\n var _JSON$parse = JSON.parse(dataEl.innerHTML),\n notesUrl = _JSON$parse.notesUrl,\n notesIds = _JSON$parse.notesIds,\n now = _JSON$parse.now,\n diffView = _JSON$parse.diffView,\n autocomplete = _JSON$parse.autocomplete;\n\n // Create a singleton so that we don't need to assign\n // into the window object, we can just access the current isntance with Notes.instance\n\n\n __WEBPACK_IMPORTED_MODULE_0__notes__[\"a\" /* default */].initialize(notesUrl, notesIds, now, diffView, autocomplete);\n});\n\n/***/ }),\n\n/***/ \"./issuable_bulk_update_actions.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__flash__ = __webpack_require__(\"./flash.js\");\n/* eslint-disable comma-dangle, quotes, consistent-return, func-names, array-callback-return, space-before-function-paren, prefer-arrow-callback, max-len, no-unused-expressions, no-sequences, no-underscore-dangle, no-unused-vars, no-param-reassign */\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"a\"] = ({\n init: function init() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n container = _ref.container,\n form = _ref.form,\n issues = _ref.issues,\n prefixId = _ref.prefixId;\n\n this.prefixId = prefixId || 'issue_';\n this.form = form || this.getElement('.bulk-update');\n this.$labelDropdown = this.form.find('.js-label-select');\n this.issues = issues || this.getElement('.issues-list .issue');\n this.willUpdateLabels = false;\n this.bindEvents();\n },\n bindEvents: function bindEvents() {\n return this.form.off('submit').on('submit', this.onFormSubmit.bind(this));\n },\n onFormSubmit: function onFormSubmit(e) {\n e.preventDefault();\n return this.submit();\n },\n submit: function submit() {\n var _this = this;\n\n __WEBPACK_IMPORTED_MODULE_1__lib_utils_axios_utils__[\"a\" /* default */][this.form.attr('method')](this.form.attr('action'), this.getFormDataAsObject()).then(function () {\n return window.location.reload();\n }).catch(function () {\n return _this.onFormSubmitFailure();\n });\n },\n onFormSubmitFailure: function onFormSubmitFailure() {\n this.form.find('[type=\"submit\"]').enable();\n return new __WEBPACK_IMPORTED_MODULE_2__flash__[\"a\" /* default */](\"Issue update failed\");\n },\n getSelectedIssues: function getSelectedIssues() {\n return this.issues.has('.selected_issue:checked');\n },\n getLabelsFromSelection: function getLabelsFromSelection() {\n var labels = [];\n this.getSelectedIssues().map(function () {\n var labelsData = $(this).data('labels');\n if (labelsData) {\n return labelsData.map(function (labelId) {\n if (labels.indexOf(labelId) === -1) {\n return labels.push(labelId);\n }\n });\n }\n });\n return labels;\n },\n\n\n /**\n * Will return only labels that were marked previously and the user has unmarked\n * @return {Array} Label IDs\n */\n\n getUnmarkedIndeterminedLabels: function getUnmarkedIndeterminedLabels() {\n var result = [];\n var labelsToKeep = this.$labelDropdown.data('indeterminate');\n\n this.getLabelsFromSelection().forEach(function (id) {\n if (labelsToKeep.indexOf(id) === -1) {\n result.push(id);\n }\n });\n\n return result;\n },\n\n\n /**\n * Simple form serialization, it will return just what we need\n * Returns key/value pairs from form data\n */\n\n getFormDataAsObject: function getFormDataAsObject() {\n var formData = {\n update: {\n state_event: this.form.find('input[name=\"update[state_event]\"]').val(),\n // For Merge Requests\n assignee_id: this.form.find('input[name=\"update[assignee_id]\"]').val(),\n // For Issues\n assignee_ids: [this.form.find('input[name=\"update[assignee_ids][]\"]').val()],\n milestone_id: this.form.find('input[name=\"update[milestone_id]\"]').val(),\n issuable_ids: this.form.find('input[name=\"update[issuable_ids]\"]').val(),\n subscription_event: this.form.find('input[name=\"update[subscription_event]\"]').val(),\n add_label_ids: [],\n remove_label_ids: []\n }\n };\n if (this.willUpdateLabels) {\n formData.update.add_label_ids = this.$labelDropdown.data('marked');\n formData.update.remove_label_ids = this.$labelDropdown.data('unmarked');\n }\n return formData;\n },\n setOriginalDropdownData: function setOriginalDropdownData() {\n var $labelSelect = $('.bulk-update .js-label-select');\n $labelSelect.data('common', this.getOriginalCommonIds());\n $labelSelect.data('marked', this.getOriginalMarkedIds());\n $labelSelect.data('indeterminate', this.getOriginalIndeterminateIds());\n },\n\n\n // From issuable's initial bulk selection\n getOriginalCommonIds: function getOriginalCommonIds() {\n var _this2 = this;\n\n var labelIds = [];\n\n this.getElement('.selected_issue:checked').each(function (i, el) {\n labelIds.push(_this2.getElement('#' + _this2.prefixId + el.dataset.id).data('labels'));\n });\n return __WEBPACK_IMPORTED_MODULE_0_underscore___default.a.intersection.apply(this, labelIds);\n },\n\n\n // From issuable's initial bulk selection\n getOriginalMarkedIds: function getOriginalMarkedIds() {\n var _this3 = this;\n\n var labelIds = [];\n this.getElement('.selected_issue:checked').each(function (i, el) {\n labelIds.push(_this3.getElement('#' + _this3.prefixId + el.dataset.id).data('labels'));\n });\n return __WEBPACK_IMPORTED_MODULE_0_underscore___default.a.intersection.apply(this, labelIds);\n },\n\n\n // From issuable's initial bulk selection\n getOriginalIndeterminateIds: function getOriginalIndeterminateIds() {\n var _this4 = this;\n\n var uniqueIds = [];\n var labelIds = [];\n var issuableLabels = [];\n\n // Collect unique label IDs for all checked issues\n this.getElement('.selected_issue:checked').each(function (i, el) {\n issuableLabels = _this4.getElement('#' + _this4.prefixId + el.dataset.id).data('labels');\n issuableLabels.forEach(function (labelId) {\n // Store unique IDs\n if (uniqueIds.indexOf(labelId) === -1) {\n uniqueIds.push(labelId);\n }\n });\n // Store array of IDs per issuable\n labelIds.push(issuableLabels);\n });\n // Add uniqueIds to add it as argument for _.intersection\n labelIds.unshift(uniqueIds);\n // Return IDs that are present but not in all selected issueables\n return __WEBPACK_IMPORTED_MODULE_0_underscore___default.a.difference(uniqueIds, __WEBPACK_IMPORTED_MODULE_0_underscore___default.a.intersection.apply(this, labelIds));\n },\n getElement: function getElement(selector) {\n this.scopeEl = this.scopeEl || $('.content');\n return this.scopeEl.find(selector);\n }\n});\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\n\n/***/ }),\n\n/***/ \"./issuable_context.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__breakpoints__ = __webpack_require__(\"./breakpoints.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__users_select__ = __webpack_require__(\"./users_select.js\");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\n\nvar IssuableContext = function IssuableContext(currentUser) {\n _classCallCheck(this, IssuableContext);\n\n this.userSelect = new __WEBPACK_IMPORTED_MODULE_2__users_select__[\"a\" /* default */](currentUser);\n\n $('select.select2').select2({\n width: 'resolve',\n dropdownAutoWidth: true\n });\n\n $('.issuable-sidebar .inline-update').on('change', 'select', function onClickSelect() {\n return $(this).submit();\n });\n $('.issuable-sidebar .inline-update').on('change', '.js-assignee', function onClickAssignee() {\n return $(this).submit();\n });\n $(document).off('click', '.issuable-sidebar .dropdown-content a').on('click', '.issuable-sidebar .dropdown-content a', function (e) {\n return e.preventDefault();\n });\n\n $(document).off('click', '.edit-link').on('click', '.edit-link', function onClickEdit(e) {\n e.preventDefault();\n var $block = $(this).parents('.block');\n var $selectbox = $block.find('.selectbox');\n if ($selectbox.is(':visible')) {\n $selectbox.hide();\n $block.find('.value').show();\n } else {\n $selectbox.show();\n $block.find('.value').hide();\n }\n\n if ($selectbox.is(':visible')) {\n setTimeout(function () {\n return $block.find('.dropdown-menu-toggle').trigger('click');\n }, 0);\n }\n });\n\n window.addEventListener('beforeunload', function () {\n // collapsed_gutter cookie hides the sidebar\n var bpBreakpoint = __WEBPACK_IMPORTED_MODULE_1__breakpoints__[\"a\" /* default */].getBreakpointSize();\n if (bpBreakpoint === 'xs' || bpBreakpoint === 'sm') {\n __WEBPACK_IMPORTED_MODULE_0_js_cookie___default.a.set('collapsed_gutter', true);\n }\n });\n};\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (IssuableContext);\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\n\n/***/ }),\n\n/***/ \"./labels_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__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__issuable_bulk_update_actions__ = __webpack_require__(\"./issuable_bulk_update_actions.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__filtered_search_dropdown_utils__ = __webpack_require__(\"./filtered_search/dropdown_utils.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__create_label__ = __webpack_require__(\"./create_label.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__flash__ = __webpack_require__(\"./flash.js\");\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/* eslint-disable no-useless-return, func-names, space-before-function-paren, wrap-iife, no-var, no-underscore-dangle, prefer-arrow-callback, max-len, one-var, no-unused-vars, one-var-declaration-per-line, prefer-template, no-new, consistent-return, object-shorthand, comma-dangle, no-shadow, no-param-reassign, brace-style, vars-on-top, quotes, no-lonely-if, no-else-return, dot-notation, no-empty, no-return-assign, camelcase, prefer-spread */\n/* global Issuable */\n/* global ListLabel */\n\n\n\n\n\n\n\n\nvar LabelsSelect = function () {\n function LabelsSelect(els) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, LabelsSelect);\n\n var _this, $els;\n _this = this;\n\n $els = $(els);\n\n if (!els) {\n $els = $('.js-label-select');\n }\n\n $els.each(function (i, dropdown) {\n var $block, $colorPreview, $dropdown, $form, $loading, $selectbox, $sidebarCollapsedValue, $value, abilityName, defaultLabel, enableLabelCreateButton, issueURLSplit, issueUpdateURL, labelHTMLTemplate, labelNoneHTMLTemplate, labelUrl, namespacePath, projectPath, saveLabelData, selectedLabel, showAny, showNo, $sidebarLabelTooltip, initialSelected, $toggleText, fieldName, useId, propertyName, showMenuAbove, $container, $dropdownContainer;\n $dropdown = $(dropdown);\n $dropdownContainer = $dropdown.closest('.labels-filter');\n $toggleText = $dropdown.find('.dropdown-toggle-text');\n namespacePath = $dropdown.data('namespace-path');\n projectPath = $dropdown.data('project-path');\n labelUrl = $dropdown.data('labels');\n issueUpdateURL = $dropdown.data('issueUpdate');\n selectedLabel = $dropdown.data('selected');\n if (selectedLabel != null && !$dropdown.hasClass('js-multiselect')) {\n selectedLabel = selectedLabel.split(',');\n }\n showNo = $dropdown.data('show-no');\n showAny = $dropdown.data('show-any');\n showMenuAbove = $dropdown.data('showMenuAbove');\n defaultLabel = $dropdown.data('default-label');\n abilityName = $dropdown.data('ability-name');\n $selectbox = $dropdown.closest('.selectbox');\n $block = $selectbox.closest('.block');\n $form = $dropdown.closest('form, .js-issuable-update');\n $sidebarCollapsedValue = $block.find('.sidebar-collapsed-icon span');\n $sidebarLabelTooltip = $block.find('.js-sidebar-labels-tooltip');\n $value = $block.find('.value');\n $loading = $block.find('.block-loading').fadeOut();\n fieldName = $dropdown.data('field-name');\n useId = $dropdown.is('.js-issuable-form-dropdown, .js-filter-bulk-update, .js-label-sidebar-dropdown');\n propertyName = useId ? 'id' : 'title';\n initialSelected = $selectbox.find('input[name=\"' + $dropdown.data('field-name') + '\"]').map(function () {\n return this.value;\n }).get();\n if (issueUpdateURL != null) {\n issueURLSplit = issueUpdateURL.split('/');\n }\n if (issueUpdateURL) {\n labelHTMLTemplate = __WEBPACK_IMPORTED_MODULE_0_underscore___default.a.template('<% _.each(labels, function(label){ %> issues?label_name[]=<%- encodeURIComponent(label.title) %>\"> \" style=\"background-color: <%- label.color %>; color: <%- label.text_color %>;\"> <%- label.title %> <% }); %>');\n labelNoneHTMLTemplate = '';\n }\n var handleClick = options.handleClick;\n\n $sidebarLabelTooltip.tooltip();\n\n if ($dropdown.closest('.dropdown').find('.dropdown-new-label').length) {\n new __WEBPACK_IMPORTED_MODULE_5__create_label__[\"a\" /* default */]($dropdown.closest('.dropdown').find('.dropdown-new-label'), namespacePath, projectPath);\n }\n\n saveLabelData = function saveLabelData() {\n var data, selected;\n selected = $dropdown.closest('.selectbox').find(\"input[name='\" + fieldName + \"']\").map(function () {\n return this.value;\n }).get();\n\n if (__WEBPACK_IMPORTED_MODULE_0_underscore___default.a.isEqual(initialSelected, selected)) return;\n initialSelected = selected;\n\n data = {};\n data[abilityName] = {};\n data[abilityName].label_ids = selected;\n if (!selected.length) {\n data[abilityName].label_ids = [''];\n }\n $loading.removeClass('hidden').fadeIn();\n $dropdown.trigger('loading.gl.dropdown');\n __WEBPACK_IMPORTED_MODULE_2__lib_utils_axios_utils__[\"a\" /* default */].put(issueUpdateURL, data).then(function (_ref) {\n var data = _ref.data;\n\n var labelCount, template, labelTooltipTitle, labelTitles;\n $loading.fadeOut();\n $dropdown.trigger('loaded.gl.dropdown');\n $selectbox.hide();\n data.issueURLSplit = issueURLSplit;\n labelCount = 0;\n if (data.labels.length) {\n template = labelHTMLTemplate(data);\n labelCount = data.labels.length;\n } else {\n template = labelNoneHTMLTemplate;\n }\n $value.removeAttr('style').html(template);\n $sidebarCollapsedValue.text(labelCount);\n\n if (data.labels.length) {\n labelTitles = data.labels.map(function (label) {\n return label.title;\n });\n\n if (labelTitles.length > 5) {\n labelTitles = labelTitles.slice(0, 5);\n labelTitles.push('and ' + (data.labels.length - 5) + ' more');\n }\n\n labelTooltipTitle = labelTitles.join(', ');\n } else {\n labelTooltipTitle = '';\n $sidebarLabelTooltip.tooltip('destroy');\n }\n\n $sidebarLabelTooltip.attr('title', labelTooltipTitle).tooltip('fixTitle');\n\n $('.has-tooltip', $value).tooltip({\n container: 'body'\n });\n }).catch(function () {\n return Object(__WEBPACK_IMPORTED_MODULE_6__flash__[\"a\" /* default */])(Object(__WEBPACK_IMPORTED_MODULE_1__locale__[\"__\"])('Error saving label update.'));\n });\n };\n $dropdown.glDropdown({\n showMenuAbove: showMenuAbove,\n data: function data(term, callback) {\n __WEBPACK_IMPORTED_MODULE_2__lib_utils_axios_utils__[\"a\" /* default */].get(labelUrl).then(function (res) {\n var data = __WEBPACK_IMPORTED_MODULE_0_underscore___default.a.chain(res.data).groupBy(function (label) {\n return label.title;\n }).map(function (label) {\n var color;\n color = __WEBPACK_IMPORTED_MODULE_0_underscore___default.a.map(label, function (dup) {\n return dup.color;\n });\n return {\n id: label[0].id,\n title: label[0].title,\n color: color,\n duplicate: color.length > 1\n };\n }).value();\n if ($dropdown.hasClass('js-extra-options')) {\n var extraData = [];\n if (showNo) {\n extraData.unshift({\n id: 0,\n title: '没有标记'\n });\n }\n if (showAny) {\n extraData.unshift({\n isAny: true,\n title: '所有标记'\n });\n }\n if (extraData.length) {\n extraData.push('divider');\n data = extraData.concat(data);\n }\n }\n\n callback(data);\n if (showMenuAbove) {\n $dropdown.data('glDropdown').positionMenuAbove();\n }\n }).catch(function () {\n return Object(__WEBPACK_IMPORTED_MODULE_6__flash__[\"a\" /* default */])(Object(__WEBPACK_IMPORTED_MODULE_1__locale__[\"__\"])('Error fetching labels.'));\n });\n },\n renderRow: function renderRow(label, instance) {\n var $a, $li, color, colorEl, indeterminate, removesAll, selectedClass, spacing, i, marked, dropdownName, dropdownValue;\n $li = $('
  • ');\n $a = $('');\n selectedClass = [];\n removesAll = label.id <= 0 || label.id == null;\n if ($dropdown.hasClass('js-filter-bulk-update')) {\n indeterminate = $dropdown.data('indeterminate') || [];\n marked = $dropdown.data('marked') || [];\n\n if (indeterminate.indexOf(label.id) !== -1) {\n selectedClass.push('is-indeterminate');\n }\n\n if (marked.indexOf(label.id) !== -1) {\n // Remove is-indeterminate class if the item will be marked as active\n i = selectedClass.indexOf('is-indeterminate');\n if (i !== -1) {\n selectedClass.splice(i, 1);\n }\n selectedClass.push('is-active');\n }\n } else {\n if (this.id(label)) {\n dropdownName = $dropdown.data('fieldName');\n dropdownValue = this.id(label).toString().replace(/'/g, '\\\\\\'');\n\n if ($form.find(\"input[type='hidden'][name='\" + dropdownName + \"'][value='\" + dropdownValue + \"']\").length) {\n selectedClass.push('is-active');\n }\n }\n\n if ($dropdown.hasClass('js-multiselect') && removesAll) {\n selectedClass.push('dropdown-clear-active');\n }\n }\n if (label.duplicate) {\n color = gl.DropdownUtils.duplicateLabelColor(label.color);\n } else {\n if (label.color != null) {\n color = label.color[0];\n }\n }\n if (color) {\n colorEl = \"\";\n } else {\n colorEl = '';\n }\n // We need to identify which items are actually labels\n if (label.id) {\n selectedClass.push('label-item');\n $a.attr('data-label-id', label.id);\n }\n $a.addClass(selectedClass.join(' ')).html(colorEl + ' ' + __WEBPACK_IMPORTED_MODULE_0_underscore___default.a.escape(label.title));\n // Return generated html\n return $li.html($a).prop('outerHTML');\n },\n search: {\n fields: ['title']\n },\n selectable: true,\n filterable: true,\n selected: $dropdown.data('selected') || [],\n toggleLabel: function toggleLabel(selected, el) {\n var isSelected = el !== null ? el.hasClass('is-active') : false;\n var title = selected.title;\n var selectedLabels = this.selected;\n\n if (selected.id === 0) {\n this.selected = [];\n return '无标记';\n } else if (isSelected) {\n this.selected.push(title);\n } else {\n var index = this.selected.indexOf(title);\n this.selected.splice(index, 1);\n }\n\n if (selectedLabels.length === 1) {\n return selectedLabels;\n } else if (selectedLabels.length) {\n return selectedLabels[0] + \" +\" + (selectedLabels.length - 1) + \" more\";\n } else {\n return defaultLabel;\n }\n },\n fieldName: $dropdown.data('field-name'),\n id: function id(label) {\n if (label.id <= 0) return label.title;\n\n if ($dropdown.hasClass('js-issuable-form-dropdown')) {\n return label.id;\n }\n\n if ($dropdown.hasClass(\"js-filter-submit\") && label.isAny == null) {\n return label.title;\n } else {\n return label.id;\n }\n },\n hidden: function hidden() {\n var isIssueIndex, isMRIndex, page, selectedLabels;\n page = $('body').attr('data-page');\n isIssueIndex = page === 'projects:issues:index';\n isMRIndex = page === 'projects:merge_requests:index';\n $selectbox.hide();\n // display:block overrides the hide-collapse rule\n $value.removeAttr('style');\n\n if ($dropdown.hasClass('js-issuable-form-dropdown')) {\n return;\n }\n\n if ($('html').hasClass('issue-boards-page')) {\n return;\n }\n if ($dropdown.hasClass('js-multiselect')) {\n if ($dropdown.hasClass('js-filter-submit') && (isIssueIndex || isMRIndex)) {\n selectedLabels = $dropdown.closest('form').find(\"input:hidden[name='\" + $dropdown.data('fieldName') + \"']\");\n Issuable.filterResults($dropdown.closest('form'));\n } else if ($dropdown.hasClass('js-filter-submit')) {\n $dropdown.closest('form').submit();\n } else {\n if (!$dropdown.hasClass('js-filter-bulk-update')) {\n saveLabelData();\n }\n }\n }\n },\n multiSelect: $dropdown.hasClass('js-multiselect'),\n vue: $dropdown.hasClass('js-issue-board-sidebar'),\n clicked: function clicked(options) {\n var $el = options.$el,\n e = options.e,\n isMarking = options.isMarking;\n\n var label = options.selectedObj;\n\n var isIssueIndex, isMRIndex, page, boardsModel;\n var fadeOutLoader = function fadeOutLoader() {\n $loading.fadeOut();\n };\n\n page = $('body').attr('data-page');\n isIssueIndex = page === 'projects:issues:index';\n isMRIndex = page === 'projects:merge_requests:index';\n\n if ($dropdown.parent().find('.is-active:not(.dropdown-clear-active)').length) {\n $dropdown.parent().find('.dropdown-clear-active').removeClass('is-active');\n }\n\n if ($dropdown.hasClass('js-issuable-form-dropdown')) {\n return;\n }\n\n if ($dropdown.hasClass('js-filter-bulk-update')) {\n _this.enableBulkLabelDropdown();\n _this.setDropdownData($dropdown, isMarking, label.id);\n return;\n }\n\n if ($dropdown.closest('.add-issues-modal').length) {\n boardsModel = gl.issueBoards.ModalStore.store.filter;\n }\n\n if (boardsModel) {\n if (label.isAny) {\n boardsModel['label_name'] = [];\n } else if ($el.hasClass('is-active')) {\n boardsModel['label_name'].push(label.title);\n }\n\n e.preventDefault();\n return;\n } else if ($dropdown.hasClass('js-filter-submit') && (isIssueIndex || isMRIndex)) {\n if (!$dropdown.hasClass('js-multiselect')) {\n selectedLabel = label.title;\n return Issuable.filterResults($dropdown.closest('form'));\n }\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 ($el.hasClass('is-active')) {\n gl.issueBoards.BoardsStore.detail.issue.labels.push(new ListLabel({\n id: label.id,\n title: label.title,\n color: label.color[0],\n textColor: '#fff'\n }));\n } else {\n var labels = gl.issueBoards.BoardsStore.detail.issue.labels;\n labels = labels.filter(function (selectedLabel) {\n return selectedLabel.id !== label.id;\n });\n gl.issueBoards.BoardsStore.detail.issue.labels = labels;\n }\n\n $loading.fadeIn();\n\n gl.issueBoards.BoardsStore.detail.issue.update($dropdown.attr('data-issue-update')).then(fadeOutLoader).catch(fadeOutLoader);\n } else if (handleClick) {\n e.preventDefault();\n handleClick(label);\n } else {\n if ($dropdown.hasClass('js-multiselect')) {} else {\n return saveLabelData();\n }\n }\n }\n });\n\n // Set dropdown data\n _this.setOriginalDropdownData($dropdownContainer, $dropdown);\n });\n this.bindEvents();\n }\n\n _createClass(LabelsSelect, [{\n key: 'bindEvents',\n value: function bindEvents() {\n return $('body').on('change', '.selected_issue', this.onSelectCheckboxIssue);\n }\n // eslint-disable-next-line class-methods-use-this\n\n }, {\n key: 'onSelectCheckboxIssue',\n value: function onSelectCheckboxIssue() {\n if ($('.selected_issue:checked').length) {\n return;\n }\n return $('.issues-bulk-update .labels-filter .dropdown-toggle-text').text('Label');\n }\n // eslint-disable-next-line class-methods-use-this\n\n }, {\n key: 'enableBulkLabelDropdown',\n value: function enableBulkLabelDropdown() {\n __WEBPACK_IMPORTED_MODULE_3__issuable_bulk_update_actions__[\"a\" /* default */].willUpdateLabels = true;\n }\n // eslint-disable-next-line class-methods-use-this\n\n }, {\n key: 'setDropdownData',\n value: function setDropdownData($dropdown, isMarking, value) {\n var i, markedIds, unmarkedIds, indeterminateIds;\n\n markedIds = $dropdown.data('marked') || [];\n unmarkedIds = $dropdown.data('unmarked') || [];\n indeterminateIds = $dropdown.data('indeterminate') || [];\n\n if (isMarking) {\n markedIds.push(value);\n\n i = indeterminateIds.indexOf(value);\n if (i > -1) {\n indeterminateIds.splice(i, 1);\n }\n\n i = unmarkedIds.indexOf(value);\n if (i > -1) {\n unmarkedIds.splice(i, 1);\n }\n } else {\n // If marked item (not common) is unmarked\n i = markedIds.indexOf(value);\n if (i > -1) {\n markedIds.splice(i, 1);\n }\n\n // If an indeterminate item is being unmarked\n if (__WEBPACK_IMPORTED_MODULE_3__issuable_bulk_update_actions__[\"a\" /* default */].getOriginalIndeterminateIds().indexOf(value) > -1) {\n unmarkedIds.push(value);\n }\n\n // If a marked item is being unmarked\n // (a marked item could also be a label that is present in all selection)\n if (__WEBPACK_IMPORTED_MODULE_3__issuable_bulk_update_actions__[\"a\" /* default */].getOriginalCommonIds().indexOf(value) > -1) {\n unmarkedIds.push(value);\n }\n }\n\n $dropdown.data('marked', markedIds);\n $dropdown.data('unmarked', unmarkedIds);\n $dropdown.data('indeterminate', indeterminateIds);\n }\n // eslint-disable-next-line class-methods-use-this\n\n }, {\n key: 'setOriginalDropdownData',\n value: function setOriginalDropdownData($container, $dropdown) {\n var labels = [];\n $container.find('[name=\"label_name[]\"]').map(function () {\n return labels.push(this.value);\n });\n $dropdown.data('marked', labels);\n }\n }]);\n\n return LabelsSelect;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (LabelsSelect);\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', $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__, \"f\", function() { return getPagePath; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"m\", function() { return isInGroupsPage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"o\", function() { return isInProjectPage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"h\", function() { return getProjectSlug; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"e\", function() { return getGroupSlug; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"n\", function() { return isInIssuePage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return ajaxGet; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"y\", function() { return rstrip; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"D\", function() { return updateTooltipTitle; });\n/* unused harmony export disableButtonIfEmptyField */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"k\", function() { return handleLocationHash; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"p\", function() { return isInViewport; });\n/* unused harmony export parseUrl */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"x\", function() { return parseUrlPathname; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"j\", function() { return getUrlParamsArray; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"r\", function() { return isMetaKey; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"q\", function() { return isMetaClick; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"z\", function() { return scrollToElement; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"g\", function() { return getParameterByName; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"i\", function() { return getSelectedFragment; });\n/* unused harmony export insertText */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"s\", function() { return nodeMatchesSelector; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"u\", function() { return normalizeHeaders; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"t\", function() { return normalizeCRLFHeaders; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"v\", function() { return parseIntPagination; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"w\", function() { return parseQueryStringIntoObject; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"c\", function() { return buildUrlWithCurrentLocation; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"l\", function() { return historyPushState; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"d\", function() { return convertPermissionToBoolean; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return backOff; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"B\", function() { return setFavicon; });\n/* unused harmony export resetFavicon */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"A\", function() { return setCiStatusFavicon; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"C\", function() { return spriteIcon; });\n/* unused harmony export convertObjectPropsToCamelCase */\n/* unused harmony export imagePath */\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__url_utility__ = __webpack_require__(\"./lib/utils/url_utility.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__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\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 isInIssuePage = function isInIssuePage() {\n var page = getPagePath(1);\n var action = getPagePath(2);\n\n return page === 'issues' && action === 'show';\n};\n\nvar ajaxGet = function ajaxGet(url) {\n return __WEBPACK_IMPORTED_MODULE_0__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_1__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($el) {\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\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_0__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_2__text_utility__[\"b\" /* 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\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/datefix.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* unused harmony export pad */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return parsePikadayDate; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return pikadayToString; });\n\nvar pad = function pad(val) {\n var len = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;\n return ('0' + val).slice(-len);\n};\n\n/**\n * Formats dates in Pickaday\n * @param {String} dateString Date in yyyy-mm-dd format\n * @return {Date} UTC format\n */\nvar parsePikadayDate = function parsePikadayDate(dateString) {\n var parts = dateString.split('-');\n var year = parseInt(parts[0], 10);\n var month = parseInt(parts[1] - 1, 10);\n var day = parseInt(parts[2], 10);\n\n return new Date(year, month, day);\n};\n\n/**\n * Used `onSelect` method in pickaday\n * @param {Date} date UTC format\n * @return {String} Date formated in yyyy-mm-dd\n */\nvar pikadayToString = function pikadayToString(date) {\n var day = pad(date.getDate());\n var month = pad(date.getMonth() + 1);\n var year = date.getFullYear();\n\n return year + '-' + month + '-' + day;\n};\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__[\"s__\"])('Jan'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Feb'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Mar'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Apr'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('May'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Jun'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Jul'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Aug'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Sep'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Oct'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Nov'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Dec')];\n }\n return [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('January'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('February'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('March'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('April'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('May'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('June'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('July'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('August'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('September'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('October'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('November'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"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__[\"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__[\"s__\"])('Timeago|less than a minute ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|in a while')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|less than a minute ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|%s seconds remaining')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|about a minute ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|1 minute remaining')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|%s minutes ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|%s minutes remaining')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|about an hour ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|1 hour remaining')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|about %s hours ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|%s hours remaining')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|a day ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|1 day remaining')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|%s days ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|%s days remaining')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|a week ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|1 week remaining')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|%s weeks ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|%s weeks remaining')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|a month ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|1 month remaining')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|%s months ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|%s months remaining')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|a year ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|1 year remaining')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|%s years ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|%s years remaining')]][index];\n };\n var locale = function getLocale(number, index) {\n return [[Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|less than a minute ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|in a while')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|less than a minute ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|in %s seconds')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|about a minute ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|in 1 minute')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|%s minutes ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|in %s minutes')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|about an hour ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|in 1 hour')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|about %s hours ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|in %s hours')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|a day ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|in 1 day')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|%s days ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|in %s days')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|a week ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|in 1 week')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|%s weeks ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|in %s weeks')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|a month ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|in 1 month')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|%s months ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|in %s months')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|a year ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|in 1 year')], [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Timeago|%s years ago'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"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__[\"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__[\"f\" /* pluralize */])('minute', minutes) + ' ' + seconds + ' ' + Object(__WEBPACK_IMPORTED_MODULE_2__text_utility__[\"f\" /* pluralize */])('second', seconds);\n } else {\n text = seconds + ' ' + Object(__WEBPACK_IMPORTED_MODULE_2__text_utility__[\"f\" /* 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__[\"s__\"])('January'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('February'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('March'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('April'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('May'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('June'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('July'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('August'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('September'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('October'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('November'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('December')];\n var monthNamesAbbr = [Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Jan'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Feb'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Mar'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Apr'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('May'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Jun'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Jul'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Aug'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Sep'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Oct'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"s__\"])('Nov'), Object(__WEBPACK_IMPORTED_MODULE_3__locale__[\"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/image_utility.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = isImageLoaded;\n/* eslint-disable import/prefer-default-export */\n\nfunction isImageLoaded(element) {\n return element.complete && element.naturalHeight !== 0;\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/sticky.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* unused harmony export createPlaceholder */\n/* unused harmony export isSticky */\nvar createPlaceholder = function createPlaceholder() {\n var placeholder = document.createElement('div');\n placeholder.classList.add('sticky-placeholder');\n\n return placeholder;\n};\n\nvar isSticky = function isSticky(el, scrollY, stickyTop, insertPlaceholder) {\n var top = Math.floor(el.offsetTop - scrollY);\n\n if (top <= stickyTop && !el.classList.contains('is-stuck')) {\n var placeholder = insertPlaceholder ? createPlaceholder() : null;\n var heightBefore = el.offsetHeight;\n\n el.classList.add('is-stuck');\n\n if (insertPlaceholder) {\n el.parentNode.insertBefore(placeholder, el.nextElementSibling);\n\n placeholder.style.height = heightBefore - el.offsetHeight + 'px';\n }\n } else if (top > stickyTop && el.classList.contains('is-stuck')) {\n el.classList.remove('is-stuck');\n\n if (insertPlaceholder && el.nextElementSibling && el.nextElementSibling.classList.contains('sticky-placeholder')) {\n el.nextElementSibling.remove();\n }\n }\n};\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (function (el, stickyTop) {\n var insertPlaceholder = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n\n if (!el) return;\n\n if (typeof CSS === 'undefined' || !CSS.supports('(position: -webkit-sticky) or (position: sticky)')) return;\n\n document.addEventListener('scroll', function () {\n return isSticky(el, window.scrollY, stickyTop, insertPlaceholder);\n }, {\n passive: true\n });\n});\n\n/***/ }),\n\n/***/ \"./lib/utils/text_markdown.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {/* eslint-disable import/prefer-default-export, func-names, space-before-function-paren, wrap-iife, no-var, no-param-reassign, no-cond-assign, quotes, one-var, one-var-declaration-per-line, operator-assignment, no-else-return, prefer-template, prefer-arrow-callback, no-empty, max-len, consistent-return, no-unused-vars, no-return-assign, max-len, vars-on-top */\n\nvar textUtils = {};\n\ntextUtils.selectedText = function (text, textarea) {\n return text.substring(textarea.selectionStart, textarea.selectionEnd);\n};\n\ntextUtils.lineBefore = function (text, textarea) {\n var split;\n split = text.substring(0, textarea.selectionStart).trim().split('\\n');\n return split[split.length - 1];\n};\n\ntextUtils.lineAfter = function (text, textarea) {\n return text.substring(textarea.selectionEnd).trim().split('\\n')[0];\n};\n\ntextUtils.blockTagText = function (text, textArea, blockTag, selected) {\n var lineAfter, lineBefore;\n lineBefore = this.lineBefore(text, textArea);\n lineAfter = this.lineAfter(text, textArea);\n if (lineBefore === blockTag && lineAfter === blockTag) {\n // To remove the block tag we have to select the line before & after\n if (blockTag != null) {\n textArea.selectionStart = textArea.selectionStart - (blockTag.length + 1);\n textArea.selectionEnd = textArea.selectionEnd + (blockTag.length + 1);\n }\n return selected;\n } else {\n return blockTag + \"\\n\" + selected + \"\\n\" + blockTag;\n }\n};\n\ntextUtils.insertText = function (textArea, text, tag, blockTag, selected, wrap) {\n var insertText, inserted, selectedSplit, startChar, removedLastNewLine, removedFirstNewLine, currentLineEmpty, lastNewLine;\n removedLastNewLine = false;\n removedFirstNewLine = false;\n currentLineEmpty = false;\n\n // Remove the first newline\n if (selected.indexOf('\\n') === 0) {\n removedFirstNewLine = true;\n selected = selected.replace(/\\n+/, '');\n }\n\n // Remove the last newline\n if (textArea.selectionEnd - textArea.selectionStart > selected.replace(/\\n$/, '').length) {\n removedLastNewLine = true;\n selected = selected.replace(/\\n$/, '');\n }\n\n selectedSplit = selected.split('\\n');\n\n if (!wrap) {\n lastNewLine = textArea.value.substr(0, textArea.selectionStart).lastIndexOf('\\n');\n\n // Check whether the current line is empty or consists only of spaces(=handle as empty)\n if (/^\\s*$/.test(textArea.value.substring(lastNewLine, textArea.selectionStart))) {\n currentLineEmpty = true;\n }\n }\n\n startChar = !wrap && !currentLineEmpty && textArea.selectionStart > 0 ? '\\n' : '';\n\n if (selectedSplit.length > 1 && (!wrap || blockTag != null && blockTag !== '')) {\n if (blockTag != null && blockTag !== '') {\n insertText = this.blockTagText(text, textArea, blockTag, selected);\n } else {\n insertText = selectedSplit.map(function (val) {\n if (val.indexOf(tag) === 0) {\n return \"\" + val.replace(tag, '');\n } else {\n return \"\" + tag + val;\n }\n }).join('\\n');\n }\n } else {\n insertText = \"\" + startChar + tag + selected + (wrap ? tag : ' ');\n }\n\n if (removedFirstNewLine) {\n insertText = '\\n' + insertText;\n }\n\n if (removedLastNewLine) {\n insertText += '\\n';\n }\n\n if (document.queryCommandSupported('insertText')) {\n inserted = document.execCommand('insertText', false, insertText);\n }\n if (!inserted) {\n try {\n document.execCommand(\"ms-beginUndoUnit\");\n } catch (error) {}\n textArea.value = this.replaceRange(text, textArea.selectionStart, textArea.selectionEnd, insertText);\n try {\n document.execCommand(\"ms-endUndoUnit\");\n } catch (error) {}\n }\n return this.moveCursor(textArea, tag, wrap, removedLastNewLine);\n};\n\ntextUtils.moveCursor = function (textArea, tag, wrapped, removedLastNewLine) {\n var pos;\n if (!textArea.setSelectionRange) {\n return;\n }\n if (textArea.selectionStart === textArea.selectionEnd) {\n if (wrapped) {\n pos = textArea.selectionStart - tag.length;\n } else {\n pos = textArea.selectionStart;\n }\n\n if (removedLastNewLine) {\n pos -= 1;\n }\n\n return textArea.setSelectionRange(pos, pos);\n }\n};\n\ntextUtils.updateText = function (textArea, tag, blockTag, wrap) {\n var $textArea, selected, text;\n $textArea = $(textArea);\n textArea = $textArea.get(0);\n text = $textArea.val();\n selected = this.selectedText(text, textArea);\n $textArea.focus();\n return this.insertText(textArea, text, tag, blockTag, selected, wrap);\n};\n\ntextUtils.init = function (form) {\n var self;\n self = this;\n return $('.js-md', form).off('click').on('click', function () {\n var $this;\n $this = $(this);\n return self.updateText($this.closest('.md-area').find('textarea'), $this.data('md-tag'), $this.data('md-block'), !$this.data('md-prepend'));\n });\n};\n\ntextUtils.removeListeners = function (form) {\n return $('.js-md', form).off('click');\n};\n\ntextUtils.replaceRange = function (s, start, end, substitute) {\n return s.substring(0, start) + substitute + s.substring(end);\n};\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (textUtils);\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\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__, \"d\", function() { return highCountTrim; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"e\", function() { return humanize; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"f\", function() { return pluralize; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"c\", function() { return dasherize; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"g\", function() { return slugify; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"i\", function() { return truncate; });\n/* unused harmony export capitalizeFirstCharacter */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"h\", function() { return stripHtml; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return convertToCamelCase; });\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\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\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\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__, \"languageCode\", function() { return languageCode; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__\", function() { return gettext; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"n__\", function() { return ngettext; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"s__\", function() { return pgettext; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createDateTimeFormat\", function() { return createDateTimeFormat; });\n/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, \"sprintf\", 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 = __webpack_exports__[\"default\"] = (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// eslint-disable-next-line global-require, import/no-commonjs\nif (false) require('./test_utils/');\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__[\"k\" /* handleLocationHash */]);\nwindow.addEventListener('load', function onLoad() {\n window.removeEventListener('load', onLoad, false);\n Object(__WEBPACK_IMPORTED_MODULE_3__lib_utils_common_utils__[\"k\" /* handleLocationHash */])();\n}, false);\n\ngl.lazyLoader = new __WEBPACK_IMPORTED_MODULE_16__lazy_loader__[\"a\" /* default */]({\n scrollContainer: window,\n observerNode: '#content-body'\n});\n\n$(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__[\"k\" /* 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 // Click a .js-select-on-focus field, select the contents\n // Prevent a mouseup event from deselecting the input\n $('.js-select-on-focus').on('focusin', function selectOnFocusCallback() {\n $(this).select().one('mouseup', function (e) {\n e.preventDefault();\n });\n });\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('confirm-danger-message');\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/***/ \"./merge_request.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_vendor_jquery_waitforimages__ = __webpack_require__(\"../../../vendor/assets/javascripts/jquery.waitforimages.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_vendor_jquery_waitforimages___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_vendor_jquery_waitforimages__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__locale__ = __webpack_require__(\"./locale/index.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__task_list__ = __webpack_require__(\"./task_list.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__merge_request_tabs__ = __webpack_require__(\"./merge_request_tabs.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__helpers_issuables_helper__ = __webpack_require__(\"./helpers/issuables_helper.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__lib_utils_text_utility__ = __webpack_require__(\"./lib/utils/text_utility.js\");\n/* eslint-disable func-names, space-before-function-paren, no-var, prefer-rest-params, wrap-iife, quotes, no-underscore-dangle, one-var, one-var-declaration-per-line, consistent-return, dot-notation, quote-props, comma-dangle, object-shorthand, max-len, prefer-arrow-callback */\n\n\n\n\n\n\n\n\nfunction MergeRequest(opts) {\n // Initialize MergeRequest behavior\n //\n // Options:\n // action - String, current controller action\n //\n this.opts = opts != null ? opts : {};\n this.submitNoteForm = this.submitNoteForm.bind(this);\n this.$el = $('.merge-request');\n this.$('.show-all-commits').on('click', function (_this) {\n return function () {\n return _this.showAllCommits();\n };\n }(this));\n\n this.initTabs();\n this.initMRBtnListeners();\n this.initCommitMessageListeners();\n this.closeReopenReportToggle = __WEBPACK_IMPORTED_MODULE_4__helpers_issuables_helper__[\"a\" /* default */].initCloseReopenReport();\n\n if ($(\"a.btn-close\").length) {\n this.taskList = new __WEBPACK_IMPORTED_MODULE_2__task_list__[\"a\" /* default */]({\n dataType: 'merge_request',\n fieldName: 'description',\n selector: '.detail-page-description',\n onSuccess: function onSuccess(result) {\n document.querySelector('#task_status').innerText = result.task_status;\n document.querySelector('#task_status_short').innerText = result.task_status_short;\n }\n });\n }\n}\n\n// Local jQuery finder\nMergeRequest.prototype.$ = function (selector) {\n return this.$el.find(selector);\n};\n\nMergeRequest.prototype.initTabs = function () {\n if (window.mrTabs) {\n window.mrTabs.unbindEvents();\n }\n window.mrTabs = new __WEBPACK_IMPORTED_MODULE_3__merge_request_tabs__[\"a\" /* default */](this.opts);\n};\n\nMergeRequest.prototype.showAllCommits = function () {\n this.$('.first-commits').remove();\n return this.$('.all-commits').removeClass('hide');\n};\n\nMergeRequest.prototype.initMRBtnListeners = function () {\n var _this;\n _this = this;\n return $('a.btn-close, a.btn-reopen').on('click', function (e) {\n var $this, shouldSubmit;\n $this = $(this);\n shouldSubmit = $this.hasClass('btn-comment');\n if (shouldSubmit && $this.data('submitted')) {\n return;\n }\n\n if (this.closeReopenReportToggle) this.closeReopenReportToggle.setDisable();\n\n if (shouldSubmit) {\n if ($this.hasClass('btn-comment-and-close') || $this.hasClass('btn-comment-and-reopen')) {\n e.preventDefault();\n e.stopImmediatePropagation();\n\n _this.submitNoteForm($this.closest('form'), $this);\n }\n }\n });\n};\n\nMergeRequest.prototype.submitNoteForm = function (form, $button) {\n var noteText;\n noteText = form.find(\"textarea.js-note-text\").val();\n if (noteText.trim().length > 0) {\n form.submit();\n $button.data('submitted', true);\n return $button.trigger('click');\n }\n};\n\nMergeRequest.prototype.initCommitMessageListeners = function () {\n $(document).on('click', 'a.js-with-description-link', function (e) {\n var textarea = $('textarea.js-commit-message');\n e.preventDefault();\n\n textarea.val(textarea.data('messageWithDescription'));\n $('.js-with-description-hint').hide();\n $('.js-without-description-hint').show();\n });\n\n $(document).on('click', 'a.js-without-description-link', function (e) {\n var textarea = $('textarea.js-commit-message');\n e.preventDefault();\n\n textarea.val(textarea.data('messageWithoutDescription'));\n $('.js-with-description-hint').show();\n $('.js-without-description-hint').hide();\n });\n};\n\nMergeRequest.setStatusBoxToMerged = function () {\n $('.detail-page-header .status-box').removeClass('status-box-open').addClass('status-box-mr-merged').find('span').text(Object(__WEBPACK_IMPORTED_MODULE_1__locale__[\"__\"])('Merged'));\n};\n\nMergeRequest.decreaseCounter = function () {\n var by = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n\n var $el = $('.js-merge-counter');\n var count = Math.max(parseInt($el.text().replace(/[^\\d]/, ''), 10) - by, 0);\n\n $el.text(Object(__WEBPACK_IMPORTED_MODULE_5__lib_utils_text_utility__[\"a\" /* addDelimiter */])(count));\n};\n\nMergeRequest.hideCloseButton = function () {\n var el = document.querySelector('.merge-request .js-issuable-actions');\n var closeDropdownItem = el.querySelector('li.close-item');\n if (closeDropdownItem) {\n closeDropdownItem.classList.add('hidden');\n // Selects the next dropdown item\n el.querySelector('li.report-item').click();\n } else {\n // No dropdown just hide the Close button\n el.querySelector('.btn-close').classList.add('hidden');\n }\n // Dropdown for mobile screen\n el.querySelector('li.js-close-item').classList.add('hidden');\n};\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (MergeRequest);\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\n\n/***/ }),\n\n/***/ \"./merge_request_tabs.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_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__lib_utils_axios_utils__ = __webpack_require__(\"./lib/utils/axios_utils.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__flash__ = __webpack_require__(\"./flash.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__blob_blob_fork_suggestion__ = __webpack_require__(\"./blob/blob_fork_suggestion.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__init_changes_dropdown__ = __webpack_require__(\"./init_changes_dropdown.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__breakpoints__ = __webpack_require__(\"./breakpoints.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__lib_utils_common_utils__ = __webpack_require__(\"./lib/utils/common_utils.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__lib_utils_url_utility__ = __webpack_require__(\"./lib/utils/url_utility.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__image_diff_init_discussion_tab__ = __webpack_require__(\"./image_diff/init_discussion_tab.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__diff__ = __webpack_require__(\"./diff.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__lib_utils_datetime_utility__ = __webpack_require__(\"./lib/utils/datetime_utility.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__syntax_highlight__ = __webpack_require__(\"./syntax_highlight.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__notes__ = __webpack_require__(\"./notes.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-new, class-methods-use-this */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/* eslint-disable max-len */\n// MergeRequestTabs\n//\n// Handles persisting and restoring the current tab selection and lazily-loading\n// content on the MergeRequests#show page.\n//\n// ### Example Markup\n//\n//
    \n//\n//
    \n//
    \n// Notes Content\n//
    \n//
    \n// Commits Content\n//
    \n//
    \n// Diffs Content\n//
    \n//
    \n//\n//
    \n//
    \n// Loading Animation\n//
    \n//
    \n//\n/* eslint-enable max-len */\n\n// Store the `location` object, allowing for easier stubbing in tests\nvar location = window.location;\n\nvar MergeRequestTabs = function () {\n function MergeRequestTabs() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n action = _ref.action,\n setUrl = _ref.setUrl,\n stubLocation = _ref.stubLocation;\n\n _classCallCheck(this, MergeRequestTabs);\n\n var mergeRequestTabs = document.querySelector('.js-tabs-affix');\n var navbar = document.querySelector('.navbar-gitlab');\n var paddingTop = 16;\n\n this.diffsLoaded = false;\n this.pipelinesLoaded = false;\n this.commitsLoaded = false;\n this.fixedLayoutPref = null;\n\n this.setUrl = setUrl !== undefined ? setUrl : true;\n this.setCurrentAction = this.setCurrentAction.bind(this);\n this.tabShown = this.tabShown.bind(this);\n this.showTab = this.showTab.bind(this);\n this.stickyTop = navbar ? navbar.offsetHeight - paddingTop : 0;\n\n if (mergeRequestTabs) {\n this.stickyTop += mergeRequestTabs.offsetHeight;\n }\n\n if (stubLocation) {\n location = stubLocation;\n }\n\n this.bindEvents();\n this.activateTab(action);\n this.initAffix();\n }\n\n _createClass(MergeRequestTabs, [{\n key: 'bindEvents',\n value: function bindEvents() {\n $(document).on('shown.bs.tab', '.merge-request-tabs a[data-toggle=\"tab\"]', this.tabShown).on('click', '.js-show-tab', this.showTab);\n\n $('.merge-request-tabs a[data-toggle=\"tab\"]').on('click', this.clickTab);\n }\n\n // Used in tests\n\n }, {\n key: 'unbindEvents',\n value: function unbindEvents() {\n $(document).off('shown.bs.tab', '.merge-request-tabs a[data-toggle=\"tab\"]', this.tabShown).off('click', '.js-show-tab', this.showTab);\n\n $('.merge-request-tabs a[data-toggle=\"tab\"]').off('click', this.clickTab);\n }\n }, {\n key: 'destroyPipelinesView',\n value: function destroyPipelinesView() {\n if (this.commitPipelinesTable) {\n this.commitPipelinesTable.$destroy();\n this.commitPipelinesTable = null;\n\n document.querySelector('#commit-pipeline-table-view').innerHTML = '';\n }\n }\n }, {\n key: 'showTab',\n value: function showTab(e) {\n e.preventDefault();\n this.activateTab($(e.target).data('action'));\n }\n }, {\n key: 'clickTab',\n value: function clickTab(e) {\n if (e.currentTarget && Object(__WEBPACK_IMPORTED_MODULE_6__lib_utils_common_utils__[\"q\" /* isMetaClick */])(e)) {\n var targetLink = e.currentTarget.getAttribute('href');\n e.stopImmediatePropagation();\n e.preventDefault();\n window.open(targetLink, '_blank');\n }\n }\n }, {\n key: 'tabShown',\n value: function tabShown(e) {\n var $target = $(e.target);\n var action = $target.data('action');\n\n if (action === 'commits') {\n this.loadCommits($target.attr('href'));\n this.expandView();\n this.resetViewContainer();\n this.destroyPipelinesView();\n } else if (this.isDiffAction(action)) {\n this.loadDiff($target.attr('href'));\n if (__WEBPACK_IMPORTED_MODULE_5__breakpoints__[\"a\" /* default */].getBreakpointSize() !== 'lg') {\n this.shrinkView();\n }\n if (this.diffViewType() === 'parallel') {\n this.expandViewContainer();\n }\n this.destroyPipelinesView();\n } else if (action === 'pipelines') {\n this.resetViewContainer();\n this.mountPipelinesView();\n } else {\n if (__WEBPACK_IMPORTED_MODULE_5__breakpoints__[\"a\" /* default */].getBreakpointSize() !== 'xs') {\n this.expandView();\n }\n this.resetViewContainer();\n this.destroyPipelinesView();\n\n Object(__WEBPACK_IMPORTED_MODULE_8__image_diff_init_discussion_tab__[\"a\" /* default */])();\n }\n if (this.setUrl) {\n this.setCurrentAction(action);\n }\n }\n }, {\n key: 'scrollToElement',\n value: function scrollToElement(container) {\n if (location.hash) {\n var offset = 0 - ($('.navbar-gitlab').outerHeight() + $('.js-tabs-affix').outerHeight());\n var $el = $(container + ' ' + location.hash + ':not(.match)');\n if ($el.length) {\n $.scrollTo($el[0], { offset: offset });\n }\n }\n }\n\n // Activate a tab based on the current action\n\n }, {\n key: 'activateTab',\n value: function activateTab(action) {\n // important note: the .tab('show') method triggers 'shown.bs.tab' event itself\n $('.merge-request-tabs a[data-action=\\'' + action + '\\']').tab('show');\n }\n\n // Replaces the current Merge Request-specific action in the URL with a new one\n //\n // If the action is \"notes\", the URL is reset to the standard\n // `MergeRequests#show` route.\n //\n // Examples:\n //\n // location.pathname # => \"/namespace/project/merge_requests/1\"\n // setCurrentAction('diffs')\n // location.pathname # => \"/namespace/project/merge_requests/1/diffs\"\n //\n // location.pathname # => \"/namespace/project/merge_requests/1/diffs\"\n // setCurrentAction('show')\n // location.pathname # => \"/namespace/project/merge_requests/1\"\n //\n // location.pathname # => \"/namespace/project/merge_requests/1/diffs\"\n // setCurrentAction('commits')\n // location.pathname # => \"/namespace/project/merge_requests/1/commits\"\n //\n // Returns the new URL String\n\n }, {\n key: 'setCurrentAction',\n value: function setCurrentAction(action) {\n this.currentAction = action;\n\n // Remove a trailing '/commits' '/diffs' '/pipelines'\n var newState = location.pathname.replace(/\\/(commits|diffs|pipelines)(\\.html)?\\/?$/, '');\n\n // Append the new action if we're on a tab other than 'notes'\n if (this.currentAction !== 'show' && this.currentAction !== 'new') {\n newState += '/' + this.currentAction;\n }\n\n // Ensure parameters and hash come along for the ride\n newState += location.search + location.hash;\n\n // TODO: Consider refactoring in light of turbolinks removal.\n\n // Replace the current history state with the new one without breaking\n // Turbolinks' history.\n //\n // See https://github.com/rails/turbolinks/issues/363\n window.history.replaceState({\n url: newState\n }, document.title, newState);\n\n return newState;\n }\n }, {\n key: 'loadCommits',\n value: function loadCommits(source) {\n var _this = this;\n\n if (this.commitsLoaded) {\n return;\n }\n\n this.toggleLoading(true);\n\n __WEBPACK_IMPORTED_MODULE_1__lib_utils_axios_utils__[\"a\" /* default */].get(source + '.json').then(function (_ref2) {\n var data = _ref2.data;\n\n document.querySelector('div#commits').innerHTML = data.html;\n Object(__WEBPACK_IMPORTED_MODULE_10__lib_utils_datetime_utility__[\"e\" /* localTimeAgo */])($('.js-timeago', 'div#commits'));\n _this.commitsLoaded = true;\n _this.scrollToElement('#commits');\n\n _this.toggleLoading(false);\n }).catch(function () {\n _this.toggleLoading(false);\n Object(__WEBPACK_IMPORTED_MODULE_2__flash__[\"a\" /* default */])('An error occurred while fetching this tab.');\n });\n }\n }, {\n key: 'mountPipelinesView',\n value: function mountPipelinesView() {\n var pipelineTableViewEl = document.querySelector('#commit-pipeline-table-view');\n var CommitPipelinesTable = gl.CommitPipelinesTable;\n this.commitPipelinesTable = new CommitPipelinesTable({\n propsData: {\n endpoint: pipelineTableViewEl.dataset.endpoint,\n helpPagePath: pipelineTableViewEl.dataset.helpPagePath,\n emptyStateSvgPath: pipelineTableViewEl.dataset.emptyStateSvgPath,\n errorStateSvgPath: pipelineTableViewEl.dataset.errorStateSvgPath,\n autoDevopsHelpPath: pipelineTableViewEl.dataset.helpAutoDevopsPath\n }\n }).$mount();\n\n // $mount(el) replaces the el with the new rendered component. We need it in order to mount\n // it everytime this tab is clicked - https://vuejs.org/v2/api/#vm-mount\n pipelineTableViewEl.appendChild(this.commitPipelinesTable.$el);\n }\n }, {\n key: 'loadDiff',\n value: function loadDiff(source) {\n var _this2 = this;\n\n if (this.diffsLoaded) {\n document.dispatchEvent(new CustomEvent('scroll'));\n return;\n }\n\n // We extract pathname for the current Changes tab anchor href\n // some pages like MergeRequestsController#new has query parameters on that anchor\n var urlPathname = Object(__WEBPACK_IMPORTED_MODULE_6__lib_utils_common_utils__[\"x\" /* parseUrlPathname */])(source);\n\n this.toggleLoading(true);\n\n __WEBPACK_IMPORTED_MODULE_1__lib_utils_axios_utils__[\"a\" /* default */].get(urlPathname + '.json' + location.search).then(function (_ref3) {\n var data = _ref3.data;\n\n var $container = $('#diffs');\n $container.html(data.html);\n\n Object(__WEBPACK_IMPORTED_MODULE_4__init_changes_dropdown__[\"a\" /* default */])(_this2.stickyTop);\n\n if (typeof gl.diffNotesCompileComponents !== 'undefined') {\n gl.diffNotesCompileComponents();\n }\n\n Object(__WEBPACK_IMPORTED_MODULE_10__lib_utils_datetime_utility__[\"e\" /* localTimeAgo */])($('.js-timeago', 'div#diffs'));\n Object(__WEBPACK_IMPORTED_MODULE_11__syntax_highlight__[\"a\" /* default */])($('#diffs .js-syntax-highlight'));\n\n if (_this2.diffViewType() === 'parallel' && _this2.isDiffAction(_this2.currentAction)) {\n _this2.expandViewContainer();\n }\n _this2.diffsLoaded = true;\n\n new __WEBPACK_IMPORTED_MODULE_9__diff__[\"a\" /* default */]();\n _this2.scrollToElement('#diffs');\n\n $('.diff-file').each(function (i, el) {\n new __WEBPACK_IMPORTED_MODULE_3__blob_blob_fork_suggestion__[\"a\" /* default */]({\n openButtons: $(el).find('.js-edit-blob-link-fork-toggler'),\n forkButtons: $(el).find('.js-fork-suggestion-button'),\n cancelButtons: $(el).find('.js-cancel-fork-suggestion-button'),\n suggestionSections: $(el).find('.js-file-fork-suggestion-section'),\n actionTextPieces: $(el).find('.js-file-fork-suggestion-section-action')\n }).init();\n });\n\n // Scroll any linked note into view\n // Similar to `toggler_behavior` in the discussion tab\n var hash = Object(__WEBPACK_IMPORTED_MODULE_7__lib_utils_url_utility__[\"a\" /* getLocationHash */])();\n var anchor = hash && $container.find('.note[id=\"' + hash + '\"]');\n if (anchor && anchor.length > 0) {\n var notesContent = anchor.closest('.notes_content');\n var lineType = notesContent.hasClass('new') ? 'new' : 'old';\n __WEBPACK_IMPORTED_MODULE_12__notes__[\"a\" /* default */].instance.toggleDiffNote({\n target: anchor,\n lineType: lineType,\n forceShow: true\n });\n anchor[0].scrollIntoView();\n Object(__WEBPACK_IMPORTED_MODULE_6__lib_utils_common_utils__[\"k\" /* handleLocationHash */])();\n // We have multiple elements on the page with `#note_xxx`\n // (discussion and diff tabs) and `:target` only applies to the first\n anchor.addClass('target');\n }\n\n _this2.toggleLoading(false);\n }).catch(function () {\n _this2.toggleLoading(false);\n Object(__WEBPACK_IMPORTED_MODULE_2__flash__[\"a\" /* default */])('An error occurred while fetching this tab.');\n });\n }\n\n // Show or hide the loading spinner\n //\n // status - Boolean, true to show, false to hide\n\n }, {\n key: 'toggleLoading',\n value: function toggleLoading(status) {\n $('.mr-loading-status .loading').toggle(status);\n }\n }, {\n key: 'diffViewType',\n value: function diffViewType() {\n return $('.inline-parallel-buttons a.active').data('view-type');\n }\n }, {\n key: 'isDiffAction',\n value: function isDiffAction(action) {\n return action === 'diffs' || action === 'new/diffs';\n }\n }, {\n key: 'expandViewContainer',\n value: function expandViewContainer() {\n var $wrapper = $('.content-wrapper .container-fluid').not('.breadcrumbs');\n if (this.fixedLayoutPref === null) {\n this.fixedLayoutPref = $wrapper.hasClass('container-limited');\n }\n $wrapper.removeClass('container-limited');\n }\n }, {\n key: 'resetViewContainer',\n value: function resetViewContainer() {\n if (this.fixedLayoutPref !== null) {\n $('.content-wrapper .container-fluid').toggleClass('container-limited', this.fixedLayoutPref);\n }\n }\n }, {\n key: 'shrinkView',\n value: function shrinkView() {\n var $gutterIcon = $('.js-sidebar-toggle i:visible');\n\n // Wait until listeners are set\n setTimeout(function () {\n // Only when sidebar is expanded\n if ($gutterIcon.is('.fa-angle-double-right')) {\n $gutterIcon.closest('a').trigger('click', [true]);\n }\n }, 0);\n }\n\n // Expand the issuable sidebar unless the user explicitly collapsed it\n\n }, {\n key: 'expandView',\n value: function expandView() {\n if (__WEBPACK_IMPORTED_MODULE_0_js_cookie___default.a.get('collapsed_gutter') === 'true') {\n return;\n }\n var $gutterIcon = $('.js-sidebar-toggle i:visible');\n\n // Wait until listeners are set\n setTimeout(function () {\n // Only when sidebar is collapsed\n if ($gutterIcon.is('.fa-angle-double-left')) {\n $gutterIcon.closest('a').trigger('click', [true]);\n }\n }, 0);\n }\n }, {\n key: 'initAffix',\n value: function initAffix() {\n var $tabs = $('.js-tabs-affix');\n var $fixedNav = $('.navbar-gitlab');\n\n // Screen space on small screens is usually very sparse\n // So we dont affix the tabs on these\n if (__WEBPACK_IMPORTED_MODULE_5__breakpoints__[\"a\" /* default */].getBreakpointSize() === 'xs' || !$tabs.length) return;\n\n /**\n If the browser does not support position sticky, it returns the position as static.\n If the browser does support sticky, then we allow the browser to handle it, if not\n then we default back to Bootstraps affix\n **/\n if ($tabs.css('position') !== 'static') return;\n\n var $diffTabs = $('#diff-notes-app');\n\n $tabs.off('affix.bs.affix affix-top.bs.affix').affix({\n offset: {\n top: function top() {\n return $diffTabs.offset().top - $tabs.height() - $fixedNav.height();\n }\n }\n }).on('affix.bs.affix', function () {\n return $diffTabs.css({ marginTop: $tabs.height() });\n }).on('affix-top.bs.affix', function () {\n return $diffTabs.css({ marginTop: '' });\n });\n\n // Fix bug when reloading the page already scrolling\n if ($tabs.hasClass('affix')) {\n $tabs.trigger('affix.bs.affix');\n }\n }\n }]);\n\n return MergeRequestTabs;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (MergeRequestTabs);\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('project-id');\n var milestonesUrl = $dropdown.data('milestones');\n var issueUpdateURL = $dropdown.data('issueUpdate');\n var showNo = $dropdown.data('show-no');\n var showAny = $dropdown.data('show-any');\n var showMenuAbove = $dropdown.data('showMenuAbove');\n var showUpcoming = $dropdown.data('show-upcoming');\n var showStarted = $dropdown.data('show-started');\n var useId = $dropdown.data('use-id');\n var defaultLabel = $dropdown.data('default-label');\n var defaultNo = $dropdown.data('default-no');\n var issuableId = $dropdown.data('issuable-id');\n var abilityName = $dropdown.data('ability-name');\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\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('field-name'),\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('field-name')] = 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 });\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/***/ \"./notes.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n\n// EXTERNAL MODULE: /opt/gitlab/embedded/service/gitlab-rails/node_modules/jquery/dist/jquery.js\nvar jquery = __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\");\nvar jquery_default = /*#__PURE__*/__webpack_require__.n(jquery);\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/js-cookie/src/js.cookie.js\nvar js_cookie = __webpack_require__(\"../../../node_modules/js-cookie/src/js.cookie.js\");\nvar js_cookie_default = /*#__PURE__*/__webpack_require__.n(js_cookie);\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// EXTERNAL MODULE: /opt/gitlab/embedded/service/gitlab-rails/vendor/assets/javascripts/jquery.caret.js\nvar jquery_caret = __webpack_require__(\"../../../vendor/assets/javascripts/jquery.caret.js\");\nvar jquery_caret_default = /*#__PURE__*/__webpack_require__.n(jquery_caret);\n\n// EXTERNAL MODULE: /opt/gitlab/embedded/service/gitlab-rails/vendor/assets/javascripts/jquery.atwho.js\nvar jquery_atwho = __webpack_require__(\"../../../vendor/assets/javascripts/jquery.atwho.js\");\nvar jquery_atwho_default = /*#__PURE__*/__webpack_require__.n(jquery_atwho);\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/axios_utils.js\nvar axios_utils = __webpack_require__(\"./lib/utils/axios_utils.js\");\n\n// EXTERNAL MODULE: ./lib/utils/url_utility.js\nvar url_utility = __webpack_require__(\"./lib/utils/url_utility.js\");\n\n// EXTERNAL MODULE: ./flash.js\nvar flash = __webpack_require__(\"./flash.js\");\n\n// EXTERNAL MODULE: ./droplab/drop_lab.js + 7 modules\nvar drop_lab = __webpack_require__(\"./droplab/drop_lab.js\");\n\n// EXTERNAL MODULE: ./droplab/plugins/input_setter.js\nvar input_setter = __webpack_require__(\"./droplab/plugins/input_setter.js\");\n\n// CONCATENATED MODULE: ./comment_type_toggle.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// Todo: Remove this when fixing issue in input_setter plugin\nvar InputSetter = Object.assign({}, input_setter[\"a\" /* default */]);\n\nvar comment_type_toggle_CommentTypeToggle = function () {\n function CommentTypeToggle() {\n var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, CommentTypeToggle);\n\n this.dropdownTrigger = opts.dropdownTrigger;\n this.dropdownList = opts.dropdownList;\n this.noteTypeInput = opts.noteTypeInput;\n this.submitButton = opts.submitButton;\n this.closeButton = opts.closeButton;\n this.reopenButton = opts.reopenButton;\n }\n\n _createClass(CommentTypeToggle, [{\n key: 'initDroplab',\n value: function initDroplab() {\n this.droplab = new drop_lab[\"a\" /* default */]();\n\n var config = this.setConfig();\n\n this.droplab.init(this.dropdownTrigger, this.dropdownList, [InputSetter], config);\n }\n }, {\n key: 'setConfig',\n value: function setConfig() {\n var config = {\n InputSetter: [{\n input: this.noteTypeInput,\n valueAttribute: 'data-value'\n }, {\n input: this.submitButton,\n valueAttribute: 'data-submit-text'\n }]\n };\n\n if (this.closeButton) {\n config.InputSetter.push({\n input: this.closeButton,\n valueAttribute: 'data-close-text'\n }, {\n input: this.closeButton,\n valueAttribute: 'data-close-text',\n inputAttribute: 'data-alternative-text'\n });\n }\n\n if (this.reopenButton) {\n config.InputSetter.push({\n input: this.reopenButton,\n valueAttribute: 'data-reopen-text'\n }, {\n input: this.reopenButton,\n valueAttribute: 'data-reopen-text',\n inputAttribute: 'data-alternative-text'\n });\n }\n\n return config;\n }\n }]);\n\n return CommentTypeToggle;\n}();\n\n/* harmony default export */ var comment_type_toggle = (comment_type_toggle_CommentTypeToggle);\n// EXTERNAL MODULE: ./gl_form.js\nvar gl_form = __webpack_require__(\"./gl_form.js\");\n\n// EXTERNAL MODULE: ./awards_handler.js\nvar awards_handler = __webpack_require__(\"./awards_handler.js\");\n\n// EXTERNAL MODULE: ./autosave.js\nvar autosave = __webpack_require__(\"./autosave.js\");\n\n// EXTERNAL MODULE: ./task_list.js\nvar task_list = __webpack_require__(\"./task_list.js\");\n\n// EXTERNAL MODULE: ./lib/utils/common_utils.js\nvar common_utils = __webpack_require__(\"./lib/utils/common_utils.js\");\n\n// EXTERNAL MODULE: ./image_diff/helpers/index.js + 6 modules\nvar helpers = __webpack_require__(\"./image_diff/helpers/index.js\");\n\n// EXTERNAL MODULE: ./lib/utils/datetime_utility.js\nvar datetime_utility = __webpack_require__(\"./lib/utils/datetime_utility.js\");\n\n// CONCATENATED MODULE: ./notes.js\nvar notes__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 notes__classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/* eslint-disable no-restricted-properties, func-names, space-before-function-paren,\nno-var, prefer-rest-params, wrap-iife, no-use-before-define, camelcase,\nno-unused-expressions, quotes, max-len, one-var, one-var-declaration-per-line,\ndefault-case, prefer-template, consistent-return, no-alert, no-return-assign,\nno-param-reassign, prefer-arrow-callback, no-else-return, comma-dangle, no-new,\nbrace-style, no-lonely-if, vars-on-top, no-unused-vars, no-sequences, no-shadow,\nnewline-per-chained-call, no-useless-escape, class-methods-use-this */\n\n/* global ResolveService */\n/* global mrRefreshWidgetUrl */\n\n\n\n\n\n // required by jquery.atwho\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nwindow.autosize = autosize_default.a;\n\nfunction normalizeNewlines(str) {\n return str.replace(/\\r\\n/g, '\\n');\n}\n\nvar MAX_VISIBLE_COMMIT_LIST_COUNT = 3;\nvar REGEX_QUICK_ACTIONS = /^\\/\\w+.*$/gm;\n\nvar notes_Notes = function () {\n notes__createClass(Notes, null, [{\n key: 'initialize',\n value: function initialize(notes_url, note_ids, last_fetched_at, view) {\n var enableGFM = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n\n if (!this.instance) {\n this.instance = new Notes(notes_url, note_ids, last_fetched_at, view, enableGFM);\n }\n }\n }]);\n\n function Notes(notes_url, note_ids, last_fetched_at, view) {\n var enableGFM = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n\n notes__classCallCheck(this, Notes);\n\n this.updateTargetButtons = this.updateTargetButtons.bind(this);\n this.updateComment = this.updateComment.bind(this);\n this.visibilityChange = this.visibilityChange.bind(this);\n this.cancelDiscussionForm = this.cancelDiscussionForm.bind(this);\n this.onAddDiffNote = this.onAddDiffNote.bind(this);\n this.onAddImageDiffNote = this.onAddImageDiffNote.bind(this);\n this.setupDiscussionNoteForm = this.setupDiscussionNoteForm.bind(this);\n this.onReplyToDiscussionNote = this.onReplyToDiscussionNote.bind(this);\n this.removeNote = this.removeNote.bind(this);\n this.cancelEdit = this.cancelEdit.bind(this);\n this.updateNote = this.updateNote.bind(this);\n this.addDiscussionNote = this.addDiscussionNote.bind(this);\n this.addNoteError = this.addNoteError.bind(this);\n this.addNote = this.addNote.bind(this);\n this.resetMainTargetForm = this.resetMainTargetForm.bind(this);\n this.refresh = this.refresh.bind(this);\n this.keydownNoteText = this.keydownNoteText.bind(this);\n this.toggleCommitList = this.toggleCommitList.bind(this);\n this.postComment = this.postComment.bind(this);\n this.clearFlashWrapper = this.clearFlash.bind(this);\n this.onHashChange = this.onHashChange.bind(this);\n\n this.notes_url = notes_url;\n this.note_ids = note_ids;\n this.enableGFM = enableGFM;\n // Used to keep track of updated notes while people are editing things\n this.updatedNotesTrackingMap = {};\n this.last_fetched_at = last_fetched_at;\n this.noteable_url = document.URL;\n this.notesCountBadge || (this.notesCountBadge = jquery_default()('.issuable-details').find('.notes-tab .badge'));\n this.basePollingInterval = 15000;\n this.maxPollingSteps = 4;\n\n this.cleanBinding();\n this.addBinding();\n this.setPollingInterval();\n this.setupMainTargetNoteForm();\n this.taskList = new task_list[\"a\" /* default */]({\n dataType: 'note',\n fieldName: 'note',\n selector: '.notes'\n });\n this.collapseLongCommitList();\n this.setViewType(view);\n\n // We are in the Merge Requests page so we need another edit form for Changes tab\n if (Object(common_utils[\"f\" /* getPagePath */])(1) === 'merge_requests') {\n jquery_default()('.note-edit-form').clone().addClass('mr-note-edit-form').insertAfter('.note-edit-form');\n }\n }\n\n notes__createClass(Notes, [{\n key: 'setViewType',\n value: function setViewType(view) {\n this.view = js_cookie_default.a.get('diff_view') || view;\n }\n }, {\n key: 'addBinding',\n value: function addBinding() {\n // Edit note link\n jquery_default()(document).on('click', '.js-note-edit', this.showEditForm.bind(this));\n jquery_default()(document).on('click', '.note-edit-cancel', this.cancelEdit);\n // Reopen and close actions for Issue/MR combined with note form submit\n jquery_default()(document).on('click', '.js-comment-submit-button', this.postComment);\n jquery_default()(document).on('click', '.js-comment-save-button', this.updateComment);\n jquery_default()(document).on('keyup input', '.js-note-text', this.updateTargetButtons);\n // resolve a discussion\n jquery_default()(document).on('click', '.js-comment-resolve-button', this.postComment);\n // remove a note (in general)\n jquery_default()(document).on('click', '.js-note-delete', this.removeNote);\n // delete note attachment\n jquery_default()(document).on('click', '.js-note-attachment-delete', this.removeAttachment);\n // reset main target form when clicking discard\n jquery_default()(document).on('click', '.js-note-discard', this.resetMainTargetForm);\n // update the file name when an attachment is selected\n jquery_default()(document).on('change', '.js-note-attachment-input', this.updateFormAttachment);\n // reply to diff/discussion notes\n jquery_default()(document).on('click', '.js-discussion-reply-button', this.onReplyToDiscussionNote);\n // add diff note\n jquery_default()(document).on('click', '.js-add-diff-note-button', this.onAddDiffNote);\n // add diff note for images\n jquery_default()(document).on('click', '.js-add-image-diff-note-button', this.onAddImageDiffNote);\n // hide diff note form\n jquery_default()(document).on('click', '.js-close-discussion-note-form', this.cancelDiscussionForm);\n // toggle commit list\n jquery_default()(document).on('click', '.system-note-commit-list-toggler', this.toggleCommitList);\n // fetch notes when tab becomes visible\n jquery_default()(document).on('visibilitychange', this.visibilityChange);\n // when issue status changes, we need to refresh data\n jquery_default()(document).on('issuable:change', this.refresh);\n // ajax:events that happen on Form when actions like Reopen, Close are performed on Issues and MRs.\n jquery_default()(document).on('ajax:success', '.js-main-target-form', this.addNote);\n jquery_default()(document).on('ajax:success', '.js-discussion-note-form', this.addDiscussionNote);\n jquery_default()(document).on('ajax:success', '.js-main-target-form', this.resetMainTargetForm);\n jquery_default()(document).on('ajax:complete', '.js-main-target-form', this.reenableTargetFormSubmitButton);\n // when a key is clicked on the notes\n jquery_default()(document).on('keydown', '.js-note-text', this.keydownNoteText);\n // When the URL fragment/hash has changed, `#note_xxx`\n return jquery_default()(window).on('hashchange', this.onHashChange);\n }\n }, {\n key: 'cleanBinding',\n value: function cleanBinding() {\n jquery_default()(document).off('click', '.js-note-edit');\n jquery_default()(document).off('click', '.note-edit-cancel');\n jquery_default()(document).off('click', '.js-note-delete');\n jquery_default()(document).off('click', '.js-note-attachment-delete');\n jquery_default()(document).off('click', '.js-discussion-reply-button');\n jquery_default()(document).off('click', '.js-add-diff-note-button');\n jquery_default()(document).off('click', '.js-add-image-diff-note-button');\n jquery_default()(document).off('visibilitychange');\n jquery_default()(document).off('keyup input', '.js-note-text');\n jquery_default()(document).off('click', '.js-note-target-reopen');\n jquery_default()(document).off('click', '.js-note-target-close');\n jquery_default()(document).off('click', '.js-note-discard');\n jquery_default()(document).off('keydown', '.js-note-text');\n jquery_default()(document).off('click', '.js-comment-resolve-button');\n jquery_default()(document).off('click', '.system-note-commit-list-toggler');\n jquery_default()(document).off('ajax:success', '.js-main-target-form');\n jquery_default()(document).off('ajax:success', '.js-discussion-note-form');\n jquery_default()(document).off('ajax:complete', '.js-main-target-form');\n jquery_default()(window).off('hashchange', this.onHashChange);\n }\n }, {\n key: 'keydownNoteText',\n value: function keydownNoteText(e) {\n var $textarea, discussionNoteForm, editNote, myLastNote, myLastNoteEditBtn, newText, originalText;\n if (Object(common_utils[\"r\" /* isMetaKey */])(e)) {\n return;\n }\n\n $textarea = jquery_default()(e.target);\n // Edit previous note when UP arrow is hit\n switch (e.which) {\n case 38:\n if ($textarea.val() !== '') {\n return;\n }\n myLastNote = jquery_default()('li.note[data-author-id=\\'' + gon.current_user_id + '\\'][data-editable]:last', $textarea.closest('.note, .notes_holder, #notes'));\n if (myLastNote.length) {\n myLastNoteEditBtn = myLastNote.find('.js-note-edit');\n return myLastNoteEditBtn.trigger('click', [true, myLastNote]);\n }\n break;\n // Cancel creating diff note or editing any note when ESCAPE is hit\n case 27:\n discussionNoteForm = $textarea.closest('.js-discussion-note-form');\n if (discussionNoteForm.length) {\n if ($textarea.val() !== '') {\n if (!confirm('您确定要取消发表评论?')) {\n return;\n }\n }\n this.removeDiscussionNoteForm(discussionNoteForm);\n return;\n }\n editNote = $textarea.closest('.note');\n if (editNote.length) {\n originalText = $textarea.closest('form').data('original-note');\n newText = $textarea.val();\n if (originalText !== newText) {\n if (!confirm('您确定要取消编辑评论?')) {\n return;\n }\n }\n return this.removeNoteEditForm(editNote);\n }\n }\n }\n }, {\n key: 'initRefresh',\n value: function initRefresh() {\n if (Notes.interval) {\n clearInterval(Notes.interval);\n }\n return Notes.interval = setInterval(function (_this) {\n return function () {\n return _this.refresh();\n };\n }(this), this.pollingInterval);\n }\n }, {\n key: 'refresh',\n value: function refresh() {\n if (!document.hidden) {\n return this.getContent();\n }\n }\n }, {\n key: 'getContent',\n value: function getContent() {\n var _this2 = this;\n\n if (this.refreshing) {\n return;\n }\n this.refreshing = true;\n axios_utils[\"a\" /* default */].get(this.notes_url, {\n headers: {\n 'X-Last-Fetched-At': this.last_fetched_at\n }\n }).then(function (_ref) {\n var data = _ref.data;\n\n var notes = data.notes;\n _this2.last_fetched_at = data.last_fetched_at;\n _this2.setPollingInterval(data.notes.length);\n jquery_default.a.each(notes, function (i, note) {\n return _this2.renderNote(note);\n });\n\n _this2.refreshing = false;\n }).catch(function () {\n _this2.refreshing = false;\n });\n }\n\n /**\n * Increase @pollingInterval up to 120 seconds on every function call,\n * if `shouldReset` has a truthy value, 'null' or 'undefined' the variable\n * will reset to @basePollingInterval.\n *\n * Note: this function is used to gradually increase the polling interval\n * if there aren't new notes coming from the server\n */\n\n }, {\n key: 'setPollingInterval',\n value: function setPollingInterval(shouldReset) {\n var nthInterval;\n if (shouldReset == null) {\n shouldReset = true;\n }\n nthInterval = this.basePollingInterval * Math.pow(2, this.maxPollingSteps - 1);\n if (shouldReset) {\n this.pollingInterval = this.basePollingInterval;\n } else if (this.pollingInterval < nthInterval) {\n this.pollingInterval *= 2;\n }\n return this.initRefresh();\n }\n }, {\n key: 'handleQuickActions',\n value: function handleQuickActions(noteEntity) {\n var votesBlock;\n if (noteEntity.commands_changes) {\n if ('merge' in noteEntity.commands_changes) {\n Notes.checkMergeRequestStatus();\n }\n\n if ('emoji_award' in noteEntity.commands_changes) {\n votesBlock = jquery_default()('.js-awards-block').eq(0);\n\n Object(awards_handler[\"a\" /* default */])().then(function (awardsHandler) {\n awardsHandler.addAwardToEmojiBar(votesBlock, noteEntity.commands_changes.emoji_award);\n awardsHandler.scrollToAwards();\n }).catch(function () {\n // ignore\n });\n }\n }\n }\n }, {\n key: 'setupNewNote',\n value: function setupNewNote($note) {\n // Update datetime format on the recent note\n Object(datetime_utility[\"e\" /* localTimeAgo */])($note.find('.js-timeago'), false);\n\n this.collapseLongCommitList();\n this.taskList.init();\n\n // This stops the note highlight, #note_xxx`, from being removed after real time update\n // The `:target` selector does not re-evaluate after we replace element in the DOM\n Notes.updateNoteTargetSelector($note);\n this.$noteToCleanHighlight = $note;\n }\n }, {\n key: 'onHashChange',\n value: function onHashChange() {\n if (this.$noteToCleanHighlight) {\n Notes.updateNoteTargetSelector(this.$noteToCleanHighlight);\n }\n\n this.$noteToCleanHighlight = null;\n }\n }, {\n key: 'renderNote',\n\n\n /**\n * Render note in main comments area.\n *\n * Note: for rendering inline notes use renderDiscussionNote\n */\n value: function renderNote(noteEntity, $form) {\n var $notesList = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : jquery_default()('.main-notes-list');\n\n if (noteEntity.discussion_html) {\n return this.renderDiscussionNote(noteEntity, $form);\n }\n\n if (!noteEntity.valid) {\n if (noteEntity.errors.commands_only) {\n if (noteEntity.commands_changes && Object.keys(noteEntity.commands_changes).length > 0) {\n $notesList.find('.system-note.being-posted').remove();\n }\n this.addFlash(noteEntity.errors.commands_only, 'notice', this.parentTimeline.get(0));\n this.refresh();\n }\n return;\n }\n\n var $note = $notesList.find('#note_' + noteEntity.id);\n if (Notes.isNewNote(noteEntity, this.note_ids)) {\n this.note_ids.push(noteEntity.id);\n\n if ($notesList.length) {\n $notesList.find('.system-note.being-posted').remove();\n }\n var $newNote = Notes.animateAppendNote(noteEntity.html, $notesList);\n\n this.setupNewNote($newNote);\n this.refresh();\n return this.updateNotesCount(1);\n }\n // The server can send the same update multiple times so we need to make sure to only update once per actual update.\n else if (Notes.isUpdatedNote(noteEntity, $note)) {\n var isEditing = $note.hasClass('is-editing');\n var initialContent = normalizeNewlines($note.find('.original-note-content').text().trim());\n var $textarea = $note.find('.js-note-text');\n var currentContent = $textarea.val();\n // There can be CRLF vs LF mismatches if we don't sanitize and compare the same way\n var sanitizedNoteNote = normalizeNewlines(noteEntity.note);\n var isTextareaUntouched = currentContent === initialContent || currentContent === sanitizedNoteNote;\n\n if (isEditing && isTextareaUntouched) {\n $textarea.val(noteEntity.note);\n this.updatedNotesTrackingMap[noteEntity.id] = noteEntity;\n } else if (isEditing && !isTextareaUntouched) {\n this.putConflictEditWarningInPlace(noteEntity, $note);\n this.updatedNotesTrackingMap[noteEntity.id] = noteEntity;\n } else {\n var $updatedNote = Notes.animateUpdateNote(noteEntity.html, $note);\n this.setupNewNote($updatedNote);\n }\n }\n }\n }, {\n key: 'isParallelView',\n value: function isParallelView() {\n return js_cookie_default.a.get('diff_view') === 'parallel';\n }\n\n /**\n * Render note in discussion area.\n *\n * Note: for rendering inline notes use renderDiscussionNote\n */\n\n }, {\n key: 'renderDiscussionNote',\n value: function renderDiscussionNote(noteEntity, $form) {\n var discussionContainer, form, row, lineType, diffAvatarContainer;\n if (!Notes.isNewNote(noteEntity, this.note_ids)) {\n return;\n }\n this.note_ids.push(noteEntity.id);\n\n form = $form || jquery_default()('.js-discussion-note-form[data-discussion-id=\"' + noteEntity.discussion_id + '\"]');\n row = form.length || !noteEntity.discussion_line_code ? form.closest('tr') : jquery_default()('#' + noteEntity.discussion_line_code);\n\n if (noteEntity.on_image) {\n row = form;\n }\n\n lineType = this.isParallelView() ? form.find('#line_type').val() : 'old';\n diffAvatarContainer = row.prevAll('.line_holder').first().find('.js-avatar-container.' + lineType + '_line');\n // is this the first note of discussion?\n discussionContainer = jquery_default()('.notes[data-discussion-id=\"' + noteEntity.discussion_id + '\"]');\n if (!discussionContainer.length) {\n discussionContainer = form.closest('.discussion').find('.notes');\n }\n if (discussionContainer.length === 0) {\n if (noteEntity.diff_discussion_html) {\n var $discussion = jquery_default()(noteEntity.diff_discussion_html).renderGFM();\n\n if (!this.isParallelView() || row.hasClass('js-temp-notes-holder') || noteEntity.on_image) {\n // insert the note and the reply button after the temp row\n row.after($discussion);\n } else {\n // Merge new discussion HTML in\n var $notes = $discussion.find('.notes[data-discussion-id=\"' + noteEntity.discussion_id + '\"]');\n var contentContainerClass = '.' + $notes.closest('.notes_content').attr('class').split(' ').join('.');\n\n row.find(contentContainerClass + ' .content').append($notes.closest('.content').children());\n }\n }\n // Init discussion on 'Discussion' page if it is merge request page\n var page = jquery_default()('body').attr('data-page');\n if (page && page.indexOf('projects:merge_request') !== -1 || !noteEntity.diff_discussion_html) {\n Notes.animateAppendNote(noteEntity.discussion_html, jquery_default()('.main-notes-list'));\n }\n } else {\n // append new note to all matching discussions\n Notes.animateAppendNote(noteEntity.html, discussionContainer);\n }\n\n if (typeof gl.diffNotesCompileComponents !== 'undefined' && noteEntity.discussion_resolvable) {\n gl.diffNotesCompileComponents();\n\n this.renderDiscussionAvatar(diffAvatarContainer, noteEntity);\n }\n\n Object(datetime_utility[\"e\" /* localTimeAgo */])(jquery_default()('.js-timeago'), false);\n Notes.checkMergeRequestStatus();\n return this.updateNotesCount(1);\n }\n }, {\n key: 'getLineHolder',\n value: function getLineHolder(changesDiscussionContainer) {\n return jquery_default()(changesDiscussionContainer).closest('.notes_holder').prevAll('.line_holder').first().get(0);\n }\n }, {\n key: 'renderDiscussionAvatar',\n value: function renderDiscussionAvatar(diffAvatarContainer, noteEntity) {\n var avatarHolder = diffAvatarContainer.find('.diff-comment-avatar-holders');\n\n if (!avatarHolder.length) {\n avatarHolder = document.createElement('diff-note-avatars');\n avatarHolder.setAttribute('discussion-id', noteEntity.discussion_id);\n\n diffAvatarContainer.append(avatarHolder);\n\n gl.diffNotesCompileComponents();\n }\n }\n\n /**\n * Called in response the main target form has been successfully submitted.\n *\n * Removes any errors.\n * Resets text and preview.\n * Resets buttons.\n */\n\n }, {\n key: 'resetMainTargetForm',\n value: function resetMainTargetForm(e) {\n var form;\n form = jquery_default()('.js-main-target-form');\n // remove validation errors\n form.find('.js-errors').remove();\n // reset text and preview\n form.find('.js-md-write-button').click();\n form.find('.js-note-text').val('').trigger('input');\n form.find('.js-note-text').data('autosave').reset();\n\n var event = document.createEvent('Event');\n event.initEvent('autosize:update', true, false);\n form.find('.js-autosize')[0].dispatchEvent(event);\n\n this.updateTargetButtons(e);\n }\n }, {\n key: 'reenableTargetFormSubmitButton',\n value: function reenableTargetFormSubmitButton() {\n var form;\n form = jquery_default()('.js-main-target-form');\n return form.find('.js-note-text').trigger('input');\n }\n\n /**\n * Shows the main form and does some setup on it.\n *\n * Sets some hidden fields in the form.\n */\n\n }, {\n key: 'setupMainTargetNoteForm',\n value: function setupMainTargetNoteForm() {\n var form;\n // find the form\n form = jquery_default()('.js-new-note-form');\n // Set a global clone of the form for later cloning\n this.formClone = form.clone();\n // show the form\n this.setupNoteForm(form);\n // fix classes\n form.removeClass('js-new-note-form');\n form.addClass('js-main-target-form');\n form.find('#note_line_code').remove();\n form.find('#note_position').remove();\n form.find('#note_type').val('');\n form.find('#note_project_id').remove();\n form.find('#in_reply_to_discussion_id').remove();\n form.find('.js-comment-resolve-button').closest('comment-and-resolve-btn').remove();\n this.parentTimeline = form.parents('.timeline');\n\n if (form.length) {\n Notes.initCommentTypeToggle(form.get(0));\n }\n }\n\n /**\n * General note form setup.\n *\n * deactivates the submit button when text is empty\n * hides the preview button when text is empty\n * setup GFM auto complete\n * show the form\n */\n\n }, {\n key: 'setupNoteForm',\n value: function setupNoteForm(form) {\n var textarea, key;\n this.glForm = new gl_form[\"a\" /* default */](form, this.enableGFM);\n textarea = form.find('.js-note-text');\n key = ['Note', form.find('#note_noteable_type').val(), form.find('#note_noteable_id').val(), form.find('#note_commit_id').val(), form.find('#note_type').val(), form.find('#note_project_id').val(), form.find('#in_reply_to_discussion_id').val(),\n\n // LegacyDiffNote\n form.find('#note_line_code').val(),\n\n // DiffNote\n form.find('#note_position').val()];\n return new autosave[\"a\" /* default */](textarea, key);\n }\n\n /**\n * Called in response to the new note form being submitted\n *\n * Adds new note to list.\n */\n\n }, {\n key: 'addNote',\n value: function addNote($form, note) {\n return this.renderNote(note);\n }\n }, {\n key: 'addNoteError',\n value: function addNoteError($form) {\n var formParentTimeline = void 0;\n if ($form.hasClass('js-main-target-form')) {\n formParentTimeline = $form.parents('.timeline');\n } else if ($form.hasClass('js-discussion-note-form')) {\n formParentTimeline = $form.closest('.discussion-notes').find('.notes');\n }\n return this.addFlash('Your comment could not be submitted! Please check your network connection and try again.', 'alert', formParentTimeline.get(0));\n }\n }, {\n key: 'updateNoteError',\n value: function updateNoteError($parentTimeline) {\n new flash[\"a\" /* default */]('Your comment could not be updated! Please check your network connection and try again.');\n }\n\n /**\n * Called in response to the new note form being submitted\n *\n * Adds new note to list.\n */\n\n }, {\n key: 'addDiscussionNote',\n value: function addDiscussionNote($form, note, isNewDiffComment) {\n if ($form.attr('data-resolve-all') != null) {\n var projectPath = $form.data('project-path');\n var discussionId = $form.data('discussion-id');\n var mergeRequestId = $form.data('noteable-iid');\n\n if (ResolveService != null) {\n ResolveService.toggleResolveForDiscussion(mergeRequestId, discussionId);\n }\n }\n\n this.renderNote(note, $form);\n // cleanup after successfully creating a diff/discussion note\n if (isNewDiffComment) {\n this.removeDiscussionNoteForm($form);\n }\n }\n\n /**\n * Called in response to the edit note form being submitted\n *\n * Updates the current note field.\n */\n\n }, {\n key: 'updateNote',\n value: function updateNote(noteEntity, $targetNote) {\n var $noteEntityEl, $note_li;\n // Convert returned HTML to a jQuery object so we can modify it further\n $noteEntityEl = jquery_default()(noteEntity.html);\n $noteEntityEl.addClass('fade-in-full');\n this.revertNoteEditForm($targetNote);\n $noteEntityEl.renderGFM();\n // Find the note's `li` element by ID and replace it with the updated HTML\n $note_li = jquery_default()('.note-row-' + noteEntity.id);\n\n $note_li.replaceWith($noteEntityEl);\n this.setupNewNote($noteEntityEl);\n\n if (typeof gl.diffNotesCompileComponents !== 'undefined') {\n gl.diffNotesCompileComponents();\n }\n }\n }, {\n key: 'checkContentToAllowEditing',\n value: function checkContentToAllowEditing($el) {\n var initialContent = $el.find('.original-note-content').text().trim();\n var currentContent = $el.find('.js-note-text').val();\n var isAllowed = true;\n\n if (currentContent === initialContent) {\n this.removeNoteEditForm($el);\n } else {\n var $buttons = $el.find('.note-form-actions');\n var isWidgetVisible = Object(common_utils[\"p\" /* isInViewport */])($el.get(0));\n\n if (!isWidgetVisible) {\n Object(common_utils[\"z\" /* scrollToElement */])($el);\n }\n\n $el.find('.js-finish-edit-warning').show();\n isAllowed = false;\n }\n\n return isAllowed;\n }\n\n /**\n * Called in response to clicking the edit note link\n *\n * Replaces the note text with the note edit form\n * Adds a data attribute to the form with the original content of the note for cancellations\n */\n\n }, {\n key: 'showEditForm',\n value: function showEditForm(e, scrollTo, myLastNote) {\n e.preventDefault();\n\n var $target = jquery_default()(e.target);\n var $editForm = jquery_default()(this.getEditFormSelector($target));\n var $note = $target.closest('.note');\n var $currentlyEditing = jquery_default()('.note.is-editing:visible');\n\n if ($currentlyEditing.length) {\n var isEditAllowed = this.checkContentToAllowEditing($currentlyEditing);\n\n if (!isEditAllowed) {\n return;\n }\n }\n\n $note.find('.js-note-attachment-delete').show();\n $editForm.addClass('current-note-edit-form');\n $note.addClass('is-editing');\n this.putEditFormInPlace($target);\n }\n\n /**\n * Called in response to clicking the edit note link\n *\n * Hides edit form and restores the original note text to the editor textarea.\n */\n\n }, {\n key: 'cancelEdit',\n value: function cancelEdit(e) {\n e.preventDefault();\n var $target = jquery_default()(e.target);\n var $note = $target.closest('.note');\n var noteId = $note.attr('data-note-id');\n\n this.revertNoteEditForm($target);\n\n if (this.updatedNotesTrackingMap[noteId]) {\n var $newNote = jquery_default()(this.updatedNotesTrackingMap[noteId].html);\n $note.replaceWith($newNote);\n this.setupNewNote($newNote);\n // Now that we have taken care of the update, clear it out\n delete this.updatedNotesTrackingMap[noteId];\n } else {\n $note.find('.js-finish-edit-warning').hide();\n this.removeNoteEditForm($note);\n }\n }\n }, {\n key: 'revertNoteEditForm',\n value: function revertNoteEditForm($target) {\n $target = $target || jquery_default()('.note.is-editing:visible');\n var selector = this.getEditFormSelector($target);\n var $editForm = jquery_default()(selector);\n\n $editForm.insertBefore('.notes-form');\n $editForm.find('.js-comment-save-button').enable();\n $editForm.find('.js-finish-edit-warning').hide();\n }\n }, {\n key: 'getEditFormSelector',\n value: function getEditFormSelector($el) {\n var selector = '.note-edit-form:not(.mr-note-edit-form)';\n\n if ($el.parents('#diffs').length) {\n selector = '.note-edit-form.mr-note-edit-form';\n }\n\n return selector;\n }\n }, {\n key: 'removeNoteEditForm',\n value: function removeNoteEditForm($note) {\n var form = $note.find('.current-note-edit-form');\n $note.removeClass('is-editing');\n form.removeClass('current-note-edit-form');\n form.find('.js-finish-edit-warning').hide();\n // Replace markdown textarea text with original note text.\n return form.find('.js-note-text').val(form.find('form.edit-note').data('original-note'));\n }\n\n /**\n * Called in response to deleting a note of any kind.\n *\n * Removes the actual note from view.\n * Removes the whole discussion if the last note is being removed.\n */\n\n }, {\n key: 'removeNote',\n value: function removeNote(e) {\n var noteElId, noteId, dataNoteId, $note, lineHolder;\n $note = jquery_default()(e.currentTarget).closest('.note');\n noteElId = $note.attr('id');\n noteId = $note.attr('data-note-id');\n lineHolder = jquery_default()(e.currentTarget).closest('.notes[data-discussion-id]').closest('.notes_holder').prev('.line_holder');\n jquery_default()('.note[id=\"' + noteElId + '\"]').each(function (_this) {\n // A same note appears in the \"Discussion\" and in the \"Changes\" tab, we have\n // to remove all. Using $('.note[id='noteId']') ensure we get all the notes,\n // where $('#noteId') would return only one.\n return function (i, el) {\n var $note, $notes;\n $note = jquery_default()(el);\n $notes = $note.closest('.discussion-notes');\n var discussionId = jquery_default()('.notes', $notes).data('discussion-id');\n\n if (typeof gl.diffNotesCompileComponents !== 'undefined') {\n if (gl.diffNoteApps[noteElId]) {\n gl.diffNoteApps[noteElId].$destroy();\n }\n }\n\n $note.remove();\n\n // check if this is the last note for this line\n if ($notes.find('.note').length === 0) {\n var notesTr = $notes.closest('tr');\n\n // \"Discussions\" tab\n $notes.closest('.timeline-entry').remove();\n\n jquery_default()('.js-diff-avatars-' + discussionId).trigger('remove.vue');\n\n // The notes tr can contain multiple lists of notes, like on the parallel diff\n // notesTr does not exist for image diffs\n if (notesTr.find('.discussion-notes').length > 1 || notesTr.length === 0) {\n var $diffFile = $notes.closest('.diff-file');\n if ($diffFile.length > 0) {\n var removeBadgeEvent = new CustomEvent('removeBadge.imageDiff', {\n detail: {\n // badgeNumber's start with 1 and index starts with 0\n badgeNumber: $notes.index() + 1\n }\n });\n\n $diffFile[0].dispatchEvent(removeBadgeEvent);\n }\n\n $notes.remove();\n } else if (notesTr.length > 0) {\n notesTr.remove();\n }\n }\n };\n }(this));\n\n Notes.checkMergeRequestStatus();\n return this.updateNotesCount(-1);\n }\n\n /**\n * Called in response to clicking the delete attachment link\n *\n * Removes the attachment wrapper view, including image tag if it exists\n * Resets the note editing form\n */\n\n }, {\n key: 'removeAttachment',\n value: function removeAttachment() {\n var $note = jquery_default()(this).closest('.note');\n $note.find('.note-attachment').remove();\n $note.find('.note-body > .note-text').show();\n $note.find('.note-header').show();\n return $note.find('.current-note-edit-form').remove();\n }\n\n /**\n * Called when clicking on the \"reply\" button for a diff line.\n *\n * Shows the note form below the notes.\n */\n\n }, {\n key: 'onReplyToDiscussionNote',\n value: function onReplyToDiscussionNote(e) {\n this.replyToDiscussionNote(e.target);\n }\n }, {\n key: 'replyToDiscussionNote',\n value: function replyToDiscussionNote(target) {\n var form, replyLink;\n form = this.cleanForm(this.formClone.clone());\n replyLink = jquery_default()(target).closest('.js-discussion-reply-button');\n // insert the form after the button\n replyLink.closest('.discussion-reply-holder').hide().after(form);\n // show the form\n return this.setupDiscussionNoteForm(replyLink, form);\n }\n\n /**\n * Shows the diff or discussion form and does some setup on it.\n *\n * Sets some hidden fields in the form.\n *\n * Note: dataHolder must have the \"discussionId\" and \"lineCode\" data attributes set.\n */\n\n }, {\n key: 'setupDiscussionNoteForm',\n value: function setupDiscussionNoteForm(dataHolder, form) {\n // setup note target\n var diffFileData = dataHolder.closest('.text-file');\n\n if (diffFileData.length === 0) {\n diffFileData = dataHolder.closest('.image');\n }\n\n var discussionID = dataHolder.data('discussionId');\n\n if (discussionID) {\n form.attr('data-discussion-id', discussionID);\n form.find('#in_reply_to_discussion_id').val(discussionID);\n }\n\n form.find('#note_project_id').val(dataHolder.data('discussionProjectId'));\n\n form.attr('data-line-code', dataHolder.data('lineCode'));\n form.find('#line_type').val(dataHolder.data('lineType'));\n\n form.find('#note_noteable_type').val(diffFileData.data('noteableType'));\n form.find('#note_noteable_id').val(diffFileData.data('noteableId'));\n form.find('#note_commit_id').val(diffFileData.data('commitId'));\n\n form.find('#note_type').val(dataHolder.data('noteType'));\n\n // LegacyDiffNote\n form.find('#note_line_code').val(dataHolder.data('lineCode'));\n\n // DiffNote\n form.find('#note_position').val(dataHolder.attr('data-position'));\n\n form.find('.js-note-discard').show().removeClass('js-note-discard').addClass('js-close-discussion-note-form').text(form.find('.js-close-discussion-note-form').data('cancel-text'));\n form.find('.js-note-target-close').remove();\n form.find('.js-note-new-discussion').remove();\n this.setupNoteForm(form);\n\n form.removeClass('js-main-target-form').addClass('discussion-form js-discussion-note-form');\n\n if (typeof gl.diffNotesCompileComponents !== 'undefined') {\n var $commentBtn = form.find('comment-and-resolve-btn');\n $commentBtn.attr(':discussion-id', '\\'' + discussionID + '\\'');\n\n gl.diffNotesCompileComponents();\n }\n\n form.find('.js-note-text').focus();\n form.find('.js-comment-resolve-button').attr('data-discussion-id', discussionID);\n }\n\n /**\n * Called when clicking on the \"add a comment\" button on the side of a diff line.\n *\n * Inserts a temporary row for the form below the line.\n * Sets up the form and shows it.\n */\n\n }, {\n key: 'onAddDiffNote',\n value: function onAddDiffNote(e) {\n e.preventDefault();\n var link = e.currentTarget || e.target;\n var $link = jquery_default()(link);\n var showReplyInput = !$link.hasClass('js-diff-comment-avatar');\n this.toggleDiffNote({\n target: $link,\n lineType: link.dataset.lineType,\n showReplyInput: showReplyInput\n });\n }\n }, {\n key: 'onAddImageDiffNote',\n value: function onAddImageDiffNote(e) {\n var $link = jquery_default()(e.currentTarget || e.target);\n var $diffFile = $link.closest('.diff-file');\n\n var clickEvent = new CustomEvent('click.imageDiff', {\n detail: e\n });\n\n $diffFile[0].dispatchEvent(clickEvent);\n\n // Setup comment form\n var newForm = void 0;\n var $noteContainer = $link.closest('.diff-viewer').find('.note-container');\n var $form = $noteContainer.find('> .discussion-form');\n\n if ($form.length === 0) {\n newForm = this.cleanForm(this.formClone.clone());\n newForm.appendTo($noteContainer);\n } else {\n newForm = $form;\n }\n\n this.setupDiscussionNoteForm($link, newForm);\n }\n }, {\n key: 'toggleDiffNote',\n value: function toggleDiffNote(_ref2) {\n var target = _ref2.target,\n lineType = _ref2.lineType,\n forceShow = _ref2.forceShow,\n _ref2$showReplyInput = _ref2.showReplyInput,\n showReplyInput = _ref2$showReplyInput === undefined ? false : _ref2$showReplyInput;\n\n var $link, addForm, hasNotes, newForm, noteForm, replyButton, row, rowCssToAdd, targetContent, isDiffCommentAvatar;\n $link = jquery_default()(target);\n row = $link.closest('tr');\n var nextRow = row.next();\n var targetRow = row;\n if (nextRow.is('.notes_holder')) {\n targetRow = nextRow;\n }\n\n hasNotes = nextRow.is('.notes_holder');\n addForm = false;\n var lineTypeSelector = '';\n rowCssToAdd = '
    ';\n // In parallel view, look inside the correct left/right pane\n if (this.isParallelView()) {\n lineTypeSelector = '.' + lineType;\n rowCssToAdd = '
    ';\n }\n var notesContentSelector = '.notes_content' + lineTypeSelector + ' .content';\n var notesContent = targetRow.find(notesContentSelector);\n\n if (hasNotes && showReplyInput) {\n targetRow.show();\n notesContent = targetRow.find(notesContentSelector);\n if (notesContent.length) {\n notesContent.show();\n replyButton = notesContent.find('.js-discussion-reply-button:visible');\n if (replyButton.length) {\n this.replyToDiscussionNote(replyButton[0]);\n } else {\n // In parallel view, the form may not be present in one of the panes\n noteForm = notesContent.find('.js-discussion-note-form');\n if (noteForm.length === 0) {\n addForm = true;\n }\n }\n }\n } else if (showReplyInput) {\n // add a notes row and insert the form\n row.after(rowCssToAdd);\n targetRow = row.next();\n notesContent = targetRow.find(notesContentSelector);\n addForm = true;\n } else {\n var isCurrentlyShown = targetRow.find('.content:not(:empty)').is(':visible');\n var isForced = forceShow === true || forceShow === false;\n var showNow = forceShow === true || !isCurrentlyShown && !isForced;\n\n targetRow.toggle(showNow);\n notesContent.toggle(showNow);\n }\n\n if (addForm) {\n newForm = this.cleanForm(this.formClone.clone());\n newForm.appendTo(notesContent);\n // show the form\n return this.setupDiscussionNoteForm($link, newForm);\n }\n }\n\n /**\n * Called in response to \"cancel\" on a diff note form.\n *\n * Shows the reply button again.\n * Removes the form and if necessary it's temporary row.\n */\n\n }, {\n key: 'removeDiscussionNoteForm',\n value: function removeDiscussionNoteForm(form) {\n var glForm, row;\n row = form.closest('tr');\n glForm = form.data('gl-form');\n glForm.destroy();\n form.find('.js-note-text').data('autosave').reset();\n // show the reply button (will only work for replies)\n form.prev('.discussion-reply-holder').show();\n if (row.is('.js-temp-notes-holder')) {\n // remove temporary row for diff lines\n return row.remove();\n } else {\n // only remove the form\n return form.remove();\n }\n }\n }, {\n key: 'cancelDiscussionForm',\n value: function cancelDiscussionForm(e) {\n e.preventDefault();\n var $form = jquery_default()(e.target).closest('.js-discussion-note-form');\n var $discussionNote = jquery_default()(e.target).closest('.discussion-notes');\n\n if ($discussionNote.length === 0) {\n // Only send blur event when the discussion form\n // is not part of a discussion note\n var $diffFile = $form.closest('.diff-file');\n\n if ($diffFile.length > 0) {\n var blurEvent = new CustomEvent('blur.imageDiff', {\n detail: e\n });\n\n $diffFile[0].dispatchEvent(blurEvent);\n }\n }\n\n return this.removeDiscussionNoteForm($form);\n }\n\n /**\n * Called after an attachment file has been selected.\n *\n * Updates the file name for the selected attachment.\n */\n\n }, {\n key: 'updateFormAttachment',\n value: function updateFormAttachment() {\n var filename, form;\n form = jquery_default()(this).closest('form');\n // get only the basename\n filename = jquery_default()(this).val().replace(/^.*[\\\\\\/]/, '');\n return form.find('.js-attachment-filename').text(filename);\n }\n\n /**\n * Called when the tab visibility changes\n */\n\n }, {\n key: 'visibilityChange',\n value: function visibilityChange() {\n return this.refresh();\n }\n }, {\n key: 'updateTargetButtons',\n value: function updateTargetButtons(e) {\n var closebtn, closetext, discardbtn, form, reopenbtn, reopentext, textarea;\n textarea = jquery_default()(e.target);\n form = textarea.parents('form');\n reopenbtn = form.find('.js-note-target-reopen');\n closebtn = form.find('.js-note-target-close');\n discardbtn = form.find('.js-note-discard');\n\n if (textarea.val().trim().length > 0) {\n reopentext = reopenbtn.attr('data-alternative-text');\n closetext = closebtn.attr('data-alternative-text');\n if (reopenbtn.text() !== reopentext) {\n reopenbtn.text(reopentext);\n }\n if (closebtn.text() !== closetext) {\n closebtn.text(closetext);\n }\n if (reopenbtn.is(':not(.btn-comment-and-reopen)')) {\n reopenbtn.addClass('btn-comment-and-reopen');\n }\n if (closebtn.is(':not(.btn-comment-and-close)')) {\n closebtn.addClass('btn-comment-and-close');\n }\n if (discardbtn.is(':hidden')) {\n return discardbtn.show();\n }\n } else {\n reopentext = reopenbtn.data('original-text');\n closetext = closebtn.data('original-text');\n if (reopenbtn.text() !== reopentext) {\n reopenbtn.text(reopentext);\n }\n if (closebtn.text() !== closetext) {\n closebtn.text(closetext);\n }\n if (reopenbtn.is('.btn-comment-and-reopen')) {\n reopenbtn.removeClass('btn-comment-and-reopen');\n }\n if (closebtn.is('.btn-comment-and-close')) {\n closebtn.removeClass('btn-comment-and-close');\n }\n if (discardbtn.is(':visible')) {\n return discardbtn.hide();\n }\n }\n }\n }, {\n key: 'putEditFormInPlace',\n value: function putEditFormInPlace($el) {\n var $editForm = jquery_default()(this.getEditFormSelector($el));\n var $note = $el.closest('.note');\n\n $editForm.insertAfter($note.find('.note-text'));\n\n var $originalContentEl = $note.find('.original-note-content');\n var originalContent = $originalContentEl.text().trim();\n var postUrl = $originalContentEl.data('post-url');\n var targetId = $originalContentEl.data('target-id');\n var targetType = $originalContentEl.data('target-type');\n\n this.glForm = new gl_form[\"a\" /* default */]($editForm.find('form'), this.enableGFM);\n\n $editForm.find('form').attr('action', postUrl).attr('data-remote', 'true');\n $editForm.find('.js-form-target-id').val(targetId);\n $editForm.find('.js-form-target-type').val(targetType);\n $editForm.find('.js-note-text').focus().val(originalContent);\n $editForm.find('.js-md-write-button').trigger('click');\n $editForm.find('.referenced-users').hide();\n }\n }, {\n key: 'putConflictEditWarningInPlace',\n value: function putConflictEditWarningInPlace(noteEntity, $note) {\n if ($note.find('.js-conflict-edit-warning').length === 0) {\n var $alert = jquery_default()('
    \\n This comment has changed since you started editing, please review the\\n \\n updated comment\\n \\n to ensure information is not lost\\n
    ');\n $alert.insertAfter($note.find('.note-text'));\n }\n }\n }, {\n key: 'updateNotesCount',\n value: function updateNotesCount(updateCount) {\n return this.notesCountBadge.text(parseInt(this.notesCountBadge.text(), 10) + updateCount);\n }\n }, {\n key: 'toggleCommitList',\n value: function toggleCommitList(e) {\n var $element = jquery_default()(e.currentTarget);\n var $closestSystemCommitList = $element.siblings('.system-note-commit-list');\n\n $element.find('.fa').toggleClass('fa-angle-down').toggleClass('fa-angle-up');\n $closestSystemCommitList.toggleClass('hide-shade');\n }\n\n /**\n * Scans system notes with `ul` elements in system note body\n * then collapse long commit list pushed by user to make it less\n * intrusive.\n */\n\n }, {\n key: 'collapseLongCommitList',\n value: function collapseLongCommitList() {\n var systemNotes = jquery_default()('#notes-list').find('li.system-note').has('ul');\n\n jquery_default.a.each(systemNotes, function (index, systemNote) {\n var $systemNote = jquery_default()(systemNote);\n var headerMessage = $systemNote.find('.note-text').find('p:first').text().replace(':', '');\n\n $systemNote.find('.note-header .system-note-message').html(headerMessage);\n\n if ($systemNote.find('li').length > MAX_VISIBLE_COMMIT_LIST_COUNT) {\n $systemNote.find('.note-text').addClass('system-note-commit-list');\n $systemNote.find('.system-note-commit-list-toggler').show();\n } else {\n $systemNote.find('.note-text').addClass('system-note-commit-list hide-shade');\n }\n });\n }\n }, {\n key: 'addFlash',\n value: function addFlash() {\n for (var _len = arguments.length, flashParams = Array(_len), _key = 0; _key < _len; _key++) {\n flashParams[_key] = arguments[_key];\n }\n\n this.flashContainer = new (Function.prototype.bind.apply(flash[\"a\" /* default */], [null].concat(flashParams)))();\n }\n }, {\n key: 'clearFlash',\n value: function clearFlash() {\n if (this.flashContainer) {\n this.flashContainer.style.display = 'none';\n this.flashContainer = null;\n }\n }\n }, {\n key: 'cleanForm',\n value: function cleanForm($form) {\n // Remove JS classes that are not needed here\n $form.find('.js-comment-type-dropdown').removeClass('btn-group');\n\n // Remove dropdown\n $form.find('.dropdown-menu').remove();\n\n return $form;\n }\n\n /**\n * Check if note does not exists on page\n */\n\n }, {\n key: 'getFormData',\n\n\n /**\n * Get data from Form attributes to use for saving/submitting comment.\n */\n value: function getFormData($form) {\n var content = $form.find('.js-note-text').val();\n return {\n formData: $form.serialize(),\n formContent: underscore_default.a.escape(content),\n formAction: $form.attr('action'),\n formContentOriginal: content\n };\n }\n\n /**\n * Identify if comment has any quick actions\n */\n\n }, {\n key: 'hasQuickActions',\n value: function hasQuickActions(formContent) {\n return REGEX_QUICK_ACTIONS.test(formContent);\n }\n\n /**\n * Remove quick actions and leave comment with pure message\n */\n\n }, {\n key: 'stripQuickActions',\n value: function stripQuickActions(formContent) {\n return formContent.replace(REGEX_QUICK_ACTIONS, '').trim();\n }\n\n /**\n * Gets appropriate description from quick actions found in provided `formContent`\n */\n\n }, {\n key: 'getQuickActionDescription',\n value: function getQuickActionDescription(formContent) {\n var availableQuickActions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n var tempFormContent = void 0;\n\n // Identify executed quick actions from `formContent`\n var executedCommands = availableQuickActions.filter(function (command, index) {\n var commandRegex = new RegExp('/' + command.name);\n return commandRegex.test(formContent);\n });\n\n if (executedCommands && executedCommands.length) {\n if (executedCommands.length > 1) {\n tempFormContent = 'Applying multiple commands';\n } else {\n var commandDescription = executedCommands[0].description.toLowerCase();\n tempFormContent = 'Applying command to ' + commandDescription;\n }\n } else {\n tempFormContent = 'Applying command';\n }\n\n return tempFormContent;\n }\n\n /**\n * Create placeholder note DOM element populated with comment body\n * that we will show while comment is being posted.\n * Once comment is _actually_ posted on server, we will have final element\n * in response that we will show in place of this temporary element.\n */\n\n }, {\n key: 'createPlaceholderNote',\n value: function createPlaceholderNote(_ref3) {\n var formContent = _ref3.formContent,\n uniqueId = _ref3.uniqueId,\n isDiscussionNote = _ref3.isDiscussionNote,\n currentUsername = _ref3.currentUsername,\n currentUserFullname = _ref3.currentUserFullname,\n currentUserAvatar = _ref3.currentUserAvatar;\n\n var discussionClass = isDiscussionNote ? 'discussion' : '';\n var $tempNote = jquery_default()('
  • \\n
    \\n
    \\n \\n \\n \\n
    \\n \\n
    \\n
  • ');\n\n $tempNote.find('.hidden-xs').text(underscore_default.a.escape(currentUserFullname));\n $tempNote.find('.note-headline-light').text('@' + underscore_default.a.escape(currentUsername));\n\n return $tempNote;\n }\n\n /**\n * Create Placeholder System Note DOM element populated with quick action description\n */\n\n }, {\n key: 'createPlaceholderSystemNote',\n value: function createPlaceholderSystemNote(_ref4) {\n var formContent = _ref4.formContent,\n uniqueId = _ref4.uniqueId;\n\n var $tempNote = jquery_default()('
  • \\n
    \\n
    \\n ' + formContent + '\\n
    \\n
    \\n
  • ');\n\n return $tempNote;\n }\n\n /**\n * This method does following tasks step-by-step whenever a new comment\n * is submitted by user (both main thread comments as well as discussion comments).\n *\n * 1) Get Form metadata\n * 2) Identify comment type; a) Main thread b) Discussion thread c) Discussion resolve\n * 3) Build temporary placeholder element (using `createPlaceholderNote`)\n * 4) Show placeholder note on UI\n * 5) Perform network request to submit the note using `axios.post`\n * a) If request is successfully completed\n * 1. Remove placeholder element\n * 2. Show submitted Note element\n * 3. Perform post-submit errands\n * a. Mark discussion as resolved if comment submission was for resolve.\n * b. Reset comment form to original state.\n * b) If request failed\n * 1. Remove placeholder element\n * 2. Show error Flash message about failure\n */\n\n }, {\n key: 'postComment',\n value: function postComment(e) {\n var _this3 = this;\n\n e.preventDefault();\n\n // Get Form metadata\n var $submitBtn = jquery_default()(e.target);\n var $form = $submitBtn.parents('form');\n var $closeBtn = $form.find('.js-note-target-close');\n var isDiscussionNote = $submitBtn.parent().find('li.droplab-item-selected').attr('id') === 'discussion';\n var isMainForm = $form.hasClass('js-main-target-form');\n var isDiscussionForm = $form.hasClass('js-discussion-note-form');\n var isDiscussionResolve = $submitBtn.hasClass('js-comment-resolve-button');\n\n var _getFormData = this.getFormData($form),\n formData = _getFormData.formData,\n formContent = _getFormData.formContent,\n formAction = _getFormData.formAction,\n formContentOriginal = _getFormData.formContentOriginal;\n\n var noteUniqueId = void 0;\n var systemNoteUniqueId = void 0;\n var hasQuickActions = false;\n var $notesContainer = void 0;\n var tempFormContent = void 0;\n\n // Get reference to notes container based on type of comment\n if (isDiscussionForm) {\n $notesContainer = $form.parent('.discussion-notes').find('.notes');\n } else if (isMainForm) {\n $notesContainer = jquery_default()('ul.main-notes-list');\n }\n\n // If comment is to resolve discussion, disable submit buttons while\n // comment posting is finished.\n if (isDiscussionResolve) {\n $submitBtn.disable();\n $form.find('.js-comment-submit-button').disable();\n }\n\n tempFormContent = formContent;\n if (this.hasQuickActions(formContent)) {\n tempFormContent = this.stripQuickActions(formContent);\n hasQuickActions = true;\n }\n\n // Show placeholder note\n if (tempFormContent) {\n noteUniqueId = underscore_default.a.uniqueId('tempNote_');\n $notesContainer.append(this.createPlaceholderNote({\n formContent: tempFormContent,\n uniqueId: noteUniqueId,\n isDiscussionNote: isDiscussionNote,\n currentUsername: gon.current_username,\n currentUserFullname: gon.current_user_fullname,\n currentUserAvatar: gon.current_user_avatar_url\n }));\n }\n\n // Show placeholder system note\n if (hasQuickActions) {\n systemNoteUniqueId = underscore_default.a.uniqueId('tempSystemNote_');\n $notesContainer.append(this.createPlaceholderSystemNote({\n formContent: this.getQuickActionDescription(formContent, ajax_cache[\"a\" /* default */].get(gl.GfmAutoComplete.dataSources.commands)),\n uniqueId: systemNoteUniqueId\n }));\n }\n\n // Clear the form textarea\n if ($notesContainer.length) {\n if (isMainForm) {\n this.resetMainTargetForm(e);\n } else if (isDiscussionForm) {\n this.removeDiscussionNoteForm($form);\n }\n }\n\n /* eslint-disable promise/catch-or-return */\n // Make request to submit comment on server\n axios_utils[\"a\" /* default */].post(formAction, formData).then(function (res) {\n var note = res.data;\n\n // Submission successful! remove placeholder\n $notesContainer.find('#' + noteUniqueId).remove();\n\n var $diffFile = $form.closest('.diff-file');\n if ($diffFile.length > 0) {\n var blurEvent = new CustomEvent('blur.imageDiff', {\n detail: e\n });\n\n $diffFile[0].dispatchEvent(blurEvent);\n }\n\n // Reset cached commands list when command is applied\n if (hasQuickActions) {\n $form.find('textarea.js-note-text').trigger('clear-commands-cache.atwho');\n }\n\n // Clear previous form errors\n _this3.clearFlashWrapper();\n\n // Check if this was discussion comment\n if (isDiscussionForm) {\n // Remove flash-container\n $notesContainer.find('.flash-container').remove();\n\n // If comment intends to resolve discussion, do the same.\n if (isDiscussionResolve) {\n $form.attr('data-discussion-id', $submitBtn.data('discussion-id')).attr('data-resolve-all', 'true').attr('data-project-path', $submitBtn.data('project-path'));\n }\n\n // Show final note element on UI\n var isNewDiffComment = $notesContainer.length === 0;\n _this3.addDiscussionNote($form, note, isNewDiffComment);\n\n if (isNewDiffComment) {\n // Add image badge, avatar badge and toggle discussion badge for new image diffs\n var notePosition = $form.find('#note_position').val();\n if ($diffFile.length > 0 && notePosition.length > 0) {\n var _JSON$parse = JSON.parse(notePosition),\n x = _JSON$parse.x,\n y = _JSON$parse.y,\n width = _JSON$parse.width,\n height = _JSON$parse.height;\n\n var addBadgeEvent = new CustomEvent('addBadge.imageDiff', {\n detail: {\n x: x,\n y: y,\n width: width,\n height: height,\n noteId: 'note_' + note.id,\n discussionId: note.discussion_id\n }\n });\n\n $diffFile[0].dispatchEvent(addBadgeEvent);\n }\n }\n\n // append flash-container to the Notes list\n if ($notesContainer.length) {\n $notesContainer.append('
    ');\n }\n } else if (isMainForm) {\n // Check if this was main thread comment\n // Show final note element on UI and perform form and action buttons cleanup\n _this3.addNote($form, note);\n _this3.reenableTargetFormSubmitButton(e);\n }\n\n if (note.commands_changes) {\n _this3.handleQuickActions(note);\n }\n\n $form.trigger('ajax:success', [note]);\n }).catch(function () {\n // Submission failed, remove placeholder note and show Flash error message\n $notesContainer.find('#' + noteUniqueId).remove();\n\n var blurEvent = new CustomEvent('blur.imageDiff', {\n detail: e\n });\n\n var closestDiffFile = $form.closest('.diff-file');\n\n if (closestDiffFile.length) {\n closestDiffFile[0].dispatchEvent(blurEvent);\n }\n\n if (hasQuickActions) {\n $notesContainer.find('#' + systemNoteUniqueId).remove();\n }\n\n // Show form again on UI on failure\n if (isDiscussionForm && $notesContainer.length) {\n var replyButton = $notesContainer.parent().find('.js-discussion-reply-button');\n _this3.replyToDiscussionNote(replyButton[0]);\n $form = $notesContainer.parent().find('form');\n }\n\n $form.find('.js-note-text').val(formContentOriginal);\n _this3.reenableTargetFormSubmitButton(e);\n _this3.addNoteError($form);\n });\n\n return $closeBtn.text($closeBtn.data('original-text'));\n }\n\n /**\n * This method does following tasks step-by-step whenever an existing comment\n * is updated by user (both main thread comments as well as discussion comments).\n *\n * 1) Get Form metadata\n * 2) Update note element with new content\n * 3) Perform network request to submit the updated note using `axios.post`\n * a) If request is successfully completed\n * 1. Show submitted Note element\n * b) If request failed\n * 1. Revert Note element to original content\n * 2. Show error Flash message about failure\n */\n\n }, {\n key: 'updateComment',\n value: function updateComment(e) {\n var _this4 = this;\n\n e.preventDefault();\n\n // Get Form metadata\n var $submitBtn = jquery_default()(e.target);\n var $form = $submitBtn.parents('form');\n var $closeBtn = $form.find('.js-note-target-close');\n var $editingNote = $form.parents('.note.is-editing');\n var $noteBody = $editingNote.find('.js-task-list-container');\n var $noteBodyText = $noteBody.find('.note-text');\n\n var _getFormData2 = this.getFormData($form),\n formData = _getFormData2.formData,\n formContent = _getFormData2.formContent,\n formAction = _getFormData2.formAction;\n\n var $diffFile = $form.closest('.diff-file');\n var $notesContainer = $form.closest('.notes');\n\n // Cache original comment content\n var cachedNoteBodyText = $noteBodyText.html();\n\n // Show updated comment content temporarily\n $noteBodyText.html(formContent);\n $editingNote.removeClass('is-editing fade-in-full').addClass('being-posted fade-in-half');\n $editingNote.find('.note-headline-meta a').html('');\n\n /* eslint-disable promise/catch-or-return */\n // Make request to update comment on server\n axios_utils[\"a\" /* default */].post(formAction, formData).then(function (_ref5) {\n var data = _ref5.data;\n\n // Submission successful! render final note element\n _this4.updateNote(data, $editingNote);\n }).catch(function () {\n // Submission failed, revert back to original note\n $noteBodyText.html(underscore_default.a.escape(cachedNoteBodyText));\n $editingNote.removeClass('being-posted fade-in');\n $editingNote.find('.fa.fa-spinner').remove();\n\n // Show Flash message about failure\n _this4.updateNoteError();\n });\n\n return $closeBtn.text($closeBtn.data('original-text'));\n }\n }], [{\n key: 'initCommentTypeToggle',\n value: function initCommentTypeToggle(form) {\n var dropdownTrigger = form.querySelector('.js-comment-type-dropdown .dropdown-toggle');\n var dropdownList = form.querySelector('.js-comment-type-dropdown .dropdown-menu');\n var noteTypeInput = form.querySelector('#note_type');\n var submitButton = form.querySelector('.js-comment-type-dropdown .js-comment-submit-button');\n var closeButton = form.querySelector('.js-note-target-close');\n var reopenButton = form.querySelector('.js-note-target-reopen');\n\n var commentTypeToggle = new comment_type_toggle({\n dropdownTrigger: dropdownTrigger,\n dropdownList: dropdownList,\n noteTypeInput: noteTypeInput,\n submitButton: submitButton,\n closeButton: closeButton,\n reopenButton: reopenButton\n });\n\n commentTypeToggle.initDroplab();\n }\n }, {\n key: 'updateNoteTargetSelector',\n value: function updateNoteTargetSelector($note) {\n var hash = Object(url_utility[\"a\" /* getLocationHash */])();\n // Needs to be an explicit true/false for the jQuery `toggleClass(force)`\n var addTargetClass = Boolean(hash && $note.filter('#' + hash).length > 0);\n $note.toggleClass('target', addTargetClass);\n }\n }, {\n key: 'isNewNote',\n value: function isNewNote(noteEntity, noteIds) {\n return jquery_default.a.inArray(noteEntity.id, noteIds) === -1;\n }\n\n /**\n * Check if $note already contains the `noteEntity` content\n */\n\n }, {\n key: 'isUpdatedNote',\n value: function isUpdatedNote(noteEntity, $note) {\n // There can be CRLF vs LF mismatches if we don't sanitize and compare the same way\n var sanitizedNoteEntityText = normalizeNewlines(noteEntity.note.trim());\n var currentNoteText = normalizeNewlines($note.find('.original-note-content').first().text().trim());\n return sanitizedNoteEntityText !== currentNoteText;\n }\n }, {\n key: 'checkMergeRequestStatus',\n value: function checkMergeRequestStatus() {\n if (Object(common_utils[\"f\" /* getPagePath */])(1) === 'merge_requests' && gl.mrWidget) {\n gl.mrWidget.checkStatus();\n }\n }\n }, {\n key: 'animateAppendNote',\n value: function animateAppendNote(noteHtml, $notesList) {\n var $note = jquery_default()(noteHtml);\n\n $note.addClass('fade-in-full').renderGFM();\n $notesList.append($note);\n return $note;\n }\n }, {\n key: 'animateUpdateNote',\n value: function animateUpdateNote(noteHtml, $note) {\n var $updatedNote = jquery_default()(noteHtml);\n\n $updatedNote.addClass('fade-in').renderGFM();\n $note.replaceWith($updatedNote);\n return $updatedNote;\n }\n }]);\n\n return Notes;\n}();\n\n/* harmony default export */ var notes_0 = __webpack_exports__[\"a\"] = (notes_Notes);\n\n\nwindow.Notes = notes_Notes;\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__[\"__\"])('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 = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\n/* harmony default export */ var components_projects_list_item = (esExports);\n// CONCATENATED MODULE: ./projects_dropdown/components/projects_list_item.vue\nvar normalizeComponent = __webpack_require__(\"../../../node_modules/vue-loader/lib/component-normalizer.js\")\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\nvar Component = normalizeComponent(\n projects_list_item,\n components_projects_list_item,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\n/* harmony default export */ var projects_dropdown_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: projects_dropdown_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[\"s__\"])('ProjectsDropdown|This feature requires browser localStorage support') : Object(locale[\"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 = []\nvar projects_list_frequent_esExports = { render: projects_list_frequent_render, staticRenderFns: projects_list_frequent_staticRenderFns }\n/* harmony default export */ var components_projects_list_frequent = (projects_list_frequent_esExports);\n// CONCATENATED MODULE: ./projects_dropdown/components/projects_list_frequent.vue\nvar projects_list_frequent_normalizeComponent = __webpack_require__(\"../../../node_modules/vue-loader/lib/component-normalizer.js\")\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\nvar projects_list_frequent_Component = projects_list_frequent_normalizeComponent(\n projects_list_frequent,\n components_projects_list_frequent,\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 projects_dropdown_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: projects_dropdown_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[\"s__\"])('ProjectsDropdown|Something went wrong on our end.') : Object(locale[\"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 = []\nvar projects_list_search_esExports = { render: projects_list_search_render, staticRenderFns: projects_list_search_staticRenderFns }\n/* harmony default export */ var components_projects_list_search = (projects_list_search_esExports);\n// CONCATENATED MODULE: ./projects_dropdown/components/projects_list_search.vue\nvar projects_list_search_normalizeComponent = __webpack_require__(\"../../../node_modules/vue-loader/lib/component-normalizer.js\")\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\nvar projects_list_search_Component = projects_list_search_normalizeComponent(\n projects_list_search,\n components_projects_list_search,\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 projects_dropdown_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 = []\nvar search_esExports = { render: search_render, staticRenderFns: search_staticRenderFns }\n/* harmony default export */ var components_search = (search_esExports);\n// CONCATENATED MODULE: ./projects_dropdown/components/search.vue\nvar search_normalizeComponent = __webpack_require__(\"../../../node_modules/vue-loader/lib/component-normalizer.js\")\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\nvar search_Component = search_normalizeComponent(\n search,\n components_search,\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 projects_dropdown_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: projects_dropdown_components_search,\n loadingIcon: loading_icon[\"a\" /* default */],\n projectsListFrequent: projects_dropdown_components_projects_list_frequent,\n projectsListSearch: projects_dropdown_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 = []\nvar app_esExports = { render: app_render, staticRenderFns: app_staticRenderFns }\n/* harmony default export */ var components_app = (app_esExports);\n// CONCATENATED MODULE: ./projects_dropdown/components/app.vue\nvar app_normalizeComponent = __webpack_require__(\"../../../node_modules/vue-loader/lib/component-normalizer.js\")\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\nvar app_Component = app_normalizeComponent(\n app,\n components_app,\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 projects_dropdown_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// 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__[\"__\"])('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/***/ \"./right_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_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__flash__ = __webpack_require__(\"./flash.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__lib_utils_axios_utils__ = __webpack_require__(\"./lib/utils/axios_utils.js\");\n/* eslint-disable func-names, space-before-function-paren, no-var, prefer-rest-params, wrap-iife, no-unused-vars, consistent-return, one-var, one-var-declaration-per-line, quotes, prefer-template, object-shorthand, comma-dangle, no-else-return, no-param-reassign, max-len */\n\n\n\n\n\n\nfunction Sidebar(currentUser) {\n this.toggleTodo = this.toggleTodo.bind(this);\n this.sidebar = $('aside');\n\n this.removeListeners();\n this.addEventListeners();\n}\n\nSidebar.initialize = function (currentUser) {\n if (!this.instance) {\n this.instance = new Sidebar(currentUser);\n }\n};\n\nSidebar.prototype.removeListeners = function () {\n this.sidebar.off('click', '.sidebar-collapsed-icon');\n this.sidebar.off('hidden.gl.dropdown');\n $('.dropdown').off('loading.gl.dropdown');\n $('.dropdown').off('loaded.gl.dropdown');\n $(document).off('click', '.js-sidebar-toggle');\n};\n\nSidebar.prototype.addEventListeners = function () {\n var $document = $(document);\n\n this.sidebar.on('click', '.sidebar-collapsed-icon', this, this.sidebarCollapseClicked);\n this.sidebar.on('hidden.gl.dropdown', this, this.onSidebarDropdownHidden);\n $('.dropdown').on('loading.gl.dropdown', this.sidebarDropdownLoading);\n $('.dropdown').on('loaded.gl.dropdown', this.sidebarDropdownLoaded);\n\n $document.on('click', '.js-sidebar-toggle', this.sidebarToggleClicked);\n return $(document).off('click', '.js-issuable-todo').on('click', '.js-issuable-todo', this.toggleTodo);\n};\n\nSidebar.prototype.sidebarToggleClicked = function (e, triggered) {\n var $allGutterToggleIcons, $this, $thisIcon;\n e.preventDefault();\n $this = $(this);\n $thisIcon = $this.find('i');\n $allGutterToggleIcons = $('.js-sidebar-toggle i');\n if ($thisIcon.hasClass('fa-angle-double-right')) {\n $allGutterToggleIcons.removeClass('fa-angle-double-right').addClass('fa-angle-double-left');\n $('aside.right-sidebar').removeClass('right-sidebar-expanded').addClass('right-sidebar-collapsed');\n $('.layout-page').removeClass('right-sidebar-expanded').addClass('right-sidebar-collapsed');\n } else {\n $allGutterToggleIcons.removeClass('fa-angle-double-left').addClass('fa-angle-double-right');\n $('aside.right-sidebar').removeClass('right-sidebar-collapsed').addClass('right-sidebar-expanded');\n $('.layout-page').removeClass('right-sidebar-collapsed').addClass('right-sidebar-expanded');\n\n if (gl.lazyLoader) gl.lazyLoader.loadCheck();\n }\n if (!triggered) {\n __WEBPACK_IMPORTED_MODULE_1_js_cookie___default.a.set(\"collapsed_gutter\", $('.right-sidebar').hasClass('right-sidebar-collapsed'));\n }\n};\n\nSidebar.prototype.toggleTodo = function (e) {\n var _this = this;\n\n var $btnText, $this, $todoLoading, ajaxType, url;\n $this = $(e.currentTarget);\n ajaxType = $this.attr('data-delete-path') ? 'delete' : 'post';\n if ($this.attr('data-delete-path')) {\n url = \"\" + $this.attr('data-delete-path');\n } else {\n url = \"\" + $this.data('url');\n }\n\n $this.tooltip('hide');\n\n $('.js-issuable-todo').disable().addClass('is-loading');\n\n __WEBPACK_IMPORTED_MODULE_3__lib_utils_axios_utils__[\"a\" /* default */][ajaxType](url, {\n issuable_id: $this.data('issuable-id'),\n issuable_type: $this.data('issuable-type')\n }).then(function (_ref) {\n var data = _ref.data;\n\n _this.todoUpdateDone(data);\n }).catch(function () {\n return Object(__WEBPACK_IMPORTED_MODULE_2__flash__[\"a\" /* default */])('There was an error ' + (ajaxType === 'post' ? 'adding a' : 'deleting the') + ' todo.');\n });\n};\n\nSidebar.prototype.todoUpdateDone = function (data) {\n var deletePath = data.delete_path ? data.delete_path : null;\n var attrPrefix = deletePath ? 'mark' : 'todo';\n var $todoBtns = $('.js-issuable-todo');\n\n $(document).trigger('todo:toggle', data.count);\n\n $todoBtns.each(function (i, el) {\n var $el = $(el);\n var $elText = $el.find('.js-issuable-todo-inner');\n\n $el.removeClass('is-loading').enable().attr('aria-label', $el.data(attrPrefix + '-text')).attr('data-delete-path', deletePath).attr('title', $el.data(attrPrefix + '-text'));\n\n if ($el.hasClass('has-tooltip')) {\n $el.tooltip('fixTitle');\n }\n\n if ($el.data(attrPrefix + '-icon')) {\n $elText.html($el.data(attrPrefix + '-icon'));\n } else {\n $elText.text($el.data(attrPrefix + '-text'));\n }\n });\n};\n\nSidebar.prototype.sidebarDropdownLoading = function (e) {\n var $loading, $sidebarCollapsedIcon, i, img;\n $sidebarCollapsedIcon = $(this).closest('.block').find('.sidebar-collapsed-icon');\n img = $sidebarCollapsedIcon.find('img');\n i = $sidebarCollapsedIcon.find('i');\n $loading = $('');\n if (img.length) {\n img.before($loading);\n return img.hide();\n } else if (i.length) {\n i.before($loading);\n return i.hide();\n }\n};\n\nSidebar.prototype.sidebarDropdownLoaded = function (e) {\n var $sidebarCollapsedIcon, i, img;\n $sidebarCollapsedIcon = $(this).closest('.block').find('.sidebar-collapsed-icon');\n img = $sidebarCollapsedIcon.find('img');\n $sidebarCollapsedIcon.find('i.fa-spin').remove();\n i = $sidebarCollapsedIcon.find('i');\n if (img.length) {\n return img.show();\n } else {\n return i.show();\n }\n};\n\nSidebar.prototype.sidebarCollapseClicked = function (e) {\n var $block, sidebar;\n if ($(e.currentTarget).hasClass('dont-change-state')) {\n return;\n }\n sidebar = e.data;\n e.preventDefault();\n $block = $(this).closest('.block');\n return sidebar.openDropdown($block);\n};\n\nSidebar.prototype.openDropdown = function (blockOrName) {\n var $block;\n $block = __WEBPACK_IMPORTED_MODULE_0_underscore___default.a.isString(blockOrName) ? this.getBlock(blockOrName) : blockOrName;\n if (!this.isOpen()) {\n this.setCollapseAfterUpdate($block);\n this.toggleSidebar('open');\n }\n\n // Wait for the sidebar to trigger('click') open\n // so it doesn't cause our dropdown to close preemptively\n setTimeout(function () {\n $block.find('.js-sidebar-dropdown-toggle').trigger('click');\n });\n};\n\nSidebar.prototype.setCollapseAfterUpdate = function ($block) {\n $block.addClass('collapse-after-update');\n return $('.layout-page').addClass('with-overlay');\n};\n\nSidebar.prototype.onSidebarDropdownHidden = function (e) {\n var $block, sidebar;\n sidebar = e.data;\n e.preventDefault();\n $block = $(e.target).closest('.block');\n return sidebar.sidebarDropdownHidden($block);\n};\n\nSidebar.prototype.sidebarDropdownHidden = function ($block) {\n if ($block.hasClass('collapse-after-update')) {\n $block.removeClass('collapse-after-update');\n $('.layout-page').removeClass('with-overlay');\n return this.toggleSidebar('hide');\n }\n};\n\nSidebar.prototype.triggerOpenSidebar = function () {\n return this.sidebar.find('.js-sidebar-toggle').trigger('click');\n};\n\nSidebar.prototype.toggleSidebar = function (action) {\n if (action == null) {\n action = 'toggle';\n }\n if (action === 'toggle') {\n this.triggerOpenSidebar();\n }\n if (action === 'open') {\n if (!this.isOpen()) {\n this.triggerOpenSidebar();\n }\n }\n if (action === 'hide') {\n if (this.isOpen()) {\n return this.triggerOpenSidebar();\n }\n }\n};\n\nSidebar.prototype.isOpen = function () {\n return this.sidebar.is('.right-sidebar-expanded');\n};\n\nSidebar.prototype.getBlock = function (name) {\n return this.sidebar.find(\".block.\" + name);\n};\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (Sidebar);\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\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__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 * 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('project-path');\n\n gl.projectOptions[projectPath] = {\n name: $projectOptionsDataEl.data('name'),\n issuesPath: $projectOptionsDataEl.data('issues-path'),\n issuesDisabled: $projectOptionsDataEl.data('issues-disabled'),\n mrPath: $projectOptionsDataEl.data('mr-path')\n };\n }\n\n if ($groupOptionsDataEl.length) {\n gl.groupOptions = gl.groupOptions || {};\n\n var groupPath = $groupOptionsDataEl.data('group-path');\n\n gl.groupOptions[groupPath] = {\n name: $groupOptionsDataEl.data('name'),\n issuesPath: $groupOptionsDataEl.data('issues-path'),\n mrPath: $groupOptionsDataEl.data('mr-path')\n };\n }\n\n if ($dashboardOptionsDataEl.length) {\n gl.dashboardOptions = {\n issuesPath: $dashboardOptionsDataEl.data('issues-path'),\n mrPath: $dashboardOptionsDataEl.data('mr-path')\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('autocomplete-path');\n this.projectId = projectId || this.optsEl.data('autocomplete-project-id') || '';\n this.projectRef = projectRef || this.optsEl.data('autocomplete-project-ref') || '';\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_1__lib_utils_common_utils__[\"m\" /* isInGroupsPage */])() && groupOptions) {\n options = groupOptions[Object(__WEBPACK_IMPORTED_MODULE_1__lib_utils_common_utils__[\"e\" /* getGroupSlug */])()];\n } else if (Object(__WEBPACK_IMPORTED_MODULE_1__lib_utils_common_utils__[\"o\" /* isInProjectPage */])() && projectOptions) {\n options = projectOptions[Object(__WEBPACK_IMPORTED_MODULE_1__lib_utils_common_utils__[\"h\" /* 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/***/ \"./shortcuts_issuable.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_mousetrap__ = __webpack_require__(\"../../../node_modules/mousetrap/mousetrap.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_mousetrap___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_mousetrap__);\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__right_sidebar__ = __webpack_require__(\"./right_sidebar.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__shortcuts__ = __webpack_require__(\"./shortcuts.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__behaviors_copy_as_gfm__ = __webpack_require__(\"./behaviors/copy_as_gfm.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\n\n\n\nvar ShortcutsIssuable = function (_Shortcuts) {\n _inherits(ShortcutsIssuable, _Shortcuts);\n\n function ShortcutsIssuable(isMergeRequest) {\n _classCallCheck(this, ShortcutsIssuable);\n\n var _this = _possibleConstructorReturn(this, (ShortcutsIssuable.__proto__ || Object.getPrototypeOf(ShortcutsIssuable)).call(this));\n\n _this.$replyField = isMergeRequest ? $('.js-main-target-form #note_note') : $('.js-main-target-form .js-vue-comment-form');\n\n __WEBPACK_IMPORTED_MODULE_0_mousetrap___default.a.bind('a', function () {\n return ShortcutsIssuable.openSidebarDropdown('assignee');\n });\n __WEBPACK_IMPORTED_MODULE_0_mousetrap___default.a.bind('m', function () {\n return ShortcutsIssuable.openSidebarDropdown('milestone');\n });\n __WEBPACK_IMPORTED_MODULE_0_mousetrap___default.a.bind('l', function () {\n return ShortcutsIssuable.openSidebarDropdown('labels');\n });\n __WEBPACK_IMPORTED_MODULE_0_mousetrap___default.a.bind('r', _this.replyWithSelectedText.bind(_this));\n __WEBPACK_IMPORTED_MODULE_0_mousetrap___default.a.bind('e', ShortcutsIssuable.editIssue);\n\n if (isMergeRequest) {\n _this.enabledHelp.push('.hidden-shortcut.merge_requests');\n } else {\n _this.enabledHelp.push('.hidden-shortcut.issues');\n }\n return _this;\n }\n\n _createClass(ShortcutsIssuable, [{\n key: 'replyWithSelectedText',\n value: function replyWithSelectedText() {\n var documentFragment = window.gl.utils.getSelectedFragment();\n\n if (!documentFragment) {\n this.$replyField.focus();\n return false;\n }\n\n var el = __WEBPACK_IMPORTED_MODULE_4__behaviors_copy_as_gfm__[\"a\" /* CopyAsGFM */].transformGFMSelection(documentFragment.cloneNode(true));\n var selected = __WEBPACK_IMPORTED_MODULE_4__behaviors_copy_as_gfm__[\"a\" /* CopyAsGFM */].nodeToGFM(el);\n\n if (selected.trim() === '') {\n return false;\n }\n\n var quote = __WEBPACK_IMPORTED_MODULE_1_underscore___default.a.map(selected.split('\\n'), function (val) {\n return ('> ' + val).trim() + '\\n';\n });\n\n // If replyField already has some content, add a newline before our quote\n var separator = this.$replyField.val().trim() !== '' && '\\n\\n' || '';\n this.$replyField.val(function (a, current) {\n return '' + current + separator + quote.join('') + '\\n';\n }).trigger('input').trigger('change');\n\n // Trigger autosize\n var event = document.createEvent('Event');\n event.initEvent('autosize:update', true, false);\n this.$replyField.get(0).dispatchEvent(event);\n\n // Focus the input field\n this.$replyField.focus();\n\n return false;\n }\n }], [{\n key: 'editIssue',\n value: function editIssue() {\n // Need to click the element as on issues, editing is inline\n // on merge request, editing is on a different page\n document.querySelector('.js-issuable-edit').click();\n\n return false;\n }\n }, {\n key: 'openSidebarDropdown',\n value: function openSidebarDropdown(name) {\n __WEBPACK_IMPORTED_MODULE_2__right_sidebar__[\"a\" /* default */].instance.openDropdown(name);\n return false;\n }\n }]);\n\n return ShortcutsIssuable;\n}(__WEBPACK_IMPORTED_MODULE_3__shortcuts__[\"a\" /* default */]);\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (ShortcutsIssuable);\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\n\n/***/ }),\n\n/***/ \"./single_file_diff.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__locale__ = __webpack_require__(\"./locale/index.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__lib_utils_axios_utils__ = __webpack_require__(\"./lib/utils/axios_utils.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__flash__ = __webpack_require__(\"./flash.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__files_comment_button__ = __webpack_require__(\"./files_comment_button.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__image_diff_helpers_index__ = __webpack_require__(\"./image_diff/helpers/index.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__syntax_highlight__ = __webpack_require__(\"./syntax_highlight.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, prefer-arrow-callback, space-before-function-paren, no-var, prefer-rest-params, wrap-iife, one-var, one-var-declaration-per-line, consistent-return, no-param-reassign, max-len */\n\n\n\n\n\n\n\n\nvar WRAPPER = '
    ';\nvar LOADING_HTML = '';\nvar ERROR_HTML = '
    Could not load diff
    ';\nvar COLLAPSED_HTML = '
    This diff is collapsed. Click to expand it.
    ';\n\nvar SingleFileDiff = function () {\n function SingleFileDiff(file) {\n _classCallCheck(this, SingleFileDiff);\n\n this.file = file;\n this.toggleDiff = this.toggleDiff.bind(this);\n this.content = $('.diff-content', this.file);\n this.$toggleIcon = $('.diff-toggle-caret', this.file);\n this.diffForPath = this.content.find('[data-diff-for-path]').data('diff-for-path');\n this.isOpen = !this.diffForPath;\n if (this.diffForPath) {\n this.collapsedContent = this.content;\n this.loadingContent = $(WRAPPER).addClass('loading').html(LOADING_HTML).hide();\n this.content = null;\n this.collapsedContent.after(this.loadingContent);\n this.$toggleIcon.addClass('fa-caret-right');\n } else {\n this.collapsedContent = $(WRAPPER).html(COLLAPSED_HTML).hide();\n this.content.after(this.collapsedContent);\n this.$toggleIcon.addClass('fa-caret-down');\n }\n\n $('.js-file-title, .click-to-expand', this.file).on('click', function (e) {\n this.toggleDiff($(e.target));\n }.bind(this));\n }\n\n _createClass(SingleFileDiff, [{\n key: 'toggleDiff',\n value: function toggleDiff($target, cb) {\n if (!$target.hasClass('js-file-title') && !$target.hasClass('click-to-expand') && !$target.hasClass('diff-toggle-caret')) return;\n this.isOpen = !this.isOpen;\n if (!this.isOpen && !this.hasError) {\n this.content.hide();\n this.$toggleIcon.addClass('fa-caret-right').removeClass('fa-caret-down');\n this.collapsedContent.show();\n if (typeof gl.diffNotesCompileComponents !== 'undefined') {\n gl.diffNotesCompileComponents();\n }\n } else if (this.content) {\n this.collapsedContent.hide();\n this.content.show();\n this.$toggleIcon.addClass('fa-caret-down').removeClass('fa-caret-right');\n if (typeof gl.diffNotesCompileComponents !== 'undefined') {\n gl.diffNotesCompileComponents();\n }\n } else {\n this.$toggleIcon.addClass('fa-caret-down').removeClass('fa-caret-right');\n return this.getContentHTML(cb);\n }\n }\n }, {\n key: 'getContentHTML',\n value: function getContentHTML(cb) {\n var _this = this;\n\n this.collapsedContent.hide();\n this.loadingContent.show();\n\n __WEBPACK_IMPORTED_MODULE_1__lib_utils_axios_utils__[\"a\" /* default */].get(this.diffForPath).then(function (_ref) {\n var data = _ref.data;\n\n _this.loadingContent.hide();\n if (data.html) {\n _this.content = $(data.html);\n Object(__WEBPACK_IMPORTED_MODULE_5__syntax_highlight__[\"a\" /* default */])(_this.content);\n } else {\n _this.hasError = true;\n _this.content = $(ERROR_HTML);\n }\n _this.collapsedContent.after(_this.content);\n\n if (typeof gl.diffNotesCompileComponents !== 'undefined') {\n gl.diffNotesCompileComponents();\n }\n\n var $file = $(_this.file);\n __WEBPACK_IMPORTED_MODULE_3__files_comment_button__[\"a\" /* default */].init($file);\n\n var canCreateNote = $file.closest('.files').is('[data-can-create-note]');\n __WEBPACK_IMPORTED_MODULE_4__image_diff_helpers_index__[\"a\" /* default */].initImageDiff($file[0], canCreateNote);\n\n if (cb) cb();\n }).catch(function () {\n Object(__WEBPACK_IMPORTED_MODULE_2__flash__[\"a\" /* default */])(Object(__WEBPACK_IMPORTED_MODULE_0__locale__[\"__\"])('An error occurred while retrieving diff'));\n });\n }\n }]);\n\n return SingleFileDiff;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (SingleFileDiff);\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\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/***/ \"./task_list.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_deckar01_task_list__ = __webpack_require__(\"../../../node_modules/deckar01-task_list/dist/task_list.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_deckar01_task_list___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_deckar01_task_list__);\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__flash__ = __webpack_require__(\"./flash.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\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 _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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\n\nvar TaskList = function () {\n function TaskList() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, TaskList);\n\n this.selector = options.selector;\n this.dataType = options.dataType;\n this.fieldName = options.fieldName;\n this.onSuccess = options.onSuccess || function () {};\n this.onError = function showFlash(e) {\n var errorMessages = '';\n\n if (e.response.data && _typeof(e.response.data) === 'object') {\n errorMessages = e.response.data.errors.join(' ');\n }\n\n return new __WEBPACK_IMPORTED_MODULE_2__flash__[\"a\" /* default */](errorMessages || 'Update failed', 'alert');\n };\n\n this.init();\n }\n\n _createClass(TaskList, [{\n key: 'init',\n value: function init() {\n // Prevent duplicate event bindings\n this.disable();\n $(this.selector + ' .js-task-list-container').taskList('enable');\n $(document).on('tasklist:changed', this.selector + ' .js-task-list-container', this.update.bind(this));\n }\n }, {\n key: 'disable',\n value: function disable() {\n $(this.selector + ' .js-task-list-container').taskList('disable');\n $(document).off('tasklist:changed', this.selector + ' .js-task-list-container');\n }\n }, {\n key: 'update',\n value: function update(e) {\n var _this = this;\n\n var $target = $(e.target);\n var patchData = {};\n patchData[this.dataType] = _defineProperty({}, this.fieldName, $target.val());\n\n return __WEBPACK_IMPORTED_MODULE_1__lib_utils_axios_utils__[\"a\" /* default */].patch($target.data('update-url') || $('form.js-issuable-update').attr('action'), patchData).then(function (_ref) {\n var data = _ref.data;\n return _this.onSuccess(data);\n }).catch(function (err) {\n return _this.onError(err);\n });\n }\n }]);\n\n return TaskList;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (TaskList);\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\n\n/***/ }),\n\n/***/ \"./users_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\");\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, space-before-function-paren, one-var, no-var, prefer-rest-params, wrap-iife, quotes, max-len, one-var-declaration-per-line, vars-on-top, prefer-arrow-callback, consistent-return, comma-dangle, object-shorthand, no-shadow, no-unused-vars, no-else-return, no-self-compare, prefer-template, no-unused-expressions, no-lonely-if, yoda, prefer-spread, no-void, camelcase, no-param-reassign */\n/* global Issuable */\n/* global emitSidebarEvent */\n\n\n\n// TODO: remove eventHub hack after code splitting refactor\nwindow.emitSidebarEvent = window.emitSidebarEvent || $.noop;\n\nfunction UsersSelect(currentUser, els) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n var $els;\n this.users = this.users.bind(this);\n this.user = this.user.bind(this);\n this.usersPath = \"/autocomplete/users.json\";\n this.userPath = \"/autocomplete/users/:id.json\";\n if (currentUser != null) {\n if ((typeof currentUser === 'undefined' ? 'undefined' : _typeof(currentUser)) === 'object') {\n this.currentUser = currentUser;\n } else {\n this.currentUser = JSON.parse(currentUser);\n }\n }\n\n var handleClick = options.handleClick;\n\n\n $els = $(els);\n\n if (!els) {\n $els = $('.js-user-search');\n }\n\n $els.each(function (_this) {\n return function (i, dropdown) {\n var options = {};\n var $block, $collapsedSidebar, $dropdown, $loading, $selectbox, $value, abilityName, assignTo, assigneeTemplate, collapsedAssigneeTemplate, defaultLabel, defaultNullUser, firstUser, issueURL, selectedId, selectedIdDefault, showAnyUser, showNullUser, showMenuAbove;\n $dropdown = $(dropdown);\n options.projectId = $dropdown.data('projectId');\n options.groupId = $dropdown.data('groupId');\n options.showCurrentUser = $dropdown.data('currentUser');\n options.todoFilter = $dropdown.data('todoFilter');\n options.todoStateFilter = $dropdown.data('todoStateFilter');\n showNullUser = $dropdown.data('nullUser');\n defaultNullUser = $dropdown.data('nullUserDefault');\n showMenuAbove = $dropdown.data('showMenuAbove');\n showAnyUser = $dropdown.data('any-user');\n firstUser = $dropdown.data('first-user');\n options.authorId = $dropdown.data('author-id');\n defaultLabel = $dropdown.data('default-label');\n issueURL = $dropdown.data('issueUpdate');\n $selectbox = $dropdown.closest('.selectbox');\n $block = $selectbox.closest('.block');\n abilityName = $dropdown.data('ability-name');\n $value = $block.find('.value');\n $collapsedSidebar = $block.find('.sidebar-collapsed-user');\n $loading = $block.find('.block-loading').fadeOut();\n selectedIdDefault = defaultNullUser && showNullUser ? 0 : null;\n selectedId = $dropdown.data('selected');\n\n if (selectedId === undefined) {\n selectedId = selectedIdDefault;\n }\n\n var assignYourself = function assignYourself() {\n var unassignedSelected = $dropdown.closest('.selectbox').find('input[name=\\'' + $dropdown.data('field-name') + '\\'][value=0]');\n\n if (unassignedSelected) {\n unassignedSelected.remove();\n }\n\n // Save current selected user to the DOM\n var input = document.createElement('input');\n input.type = 'hidden';\n input.name = $dropdown.data('field-name');\n\n var currentUserInfo = $dropdown.data('currentUserInfo');\n\n if (currentUserInfo) {\n input.value = currentUserInfo.id;\n input.dataset.meta = __WEBPACK_IMPORTED_MODULE_0_underscore___default.a.escape(currentUserInfo.name);\n } else if (_this.currentUser) {\n input.value = _this.currentUser.id;\n }\n\n if ($selectbox) {\n $dropdown.parent().before(input);\n } else {\n $dropdown.after(input);\n }\n };\n\n if ($block[0]) {\n $block[0].addEventListener('assignYourself', assignYourself);\n }\n\n var getSelectedUserInputs = function getSelectedUserInputs() {\n return $selectbox.find('input[name=\"' + $dropdown.data('field-name') + '\"]');\n };\n\n var getSelected = function getSelected() {\n return getSelectedUserInputs().map(function (index, input) {\n return parseInt(input.value, 10);\n }).get();\n };\n\n var checkMaxSelect = function checkMaxSelect() {\n var maxSelect = $dropdown.data('max-select');\n if (maxSelect) {\n var selected = getSelected();\n\n if (selected.length > maxSelect) {\n var firstSelectedId = selected[0];\n var firstSelected = $dropdown.closest('.selectbox').find('input[name=\\'' + $dropdown.data('field-name') + '\\'][value=' + firstSelectedId + ']');\n\n firstSelected.remove();\n emitSidebarEvent('sidebar.removeAssignee', {\n id: firstSelectedId\n });\n }\n }\n };\n\n var getMultiSelectDropdownTitle = function getMultiSelectDropdownTitle(selectedUser, isSelected) {\n var selectedUsers = getSelected().filter(function (u) {\n return u !== 0;\n });\n\n var firstUser = getSelectedUserInputs().map(function (index, input) {\n return {\n name: input.dataset.meta,\n value: parseInt(input.value, 10)\n };\n }).filter(function (u) {\n return u.id !== 0;\n }).get(0);\n\n if (selectedUsers.length === 0) {\n return '未指派';\n } else if (selectedUsers.length === 1) {\n return firstUser.name;\n } else if (isSelected) {\n var otherSelected = selectedUsers.filter(function (s) {\n return s !== selectedUser.id;\n });\n return selectedUser.name + ' + ' + otherSelected.length + ' more';\n } else {\n return firstUser.name + ' + ' + (selectedUsers.length - 1) + ' more';\n }\n };\n\n $('.assign-to-me-link').on('click', function (e) {\n e.preventDefault();\n $(e.currentTarget).hide();\n\n if ($dropdown.data('multiSelect')) {\n assignYourself();\n checkMaxSelect();\n\n var currentUserInfo = $dropdown.data('currentUserInfo');\n $dropdown.find('.dropdown-toggle-text').text(getMultiSelectDropdownTitle(currentUserInfo)).removeClass('is-default');\n } else {\n var $input = $('input[name=\"' + $dropdown.data('field-name') + '\"]');\n $input.val(gon.current_user_id);\n selectedId = $input.val();\n $dropdown.find('.dropdown-toggle-text').text(gon.current_user_fullname).removeClass('is-default');\n }\n });\n\n $block.on('click', '.js-assign-yourself', function (e) {\n e.preventDefault();\n return assignTo(_this.currentUser.id);\n });\n\n assignTo = function assignTo(selected) {\n var data;\n data = {};\n data[abilityName] = {};\n data[abilityName].assignee_id = selected != null ? selected : null;\n $loading.removeClass('hidden').fadeIn();\n $dropdown.trigger('loading.gl.dropdown');\n\n return __WEBPACK_IMPORTED_MODULE_1__lib_utils_axios_utils__[\"a\" /* default */].put(issueURL, data).then(function (_ref) {\n var data = _ref.data;\n\n var user;\n $dropdown.trigger('loaded.gl.dropdown');\n $loading.fadeOut();\n if (data.assignee) {\n user = {\n name: data.assignee.name,\n username: data.assignee.username,\n avatar: data.assignee.avatar_url\n };\n } else {\n user = {\n name: '未指派',\n username: '',\n avatar: ''\n };\n }\n $value.html(assigneeTemplate(user));\n $collapsedSidebar.attr('title', __WEBPACK_IMPORTED_MODULE_0_underscore___default.a.escape(user.name)).tooltip('fixTitle');\n return $collapsedSidebar.html(collapsedAssigneeTemplate(user));\n });\n };\n collapsedAssigneeTemplate = __WEBPACK_IMPORTED_MODULE_0_underscore___default.a.template('<% if( avatar ) { %> \"> \"\"\"> <% } else { %> <% } %>');\n assigneeTemplate = __WEBPACK_IMPORTED_MODULE_0_underscore___default.a.template('<% if (username) { %> \"> <% if( avatar ) { %> \"\"\"> <% } %> <%- name %> @<%- username %> <% } else { %> No assignee - assign yourself <% } %>');\n return $dropdown.glDropdown({\n showMenuAbove: showMenuAbove,\n data: function data(term, callback) {\n return _this.users(term, options, function (users) {\n // GitLabDropdownFilter returns this.instance\n // GitLabDropdownRemote returns this.options.instance\n var glDropdown = this.instance || this.options.instance;\n glDropdown.options.processData(term, users, callback);\n }.bind(this));\n },\n processData: function processData(term, data, callback) {\n var users = data;\n\n // Only show assigned user list when there is no search term\n if ($dropdown.hasClass('js-multiselect') && term.length === 0) {\n var selectedInputs = getSelectedUserInputs();\n\n // Potential duplicate entries when dealing with issue board\n // because issue board is also managed by vue\n var selectedUsers = __WEBPACK_IMPORTED_MODULE_0_underscore___default.a.uniq(selectedInputs, false, function (a) {\n return a.value;\n }).filter(function (input) {\n var userId = parseInt(input.value, 10);\n var inUsersArray = users.find(function (u) {\n return u.id === userId;\n });\n\n return !inUsersArray && userId !== 0;\n }).map(function (input) {\n var userId = parseInt(input.value, 10);\n var _input$dataset = input.dataset,\n avatarUrl = _input$dataset.avatarUrl,\n avatar_url = _input$dataset.avatar_url,\n name = _input$dataset.name,\n username = _input$dataset.username;\n\n return {\n avatar_url: avatarUrl || avatar_url,\n id: userId,\n name: name,\n username: username\n };\n });\n\n users = data.concat(selectedUsers);\n }\n\n var anyUser = void 0;\n var index = void 0;\n var j = void 0;\n var len = void 0;\n var name = void 0;\n var obj = void 0;\n var showDivider = void 0;\n if (term.length === 0) {\n showDivider = 0;\n if (firstUser) {\n // Move current user to the front of the list\n for (index = j = 0, len = users.length; j < len; index = j += 1) {\n obj = users[index];\n if (obj.username === firstUser) {\n users.splice(index, 1);\n users.unshift(obj);\n break;\n }\n }\n }\n if (showNullUser) {\n showDivider += 1;\n users.unshift({\n beforeDivider: true,\n name: '未指派',\n id: 0\n });\n }\n if (showAnyUser) {\n showDivider += 1;\n name = showAnyUser;\n if (name === true) {\n name = 'Any User';\n }\n anyUser = {\n beforeDivider: true,\n name: name,\n id: null\n };\n users.unshift(anyUser);\n }\n\n if (showDivider) {\n users.splice(showDivider, 0, 'divider');\n }\n\n if ($dropdown.hasClass('js-multiselect')) {\n var selected = getSelected().filter(function (i) {\n return i !== 0;\n });\n\n if (selected.length > 0) {\n if ($dropdown.data('dropdown-header')) {\n showDivider += 1;\n users.splice(showDivider, 0, {\n header: $dropdown.data('dropdown-header')\n });\n }\n\n var _selectedUsers = users.filter(function (u) {\n return selected.indexOf(u.id) !== -1;\n }).sort(function (a, b) {\n return a.name > b.name;\n });\n\n users = users.filter(function (u) {\n return selected.indexOf(u.id) === -1;\n });\n\n _selectedUsers.forEach(function (selectedUser) {\n showDivider += 1;\n users.splice(showDivider, 0, selectedUser);\n });\n\n users.splice(showDivider + 1, 0, 'divider');\n }\n }\n }\n\n callback(users);\n if (showMenuAbove) {\n $dropdown.data('glDropdown').positionMenuAbove();\n }\n },\n filterable: true,\n filterRemote: true,\n search: {\n fields: ['name', 'username']\n },\n selectable: true,\n fieldName: $dropdown.data('field-name'),\n toggleLabel: function toggleLabel(selected, el, glDropdown) {\n var inputValue = glDropdown.filterInput.val();\n\n if (this.multiSelect && inputValue === '') {\n // Remove non-users from the fullData array\n var users = glDropdown.filteredFullData();\n var callback = glDropdown.parseData.bind(glDropdown);\n\n // Update the data model\n this.processData(inputValue, users, callback);\n }\n\n if (this.multiSelect) {\n return getMultiSelectDropdownTitle(selected, $(el).hasClass('is-active'));\n }\n\n if (selected && 'id' in selected && $(el).hasClass('is-active')) {\n $dropdown.find('.dropdown-toggle-text').removeClass('is-default');\n if (selected.text) {\n return selected.text;\n } else {\n return selected.name;\n }\n } else {\n $dropdown.find('.dropdown-toggle-text').addClass('is-default');\n return defaultLabel;\n }\n },\n defaultLabel: defaultLabel,\n hidden: function hidden(e) {\n if ($dropdown.hasClass('js-multiselect')) {\n emitSidebarEvent('sidebar.saveAssignees');\n }\n\n if (!$dropdown.data('always-show-selectbox')) {\n $selectbox.hide();\n\n // Recalculate where .value is because vue might have changed it\n $block = $selectbox.closest('.block');\n $value = $block.find('.value');\n // display:block overrides the hide-collapse rule\n $value.css('display', '');\n }\n },\n multiSelect: $dropdown.hasClass('js-multiselect'),\n inputMeta: $dropdown.data('input-meta'),\n clicked: function clicked(options) {\n var $el = options.$el,\n e = options.e,\n isMarking = options.isMarking;\n\n var user = options.selectedObj;\n\n if ($dropdown.hasClass('js-multiselect')) {\n var isActive = $el.hasClass('is-active');\n var previouslySelected = $dropdown.closest('.selectbox').find(\"input[name='\" + $dropdown.data('field-name') + \"'][value!=0]\");\n\n // Enables support for limiting the number of users selected\n // Automatically removes the first on the list if more users are selected\n checkMaxSelect();\n\n if (user.beforeDivider && user.name.toLowerCase() === '未指派') {\n // Unassigned selected\n previouslySelected.each(function (index, element) {\n var id = parseInt(element.value, 10);\n element.remove();\n });\n emitSidebarEvent('sidebar.removeAllAssignees');\n } else if (isActive) {\n // user selected\n emitSidebarEvent('sidebar.addAssignee', user);\n\n // Remove unassigned selection (if it was previously selected)\n var unassignedSelected = $dropdown.closest('.selectbox').find(\"input[name='\" + $dropdown.data('field-name') + \"'][value=0]\");\n\n if (unassignedSelected) {\n unassignedSelected.remove();\n }\n } else {\n if (previouslySelected.length === 0) {\n // Select unassigned because there is no more selected users\n this.addInput($dropdown.data('field-name'), 0, {});\n }\n\n // User unselected\n emitSidebarEvent('sidebar.removeAssignee', user);\n }\n\n if (getSelected().find(function (u) {\n return u === gon.current_user_id;\n })) {\n $('.assign-to-me-link').hide();\n } else {\n $('.assign-to-me-link').show();\n }\n }\n\n var isIssueIndex, isMRIndex, page, selected;\n page = $('body').attr('data-page');\n isIssueIndex = page === 'projects:issues:index';\n isMRIndex = page === page && page === 'projects:merge_requests:index';\n if ($dropdown.hasClass('js-filter-bulk-update') || $dropdown.hasClass('js-issuable-form-dropdown')) {\n e.preventDefault();\n\n var isSelecting = user.id !== selectedId;\n selectedId = isSelecting ? user.id : selectedIdDefault;\n\n if (selectedId === gon.current_user_id) {\n $('.assign-to-me-link').hide();\n } else {\n $('.assign-to-me-link').show();\n }\n return;\n }\n if ($el.closest('.add-issues-modal').length) {\n gl.issueBoards.ModalStore.store.filter[$dropdown.data('field-name')] = user.id;\n } else if (handleClick) {\n e.preventDefault();\n handleClick(user, isMarking);\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-multiselect')) {\n selected = $dropdown.closest('.selectbox').find(\"input[name='\" + $dropdown.data('field-name') + \"']\").val();\n return assignTo(selected);\n }\n\n // Automatically close dropdown after assignee is selected\n // since CE has no multiple assignees\n // EE does not have a max-select\n if ($dropdown.data('max-select') && getSelected().length === $dropdown.data('max-select')) {\n // Close the dropdown\n $dropdown.dropdown('toggle');\n }\n },\n id: function id(user) {\n return user.id;\n },\n opened: function opened(e) {\n var $el = $(e.currentTarget);\n var selected = getSelected();\n if ($dropdown.hasClass('js-issue-board-sidebar') && selected.length === 0) {\n this.addInput($dropdown.data('field-name'), 0, {});\n }\n $el.find('.is-active').removeClass('is-active');\n\n function highlightSelected(id) {\n $el.find('li[data-user-id=\"' + id + '\"] .dropdown-menu-user-link').addClass('is-active');\n }\n\n if (selected.length > 0) {\n getSelected().forEach(function (selectedId) {\n return highlightSelected(selectedId);\n });\n } else if ($dropdown.hasClass('js-issue-board-sidebar')) {\n highlightSelected(0);\n } else {\n highlightSelected(selectedId);\n }\n },\n updateLabel: $dropdown.data('dropdown-title'),\n renderRow: function renderRow(user) {\n var avatar, img, listClosingTags, listWithName, listWithUserName, username;\n username = user.username ? \"@\" + user.username : \"\";\n avatar = user.avatar_url ? user.avatar_url : gon.default_avatar_url;\n\n var selected = false;\n\n if (this.multiSelect) {\n selected = getSelected().find(function (u) {\n return user.id === u;\n });\n\n var fieldName = this.fieldName;\n var field = $dropdown.closest('.selectbox').find(\"input[name='\" + fieldName + \"'][value='\" + user.id + \"']\");\n\n if (field.length) {\n selected = true;\n }\n } else {\n selected = user.id === selectedId;\n }\n\n img = \"\";\n if (user.beforeDivider != null) {\n '
  • ' + __WEBPACK_IMPORTED_MODULE_0_underscore___default.a.escape(user.name) + '
  • ';\n } else {\n img = \"\";\n }\n\n return '\\n
  • \\n \\n ' + img + '\\n \\n ' + __WEBPACK_IMPORTED_MODULE_0_underscore___default.a.escape(user.name) + '\\n \\n ' + (username ? '' + username + '' : '') + '\\n \\n
  • \\n ';\n }\n });\n };\n }(this));\n $('.ajax-users-select').each(function (_this) {\n return function (i, select) {\n var firstUser, showAnyUser, showEmailUser, showNullUser;\n var options = {};\n options.skipLdap = $(select).hasClass('skip_ldap');\n options.projectId = $(select).data('project-id');\n options.groupId = $(select).data('group-id');\n options.showCurrentUser = $(select).data('current-user');\n options.authorId = $(select).data('author-id');\n options.skipUsers = $(select).data('skip-users');\n showNullUser = $(select).data('null-user');\n showAnyUser = $(select).data('any-user');\n showEmailUser = $(select).data('email-user');\n firstUser = $(select).data('first-user');\n return $(select).select2({\n placeholder: \"Search for a user\",\n multiple: $(select).hasClass('multiselect'),\n minimumInputLength: 0,\n query: function query(_query) {\n return _this.users(_query.term, options, function (users) {\n var anyUser, data, emailUser, index, j, len, name, nullUser, obj, ref;\n data = {\n results: users\n };\n if (_query.term.length === 0) {\n if (firstUser) {\n // Move current user to the front of the list\n ref = data.results;\n for (index = j = 0, len = ref.length; j < len; index = j += 1) {\n obj = ref[index];\n if (obj.username === firstUser) {\n data.results.splice(index, 1);\n data.results.unshift(obj);\n break;\n }\n }\n }\n if (showNullUser) {\n nullUser = {\n name: '未指派',\n id: 0\n };\n data.results.unshift(nullUser);\n }\n if (showAnyUser) {\n name = showAnyUser;\n if (name === true) {\n name = 'Any User';\n }\n anyUser = {\n name: name,\n id: null\n };\n data.results.unshift(anyUser);\n }\n }\n if (showEmailUser && data.results.length === 0 && _query.term.match(/^[^@]+@[^@]+$/)) {\n var trimmed = _query.term.trim();\n emailUser = {\n name: \"邀请 \\\"\" + _query.term + \"\\\" by email\",\n username: trimmed,\n id: trimmed,\n invite: true\n };\n data.results.unshift(emailUser);\n }\n return _query.callback(data);\n });\n },\n initSelection: function initSelection() {\n var args;\n args = 1 <= arguments.length ? [].slice.call(arguments, 0) : [];\n return _this.initSelection.apply(_this, args);\n },\n formatResult: function formatResult() {\n var args;\n args = 1 <= arguments.length ? [].slice.call(arguments, 0) : [];\n return _this.formatResult.apply(_this, args);\n },\n formatSelection: function formatSelection() {\n var args;\n args = 1 <= arguments.length ? [].slice.call(arguments, 0) : [];\n return _this.formatSelection.apply(_this, args);\n },\n dropdownCssClass: \"ajax-users-dropdown\",\n // we do not want to escape markup since we are displaying html in results\n escapeMarkup: function escapeMarkup(m) {\n return m;\n }\n });\n };\n }(this));\n}\n\nUsersSelect.prototype.initSelection = function (element, callback) {\n var id, nullUser;\n id = $(element).val();\n if (id === \"0\") {\n nullUser = {\n name: '未指派'\n };\n return callback(nullUser);\n } else if (id !== \"\") {\n return this.user(id, callback);\n }\n};\n\nUsersSelect.prototype.formatResult = function (user) {\n var avatar;\n if (user.avatar_url) {\n avatar = user.avatar_url;\n } else {\n avatar = gon.default_avatar_url;\n }\n return \"
    \";\n};\n\nUsersSelect.prototype.formatSelection = function (user) {\n return __WEBPACK_IMPORTED_MODULE_0_underscore___default.a.escape(user.name);\n};\n\nUsersSelect.prototype.user = function (user_id, callback) {\n if (!/^\\d+$/.test(user_id)) {\n return false;\n }\n\n var url;\n url = this.buildUrl(this.userPath);\n url = url.replace(':id', user_id);\n return __WEBPACK_IMPORTED_MODULE_1__lib_utils_axios_utils__[\"a\" /* default */].get(url).then(function (_ref2) {\n var data = _ref2.data;\n\n callback(data);\n });\n};\n\n// Return users list. Filtered by query\n// Only active users retrieved\nUsersSelect.prototype.users = function (query, options, callback) {\n var url = this.buildUrl(this.usersPath);\n var params = {\n search: query,\n active: true,\n project_id: options.projectId || null,\n group_id: options.groupId || null,\n skip_ldap: options.skipLdap || null,\n todo_filter: options.todoFilter || null,\n todo_state_filter: options.todoStateFilter || null,\n current_user: options.showCurrentUser || null,\n author_id: options.authorId || null,\n skip_users: options.skipUsers || null\n };\n return __WEBPACK_IMPORTED_MODULE_1__lib_utils_axios_utils__[\"a\" /* default */].get(url, { params: params }).then(function (_ref3) {\n var data = _ref3.data;\n\n callback(data);\n });\n};\n\nUsersSelect.prototype.buildUrl = function (url) {\n if (gon.relative_url_root != null) {\n url = gon.relative_url_root.replace(/\\/$/, '') + url;\n }\n return url;\n};\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (UsersSelect);\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 = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\n/* harmony default export */ var components_identicon = (esExports);\n// CONCATENATED MODULE: ./vue_shared/components/identicon.vue\nvar normalizeComponent = __webpack_require__(\"../../../node_modules/vue-loader/lib/component-normalizer.js\")\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\nvar Component = normalizeComponent(\n identicon,\n components_identicon,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\n/* harmony default export */ var vue_shared_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 = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\n/* harmony default export */ var components_loading_icon = (esExports);\n// CONCATENATED MODULE: ./vue_shared/components/loading_icon.vue\nvar normalizeComponent = __webpack_require__(\"../../../node_modules/vue-loader/lib/component-normalizer.js\")\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\nvar Component = normalizeComponent(\n loading_icon,\n components_loading_icon,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\n/* harmony default export */ var vue_shared_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__[\"__\"],\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__[\"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__[\"s__\"],\n sprintf: __WEBPACK_IMPORTED_MODULE_0__locale__[\"sprintf\"]\n }\n });\n});\n\n/***/ }),\n\n/***/ \"./zen_mode.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_vendor_jquery_scrollTo__ = __webpack_require__(\"../../../vendor/assets/javascripts/jquery.scrollTo.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_vendor_jquery_scrollTo___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_vendor_jquery_scrollTo__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_dropzone__ = __webpack_require__(\"../../../node_modules/dropzone/dist/dropzone.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_dropzone___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_dropzone__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_mousetrap__ = __webpack_require__(\"../../../node_modules/mousetrap/mousetrap.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_mousetrap___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_mousetrap__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_mousetrap_plugins_pause_mousetrap_pause__ = __webpack_require__(\"../../../node_modules/mousetrap/plugins/pause/mousetrap-pause.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_mousetrap_plugins_pause_mousetrap_pause___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_mousetrap_plugins_pause_mousetrap_pause__);\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, prefer-arrow-callback, no-unused-vars, consistent-return, camelcase, comma-dangle, max-len, class-methods-use-this */\n\n// Zen Mode (full screen) textarea\n//\n/*= provides zen_mode:enter */\n/*= provides zen_mode:leave */\n\n\n\n\n\n\n__WEBPACK_IMPORTED_MODULE_1_dropzone___default.a.autoDiscover = false;\n\n//\n// ### Events\n//\n// `zen_mode:enter`\n//\n// Fired when the \"Edit in fullscreen\" link is clicked.\n//\n// **Synchronicity** Sync\n// **Bubbles** Yes\n// **Cancelable** No\n// **Target** a.js-zen-enter\n//\n// `zen_mode:leave`\n//\n// Fired when the \"Leave Fullscreen\" link is clicked.\n//\n// **Synchronicity** Sync\n// **Bubbles** Yes\n// **Cancelable** No\n// **Target** a.js-zen-leave\n//\n\nvar ZenMode = function () {\n function ZenMode() {\n _classCallCheck(this, ZenMode);\n\n this.active_backdrop = null;\n this.active_textarea = null;\n $(document).on('click', '.js-zen-enter', function (e) {\n e.preventDefault();\n return $(e.currentTarget).trigger('zen_mode:enter');\n });\n $(document).on('click', '.js-zen-leave', function (e) {\n e.preventDefault();\n return $(e.currentTarget).trigger('zen_mode:leave');\n });\n $(document).on('zen_mode:enter', function (_this) {\n return function (e) {\n return _this.enter($(e.target).closest('.md-area').find('.zen-backdrop'));\n };\n }(this));\n $(document).on('zen_mode:leave', function (_this) {\n return function (e) {\n return _this.exit();\n };\n }(this));\n $(document).on('keydown', function (e) {\n // Esc\n if (e.keyCode === 27) {\n e.preventDefault();\n return $(document).trigger('zen_mode:leave');\n }\n });\n }\n\n _createClass(ZenMode, [{\n key: 'enter',\n value: function enter(backdrop) {\n __WEBPACK_IMPORTED_MODULE_2_mousetrap___default.a.pause();\n this.active_backdrop = $(backdrop);\n this.active_backdrop.addClass('fullscreen');\n this.active_textarea = this.active_backdrop.find('textarea');\n // Prevent a user-resized textarea from persisting to fullscreen\n this.active_textarea.removeAttr('style');\n this.active_textarea.focus();\n }\n }, {\n key: 'exit',\n value: function exit() {\n if (this.active_textarea) {\n __WEBPACK_IMPORTED_MODULE_2_mousetrap___default.a.unpause();\n this.active_textarea.closest('.zen-backdrop').removeClass('fullscreen');\n this.scrollTo(this.active_textarea);\n this.active_textarea = null;\n this.active_backdrop = null;\n\n var $dropzone = $('.div-dropzone');\n if ($dropzone && !$dropzone.hasClass('js-invalid-dropzone')) {\n __WEBPACK_IMPORTED_MODULE_1_dropzone___default.a.forElement('.div-dropzone').enable();\n }\n }\n }\n }, {\n key: 'scrollTo',\n value: function scrollTo(zen_area) {\n return $.scrollTo(zen_area, 0, {\n offset: -150\n });\n }\n }]);\n\n return ZenMode;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (ZenMode);\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\n\n/***/ }),\n\n/***/ \"ignored /opt/gitlab/embedded/service/gitlab-rails/node_modules/vue-resource/dist got\":\n/***/ (function(module, exports) {\n\n/* (ignored) */\n\n/***/ })\n\n},[\"./main.js\"]);\n\n\n// WEBPACK FOOTER //\n// main.1b26159fcc681f215a1f.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","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"TaskList\"] = factory();\n\telse\n\t\troot[\"TaskList\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports) {\n\nvar NodeArray, TaskList, closest, createEvent,\n indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\n\nNodeArray = function(nodeList) {\n return Array.prototype.slice.apply(nodeList);\n};\n\nclosest = function(el, className) {\n while (el && !el.classList.contains(className)) {\n el = el.parentNode;\n }\n return el;\n};\n\ncreateEvent = function(eventName, detail) {\n var event;\n if (typeof Event === 'function') {\n event = new Event(eventName, {\n bubbles: true,\n cancelable: true\n });\n event.detail = detail;\n } else {\n event = document.createEvent('CustomEvent');\n event.initCustomEvent(eventName, true, true, detail);\n }\n return event;\n};\n\nTaskList = (function() {\n function TaskList(el1) {\n this.el = el1;\n this.container = closest(this.el, 'js-task-list-container');\n this.field = this.container.querySelector('.js-task-list-field');\n this.container.addEventListener('change', (function(_this) {\n return function(event) {\n if (event.target.classList.contains('task-list-item-checkbox')) {\n return _this.updateTaskList(event.target);\n }\n };\n })(this));\n this.enable();\n }\n\n TaskList.prototype.enable = function() {\n var event;\n if (this.container.querySelectorAll('.js-task-list-field').length > 0) {\n NodeArray(this.container.querySelectorAll('.task-list-item')).forEach(function(item) {\n return item.classList.add('enabled');\n });\n NodeArray(this.container.querySelectorAll('.task-list-item-checkbox')).forEach(function(checkbox) {\n return checkbox.disabled = false;\n });\n this.container.classList.add('is-task-list-enabled');\n event = createEvent('tasklist:enabled');\n return this.container.dispatchEvent(event);\n }\n };\n\n TaskList.prototype.disable = function() {\n var event;\n NodeArray(this.container.querySelectorAll('.task-list-item')).forEach(function(item) {\n return item.classList.remove('enabled');\n });\n NodeArray(this.container.querySelectorAll('.task-list-item-checkbox')).forEach(function(checkbox) {\n return checkbox.disabled = true;\n });\n this.container.classList.remove('is-task-list-enabled');\n event = createEvent('tasklist:disabled');\n return this.container.dispatchEvent(event);\n };\n\n TaskList.prototype.updateTaskList = function(item) {\n var changeEvent, changedEvent, checkboxes, index;\n checkboxes = this.container.querySelectorAll('.task-list-item-checkbox');\n index = 1 + NodeArray(checkboxes).indexOf(item);\n changeEvent = createEvent('tasklist:change', {\n index: index,\n checked: item.checked\n });\n this.field.dispatchEvent(changeEvent);\n if (!changeEvent.defaultPrevented) {\n this.field.value = TaskList.updateSource(this.field.value, index, item.checked);\n changeEvent = createEvent('change');\n this.field.dispatchEvent(changeEvent);\n changedEvent = createEvent('tasklist:changed', {\n index: index,\n checked: item.checked\n });\n return this.field.dispatchEvent(changedEvent);\n }\n };\n\n TaskList.incomplete = \"[ ]\";\n\n TaskList.complete = \"[x]\";\n\n TaskList.escapePattern = function(str) {\n return str.replace(/([\\[\\]])/g, \"\\\\$1\").replace(/\\s/, \"\\\\s\").replace(\"x\", \"[xX]\");\n };\n\n TaskList.incompletePattern = RegExp(\"\" + (TaskList.escapePattern(TaskList.incomplete)));\n\n TaskList.completePattern = RegExp(\"\" + (TaskList.escapePattern(TaskList.complete)));\n\n TaskList.itemPattern = RegExp(\"^(?:\\\\s*(?:>\\\\s*)*(?:[-+*]|(?:\\\\d+\\\\.)))\\\\s*(\" + (TaskList.escapePattern(TaskList.complete)) + \"|\" + (TaskList.escapePattern(TaskList.incomplete)) + \")\\\\s+(?!\\\\(.*?\\\\))(?=(?:\\\\[.*?\\\\]\\\\s*(?:\\\\[.*?\\\\]|\\\\(.*?\\\\))\\\\s*)*(?:[^\\\\[]|$))\");\n\n TaskList.startFencesPattern = /^`{3}.*$/;\n\n TaskList.endFencesPattern = /^`{3}$/;\n\n TaskList.itemsInParasPattern = RegExp(\"^(\" + (TaskList.escapePattern(TaskList.complete)) + \"|\" + (TaskList.escapePattern(TaskList.incomplete)) + \").+$\", \"g\");\n\n TaskList.updateSource = function(source, itemIndex, checked) {\n var clean, inCodeBlock, index, line, result;\n clean = source.replace(/\\r/g, '').replace(this.itemsInParasPattern, '').split(\"\\n\");\n index = 0;\n inCodeBlock = false;\n result = (function() {\n var i, len, ref, results;\n ref = source.split(\"\\n\");\n results = [];\n for (i = 0, len = ref.length; i < len; i++) {\n line = ref[i];\n if (inCodeBlock) {\n if (line.match(this.endFencesPattern)) {\n inCodeBlock = false;\n }\n } else if (line.match(this.startFencesPattern)) {\n inCodeBlock = true;\n } else if (indexOf.call(clean, line) >= 0 && line.match(this.itemPattern)) {\n index += 1;\n if (index === itemIndex) {\n line = checked ? line.replace(this.incompletePattern, this.complete) : line.replace(this.completePattern, this.incomplete);\n }\n }\n results.push(line);\n }\n return results;\n }).call(this);\n return result.join(\"\\n\");\n };\n\n return TaskList;\n\n})();\n\nif (typeof jQuery !== 'undefined') {\n jQuery.fn.taskList = function(method) {\n return this.each(function(index, el) {\n var taskList;\n taskList = jQuery(el).data('task-list');\n if (!taskList) {\n taskList = new TaskList(el);\n jQuery(el).data('task-list', taskList);\n if (!method || method === 'enable') {\n return;\n }\n }\n return taskList[method || 'enable']();\n });\n };\n}\n\nmodule.exports = TaskList;\n\n\n/***/ })\n/******/ ]);\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// /opt/gitlab/embedded/service/gitlab-rails/node_modules/deckar01-task_list/dist/task_list.js\n// module id = ../../../node_modules/deckar01-task_list/dist/task_list.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","\n/*\n *\n * More info at [www.dropzonejs.com](http://www.dropzonejs.com)\n *\n * Copyright (c) 2012, Matias Meno\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n *\n */\n\n(function() {\n var Dropzone, Emitter, camelize, contentLoaded, detectVerticalSquash, drawImageIOSFix, noop, without,\n __slice = [].slice,\n __hasProp = {}.hasOwnProperty,\n __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n noop = function() {};\n\n Emitter = (function() {\n function Emitter() {}\n\n Emitter.prototype.addEventListener = Emitter.prototype.on;\n\n Emitter.prototype.on = function(event, fn) {\n this._callbacks = this._callbacks || {};\n if (!this._callbacks[event]) {\n this._callbacks[event] = [];\n }\n this._callbacks[event].push(fn);\n return this;\n };\n\n Emitter.prototype.emit = function() {\n var args, callback, callbacks, event, _i, _len;\n event = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\n this._callbacks = this._callbacks || {};\n callbacks = this._callbacks[event];\n if (callbacks) {\n for (_i = 0, _len = callbacks.length; _i < _len; _i++) {\n callback = callbacks[_i];\n callback.apply(this, args);\n }\n }\n return this;\n };\n\n Emitter.prototype.removeListener = Emitter.prototype.off;\n\n Emitter.prototype.removeAllListeners = Emitter.prototype.off;\n\n Emitter.prototype.removeEventListener = Emitter.prototype.off;\n\n Emitter.prototype.off = function(event, fn) {\n var callback, callbacks, i, _i, _len;\n if (!this._callbacks || arguments.length === 0) {\n this._callbacks = {};\n return this;\n }\n callbacks = this._callbacks[event];\n if (!callbacks) {\n return this;\n }\n if (arguments.length === 1) {\n delete this._callbacks[event];\n return this;\n }\n for (i = _i = 0, _len = callbacks.length; _i < _len; i = ++_i) {\n callback = callbacks[i];\n if (callback === fn) {\n callbacks.splice(i, 1);\n break;\n }\n }\n return this;\n };\n\n return Emitter;\n\n })();\n\n Dropzone = (function(_super) {\n var extend, resolveOption;\n\n __extends(Dropzone, _super);\n\n Dropzone.prototype.Emitter = Emitter;\n\n\n /*\n This is a list of all available events you can register on a dropzone object.\n \n You can register an event handler like this:\n \n dropzone.on(\"dragEnter\", function() { });\n */\n\n Dropzone.prototype.events = [\"drop\", \"dragstart\", \"dragend\", \"dragenter\", \"dragover\", \"dragleave\", \"addedfile\", \"addedfiles\", \"removedfile\", \"thumbnail\", \"error\", \"errormultiple\", \"processing\", \"processingmultiple\", \"uploadprogress\", \"totaluploadprogress\", \"sending\", \"sendingmultiple\", \"success\", \"successmultiple\", \"canceled\", \"canceledmultiple\", \"complete\", \"completemultiple\", \"reset\", \"maxfilesexceeded\", \"maxfilesreached\", \"queuecomplete\"];\n\n Dropzone.prototype.defaultOptions = {\n url: null,\n method: \"post\",\n withCredentials: false,\n parallelUploads: 2,\n uploadMultiple: false,\n maxFilesize: 256,\n paramName: \"file\",\n createImageThumbnails: true,\n maxThumbnailFilesize: 10,\n thumbnailWidth: 120,\n thumbnailHeight: 120,\n filesizeBase: 1000,\n maxFiles: null,\n params: {},\n clickable: true,\n ignoreHiddenFiles: true,\n acceptedFiles: null,\n acceptedMimeTypes: null,\n autoProcessQueue: true,\n autoQueue: true,\n addRemoveLinks: false,\n previewsContainer: null,\n hiddenInputContainer: \"body\",\n capture: null,\n dictDefaultMessage: \"Drop files here to upload\",\n dictFallbackMessage: \"Your browser does not support drag'n'drop file uploads.\",\n dictFallbackText: \"Please use the fallback form below to upload your files like in the olden days.\",\n dictFileTooBig: \"File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.\",\n dictInvalidFileType: \"You can't upload files of this type.\",\n dictResponseError: \"Server responded with {{statusCode}} code.\",\n dictCancelUpload: \"Cancel upload\",\n dictCancelUploadConfirmation: \"Are you sure you want to cancel this upload?\",\n dictRemoveFile: \"Remove file\",\n dictRemoveFileConfirmation: null,\n dictMaxFilesExceeded: \"You can not upload any more files.\",\n accept: function(file, done) {\n return done();\n },\n init: function() {\n return noop;\n },\n forceFallback: false,\n fallback: function() {\n var child, messageElement, span, _i, _len, _ref;\n this.element.className = \"\" + this.element.className + \" dz-browser-not-supported\";\n _ref = this.element.getElementsByTagName(\"div\");\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n child = _ref[_i];\n if (/(^| )dz-message($| )/.test(child.className)) {\n messageElement = child;\n child.className = \"dz-message\";\n continue;\n }\n }\n if (!messageElement) {\n messageElement = Dropzone.createElement(\"
    \");\n this.element.appendChild(messageElement);\n }\n span = messageElement.getElementsByTagName(\"span\")[0];\n if (span) {\n if (span.textContent != null) {\n span.textContent = this.options.dictFallbackMessage;\n } else if (span.innerText != null) {\n span.innerText = this.options.dictFallbackMessage;\n }\n }\n return this.element.appendChild(this.getFallbackForm());\n },\n resize: function(file) {\n var info, srcRatio, trgRatio;\n info = {\n srcX: 0,\n srcY: 0,\n srcWidth: file.width,\n srcHeight: file.height\n };\n srcRatio = file.width / file.height;\n info.optWidth = this.options.thumbnailWidth;\n info.optHeight = this.options.thumbnailHeight;\n if ((info.optWidth == null) && (info.optHeight == null)) {\n info.optWidth = info.srcWidth;\n info.optHeight = info.srcHeight;\n } else if (info.optWidth == null) {\n info.optWidth = srcRatio * info.optHeight;\n } else if (info.optHeight == null) {\n info.optHeight = (1 / srcRatio) * info.optWidth;\n }\n trgRatio = info.optWidth / info.optHeight;\n if (file.height < info.optHeight || file.width < info.optWidth) {\n info.trgHeight = info.srcHeight;\n info.trgWidth = info.srcWidth;\n } else {\n if (srcRatio > trgRatio) {\n info.srcHeight = file.height;\n info.srcWidth = info.srcHeight * trgRatio;\n } else {\n info.srcWidth = file.width;\n info.srcHeight = info.srcWidth / trgRatio;\n }\n }\n info.srcX = (file.width - info.srcWidth) / 2;\n info.srcY = (file.height - info.srcHeight) / 2;\n return info;\n },\n\n /*\n Those functions register themselves to the events on init and handle all\n the user interface specific stuff. Overwriting them won't break the upload\n but can break the way it's displayed.\n You can overwrite them if you don't like the default behavior. If you just\n want to add an additional event handler, register it on the dropzone object\n and don't overwrite those options.\n */\n drop: function(e) {\n return this.element.classList.remove(\"dz-drag-hover\");\n },\n dragstart: noop,\n dragend: function(e) {\n return this.element.classList.remove(\"dz-drag-hover\");\n },\n dragenter: function(e) {\n return this.element.classList.add(\"dz-drag-hover\");\n },\n dragover: function(e) {\n return this.element.classList.add(\"dz-drag-hover\");\n },\n dragleave: function(e) {\n return this.element.classList.remove(\"dz-drag-hover\");\n },\n paste: noop,\n reset: function() {\n return this.element.classList.remove(\"dz-started\");\n },\n addedfile: function(file) {\n var node, removeFileEvent, removeLink, _i, _j, _k, _len, _len1, _len2, _ref, _ref1, _ref2, _results;\n if (this.element === this.previewsContainer) {\n this.element.classList.add(\"dz-started\");\n }\n if (this.previewsContainer) {\n file.previewElement = Dropzone.createElement(this.options.previewTemplate.trim());\n file.previewTemplate = file.previewElement;\n this.previewsContainer.appendChild(file.previewElement);\n _ref = file.previewElement.querySelectorAll(\"[data-dz-name]\");\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n node = _ref[_i];\n node.textContent = file.name;\n }\n _ref1 = file.previewElement.querySelectorAll(\"[data-dz-size]\");\n for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {\n node = _ref1[_j];\n node.innerHTML = this.filesize(file.size);\n }\n if (this.options.addRemoveLinks) {\n file._removeLink = Dropzone.createElement(\"\" + this.options.dictRemoveFile + \"\");\n file.previewElement.appendChild(file._removeLink);\n }\n removeFileEvent = (function(_this) {\n return function(e) {\n e.preventDefault();\n e.stopPropagation();\n if (file.status === Dropzone.UPLOADING) {\n return Dropzone.confirm(_this.options.dictCancelUploadConfirmation, function() {\n return _this.removeFile(file);\n });\n } else {\n if (_this.options.dictRemoveFileConfirmation) {\n return Dropzone.confirm(_this.options.dictRemoveFileConfirmation, function() {\n return _this.removeFile(file);\n });\n } else {\n return _this.removeFile(file);\n }\n }\n };\n })(this);\n _ref2 = file.previewElement.querySelectorAll(\"[data-dz-remove]\");\n _results = [];\n for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) {\n removeLink = _ref2[_k];\n _results.push(removeLink.addEventListener(\"click\", removeFileEvent));\n }\n return _results;\n }\n },\n removedfile: function(file) {\n var _ref;\n if (file.previewElement) {\n if ((_ref = file.previewElement) != null) {\n _ref.parentNode.removeChild(file.previewElement);\n }\n }\n return this._updateMaxFilesReachedClass();\n },\n thumbnail: function(file, dataUrl) {\n var thumbnailElement, _i, _len, _ref;\n if (file.previewElement) {\n file.previewElement.classList.remove(\"dz-file-preview\");\n _ref = file.previewElement.querySelectorAll(\"[data-dz-thumbnail]\");\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n thumbnailElement = _ref[_i];\n thumbnailElement.alt = file.name;\n thumbnailElement.src = dataUrl;\n }\n return setTimeout(((function(_this) {\n return function() {\n return file.previewElement.classList.add(\"dz-image-preview\");\n };\n })(this)), 1);\n }\n },\n error: function(file, message) {\n var node, _i, _len, _ref, _results;\n if (file.previewElement) {\n file.previewElement.classList.add(\"dz-error\");\n if (typeof message !== \"String\" && message.error) {\n message = message.error;\n }\n _ref = file.previewElement.querySelectorAll(\"[data-dz-errormessage]\");\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n node = _ref[_i];\n _results.push(node.textContent = message);\n }\n return _results;\n }\n },\n errormultiple: noop,\n processing: function(file) {\n if (file.previewElement) {\n file.previewElement.classList.add(\"dz-processing\");\n if (file._removeLink) {\n return file._removeLink.textContent = this.options.dictCancelUpload;\n }\n }\n },\n processingmultiple: noop,\n uploadprogress: function(file, progress, bytesSent) {\n var node, _i, _len, _ref, _results;\n if (file.previewElement) {\n _ref = file.previewElement.querySelectorAll(\"[data-dz-uploadprogress]\");\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n node = _ref[_i];\n if (node.nodeName === 'PROGRESS') {\n _results.push(node.value = progress);\n } else {\n _results.push(node.style.width = \"\" + progress + \"%\");\n }\n }\n return _results;\n }\n },\n totaluploadprogress: noop,\n sending: noop,\n sendingmultiple: noop,\n success: function(file) {\n if (file.previewElement) {\n return file.previewElement.classList.add(\"dz-success\");\n }\n },\n successmultiple: noop,\n canceled: function(file) {\n return this.emit(\"error\", file, \"Upload canceled.\");\n },\n canceledmultiple: noop,\n complete: function(file) {\n if (file._removeLink) {\n file._removeLink.textContent = this.options.dictRemoveFile;\n }\n if (file.previewElement) {\n return file.previewElement.classList.add(\"dz-complete\");\n }\n },\n completemultiple: noop,\n maxfilesexceeded: noop,\n maxfilesreached: noop,\n queuecomplete: noop,\n addedfiles: noop,\n previewTemplate: \"
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Check\\n \\n \\n \\n \\n \\n
    \\n
    \\n \\n Error\\n \\n \\n \\n \\n \\n \\n \\n
    \\n
    \"\n };\n\n extend = function() {\n var key, object, objects, target, val, _i, _len;\n target = arguments[0], objects = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\n for (_i = 0, _len = objects.length; _i < _len; _i++) {\n object = objects[_i];\n for (key in object) {\n val = object[key];\n target[key] = val;\n }\n }\n return target;\n };\n\n function Dropzone(element, options) {\n var elementOptions, fallback, _ref;\n this.element = element;\n this.version = Dropzone.version;\n this.defaultOptions.previewTemplate = this.defaultOptions.previewTemplate.replace(/\\n*/g, \"\");\n this.clickableElements = [];\n this.listeners = [];\n this.files = [];\n if (typeof this.element === \"string\") {\n this.element = document.querySelector(this.element);\n }\n if (!(this.element && (this.element.nodeType != null))) {\n throw new Error(\"Invalid dropzone element.\");\n }\n if (this.element.dropzone) {\n throw new Error(\"Dropzone already attached.\");\n }\n Dropzone.instances.push(this);\n this.element.dropzone = this;\n elementOptions = (_ref = Dropzone.optionsForElement(this.element)) != null ? _ref : {};\n this.options = extend({}, this.defaultOptions, elementOptions, options != null ? options : {});\n if (this.options.forceFallback || !Dropzone.isBrowserSupported()) {\n return this.options.fallback.call(this);\n }\n if (this.options.url == null) {\n this.options.url = this.element.getAttribute(\"action\");\n }\n if (!this.options.url) {\n throw new Error(\"No URL provided.\");\n }\n if (this.options.acceptedFiles && this.options.acceptedMimeTypes) {\n throw new Error(\"You can't provide both 'acceptedFiles' and 'acceptedMimeTypes'. 'acceptedMimeTypes' is deprecated.\");\n }\n if (this.options.acceptedMimeTypes) {\n this.options.acceptedFiles = this.options.acceptedMimeTypes;\n delete this.options.acceptedMimeTypes;\n }\n this.options.method = this.options.method.toUpperCase();\n if ((fallback = this.getExistingFallback()) && fallback.parentNode) {\n fallback.parentNode.removeChild(fallback);\n }\n if (this.options.previewsContainer !== false) {\n if (this.options.previewsContainer) {\n this.previewsContainer = Dropzone.getElement(this.options.previewsContainer, \"previewsContainer\");\n } else {\n this.previewsContainer = this.element;\n }\n }\n if (this.options.clickable) {\n if (this.options.clickable === true) {\n this.clickableElements = [this.element];\n } else {\n this.clickableElements = Dropzone.getElements(this.options.clickable, \"clickable\");\n }\n }\n this.init();\n }\n\n Dropzone.prototype.getAcceptedFiles = function() {\n var file, _i, _len, _ref, _results;\n _ref = this.files;\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n file = _ref[_i];\n if (file.accepted) {\n _results.push(file);\n }\n }\n return _results;\n };\n\n Dropzone.prototype.getRejectedFiles = function() {\n var file, _i, _len, _ref, _results;\n _ref = this.files;\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n file = _ref[_i];\n if (!file.accepted) {\n _results.push(file);\n }\n }\n return _results;\n };\n\n Dropzone.prototype.getFilesWithStatus = function(status) {\n var file, _i, _len, _ref, _results;\n _ref = this.files;\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n file = _ref[_i];\n if (file.status === status) {\n _results.push(file);\n }\n }\n return _results;\n };\n\n Dropzone.prototype.getQueuedFiles = function() {\n return this.getFilesWithStatus(Dropzone.QUEUED);\n };\n\n Dropzone.prototype.getUploadingFiles = function() {\n return this.getFilesWithStatus(Dropzone.UPLOADING);\n };\n\n Dropzone.prototype.getAddedFiles = function() {\n return this.getFilesWithStatus(Dropzone.ADDED);\n };\n\n Dropzone.prototype.getActiveFiles = function() {\n var file, _i, _len, _ref, _results;\n _ref = this.files;\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n file = _ref[_i];\n if (file.status === Dropzone.UPLOADING || file.status === Dropzone.QUEUED) {\n _results.push(file);\n }\n }\n return _results;\n };\n\n Dropzone.prototype.init = function() {\n var eventName, noPropagation, setupHiddenFileInput, _i, _len, _ref, _ref1;\n if (this.element.tagName === \"form\") {\n this.element.setAttribute(\"enctype\", \"multipart/form-data\");\n }\n if (this.element.classList.contains(\"dropzone\") && !this.element.querySelector(\".dz-message\")) {\n this.element.appendChild(Dropzone.createElement(\"
    \" + this.options.dictDefaultMessage + \"
    \"));\n }\n if (this.clickableElements.length) {\n setupHiddenFileInput = (function(_this) {\n return function() {\n if (_this.hiddenFileInput) {\n _this.hiddenFileInput.parentNode.removeChild(_this.hiddenFileInput);\n }\n _this.hiddenFileInput = document.createElement(\"input\");\n _this.hiddenFileInput.setAttribute(\"type\", \"file\");\n if ((_this.options.maxFiles == null) || _this.options.maxFiles > 1) {\n _this.hiddenFileInput.setAttribute(\"multiple\", \"multiple\");\n }\n _this.hiddenFileInput.className = \"dz-hidden-input\";\n if (_this.options.acceptedFiles != null) {\n _this.hiddenFileInput.setAttribute(\"accept\", _this.options.acceptedFiles);\n }\n if (_this.options.capture != null) {\n _this.hiddenFileInput.setAttribute(\"capture\", _this.options.capture);\n }\n _this.hiddenFileInput.style.visibility = \"hidden\";\n _this.hiddenFileInput.style.position = \"absolute\";\n _this.hiddenFileInput.style.top = \"0\";\n _this.hiddenFileInput.style.left = \"0\";\n _this.hiddenFileInput.style.height = \"0\";\n _this.hiddenFileInput.style.width = \"0\";\n document.querySelector(_this.options.hiddenInputContainer).appendChild(_this.hiddenFileInput);\n return _this.hiddenFileInput.addEventListener(\"change\", function() {\n var file, files, _i, _len;\n files = _this.hiddenFileInput.files;\n if (files.length) {\n for (_i = 0, _len = files.length; _i < _len; _i++) {\n file = files[_i];\n _this.addFile(file);\n }\n }\n _this.emit(\"addedfiles\", files);\n return setupHiddenFileInput();\n });\n };\n })(this);\n setupHiddenFileInput();\n }\n this.URL = (_ref = window.URL) != null ? _ref : window.webkitURL;\n _ref1 = this.events;\n for (_i = 0, _len = _ref1.length; _i < _len; _i++) {\n eventName = _ref1[_i];\n this.on(eventName, this.options[eventName]);\n }\n this.on(\"uploadprogress\", (function(_this) {\n return function() {\n return _this.updateTotalUploadProgress();\n };\n })(this));\n this.on(\"removedfile\", (function(_this) {\n return function() {\n return _this.updateTotalUploadProgress();\n };\n })(this));\n this.on(\"canceled\", (function(_this) {\n return function(file) {\n return _this.emit(\"complete\", file);\n };\n })(this));\n this.on(\"complete\", (function(_this) {\n return function(file) {\n if (_this.getAddedFiles().length === 0 && _this.getUploadingFiles().length === 0 && _this.getQueuedFiles().length === 0) {\n return setTimeout((function() {\n return _this.emit(\"queuecomplete\");\n }), 0);\n }\n };\n })(this));\n noPropagation = function(e) {\n e.stopPropagation();\n if (e.preventDefault) {\n return e.preventDefault();\n } else {\n return e.returnValue = false;\n }\n };\n this.listeners = [\n {\n element: this.element,\n events: {\n \"dragstart\": (function(_this) {\n return function(e) {\n return _this.emit(\"dragstart\", e);\n };\n })(this),\n \"dragenter\": (function(_this) {\n return function(e) {\n noPropagation(e);\n return _this.emit(\"dragenter\", e);\n };\n })(this),\n \"dragover\": (function(_this) {\n return function(e) {\n var efct;\n try {\n efct = e.dataTransfer.effectAllowed;\n } catch (_error) {}\n e.dataTransfer.dropEffect = 'move' === efct || 'linkMove' === efct ? 'move' : 'copy';\n noPropagation(e);\n return _this.emit(\"dragover\", e);\n };\n })(this),\n \"dragleave\": (function(_this) {\n return function(e) {\n return _this.emit(\"dragleave\", e);\n };\n })(this),\n \"drop\": (function(_this) {\n return function(e) {\n noPropagation(e);\n return _this.drop(e);\n };\n })(this),\n \"dragend\": (function(_this) {\n return function(e) {\n return _this.emit(\"dragend\", e);\n };\n })(this)\n }\n }\n ];\n this.clickableElements.forEach((function(_this) {\n return function(clickableElement) {\n return _this.listeners.push({\n element: clickableElement,\n events: {\n \"click\": function(evt) {\n if ((clickableElement !== _this.element) || (evt.target === _this.element || Dropzone.elementInside(evt.target, _this.element.querySelector(\".dz-message\")))) {\n _this.hiddenFileInput.click();\n }\n return true;\n }\n }\n });\n };\n })(this));\n this.enable();\n return this.options.init.call(this);\n };\n\n Dropzone.prototype.destroy = function() {\n var _ref;\n this.disable();\n this.removeAllFiles(true);\n if ((_ref = this.hiddenFileInput) != null ? _ref.parentNode : void 0) {\n this.hiddenFileInput.parentNode.removeChild(this.hiddenFileInput);\n this.hiddenFileInput = null;\n }\n delete this.element.dropzone;\n return Dropzone.instances.splice(Dropzone.instances.indexOf(this), 1);\n };\n\n Dropzone.prototype.updateTotalUploadProgress = function() {\n var activeFiles, file, totalBytes, totalBytesSent, totalUploadProgress, _i, _len, _ref;\n totalBytesSent = 0;\n totalBytes = 0;\n activeFiles = this.getActiveFiles();\n if (activeFiles.length) {\n _ref = this.getActiveFiles();\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n file = _ref[_i];\n totalBytesSent += file.upload.bytesSent;\n totalBytes += file.upload.total;\n }\n totalUploadProgress = 100 * totalBytesSent / totalBytes;\n } else {\n totalUploadProgress = 100;\n }\n return this.emit(\"totaluploadprogress\", totalUploadProgress, totalBytes, totalBytesSent);\n };\n\n Dropzone.prototype._getParamName = function(n) {\n if (typeof this.options.paramName === \"function\") {\n return this.options.paramName(n);\n } else {\n return \"\" + this.options.paramName + (this.options.uploadMultiple ? \"[\" + n + \"]\" : \"\");\n }\n };\n\n Dropzone.prototype.getFallbackForm = function() {\n var existingFallback, fields, fieldsString, form;\n if (existingFallback = this.getExistingFallback()) {\n return existingFallback;\n }\n fieldsString = \"
    \";\n if (this.options.dictFallbackText) {\n fieldsString += \"

    \" + this.options.dictFallbackText + \"

    \";\n }\n fieldsString += \"
    \";\n fields = Dropzone.createElement(fieldsString);\n if (this.element.tagName !== \"FORM\") {\n form = Dropzone.createElement(\"
    \");\n form.appendChild(fields);\n } else {\n this.element.setAttribute(\"enctype\", \"multipart/form-data\");\n this.element.setAttribute(\"method\", this.options.method);\n }\n return form != null ? form : fields;\n };\n\n Dropzone.prototype.getExistingFallback = function() {\n var fallback, getFallback, tagName, _i, _len, _ref;\n getFallback = function(elements) {\n var el, _i, _len;\n for (_i = 0, _len = elements.length; _i < _len; _i++) {\n el = elements[_i];\n if (/(^| )fallback($| )/.test(el.className)) {\n return el;\n }\n }\n };\n _ref = [\"div\", \"form\"];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n tagName = _ref[_i];\n if (fallback = getFallback(this.element.getElementsByTagName(tagName))) {\n return fallback;\n }\n }\n };\n\n Dropzone.prototype.setupEventListeners = function() {\n var elementListeners, event, listener, _i, _len, _ref, _results;\n _ref = this.listeners;\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n elementListeners = _ref[_i];\n _results.push((function() {\n var _ref1, _results1;\n _ref1 = elementListeners.events;\n _results1 = [];\n for (event in _ref1) {\n listener = _ref1[event];\n _results1.push(elementListeners.element.addEventListener(event, listener, false));\n }\n return _results1;\n })());\n }\n return _results;\n };\n\n Dropzone.prototype.removeEventListeners = function() {\n var elementListeners, event, listener, _i, _len, _ref, _results;\n _ref = this.listeners;\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n elementListeners = _ref[_i];\n _results.push((function() {\n var _ref1, _results1;\n _ref1 = elementListeners.events;\n _results1 = [];\n for (event in _ref1) {\n listener = _ref1[event];\n _results1.push(elementListeners.element.removeEventListener(event, listener, false));\n }\n return _results1;\n })());\n }\n return _results;\n };\n\n Dropzone.prototype.disable = function() {\n var file, _i, _len, _ref, _results;\n this.clickableElements.forEach(function(element) {\n return element.classList.remove(\"dz-clickable\");\n });\n this.removeEventListeners();\n _ref = this.files;\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n file = _ref[_i];\n _results.push(this.cancelUpload(file));\n }\n return _results;\n };\n\n Dropzone.prototype.enable = function() {\n this.clickableElements.forEach(function(element) {\n return element.classList.add(\"dz-clickable\");\n });\n return this.setupEventListeners();\n };\n\n Dropzone.prototype.filesize = function(size) {\n var cutoff, i, selectedSize, selectedUnit, unit, units, _i, _len;\n selectedSize = 0;\n selectedUnit = \"b\";\n if (size > 0) {\n units = ['TB', 'GB', 'MB', 'KB', 'b'];\n for (i = _i = 0, _len = units.length; _i < _len; i = ++_i) {\n unit = units[i];\n cutoff = Math.pow(this.options.filesizeBase, 4 - i) / 10;\n if (size >= cutoff) {\n selectedSize = size / Math.pow(this.options.filesizeBase, 4 - i);\n selectedUnit = unit;\n break;\n }\n }\n selectedSize = Math.round(10 * selectedSize) / 10;\n }\n return \"\" + selectedSize + \" \" + selectedUnit;\n };\n\n Dropzone.prototype._updateMaxFilesReachedClass = function() {\n if ((this.options.maxFiles != null) && this.getAcceptedFiles().length >= this.options.maxFiles) {\n if (this.getAcceptedFiles().length === this.options.maxFiles) {\n this.emit('maxfilesreached', this.files);\n }\n return this.element.classList.add(\"dz-max-files-reached\");\n } else {\n return this.element.classList.remove(\"dz-max-files-reached\");\n }\n };\n\n Dropzone.prototype.drop = function(e) {\n var files, items;\n if (!e.dataTransfer) {\n return;\n }\n this.emit(\"drop\", e);\n files = e.dataTransfer.files;\n this.emit(\"addedfiles\", files);\n if (files.length) {\n items = e.dataTransfer.items;\n if (items && items.length && (items[0].webkitGetAsEntry != null)) {\n this._addFilesFromItems(items);\n } else {\n this.handleFiles(files);\n }\n }\n };\n\n Dropzone.prototype.paste = function(e) {\n var items, _ref;\n if ((e != null ? (_ref = e.clipboardData) != null ? _ref.items : void 0 : void 0) == null) {\n return;\n }\n this.emit(\"paste\", e);\n items = e.clipboardData.items;\n if (items.length) {\n return this._addFilesFromItems(items);\n }\n };\n\n Dropzone.prototype.handleFiles = function(files) {\n var file, _i, _len, _results;\n _results = [];\n for (_i = 0, _len = files.length; _i < _len; _i++) {\n file = files[_i];\n _results.push(this.addFile(file));\n }\n return _results;\n };\n\n Dropzone.prototype._addFilesFromItems = function(items) {\n var entry, item, _i, _len, _results;\n _results = [];\n for (_i = 0, _len = items.length; _i < _len; _i++) {\n item = items[_i];\n if ((item.webkitGetAsEntry != null) && (entry = item.webkitGetAsEntry())) {\n if (entry.isFile) {\n _results.push(this.addFile(item.getAsFile()));\n } else if (entry.isDirectory) {\n _results.push(this._addFilesFromDirectory(entry, entry.name));\n } else {\n _results.push(void 0);\n }\n } else if (item.getAsFile != null) {\n if ((item.kind == null) || item.kind === \"file\") {\n _results.push(this.addFile(item.getAsFile()));\n } else {\n _results.push(void 0);\n }\n } else {\n _results.push(void 0);\n }\n }\n return _results;\n };\n\n Dropzone.prototype._addFilesFromDirectory = function(directory, path) {\n var dirReader, entriesReader;\n dirReader = directory.createReader();\n entriesReader = (function(_this) {\n return function(entries) {\n var entry, _i, _len;\n for (_i = 0, _len = entries.length; _i < _len; _i++) {\n entry = entries[_i];\n if (entry.isFile) {\n entry.file(function(file) {\n if (_this.options.ignoreHiddenFiles && file.name.substring(0, 1) === '.') {\n return;\n }\n file.fullPath = \"\" + path + \"/\" + file.name;\n return _this.addFile(file);\n });\n } else if (entry.isDirectory) {\n _this._addFilesFromDirectory(entry, \"\" + path + \"/\" + entry.name);\n }\n }\n };\n })(this);\n return dirReader.readEntries(entriesReader, function(error) {\n return typeof console !== \"undefined\" && console !== null ? typeof console.log === \"function\" ? console.log(error) : void 0 : void 0;\n });\n };\n\n Dropzone.prototype.accept = function(file, done) {\n if (file.size > this.options.maxFilesize * 1024 * 1024) {\n return done(this.options.dictFileTooBig.replace(\"{{filesize}}\", Math.round(file.size / 1024 / 10.24) / 100).replace(\"{{maxFilesize}}\", this.options.maxFilesize));\n } else if (!Dropzone.isValidFile(file, this.options.acceptedFiles)) {\n return done(this.options.dictInvalidFileType);\n } else if ((this.options.maxFiles != null) && this.getAcceptedFiles().length >= this.options.maxFiles) {\n done(this.options.dictMaxFilesExceeded.replace(\"{{maxFiles}}\", this.options.maxFiles));\n return this.emit(\"maxfilesexceeded\", file);\n } else {\n return this.options.accept.call(this, file, done);\n }\n };\n\n Dropzone.prototype.addFile = function(file) {\n file.upload = {\n progress: 0,\n total: file.size,\n bytesSent: 0\n };\n this.files.push(file);\n file.status = Dropzone.ADDED;\n this.emit(\"addedfile\", file);\n this._enqueueThumbnail(file);\n return this.accept(file, (function(_this) {\n return function(error) {\n if (error) {\n file.accepted = false;\n _this._errorProcessing([file], error);\n } else {\n file.accepted = true;\n if (_this.options.autoQueue) {\n _this.enqueueFile(file);\n }\n }\n return _this._updateMaxFilesReachedClass();\n };\n })(this));\n };\n\n Dropzone.prototype.enqueueFiles = function(files) {\n var file, _i, _len;\n for (_i = 0, _len = files.length; _i < _len; _i++) {\n file = files[_i];\n this.enqueueFile(file);\n }\n return null;\n };\n\n Dropzone.prototype.enqueueFile = function(file) {\n if (file.status === Dropzone.ADDED && file.accepted === true) {\n file.status = Dropzone.QUEUED;\n if (this.options.autoProcessQueue) {\n return setTimeout(((function(_this) {\n return function() {\n return _this.processQueue();\n };\n })(this)), 0);\n }\n } else {\n throw new Error(\"This file can't be queued because it has already been processed or was rejected.\");\n }\n };\n\n Dropzone.prototype._thumbnailQueue = [];\n\n Dropzone.prototype._processingThumbnail = false;\n\n Dropzone.prototype._enqueueThumbnail = function(file) {\n if (this.options.createImageThumbnails && file.type.match(/image.*/) && file.size <= this.options.maxThumbnailFilesize * 1024 * 1024) {\n this._thumbnailQueue.push(file);\n return setTimeout(((function(_this) {\n return function() {\n return _this._processThumbnailQueue();\n };\n })(this)), 0);\n }\n };\n\n Dropzone.prototype._processThumbnailQueue = function() {\n if (this._processingThumbnail || this._thumbnailQueue.length === 0) {\n return;\n }\n this._processingThumbnail = true;\n return this.createThumbnail(this._thumbnailQueue.shift(), (function(_this) {\n return function() {\n _this._processingThumbnail = false;\n return _this._processThumbnailQueue();\n };\n })(this));\n };\n\n Dropzone.prototype.removeFile = function(file) {\n if (file.status === Dropzone.UPLOADING) {\n this.cancelUpload(file);\n }\n this.files = without(this.files, file);\n this.emit(\"removedfile\", file);\n if (this.files.length === 0) {\n return this.emit(\"reset\");\n }\n };\n\n Dropzone.prototype.removeAllFiles = function(cancelIfNecessary) {\n var file, _i, _len, _ref;\n if (cancelIfNecessary == null) {\n cancelIfNecessary = false;\n }\n _ref = this.files.slice();\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n file = _ref[_i];\n if (file.status !== Dropzone.UPLOADING || cancelIfNecessary) {\n this.removeFile(file);\n }\n }\n return null;\n };\n\n Dropzone.prototype.createThumbnail = function(file, callback) {\n var fileReader;\n fileReader = new FileReader;\n fileReader.onload = (function(_this) {\n return function() {\n if (file.type === \"image/svg+xml\") {\n _this.emit(\"thumbnail\", file, fileReader.result);\n if (callback != null) {\n callback();\n }\n return;\n }\n return _this.createThumbnailFromUrl(file, fileReader.result, callback);\n };\n })(this);\n return fileReader.readAsDataURL(file);\n };\n\n Dropzone.prototype.createThumbnailFromUrl = function(file, imageUrl, callback, crossOrigin) {\n var img;\n img = document.createElement(\"img\");\n if (crossOrigin) {\n img.crossOrigin = crossOrigin;\n }\n img.onload = (function(_this) {\n return function() {\n var canvas, ctx, resizeInfo, thumbnail, _ref, _ref1, _ref2, _ref3;\n file.width = img.width;\n file.height = img.height;\n resizeInfo = _this.options.resize.call(_this, file);\n if (resizeInfo.trgWidth == null) {\n resizeInfo.trgWidth = resizeInfo.optWidth;\n }\n if (resizeInfo.trgHeight == null) {\n resizeInfo.trgHeight = resizeInfo.optHeight;\n }\n canvas = document.createElement(\"canvas\");\n ctx = canvas.getContext(\"2d\");\n canvas.width = resizeInfo.trgWidth;\n canvas.height = resizeInfo.trgHeight;\n drawImageIOSFix(ctx, img, (_ref = resizeInfo.srcX) != null ? _ref : 0, (_ref1 = resizeInfo.srcY) != null ? _ref1 : 0, resizeInfo.srcWidth, resizeInfo.srcHeight, (_ref2 = resizeInfo.trgX) != null ? _ref2 : 0, (_ref3 = resizeInfo.trgY) != null ? _ref3 : 0, resizeInfo.trgWidth, resizeInfo.trgHeight);\n thumbnail = canvas.toDataURL(\"image/png\");\n _this.emit(\"thumbnail\", file, thumbnail);\n if (callback != null) {\n return callback();\n }\n };\n })(this);\n if (callback != null) {\n img.onerror = callback;\n }\n return img.src = imageUrl;\n };\n\n Dropzone.prototype.processQueue = function() {\n var i, parallelUploads, processingLength, queuedFiles;\n parallelUploads = this.options.parallelUploads;\n processingLength = this.getUploadingFiles().length;\n i = processingLength;\n if (processingLength >= parallelUploads) {\n return;\n }\n queuedFiles = this.getQueuedFiles();\n if (!(queuedFiles.length > 0)) {\n return;\n }\n if (this.options.uploadMultiple) {\n return this.processFiles(queuedFiles.slice(0, parallelUploads - processingLength));\n } else {\n while (i < parallelUploads) {\n if (!queuedFiles.length) {\n return;\n }\n this.processFile(queuedFiles.shift());\n i++;\n }\n }\n };\n\n Dropzone.prototype.processFile = function(file) {\n return this.processFiles([file]);\n };\n\n Dropzone.prototype.processFiles = function(files) {\n var file, _i, _len;\n for (_i = 0, _len = files.length; _i < _len; _i++) {\n file = files[_i];\n file.processing = true;\n file.status = Dropzone.UPLOADING;\n this.emit(\"processing\", file);\n }\n if (this.options.uploadMultiple) {\n this.emit(\"processingmultiple\", files);\n }\n return this.uploadFiles(files);\n };\n\n Dropzone.prototype._getFilesWithXhr = function(xhr) {\n var file, files;\n return files = (function() {\n var _i, _len, _ref, _results;\n _ref = this.files;\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n file = _ref[_i];\n if (file.xhr === xhr) {\n _results.push(file);\n }\n }\n return _results;\n }).call(this);\n };\n\n Dropzone.prototype.cancelUpload = function(file) {\n var groupedFile, groupedFiles, _i, _j, _len, _len1, _ref;\n if (file.status === Dropzone.UPLOADING) {\n groupedFiles = this._getFilesWithXhr(file.xhr);\n for (_i = 0, _len = groupedFiles.length; _i < _len; _i++) {\n groupedFile = groupedFiles[_i];\n groupedFile.status = Dropzone.CANCELED;\n }\n file.xhr.abort();\n for (_j = 0, _len1 = groupedFiles.length; _j < _len1; _j++) {\n groupedFile = groupedFiles[_j];\n this.emit(\"canceled\", groupedFile);\n }\n if (this.options.uploadMultiple) {\n this.emit(\"canceledmultiple\", groupedFiles);\n }\n } else if ((_ref = file.status) === Dropzone.ADDED || _ref === Dropzone.QUEUED) {\n file.status = Dropzone.CANCELED;\n this.emit(\"canceled\", file);\n if (this.options.uploadMultiple) {\n this.emit(\"canceledmultiple\", [file]);\n }\n }\n if (this.options.autoProcessQueue) {\n return this.processQueue();\n }\n };\n\n resolveOption = function() {\n var args, option;\n option = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\n if (typeof option === 'function') {\n return option.apply(this, args);\n }\n return option;\n };\n\n Dropzone.prototype.uploadFile = function(file) {\n return this.uploadFiles([file]);\n };\n\n Dropzone.prototype.uploadFiles = function(files) {\n var file, formData, handleError, headerName, headerValue, headers, i, input, inputName, inputType, key, method, option, progressObj, response, updateProgress, url, value, xhr, _i, _j, _k, _l, _len, _len1, _len2, _len3, _m, _ref, _ref1, _ref2, _ref3, _ref4, _ref5;\n xhr = new XMLHttpRequest();\n for (_i = 0, _len = files.length; _i < _len; _i++) {\n file = files[_i];\n file.xhr = xhr;\n }\n method = resolveOption(this.options.method, files);\n url = resolveOption(this.options.url, files);\n xhr.open(method, url, true);\n xhr.withCredentials = !!this.options.withCredentials;\n response = null;\n handleError = (function(_this) {\n return function() {\n var _j, _len1, _results;\n _results = [];\n for (_j = 0, _len1 = files.length; _j < _len1; _j++) {\n file = files[_j];\n _results.push(_this._errorProcessing(files, response || _this.options.dictResponseError.replace(\"{{statusCode}}\", xhr.status), xhr));\n }\n return _results;\n };\n })(this);\n updateProgress = (function(_this) {\n return function(e) {\n var allFilesFinished, progress, _j, _k, _l, _len1, _len2, _len3, _results;\n if (e != null) {\n progress = 100 * e.loaded / e.total;\n for (_j = 0, _len1 = files.length; _j < _len1; _j++) {\n file = files[_j];\n file.upload = {\n progress: progress,\n total: e.total,\n bytesSent: e.loaded\n };\n }\n } else {\n allFilesFinished = true;\n progress = 100;\n for (_k = 0, _len2 = files.length; _k < _len2; _k++) {\n file = files[_k];\n if (!(file.upload.progress === 100 && file.upload.bytesSent === file.upload.total)) {\n allFilesFinished = false;\n }\n file.upload.progress = progress;\n file.upload.bytesSent = file.upload.total;\n }\n if (allFilesFinished) {\n return;\n }\n }\n _results = [];\n for (_l = 0, _len3 = files.length; _l < _len3; _l++) {\n file = files[_l];\n _results.push(_this.emit(\"uploadprogress\", file, progress, file.upload.bytesSent));\n }\n return _results;\n };\n })(this);\n xhr.onload = (function(_this) {\n return function(e) {\n var _ref;\n if (files[0].status === Dropzone.CANCELED) {\n return;\n }\n if (xhr.readyState !== 4) {\n return;\n }\n response = xhr.responseText;\n if (xhr.getResponseHeader(\"content-type\") && ~xhr.getResponseHeader(\"content-type\").indexOf(\"application/json\")) {\n try {\n response = JSON.parse(response);\n } catch (_error) {\n e = _error;\n response = \"Invalid JSON response from server.\";\n }\n }\n updateProgress();\n if (!((200 <= (_ref = xhr.status) && _ref < 300))) {\n return handleError();\n } else {\n return _this._finished(files, response, e);\n }\n };\n })(this);\n xhr.onerror = (function(_this) {\n return function() {\n if (files[0].status === Dropzone.CANCELED) {\n return;\n }\n return handleError();\n };\n })(this);\n progressObj = (_ref = xhr.upload) != null ? _ref : xhr;\n progressObj.onprogress = updateProgress;\n headers = {\n \"Accept\": \"application/json\",\n \"Cache-Control\": \"no-cache\",\n \"X-Requested-With\": \"XMLHttpRequest\"\n };\n if (this.options.headers) {\n extend(headers, this.options.headers);\n }\n for (headerName in headers) {\n headerValue = headers[headerName];\n if (headerValue) {\n xhr.setRequestHeader(headerName, headerValue);\n }\n }\n formData = new FormData();\n if (this.options.params) {\n _ref1 = this.options.params;\n for (key in _ref1) {\n value = _ref1[key];\n formData.append(key, value);\n }\n }\n for (_j = 0, _len1 = files.length; _j < _len1; _j++) {\n file = files[_j];\n this.emit(\"sending\", file, xhr, formData);\n }\n if (this.options.uploadMultiple) {\n this.emit(\"sendingmultiple\", files, xhr, formData);\n }\n if (this.element.tagName === \"FORM\") {\n _ref2 = this.element.querySelectorAll(\"input, textarea, select, button\");\n for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) {\n input = _ref2[_k];\n inputName = input.getAttribute(\"name\");\n inputType = input.getAttribute(\"type\");\n if (input.tagName === \"SELECT\" && input.hasAttribute(\"multiple\")) {\n _ref3 = input.options;\n for (_l = 0, _len3 = _ref3.length; _l < _len3; _l++) {\n option = _ref3[_l];\n if (option.selected) {\n formData.append(inputName, option.value);\n }\n }\n } else if (!inputType || ((_ref4 = inputType.toLowerCase()) !== \"checkbox\" && _ref4 !== \"radio\") || input.checked) {\n formData.append(inputName, input.value);\n }\n }\n }\n for (i = _m = 0, _ref5 = files.length - 1; 0 <= _ref5 ? _m <= _ref5 : _m >= _ref5; i = 0 <= _ref5 ? ++_m : --_m) {\n formData.append(this._getParamName(i), files[i], files[i].name);\n }\n return this.submitRequest(xhr, formData, files);\n };\n\n Dropzone.prototype.submitRequest = function(xhr, formData, files) {\n return xhr.send(formData);\n };\n\n Dropzone.prototype._finished = function(files, responseText, e) {\n var file, _i, _len;\n for (_i = 0, _len = files.length; _i < _len; _i++) {\n file = files[_i];\n file.status = Dropzone.SUCCESS;\n this.emit(\"success\", file, responseText, e);\n this.emit(\"complete\", file);\n }\n if (this.options.uploadMultiple) {\n this.emit(\"successmultiple\", files, responseText, e);\n this.emit(\"completemultiple\", files);\n }\n if (this.options.autoProcessQueue) {\n return this.processQueue();\n }\n };\n\n Dropzone.prototype._errorProcessing = function(files, message, xhr) {\n var file, _i, _len;\n for (_i = 0, _len = files.length; _i < _len; _i++) {\n file = files[_i];\n file.status = Dropzone.ERROR;\n this.emit(\"error\", file, message, xhr);\n this.emit(\"complete\", file);\n }\n if (this.options.uploadMultiple) {\n this.emit(\"errormultiple\", files, message, xhr);\n this.emit(\"completemultiple\", files);\n }\n if (this.options.autoProcessQueue) {\n return this.processQueue();\n }\n };\n\n return Dropzone;\n\n })(Emitter);\n\n Dropzone.version = \"4.2.0\";\n\n Dropzone.options = {};\n\n Dropzone.optionsForElement = function(element) {\n if (element.getAttribute(\"id\")) {\n return Dropzone.options[camelize(element.getAttribute(\"id\"))];\n } else {\n return void 0;\n }\n };\n\n Dropzone.instances = [];\n\n Dropzone.forElement = function(element) {\n if (typeof element === \"string\") {\n element = document.querySelector(element);\n }\n if ((element != null ? element.dropzone : void 0) == null) {\n throw new Error(\"No Dropzone found for given element. This is probably because you're trying to access it before Dropzone had the time to initialize. Use the `init` option to setup any additional observers on your Dropzone.\");\n }\n return element.dropzone;\n };\n\n Dropzone.autoDiscover = true;\n\n Dropzone.discover = function() {\n var checkElements, dropzone, dropzones, _i, _len, _results;\n if (document.querySelectorAll) {\n dropzones = document.querySelectorAll(\".dropzone\");\n } else {\n dropzones = [];\n checkElements = function(elements) {\n var el, _i, _len, _results;\n _results = [];\n for (_i = 0, _len = elements.length; _i < _len; _i++) {\n el = elements[_i];\n if (/(^| )dropzone($| )/.test(el.className)) {\n _results.push(dropzones.push(el));\n } else {\n _results.push(void 0);\n }\n }\n return _results;\n };\n checkElements(document.getElementsByTagName(\"div\"));\n checkElements(document.getElementsByTagName(\"form\"));\n }\n _results = [];\n for (_i = 0, _len = dropzones.length; _i < _len; _i++) {\n dropzone = dropzones[_i];\n if (Dropzone.optionsForElement(dropzone) !== false) {\n _results.push(new Dropzone(dropzone));\n } else {\n _results.push(void 0);\n }\n }\n return _results;\n };\n\n Dropzone.blacklistedBrowsers = [/opera.*Macintosh.*version\\/12/i];\n\n Dropzone.isBrowserSupported = function() {\n var capableBrowser, regex, _i, _len, _ref;\n capableBrowser = true;\n if (window.File && window.FileReader && window.FileList && window.Blob && window.FormData && document.querySelector) {\n if (!(\"classList\" in document.createElement(\"a\"))) {\n capableBrowser = false;\n } else {\n _ref = Dropzone.blacklistedBrowsers;\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n regex = _ref[_i];\n if (regex.test(navigator.userAgent)) {\n capableBrowser = false;\n continue;\n }\n }\n }\n } else {\n capableBrowser = false;\n }\n return capableBrowser;\n };\n\n without = function(list, rejectedItem) {\n var item, _i, _len, _results;\n _results = [];\n for (_i = 0, _len = list.length; _i < _len; _i++) {\n item = list[_i];\n if (item !== rejectedItem) {\n _results.push(item);\n }\n }\n return _results;\n };\n\n camelize = function(str) {\n return str.replace(/[\\-_](\\w)/g, function(match) {\n return match.charAt(1).toUpperCase();\n });\n };\n\n Dropzone.createElement = function(string) {\n var div;\n div = document.createElement(\"div\");\n div.innerHTML = string;\n return div.childNodes[0];\n };\n\n Dropzone.elementInside = function(element, container) {\n if (element === container) {\n return true;\n }\n while (element = element.parentNode) {\n if (element === container) {\n return true;\n }\n }\n return false;\n };\n\n Dropzone.getElement = function(el, name) {\n var element;\n if (typeof el === \"string\") {\n element = document.querySelector(el);\n } else if (el.nodeType != null) {\n element = el;\n }\n if (element == null) {\n throw new Error(\"Invalid `\" + name + \"` option provided. Please provide a CSS selector or a plain HTML element.\");\n }\n return element;\n };\n\n Dropzone.getElements = function(els, name) {\n var e, el, elements, _i, _j, _len, _len1, _ref;\n if (els instanceof Array) {\n elements = [];\n try {\n for (_i = 0, _len = els.length; _i < _len; _i++) {\n el = els[_i];\n elements.push(this.getElement(el, name));\n }\n } catch (_error) {\n e = _error;\n elements = null;\n }\n } else if (typeof els === \"string\") {\n elements = [];\n _ref = document.querySelectorAll(els);\n for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) {\n el = _ref[_j];\n elements.push(el);\n }\n } else if (els.nodeType != null) {\n elements = [els];\n }\n if (!((elements != null) && elements.length)) {\n throw new Error(\"Invalid `\" + name + \"` option provided. Please provide a CSS selector, a plain HTML element or a list of those.\");\n }\n return elements;\n };\n\n Dropzone.confirm = function(question, accepted, rejected) {\n if (window.confirm(question)) {\n return accepted();\n } else if (rejected != null) {\n return rejected();\n }\n };\n\n Dropzone.isValidFile = function(file, acceptedFiles) {\n var baseMimeType, mimeType, validType, _i, _len;\n if (!acceptedFiles) {\n return true;\n }\n acceptedFiles = acceptedFiles.split(\",\");\n mimeType = file.type;\n baseMimeType = mimeType.replace(/\\/.*$/, \"\");\n for (_i = 0, _len = acceptedFiles.length; _i < _len; _i++) {\n validType = acceptedFiles[_i];\n validType = validType.trim();\n if (validType.charAt(0) === \".\") {\n if (file.name.toLowerCase().indexOf(validType.toLowerCase(), file.name.length - validType.length) !== -1) {\n return true;\n }\n } else if (/\\/\\*$/.test(validType)) {\n if (baseMimeType === validType.replace(/\\/.*$/, \"\")) {\n return true;\n }\n } else {\n if (mimeType === validType) {\n return true;\n }\n }\n }\n return false;\n };\n\n if (typeof jQuery !== \"undefined\" && jQuery !== null) {\n jQuery.fn.dropzone = function(options) {\n return this.each(function() {\n return new Dropzone(this, options);\n });\n };\n }\n\n if (typeof module !== \"undefined\" && module !== null) {\n module.exports = Dropzone;\n } else {\n window.Dropzone = Dropzone;\n }\n\n Dropzone.ADDED = \"added\";\n\n Dropzone.QUEUED = \"queued\";\n\n Dropzone.ACCEPTED = Dropzone.QUEUED;\n\n Dropzone.UPLOADING = \"uploading\";\n\n Dropzone.PROCESSING = Dropzone.UPLOADING;\n\n Dropzone.CANCELED = \"canceled\";\n\n Dropzone.ERROR = \"error\";\n\n Dropzone.SUCCESS = \"success\";\n\n\n /*\n \n Bugfix for iOS 6 and 7\n Source: http://stackoverflow.com/questions/11929099/html5-canvas-drawimage-ratio-bug-ios\n based on the work of https://github.com/stomita/ios-imagefile-megapixel\n */\n\n detectVerticalSquash = function(img) {\n var alpha, canvas, ctx, data, ey, ih, iw, py, ratio, sy;\n iw = img.naturalWidth;\n ih = img.naturalHeight;\n canvas = document.createElement(\"canvas\");\n canvas.width = 1;\n canvas.height = ih;\n ctx = canvas.getContext(\"2d\");\n ctx.drawImage(img, 0, 0);\n data = ctx.getImageData(0, 0, 1, ih).data;\n sy = 0;\n ey = ih;\n py = ih;\n while (py > sy) {\n alpha = data[(py - 1) * 4 + 3];\n if (alpha === 0) {\n ey = py;\n } else {\n sy = py;\n }\n py = (ey + sy) >> 1;\n }\n ratio = py / ih;\n if (ratio === 0) {\n return 1;\n } else {\n return ratio;\n }\n };\n\n drawImageIOSFix = function(ctx, img, sx, sy, sw, sh, dx, dy, dw, dh) {\n var vertSquashRatio;\n vertSquashRatio = detectVerticalSquash(img);\n return ctx.drawImage(img, sx, sy, sw, sh, dx, dy, dw, dh / vertSquashRatio);\n };\n\n\n /*\n * contentloaded.js\n *\n * Author: Diego Perini (diego.perini at gmail.com)\n * Summary: cross-browser wrapper for DOMContentLoaded\n * Updated: 20101020\n * License: MIT\n * Version: 1.2\n *\n * URL:\n * http://javascript.nwbox.com/ContentLoaded/\n * http://javascript.nwbox.com/ContentLoaded/MIT-LICENSE\n */\n\n contentLoaded = function(win, fn) {\n var add, doc, done, init, poll, pre, rem, root, top;\n done = false;\n top = true;\n doc = win.document;\n root = doc.documentElement;\n add = (doc.addEventListener ? \"addEventListener\" : \"attachEvent\");\n rem = (doc.addEventListener ? \"removeEventListener\" : \"detachEvent\");\n pre = (doc.addEventListener ? \"\" : \"on\");\n init = function(e) {\n if (e.type === \"readystatechange\" && doc.readyState !== \"complete\") {\n return;\n }\n (e.type === \"load\" ? win : doc)[rem](pre + e.type, init, false);\n if (!done && (done = true)) {\n return fn.call(win, e.type || e);\n }\n };\n poll = function() {\n var e;\n try {\n root.doScroll(\"left\");\n } catch (_error) {\n e = _error;\n setTimeout(poll, 50);\n return;\n }\n return init(\"poll\");\n };\n if (doc.readyState !== \"complete\") {\n if (doc.createEventObject && root.doScroll) {\n try {\n top = !win.frameElement;\n } catch (_error) {}\n if (top) {\n poll();\n }\n }\n doc[add](pre + \"DOMContentLoaded\", init, false);\n doc[add](pre + \"readystatechange\", init, false);\n return win[add](pre + \"load\", init, false);\n }\n };\n\n Dropzone._autoDiscoverFunction = function() {\n if (Dropzone.autoDiscover) {\n return Dropzone.discover();\n }\n };\n\n contentLoaded(window, Dropzone._autoDiscoverFunction);\n\n}).call(this);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /opt/gitlab/embedded/service/gitlab-rails/node_modules/dropzone/dist/dropzone.js\n// module id = ../../../node_modules/dropzone/dist/dropzone.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","/**\n * adds a pause and unpause method to Mousetrap\n * this allows you to enable or disable keyboard shortcuts\n * without having to reset Mousetrap and rebind everything\n */\n/* global Mousetrap:true */\nMousetrap = (function(Mousetrap) {\n var self = Mousetrap,\n _originalStopCallback = self.stopCallback,\n enabled = true;\n\n self.stopCallback = function(e, element, combo) {\n if (!enabled) {\n return true;\n }\n\n return _originalStopCallback(e, element, combo);\n };\n\n self.pause = function() {\n enabled = false;\n };\n\n self.unpause = function() {\n enabled = true;\n };\n\n return self;\n}) (Mousetrap);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /opt/gitlab/embedded/service/gitlab-rails/node_modules/mousetrap/plugins/pause/mousetrap-pause.js\n// module id = ../../../node_modules/mousetrap/plugins/pause/mousetrap-pause.js\n// module chunks = main","/*!\n * Pikaday\n *\n * Copyright © 2014 David Bushell | BSD & MIT license | https://github.com/dbushell/Pikaday\n */\n\n(function (root, factory)\n{\n 'use strict';\n\n var moment;\n if (typeof exports === 'object') {\n // CommonJS module\n // Load moment.js as an optional dependency\n try { moment = require('moment'); } catch (e) {}\n module.exports = factory(moment);\n } else if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(function (req)\n {\n // Load moment.js as an optional dependency\n var id = 'moment';\n try { moment = req(id); } catch (e) {}\n return factory(moment);\n });\n } else {\n root.Pikaday = factory(root.moment);\n }\n}(this, function (moment)\n{\n 'use strict';\n\n /**\n * feature detection and helper functions\n */\n var hasMoment = typeof moment === 'function',\n\n hasEventListeners = !!window.addEventListener,\n\n document = window.document,\n\n sto = window.setTimeout,\n\n addEvent = function(el, e, callback, capture)\n {\n if (hasEventListeners) {\n el.addEventListener(e, callback, !!capture);\n } else {\n el.attachEvent('on' + e, callback);\n }\n },\n\n removeEvent = function(el, e, callback, capture)\n {\n if (hasEventListeners) {\n el.removeEventListener(e, callback, !!capture);\n } else {\n el.detachEvent('on' + e, callback);\n }\n },\n\n trim = function(str)\n {\n return str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g,'');\n },\n\n hasClass = function(el, cn)\n {\n return (' ' + el.className + ' ').indexOf(' ' + cn + ' ') !== -1;\n },\n\n addClass = function(el, cn)\n {\n if (!hasClass(el, cn)) {\n el.className = (el.className === '') ? cn : el.className + ' ' + cn;\n }\n },\n\n removeClass = function(el, cn)\n {\n el.className = trim((' ' + el.className + ' ').replace(' ' + cn + ' ', ' '));\n },\n\n isArray = function(obj)\n {\n return (/Array/).test(Object.prototype.toString.call(obj));\n },\n\n isDate = function(obj)\n {\n return (/Date/).test(Object.prototype.toString.call(obj)) && !isNaN(obj.getTime());\n },\n\n isWeekend = function(date)\n {\n var day = date.getDay();\n return day === 0 || day === 6;\n },\n\n isLeapYear = function(year)\n {\n // solution by Matti Virkkunen: http://stackoverflow.com/a/4881951\n return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;\n },\n\n getDaysInMonth = function(year, month)\n {\n return [31, isLeapYear(year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n },\n\n setToStartOfDay = function(date)\n {\n if (isDate(date)) date.setHours(0,0,0,0);\n },\n\n compareDates = function(a,b)\n {\n // weak date comparison (use setToStartOfDay(date) to ensure correct result)\n return a.getTime() === b.getTime();\n },\n\n extend = function(to, from, overwrite)\n {\n var prop, hasProp;\n for (prop in from) {\n hasProp = to[prop] !== undefined;\n if (hasProp && typeof from[prop] === 'object' && from[prop] !== null && from[prop].nodeName === undefined) {\n if (isDate(from[prop])) {\n if (overwrite) {\n to[prop] = new Date(from[prop].getTime());\n }\n }\n else if (isArray(from[prop])) {\n if (overwrite) {\n to[prop] = from[prop].slice(0);\n }\n } else {\n to[prop] = extend({}, from[prop], overwrite);\n }\n } else if (overwrite || !hasProp) {\n to[prop] = from[prop];\n }\n }\n return to;\n },\n\n fireEvent = function(el, eventName, data)\n {\n var ev;\n\n if (document.createEvent) {\n ev = document.createEvent('HTMLEvents');\n ev.initEvent(eventName, true, false);\n ev = extend(ev, data);\n el.dispatchEvent(ev);\n } else if (document.createEventObject) {\n ev = document.createEventObject();\n ev = extend(ev, data);\n el.fireEvent('on' + eventName, ev);\n }\n },\n\n adjustCalendar = function(calendar) {\n if (calendar.month < 0) {\n calendar.year -= Math.ceil(Math.abs(calendar.month)/12);\n calendar.month += 12;\n }\n if (calendar.month > 11) {\n calendar.year += Math.floor(Math.abs(calendar.month)/12);\n calendar.month -= 12;\n }\n return calendar;\n },\n\n /**\n * defaults and localisation\n */\n defaults = {\n\n // bind the picker to a form field\n field: null,\n\n // automatically show/hide the picker on `field` focus (default `true` if `field` is set)\n bound: undefined,\n\n // position of the datepicker, relative to the field (default to bottom & left)\n // ('bottom' & 'left' keywords are not used, 'top' & 'right' are modifier on the bottom/left position)\n position: 'bottom left',\n\n // automatically fit in the viewport even if it means repositioning from the position option\n reposition: true,\n\n // the default output format for `.toString()` and `field` value\n format: 'YYYY-MM-DD',\n\n // the toString function which gets passed a current date object and format\n // and returns a string\n toString: null,\n\n // used to create date object from current input string\n parse: null,\n\n // the initial date to view when first opened\n defaultDate: null,\n\n // make the `defaultDate` the initial selected value\n setDefaultDate: false,\n\n // first day of week (0: Sunday, 1: Monday etc)\n firstDay: 0,\n\n // the default flag for moment's strict date parsing\n formatStrict: false,\n\n // the minimum/earliest date that can be selected\n minDate: null,\n // the maximum/latest date that can be selected\n maxDate: null,\n\n // number of years either side, or array of upper/lower range\n yearRange: 10,\n\n // show week numbers at head of row\n showWeekNumber: false,\n\n // Week picker mode\n pickWholeWeek: false,\n\n // used internally (don't config outside)\n minYear: 0,\n maxYear: 9999,\n minMonth: undefined,\n maxMonth: undefined,\n\n startRange: null,\n endRange: null,\n\n isRTL: false,\n\n // Additional text to append to the year in the calendar title\n yearSuffix: '',\n\n // Render the month after year in the calendar title\n showMonthAfterYear: false,\n\n // Render days of the calendar grid that fall in the next or previous month\n showDaysInNextAndPreviousMonths: false,\n\n // Allows user to select days that fall in the next or previous month\n enableSelectionDaysInNextAndPreviousMonths: false,\n\n // how many months are visible\n numberOfMonths: 1,\n\n // when numberOfMonths is used, this will help you to choose where the main calendar will be (default `left`, can be set to `right`)\n // only used for the first display or when a selected date is not visible\n mainCalendar: 'left',\n\n // Specify a DOM element to render the calendar in\n container: undefined,\n\n // Blur field when date is selected\n blurFieldOnSelect : true,\n\n // internationalization\n i18n: {\n previousMonth : 'Previous Month',\n nextMonth : 'Next Month',\n months : ['January','February','March','April','May','June','July','August','September','October','November','December'],\n weekdays : ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'],\n weekdaysShort : ['Sun','Mon','Tue','Wed','Thu','Fri','Sat']\n },\n\n // Theme Classname\n theme: null,\n\n // events array\n events: [],\n\n // callback function\n onSelect: null,\n onOpen: null,\n onClose: null,\n onDraw: null\n },\n\n\n /**\n * templating functions to abstract HTML rendering\n */\n renderDayName = function(opts, day, abbr)\n {\n day += opts.firstDay;\n while (day >= 7) {\n day -= 7;\n }\n return abbr ? opts.i18n.weekdaysShort[day] : opts.i18n.weekdays[day];\n },\n\n renderDay = function(opts)\n {\n var arr = [];\n var ariaSelected = 'false';\n if (opts.isEmpty) {\n if (opts.showDaysInNextAndPreviousMonths) {\n arr.push('is-outside-current-month');\n\n if(!opts.enableSelectionDaysInNextAndPreviousMonths) {\n arr.push('is-selection-disabled');\n }\n\n } else {\n return '';\n }\n }\n if (opts.isDisabled) {\n arr.push('is-disabled');\n }\n if (opts.isToday) {\n arr.push('is-today');\n }\n if (opts.isSelected) {\n arr.push('is-selected');\n ariaSelected = 'true';\n }\n if (opts.hasEvent) {\n arr.push('has-event');\n }\n if (opts.isInRange) {\n arr.push('is-inrange');\n }\n if (opts.isStartRange) {\n arr.push('is-startrange');\n }\n if (opts.isEndRange) {\n arr.push('is-endrange');\n }\n return '' +\n '' +\n '';\n },\n\n renderWeek = function (d, m, y) {\n // Lifted from http://javascript.about.com/library/blweekyear.htm, lightly modified.\n var onejan = new Date(y, 0, 1),\n weekNum = Math.ceil((((new Date(y, m, d) - onejan) / 86400000) + onejan.getDay()+1)/7);\n return '' + weekNum + '';\n },\n\n renderRow = function(days, isRTL, pickWholeWeek, isRowSelected)\n {\n return '' + (isRTL ? days.reverse() : days).join('') + '';\n },\n\n renderBody = function(rows)\n {\n return '' + rows.join('') + '';\n },\n\n renderHead = function(opts)\n {\n var i, arr = [];\n if (opts.showWeekNumber) {\n arr.push('');\n }\n for (i = 0; i < 7; i++) {\n arr.push('' + renderDayName(opts, i, true) + '');\n }\n return '' + (opts.isRTL ? arr.reverse() : arr).join('') + '';\n },\n\n renderTitle = function(instance, c, year, month, refYear, randId)\n {\n var i, j, arr,\n opts = instance._o,\n isMinYear = year === opts.minYear,\n isMaxYear = year === opts.maxYear,\n html = '
    ',\n monthHtml,\n yearHtml,\n prev = true,\n next = true;\n\n for (arr = [], i = 0; i < 12; i++) {\n arr.push('');\n }\n\n monthHtml = '
    ' + opts.i18n.months[month] + '
    ';\n\n if (isArray(opts.yearRange)) {\n i = opts.yearRange[0];\n j = opts.yearRange[1] + 1;\n } else {\n i = year - opts.yearRange;\n j = 1 + year + opts.yearRange;\n }\n\n for (arr = []; i < j && i <= opts.maxYear; i++) {\n if (i >= opts.minYear) {\n arr.push('');\n }\n }\n yearHtml = '
    ' + year + opts.yearSuffix + '
    ';\n\n if (opts.showMonthAfterYear) {\n html += yearHtml + monthHtml;\n } else {\n html += monthHtml + yearHtml;\n }\n\n if (isMinYear && (month === 0 || opts.minMonth >= month)) {\n prev = false;\n }\n\n if (isMaxYear && (month === 11 || opts.maxMonth <= month)) {\n next = false;\n }\n\n if (c === 0) {\n html += '';\n }\n if (c === (instance._o.numberOfMonths - 1) ) {\n html += '';\n }\n\n return html += '
    ';\n },\n\n renderTable = function(opts, data, randId)\n {\n return '' + renderHead(opts) + renderBody(data) + '
    ';\n },\n\n\n /**\n * Pikaday constructor\n */\n Pikaday = function(options)\n {\n var self = this,\n opts = self.config(options);\n\n self._onMouseDown = function(e)\n {\n if (!self._v) {\n return;\n }\n e = e || window.event;\n var target = e.target || e.srcElement;\n if (!target) {\n return;\n }\n\n if (!hasClass(target, 'is-disabled')) {\n if (hasClass(target, 'pika-button') && !hasClass(target, 'is-empty') && !hasClass(target.parentNode, 'is-disabled')) {\n self.setDate(new Date(target.getAttribute('data-pika-year'), target.getAttribute('data-pika-month'), target.getAttribute('data-pika-day')));\n if (opts.bound) {\n sto(function() {\n self.hide();\n if (opts.blurFieldOnSelect && opts.field) {\n opts.field.blur();\n }\n }, 100);\n }\n }\n else if (hasClass(target, 'pika-prev')) {\n self.prevMonth();\n }\n else if (hasClass(target, 'pika-next')) {\n self.nextMonth();\n }\n }\n if (!hasClass(target, 'pika-select')) {\n // if this is touch event prevent mouse events emulation\n if (e.preventDefault) {\n e.preventDefault();\n } else {\n e.returnValue = false;\n return false;\n }\n } else {\n self._c = true;\n }\n };\n\n self._onChange = function(e)\n {\n e = e || window.event;\n var target = e.target || e.srcElement;\n if (!target) {\n return;\n }\n if (hasClass(target, 'pika-select-month')) {\n self.gotoMonth(target.value);\n }\n else if (hasClass(target, 'pika-select-year')) {\n self.gotoYear(target.value);\n }\n };\n\n self._onKeyChange = function(e)\n {\n e = e || window.event;\n\n if (self.isVisible()) {\n\n switch(e.keyCode){\n case 13:\n case 27:\n if (opts.field) {\n opts.field.blur();\n }\n break;\n case 37:\n e.preventDefault();\n self.adjustDate('subtract', 1);\n break;\n case 38:\n self.adjustDate('subtract', 7);\n break;\n case 39:\n self.adjustDate('add', 1);\n break;\n case 40:\n self.adjustDate('add', 7);\n break;\n }\n }\n };\n\n self._onInputChange = function(e)\n {\n var date;\n\n if (e.firedBy === self) {\n return;\n }\n if (opts.parse) {\n date = opts.parse(opts.field.value, opts.format);\n } else if (hasMoment) {\n date = moment(opts.field.value, opts.format, opts.formatStrict);\n date = (date && date.isValid()) ? date.toDate() : null;\n }\n else {\n date = new Date(Date.parse(opts.field.value));\n }\n if (isDate(date)) {\n self.setDate(date);\n }\n if (!self._v) {\n self.show();\n }\n };\n\n self._onInputFocus = function()\n {\n self.show();\n };\n\n self._onInputClick = function()\n {\n self.show();\n };\n\n self._onInputBlur = function()\n {\n // IE allows pika div to gain focus; catch blur the input field\n var pEl = document.activeElement;\n do {\n if (hasClass(pEl, 'pika-single')) {\n return;\n }\n }\n while ((pEl = pEl.parentNode));\n\n if (!self._c) {\n self._b = sto(function() {\n self.hide();\n }, 50);\n }\n self._c = false;\n };\n\n self._onClick = function(e)\n {\n e = e || window.event;\n var target = e.target || e.srcElement,\n pEl = target;\n if (!target) {\n return;\n }\n if (!hasEventListeners && hasClass(target, 'pika-select')) {\n if (!target.onchange) {\n target.setAttribute('onchange', 'return;');\n addEvent(target, 'change', self._onChange);\n }\n }\n do {\n if (hasClass(pEl, 'pika-single') || pEl === opts.trigger) {\n return;\n }\n }\n while ((pEl = pEl.parentNode));\n if (self._v && target !== opts.trigger && pEl !== opts.trigger) {\n self.hide();\n }\n };\n\n self.el = document.createElement('div');\n self.el.className = 'pika-single' + (opts.isRTL ? ' is-rtl' : '') + (opts.theme ? ' ' + opts.theme : '');\n\n addEvent(self.el, 'mousedown', self._onMouseDown, true);\n addEvent(self.el, 'touchend', self._onMouseDown, true);\n addEvent(self.el, 'change', self._onChange);\n addEvent(document, 'keydown', self._onKeyChange);\n\n if (opts.field) {\n if (opts.container) {\n opts.container.appendChild(self.el);\n } else if (opts.bound) {\n document.body.appendChild(self.el);\n } else {\n opts.field.parentNode.insertBefore(self.el, opts.field.nextSibling);\n }\n addEvent(opts.field, 'change', self._onInputChange);\n\n if (!opts.defaultDate) {\n if (hasMoment && opts.field.value) {\n opts.defaultDate = moment(opts.field.value, opts.format).toDate();\n } else {\n opts.defaultDate = new Date(Date.parse(opts.field.value));\n }\n opts.setDefaultDate = true;\n }\n }\n\n var defDate = opts.defaultDate;\n\n if (isDate(defDate)) {\n if (opts.setDefaultDate) {\n self.setDate(defDate, true);\n } else {\n self.gotoDate(defDate);\n }\n } else {\n self.gotoDate(new Date());\n }\n\n if (opts.bound) {\n this.hide();\n self.el.className += ' is-bound';\n addEvent(opts.trigger, 'click', self._onInputClick);\n addEvent(opts.trigger, 'focus', self._onInputFocus);\n addEvent(opts.trigger, 'blur', self._onInputBlur);\n } else {\n this.show();\n }\n };\n\n\n /**\n * public Pikaday API\n */\n Pikaday.prototype = {\n\n\n /**\n * configure functionality\n */\n config: function(options)\n {\n if (!this._o) {\n this._o = extend({}, defaults, true);\n }\n\n var opts = extend(this._o, options, true);\n\n opts.isRTL = !!opts.isRTL;\n\n opts.field = (opts.field && opts.field.nodeName) ? opts.field : null;\n\n opts.theme = (typeof opts.theme) === 'string' && opts.theme ? opts.theme : null;\n\n opts.bound = !!(opts.bound !== undefined ? opts.field && opts.bound : opts.field);\n\n opts.trigger = (opts.trigger && opts.trigger.nodeName) ? opts.trigger : opts.field;\n\n opts.disableWeekends = !!opts.disableWeekends;\n\n opts.disableDayFn = (typeof opts.disableDayFn) === 'function' ? opts.disableDayFn : null;\n\n var nom = parseInt(opts.numberOfMonths, 10) || 1;\n opts.numberOfMonths = nom > 4 ? 4 : nom;\n\n if (!isDate(opts.minDate)) {\n opts.minDate = false;\n }\n if (!isDate(opts.maxDate)) {\n opts.maxDate = false;\n }\n if ((opts.minDate && opts.maxDate) && opts.maxDate < opts.minDate) {\n opts.maxDate = opts.minDate = false;\n }\n if (opts.minDate) {\n this.setMinDate(opts.minDate);\n }\n if (opts.maxDate) {\n this.setMaxDate(opts.maxDate);\n }\n\n if (isArray(opts.yearRange)) {\n var fallback = new Date().getFullYear() - 10;\n opts.yearRange[0] = parseInt(opts.yearRange[0], 10) || fallback;\n opts.yearRange[1] = parseInt(opts.yearRange[1], 10) || fallback;\n } else {\n opts.yearRange = Math.abs(parseInt(opts.yearRange, 10)) || defaults.yearRange;\n if (opts.yearRange > 100) {\n opts.yearRange = 100;\n }\n }\n\n return opts;\n },\n\n /**\n * return a formatted string of the current selection (using Moment.js if available)\n */\n toString: function(format)\n {\n format = format || this._o.format;\n if (!isDate(this._d)) {\n return '';\n }\n if (this._o.toString) {\n return this._o.toString(this._d, format);\n }\n if (hasMoment) {\n return moment(this._d).format(format);\n }\n return this._d.toDateString();\n },\n\n /**\n * return a Moment.js object of the current selection (if available)\n */\n getMoment: function()\n {\n return hasMoment ? moment(this._d) : null;\n },\n\n /**\n * set the current selection from a Moment.js object (if available)\n */\n setMoment: function(date, preventOnSelect)\n {\n if (hasMoment && moment.isMoment(date)) {\n this.setDate(date.toDate(), preventOnSelect);\n }\n },\n\n /**\n * return a Date object of the current selection\n */\n getDate: function()\n {\n return isDate(this._d) ? new Date(this._d.getTime()) : null;\n },\n\n /**\n * set the current selection\n */\n setDate: function(date, preventOnSelect)\n {\n if (!date) {\n this._d = null;\n\n if (this._o.field) {\n this._o.field.value = '';\n fireEvent(this._o.field, 'change', { firedBy: this });\n }\n\n return this.draw();\n }\n if (typeof date === 'string') {\n date = new Date(Date.parse(date));\n }\n if (!isDate(date)) {\n return;\n }\n\n var min = this._o.minDate,\n max = this._o.maxDate;\n\n if (isDate(min) && date < min) {\n date = min;\n } else if (isDate(max) && date > max) {\n date = max;\n }\n\n this._d = new Date(date.getTime());\n setToStartOfDay(this._d);\n this.gotoDate(this._d);\n\n if (this._o.field) {\n this._o.field.value = this.toString();\n fireEvent(this._o.field, 'change', { firedBy: this });\n }\n if (!preventOnSelect && typeof this._o.onSelect === 'function') {\n this._o.onSelect.call(this, this.getDate());\n }\n },\n\n /**\n * change view to a specific date\n */\n gotoDate: function(date)\n {\n var newCalendar = true;\n\n if (!isDate(date)) {\n return;\n }\n\n if (this.calendars) {\n var firstVisibleDate = new Date(this.calendars[0].year, this.calendars[0].month, 1),\n lastVisibleDate = new Date(this.calendars[this.calendars.length-1].year, this.calendars[this.calendars.length-1].month, 1),\n visibleDate = date.getTime();\n // get the end of the month\n lastVisibleDate.setMonth(lastVisibleDate.getMonth()+1);\n lastVisibleDate.setDate(lastVisibleDate.getDate()-1);\n newCalendar = (visibleDate < firstVisibleDate.getTime() || lastVisibleDate.getTime() < visibleDate);\n }\n\n if (newCalendar) {\n this.calendars = [{\n month: date.getMonth(),\n year: date.getFullYear()\n }];\n if (this._o.mainCalendar === 'right') {\n this.calendars[0].month += 1 - this._o.numberOfMonths;\n }\n }\n\n this.adjustCalendars();\n },\n\n adjustDate: function(sign, days) {\n\n var day = this.getDate() || new Date();\n var difference = parseInt(days)*24*60*60*1000;\n\n var newDay;\n\n if (sign === 'add') {\n newDay = new Date(day.valueOf() + difference);\n } else if (sign === 'subtract') {\n newDay = new Date(day.valueOf() - difference);\n }\n\n this.setDate(newDay);\n },\n\n adjustCalendars: function() {\n this.calendars[0] = adjustCalendar(this.calendars[0]);\n for (var c = 1; c < this._o.numberOfMonths; c++) {\n this.calendars[c] = adjustCalendar({\n month: this.calendars[0].month + c,\n year: this.calendars[0].year\n });\n }\n this.draw();\n },\n\n gotoToday: function()\n {\n this.gotoDate(new Date());\n },\n\n /**\n * change view to a specific month (zero-index, e.g. 0: January)\n */\n gotoMonth: function(month)\n {\n if (!isNaN(month)) {\n this.calendars[0].month = parseInt(month, 10);\n this.adjustCalendars();\n }\n },\n\n nextMonth: function()\n {\n this.calendars[0].month++;\n this.adjustCalendars();\n },\n\n prevMonth: function()\n {\n this.calendars[0].month--;\n this.adjustCalendars();\n },\n\n /**\n * change view to a specific full year (e.g. \"2012\")\n */\n gotoYear: function(year)\n {\n if (!isNaN(year)) {\n this.calendars[0].year = parseInt(year, 10);\n this.adjustCalendars();\n }\n },\n\n /**\n * change the minDate\n */\n setMinDate: function(value)\n {\n if(value instanceof Date) {\n setToStartOfDay(value);\n this._o.minDate = value;\n this._o.minYear = value.getFullYear();\n this._o.minMonth = value.getMonth();\n } else {\n this._o.minDate = defaults.minDate;\n this._o.minYear = defaults.minYear;\n this._o.minMonth = defaults.minMonth;\n this._o.startRange = defaults.startRange;\n }\n\n this.draw();\n },\n\n /**\n * change the maxDate\n */\n setMaxDate: function(value)\n {\n if(value instanceof Date) {\n setToStartOfDay(value);\n this._o.maxDate = value;\n this._o.maxYear = value.getFullYear();\n this._o.maxMonth = value.getMonth();\n } else {\n this._o.maxDate = defaults.maxDate;\n this._o.maxYear = defaults.maxYear;\n this._o.maxMonth = defaults.maxMonth;\n this._o.endRange = defaults.endRange;\n }\n\n this.draw();\n },\n\n setStartRange: function(value)\n {\n this._o.startRange = value;\n },\n\n setEndRange: function(value)\n {\n this._o.endRange = value;\n },\n\n /**\n * refresh the HTML\n */\n draw: function(force)\n {\n if (!this._v && !force) {\n return;\n }\n var opts = this._o,\n minYear = opts.minYear,\n maxYear = opts.maxYear,\n minMonth = opts.minMonth,\n maxMonth = opts.maxMonth,\n html = '',\n randId;\n\n if (this._y <= minYear) {\n this._y = minYear;\n if (!isNaN(minMonth) && this._m < minMonth) {\n this._m = minMonth;\n }\n }\n if (this._y >= maxYear) {\n this._y = maxYear;\n if (!isNaN(maxMonth) && this._m > maxMonth) {\n this._m = maxMonth;\n }\n }\n\n randId = 'pika-title-' + Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 2);\n\n for (var c = 0; c < opts.numberOfMonths; c++) {\n html += '
    ' + renderTitle(this, c, this.calendars[c].year, this.calendars[c].month, this.calendars[0].year, randId) + this.render(this.calendars[c].year, this.calendars[c].month, randId) + '
    ';\n }\n\n this.el.innerHTML = html;\n\n if (opts.bound) {\n if(opts.field.type !== 'hidden') {\n sto(function() {\n opts.trigger.focus();\n }, 1);\n }\n }\n\n if (typeof this._o.onDraw === 'function') {\n this._o.onDraw(this);\n }\n\n if (opts.bound) {\n // let the screen reader user know to use arrow keys\n opts.field.setAttribute('aria-label', 'Use the arrow keys to pick a date');\n }\n },\n\n adjustPosition: function()\n {\n var field, pEl, width, height, viewportWidth, viewportHeight, scrollTop, left, top, clientRect;\n\n if (this._o.container) return;\n\n this.el.style.position = 'absolute';\n\n field = this._o.trigger;\n pEl = field;\n width = this.el.offsetWidth;\n height = this.el.offsetHeight;\n viewportWidth = window.innerWidth || document.documentElement.clientWidth;\n viewportHeight = window.innerHeight || document.documentElement.clientHeight;\n scrollTop = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop;\n\n if (typeof field.getBoundingClientRect === 'function') {\n clientRect = field.getBoundingClientRect();\n left = clientRect.left + window.pageXOffset;\n top = clientRect.bottom + window.pageYOffset;\n } else {\n left = pEl.offsetLeft;\n top = pEl.offsetTop + pEl.offsetHeight;\n while((pEl = pEl.offsetParent)) {\n left += pEl.offsetLeft;\n top += pEl.offsetTop;\n }\n }\n\n // default position is bottom & left\n if ((this._o.reposition && left + width > viewportWidth) ||\n (\n this._o.position.indexOf('right') > -1 &&\n left - width + field.offsetWidth > 0\n )\n ) {\n left = left - width + field.offsetWidth;\n }\n if ((this._o.reposition && top + height > viewportHeight + scrollTop) ||\n (\n this._o.position.indexOf('top') > -1 &&\n top - height - field.offsetHeight > 0\n )\n ) {\n top = top - height - field.offsetHeight;\n }\n\n this.el.style.left = left + 'px';\n this.el.style.top = top + 'px';\n },\n\n /**\n * render HTML for a particular month\n */\n render: function(year, month, randId)\n {\n var opts = this._o,\n now = new Date(),\n days = getDaysInMonth(year, month),\n before = new Date(year, month, 1).getDay(),\n data = [],\n row = [];\n setToStartOfDay(now);\n if (opts.firstDay > 0) {\n before -= opts.firstDay;\n if (before < 0) {\n before += 7;\n }\n }\n var previousMonth = month === 0 ? 11 : month - 1,\n nextMonth = month === 11 ? 0 : month + 1,\n yearOfPreviousMonth = month === 0 ? year - 1 : year,\n yearOfNextMonth = month === 11 ? year + 1 : year,\n daysInPreviousMonth = getDaysInMonth(yearOfPreviousMonth, previousMonth);\n var cells = days + before,\n after = cells;\n while(after > 7) {\n after -= 7;\n }\n cells += 7 - after;\n var isWeekSelected = false;\n for (var i = 0, r = 0; i < cells; i++)\n {\n var day = new Date(year, month, 1 + (i - before)),\n isSelected = isDate(this._d) ? compareDates(day, this._d) : false,\n isToday = compareDates(day, now),\n hasEvent = opts.events.indexOf(day.toDateString()) !== -1 ? true : false,\n isEmpty = i < before || i >= (days + before),\n dayNumber = 1 + (i - before),\n monthNumber = month,\n yearNumber = year,\n isStartRange = opts.startRange && compareDates(opts.startRange, day),\n isEndRange = opts.endRange && compareDates(opts.endRange, day),\n isInRange = opts.startRange && opts.endRange && opts.startRange < day && day < opts.endRange,\n isDisabled = (opts.minDate && day < opts.minDate) ||\n (opts.maxDate && day > opts.maxDate) ||\n (opts.disableWeekends && isWeekend(day)) ||\n (opts.disableDayFn && opts.disableDayFn(day));\n\n if (isEmpty) {\n if (i < before) {\n dayNumber = daysInPreviousMonth + dayNumber;\n monthNumber = previousMonth;\n yearNumber = yearOfPreviousMonth;\n } else {\n dayNumber = dayNumber - days;\n monthNumber = nextMonth;\n yearNumber = yearOfNextMonth;\n }\n }\n\n var dayConfig = {\n day: dayNumber,\n month: monthNumber,\n year: yearNumber,\n hasEvent: hasEvent,\n isSelected: isSelected,\n isToday: isToday,\n isDisabled: isDisabled,\n isEmpty: isEmpty,\n isStartRange: isStartRange,\n isEndRange: isEndRange,\n isInRange: isInRange,\n showDaysInNextAndPreviousMonths: opts.showDaysInNextAndPreviousMonths,\n enableSelectionDaysInNextAndPreviousMonths: opts.enableSelectionDaysInNextAndPreviousMonths\n };\n\n if (opts.pickWholeWeek && isSelected) {\n isWeekSelected = true;\n }\n\n row.push(renderDay(dayConfig));\n\n if (++r === 7) {\n if (opts.showWeekNumber) {\n row.unshift(renderWeek(i - before, month, year));\n }\n data.push(renderRow(row, opts.isRTL, opts.pickWholeWeek, isWeekSelected));\n row = [];\n r = 0;\n isWeekSelected = false;\n }\n }\n return renderTable(opts, data, randId);\n },\n\n isVisible: function()\n {\n return this._v;\n },\n\n show: function()\n {\n if (!this.isVisible()) {\n this._v = true;\n this.draw();\n removeClass(this.el, 'is-hidden');\n if (this._o.bound) {\n addEvent(document, 'click', this._onClick);\n this.adjustPosition();\n }\n if (typeof this._o.onOpen === 'function') {\n this._o.onOpen.call(this);\n }\n }\n },\n\n hide: function()\n {\n var v = this._v;\n if (v !== false) {\n if (this._o.bound) {\n removeEvent(document, 'click', this._onClick);\n }\n this.el.style.position = 'static'; // reset\n this.el.style.left = 'auto';\n this.el.style.top = 'auto';\n addClass(this.el, 'is-hidden');\n this._v = false;\n if (v !== undefined && typeof this._o.onClose === 'function') {\n this._o.onClose.call(this);\n }\n }\n },\n\n /**\n * GAME OVER\n */\n destroy: function()\n {\n this.hide();\n removeEvent(this.el, 'mousedown', this._onMouseDown, true);\n removeEvent(this.el, 'touchend', this._onMouseDown, true);\n removeEvent(this.el, 'change', this._onChange);\n removeEvent(document, 'keydown', this._onKeyChange);\n if (this._o.field) {\n removeEvent(this._o.field, 'change', this._onInputChange);\n if (this._o.bound) {\n removeEvent(this._o.trigger, 'click', this._onInputClick);\n removeEvent(this._o.trigger, 'focus', this._onInputFocus);\n removeEvent(this._o.trigger, 'blur', this._onInputBlur);\n }\n }\n if (this.el.parentNode) {\n this.el.parentNode.removeChild(this.el);\n }\n }\n\n };\n\n return Pikaday;\n\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /opt/gitlab/embedded/service/gitlab-rails/node_modules/pikaday/pikaday.js\n// module id = ../../../node_modules/pikaday/pikaday.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= 200 && status < 300;\n this.status = status || 0;\n this.statusText = statusText || '';\n this.headers = new Headers(headers);\n this.body = body;\n\n if (isString(body)) {\n\n this.bodyText = body;\n\n } else if (isBlob(body)) {\n\n this.bodyBlob = body;\n\n if (isBlobText(body)) {\n this.bodyText = blobText(body);\n }\n }\n};\n\nResponse.prototype.blob = function blob () {\n return when(this.bodyBlob);\n};\n\nResponse.prototype.text = function text () {\n return when(this.bodyText);\n};\n\nResponse.prototype.json = function json () {\n return when(this.text(), function (text) { return JSON.parse(text); });\n};\n\nObject.defineProperty(Response.prototype, 'data', {\n\n get: function get() {\n return this.body;\n },\n\n set: function set(body) {\n this.body = body;\n }\n\n});\n\nfunction blobText(body) {\n return new PromiseObj(function (resolve) {\n\n var reader = new FileReader();\n\n reader.readAsText(body);\n reader.onload = function () {\n resolve(reader.result);\n };\n\n });\n}\n\nfunction isBlobText(body) {\n return body.type.indexOf('text') === 0 || body.type.indexOf('json') !== -1;\n}\n\n/**\n * HTTP Request.\n */\n\nvar Request = function Request(options$$1) {\n\n this.body = null;\n this.params = {};\n\n assign(this, options$$1, {\n method: toUpper(options$$1.method || 'GET')\n });\n\n if (!(this.headers instanceof Headers)) {\n this.headers = new Headers(this.headers);\n }\n};\n\nRequest.prototype.getUrl = function getUrl (){\n return Url(this);\n};\n\nRequest.prototype.getBody = function getBody (){\n return this.body;\n};\n\nRequest.prototype.respondWith = function respondWith (body, options$$1) {\n return new Response(body, assign(options$$1 || {}, {url: this.getUrl()}));\n};\n\n/**\n * Service for sending network requests.\n */\n\nvar COMMON_HEADERS = {'Accept': 'application/json, text/plain, */*'};\nvar JSON_CONTENT_TYPE = {'Content-Type': 'application/json;charset=utf-8'};\n\nfunction Http(options$$1) {\n\n var self = this || {}, client = Client(self.$vm);\n\n defaults(options$$1 || {}, self.$options, Http.options);\n\n Http.interceptors.forEach(function (handler) {\n\n if (isString(handler)) {\n handler = Http.interceptor[handler];\n }\n\n if (isFunction(handler)) {\n client.use(handler);\n }\n\n });\n\n return client(new Request(options$$1)).then(function (response) {\n\n return response.ok ? response : PromiseObj.reject(response);\n\n }, function (response) {\n\n if (response instanceof Error) {\n error(response);\n }\n\n return PromiseObj.reject(response);\n });\n}\n\nHttp.options = {};\n\nHttp.headers = {\n put: JSON_CONTENT_TYPE,\n post: JSON_CONTENT_TYPE,\n patch: JSON_CONTENT_TYPE,\n delete: JSON_CONTENT_TYPE,\n common: COMMON_HEADERS,\n custom: {}\n};\n\nHttp.interceptor = {before: before, method: method, jsonp: jsonp, json: json, form: form, header: header, cors: cors};\nHttp.interceptors = ['before', 'method', 'jsonp', 'json', 'form', 'header', 'cors'];\n\n['get', 'delete', 'head', 'jsonp'].forEach(function (method$$1) {\n\n Http[method$$1] = function (url, options$$1) {\n return this(assign(options$$1 || {}, {url: url, method: method$$1}));\n };\n\n});\n\n['post', 'put', 'patch'].forEach(function (method$$1) {\n\n Http[method$$1] = function (url, body, options$$1) {\n return this(assign(options$$1 || {}, {url: url, method: method$$1, body: body}));\n };\n\n});\n\n/**\n * Service for interacting with RESTful services.\n */\n\nfunction Resource(url, params, actions, options$$1) {\n\n var self = this || {}, resource = {};\n\n actions = assign({},\n Resource.actions,\n actions\n );\n\n each(actions, function (action, name) {\n\n action = merge({url: url, params: assign({}, params)}, options$$1, action);\n\n resource[name] = function () {\n return (self.$http || Http)(opts(action, arguments));\n };\n });\n\n return resource;\n}\n\nfunction opts(action, args) {\n\n var options$$1 = assign({}, action), params = {}, body;\n\n switch (args.length) {\n\n case 2:\n\n params = args[0];\n body = args[1];\n\n break;\n\n case 1:\n\n if (/^(POST|PUT|PATCH)$/i.test(options$$1.method)) {\n body = args[0];\n } else {\n params = args[0];\n }\n\n break;\n\n case 0:\n\n break;\n\n default:\n\n throw 'Expected up to 2 arguments [params, body], got ' + args.length + ' arguments';\n }\n\n options$$1.body = body;\n options$$1.params = assign({}, options$$1.params, params);\n\n return options$$1;\n}\n\nResource.actions = {\n\n get: {method: 'GET'},\n save: {method: 'POST'},\n query: {method: 'GET'},\n update: {method: 'PUT'},\n remove: {method: 'DELETE'},\n delete: {method: 'DELETE'}\n\n};\n\n/**\n * Install plugin.\n */\n\nfunction plugin(Vue) {\n\n if (plugin.installed) {\n return;\n }\n\n Util(Vue);\n\n Vue.url = Url;\n Vue.http = Http;\n Vue.resource = Resource;\n Vue.Promise = PromiseObj;\n\n Object.defineProperties(Vue.prototype, {\n\n $url: {\n get: function get() {\n return options(Vue.url, this, this.$options.url);\n }\n },\n\n $http: {\n get: function get() {\n return options(Vue.http, this, this.$options.http);\n }\n },\n\n $resource: {\n get: function get() {\n return Vue.resource.bind(this);\n }\n },\n\n $promise: {\n get: function get() {\n var this$1 = this;\n\n return function (executor) { return new Vue.Promise(executor, this$1); };\n }\n }\n\n });\n}\n\nif (typeof window !== 'undefined' && window.Vue) {\n window.Vue.use(plugin);\n}\n\nexport default plugin;\nexport { Url, Http, Resource };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /opt/gitlab/embedded/service/gitlab-rails/node_modules/vue-resource/dist/vue-resource.esm.js\n// module id = ../../../node_modules/vue-resource/dist/vue-resource.esm.js\n// module chunks = main","module.exports = function(module) {\r\n\tif(!module.webpackPolyfill) {\r\n\t\tmodule.deprecate = function() {};\r\n\t\tmodule.paths = [];\r\n\t\t// module.parent = undefined by default\r\n\t\tif(!module.children) module.children = [];\r\n\t\tObject.defineProperty(module, \"loaded\", {\r\n\t\t\tenumerable: true,\r\n\t\t\tget: function() {\r\n\t\t\t\treturn module.l;\r\n\t\t\t}\r\n\t\t});\r\n\t\tObject.defineProperty(module, \"id\", {\r\n\t\t\tenumerable: true,\r\n\t\t\tget: function() {\r\n\t\t\t\treturn module.i;\r\n\t\t\t}\r\n\t\t});\r\n\t\tmodule.webpackPolyfill = 1;\r\n\t}\r\n\treturn module;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/module.js\n// module id = ../../../node_modules/webpack/buildin/module.js\n// module chunks = main","/*\n * Date Format 1.2.3\n * (c) 2007-2009 Steven Levithan \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) {\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 no-param-reassign, prefer-template, no-var, no-void, consistent-return */\n\nimport AccessorUtilities from './lib/utils/accessor';\n\nexport default class Autosave {\n constructor(field, key, resource) {\n this.field = field;\n this.isLocalStorageAvailable = AccessorUtilities.isLocalStorageAccessSafe();\n this.resource = resource;\n if (key.join != null) {\n key = key.join('/');\n }\n this.key = 'autosave/' + key;\n this.field.data('autosave', this);\n this.restore();\n this.field.on('input', () => this.save());\n }\n\n restore() {\n var text;\n\n if (!this.isLocalStorageAvailable) return;\n\n text = window.localStorage.getItem(this.key);\n\n if ((text != null ? text.length : void 0) > 0) {\n this.field.val(text);\n }\n if (!this.resource && this.resource !== 'issue') {\n this.field.trigger('input');\n } else {\n // v-model does not update with jQuery trigger\n // https://github.com/vuejs/vue/issues/2804#issuecomment-216968137\n const event = new Event('change', { bubbles: true, cancelable: false });\n const field = this.field.get(0);\n if (field) {\n field.dispatchEvent(event);\n }\n }\n }\n\n save() {\n var text;\n text = this.field.val();\n\n if (this.isLocalStorageAvailable && (text != null ? text.length : void 0) > 0) {\n return window.localStorage.setItem(this.key, text);\n }\n\n return this.reset();\n }\n\n reset() {\n if (!this.isLocalStorageAvailable) return;\n\n return window.localStorage.removeItem(this.key);\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./autosave.js","/* eslint-disable class-methods-use-this */\nimport _ from 'underscore';\nimport Cookies from 'js-cookie';\nimport { __ } from './locale';\nimport { isInIssuePage, 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-content').length) {\n $('.js-awards-block.current').removeClass('current');\n }\n if (!$target.closest('.emoji-menu').length) {\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-issue-note-awards').length;\n\n if (isInIssuePage() && !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 getVotesBlock() {\n if (isInIssuePage()) {\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('award-url');\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('original-title');\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.attr('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('options-parent') === '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')\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.target.classList.toggle('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","const defaults = {\n // Buttons that will show the `suggestionSections`\n // has `data-fork-path`, and `data-action`\n openButtons: [],\n // Update the href(from `openButton` -> `data-fork-path`)\n // whenever a `openButton` is clicked\n forkButtons: [],\n // Buttons to hide the `suggestionSections`\n cancelButtons: [],\n // Section to show/hide\n suggestionSections: [],\n // Pieces of text that need updating depending on the action, `edit`, `replace`, `delete`\n actionTextPieces: [],\n};\n\nclass BlobForkSuggestion {\n constructor(options) {\n this.elementMap = Object.assign({}, defaults, options);\n this.onOpenButtonClick = this.onOpenButtonClick.bind(this);\n this.onCancelButtonClick = this.onCancelButtonClick.bind(this);\n }\n\n init() {\n this.bindEvents();\n\n return this;\n }\n\n bindEvents() {\n $(this.elementMap.openButtons).on('click', this.onOpenButtonClick);\n $(this.elementMap.cancelButtons).on('click', this.onCancelButtonClick);\n }\n\n showSuggestionSection(forkPath, action = 'edit') {\n $(this.elementMap.suggestionSections).removeClass('hidden');\n $(this.elementMap.forkButtons).attr('href', forkPath);\n $(this.elementMap.actionTextPieces).text(action);\n }\n\n hideSuggestionSection() {\n $(this.elementMap.suggestionSections).addClass('hidden');\n }\n\n onOpenButtonClick(e) {\n const forkPath = $(e.currentTarget).attr('data-fork-path');\n const action = $(e.currentTarget).attr('data-action');\n this.showSuggestionSection(forkPath, action);\n }\n\n onCancelButtonClick() {\n this.hideSuggestionSection();\n }\n\n destroy() {\n $(this.elementMap.openButtons).off('click', this.onOpenButtonClick);\n $(this.elementMap.cancelButtons).off('click', this.onCancelButtonClick);\n }\n}\n\nexport default BlobForkSuggestion;\n\n\n\n// WEBPACK FOOTER //\n// ./blob/blob_fork_suggestion.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, no-var, no-use-before-define, prefer-arrow-callback, no-else-return, consistent-return, prefer-template, quotes, one-var, one-var-declaration-per-line, no-unused-vars, no-return-assign, comma-dangle, quote-props, no-unused-expressions, no-sequences, object-shorthand, max-len */\nimport 'vendor/jquery.waitforimages';\n\n// Width where images must fits in, for 2-up this gets divided by 2\nconst availWidth = 900;\nconst viewModes = ['two-up', 'swipe'];\n\nexport default class ImageFile {\n constructor(file) {\n this.file = file;\n this.requestImageInfo($('.two-up.view .frame.deleted img', this.file), (function(_this) {\n return function(deletedWidth, deletedHeight) {\n return _this.requestImageInfo($('.two-up.view .frame.added img', _this.file), function(width, height) {\n _this.initViewModes();\n\n // Load two-up view after images are loaded\n // so that we can display the correct width and height information\n const $images = $('.two-up.view img', _this.file);\n\n $images.waitForImages(function() {\n _this.initView('two-up');\n });\n });\n };\n })(this));\n }\n\n initViewModes() {\n const viewMode = viewModes[0];\n $('.view-modes', this.file).removeClass('hide');\n $('.view-modes-menu', this.file).on('click', 'li', (function(_this) {\n return function(event) {\n if (!$(event.currentTarget).hasClass('active')) {\n return _this.activateViewMode(event.currentTarget.className);\n }\n };\n })(this));\n return this.activateViewMode(viewMode);\n }\n\n activateViewMode(viewMode) {\n $('.view-modes-menu li', this.file).removeClass('active').filter(\".\" + viewMode).addClass('active');\n return $(\".view:visible:not(.\" + viewMode + \")\", this.file).fadeOut(200, (function(_this) {\n return function() {\n $(\".view.\" + viewMode, _this.file).fadeIn(200);\n return _this.initView(viewMode);\n };\n })(this));\n }\n\n initView(viewMode) {\n return this.views[viewMode].call(this);\n }\n // eslint-disable-next-line class-methods-use-this\n initDraggable($el, padding, callback) {\n var dragging = false;\n var $body = $('body');\n var $offsetEl = $el.parent();\n\n $el.off('mousedown').on('mousedown', function() {\n dragging = true;\n $body.css('user-select', 'none');\n });\n\n $body.off('mouseup').off('mousemove').on('mouseup', function() {\n dragging = false;\n $body.css('user-select', '');\n })\n .on('mousemove', function(e) {\n var left;\n if (!dragging) return;\n\n left = e.pageX - ($offsetEl.offset().left + padding);\n\n callback(e, left);\n });\n }\n\n prepareFrames(view) {\n var maxHeight, maxWidth;\n maxWidth = 0;\n maxHeight = 0;\n $('.frame', view).each((function(_this) {\n return function(index, frame) {\n var height, width;\n width = $(frame).width();\n height = $(frame).height();\n maxWidth = width > maxWidth ? width : maxWidth;\n return maxHeight = height > maxHeight ? height : maxHeight;\n };\n })(this)).css({\n width: maxWidth,\n height: maxHeight\n });\n return [maxWidth, maxHeight];\n }\n // eslint-disable-next-line\n views = {\n 'two-up': function() {\n return $('.two-up.view .wrap', this.file).each((function(_this) {\n return function(index, wrap) {\n $('img', wrap).each(function() {\n var currentWidth;\n currentWidth = $(this).width();\n if (currentWidth > availWidth / 2) {\n return $(this).width(availWidth / 2);\n }\n });\n return _this.requestImageInfo($('img', wrap), function(width, height) {\n $('.image-info .meta-width', wrap).text(width + \"px\");\n $('.image-info .meta-height', wrap).text(height + \"px\");\n return $('.image-info', wrap).removeClass('hide');\n });\n };\n })(this));\n },\n 'swipe': function() {\n var maxHeight, maxWidth;\n maxWidth = 0;\n maxHeight = 0;\n return $('.swipe.view', this.file).each((function(_this) {\n return function(index, view) {\n var $swipeWrap, $swipeBar, $swipeFrame, wrapPadding, ref;\n ref = _this.prepareFrames(view), maxWidth = ref[0], maxHeight = ref[1];\n $swipeFrame = $('.swipe-frame', view);\n $swipeWrap = $('.swipe-wrap', view);\n $swipeBar = $('.swipe-bar', view);\n\n $swipeFrame.css({\n width: maxWidth + 16,\n height: maxHeight + 28\n });\n $swipeWrap.css({\n width: maxWidth + 1,\n height: maxHeight + 2\n });\n // Set swipeBar left position to match image frame\n $swipeBar.css({\n left: 1\n });\n\n wrapPadding = parseInt($swipeWrap.css('right').replace('px', ''), 10);\n\n _this.initDraggable($swipeBar, wrapPadding, function(e, left) {\n if (left > 0 && left < $swipeFrame.width() - (wrapPadding * 2)) {\n $swipeWrap.width((maxWidth + 1) - left);\n $swipeBar.css('left', left);\n }\n });\n };\n })(this));\n },\n 'onion-skin': function() {\n var dragTrackWidth, maxHeight, maxWidth;\n maxWidth = 0;\n maxHeight = 0;\n dragTrackWidth = $('.drag-track', this.file).width() - $('.dragger', this.file).width();\n return $('.onion-skin.view', this.file).each((function(_this) {\n return function(index, view) {\n var $frame, $track, $dragger, $frameAdded, framePadding, ref, dragging = false;\n ref = _this.prepareFrames(view), maxWidth = ref[0], maxHeight = ref[1];\n $frame = $('.onion-skin-frame', view);\n $frameAdded = $('.frame.added', view);\n $track = $('.drag-track', view);\n $dragger = $('.dragger', $track);\n\n $frame.css({\n width: maxWidth + 16,\n height: maxHeight + 28\n });\n $('.swipe-wrap', view).css({\n width: maxWidth + 1,\n height: maxHeight + 2\n });\n $dragger.css({\n left: dragTrackWidth\n });\n\n $frameAdded.css('opacity', 1);\n framePadding = parseInt($frameAdded.css('right').replace('px', ''), 10);\n\n _this.initDraggable($dragger, framePadding, function(e, left) {\n var opacity = left / dragTrackWidth;\n\n if (opacity >= 0 && opacity <= 1) {\n $dragger.css('left', left);\n $frameAdded.css('opacity', opacity);\n }\n });\n };\n })(this));\n }\n }\n\n requestImageInfo(img, callback) {\n const domImg = img.get(0);\n if (domImg) {\n if (domImg.complete) {\n return callback.call(this, domImg.naturalWidth, domImg.naturalHeight);\n } else {\n return img.on('load', (function(_this) {\n return function() {\n return callback.call(_this, domImg.naturalWidth, domImg.naturalHeight);\n };\n })(this));\n }\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./commit/image_file.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, prefer-arrow-callback */\nimport Api from './api';\nimport { humanize } from './lib/utils/text_utility';\n\nexport default class CreateLabelDropdown {\n constructor($el, namespacePath, projectPath) {\n this.$el = $el;\n this.namespacePath = namespacePath;\n this.projectPath = projectPath;\n this.$dropdownBack = $('.dropdown-menu-back', this.$el.closest('.dropdown'));\n this.$cancelButton = $('.js-cancel-label-btn', this.$el);\n this.$newLabelField = $('#new_label_name', this.$el);\n this.$newColorField = $('#new_label_color', this.$el);\n this.$colorPreview = $('.js-dropdown-label-color-preview', this.$el);\n this.$newLabelError = $('.js-label-error', this.$el);\n this.$newLabelCreateButton = $('.js-new-label-btn', this.$el);\n this.$colorSuggestions = $('.suggest-colors-dropdown a', this.$el);\n\n this.$newLabelError.hide();\n this.$newLabelCreateButton.disable();\n\n this.cleanBinding();\n this.addBinding();\n }\n\n cleanBinding() {\n this.$colorSuggestions.off('click');\n this.$newLabelField.off('keyup change');\n this.$newColorField.off('keyup change');\n this.$dropdownBack.off('click');\n this.$cancelButton.off('click');\n this.$newLabelCreateButton.off('click');\n }\n\n addBinding() {\n const self = this;\n\n this.$colorSuggestions.on('click', function (e) {\n const $this = $(this);\n self.addColorValue(e, $this);\n });\n\n this.$newLabelField.on('keyup change', this.enableLabelCreateButton.bind(this));\n this.$newColorField.on('keyup change', this.enableLabelCreateButton.bind(this));\n\n this.$dropdownBack.on('click', this.resetForm.bind(this));\n\n this.$cancelButton.on('click', function (e) {\n e.preventDefault();\n e.stopPropagation();\n\n self.resetForm();\n self.$dropdownBack.trigger('click');\n });\n\n this.$newLabelCreateButton.on('click', this.saveLabel.bind(this));\n }\n\n addColorValue(e, $this) {\n e.preventDefault();\n e.stopPropagation();\n\n this.$newColorField.val($this.data('color')).trigger('change');\n this.$colorPreview\n .css('background-color', $this.data('color'))\n .parent()\n .addClass('is-active');\n }\n\n enableLabelCreateButton() {\n if (this.$newLabelField.val() !== '' && this.$newColorField.val() !== '') {\n this.$newLabelError.hide();\n this.$newLabelCreateButton.enable();\n } else {\n this.$newLabelCreateButton.disable();\n }\n }\n\n resetForm() {\n this.$newLabelField\n .val('')\n .trigger('change');\n\n this.$newColorField\n .val('')\n .trigger('change');\n\n this.$colorPreview\n .css('background-color', '')\n .parent()\n .removeClass('is-active');\n }\n\n saveLabel(e) {\n e.preventDefault();\n e.stopPropagation();\n\n Api.newLabel(this.namespacePath, this.projectPath, {\n title: this.$newLabelField.val(),\n color: this.$newColorField.val(),\n }, (label) => {\n this.$newLabelCreateButton.enable();\n\n if (label.message) {\n let errors;\n\n if (typeof label.message === 'string') {\n errors = label.message;\n } else {\n errors = Object.keys(label.message).map(key =>\n `${humanize(key)} ${label.message[key].join(', ')}`,\n ).join('
      ');\n }\n\n this.$newLabelError\n .html(errors)\n .show();\n } else {\n this.$dropdownBack.trigger('click');\n\n $(document).trigger('created.label', label);\n }\n });\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./create_label.js","import { getLocationHash } from './lib/utils/url_utility';\nimport FilesCommentButton from './files_comment_button';\nimport SingleFileDiff from './single_file_diff';\nimport imageDiffHelper from './image_diff/helpers/index';\n\nconst UNFOLD_COUNT = 20;\nlet isBound = false;\n\nexport default class Diff {\n constructor() {\n const $diffFile = $('.files .diff-file');\n\n $diffFile.each((index, file) => {\n if (!$.data(file, 'singleFileDiff')) {\n $.data(file, 'singleFileDiff', new SingleFileDiff(file));\n }\n });\n\n const tab = document.getElementById('diffs');\n if (!tab || (tab && tab.dataset && tab.dataset.isLocked !== '')) FilesCommentButton.init($diffFile);\n\n const firstFile = $('.files').first().get(0);\n const canCreateNote = firstFile && firstFile.hasAttribute('data-can-create-note');\n $diffFile.each((index, file) => imageDiffHelper.initImageDiff(file, canCreateNote));\n\n if (!isBound) {\n $(document)\n .on('click', '.js-unfold', this.handleClickUnfold.bind(this))\n .on('click', '.diff-line-num a', this.handleClickLineNum.bind(this))\n .on('mousedown', 'td.line_content.parallel', this.handleParallelLineDown.bind(this));\n isBound = true;\n }\n\n if (getLocationHash()) {\n this.highlightSelectedLine();\n }\n\n this.openAnchoredDiff();\n }\n\n handleClickUnfold(e) {\n const $target = $(e.target);\n const [oldLineNumber, newLineNumber] = this.lineNumbers($target.parent());\n const offset = newLineNumber - oldLineNumber;\n const bottom = $target.hasClass('js-unfold-bottom');\n let since;\n let to;\n let unfold = true;\n\n if (bottom) {\n const lineNumber = newLineNumber + 1;\n since = lineNumber;\n to = lineNumber + UNFOLD_COUNT;\n } else {\n const lineNumber = newLineNumber - 1;\n since = lineNumber - UNFOLD_COUNT;\n to = lineNumber;\n\n // make sure we aren't loading more than we need\n const prevNewLine = this.lineNumbers($target.parent().prev())[1];\n if (since <= prevNewLine + 1) {\n since = prevNewLine + 1;\n unfold = false;\n }\n }\n\n const file = $target.parents('.diff-file');\n const link = file.data('blob-diff-path');\n const view = file.data('view');\n\n const params = { since, to, bottom, offset, unfold, view };\n $.get(link, params, response => $target.parent().replaceWith(response));\n }\n\n openAnchoredDiff(cb) {\n const locationHash = getLocationHash();\n const anchoredDiff = locationHash && locationHash.split('_')[0];\n\n if (!anchoredDiff) return;\n\n const diffTitle = $(`#${anchoredDiff}`);\n const diffFile = diffTitle.closest('.diff-file');\n const nothingHereBlock = $('.nothing-here-block:visible', diffFile);\n if (nothingHereBlock.length) {\n const clickTarget = $('.js-file-title, .click-to-expand', diffFile);\n diffFile.data('singleFileDiff').toggleDiff(clickTarget, () => {\n this.highlightSelectedLine();\n if (cb) cb();\n });\n } else if (cb) {\n cb();\n }\n }\n\n handleClickLineNum(e) {\n const hash = $(e.currentTarget).attr('href');\n e.preventDefault();\n if (window.history.pushState) {\n window.history.pushState(null, null, hash);\n } else {\n window.location.hash = hash;\n }\n this.highlightSelectedLine();\n }\n // eslint-disable-next-line class-methods-use-this\n handleParallelLineDown(e) {\n const line = $(e.currentTarget);\n const table = line.closest('table');\n\n table.removeClass('left-side-selected right-side-selected');\n\n const lineClass = ['left-side', 'right-side'].filter(name => line.hasClass(name))[0];\n if (lineClass) {\n table.addClass(`${lineClass}-selected`);\n }\n }\n // eslint-disable-next-line class-methods-use-this\n diffViewType() {\n return $('.inline-parallel-buttons a.active').data('view-type');\n }\n // eslint-disable-next-line class-methods-use-this\n lineNumbers(line) {\n const children = line.find('.diff-line-num').toArray();\n if (children.length !== 2) {\n return [0, 0];\n }\n return children.map(elm => parseInt($(elm).data('linenumber'), 10) || 0);\n }\n // eslint-disable-next-line class-methods-use-this\n highlightSelectedLine() {\n const hash = getLocationHash();\n const $diffFiles = $('.diff-file');\n $diffFiles.find('.hll').removeClass('hll');\n\n if (hash) {\n $diffFiles\n .find(`tr#${hash}:not(.match) td, td#${hash}, td[data-line-code=\"${hash}\"]`)\n .addClass('hll');\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./diff.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 MergeRequest from './merge_request';\nimport Flash from './flash';\nimport GfmAutoComplete from './gfm_auto_complete';\nimport ZenMode from './zen_mode';\nimport initNotes from './init_notes';\nimport initIssuableSidebar from './init_issuable_sidebar';\nimport { convertPermissionToBoolean } from './lib/utils/common_utils';\nimport GlFieldErrors from './gl_field_errors';\nimport Shortcuts from './shortcuts';\nimport ShortcutsIssuable from './shortcuts_issuable';\nimport Diff from './diff';\nimport SearchAutocomplete from './search_autocomplete';\n\nvar Dispatcher;\n\n(function() {\n Dispatcher = (function() {\n function Dispatcher() {\n this.initSearch();\n this.initFieldErrors();\n this.initPageScripts();\n }\n\n Dispatcher.prototype.initPageScripts = function() {\n var path, shortcut_handler;\n const page = $('body').attr('data-page');\n if (!page) {\n return false;\n }\n\n const fail = () => Flash('Error loading dynamic module');\n const callDefault = m => m.default();\n\n path = page.split(':');\n shortcut_handler = null;\n\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 switch (page) {\n case 'projects:environments:metrics':\n import('./pages/projects/environments/metrics')\n .then(callDefault)\n .catch(fail);\n break;\n case 'projects:merge_requests:index':\n case 'projects:issues:index':\n case 'projects:issues:show':\n shortcut_handler = true;\n break;\n case 'projects:milestones:index':\n import('./pages/projects/milestones/index')\n .then(callDefault)\n .catch(fail);\n break;\n case 'projects:milestones:show':\n import('./pages/projects/milestones/show')\n .then(callDefault)\n .catch(fail);\n break;\n case 'groups:milestones:show':\n import('./pages/groups/milestones/show')\n .then(callDefault)\n .catch(fail);\n break;\n case 'dashboard:milestones:show':\n import('./pages/dashboard/milestones/show')\n .then(callDefault)\n .catch(fail);\n break;\n case 'dashboard:issues':\n import('./pages/dashboard/issues')\n .then(callDefault)\n .catch(fail);\n break;\n case 'dashboard:merge_requests':\n import('./pages/dashboard/merge_requests')\n .then(callDefault)\n .catch(fail);\n break;\n case 'groups:issues':\n import('./pages/groups/issues')\n .then(callDefault)\n .catch(fail);\n break;\n case 'groups:merge_requests':\n import('./pages/groups/merge_requests')\n .then(callDefault)\n .catch(fail);\n break;\n case 'dashboard:todos:index':\n import('./pages/dashboard/todos/index')\n .then(callDefault)\n .catch(fail);\n break;\n case 'admin:jobs:index':\n import('./pages/admin/jobs/index')\n .then(callDefault)\n .catch(fail);\n break;\n case 'admin:projects:index':\n import('./pages/admin/projects/index/index')\n .then(callDefault)\n .catch(fail);\n break;\n case 'admin:users:index':\n import('./pages/admin/users/shared')\n .then(callDefault)\n .catch(fail);\n break;\n case 'admin:users:show':\n import('./pages/admin/users/shared')\n .then(callDefault)\n .catch(fail);\n break;\n case 'dashboard:projects:index':\n case 'dashboard:projects:starred':\n import('./pages/dashboard/projects')\n .then(callDefault)\n .catch(fail);\n break;\n case 'explore:projects:index':\n case 'explore:projects:trending':\n case 'explore:projects:starred':\n import('./pages/explore/projects')\n .then(callDefault)\n .catch(fail);\n break;\n case 'explore:groups:index':\n import('./pages/explore/groups')\n .then(callDefault)\n .catch(fail);\n break;\n case 'projects:milestones:new':\n case 'projects:milestones:create':\n import('./pages/projects/milestones/new')\n .then(callDefault)\n .catch(fail);\n break;\n case 'projects:milestones:edit':\n case 'projects:milestones:update':\n import('./pages/projects/milestones/edit')\n .then(callDefault)\n .catch(fail);\n break;\n case 'groups:milestones:new':\n case 'groups:milestones:create':\n import('./pages/groups/milestones/new')\n .then(callDefault)\n .catch(fail);\n break;\n case 'groups:milestones:edit':\n case 'groups:milestones:update':\n import('./pages/groups/milestones/edit')\n .then(callDefault)\n .catch(fail);\n break;\n case 'projects:compare:show':\n import('./pages/projects/compare/show')\n .then(callDefault)\n .catch(fail);\n break;\n case 'projects:branches:new':\n import('./pages/projects/branches/new')\n .then(callDefault)\n .catch(fail);\n break;\n case 'projects:branches:create':\n import('./pages/projects/branches/new')\n .then(callDefault)\n .catch(fail);\n break;\n case 'projects:branches:index':\n import('./pages/projects/branches/index')\n .then(callDefault)\n .catch(fail);\n break;\n case 'projects:issues:new':\n import('./pages/projects/issues/new')\n .then(callDefault)\n .catch(fail);\n shortcut_handler = true;\n break;\n case 'projects:issues:edit':\n import('./pages/projects/issues/edit')\n .then(callDefault)\n .catch(fail);\n shortcut_handler = true;\n break;\n case 'projects:merge_requests:creations:new':\n import('./pages/projects/merge_requests/creations/new')\n .then(callDefault)\n .catch(fail);\n case 'projects:merge_requests:creations:diffs':\n import('./pages/projects/merge_requests/creations/diffs')\n .then(callDefault)\n .catch(fail);\n shortcut_handler = true;\n break;\n case 'projects:merge_requests:edit':\n import('./pages/projects/merge_requests/edit')\n .then(callDefault)\n .catch(fail);\n shortcut_handler = true;\n break;\n case 'projects:tags:new':\n import('./pages/projects/tags/new')\n .then(callDefault)\n .catch(fail);\n break;\n case 'projects:snippets:show':\n import('./pages/projects/snippets/show')\n .then(callDefault)\n .catch(fail);\n break;\n case 'projects:snippets:new':\n case 'projects:snippets:create':\n import('./pages/projects/snippets/new')\n .then(callDefault)\n .catch(fail);\n break;\n case 'projects:snippets:edit':\n case 'projects:snippets:update':\n import('./pages/projects/snippets/edit')\n .then(callDefault)\n .catch(fail);\n break;\n case 'snippets:new':\n import('./pages/snippets/new')\n .then(callDefault)\n .catch(fail);\n break;\n case 'snippets:edit':\n import('./pages/snippets/edit')\n .then(callDefault)\n .catch(fail);\n break;\n case 'snippets:create':\n import('./pages/snippets/new')\n .then(callDefault)\n .catch(fail);\n break;\n case 'snippets:update':\n import('./pages/snippets/edit')\n .then(callDefault)\n .catch(fail);\n break;\n case 'projects:releases:edit':\n import('./pages/projects/releases/edit')\n .then(callDefault)\n .catch(fail);\n break;\n case 'projects:merge_requests:show':\n new Diff();\n new ZenMode();\n\n initIssuableSidebar();\n initNotes();\n\n const mrShowNode = document.querySelector('.merge-request');\n window.mergeRequest = new MergeRequest({\n action: mrShowNode.dataset.mrAction,\n });\n shortcut_handler = new ShortcutsIssuable(true);\n break;\n case 'dashboard:activity':\n import('./pages/dashboard/activity')\n .then(callDefault)\n .catch(fail);\n break;\n case 'projects:commit:show':\n import('./pages/projects/commit/show')\n .then(callDefault)\n .catch(fail);\n shortcut_handler = true;\n break;\n case 'projects:commit:pipelines':\n import('./pages/projects/commit/pipelines')\n .then(callDefault)\n .catch(fail);\n break;\n case 'projects:activity':\n import('./pages/projects/activity')\n .then(callDefault)\n .catch(fail);\n shortcut_handler = true;\n break;\n case 'projects:commits:show':\n import('./pages/projects/commits/show')\n .then(callDefault)\n .catch(fail);\n shortcut_handler = true;\n break;\n case 'projects:show':\n shortcut_handler = true;\n break;\n case 'projects:edit':\n import('./pages/projects/edit')\n .then(callDefault)\n .catch(fail);\n break;\n case 'projects:imports:show':\n import('./pages/projects/imports/show')\n .then(callDefault)\n .catch(fail);\n break;\n case 'projects:pipelines:new':\n case 'projects:pipelines:create':\n import('./pages/projects/pipelines/new')\n .then(callDefault)\n .catch(fail);\n break;\n case 'projects:pipelines:builds':\n case 'projects:pipelines:failures':\n case 'projects:pipelines:show':\n import('./pages/projects/pipelines/builds')\n .then(callDefault)\n .catch(fail);\n break;\n case 'groups:activity':\n import('./pages/groups/activity')\n .then(callDefault)\n .catch(fail);\n break;\n case 'groups:show':\n shortcut_handler = true;\n break;\n case 'groups:group_members:index':\n import('./pages/groups/group_members/index')\n .then(callDefault)\n .catch(fail);\n break;\n case 'projects:project_members:index':\n import('./pages/projects/project_members')\n .then(callDefault)\n .catch(fail);\n break;\n case 'groups:create':\n case 'groups:new':\n import('./pages/groups/new')\n .then(callDefault)\n .catch(fail);\n break;\n case 'groups:edit':\n import('./pages/groups/edit')\n .then(callDefault)\n .catch(fail);\n break;\n case 'admin:groups:create':\n case 'admin:groups:new':\n import('./pages/admin/groups/new')\n .then(callDefault)\n .catch(fail);\n break;\n case 'admin:groups:edit':\n import('./pages/admin/groups/edit')\n .then(callDefault)\n .catch(fail);\n break;\n case 'projects:tree:show':\n import('./pages/projects/tree/show')\n .then(callDefault)\n .catch(fail);\n shortcut_handler = true;\n break;\n case 'projects:find_file:show':\n import('./pages/projects/find_file/show')\n .then(callDefault)\n .catch(fail);\n shortcut_handler = true;\n break;\n case 'projects:blob:show':\n import('./pages/projects/blob/show')\n .then(callDefault)\n .catch(fail);\n shortcut_handler = true;\n break;\n case 'projects:blame:show':\n import('./pages/projects/blame/show')\n .then(callDefault)\n .catch(fail);\n shortcut_handler = true;\n break;\n case 'groups:labels:new':\n import('./pages/groups/labels/new')\n .then(callDefault)\n .catch(fail);\n break;\n case 'groups:labels:edit':\n import('./pages/groups/labels/edit')\n .then(callDefault)\n .catch(fail);\n break;\n case 'projects:labels:new':\n import('./pages/projects/labels/new')\n .then(callDefault)\n .catch(fail);\n break;\n case 'projects:labels:edit':\n import('./pages/projects/labels/edit')\n .then(callDefault)\n .catch(fail);\n break;\n case 'groups:labels:index':\n import('./pages/groups/labels/index')\n .then(callDefault)\n .catch(fail);\n break;\n case 'projects:labels:index':\n import('./pages/projects/labels/index')\n .then(callDefault)\n .catch(fail);\n break;\n case 'projects:network:show':\n // Ensure we don't create a particular shortcut handler here. This is\n // already created, where the network graph is created.\n shortcut_handler = true;\n break;\n case 'projects:forks:new':\n import('./pages/projects/forks/new')\n .then(callDefault)\n .catch(fail);\n break;\n case 'projects:artifacts:browse':\n import('./pages/projects/artifacts/browse')\n .then(callDefault)\n .catch(fail);\n shortcut_handler = true;\n break;\n case 'projects:artifacts:file':\n import('./pages/projects/artifacts/file')\n .then(callDefault)\n .catch(fail);\n shortcut_handler = true;\n break;\n case 'help:index':\n import('./pages/help')\n .then(callDefault)\n .catch(fail);\n break;\n case 'search:show':\n import('./pages/search/show')\n .then(callDefault)\n .catch(fail);\n break;\n case 'projects:settings:repository:show':\n import('./pages/projects/settings/repository/show')\n .then(callDefault)\n .catch(fail);\n break;\n case 'projects:settings:ci_cd:show':\n import('./pages/projects/settings/ci_cd/show')\n .then(callDefault)\n .catch(fail);\n break;\n case 'groups:settings:ci_cd:show':\n import('./pages/groups/settings/ci_cd/show')\n .then(callDefault)\n .catch(fail);\n break;\n case 'ci:lints:create':\n case 'ci:lints:show':\n import('./pages/ci/lints')\n .then(callDefault)\n .catch(fail);\n break;\n case 'users:show':\n import('./pages/users/show')\n .then(callDefault)\n .catch(fail);\n break;\n case 'admin:conversational_development_index:show':\n import('./pages/admin/conversational_development_index/show')\n .then(callDefault)\n .catch(fail);\n break;\n case 'snippets:show':\n import('./pages/snippets/show')\n .then(callDefault)\n .catch(fail);\n break;\n case 'import:fogbugz:new_user_map':\n import('./pages/import/fogbugz/new_user_map')\n .then(callDefault)\n .catch(fail);\n break;\n case 'profiles:personal_access_tokens:index':\n import('./pages/profiles/personal_access_tokens')\n .then(callDefault)\n .catch(fail);\n break;\n case 'admin:impersonation_tokens:index':\n import('./pages/admin/impersonation_tokens')\n .then(callDefault)\n .catch(fail);\n break;\n case 'projects:clusters:show':\n case 'projects:clusters:update':\n case 'projects:clusters:destroy':\n import('./pages/projects/clusters/show')\n .then(callDefault)\n .catch(fail);\n break;\n case 'projects:clusters:index':\n import('./pages/projects/clusters/index')\n .then(callDefault)\n .catch(fail);\n break;\n case 'dashboard:groups:index':\n import('./pages/dashboard/groups/index')\n .then(callDefault)\n .catch(fail);\n break;\n }\n switch (path[0]) {\n case 'sessions':\n import('./pages/sessions')\n .then(callDefault)\n .catch(fail);\n break;\n case 'omniauth_callbacks':\n import('./pages/omniauth_callbacks')\n .then(callDefault)\n .catch(fail);\n break;\n case 'admin':\n import('./pages/admin')\n .then(callDefault)\n .catch(fail);\n switch (path[1]) {\n case 'broadcast_messages':\n import('./pages/admin/broadcast_messages')\n .then(callDefault)\n .catch(fail);\n break;\n case 'cohorts':\n import('./pages/admin/cohorts')\n .then(callDefault)\n .catch(fail);\n break;\n case 'groups':\n switch (path[2]) {\n case 'show':\n import('./pages/admin/groups/show')\n .then(callDefault)\n .catch(fail);\n break;\n }\n break;\n case 'projects':\n import('./pages/admin/projects')\n .then(callDefault)\n .catch(fail);\n break;\n case 'labels':\n switch (path[2]) {\n case 'new':\n import('./pages/admin/labels/new')\n .then(callDefault)\n .catch(fail);\n break;\n case 'edit':\n import('./pages/admin/labels/edit')\n .then(callDefault)\n .catch(fail);\n break;\n }\n case 'abuse_reports':\n import('./pages/admin/abuse_reports')\n .then(callDefault)\n .catch(fail);\n break;\n }\n break;\n case 'profiles':\n import('./pages/profiles/index')\n .then(callDefault)\n .catch(fail);\n break;\n case 'projects':\n import('./pages/projects')\n .then(callDefault)\n .catch(fail);\n shortcut_handler = true;\n switch (path[1]) {\n case 'compare':\n import('./pages/projects/compare')\n .then(callDefault)\n .catch(fail);\n break;\n case 'create':\n case 'new':\n import('./pages/projects/new')\n .then(callDefault)\n .catch(fail);\n break;\n case 'wikis':\n import('./pages/projects/wikis')\n .then(callDefault)\n .catch(fail);\n shortcut_handler = true;\n break;\n }\n break;\n }\n // If we haven't installed a custom shortcut handler, install the default one\n if (!shortcut_handler) {\n new Shortcuts();\n }\n\n if (document.querySelector('#peek')) {\n import('./performance_bar')\n .then(m => new m.default({ container: '#peek' })) // eslint-disable-line new-cap\n .catch(fail);\n }\n };\n\n Dispatcher.prototype.initSearch = function() {\n // Only when search form is present\n if ($('.search').length) {\n return new SearchAutocomplete();\n }\n };\n\n Dispatcher.prototype.initFieldErrors = function() {\n $('.gl-show-field-errors').each((i, form) => {\n new GlFieldErrors(form);\n });\n };\n\n return Dispatcher;\n })();\n})();\n\nexport default function initDispatcher() {\n return new Dispatcher();\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","/* eslint-disable */\n\nconst InputSetter = {\n init(hook) {\n this.hook = hook;\n this.destroyed = false;\n this.config = hook.config.InputSetter || (this.hook.config.InputSetter = {});\n\n this.eventWrapper = {};\n\n this.addEvents();\n },\n\n addEvents() {\n this.eventWrapper.setInputs = this.setInputs.bind(this);\n this.hook.list.list.addEventListener('click.dl', this.eventWrapper.setInputs);\n },\n\n removeEvents() {\n this.hook.list.list.removeEventListener('click.dl', this.eventWrapper.setInputs);\n },\n\n setInputs(e) {\n if (this.destroyed) return;\n\n const selectedItem = e.detail.selected;\n\n if (!Array.isArray(this.config)) this.config = [this.config];\n\n this.config.forEach(config => this.setInput(config, selectedItem));\n },\n\n setInput(config, selectedItem) {\n const input = config.input || this.hook.trigger;\n const newValue = selectedItem.getAttribute(config.valueAttribute);\n const inputAttribute = config.inputAttribute;\n\n if (input.hasAttribute(inputAttribute)) return input.setAttribute(inputAttribute, newValue);\n if (input.tagName === 'INPUT') return input.value = newValue;\n return input.textContent = newValue;\n },\n\n destroy() {\n this.destroyed = true;\n\n this.removeEvents();\n },\n};\n\nexport default InputSetter;\n\n\n\n// WEBPACK FOOTER //\n// ./droplab/plugins/input_setter.js","import Dropzone from 'dropzone';\nimport _ from 'underscore';\nimport './preview_markdown';\nimport csrf from './lib/utils/csrf';\nimport axios from './lib/utils/axios_utils';\n\nDropzone.autoDiscover = false;\n\nexport default function dropzoneInput(form) {\n const divHover = '
      ';\n const iconPaperclip = '';\n const $attachButton = form.find('.button-attach-file');\n const $attachingFileMessage = form.find('.attaching-file-message');\n const $cancelButton = form.find('.button-cancel-uploading-files');\n const $retryLink = form.find('.retry-uploading-link');\n const $uploadProgress = form.find('.uploading-progress');\n const $uploadingErrorContainer = form.find('.uploading-error-container');\n const $uploadingErrorMessage = form.find('.uploading-error-message');\n const $uploadingProgressContainer = form.find('.uploading-progress-container');\n const uploadsPath = window.uploads_path || null;\n const maxFileSize = gon.max_file_size || 10;\n const formTextarea = form.find('.js-gfm-input');\n let handlePaste;\n let pasteText;\n let addFileToForm;\n let updateAttachingMessage;\n let isImage;\n let getFilename;\n let uploadFile;\n\n formTextarea.wrap('
      ');\n formTextarea.on('paste', event => handlePaste(event));\n\n // Add dropzone area to the form.\n const $mdArea = formTextarea.closest('.md-area');\n form.setupMarkdownPreview();\n const $formDropzone = form.find('.div-dropzone');\n $formDropzone.parent().addClass('div-dropzone-wrapper');\n $formDropzone.append(divHover);\n $formDropzone.find('.div-dropzone-hover').append(iconPaperclip);\n\n if (!uploadsPath) {\n $formDropzone.addClass('js-invalid-dropzone');\n return;\n }\n\n const dropzone = $formDropzone.dropzone({\n url: uploadsPath,\n dictDefaultMessage: '',\n clickable: true,\n paramName: 'file',\n maxFilesize: maxFileSize,\n uploadMultiple: false,\n headers: csrf.headers,\n previewContainer: false,\n processing: () => $('.div-dropzone-alert').alert('close'),\n dragover: () => {\n $mdArea.addClass('is-dropzone-hover');\n form.find('.div-dropzone-hover').css('opacity', 0.7);\n },\n dragleave: () => {\n $mdArea.removeClass('is-dropzone-hover');\n form.find('.div-dropzone-hover').css('opacity', 0);\n },\n drop: () => {\n $mdArea.removeClass('is-dropzone-hover');\n form.find('.div-dropzone-hover').css('opacity', 0);\n formTextarea.focus();\n },\n success(header, response) {\n const processingFileCount = this.getQueuedFiles().length + this.getUploadingFiles().length;\n const shouldPad = processingFileCount >= 1;\n\n pasteText(response.link.markdown, shouldPad);\n // Show 'Attach a file' link only when all files have been uploaded.\n if (!processingFileCount) $attachButton.removeClass('hide');\n addFileToForm(response.link.url);\n },\n error: (file, errorMessage = 'Attaching the file failed.', xhr) => {\n // If 'error' event is fired by dropzone, the second parameter is error message.\n // If the 'errorMessage' parameter is empty, the default error message is set.\n // If the 'error' event is fired by backend (xhr) error response, the third parameter is\n // xhr object (xhr.responseText is error message).\n // On error we hide the 'Attach' and 'Cancel' buttons\n // and show an error.\n\n // If there's xhr error message, let's show it instead of dropzone's one.\n const message = xhr ? xhr.responseText : errorMessage;\n\n $uploadingErrorContainer.removeClass('hide');\n $uploadingErrorMessage.html(message);\n $attachButton.addClass('hide');\n $cancelButton.addClass('hide');\n },\n totaluploadprogress(totalUploadProgress) {\n updateAttachingMessage(this.files, $attachingFileMessage);\n $uploadProgress.text(`${Math.round(totalUploadProgress)}%`);\n },\n sending: () => {\n // DOM elements already exist.\n // Instead of dynamically generating them,\n // we just either hide or show them.\n $attachButton.addClass('hide');\n $uploadingErrorContainer.addClass('hide');\n $uploadingProgressContainer.removeClass('hide');\n $cancelButton.removeClass('hide');\n },\n removedfile: () => {\n $attachButton.removeClass('hide');\n $cancelButton.addClass('hide');\n $uploadingProgressContainer.addClass('hide');\n $uploadingErrorContainer.addClass('hide');\n },\n queuecomplete: () => {\n $('.dz-preview').remove();\n $('.markdown-area').trigger('input');\n\n $uploadingProgressContainer.addClass('hide');\n $cancelButton.addClass('hide');\n },\n });\n\n const child = $(dropzone[0]).children('textarea');\n\n // removeAllFiles(true) stops uploading files (if any)\n // and remove them from dropzone files queue.\n $cancelButton.on('click', (e) => {\n e.preventDefault();\n e.stopPropagation();\n Dropzone.forElement($formDropzone.get(0)).removeAllFiles(true);\n });\n\n // If 'error' event is fired, we store a failed files,\n // clear dropzone files queue, change status of failed files to undefined,\n // and add that files to the dropzone files queue again.\n // addFile() adds file to dropzone files queue and upload it.\n $retryLink.on('click', (e) => {\n const dropzoneInstance = Dropzone.forElement(e.target.closest('.js-main-target-form').querySelector('.div-dropzone'));\n const failedFiles = dropzoneInstance.files;\n\n e.preventDefault();\n\n // 'true' parameter of removeAllFiles() cancels\n // uploading of files that are being uploaded at the moment.\n dropzoneInstance.removeAllFiles(true);\n\n failedFiles.map((failedFile) => {\n const file = failedFile;\n\n if (file.status === Dropzone.ERROR) {\n file.status = undefined;\n file.accepted = undefined;\n }\n\n return dropzoneInstance.addFile(file);\n });\n });\n // eslint-disable-next-line consistent-return\n handlePaste = (event) => {\n const pasteEvent = event.originalEvent;\n if (pasteEvent.clipboardData && pasteEvent.clipboardData.items) {\n const image = isImage(pasteEvent);\n if (image) {\n event.preventDefault();\n const filename = getFilename(pasteEvent) || 'image.png';\n const text = `{{${filename}}}`;\n pasteText(text);\n return uploadFile(image.getAsFile(), filename);\n }\n }\n };\n\n isImage = (data) => {\n let i = 0;\n while (i < data.clipboardData.items.length) {\n const item = data.clipboardData.items[i];\n if (item.type.indexOf('image') !== -1) {\n return item;\n }\n i += 1;\n }\n return false;\n };\n\n pasteText = (text, shouldPad) => {\n let formattedText = text;\n if (shouldPad) {\n formattedText += '\\n\\n';\n }\n const textarea = child.get(0);\n const caretStart = textarea.selectionStart;\n const caretEnd = textarea.selectionEnd;\n const textEnd = $(child).val().length;\n const beforeSelection = $(child).val().substring(0, caretStart);\n const afterSelection = $(child).val().substring(caretEnd, textEnd);\n $(child).val(beforeSelection + formattedText + afterSelection);\n textarea.setSelectionRange(caretStart + formattedText.length, caretEnd + formattedText.length);\n textarea.style.height = `${textarea.scrollHeight}px`;\n formTextarea.get(0).dispatchEvent(new Event('input'));\n return formTextarea.trigger('input');\n };\n\n addFileToForm = (path) => {\n $(form).append(``);\n };\n\n getFilename = (e) => {\n let value;\n if (window.clipboardData && window.clipboardData.getData) {\n value = window.clipboardData.getData('Text');\n } else if (e.clipboardData && e.clipboardData.getData) {\n value = e.clipboardData.getData('text/plain');\n }\n value = value.split('\\r');\n return value[0];\n };\n\n const showSpinner = () => $uploadingProgressContainer.removeClass('hide');\n\n const closeSpinner = () => $uploadingProgressContainer.addClass('hide');\n\n const showError = (message) => {\n $uploadingErrorContainer.removeClass('hide');\n $uploadingErrorMessage.html(message);\n };\n\n const closeAlertMessage = () => form.find('.div-dropzone-alert').alert('close');\n\n const insertToTextArea = (filename, url) => {\n const $child = $(child);\n $child.val((index, val) => val.replace(`{{${filename}}}`, url));\n\n $child.trigger('change');\n };\n\n uploadFile = (item, filename) => {\n const formData = new FormData();\n formData.append('file', item, filename);\n\n showSpinner();\n closeAlertMessage();\n\n axios.post(uploadsPath, formData)\n .then(({ data }) => {\n const md = data.link.markdown;\n\n insertToTextArea(filename, md);\n closeSpinner();\n })\n .catch((e) => {\n showError(e.response.data.message);\n closeSpinner();\n });\n };\n\n updateAttachingMessage = (files, messageContainer) => {\n let attachingMessage;\n const filesCount = files.filter(file => file.status === 'uploading' || file.status === 'queued').length;\n\n // Dinamycally change uploading files text depending on files number in\n // dropzone files queue.\n if (filesCount > 1) {\n attachingMessage = `Attaching ${filesCount} files -`;\n } else {\n attachingMessage = 'Attaching a file -';\n }\n\n messageContainer.text(attachingMessage);\n };\n\n form.find('.markdown-selector').click(function onMarkdownClick(e) {\n e.preventDefault();\n $(this).closest('.gfm-form').find('.div-dropzone').click();\n formTextarea.focus();\n });\n}\n\n\n\n// WEBPACK FOOTER //\n// ./dropzone_input.js","/* global dateFormat */\n\nimport Pikaday from 'pikaday';\nimport axios from './lib/utils/axios_utils';\nimport { parsePikadayDate, pikadayToString } from './lib/utils/datefix';\n\nclass DueDateSelect {\n constructor({ $dropdown, $loading } = {}) {\n const $dropdownParent = $dropdown.closest('.dropdown');\n const $block = $dropdown.closest('.block');\n this.$loading = $loading;\n this.$dropdown = $dropdown;\n this.$dropdownParent = $dropdownParent;\n this.$datePicker = $dropdownParent.find('.js-due-date-calendar');\n this.$block = $block;\n this.$selectbox = $dropdown.closest('.selectbox');\n this.$value = $block.find('.value');\n this.$valueContent = $block.find('.value-content');\n this.$sidebarValue = $('.js-due-date-sidebar-value', $block);\n this.fieldName = $dropdown.data('field-name');\n this.abilityName = $dropdown.data('ability-name');\n this.issueUpdateURL = $dropdown.data('issue-update');\n\n this.rawSelectedDate = null;\n this.displayedDate = null;\n this.datePayload = null;\n\n this.initGlDropdown();\n this.initRemoveDueDate();\n this.initDatePicker();\n }\n\n initGlDropdown() {\n this.$dropdown.glDropdown({\n opened: () => {\n const calendar = this.$datePicker.data('pikaday');\n calendar.show();\n },\n hidden: () => {\n this.$selectbox.hide();\n this.$value.css('display', '');\n },\n });\n }\n\n initDatePicker() {\n const $dueDateInput = $(`input[name='${this.fieldName}']`);\n const calendar = new Pikaday({\n field: $dueDateInput.get(0),\n theme: 'gitlab-theme',\n format: 'yyyy-mm-dd',\n parse: dateString => parsePikadayDate(dateString),\n toString: date => pikadayToString(date),\n onSelect: (dateText) => {\n $dueDateInput.val(calendar.toString(dateText));\n\n if (this.$dropdown.hasClass('js-issue-boards-due-date')) {\n gl.issueBoards.BoardsStore.detail.issue.dueDate = $dueDateInput.val();\n this.updateIssueBoardIssue();\n } else {\n this.saveDueDate(true);\n }\n },\n });\n\n calendar.setDate(parsePikadayDate($dueDateInput.val()));\n this.$datePicker.append(calendar.el);\n this.$datePicker.data('pikaday', calendar);\n }\n\n initRemoveDueDate() {\n this.$block.on('click', '.js-remove-due-date', (e) => {\n const calendar = this.$datePicker.data('pikaday');\n e.preventDefault();\n\n calendar.setDate(null);\n\n if (this.$dropdown.hasClass('js-issue-boards-due-date')) {\n gl.issueBoards.BoardsStore.detail.issue.dueDate = '';\n this.updateIssueBoardIssue();\n } else {\n $(`input[name='${this.fieldName}']`).val('');\n this.saveDueDate(false);\n }\n });\n }\n\n saveDueDate(isDropdown) {\n this.parseSelectedDate();\n this.prepSelectedDate();\n this.submitSelectedDate(isDropdown);\n }\n\n parseSelectedDate() {\n this.rawSelectedDate = $(`input[name='${this.fieldName}']`).val();\n\n if (this.rawSelectedDate.length) {\n // Construct Date object manually to avoid buggy dateString support within Date constructor\n const dateArray = this.rawSelectedDate.split('-').map(v => parseInt(v, 10));\n const dateObj = new Date(dateArray[0], dateArray[1] - 1, dateArray[2]);\n this.displayedDate = dateFormat(dateObj, 'mmm d, yyyy');\n } else {\n this.displayedDate = 'No due date';\n }\n }\n\n prepSelectedDate() {\n const datePayload = {};\n datePayload[this.abilityName] = {};\n datePayload[this.abilityName].due_date = this.rawSelectedDate;\n this.datePayload = datePayload;\n }\n\n updateIssueBoardIssue() {\n this.$loading.fadeIn();\n this.$dropdown.trigger('loading.gl.dropdown');\n this.$selectbox.hide();\n this.$value.css('display', '');\n const fadeOutLoader = () => {\n this.$loading.fadeOut();\n };\n\n gl.issueBoards.BoardsStore.detail.issue.update(this.$dropdown.attr('data-issue-update'))\n .then(fadeOutLoader)\n .catch(fadeOutLoader);\n }\n\n submitSelectedDate(isDropdown) {\n const selectedDateValue = this.datePayload[this.abilityName].due_date;\n const displayedDateStyle = this.displayedDate !== 'No due date' ? 'bold' : 'no-value';\n\n this.$loading.removeClass('hidden').fadeIn();\n\n if (isDropdown) {\n this.$dropdown.trigger('loading.gl.dropdown');\n this.$selectbox.hide();\n }\n\n this.$value.css('display', '');\n this.$valueContent.html(`${this.displayedDate}`);\n this.$sidebarValue.html(this.displayedDate);\n\n $('.js-remove-due-date-holder').toggleClass('hidden', selectedDateValue.length);\n\n return axios.put(this.issueUpdateURL, this.datePayload)\n .then(() => {\n if (isDropdown) {\n this.$dropdown.trigger('loaded.gl.dropdown');\n this.$dropdown.dropdown('toggle');\n }\n return this.$loading.fadeOut();\n });\n }\n}\n\nexport default class DueDateSelectors {\n constructor() {\n this.initMilestoneDatePicker();\n this.initIssuableSelect();\n }\n // eslint-disable-next-line class-methods-use-this\n initMilestoneDatePicker() {\n $('.datepicker').each(function initPikadayMilestone() {\n const $datePicker = $(this);\n const calendar = new Pikaday({\n field: $datePicker.get(0),\n theme: 'gitlab-theme animate-picker',\n format: 'yyyy-mm-dd',\n container: $datePicker.parent().get(0),\n parse: dateString => parsePikadayDate(dateString),\n toString: date => pikadayToString(date),\n onSelect(dateText) {\n $datePicker.val(calendar.toString(dateText));\n },\n });\n\n calendar.setDate(parsePikadayDate($datePicker.val()));\n\n $datePicker.data('pikaday', calendar);\n });\n\n $('.js-clear-due-date,.js-clear-start-date').on('click', (e) => {\n e.preventDefault();\n const calendar = $(e.target).siblings('.datepicker').data('pikaday');\n calendar.setDate(null);\n });\n }\n // eslint-disable-next-line class-methods-use-this\n initIssuableSelect() {\n const $loading = $('.js-issuable-update .due_date').find('.block-loading').hide();\n\n $('.js-due-date-select').each((i, dropdown) => {\n const $dropdown = $(dropdown);\n // eslint-disable-next-line no-new\n new DueDateSelect({\n $dropdown,\n $loading,\n });\n });\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./due_date_select.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","/* Developer beware! Do not add logic to showButton or hideButton\n * that will force a reflow. Doing so will create a signficant performance\n * bottleneck for pages with large diffs. For a comprehensive list of what\n * causes reflows, visit https://gist.github.com/paulirish/5d52fb081b3570c81e3a\n */\n\nimport Cookies from 'js-cookie';\n\nconst LINE_NUMBER_CLASS = 'diff-line-num';\nconst UNFOLDABLE_LINE_CLASS = 'js-unfold';\nconst NO_COMMENT_CLASS = 'no-comment-btn';\nconst EMPTY_CELL_CLASS = 'empty-cell';\nconst OLD_LINE_CLASS = 'old_line';\nconst LINE_COLUMN_CLASSES = `.${LINE_NUMBER_CLASS}, .line_content`;\nconst DIFF_CONTAINER_SELECTOR = '.files';\nconst DIFF_EXPANDED_CLASS = 'diff-expanded';\n\nexport default {\n init($diffFile) {\n /* Caching is used only when the following members are *true*.\n * This is because there are likely to be\n * differently configured versions of diffs in the same session.\n * However if these values are true, they\n * will be true in all cases */\n\n if (!this.userCanCreateNote) {\n // data-can-create-note is an empty string when true, otherwise undefined\n this.userCanCreateNote = $diffFile.closest(DIFF_CONTAINER_SELECTOR).data('can-create-note') === '';\n }\n\n this.isParallelView = Cookies.get('diff_view') === 'parallel';\n\n if (this.userCanCreateNote) {\n $diffFile.on('mouseover', LINE_COLUMN_CLASSES, e => this.showButton(this.isParallelView, e))\n .on('mouseleave', LINE_COLUMN_CLASSES, e => this.hideButton(this.isParallelView, e));\n }\n },\n\n showButton(isParallelView, e) {\n const buttonParentElement = this.getButtonParent(e.currentTarget, isParallelView);\n\n if (!this.validateButtonParent(buttonParentElement)) return;\n\n buttonParentElement.classList.add('is-over');\n buttonParentElement.nextElementSibling.classList.add('is-over');\n },\n\n hideButton(isParallelView, e) {\n const buttonParentElement = this.getButtonParent(e.currentTarget, isParallelView);\n\n buttonParentElement.classList.remove('is-over');\n buttonParentElement.nextElementSibling.classList.remove('is-over');\n },\n\n getButtonParent(hoveredElement, isParallelView) {\n if (isParallelView) {\n if (!hoveredElement.classList.contains(LINE_NUMBER_CLASS)) {\n return hoveredElement.previousElementSibling;\n }\n } else if (!hoveredElement.classList.contains(OLD_LINE_CLASS)) {\n return hoveredElement.parentNode.querySelector(`.${OLD_LINE_CLASS}`);\n }\n return hoveredElement;\n },\n\n validateButtonParent(buttonParentElement) {\n return !buttonParentElement.classList.contains(EMPTY_CELL_CLASS) &&\n !buttonParentElement.classList.contains(UNFOLDABLE_LINE_CLASS) &&\n !buttonParentElement.classList.contains(NO_COMMENT_CLASS) &&\n !buttonParentElement.parentNode.classList.contains(DIFF_EXPANDED_CLASS);\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./files_comment_button.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';\n\nclass 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 = gl.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 = gl.DropdownUtils.getSearchQuery(input);\n const { lastToken, tokens } =\n gl.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 gl.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 gl.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 } = gl.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\nwindow.gl = window.gl || {};\ngl.DropdownUtils = DropdownUtils;\n\n\n\n// WEBPACK FOOTER //\n// ./filtered_search/dropdown_utils.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('is-link')) {\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;\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 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 value = this.options.id ? this.options.id(data) : data.id;\n fieldName = this.options.fieldName;\n\n if (value) {\n value = value.toString().replace(/'/g, '\\\\\\'');\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","/* global autosize */\n\nimport GfmAutoComplete from './gfm_auto_complete';\nimport dropzoneInput from './dropzone_input';\nimport textUtils from './lib/utils/text_markdown';\n\nexport default class GLForm {\n constructor(form, enableGFM = false) {\n this.form = form;\n this.textarea = this.form.find('textarea.js-gfm-input');\n this.enableGFM = enableGFM;\n // Before we start, we should clean up any previous data for this form\n this.destroy();\n // Setup the form\n this.setupForm();\n this.form.data('gl-form', this);\n }\n\n destroy() {\n // Clean form listeners\n this.clearEventListeners();\n if (this.autoComplete) {\n this.autoComplete.destroy();\n }\n this.form.data('gl-form', null);\n }\n\n setupForm() {\n const isNewForm = this.form.is(':not(.gfm-form)');\n this.form.removeClass('js-new-note-form');\n if (isNewForm) {\n this.form.find('.div-dropzone').remove();\n this.form.addClass('gfm-form');\n // remove notify commit author checkbox for non-commit notes\n gl.utils.disableButtonIfEmptyField(this.form.find('.js-note-text'), this.form.find('.js-comment-button, .js-note-new-discussion'));\n this.autoComplete = new GfmAutoComplete(gl.GfmAutoComplete && gl.GfmAutoComplete.dataSources);\n this.autoComplete.setup(this.form.find('.js-gfm-input'), {\n emojis: true,\n members: this.enableGFM,\n issues: this.enableGFM,\n milestones: this.enableGFM,\n mergeRequests: this.enableGFM,\n labels: this.enableGFM,\n });\n dropzoneInput(this.form);\n autosize(this.textarea);\n }\n // form and textarea event listeners\n this.addEventListeners();\n textUtils.init(this.form);\n // hide discard button\n this.form.find('.js-note-discard').hide();\n this.form.show();\n if (this.isAutosizeable) this.setupAutosize();\n }\n\n setupAutosize() {\n this.textarea.off('autosize:resized')\n .on('autosize:resized', this.setHeightData.bind(this));\n\n this.textarea.off('mouseup.autosize')\n .on('mouseup.autosize', this.destroyAutosize.bind(this));\n\n setTimeout(() => {\n autosize(this.textarea);\n this.textarea.css('resize', 'vertical');\n }, 0);\n }\n\n setHeightData() {\n this.textarea.data('height', this.textarea.outerHeight());\n }\n\n destroyAutosize() {\n const outerHeight = this.textarea.outerHeight();\n\n if (this.textarea.data('height') === outerHeight) return;\n\n autosize.destroy(this.textarea);\n\n this.textarea.data('height', outerHeight);\n this.textarea.outerHeight(outerHeight);\n this.textarea.css('max-height', window.outerHeight);\n }\n\n clearEventListeners() {\n this.textarea.off('focus');\n this.textarea.off('blur');\n textUtils.removeListeners(this.form);\n }\n\n addEventListeners() {\n this.textarea.on('focus', function focusTextArea() {\n $(this).closest('.md-area').addClass('is-focused');\n });\n this.textarea.on('blur', function blurTextArea() {\n $(this).closest('.md-area').removeClass('is-focused');\n });\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./gl_form.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 CloseReopenReportToggle from '../close_reopen_report_toggle';\n\nfunction initCloseReopenReport() {\n const container = document.querySelector('.js-issuable-close-dropdown');\n\n if (!container) return undefined;\n\n const dropdownTrigger = container.querySelector('.js-issuable-close-toggle');\n const dropdownList = container.querySelector('.js-issuable-close-menu');\n const button = container.querySelector('.js-issuable-close-button');\n\n const closeReopenReportToggle = new CloseReopenReportToggle({\n dropdownTrigger,\n dropdownList,\n button,\n });\n\n closeReopenReportToggle.initDroplab();\n\n return closeReopenReportToggle;\n}\n\nconst IssuablesHelper = {\n initCloseReopenReport,\n};\n\nexport default IssuablesHelper;\n\n\n\n// WEBPACK FOOTER //\n// ./helpers/issuables_helper.js","import DropLab from './droplab/drop_lab';\nimport ISetter from './droplab/plugins/input_setter';\n\n// Todo: Remove this when fixing issue in input_setter plugin\nconst InputSetter = Object.assign({}, ISetter);\n\nclass CloseReopenReportToggle {\n constructor(opts = {}) {\n this.dropdownTrigger = opts.dropdownTrigger;\n this.dropdownList = opts.dropdownList;\n this.button = opts.button;\n }\n\n initDroplab() {\n this.reopenItem = this.dropdownList.querySelector('.reopen-item');\n this.closeItem = this.dropdownList.querySelector('.close-item');\n\n this.droplab = new DropLab();\n\n const config = this.setConfig();\n\n this.droplab.init(this.dropdownTrigger, this.dropdownList, [InputSetter], config);\n }\n\n updateButton(isClosed) {\n this.toggleButtonType(isClosed);\n\n this.button.blur();\n }\n\n toggleButtonType(isClosed) {\n const [showItem, hideItem] = this.getButtonTypes(isClosed);\n\n showItem.classList.remove('hidden');\n showItem.classList.add('droplab-item-selected');\n\n hideItem.classList.add('hidden');\n hideItem.classList.remove('droplab-item-selected');\n\n showItem.click();\n }\n\n getButtonTypes(isClosed) {\n return isClosed ? [this.reopenItem, this.closeItem] : [this.closeItem, this.reopenItem];\n }\n\n setDisable(shouldDisable = true) {\n if (shouldDisable) {\n this.button.setAttribute('disabled', 'true');\n this.dropdownTrigger.setAttribute('disabled', 'true');\n } else {\n this.button.removeAttribute('disabled');\n this.dropdownTrigger.removeAttribute('disabled');\n }\n }\n\n setConfig() {\n const config = {\n InputSetter: [\n {\n input: this.button,\n valueAttribute: 'data-text',\n inputAttribute: 'data-value',\n },\n {\n input: this.button,\n valueAttribute: 'data-text',\n inputAttribute: 'title',\n },\n {\n input: this.button,\n valueAttribute: 'data-button-class',\n inputAttribute: 'class',\n },\n {\n input: this.dropdownTrigger,\n valueAttribute: 'data-toggle-class',\n inputAttribute: 'class',\n },\n {\n input: this.button,\n valueAttribute: 'data-url',\n inputAttribute: 'href',\n },\n {\n input: this.button,\n valueAttribute: 'data-method',\n inputAttribute: 'data-method',\n },\n ],\n };\n\n return config;\n }\n}\n\nexport default CloseReopenReportToggle;\n\n\n\n// WEBPACK FOOTER //\n// ./close_reopen_report_toggle.js","export function createImageBadge(noteId, { x, y }, classNames = []) {\n const buttonEl = document.createElement('button');\n const classList = classNames.concat(['js-image-badge']);\n classList.forEach(className => buttonEl.classList.add(className));\n buttonEl.setAttribute('type', 'button');\n buttonEl.setAttribute('disabled', true);\n buttonEl.dataset.noteId = noteId;\n buttonEl.style.left = `${x}px`;\n buttonEl.style.top = `${y}px`;\n\n return buttonEl;\n}\n\nexport function addImageBadge(containerEl, { coordinate, badgeText, noteId }) {\n const buttonEl = createImageBadge(noteId, coordinate, ['badge']);\n buttonEl.innerText = badgeText;\n\n containerEl.appendChild(buttonEl);\n}\n\nexport function addImageCommentBadge(containerEl, { coordinate, noteId }) {\n const buttonEl = createImageBadge(noteId, coordinate, ['image-comment-badge']);\n buttonEl.innerHTML = gl.utils.spriteIcon('image-comment-dark');\n\n containerEl.appendChild(buttonEl);\n}\n\nexport function addAvatarBadge(el, event) {\n const { noteId, badgeNumber } = event.detail;\n\n // Add badge to new comment\n const avatarBadgeEl = el.querySelector(`#${noteId} .badge`);\n avatarBadgeEl.innerText = badgeNumber;\n avatarBadgeEl.classList.remove('hidden');\n}\n\n\n\n// WEBPACK FOOTER //\n// ./image_diff/helpers/badge_helper.js","export function addCommentIndicator(containerEl, { x, y }) {\n const buttonEl = document.createElement('button');\n buttonEl.classList.add('btn-transparent');\n buttonEl.classList.add('comment-indicator');\n buttonEl.setAttribute('type', 'button');\n buttonEl.style.left = `${x}px`;\n buttonEl.style.top = `${y}px`;\n\n buttonEl.innerHTML = gl.utils.spriteIcon('image-comment-dark');\n\n containerEl.appendChild(buttonEl);\n}\n\nexport function removeCommentIndicator(imageFrameEl) {\n const commentIndicatorEl = imageFrameEl.querySelector('.comment-indicator');\n const imageEl = imageFrameEl.querySelector('img');\n const willRemove = !!commentIndicatorEl;\n let meta = {};\n\n if (willRemove) {\n meta = {\n x: parseInt(commentIndicatorEl.style.left, 10),\n y: parseInt(commentIndicatorEl.style.top, 10),\n image: {\n width: imageEl.width,\n height: imageEl.height,\n },\n };\n\n commentIndicatorEl.remove();\n }\n\n return Object.assign({}, meta, {\n removed: willRemove,\n });\n}\n\nexport function showCommentIndicator(imageFrameEl, coordinate) {\n const { x, y } = coordinate;\n const commentIndicatorEl = imageFrameEl.querySelector('.comment-indicator');\n\n if (commentIndicatorEl) {\n commentIndicatorEl.style.left = `${x}px`;\n commentIndicatorEl.style.top = `${y}px`;\n } else {\n addCommentIndicator(imageFrameEl, coordinate);\n }\n}\n\nexport function commentIndicatorOnClick(event) {\n // Prevent from triggering onAddImageDiffNote in notes.js\n event.stopPropagation();\n\n const buttonEl = event.currentTarget;\n const diffViewerEl = buttonEl.closest('.diff-viewer');\n const textareaEl = diffViewerEl.querySelector('.note-container .note-textarea');\n textareaEl.focus();\n}\n\n\n\n// WEBPACK FOOTER //\n// ./image_diff/helpers/comment_indicator_helper.js","export function setPositionDataAttribute(el, options) {\n // Update position data attribute so that the\n // new comment form can use this data for ajax request\n const { x, y, width, height } = options;\n const position = el.dataset.position;\n const positionObject = Object.assign({}, JSON.parse(position), {\n x,\n y,\n width,\n height,\n });\n\n el.setAttribute('data-position', JSON.stringify(positionObject));\n}\n\nexport function updateDiscussionAvatarBadgeNumber(discussionEl, newBadgeNumber) {\n const avatarBadgeEl = discussionEl.querySelector('.image-diff-avatar-link .badge');\n avatarBadgeEl.innerText = newBadgeNumber;\n}\n\nexport function updateDiscussionBadgeNumber(discussionEl, newBadgeNumber) {\n const discussionBadgeEl = discussionEl.querySelector('.badge');\n discussionBadgeEl.innerText = newBadgeNumber;\n}\n\nexport function toggleCollapsed(event) {\n const toggleButtonEl = event.currentTarget;\n const discussionNotesEl = toggleButtonEl.closest('.discussion-notes');\n const formEl = discussionNotesEl.querySelector('.discussion-form');\n const isCollapsed = discussionNotesEl.classList.contains('collapsed');\n\n if (isCollapsed) {\n discussionNotesEl.classList.remove('collapsed');\n } else {\n discussionNotesEl.classList.add('collapsed');\n }\n\n // Override the inline display style set in notes.js\n if (formEl && !isCollapsed) {\n formEl.style.display = 'none';\n } else if (formEl && isCollapsed) {\n formEl.style.display = 'block';\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./image_diff/helpers/dom_helper.js","export const viewTypes = {\n TWO_UP: 'TWO_UP',\n SWIPE: 'SWIPE',\n ONION_SKIN: 'ONION_SKIN',\n};\n\nexport function isValidViewType(validate) {\n return !!Object.getOwnPropertyNames(viewTypes).find(viewType => viewType === validate);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./image_diff/view_types.js","import ImageBadge from '../image_badge';\nimport ImageDiff from '../image_diff';\nimport ReplacedImageDiff from '../replaced_image_diff';\nimport ImageFile from '../../commit/image_file';\n\nexport function resizeCoordinatesToImageElement(imageEl, meta) {\n const { x, y, width, height } = meta;\n\n const imageWidth = imageEl.width;\n const imageHeight = imageEl.height;\n\n const widthRatio = imageWidth / width;\n const heightRatio = imageHeight / height;\n\n return {\n x: Math.round(x * widthRatio),\n y: Math.round(y * heightRatio),\n width: imageWidth,\n height: imageHeight,\n };\n}\n\nexport function generateBadgeFromDiscussionDOM(imageFrameEl, discussionEl) {\n const position = JSON.parse(discussionEl.dataset.position);\n const firstNoteEl = discussionEl.querySelector('.note');\n const badge = new ImageBadge({\n actual: position,\n imageEl: imageFrameEl.querySelector('img'),\n noteId: firstNoteEl.id,\n discussionId: discussionEl.dataset.discussionId,\n });\n\n return badge;\n}\n\nexport function getTargetSelection(event) {\n const containerEl = event.currentTarget;\n const imageEl = containerEl.querySelector('img');\n\n const x = event.offsetX;\n const y = event.offsetY;\n\n const width = imageEl.width;\n const height = imageEl.height;\n\n const actualWidth = imageEl.naturalWidth;\n const actualHeight = imageEl.naturalHeight;\n\n const widthRatio = actualWidth / width;\n const heightRatio = actualHeight / height;\n\n // Browser will include the frame as a clickable target,\n // which would result in potential 1px out of bounds value\n // This bound the coordinates to inside the frame\n const normalizedX = Math.max(0, x) && Math.min(x, width);\n const normalizedY = Math.max(0, y) && Math.min(y, height);\n\n return {\n browser: {\n x: normalizedX,\n y: normalizedY,\n width,\n height,\n },\n actual: {\n // Round x, y so that we don't need to deal with decimals\n x: Math.round(normalizedX * widthRatio),\n y: Math.round(normalizedY * heightRatio),\n width: actualWidth,\n height: actualHeight,\n },\n };\n}\n\nexport function initImageDiff(fileEl, canCreateNote, renderCommentBadge) {\n const options = {\n canCreateNote,\n renderCommentBadge,\n };\n let diff;\n\n // ImageFile needs to be invoked before initImageDiff so that badges\n // can mount to the correct location\n new ImageFile(fileEl); // eslint-disable-line no-new\n\n if (fileEl.querySelector('.diff-file .js-single-image')) {\n diff = new ImageDiff(fileEl, options);\n diff.init();\n } else if (fileEl.querySelector('.diff-file .js-replaced-image')) {\n diff = new ReplacedImageDiff(fileEl, options);\n diff.init();\n }\n\n return diff;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./image_diff/helpers/utils_helper.js","import imageDiffHelper from './helpers/index';\nimport { viewTypes, isValidViewType } from './view_types';\nimport ImageDiff from './image_diff';\n\nexport default class ReplacedImageDiff extends ImageDiff {\n init(defaultViewType = viewTypes.TWO_UP) {\n this.imageFrameEls = {\n [viewTypes.TWO_UP]: this.el.querySelector('.two-up .js-image-frame'),\n [viewTypes.SWIPE]: this.el.querySelector('.swipe .js-image-frame'),\n [viewTypes.ONION_SKIN]: this.el.querySelector('.onion-skin .js-image-frame'),\n };\n\n const viewModesEl = this.el.querySelector('.view-modes-menu');\n this.viewModesEls = {\n [viewTypes.TWO_UP]: viewModesEl.querySelector('.two-up'),\n [viewTypes.SWIPE]: viewModesEl.querySelector('.swipe'),\n [viewTypes.ONION_SKIN]: viewModesEl.querySelector('.onion-skin'),\n };\n\n this.currentView = defaultViewType;\n this.generateImageEls();\n this.bindEvents();\n }\n\n generateImageEls() {\n this.imageEls = {};\n\n const viewTypeNames = Object.getOwnPropertyNames(viewTypes);\n viewTypeNames.forEach((viewType) => {\n this.imageEls[viewType] = this.imageFrameEls[viewType].querySelector('img');\n });\n }\n\n bindEvents() {\n super.bindEvents();\n\n this.changeToViewTwoUp = this.changeView.bind(this, viewTypes.TWO_UP);\n this.changeToViewSwipe = this.changeView.bind(this, viewTypes.SWIPE);\n this.changeToViewOnionSkin = this.changeView.bind(this, viewTypes.ONION_SKIN);\n\n this.viewModesEls[viewTypes.TWO_UP].addEventListener('click', this.changeToViewTwoUp);\n this.viewModesEls[viewTypes.SWIPE].addEventListener('click', this.changeToViewSwipe);\n this.viewModesEls[viewTypes.ONION_SKIN].addEventListener('click', this.changeToViewOnionSkin);\n }\n\n get imageEl() {\n return this.imageEls[this.currentView];\n }\n\n get imageFrameEl() {\n return this.imageFrameEls[this.currentView];\n }\n\n changeView(newView) {\n if (!isValidViewType(newView)) {\n return;\n }\n\n const indicator = imageDiffHelper.removeCommentIndicator(this.imageFrameEl);\n\n this.currentView = newView;\n\n // Clear existing badges on new view\n const existingBadges = this.imageFrameEl.querySelectorAll('.badge');\n [...existingBadges].map(badge => badge.remove());\n\n // Remove existing references to old view image badges\n this.imageBadges = [];\n\n // Image_file.js has a fade animation of 200ms for loading the view\n // Need to wait an additional 250ms for the images to be displayed\n // on window in order to re-normalize their dimensions\n setTimeout(this.renderNewView.bind(this, indicator), 250);\n }\n\n renderNewView(indicator) {\n // Generate badge coordinates on new view\n this.renderBadges();\n\n // Re-render indicator in new view\n if (indicator.removed) {\n const normalizedIndicator = imageDiffHelper\n .resizeCoordinatesToImageElement(this.imageEl, {\n x: indicator.x,\n y: indicator.y,\n width: indicator.image.width,\n height: indicator.image.height,\n });\n imageDiffHelper.showCommentIndicator(this.imageFrameEl, normalizedIndicator);\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./image_diff/replaced_image_diff.js","import * as badgeHelper from './badge_helper';\nimport * as commentIndicatorHelper from './comment_indicator_helper';\nimport * as domHelper from './dom_helper';\nimport * as utilsHelper from './utils_helper';\n\nexport default {\n addCommentIndicator: commentIndicatorHelper.addCommentIndicator,\n removeCommentIndicator: commentIndicatorHelper.removeCommentIndicator,\n showCommentIndicator: commentIndicatorHelper.showCommentIndicator,\n commentIndicatorOnClick: commentIndicatorHelper.commentIndicatorOnClick,\n\n addImageBadge: badgeHelper.addImageBadge,\n addImageCommentBadge: badgeHelper.addImageCommentBadge,\n addAvatarBadge: badgeHelper.addAvatarBadge,\n\n setPositionDataAttribute: domHelper.setPositionDataAttribute,\n updateDiscussionAvatarBadgeNumber: domHelper.updateDiscussionAvatarBadgeNumber,\n updateDiscussionBadgeNumber: domHelper.updateDiscussionBadgeNumber,\n toggleCollapsed: domHelper.toggleCollapsed,\n\n resizeCoordinatesToImageElement: utilsHelper.resizeCoordinatesToImageElement,\n generateBadgeFromDiscussionDOM: utilsHelper.generateBadgeFromDiscussionDOM,\n getTargetSelection: utilsHelper.getTargetSelection,\n initImageDiff: utilsHelper.initImageDiff,\n};\n\n\n\n// WEBPACK FOOTER //\n// ./image_diff/helpers/index.js","import imageDiffHelper from './helpers/index';\n\nconst defaultMeta = {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n};\n\nexport default class ImageBadge {\n constructor(options) {\n const { noteId, discussionId } = options;\n\n this.actual = options.actual || defaultMeta;\n this.browser = options.browser || defaultMeta;\n this.noteId = noteId;\n this.discussionId = discussionId;\n\n if (options.imageEl && !options.browser) {\n this.browser = imageDiffHelper.resizeCoordinatesToImageElement(options.imageEl, this.actual);\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./image_diff/image_badge.js","import imageDiffHelper from './helpers/index';\nimport ImageBadge from './image_badge';\nimport { isImageLoaded } from '../lib/utils/image_utility';\n\nexport default class ImageDiff {\n constructor(el, options) {\n this.el = el;\n this.canCreateNote = !!(options && options.canCreateNote);\n this.renderCommentBadge = !!(options && options.renderCommentBadge);\n this.$noteContainer = $('.note-container', this.el);\n this.imageBadges = [];\n }\n\n init() {\n this.imageFrameEl = this.el.querySelector('.diff-file .js-image-frame');\n this.imageEl = this.imageFrameEl.querySelector('img');\n\n this.bindEvents();\n }\n\n bindEvents() {\n this.imageClickedWrapper = this.imageClicked.bind(this);\n this.imageBlurredWrapper = imageDiffHelper.removeCommentIndicator.bind(null, this.imageFrameEl);\n this.addBadgeWrapper = this.addBadge.bind(this);\n this.removeBadgeWrapper = this.removeBadge.bind(this);\n this.renderBadgesWrapper = this.renderBadges.bind(this);\n\n // Render badges\n if (isImageLoaded(this.imageEl)) {\n this.renderBadges();\n } else {\n this.imageEl.addEventListener('load', this.renderBadgesWrapper);\n }\n\n // jquery makes the event delegation here much simpler\n this.$noteContainer.on('click', '.js-diff-notes-toggle', imageDiffHelper.toggleCollapsed);\n $(this.el).on('click', '.comment-indicator', imageDiffHelper.commentIndicatorOnClick);\n\n if (this.canCreateNote) {\n this.el.addEventListener('click.imageDiff', this.imageClickedWrapper);\n this.el.addEventListener('blur.imageDiff', this.imageBlurredWrapper);\n this.el.addEventListener('addBadge.imageDiff', this.addBadgeWrapper);\n this.el.addEventListener('removeBadge.imageDiff', this.removeBadgeWrapper);\n }\n }\n\n imageClicked(event) {\n const customEvent = event.detail;\n const selection = imageDiffHelper.getTargetSelection(customEvent);\n const el = customEvent.currentTarget;\n\n imageDiffHelper.setPositionDataAttribute(el, selection.actual);\n imageDiffHelper.showCommentIndicator(this.imageFrameEl, selection.browser);\n }\n\n renderBadges() {\n const discussionsEls = this.el.querySelectorAll('.note-container .discussion-notes .notes');\n [...discussionsEls].forEach(this.renderBadge.bind(this));\n }\n\n renderBadge(discussionEl, index) {\n const imageBadge = imageDiffHelper\n .generateBadgeFromDiscussionDOM(this.imageFrameEl, discussionEl);\n\n this.imageBadges.push(imageBadge);\n\n const options = {\n coordinate: imageBadge.browser,\n noteId: imageBadge.noteId,\n };\n\n if (this.renderCommentBadge) {\n imageDiffHelper.addImageCommentBadge(this.imageFrameEl, options);\n } else {\n const numberBadgeOptions = Object.assign({}, options, {\n badgeText: index + 1,\n });\n\n imageDiffHelper.addImageBadge(this.imageFrameEl, numberBadgeOptions);\n }\n }\n\n addBadge(event) {\n const { x, y, width, height, noteId, discussionId } = event.detail;\n const badgeText = this.imageBadges.length + 1;\n const imageBadge = new ImageBadge({\n actual: {\n x,\n y,\n width,\n height,\n },\n imageEl: this.imageFrameEl.querySelector('img'),\n noteId,\n discussionId,\n });\n\n this.imageBadges.push(imageBadge);\n\n imageDiffHelper.addImageBadge(this.imageFrameEl, {\n coordinate: imageBadge.browser,\n badgeText,\n noteId,\n });\n\n imageDiffHelper.addAvatarBadge(this.el, {\n detail: {\n noteId,\n badgeNumber: badgeText,\n },\n });\n\n const discussionEl = this.el.querySelector(`#discussion_${discussionId}`);\n imageDiffHelper.updateDiscussionBadgeNumber(discussionEl, badgeText);\n }\n\n removeBadge(event) {\n const { badgeNumber } = event.detail;\n const indexToRemove = badgeNumber - 1;\n const imageBadgeEls = this.imageFrameEl.querySelectorAll('.badge');\n\n if (this.imageBadges.length !== badgeNumber) {\n // Cascade badges count numbers for (avatar badges + image badges)\n this.imageBadges.forEach((badge, index) => {\n if (index > indexToRemove) {\n const { discussionId } = badge;\n const updatedBadgeNumber = index;\n const discussionEl = this.el.querySelector(`#discussion_${discussionId}`);\n\n imageBadgeEls[index].innerText = updatedBadgeNumber;\n\n imageDiffHelper.updateDiscussionBadgeNumber(discussionEl, updatedBadgeNumber);\n imageDiffHelper.updateDiscussionAvatarBadgeNumber(discussionEl, updatedBadgeNumber);\n }\n });\n }\n\n this.imageBadges.splice(indexToRemove, 1);\n\n const imageBadgeEl = imageBadgeEls[indexToRemove];\n imageBadgeEl.remove();\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./image_diff/image_diff.js","import imageDiffHelper from './helpers/index';\n\nexport default () => {\n // Always pass can-create-note as false because a user\n // cannot place new badge markers on discussion tab\n const canCreateNote = false;\n const renderCommentBadge = true;\n\n const diffFileEls = document.querySelectorAll('.timeline-content .diff-file.js-image-file');\n [...diffFileEls].forEach(diffFileEl =>\n imageDiffHelper.initImageDiff(diffFileEl, canCreateNote, renderCommentBadge));\n};\n\n\n\n// WEBPACK FOOTER //\n// ./image_diff/init_discussion_tab.js","class ImporterStatus {\n constructor(jobsUrl, importUrl) {\n this.jobsUrl = jobsUrl;\n this.importUrl = importUrl;\n this.initStatusPage();\n this.setAutoUpdate();\n }\n\n initStatusPage() {\n $('.js-add-to-import')\n .off('click')\n .on('click', (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 $.post(this.importUrl, {\n repo_id: id,\n target_namespace: targetNamespace,\n new_name: newName,\n }, {\n dataType: 'script',\n });\n });\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 setAutoUpdate() {\n return setInterval(() => $.get(this.jobsUrl, data => $.each(data, (i, 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 default:\n statusField.html(job.import_status);\n break;\n }\n })), 4000);\n }\n}\n\n// eslint-disable-next-line consistent-return\nexport default function initImporterStatus() {\n const importerStatus = document.querySelector('.js-importer-status');\n\n if (importerStatus) {\n const data = importerStatus.dataset;\n return new ImporterStatus(data.jobsImportPath, data.importPath);\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./importer_status.js","import stickyMonitor from './lib/utils/sticky';\n\nexport default (stickyTop) => {\n stickyMonitor(document.querySelector('.js-diff-files-changed'), stickyTop);\n\n $('.js-diff-stats-dropdown').glDropdown({\n filterable: true,\n remoteFilter: false,\n });\n};\n\n\n\n// WEBPACK FOOTER //\n// ./init_changes_dropdown.js","/* eslint-disable no-new */\n\nimport MilestoneSelect from './milestone_select';\nimport LabelsSelect from './labels_select';\nimport IssuableContext from './issuable_context';\nimport Sidebar from './right_sidebar';\n\nimport DueDateSelectors from './due_date_select';\n\nexport default () => {\n const sidebarOptions = JSON.parse(document.querySelector('.js-sidebar-options').innerHTML);\n\n new MilestoneSelect({\n full_path: sidebarOptions.fullPath,\n });\n new LabelsSelect();\n new IssuableContext(sidebarOptions.currentUser);\n new DueDateSelectors();\n Sidebar.initialize();\n};\n\n\n\n// WEBPACK FOOTER //\n// ./init_issuable_sidebar.js","import Notes from './notes';\n\nexport default () => {\n const dataEl = document.querySelector('.js-notes-data');\n const {\n notesUrl,\n notesIds,\n now,\n diffView,\n autocomplete,\n } = JSON.parse(dataEl.innerHTML);\n\n // Create a singleton so that we don't need to assign\n // into the window object, we can just access the current isntance with Notes.instance\n Notes.initialize(notesUrl, notesIds, now, diffView, autocomplete);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./init_notes.js","/* eslint-disable comma-dangle, quotes, consistent-return, func-names, array-callback-return, space-before-function-paren, prefer-arrow-callback, max-len, no-unused-expressions, no-sequences, no-underscore-dangle, no-unused-vars, no-param-reassign */\nimport _ from 'underscore';\nimport axios from './lib/utils/axios_utils';\nimport Flash from './flash';\n\nexport default {\n init({ container, form, issues, prefixId } = {}) {\n this.prefixId = prefixId || 'issue_';\n this.form = form || this.getElement('.bulk-update');\n this.$labelDropdown = this.form.find('.js-label-select');\n this.issues = issues || this.getElement('.issues-list .issue');\n this.willUpdateLabels = false;\n this.bindEvents();\n },\n\n bindEvents() {\n return this.form.off('submit').on('submit', this.onFormSubmit.bind(this));\n },\n\n onFormSubmit(e) {\n e.preventDefault();\n return this.submit();\n },\n\n submit() {\n axios[this.form.attr('method')](this.form.attr('action'), this.getFormDataAsObject())\n .then(() => window.location.reload())\n .catch(() => this.onFormSubmitFailure());\n },\n\n onFormSubmitFailure() {\n this.form.find('[type=\"submit\"]').enable();\n return new Flash(\"Issue update failed\");\n },\n\n getSelectedIssues() {\n return this.issues.has('.selected_issue:checked');\n },\n\n getLabelsFromSelection() {\n const labels = [];\n this.getSelectedIssues().map(function() {\n const labelsData = $(this).data('labels');\n if (labelsData) {\n return labelsData.map(function(labelId) {\n if (labels.indexOf(labelId) === -1) {\n return labels.push(labelId);\n }\n });\n }\n });\n return labels;\n },\n\n /**\n * Will return only labels that were marked previously and the user has unmarked\n * @return {Array} Label IDs\n */\n\n getUnmarkedIndeterminedLabels() {\n const result = [];\n const labelsToKeep = this.$labelDropdown.data('indeterminate');\n\n this.getLabelsFromSelection().forEach((id) => {\n if (labelsToKeep.indexOf(id) === -1) {\n result.push(id);\n }\n });\n\n return result;\n },\n\n /**\n * Simple form serialization, it will return just what we need\n * Returns key/value pairs from form data\n */\n\n getFormDataAsObject() {\n const formData = {\n update: {\n state_event: this.form.find('input[name=\"update[state_event]\"]').val(),\n // For Merge Requests\n assignee_id: this.form.find('input[name=\"update[assignee_id]\"]').val(),\n // For Issues\n assignee_ids: [this.form.find('input[name=\"update[assignee_ids][]\"]').val()],\n milestone_id: this.form.find('input[name=\"update[milestone_id]\"]').val(),\n issuable_ids: this.form.find('input[name=\"update[issuable_ids]\"]').val(),\n subscription_event: this.form.find('input[name=\"update[subscription_event]\"]').val(),\n add_label_ids: [],\n remove_label_ids: []\n }\n };\n if (this.willUpdateLabels) {\n formData.update.add_label_ids = this.$labelDropdown.data('marked');\n formData.update.remove_label_ids = this.$labelDropdown.data('unmarked');\n }\n return formData;\n },\n\n setOriginalDropdownData() {\n const $labelSelect = $('.bulk-update .js-label-select');\n $labelSelect.data('common', this.getOriginalCommonIds());\n $labelSelect.data('marked', this.getOriginalMarkedIds());\n $labelSelect.data('indeterminate', this.getOriginalIndeterminateIds());\n },\n\n // From issuable's initial bulk selection\n getOriginalCommonIds() {\n const labelIds = [];\n\n this.getElement('.selected_issue:checked').each((i, el) => {\n labelIds.push(this.getElement(`#${this.prefixId}${el.dataset.id}`).data('labels'));\n });\n return _.intersection.apply(this, labelIds);\n },\n\n // From issuable's initial bulk selection\n getOriginalMarkedIds() {\n const labelIds = [];\n this.getElement('.selected_issue:checked').each((i, el) => {\n labelIds.push(this.getElement(`#${this.prefixId}${el.dataset.id}`).data('labels'));\n });\n return _.intersection.apply(this, labelIds);\n },\n\n // From issuable's initial bulk selection\n getOriginalIndeterminateIds() {\n const uniqueIds = [];\n const labelIds = [];\n let issuableLabels = [];\n\n // Collect unique label IDs for all checked issues\n this.getElement('.selected_issue:checked').each((i, el) => {\n issuableLabels = this.getElement(`#${this.prefixId}${el.dataset.id}`).data('labels');\n issuableLabels.forEach((labelId) => {\n // Store unique IDs\n if (uniqueIds.indexOf(labelId) === -1) {\n uniqueIds.push(labelId);\n }\n });\n // Store array of IDs per issuable\n labelIds.push(issuableLabels);\n });\n // Add uniqueIds to add it as argument for _.intersection\n labelIds.unshift(uniqueIds);\n // Return IDs that are present but not in all selected issueables\n return _.difference(uniqueIds, _.intersection.apply(this, labelIds));\n },\n\n getElement(selector) {\n this.scopeEl = this.scopeEl || $('.content');\n return this.scopeEl.find(selector);\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./issuable_bulk_update_actions.js","import Cookies from 'js-cookie';\nimport bp from './breakpoints';\nimport UsersSelect from './users_select';\n\nexport default class IssuableContext {\n constructor(currentUser) {\n this.userSelect = new UsersSelect(currentUser);\n\n $('select.select2').select2({\n width: 'resolve',\n dropdownAutoWidth: true,\n });\n\n $('.issuable-sidebar .inline-update').on('change', 'select', function onClickSelect() {\n return $(this).submit();\n });\n $('.issuable-sidebar .inline-update').on('change', '.js-assignee', function onClickAssignee() {\n return $(this).submit();\n });\n $(document)\n .off('click', '.issuable-sidebar .dropdown-content a')\n .on('click', '.issuable-sidebar .dropdown-content a', e => e.preventDefault());\n\n $(document)\n .off('click', '.edit-link')\n .on('click', '.edit-link', function onClickEdit(e) {\n e.preventDefault();\n const $block = $(this).parents('.block');\n const $selectbox = $block.find('.selectbox');\n if ($selectbox.is(':visible')) {\n $selectbox.hide();\n $block.find('.value').show();\n } else {\n $selectbox.show();\n $block.find('.value').hide();\n }\n\n if ($selectbox.is(':visible')) {\n setTimeout(() => $block.find('.dropdown-menu-toggle').trigger('click'), 0);\n }\n });\n\n window.addEventListener('beforeunload', () => {\n // collapsed_gutter cookie hides the sidebar\n const bpBreakpoint = bp.getBreakpointSize();\n if (bpBreakpoint === 'xs' || bpBreakpoint === 'sm') {\n Cookies.set('collapsed_gutter', true);\n }\n });\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./issuable_context.js","/* eslint-disable no-useless-return, func-names, space-before-function-paren, wrap-iife, no-var, no-underscore-dangle, prefer-arrow-callback, max-len, one-var, no-unused-vars, one-var-declaration-per-line, prefer-template, no-new, consistent-return, object-shorthand, comma-dangle, no-shadow, no-param-reassign, brace-style, vars-on-top, quotes, no-lonely-if, no-else-return, dot-notation, no-empty, no-return-assign, camelcase, prefer-spread */\n/* global Issuable */\n/* global ListLabel */\nimport _ from 'underscore';\nimport { __ } from './locale';\nimport axios from './lib/utils/axios_utils';\nimport IssuableBulkUpdateActions from './issuable_bulk_update_actions';\nimport DropdownUtils from './filtered_search/dropdown_utils';\nimport CreateLabelDropdown from './create_label';\nimport flash from './flash';\n\nexport default class LabelsSelect {\n constructor(els, options = {}) {\n var _this, $els;\n _this = this;\n\n $els = $(els);\n\n if (!els) {\n $els = $('.js-label-select');\n }\n\n $els.each(function(i, dropdown) {\n var $block, $colorPreview, $dropdown, $form, $loading, $selectbox, $sidebarCollapsedValue, $value, abilityName, defaultLabel, enableLabelCreateButton, issueURLSplit, issueUpdateURL, labelHTMLTemplate, labelNoneHTMLTemplate, labelUrl, namespacePath, projectPath, saveLabelData, selectedLabel, showAny, showNo, $sidebarLabelTooltip, initialSelected, $toggleText, fieldName, useId, propertyName, showMenuAbove, $container, $dropdownContainer;\n $dropdown = $(dropdown);\n $dropdownContainer = $dropdown.closest('.labels-filter');\n $toggleText = $dropdown.find('.dropdown-toggle-text');\n namespacePath = $dropdown.data('namespace-path');\n projectPath = $dropdown.data('project-path');\n labelUrl = $dropdown.data('labels');\n issueUpdateURL = $dropdown.data('issueUpdate');\n selectedLabel = $dropdown.data('selected');\n if ((selectedLabel != null) && !$dropdown.hasClass('js-multiselect')) {\n selectedLabel = selectedLabel.split(',');\n }\n showNo = $dropdown.data('show-no');\n showAny = $dropdown.data('show-any');\n showMenuAbove = $dropdown.data('showMenuAbove');\n defaultLabel = $dropdown.data('default-label');\n abilityName = $dropdown.data('ability-name');\n $selectbox = $dropdown.closest('.selectbox');\n $block = $selectbox.closest('.block');\n $form = $dropdown.closest('form, .js-issuable-update');\n $sidebarCollapsedValue = $block.find('.sidebar-collapsed-icon span');\n $sidebarLabelTooltip = $block.find('.js-sidebar-labels-tooltip');\n $value = $block.find('.value');\n $loading = $block.find('.block-loading').fadeOut();\n fieldName = $dropdown.data('field-name');\n useId = $dropdown.is('.js-issuable-form-dropdown, .js-filter-bulk-update, .js-label-sidebar-dropdown');\n propertyName = useId ? 'id' : 'title';\n initialSelected = $selectbox\n .find('input[name=\"' + $dropdown.data('field-name') + '\"]')\n .map(function () {\n return this.value;\n }).get();\n if (issueUpdateURL != null) {\n issueURLSplit = issueUpdateURL.split('/');\n }\n if (issueUpdateURL) {\n labelHTMLTemplate = _.template('<% _.each(labels, function(label){ %> issues?label_name[]=<%- encodeURIComponent(label.title) %>\"> \" style=\"background-color: <%- label.color %>; color: <%- label.text_color %>;\"> <%- label.title %> <% }); %>');\n labelNoneHTMLTemplate = '';\n }\n const handleClick = options.handleClick;\n\n $sidebarLabelTooltip.tooltip();\n\n if ($dropdown.closest('.dropdown').find('.dropdown-new-label').length) {\n new CreateLabelDropdown($dropdown.closest('.dropdown').find('.dropdown-new-label'), namespacePath, projectPath);\n }\n\n saveLabelData = function() {\n var data, selected;\n selected = $dropdown.closest('.selectbox').find(\"input[name='\" + fieldName + \"']\").map(function() {\n return this.value;\n }).get();\n\n if (_.isEqual(initialSelected, selected)) return;\n initialSelected = selected;\n\n data = {};\n data[abilityName] = {};\n data[abilityName].label_ids = selected;\n if (!selected.length) {\n data[abilityName].label_ids = [''];\n }\n $loading.removeClass('hidden').fadeIn();\n $dropdown.trigger('loading.gl.dropdown');\n axios.put(issueUpdateURL, data)\n .then(({ data }) => {\n var labelCount, template, labelTooltipTitle, labelTitles;\n $loading.fadeOut();\n $dropdown.trigger('loaded.gl.dropdown');\n $selectbox.hide();\n data.issueURLSplit = issueURLSplit;\n labelCount = 0;\n if (data.labels.length) {\n template = labelHTMLTemplate(data);\n labelCount = data.labels.length;\n }\n else {\n template = labelNoneHTMLTemplate;\n }\n $value.removeAttr('style').html(template);\n $sidebarCollapsedValue.text(labelCount);\n\n if (data.labels.length) {\n labelTitles = data.labels.map(function(label) {\n return label.title;\n });\n\n if (labelTitles.length > 5) {\n labelTitles = labelTitles.slice(0, 5);\n labelTitles.push('and ' + (data.labels.length - 5) + ' more');\n }\n\n labelTooltipTitle = labelTitles.join(', ');\n }\n else {\n labelTooltipTitle = '';\n $sidebarLabelTooltip.tooltip('destroy');\n }\n\n $sidebarLabelTooltip\n .attr('title', labelTooltipTitle)\n .tooltip('fixTitle');\n\n $('.has-tooltip', $value).tooltip({\n container: 'body'\n });\n })\n .catch(() => flash(__('Error saving label update.')));\n };\n $dropdown.glDropdown({\n showMenuAbove: showMenuAbove,\n data: function(term, callback) {\n axios.get(labelUrl)\n .then((res) => {\n let data = _.chain(res.data).groupBy(function(label) {\n return label.title;\n }).map(function(label) {\n var color;\n color = _.map(label, function(dup) {\n return dup.color;\n });\n return {\n id: label[0].id,\n title: label[0].title,\n color: color,\n duplicate: color.length > 1\n };\n }).value();\n if ($dropdown.hasClass('js-extra-options')) {\n var extraData = [];\n if (showNo) {\n extraData.unshift({\n id: 0,\n title: '没有标记'\n });\n }\n if (showAny) {\n extraData.unshift({\n isAny: true,\n title: '所有标记'\n });\n }\n if (extraData.length) {\n extraData.push('divider');\n data = extraData.concat(data);\n }\n }\n\n callback(data);\n if (showMenuAbove) {\n $dropdown.data('glDropdown').positionMenuAbove();\n }\n })\n .catch(() => flash(__('Error fetching labels.')));\n },\n renderRow: function(label, instance) {\n var $a, $li, color, colorEl, indeterminate, removesAll, selectedClass, spacing, i, marked, dropdownName, dropdownValue;\n $li = $('
    • ');\n $a = $('');\n selectedClass = [];\n removesAll = label.id <= 0 || (label.id == null);\n if ($dropdown.hasClass('js-filter-bulk-update')) {\n indeterminate = $dropdown.data('indeterminate') || [];\n marked = $dropdown.data('marked') || [];\n\n if (indeterminate.indexOf(label.id) !== -1) {\n selectedClass.push('is-indeterminate');\n }\n\n if (marked.indexOf(label.id) !== -1) {\n // Remove is-indeterminate class if the item will be marked as active\n i = selectedClass.indexOf('is-indeterminate');\n if (i !== -1) {\n selectedClass.splice(i, 1);\n }\n selectedClass.push('is-active');\n }\n } else {\n if (this.id(label)) {\n dropdownName = $dropdown.data('fieldName');\n dropdownValue = this.id(label).toString().replace(/'/g, '\\\\\\'');\n\n if ($form.find(\"input[type='hidden'][name='\" + dropdownName + \"'][value='\" + dropdownValue + \"']\").length) {\n selectedClass.push('is-active');\n }\n }\n\n if ($dropdown.hasClass('js-multiselect') && removesAll) {\n selectedClass.push('dropdown-clear-active');\n }\n }\n if (label.duplicate) {\n color = gl.DropdownUtils.duplicateLabelColor(label.color);\n }\n else {\n if (label.color != null) {\n color = label.color[0];\n }\n }\n if (color) {\n colorEl = \"\";\n }\n else {\n colorEl = '';\n }\n // We need to identify which items are actually labels\n if (label.id) {\n selectedClass.push('label-item');\n $a.attr('data-label-id', label.id);\n }\n $a.addClass(selectedClass.join(' ')).html(`${colorEl} ${_.escape(label.title)}`);\n // Return generated html\n return $li.html($a).prop('outerHTML');\n },\n search: {\n fields: ['title']\n },\n selectable: true,\n filterable: true,\n selected: $dropdown.data('selected') || [],\n toggleLabel: function(selected, el) {\n var isSelected = el !== null ? el.hasClass('is-active') : false;\n var title = selected.title;\n var selectedLabels = this.selected;\n\n if (selected.id === 0) {\n this.selected = [];\n return '无标记';\n }\n else if (isSelected) {\n this.selected.push(title);\n }\n else {\n var index = this.selected.indexOf(title);\n this.selected.splice(index, 1);\n }\n\n if (selectedLabels.length === 1) {\n return selectedLabels;\n }\n else if (selectedLabels.length) {\n return selectedLabels[0] + \" +\" + (selectedLabels.length - 1) + \" more\";\n }\n else {\n return defaultLabel;\n }\n },\n fieldName: $dropdown.data('field-name'),\n id: function(label) {\n if (label.id <= 0) return label.title;\n\n if ($dropdown.hasClass('js-issuable-form-dropdown')) {\n return label.id;\n }\n\n if ($dropdown.hasClass(\"js-filter-submit\") && (label.isAny == null)) {\n return label.title;\n }\n else {\n return label.id;\n }\n },\n hidden: function() {\n var isIssueIndex, isMRIndex, page, selectedLabels;\n page = $('body').attr('data-page');\n isIssueIndex = page === 'projects:issues:index';\n isMRIndex = page === 'projects:merge_requests:index';\n $selectbox.hide();\n // display:block overrides the hide-collapse rule\n $value.removeAttr('style');\n\n if ($dropdown.hasClass('js-issuable-form-dropdown')) {\n return;\n }\n\n if ($('html').hasClass('issue-boards-page')) {\n return;\n }\n if ($dropdown.hasClass('js-multiselect')) {\n if ($dropdown.hasClass('js-filter-submit') && (isIssueIndex || isMRIndex)) {\n selectedLabels = $dropdown.closest('form').find(\"input:hidden[name='\" + ($dropdown.data('fieldName')) + \"']\");\n Issuable.filterResults($dropdown.closest('form'));\n }\n else if ($dropdown.hasClass('js-filter-submit')) {\n $dropdown.closest('form').submit();\n }\n else {\n if (!$dropdown.hasClass('js-filter-bulk-update')) {\n saveLabelData();\n }\n }\n }\n },\n multiSelect: $dropdown.hasClass('js-multiselect'),\n vue: $dropdown.hasClass('js-issue-board-sidebar'),\n clicked: function(options) {\n const { $el, e, isMarking } = options;\n const label = options.selectedObj;\n\n var isIssueIndex, isMRIndex, page, boardsModel;\n var fadeOutLoader = () => {\n $loading.fadeOut();\n };\n\n page = $('body').attr('data-page');\n isIssueIndex = page === 'projects:issues:index';\n isMRIndex = page === 'projects:merge_requests:index';\n\n if ($dropdown.parent().find('.is-active:not(.dropdown-clear-active)').length) {\n $dropdown.parent()\n .find('.dropdown-clear-active')\n .removeClass('is-active');\n }\n\n if ($dropdown.hasClass('js-issuable-form-dropdown')) {\n return;\n }\n\n if ($dropdown.hasClass('js-filter-bulk-update')) {\n _this.enableBulkLabelDropdown();\n _this.setDropdownData($dropdown, isMarking, label.id);\n return;\n }\n\n if ($dropdown.closest('.add-issues-modal').length) {\n boardsModel = gl.issueBoards.ModalStore.store.filter;\n }\n\n if (boardsModel) {\n if (label.isAny) {\n boardsModel['label_name'] = [];\n } else if ($el.hasClass('is-active')) {\n boardsModel['label_name'].push(label.title);\n }\n\n e.preventDefault();\n return;\n }\n else if ($dropdown.hasClass('js-filter-submit') && (isIssueIndex || isMRIndex)) {\n if (!$dropdown.hasClass('js-multiselect')) {\n selectedLabel = label.title;\n return Issuable.filterResults($dropdown.closest('form'));\n }\n }\n else if ($dropdown.hasClass('js-filter-submit')) {\n return $dropdown.closest('form').submit();\n }\n else if ($dropdown.hasClass('js-issue-board-sidebar')) {\n if ($el.hasClass('is-active')) {\n gl.issueBoards.BoardsStore.detail.issue.labels.push(new ListLabel({\n id: label.id,\n title: label.title,\n color: label.color[0],\n textColor: '#fff'\n }));\n }\n else {\n var labels = gl.issueBoards.BoardsStore.detail.issue.labels;\n labels = labels.filter(function (selectedLabel) {\n return selectedLabel.id !== label.id;\n });\n gl.issueBoards.BoardsStore.detail.issue.labels = labels;\n }\n\n $loading.fadeIn();\n\n gl.issueBoards.BoardsStore.detail.issue.update($dropdown.attr('data-issue-update'))\n .then(fadeOutLoader)\n .catch(fadeOutLoader);\n }\n else if (handleClick) {\n e.preventDefault();\n handleClick(label);\n }\n else {\n if ($dropdown.hasClass('js-multiselect')) {\n\n }\n else {\n return saveLabelData();\n }\n }\n },\n });\n\n // Set dropdown data\n _this.setOriginalDropdownData($dropdownContainer, $dropdown);\n });\n this.bindEvents();\n }\n\n bindEvents() {\n return $('body').on('change', '.selected_issue', this.onSelectCheckboxIssue);\n }\n // eslint-disable-next-line class-methods-use-this\n onSelectCheckboxIssue() {\n if ($('.selected_issue:checked').length) {\n return;\n }\n return $('.issues-bulk-update .labels-filter .dropdown-toggle-text').text('Label');\n }\n // eslint-disable-next-line class-methods-use-this\n enableBulkLabelDropdown() {\n IssuableBulkUpdateActions.willUpdateLabels = true;\n }\n // eslint-disable-next-line class-methods-use-this\n setDropdownData($dropdown, isMarking, value) {\n var i, markedIds, unmarkedIds, indeterminateIds;\n\n markedIds = $dropdown.data('marked') || [];\n unmarkedIds = $dropdown.data('unmarked') || [];\n indeterminateIds = $dropdown.data('indeterminate') || [];\n\n if (isMarking) {\n markedIds.push(value);\n\n i = indeterminateIds.indexOf(value);\n if (i > -1) {\n indeterminateIds.splice(i, 1);\n }\n\n i = unmarkedIds.indexOf(value);\n if (i > -1) {\n unmarkedIds.splice(i, 1);\n }\n } else {\n // If marked item (not common) is unmarked\n i = markedIds.indexOf(value);\n if (i > -1) {\n markedIds.splice(i, 1);\n }\n\n // If an indeterminate item is being unmarked\n if (IssuableBulkUpdateActions.getOriginalIndeterminateIds().indexOf(value) > -1) {\n unmarkedIds.push(value);\n }\n\n // If a marked item is being unmarked\n // (a marked item could also be a label that is present in all selection)\n if (IssuableBulkUpdateActions.getOriginalCommonIds().indexOf(value) > -1) {\n unmarkedIds.push(value);\n }\n }\n\n $dropdown.data('marked', markedIds);\n $dropdown.data('unmarked', unmarkedIds);\n $dropdown.data('indeterminate', indeterminateIds);\n }\n // eslint-disable-next-line class-methods-use-this\n setOriginalDropdownData($container, $dropdown) {\n const labels = [];\n $container.find('[name=\"label_name[]\"]').map(function() {\n return labels.push(this.value);\n });\n $dropdown.data('marked', labels);\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./labels_select.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', $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 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 isInIssuePage = () => {\n const page = getPagePath(1);\n const action = getPagePath(2);\n\n return page === 'issues' && action === 'show';\n};\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 = ($el) => {\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\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\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","\nexport const pad = (val, len = 2) => (`0${val}`).slice(-len);\n\n/**\n * Formats dates in Pickaday\n * @param {String} dateString Date in yyyy-mm-dd format\n * @return {Date} UTC format\n */\nexport const parsePikadayDate = (dateString) => {\n const parts = dateString.split('-');\n const year = parseInt(parts[0], 10);\n const month = parseInt(parts[1] - 1, 10);\n const day = parseInt(parts[2], 10);\n\n return new Date(year, month, day);\n};\n\n/**\n * Used `onSelect` method in pickaday\n * @param {Date} date UTC format\n * @return {String} Date formated in yyyy-mm-dd\n */\nexport const pikadayToString = (date) => {\n const day = pad(date.getDate());\n const month = pad(date.getMonth() + 1);\n const year = date.getFullYear();\n\n return `${year}-${month}-${day}`;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./lib/utils/datefix.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 function isImageLoaded(element) {\n return element.complete && element.naturalHeight !== 0;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./lib/utils/image_utility.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","export const createPlaceholder = () => {\n const placeholder = document.createElement('div');\n placeholder.classList.add('sticky-placeholder');\n\n return placeholder;\n};\n\nexport const isSticky = (el, scrollY, stickyTop, insertPlaceholder) => {\n const top = Math.floor(el.offsetTop - scrollY);\n\n if (top <= stickyTop && !el.classList.contains('is-stuck')) {\n const placeholder = insertPlaceholder ? createPlaceholder() : null;\n const heightBefore = el.offsetHeight;\n\n el.classList.add('is-stuck');\n\n if (insertPlaceholder) {\n el.parentNode.insertBefore(placeholder, el.nextElementSibling);\n\n placeholder.style.height = `${heightBefore - el.offsetHeight}px`;\n }\n } else if (top > stickyTop && el.classList.contains('is-stuck')) {\n el.classList.remove('is-stuck');\n\n if (insertPlaceholder && el.nextElementSibling && el.nextElementSibling.classList.contains('sticky-placeholder')) {\n el.nextElementSibling.remove();\n }\n }\n};\n\nexport default (el, stickyTop, insertPlaceholder = true) => {\n if (!el) return;\n\n if (typeof CSS === 'undefined' || !(CSS.supports('(position: -webkit-sticky) or (position: sticky)'))) return;\n\n document.addEventListener('scroll', () => isSticky(el, window.scrollY, stickyTop, insertPlaceholder), {\n passive: true,\n });\n};\n\n\n\n// WEBPACK FOOTER //\n// ./lib/utils/sticky.js","/* eslint-disable import/prefer-default-export, func-names, space-before-function-paren, wrap-iife, no-var, no-param-reassign, no-cond-assign, quotes, one-var, one-var-declaration-per-line, operator-assignment, no-else-return, prefer-template, prefer-arrow-callback, no-empty, max-len, consistent-return, no-unused-vars, no-return-assign, max-len, vars-on-top */\n\nconst textUtils = {};\n\ntextUtils.selectedText = function(text, textarea) {\n return text.substring(textarea.selectionStart, textarea.selectionEnd);\n};\n\ntextUtils.lineBefore = function(text, textarea) {\n var split;\n split = text.substring(0, textarea.selectionStart).trim().split('\\n');\n return split[split.length - 1];\n};\n\ntextUtils.lineAfter = function(text, textarea) {\n return text.substring(textarea.selectionEnd).trim().split('\\n')[0];\n};\n\ntextUtils.blockTagText = function(text, textArea, blockTag, selected) {\n var lineAfter, lineBefore;\n lineBefore = this.lineBefore(text, textArea);\n lineAfter = this.lineAfter(text, textArea);\n if (lineBefore === blockTag && lineAfter === blockTag) {\n // To remove the block tag we have to select the line before & after\n if (blockTag != null) {\n textArea.selectionStart = textArea.selectionStart - (blockTag.length + 1);\n textArea.selectionEnd = textArea.selectionEnd + (blockTag.length + 1);\n }\n return selected;\n } else {\n return blockTag + \"\\n\" + selected + \"\\n\" + blockTag;\n }\n};\n\ntextUtils.insertText = function(textArea, text, tag, blockTag, selected, wrap) {\n var insertText, inserted, selectedSplit, startChar, removedLastNewLine, removedFirstNewLine, currentLineEmpty, lastNewLine;\n removedLastNewLine = false;\n removedFirstNewLine = false;\n currentLineEmpty = false;\n\n // Remove the first newline\n if (selected.indexOf('\\n') === 0) {\n removedFirstNewLine = true;\n selected = selected.replace(/\\n+/, '');\n }\n\n // Remove the last newline\n if (textArea.selectionEnd - textArea.selectionStart > selected.replace(/\\n$/, '').length) {\n removedLastNewLine = true;\n selected = selected.replace(/\\n$/, '');\n }\n\n selectedSplit = selected.split('\\n');\n\n if (!wrap) {\n lastNewLine = textArea.value.substr(0, textArea.selectionStart).lastIndexOf('\\n');\n\n // Check whether the current line is empty or consists only of spaces(=handle as empty)\n if (/^\\s*$/.test(textArea.value.substring(lastNewLine, textArea.selectionStart))) {\n currentLineEmpty = true;\n }\n }\n\n startChar = !wrap && !currentLineEmpty && textArea.selectionStart > 0 ? '\\n' : '';\n\n if (selectedSplit.length > 1 && (!wrap || (blockTag != null && blockTag !== ''))) {\n if (blockTag != null && blockTag !== '') {\n insertText = this.blockTagText(text, textArea, blockTag, selected);\n } else {\n insertText = selectedSplit.map(function(val) {\n if (val.indexOf(tag) === 0) {\n return \"\" + (val.replace(tag, ''));\n } else {\n return \"\" + tag + val;\n }\n }).join('\\n');\n }\n } else {\n insertText = \"\" + startChar + tag + selected + (wrap ? tag : ' ');\n }\n\n if (removedFirstNewLine) {\n insertText = '\\n' + insertText;\n }\n\n if (removedLastNewLine) {\n insertText += '\\n';\n }\n\n if (document.queryCommandSupported('insertText')) {\n inserted = document.execCommand('insertText', false, insertText);\n }\n if (!inserted) {\n try {\n document.execCommand(\"ms-beginUndoUnit\");\n } catch (error) {}\n textArea.value = this.replaceRange(text, textArea.selectionStart, textArea.selectionEnd, insertText);\n try {\n document.execCommand(\"ms-endUndoUnit\");\n } catch (error) {}\n }\n return this.moveCursor(textArea, tag, wrap, removedLastNewLine);\n};\n\ntextUtils.moveCursor = function(textArea, tag, wrapped, removedLastNewLine) {\n var pos;\n if (!textArea.setSelectionRange) {\n return;\n }\n if (textArea.selectionStart === textArea.selectionEnd) {\n if (wrapped) {\n pos = textArea.selectionStart - tag.length;\n } else {\n pos = textArea.selectionStart;\n }\n\n if (removedLastNewLine) {\n pos -= 1;\n }\n\n return textArea.setSelectionRange(pos, pos);\n }\n};\n\ntextUtils.updateText = function(textArea, tag, blockTag, wrap) {\n var $textArea, selected, text;\n $textArea = $(textArea);\n textArea = $textArea.get(0);\n text = $textArea.val();\n selected = this.selectedText(text, textArea);\n $textArea.focus();\n return this.insertText(textArea, text, tag, blockTag, selected, wrap);\n};\n\ntextUtils.init = function(form) {\n var self;\n self = this;\n return $('.js-md', form).off('click').on('click', function() {\n var $this;\n $this = $(this);\n return self.updateText($this.closest('.md-area').find('textarea'), $this.data('md-tag'), $this.data('md-block'), !$this.data('md-prepend'));\n });\n};\n\ntextUtils.removeListeners = function(form) {\n return $('.js-md', form).off('click');\n};\n\ntextUtils.replaceRange = function(s, start, end, substitute) {\n return s.substring(0, start) + substitute + s.substring(end);\n};\n\nexport default textUtils;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/utils/text_markdown.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\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 } 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// eslint-disable-next-line global-require, import/no-commonjs\nif (process.env.NODE_ENV !== 'production') require('./test_utils/');\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\n$(() => {\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 // Click a .js-select-on-focus field, select the contents\n // Prevent a mouseup event from deselecting the input\n $('.js-select-on-focus').on('focusin', function selectOnFocusCallback() {\n $(this).select().one('mouseup', (e) => {\n e.preventDefault();\n });\n });\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('confirm-danger-message');\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, no-var, prefer-rest-params, wrap-iife, quotes, no-underscore-dangle, one-var, one-var-declaration-per-line, consistent-return, dot-notation, quote-props, comma-dangle, object-shorthand, max-len, prefer-arrow-callback */\n\nimport 'vendor/jquery.waitforimages';\nimport { __ } from '~/locale';\nimport TaskList from './task_list';\nimport MergeRequestTabs from './merge_request_tabs';\nimport IssuablesHelper from './helpers/issuables_helper';\nimport { addDelimiter } from './lib/utils/text_utility';\n\nfunction MergeRequest(opts) {\n // Initialize MergeRequest behavior\n //\n // Options:\n // action - String, current controller action\n //\n this.opts = opts != null ? opts : {};\n this.submitNoteForm = this.submitNoteForm.bind(this);\n this.$el = $('.merge-request');\n this.$('.show-all-commits').on('click', (function(_this) {\n return function() {\n return _this.showAllCommits();\n };\n })(this));\n\n this.initTabs();\n this.initMRBtnListeners();\n this.initCommitMessageListeners();\n this.closeReopenReportToggle = IssuablesHelper.initCloseReopenReport();\n\n if ($(\"a.btn-close\").length) {\n this.taskList = new TaskList({\n dataType: 'merge_request',\n fieldName: 'description',\n selector: '.detail-page-description',\n onSuccess: (result) => {\n document.querySelector('#task_status').innerText = result.task_status;\n document.querySelector('#task_status_short').innerText = result.task_status_short;\n }\n });\n }\n}\n\n// Local jQuery finder\nMergeRequest.prototype.$ = function(selector) {\n return this.$el.find(selector);\n};\n\nMergeRequest.prototype.initTabs = function() {\n if (window.mrTabs) {\n window.mrTabs.unbindEvents();\n }\n window.mrTabs = new MergeRequestTabs(this.opts);\n};\n\nMergeRequest.prototype.showAllCommits = function() {\n this.$('.first-commits').remove();\n return this.$('.all-commits').removeClass('hide');\n};\n\nMergeRequest.prototype.initMRBtnListeners = function() {\n var _this;\n _this = this;\n return $('a.btn-close, a.btn-reopen').on('click', function(e) {\n var $this, shouldSubmit;\n $this = $(this);\n shouldSubmit = $this.hasClass('btn-comment');\n if (shouldSubmit && $this.data('submitted')) {\n return;\n }\n\n if (this.closeReopenReportToggle) this.closeReopenReportToggle.setDisable();\n\n if (shouldSubmit) {\n if ($this.hasClass('btn-comment-and-close') || $this.hasClass('btn-comment-and-reopen')) {\n e.preventDefault();\n e.stopImmediatePropagation();\n\n _this.submitNoteForm($this.closest('form'), $this);\n }\n }\n });\n};\n\nMergeRequest.prototype.submitNoteForm = function(form, $button) {\n var noteText;\n noteText = form.find(\"textarea.js-note-text\").val();\n if (noteText.trim().length > 0) {\n form.submit();\n $button.data('submitted', true);\n return $button.trigger('click');\n }\n};\n\nMergeRequest.prototype.initCommitMessageListeners = function() {\n $(document).on('click', 'a.js-with-description-link', function(e) {\n var textarea = $('textarea.js-commit-message');\n e.preventDefault();\n\n textarea.val(textarea.data('messageWithDescription'));\n $('.js-with-description-hint').hide();\n $('.js-without-description-hint').show();\n });\n\n $(document).on('click', 'a.js-without-description-link', function(e) {\n var textarea = $('textarea.js-commit-message');\n e.preventDefault();\n\n textarea.val(textarea.data('messageWithoutDescription'));\n $('.js-with-description-hint').show();\n $('.js-without-description-hint').hide();\n });\n};\n\nMergeRequest.setStatusBoxToMerged = function() {\n $('.detail-page-header .status-box')\n .removeClass('status-box-open')\n .addClass('status-box-mr-merged')\n .find('span')\n .text(__('Merged'));\n};\n\nMergeRequest.decreaseCounter = function(by = 1) {\n const $el = $('.js-merge-counter');\n const count = Math.max((parseInt($el.text().replace(/[^\\d]/, ''), 10) - by), 0);\n\n $el.text(addDelimiter(count));\n};\n\nMergeRequest.hideCloseButton = function() {\n const el = document.querySelector('.merge-request .js-issuable-actions');\n const closeDropdownItem = el.querySelector('li.close-item');\n if (closeDropdownItem) {\n closeDropdownItem.classList.add('hidden');\n // Selects the next dropdown item\n el.querySelector('li.report-item').click();\n } else {\n // No dropdown just hide the Close button\n el.querySelector('.btn-close').classList.add('hidden');\n }\n // Dropdown for mobile screen\n el.querySelector('li.js-close-item').classList.add('hidden');\n};\n\nexport default MergeRequest;\n\n\n\n// WEBPACK FOOTER //\n// ./merge_request.js","/* eslint-disable no-new, class-methods-use-this */\n\nimport Cookies from 'js-cookie';\nimport axios from './lib/utils/axios_utils';\nimport flash from './flash';\nimport BlobForkSuggestion from './blob/blob_fork_suggestion';\nimport initChangesDropdown from './init_changes_dropdown';\nimport bp from './breakpoints';\nimport {\n parseUrlPathname,\n handleLocationHash,\n isMetaClick,\n} from './lib/utils/common_utils';\nimport { getLocationHash } from './lib/utils/url_utility';\nimport initDiscussionTab from './image_diff/init_discussion_tab';\nimport Diff from './diff';\nimport { localTimeAgo } from './lib/utils/datetime_utility';\nimport syntaxHighlight from './syntax_highlight';\nimport Notes from './notes';\n\n/* eslint-disable max-len */\n// MergeRequestTabs\n//\n// Handles persisting and restoring the current tab selection and lazily-loading\n// content on the MergeRequests#show page.\n//\n// ### Example Markup\n//\n//
      \n//\n//
      \n//
      \n// Notes Content\n//
      \n//
      \n// Commits Content\n//
      \n//
      \n// Diffs Content\n//
      \n//
      \n//\n//
      \n//
      \n// Loading Animation\n//
      \n//
      \n//\n/* eslint-enable max-len */\n\n// Store the `location` object, allowing for easier stubbing in tests\nlet location = window.location;\n\nexport default class MergeRequestTabs {\n\n constructor({ action, setUrl, stubLocation } = {}) {\n const mergeRequestTabs = document.querySelector('.js-tabs-affix');\n const navbar = document.querySelector('.navbar-gitlab');\n const paddingTop = 16;\n\n this.diffsLoaded = false;\n this.pipelinesLoaded = false;\n this.commitsLoaded = false;\n this.fixedLayoutPref = null;\n\n this.setUrl = setUrl !== undefined ? setUrl : true;\n this.setCurrentAction = this.setCurrentAction.bind(this);\n this.tabShown = this.tabShown.bind(this);\n this.showTab = this.showTab.bind(this);\n this.stickyTop = navbar ? navbar.offsetHeight - paddingTop : 0;\n\n if (mergeRequestTabs) {\n this.stickyTop += mergeRequestTabs.offsetHeight;\n }\n\n if (stubLocation) {\n location = stubLocation;\n }\n\n this.bindEvents();\n this.activateTab(action);\n this.initAffix();\n }\n\n bindEvents() {\n $(document)\n .on('shown.bs.tab', '.merge-request-tabs a[data-toggle=\"tab\"]', this.tabShown)\n .on('click', '.js-show-tab', this.showTab);\n\n $('.merge-request-tabs a[data-toggle=\"tab\"]')\n .on('click', this.clickTab);\n }\n\n // Used in tests\n unbindEvents() {\n $(document)\n .off('shown.bs.tab', '.merge-request-tabs a[data-toggle=\"tab\"]', this.tabShown)\n .off('click', '.js-show-tab', this.showTab);\n\n $('.merge-request-tabs a[data-toggle=\"tab\"]')\n .off('click', this.clickTab);\n }\n\n destroyPipelinesView() {\n if (this.commitPipelinesTable) {\n this.commitPipelinesTable.$destroy();\n this.commitPipelinesTable = null;\n\n document.querySelector('#commit-pipeline-table-view').innerHTML = '';\n }\n }\n\n showTab(e) {\n e.preventDefault();\n this.activateTab($(e.target).data('action'));\n }\n\n clickTab(e) {\n if (e.currentTarget && isMetaClick(e)) {\n const targetLink = e.currentTarget.getAttribute('href');\n e.stopImmediatePropagation();\n e.preventDefault();\n window.open(targetLink, '_blank');\n }\n }\n\n tabShown(e) {\n const $target = $(e.target);\n const action = $target.data('action');\n\n if (action === 'commits') {\n this.loadCommits($target.attr('href'));\n this.expandView();\n this.resetViewContainer();\n this.destroyPipelinesView();\n } else if (this.isDiffAction(action)) {\n this.loadDiff($target.attr('href'));\n if (bp.getBreakpointSize() !== 'lg') {\n this.shrinkView();\n }\n if (this.diffViewType() === 'parallel') {\n this.expandViewContainer();\n }\n this.destroyPipelinesView();\n } else if (action === 'pipelines') {\n this.resetViewContainer();\n this.mountPipelinesView();\n } else {\n if (bp.getBreakpointSize() !== 'xs') {\n this.expandView();\n }\n this.resetViewContainer();\n this.destroyPipelinesView();\n\n initDiscussionTab();\n }\n if (this.setUrl) {\n this.setCurrentAction(action);\n }\n }\n\n scrollToElement(container) {\n if (location.hash) {\n const offset = 0 - (\n $('.navbar-gitlab').outerHeight() +\n $('.js-tabs-affix').outerHeight()\n );\n const $el = $(`${container} ${location.hash}:not(.match)`);\n if ($el.length) {\n $.scrollTo($el[0], { offset });\n }\n }\n }\n\n // Activate a tab based on the current action\n activateTab(action) {\n // important note: the .tab('show') method triggers 'shown.bs.tab' event itself\n $(`.merge-request-tabs a[data-action='${action}']`).tab('show');\n }\n\n // Replaces the current Merge Request-specific action in the URL with a new one\n //\n // If the action is \"notes\", the URL is reset to the standard\n // `MergeRequests#show` route.\n //\n // Examples:\n //\n // location.pathname # => \"/namespace/project/merge_requests/1\"\n // setCurrentAction('diffs')\n // location.pathname # => \"/namespace/project/merge_requests/1/diffs\"\n //\n // location.pathname # => \"/namespace/project/merge_requests/1/diffs\"\n // setCurrentAction('show')\n // location.pathname # => \"/namespace/project/merge_requests/1\"\n //\n // location.pathname # => \"/namespace/project/merge_requests/1/diffs\"\n // setCurrentAction('commits')\n // location.pathname # => \"/namespace/project/merge_requests/1/commits\"\n //\n // Returns the new URL String\n setCurrentAction(action) {\n this.currentAction = action;\n\n // Remove a trailing '/commits' '/diffs' '/pipelines'\n let newState = location.pathname.replace(/\\/(commits|diffs|pipelines)(\\.html)?\\/?$/, '');\n\n // Append the new action if we're on a tab other than 'notes'\n if (this.currentAction !== 'show' && this.currentAction !== 'new') {\n newState += `/${this.currentAction}`;\n }\n\n // Ensure parameters and hash come along for the ride\n newState += location.search + location.hash;\n\n // TODO: Consider refactoring in light of turbolinks removal.\n\n // Replace the current history state with the new one without breaking\n // Turbolinks' history.\n //\n // See https://github.com/rails/turbolinks/issues/363\n window.history.replaceState({\n url: newState,\n }, document.title, newState);\n\n return newState;\n }\n\n loadCommits(source) {\n if (this.commitsLoaded) {\n return;\n }\n\n this.toggleLoading(true);\n\n axios.get(`${source}.json`)\n .then(({ data }) => {\n document.querySelector('div#commits').innerHTML = data.html;\n localTimeAgo($('.js-timeago', 'div#commits'));\n this.commitsLoaded = true;\n this.scrollToElement('#commits');\n\n this.toggleLoading(false);\n })\n .catch(() => {\n this.toggleLoading(false);\n flash('An error occurred while fetching this tab.');\n });\n }\n\n mountPipelinesView() {\n const pipelineTableViewEl = document.querySelector('#commit-pipeline-table-view');\n const CommitPipelinesTable = gl.CommitPipelinesTable;\n this.commitPipelinesTable = new CommitPipelinesTable({\n propsData: {\n endpoint: pipelineTableViewEl.dataset.endpoint,\n helpPagePath: pipelineTableViewEl.dataset.helpPagePath,\n emptyStateSvgPath: pipelineTableViewEl.dataset.emptyStateSvgPath,\n errorStateSvgPath: pipelineTableViewEl.dataset.errorStateSvgPath,\n autoDevopsHelpPath: pipelineTableViewEl.dataset.helpAutoDevopsPath,\n },\n }).$mount();\n\n // $mount(el) replaces the el with the new rendered component. We need it in order to mount\n // it everytime this tab is clicked - https://vuejs.org/v2/api/#vm-mount\n pipelineTableViewEl.appendChild(this.commitPipelinesTable.$el);\n }\n\n loadDiff(source) {\n if (this.diffsLoaded) {\n document.dispatchEvent(new CustomEvent('scroll'));\n return;\n }\n\n // We extract pathname for the current Changes tab anchor href\n // some pages like MergeRequestsController#new has query parameters on that anchor\n const urlPathname = parseUrlPathname(source);\n\n this.toggleLoading(true);\n\n axios.get(`${urlPathname}.json${location.search}`)\n .then(({ data }) => {\n const $container = $('#diffs');\n $container.html(data.html);\n\n initChangesDropdown(this.stickyTop);\n\n if (typeof gl.diffNotesCompileComponents !== 'undefined') {\n gl.diffNotesCompileComponents();\n }\n\n localTimeAgo($('.js-timeago', 'div#diffs'));\n syntaxHighlight($('#diffs .js-syntax-highlight'));\n\n if (this.diffViewType() === 'parallel' && this.isDiffAction(this.currentAction)) {\n this.expandViewContainer();\n }\n this.diffsLoaded = true;\n\n new Diff();\n this.scrollToElement('#diffs');\n\n $('.diff-file').each((i, el) => {\n new BlobForkSuggestion({\n openButtons: $(el).find('.js-edit-blob-link-fork-toggler'),\n forkButtons: $(el).find('.js-fork-suggestion-button'),\n cancelButtons: $(el).find('.js-cancel-fork-suggestion-button'),\n suggestionSections: $(el).find('.js-file-fork-suggestion-section'),\n actionTextPieces: $(el).find('.js-file-fork-suggestion-section-action'),\n })\n .init();\n });\n\n // Scroll any linked note into view\n // Similar to `toggler_behavior` in the discussion tab\n const hash = getLocationHash();\n const anchor = hash && $container.find(`.note[id=\"${hash}\"]`);\n if (anchor && anchor.length > 0) {\n const notesContent = anchor.closest('.notes_content');\n const lineType = notesContent.hasClass('new') ? 'new' : 'old';\n Notes.instance.toggleDiffNote({\n target: anchor,\n lineType,\n forceShow: true,\n });\n anchor[0].scrollIntoView();\n handleLocationHash();\n // We have multiple elements on the page with `#note_xxx`\n // (discussion and diff tabs) and `:target` only applies to the first\n anchor.addClass('target');\n }\n\n this.toggleLoading(false);\n })\n .catch(() => {\n this.toggleLoading(false);\n flash('An error occurred while fetching this tab.');\n });\n }\n\n // Show or hide the loading spinner\n //\n // status - Boolean, true to show, false to hide\n toggleLoading(status) {\n $('.mr-loading-status .loading').toggle(status);\n }\n\n diffViewType() {\n return $('.inline-parallel-buttons a.active').data('view-type');\n }\n\n isDiffAction(action) {\n return action === 'diffs' || action === 'new/diffs';\n }\n\n expandViewContainer() {\n const $wrapper = $('.content-wrapper .container-fluid').not('.breadcrumbs');\n if (this.fixedLayoutPref === null) {\n this.fixedLayoutPref = $wrapper.hasClass('container-limited');\n }\n $wrapper.removeClass('container-limited');\n }\n\n resetViewContainer() {\n if (this.fixedLayoutPref !== null) {\n $('.content-wrapper .container-fluid')\n .toggleClass('container-limited', this.fixedLayoutPref);\n }\n }\n\n shrinkView() {\n const $gutterIcon = $('.js-sidebar-toggle i:visible');\n\n // Wait until listeners are set\n setTimeout(() => {\n // Only when sidebar is expanded\n if ($gutterIcon.is('.fa-angle-double-right')) {\n $gutterIcon.closest('a').trigger('click', [true]);\n }\n }, 0);\n }\n\n // Expand the issuable sidebar unless the user explicitly collapsed it\n expandView() {\n if (Cookies.get('collapsed_gutter') === 'true') {\n return;\n }\n const $gutterIcon = $('.js-sidebar-toggle i:visible');\n\n // Wait until listeners are set\n setTimeout(() => {\n // Only when sidebar is collapsed\n if ($gutterIcon.is('.fa-angle-double-left')) {\n $gutterIcon.closest('a').trigger('click', [true]);\n }\n }, 0);\n }\n\n initAffix() {\n const $tabs = $('.js-tabs-affix');\n const $fixedNav = $('.navbar-gitlab');\n\n // Screen space on small screens is usually very sparse\n // So we dont affix the tabs on these\n if (bp.getBreakpointSize() === 'xs' || !$tabs.length) return;\n\n /**\n If the browser does not support position sticky, it returns the position as static.\n If the browser does support sticky, then we allow the browser to handle it, if not\n then we default back to Bootstraps affix\n **/\n if ($tabs.css('position') !== 'static') return;\n\n const $diffTabs = $('#diff-notes-app');\n\n $tabs.off('affix.bs.affix affix-top.bs.affix')\n .affix({\n offset: {\n top: () => (\n $diffTabs.offset().top - $tabs.height() - $fixedNav.height()\n ),\n },\n })\n .on('affix.bs.affix', () => $diffTabs.css({ marginTop: $tabs.height() }))\n .on('affix-top.bs.affix', () => $diffTabs.css({ marginTop: '' }));\n\n // Fix bug when reloading the page already scrolling\n if ($tabs.hasClass('affix')) {\n $tabs.trigger('affix.bs.affix');\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./merge_request_tabs.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('project-id');\n const milestonesUrl = $dropdown.data('milestones');\n const issueUpdateURL = $dropdown.data('issueUpdate');\n const showNo = $dropdown.data('show-no');\n const showAny = $dropdown.data('show-any');\n const showMenuAbove = $dropdown.data('showMenuAbove');\n const showUpcoming = $dropdown.data('show-upcoming');\n const showStarted = $dropdown.data('show-started');\n const useId = $dropdown.data('use-id');\n const defaultLabel = $dropdown.data('default-label');\n const defaultNo = $dropdown.data('default-no');\n const issuableId = $dropdown.data('issuable-id');\n const abilityName = $dropdown.data('ability-name');\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\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('field-name'),\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('field-name')] = 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 }\n }\n });\n });\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./milestone_select.js","/* eslint-disable no-restricted-properties, func-names, space-before-function-paren,\nno-var, prefer-rest-params, wrap-iife, no-use-before-define, camelcase,\nno-unused-expressions, quotes, max-len, one-var, one-var-declaration-per-line,\ndefault-case, prefer-template, consistent-return, no-alert, no-return-assign,\nno-param-reassign, prefer-arrow-callback, no-else-return, comma-dangle, no-new,\nbrace-style, no-lonely-if, vars-on-top, no-unused-vars, no-sequences, no-shadow,\nnewline-per-chained-call, no-useless-escape, class-methods-use-this */\n\n/* global ResolveService */\n/* global mrRefreshWidgetUrl */\n\nimport $ from 'jquery';\nimport _ from 'underscore';\nimport Cookies from 'js-cookie';\nimport Autosize from 'autosize';\nimport 'vendor/jquery.caret'; // required by jquery.atwho\nimport 'vendor/jquery.atwho';\nimport AjaxCache from '~/lib/utils/ajax_cache';\nimport axios from './lib/utils/axios_utils';\nimport { getLocationHash } from './lib/utils/url_utility';\nimport Flash from './flash';\nimport CommentTypeToggle from './comment_type_toggle';\nimport GLForm from './gl_form';\nimport loadAwardsHandler from './awards_handler';\nimport Autosave from './autosave';\nimport TaskList from './task_list';\nimport { isInViewport, getPagePath, scrollToElement, isMetaKey } from './lib/utils/common_utils';\nimport imageDiffHelper from './image_diff/helpers/index';\nimport { localTimeAgo } from './lib/utils/datetime_utility';\n\nwindow.autosize = Autosize;\n\nfunction normalizeNewlines(str) {\n return str.replace(/\\r\\n/g, '\\n');\n}\n\nconst MAX_VISIBLE_COMMIT_LIST_COUNT = 3;\nconst REGEX_QUICK_ACTIONS = /^\\/\\w+.*$/gm;\n\nexport default class Notes {\n static initialize(notes_url, note_ids, last_fetched_at, view, enableGFM = true) {\n if (!this.instance) {\n this.instance = new Notes(notes_url, note_ids, last_fetched_at, view, enableGFM);\n }\n }\n\n constructor(notes_url, note_ids, last_fetched_at, view, enableGFM = true) {\n this.updateTargetButtons = this.updateTargetButtons.bind(this);\n this.updateComment = this.updateComment.bind(this);\n this.visibilityChange = this.visibilityChange.bind(this);\n this.cancelDiscussionForm = this.cancelDiscussionForm.bind(this);\n this.onAddDiffNote = this.onAddDiffNote.bind(this);\n this.onAddImageDiffNote = this.onAddImageDiffNote.bind(this);\n this.setupDiscussionNoteForm = this.setupDiscussionNoteForm.bind(this);\n this.onReplyToDiscussionNote = this.onReplyToDiscussionNote.bind(this);\n this.removeNote = this.removeNote.bind(this);\n this.cancelEdit = this.cancelEdit.bind(this);\n this.updateNote = this.updateNote.bind(this);\n this.addDiscussionNote = this.addDiscussionNote.bind(this);\n this.addNoteError = this.addNoteError.bind(this);\n this.addNote = this.addNote.bind(this);\n this.resetMainTargetForm = this.resetMainTargetForm.bind(this);\n this.refresh = this.refresh.bind(this);\n this.keydownNoteText = this.keydownNoteText.bind(this);\n this.toggleCommitList = this.toggleCommitList.bind(this);\n this.postComment = this.postComment.bind(this);\n this.clearFlashWrapper = this.clearFlash.bind(this);\n this.onHashChange = this.onHashChange.bind(this);\n\n this.notes_url = notes_url;\n this.note_ids = note_ids;\n this.enableGFM = enableGFM;\n // Used to keep track of updated notes while people are editing things\n this.updatedNotesTrackingMap = {};\n this.last_fetched_at = last_fetched_at;\n this.noteable_url = document.URL;\n this.notesCountBadge || (this.notesCountBadge = $('.issuable-details').find('.notes-tab .badge'));\n this.basePollingInterval = 15000;\n this.maxPollingSteps = 4;\n\n this.cleanBinding();\n this.addBinding();\n this.setPollingInterval();\n this.setupMainTargetNoteForm();\n this.taskList = new TaskList({\n dataType: 'note',\n fieldName: 'note',\n selector: '.notes'\n });\n this.collapseLongCommitList();\n this.setViewType(view);\n\n // We are in the Merge Requests page so we need another edit form for Changes tab\n if (getPagePath(1) === 'merge_requests') {\n $('.note-edit-form').clone()\n .addClass('mr-note-edit-form').insertAfter('.note-edit-form');\n }\n }\n\n setViewType(view) {\n this.view = Cookies.get('diff_view') || view;\n }\n\n addBinding() {\n // Edit note link\n $(document).on('click', '.js-note-edit', this.showEditForm.bind(this));\n $(document).on('click', '.note-edit-cancel', this.cancelEdit);\n // Reopen and close actions for Issue/MR combined with note form submit\n $(document).on('click', '.js-comment-submit-button', this.postComment);\n $(document).on('click', '.js-comment-save-button', this.updateComment);\n $(document).on('keyup input', '.js-note-text', this.updateTargetButtons);\n // resolve a discussion\n $(document).on('click', '.js-comment-resolve-button', this.postComment);\n // remove a note (in general)\n $(document).on('click', '.js-note-delete', this.removeNote);\n // delete note attachment\n $(document).on('click', '.js-note-attachment-delete', this.removeAttachment);\n // reset main target form when clicking discard\n $(document).on('click', '.js-note-discard', this.resetMainTargetForm);\n // update the file name when an attachment is selected\n $(document).on('change', '.js-note-attachment-input', this.updateFormAttachment);\n // reply to diff/discussion notes\n $(document).on('click', '.js-discussion-reply-button', this.onReplyToDiscussionNote);\n // add diff note\n $(document).on('click', '.js-add-diff-note-button', this.onAddDiffNote);\n // add diff note for images\n $(document).on('click', '.js-add-image-diff-note-button', this.onAddImageDiffNote);\n // hide diff note form\n $(document).on('click', '.js-close-discussion-note-form', this.cancelDiscussionForm);\n // toggle commit list\n $(document).on('click', '.system-note-commit-list-toggler', this.toggleCommitList);\n // fetch notes when tab becomes visible\n $(document).on('visibilitychange', this.visibilityChange);\n // when issue status changes, we need to refresh data\n $(document).on('issuable:change', this.refresh);\n // ajax:events that happen on Form when actions like Reopen, Close are performed on Issues and MRs.\n $(document).on('ajax:success', '.js-main-target-form', this.addNote);\n $(document).on('ajax:success', '.js-discussion-note-form', this.addDiscussionNote);\n $(document).on('ajax:success', '.js-main-target-form', this.resetMainTargetForm);\n $(document).on('ajax:complete', '.js-main-target-form', this.reenableTargetFormSubmitButton);\n // when a key is clicked on the notes\n $(document).on('keydown', '.js-note-text', this.keydownNoteText);\n // When the URL fragment/hash has changed, `#note_xxx`\n return $(window).on('hashchange', this.onHashChange);\n }\n\n cleanBinding() {\n $(document).off('click', '.js-note-edit');\n $(document).off('click', '.note-edit-cancel');\n $(document).off('click', '.js-note-delete');\n $(document).off('click', '.js-note-attachment-delete');\n $(document).off('click', '.js-discussion-reply-button');\n $(document).off('click', '.js-add-diff-note-button');\n $(document).off('click', '.js-add-image-diff-note-button');\n $(document).off('visibilitychange');\n $(document).off('keyup input', '.js-note-text');\n $(document).off('click', '.js-note-target-reopen');\n $(document).off('click', '.js-note-target-close');\n $(document).off('click', '.js-note-discard');\n $(document).off('keydown', '.js-note-text');\n $(document).off('click', '.js-comment-resolve-button');\n $(document).off('click', '.system-note-commit-list-toggler');\n $(document).off('ajax:success', '.js-main-target-form');\n $(document).off('ajax:success', '.js-discussion-note-form');\n $(document).off('ajax:complete', '.js-main-target-form');\n $(window).off('hashchange', this.onHashChange);\n }\n\n static initCommentTypeToggle(form) {\n const dropdownTrigger = form.querySelector('.js-comment-type-dropdown .dropdown-toggle');\n const dropdownList = form.querySelector('.js-comment-type-dropdown .dropdown-menu');\n const noteTypeInput = form.querySelector('#note_type');\n const submitButton = form.querySelector('.js-comment-type-dropdown .js-comment-submit-button');\n const closeButton = form.querySelector('.js-note-target-close');\n const reopenButton = form.querySelector('.js-note-target-reopen');\n\n const commentTypeToggle = new CommentTypeToggle({\n dropdownTrigger,\n dropdownList,\n noteTypeInput,\n submitButton,\n closeButton,\n reopenButton,\n });\n\n commentTypeToggle.initDroplab();\n }\n\n keydownNoteText(e) {\n var $textarea, discussionNoteForm, editNote, myLastNote, myLastNoteEditBtn, newText, originalText;\n if (isMetaKey(e)) {\n return;\n }\n\n $textarea = $(e.target);\n // Edit previous note when UP arrow is hit\n switch (e.which) {\n case 38:\n if ($textarea.val() !== '') {\n return;\n }\n myLastNote = $(`li.note[data-author-id='${gon.current_user_id}'][data-editable]:last`, $textarea.closest('.note, .notes_holder, #notes'));\n if (myLastNote.length) {\n myLastNoteEditBtn = myLastNote.find('.js-note-edit');\n return myLastNoteEditBtn.trigger('click', [true, myLastNote]);\n }\n break;\n // Cancel creating diff note or editing any note when ESCAPE is hit\n case 27:\n discussionNoteForm = $textarea.closest('.js-discussion-note-form');\n if (discussionNoteForm.length) {\n if ($textarea.val() !== '') {\n if (!confirm('您确定要取消发表评论?')) {\n return;\n }\n }\n this.removeDiscussionNoteForm(discussionNoteForm);\n return;\n }\n editNote = $textarea.closest('.note');\n if (editNote.length) {\n originalText = $textarea.closest('form').data('original-note');\n newText = $textarea.val();\n if (originalText !== newText) {\n if (!confirm('您确定要取消编辑评论?')) {\n return;\n }\n }\n return this.removeNoteEditForm(editNote);\n }\n }\n }\n\n initRefresh() {\n if (Notes.interval) {\n clearInterval(Notes.interval);\n }\n return Notes.interval = setInterval((function(_this) {\n return function() {\n return _this.refresh();\n };\n })(this), this.pollingInterval);\n }\n\n refresh() {\n if (!document.hidden) {\n return this.getContent();\n }\n }\n\n getContent() {\n if (this.refreshing) {\n return;\n }\n this.refreshing = true;\n axios.get(this.notes_url, {\n headers: {\n 'X-Last-Fetched-At': this.last_fetched_at,\n },\n }).then(({ data }) => {\n const notes = data.notes;\n this.last_fetched_at = data.last_fetched_at;\n this.setPollingInterval(data.notes.length);\n $.each(notes, (i, note) => this.renderNote(note));\n\n this.refreshing = false;\n }).catch(() => {\n this.refreshing = false;\n });\n }\n\n /**\n * Increase @pollingInterval up to 120 seconds on every function call,\n * if `shouldReset` has a truthy value, 'null' or 'undefined' the variable\n * will reset to @basePollingInterval.\n *\n * Note: this function is used to gradually increase the polling interval\n * if there aren't new notes coming from the server\n */\n setPollingInterval(shouldReset) {\n var nthInterval;\n if (shouldReset == null) {\n shouldReset = true;\n }\n nthInterval = this.basePollingInterval * Math.pow(2, this.maxPollingSteps - 1);\n if (shouldReset) {\n this.pollingInterval = this.basePollingInterval;\n } else if (this.pollingInterval < nthInterval) {\n this.pollingInterval *= 2;\n }\n return this.initRefresh();\n }\n\n handleQuickActions(noteEntity) {\n var votesBlock;\n if (noteEntity.commands_changes) {\n if ('merge' in noteEntity.commands_changes) {\n Notes.checkMergeRequestStatus();\n }\n\n if ('emoji_award' in noteEntity.commands_changes) {\n votesBlock = $('.js-awards-block').eq(0);\n\n loadAwardsHandler().then((awardsHandler) => {\n awardsHandler.addAwardToEmojiBar(votesBlock, noteEntity.commands_changes.emoji_award);\n awardsHandler.scrollToAwards();\n }).catch(() => {\n // ignore\n });\n }\n }\n }\n\n setupNewNote($note) {\n // Update datetime format on the recent note\n localTimeAgo($note.find('.js-timeago'), false);\n\n this.collapseLongCommitList();\n this.taskList.init();\n\n // This stops the note highlight, #note_xxx`, from being removed after real time update\n // The `:target` selector does not re-evaluate after we replace element in the DOM\n Notes.updateNoteTargetSelector($note);\n this.$noteToCleanHighlight = $note;\n }\n\n onHashChange() {\n if (this.$noteToCleanHighlight) {\n Notes.updateNoteTargetSelector(this.$noteToCleanHighlight);\n }\n\n this.$noteToCleanHighlight = null;\n }\n\n static updateNoteTargetSelector($note) {\n const hash = getLocationHash();\n // Needs to be an explicit true/false for the jQuery `toggleClass(force)`\n const addTargetClass = Boolean(hash && $note.filter(`#${hash}`).length > 0);\n $note.toggleClass('target', addTargetClass);\n }\n\n /**\n * Render note in main comments area.\n *\n * Note: for rendering inline notes use renderDiscussionNote\n */\n renderNote(noteEntity, $form, $notesList = $('.main-notes-list')) {\n if (noteEntity.discussion_html) {\n return this.renderDiscussionNote(noteEntity, $form);\n }\n\n if (!noteEntity.valid) {\n if (noteEntity.errors.commands_only) {\n if (noteEntity.commands_changes &&\n Object.keys(noteEntity.commands_changes).length > 0) {\n $notesList.find('.system-note.being-posted').remove();\n }\n this.addFlash(noteEntity.errors.commands_only, 'notice', this.parentTimeline.get(0));\n this.refresh();\n }\n return;\n }\n\n const $note = $notesList.find(`#note_${noteEntity.id}`);\n if (Notes.isNewNote(noteEntity, this.note_ids)) {\n this.note_ids.push(noteEntity.id);\n\n if ($notesList.length) {\n $notesList.find('.system-note.being-posted').remove();\n }\n const $newNote = Notes.animateAppendNote(noteEntity.html, $notesList);\n\n this.setupNewNote($newNote);\n this.refresh();\n return this.updateNotesCount(1);\n }\n // The server can send the same update multiple times so we need to make sure to only update once per actual update.\n else if (Notes.isUpdatedNote(noteEntity, $note)) {\n const isEditing = $note.hasClass('is-editing');\n const initialContent = normalizeNewlines(\n $note.find('.original-note-content').text().trim()\n );\n const $textarea = $note.find('.js-note-text');\n const currentContent = $textarea.val();\n // There can be CRLF vs LF mismatches if we don't sanitize and compare the same way\n const sanitizedNoteNote = normalizeNewlines(noteEntity.note);\n const isTextareaUntouched = currentContent === initialContent || currentContent === sanitizedNoteNote;\n\n if (isEditing && isTextareaUntouched) {\n $textarea.val(noteEntity.note);\n this.updatedNotesTrackingMap[noteEntity.id] = noteEntity;\n }\n else if (isEditing && !isTextareaUntouched) {\n this.putConflictEditWarningInPlace(noteEntity, $note);\n this.updatedNotesTrackingMap[noteEntity.id] = noteEntity;\n }\n else {\n const $updatedNote = Notes.animateUpdateNote(noteEntity.html, $note);\n this.setupNewNote($updatedNote);\n }\n }\n }\n\n isParallelView() {\n return Cookies.get('diff_view') === 'parallel';\n }\n\n /**\n * Render note in discussion area.\n *\n * Note: for rendering inline notes use renderDiscussionNote\n */\n renderDiscussionNote(noteEntity, $form) {\n var discussionContainer, form, row, lineType, diffAvatarContainer;\n if (!Notes.isNewNote(noteEntity, this.note_ids)) {\n return;\n }\n this.note_ids.push(noteEntity.id);\n\n form = $form || $(`.js-discussion-note-form[data-discussion-id=\"${noteEntity.discussion_id}\"]`);\n row = (form.length || !noteEntity.discussion_line_code) ? form.closest('tr') : $(`#${noteEntity.discussion_line_code}`);\n\n if (noteEntity.on_image) {\n row = form;\n }\n\n lineType = this.isParallelView() ? form.find('#line_type').val() : 'old';\n diffAvatarContainer = row.prevAll('.line_holder').first().find('.js-avatar-container.' + lineType + '_line');\n // is this the first note of discussion?\n discussionContainer = $(`.notes[data-discussion-id=\"${noteEntity.discussion_id}\"]`);\n if (!discussionContainer.length) {\n discussionContainer = form.closest('.discussion').find('.notes');\n }\n if (discussionContainer.length === 0) {\n if (noteEntity.diff_discussion_html) {\n var $discussion = $(noteEntity.diff_discussion_html).renderGFM();\n\n if (!this.isParallelView() || row.hasClass('js-temp-notes-holder') || noteEntity.on_image) {\n // insert the note and the reply button after the temp row\n row.after($discussion);\n } else {\n // Merge new discussion HTML in\n var $notes = $discussion.find(`.notes[data-discussion-id=\"${noteEntity.discussion_id}\"]`);\n var contentContainerClass = '.' + $notes.closest('.notes_content')\n .attr('class')\n .split(' ')\n .join('.');\n\n row.find(contentContainerClass + ' .content').append($notes.closest('.content').children());\n }\n }\n // Init discussion on 'Discussion' page if it is merge request page\n const page = $('body').attr('data-page');\n if ((page && page.indexOf('projects:merge_request') !== -1) || !noteEntity.diff_discussion_html) {\n Notes.animateAppendNote(noteEntity.discussion_html, $('.main-notes-list'));\n }\n } else {\n // append new note to all matching discussions\n Notes.animateAppendNote(noteEntity.html, discussionContainer);\n }\n\n if (typeof gl.diffNotesCompileComponents !== 'undefined' && noteEntity.discussion_resolvable) {\n gl.diffNotesCompileComponents();\n\n this.renderDiscussionAvatar(diffAvatarContainer, noteEntity);\n }\n\n localTimeAgo($('.js-timeago'), false);\n Notes.checkMergeRequestStatus();\n return this.updateNotesCount(1);\n }\n\n getLineHolder(changesDiscussionContainer) {\n return $(changesDiscussionContainer).closest('.notes_holder')\n .prevAll('.line_holder')\n .first()\n .get(0);\n }\n\n renderDiscussionAvatar(diffAvatarContainer, noteEntity) {\n var avatarHolder = diffAvatarContainer.find('.diff-comment-avatar-holders');\n\n if (!avatarHolder.length) {\n avatarHolder = document.createElement('diff-note-avatars');\n avatarHolder.setAttribute('discussion-id', noteEntity.discussion_id);\n\n diffAvatarContainer.append(avatarHolder);\n\n gl.diffNotesCompileComponents();\n }\n }\n\n /**\n * Called in response the main target form has been successfully submitted.\n *\n * Removes any errors.\n * Resets text and preview.\n * Resets buttons.\n */\n resetMainTargetForm(e) {\n var form;\n form = $('.js-main-target-form');\n // remove validation errors\n form.find('.js-errors').remove();\n // reset text and preview\n form.find('.js-md-write-button').click();\n form.find('.js-note-text').val('').trigger('input');\n form.find('.js-note-text').data('autosave').reset();\n\n var event = document.createEvent('Event');\n event.initEvent('autosize:update', true, false);\n form.find('.js-autosize')[0].dispatchEvent(event);\n\n this.updateTargetButtons(e);\n }\n\n reenableTargetFormSubmitButton() {\n var form;\n form = $('.js-main-target-form');\n return form.find('.js-note-text').trigger('input');\n }\n\n /**\n * Shows the main form and does some setup on it.\n *\n * Sets some hidden fields in the form.\n */\n setupMainTargetNoteForm() {\n var form;\n // find the form\n form = $('.js-new-note-form');\n // Set a global clone of the form for later cloning\n this.formClone = form.clone();\n // show the form\n this.setupNoteForm(form);\n // fix classes\n form.removeClass('js-new-note-form');\n form.addClass('js-main-target-form');\n form.find('#note_line_code').remove();\n form.find('#note_position').remove();\n form.find('#note_type').val('');\n form.find('#note_project_id').remove();\n form.find('#in_reply_to_discussion_id').remove();\n form.find('.js-comment-resolve-button').closest('comment-and-resolve-btn').remove();\n this.parentTimeline = form.parents('.timeline');\n\n if (form.length) {\n Notes.initCommentTypeToggle(form.get(0));\n }\n }\n\n /**\n * General note form setup.\n *\n * deactivates the submit button when text is empty\n * hides the preview button when text is empty\n * setup GFM auto complete\n * show the form\n */\n setupNoteForm(form) {\n var textarea, key;\n this.glForm = new GLForm(form, this.enableGFM);\n textarea = form.find('.js-note-text');\n key = [\n 'Note',\n form.find('#note_noteable_type').val(),\n form.find('#note_noteable_id').val(),\n form.find('#note_commit_id').val(),\n form.find('#note_type').val(),\n form.find('#note_project_id').val(),\n form.find('#in_reply_to_discussion_id').val(),\n\n // LegacyDiffNote\n form.find('#note_line_code').val(),\n\n // DiffNote\n form.find('#note_position').val(),\n ];\n return new Autosave(textarea, key);\n }\n\n /**\n * Called in response to the new note form being submitted\n *\n * Adds new note to list.\n */\n addNote($form, note) {\n return this.renderNote(note);\n }\n\n addNoteError($form) {\n let formParentTimeline;\n if ($form.hasClass('js-main-target-form')) {\n formParentTimeline = $form.parents('.timeline');\n } else if ($form.hasClass('js-discussion-note-form')) {\n formParentTimeline = $form.closest('.discussion-notes').find('.notes');\n }\n return this.addFlash('Your comment could not be submitted! Please check your network connection and try again.', 'alert', formParentTimeline.get(0));\n }\n\n updateNoteError($parentTimeline) {\n new Flash('Your comment could not be updated! Please check your network connection and try again.');\n }\n\n /**\n * Called in response to the new note form being submitted\n *\n * Adds new note to list.\n */\n addDiscussionNote($form, note, isNewDiffComment) {\n if ($form.attr('data-resolve-all') != null) {\n var projectPath = $form.data('project-path');\n var discussionId = $form.data('discussion-id');\n var mergeRequestId = $form.data('noteable-iid');\n\n if (ResolveService != null) {\n ResolveService.toggleResolveForDiscussion(mergeRequestId, discussionId);\n }\n }\n\n this.renderNote(note, $form);\n // cleanup after successfully creating a diff/discussion note\n if (isNewDiffComment) {\n this.removeDiscussionNoteForm($form);\n }\n }\n\n /**\n * Called in response to the edit note form being submitted\n *\n * Updates the current note field.\n */\n updateNote(noteEntity, $targetNote) {\n var $noteEntityEl, $note_li;\n // Convert returned HTML to a jQuery object so we can modify it further\n $noteEntityEl = $(noteEntity.html);\n $noteEntityEl.addClass('fade-in-full');\n this.revertNoteEditForm($targetNote);\n $noteEntityEl.renderGFM();\n // Find the note's `li` element by ID and replace it with the updated HTML\n $note_li = $('.note-row-' + noteEntity.id);\n\n $note_li.replaceWith($noteEntityEl);\n this.setupNewNote($noteEntityEl);\n\n if (typeof gl.diffNotesCompileComponents !== 'undefined') {\n gl.diffNotesCompileComponents();\n }\n }\n\n checkContentToAllowEditing($el) {\n var initialContent = $el.find('.original-note-content').text().trim();\n var currentContent = $el.find('.js-note-text').val();\n var isAllowed = true;\n\n if (currentContent === initialContent) {\n this.removeNoteEditForm($el);\n }\n else {\n var $buttons = $el.find('.note-form-actions');\n var isWidgetVisible = isInViewport($el.get(0));\n\n if (!isWidgetVisible) {\n scrollToElement($el);\n }\n\n $el.find('.js-finish-edit-warning').show();\n isAllowed = false;\n }\n\n return isAllowed;\n }\n\n /**\n * Called in response to clicking the edit note link\n *\n * Replaces the note text with the note edit form\n * Adds a data attribute to the form with the original content of the note for cancellations\n */\n showEditForm(e, scrollTo, myLastNote) {\n e.preventDefault();\n\n var $target = $(e.target);\n var $editForm = $(this.getEditFormSelector($target));\n var $note = $target.closest('.note');\n var $currentlyEditing = $('.note.is-editing:visible');\n\n if ($currentlyEditing.length) {\n var isEditAllowed = this.checkContentToAllowEditing($currentlyEditing);\n\n if (!isEditAllowed) {\n return;\n }\n }\n\n $note.find('.js-note-attachment-delete').show();\n $editForm.addClass('current-note-edit-form');\n $note.addClass('is-editing');\n this.putEditFormInPlace($target);\n }\n\n /**\n * Called in response to clicking the edit note link\n *\n * Hides edit form and restores the original note text to the editor textarea.\n */\n cancelEdit(e) {\n e.preventDefault();\n const $target = $(e.target);\n const $note = $target.closest('.note');\n const noteId = $note.attr('data-note-id');\n\n this.revertNoteEditForm($target);\n\n if (this.updatedNotesTrackingMap[noteId]) {\n const $newNote = $(this.updatedNotesTrackingMap[noteId].html);\n $note.replaceWith($newNote);\n this.setupNewNote($newNote);\n // Now that we have taken care of the update, clear it out\n delete this.updatedNotesTrackingMap[noteId];\n }\n else {\n $note.find('.js-finish-edit-warning').hide();\n this.removeNoteEditForm($note);\n }\n }\n\n revertNoteEditForm($target) {\n $target = $target || $('.note.is-editing:visible');\n var selector = this.getEditFormSelector($target);\n var $editForm = $(selector);\n\n $editForm.insertBefore('.notes-form');\n $editForm.find('.js-comment-save-button').enable();\n $editForm.find('.js-finish-edit-warning').hide();\n }\n\n getEditFormSelector($el) {\n var selector = '.note-edit-form:not(.mr-note-edit-form)';\n\n if ($el.parents('#diffs').length) {\n selector = '.note-edit-form.mr-note-edit-form';\n }\n\n return selector;\n }\n\n removeNoteEditForm($note) {\n var form = $note.find('.current-note-edit-form');\n $note.removeClass('is-editing');\n form.removeClass('current-note-edit-form');\n form.find('.js-finish-edit-warning').hide();\n // Replace markdown textarea text with original note text.\n return form.find('.js-note-text').val(form.find('form.edit-note').data('original-note'));\n }\n\n /**\n * Called in response to deleting a note of any kind.\n *\n * Removes the actual note from view.\n * Removes the whole discussion if the last note is being removed.\n */\n removeNote(e) {\n var noteElId, noteId, dataNoteId, $note, lineHolder;\n $note = $(e.currentTarget).closest('.note');\n noteElId = $note.attr('id');\n noteId = $note.attr('data-note-id');\n lineHolder = $(e.currentTarget).closest('.notes[data-discussion-id]')\n .closest('.notes_holder')\n .prev('.line_holder');\n $(`.note[id=\"${noteElId}\"]`).each((function(_this) {\n // A same note appears in the \"Discussion\" and in the \"Changes\" tab, we have\n // to remove all. Using $('.note[id='noteId']') ensure we get all the notes,\n // where $('#noteId') would return only one.\n return function(i, el) {\n var $note, $notes;\n $note = $(el);\n $notes = $note.closest('.discussion-notes');\n const discussionId = $('.notes', $notes).data('discussion-id');\n\n if (typeof gl.diffNotesCompileComponents !== 'undefined') {\n if (gl.diffNoteApps[noteElId]) {\n gl.diffNoteApps[noteElId].$destroy();\n }\n }\n\n $note.remove();\n\n // check if this is the last note for this line\n if ($notes.find('.note').length === 0) {\n var notesTr = $notes.closest('tr');\n\n // \"Discussions\" tab\n $notes.closest('.timeline-entry').remove();\n\n $(`.js-diff-avatars-${discussionId}`).trigger('remove.vue');\n\n // The notes tr can contain multiple lists of notes, like on the parallel diff\n // notesTr does not exist for image diffs\n if (notesTr.find('.discussion-notes').length > 1 || notesTr.length === 0) {\n const $diffFile = $notes.closest('.diff-file');\n if ($diffFile.length > 0) {\n const removeBadgeEvent = new CustomEvent('removeBadge.imageDiff', {\n detail: {\n // badgeNumber's start with 1 and index starts with 0\n badgeNumber: $notes.index() + 1,\n },\n });\n\n $diffFile[0].dispatchEvent(removeBadgeEvent);\n }\n\n $notes.remove();\n } else if (notesTr.length > 0) {\n notesTr.remove();\n }\n }\n };\n })(this));\n\n Notes.checkMergeRequestStatus();\n return this.updateNotesCount(-1);\n }\n\n /**\n * Called in response to clicking the delete attachment link\n *\n * Removes the attachment wrapper view, including image tag if it exists\n * Resets the note editing form\n */\n removeAttachment() {\n const $note = $(this).closest('.note');\n $note.find('.note-attachment').remove();\n $note.find('.note-body > .note-text').show();\n $note.find('.note-header').show();\n return $note.find('.current-note-edit-form').remove();\n }\n\n /**\n * Called when clicking on the \"reply\" button for a diff line.\n *\n * Shows the note form below the notes.\n */\n onReplyToDiscussionNote(e) {\n this.replyToDiscussionNote(e.target);\n }\n\n replyToDiscussionNote(target) {\n var form, replyLink;\n form = this.cleanForm(this.formClone.clone());\n replyLink = $(target).closest('.js-discussion-reply-button');\n // insert the form after the button\n replyLink\n .closest('.discussion-reply-holder')\n .hide()\n .after(form);\n // show the form\n return this.setupDiscussionNoteForm(replyLink, form);\n }\n\n /**\n * Shows the diff or discussion form and does some setup on it.\n *\n * Sets some hidden fields in the form.\n *\n * Note: dataHolder must have the \"discussionId\" and \"lineCode\" data attributes set.\n */\n setupDiscussionNoteForm(dataHolder, form) {\n // setup note target\n let diffFileData = dataHolder.closest('.text-file');\n\n if (diffFileData.length === 0) {\n diffFileData = dataHolder.closest('.image');\n }\n\n var discussionID = dataHolder.data('discussionId');\n\n if (discussionID) {\n form.attr('data-discussion-id', discussionID);\n form.find('#in_reply_to_discussion_id').val(discussionID);\n }\n\n form.find('#note_project_id').val(dataHolder.data('discussionProjectId'));\n\n form.attr('data-line-code', dataHolder.data('lineCode'));\n form.find('#line_type').val(dataHolder.data('lineType'));\n\n form.find('#note_noteable_type').val(diffFileData.data('noteableType'));\n form.find('#note_noteable_id').val(diffFileData.data('noteableId'));\n form.find('#note_commit_id').val(diffFileData.data('commitId'));\n\n form.find('#note_type').val(dataHolder.data('noteType'));\n\n // LegacyDiffNote\n form.find('#note_line_code').val(dataHolder.data('lineCode'));\n\n // DiffNote\n form.find('#note_position').val(dataHolder.attr('data-position'));\n\n form.find('.js-note-discard').show().removeClass('js-note-discard').addClass('js-close-discussion-note-form').text(form.find('.js-close-discussion-note-form').data('cancel-text'));\n form.find('.js-note-target-close').remove();\n form.find('.js-note-new-discussion').remove();\n this.setupNoteForm(form);\n\n form\n .removeClass('js-main-target-form')\n .addClass('discussion-form js-discussion-note-form');\n\n if (typeof gl.diffNotesCompileComponents !== 'undefined') {\n var $commentBtn = form.find('comment-and-resolve-btn');\n $commentBtn.attr(':discussion-id', `'${discussionID}'`);\n\n gl.diffNotesCompileComponents();\n }\n\n form.find('.js-note-text').focus();\n form\n .find('.js-comment-resolve-button')\n .attr('data-discussion-id', discussionID);\n }\n\n /**\n * Called when clicking on the \"add a comment\" button on the side of a diff line.\n *\n * Inserts a temporary row for the form below the line.\n * Sets up the form and shows it.\n */\n onAddDiffNote(e) {\n e.preventDefault();\n const link = e.currentTarget || e.target;\n const $link = $(link);\n const showReplyInput = !$link.hasClass('js-diff-comment-avatar');\n this.toggleDiffNote({\n target: $link,\n lineType: link.dataset.lineType,\n showReplyInput\n });\n }\n\n onAddImageDiffNote(e) {\n const $link = $(e.currentTarget || e.target);\n const $diffFile = $link.closest('.diff-file');\n\n const clickEvent = new CustomEvent('click.imageDiff', {\n detail: e,\n });\n\n $diffFile[0].dispatchEvent(clickEvent);\n\n // Setup comment form\n let newForm;\n const $noteContainer = $link.closest('.diff-viewer').find('.note-container');\n const $form = $noteContainer.find('> .discussion-form');\n\n if ($form.length === 0) {\n newForm = this.cleanForm(this.formClone.clone());\n newForm.appendTo($noteContainer);\n } else {\n newForm = $form;\n }\n\n this.setupDiscussionNoteForm($link, newForm);\n }\n\n toggleDiffNote({\n target,\n lineType,\n forceShow,\n showReplyInput = false,\n }) {\n var $link, addForm, hasNotes, newForm, noteForm, replyButton, row, rowCssToAdd, targetContent, isDiffCommentAvatar;\n $link = $(target);\n row = $link.closest('tr');\n const nextRow = row.next();\n let targetRow = row;\n if (nextRow.is('.notes_holder')) {\n targetRow = nextRow;\n }\n\n hasNotes = nextRow.is('.notes_holder');\n addForm = false;\n let lineTypeSelector = '';\n rowCssToAdd = '
      ';\n // In parallel view, look inside the correct left/right pane\n if (this.isParallelView()) {\n lineTypeSelector = `.${lineType}`;\n rowCssToAdd = '
      ';\n }\n const notesContentSelector = `.notes_content${lineTypeSelector} .content`;\n let notesContent = targetRow.find(notesContentSelector);\n\n if (hasNotes && showReplyInput) {\n targetRow.show();\n notesContent = targetRow.find(notesContentSelector);\n if (notesContent.length) {\n notesContent.show();\n replyButton = notesContent.find('.js-discussion-reply-button:visible');\n if (replyButton.length) {\n this.replyToDiscussionNote(replyButton[0]);\n } else {\n // In parallel view, the form may not be present in one of the panes\n noteForm = notesContent.find('.js-discussion-note-form');\n if (noteForm.length === 0) {\n addForm = true;\n }\n }\n }\n } else if (showReplyInput) {\n // add a notes row and insert the form\n row.after(rowCssToAdd);\n targetRow = row.next();\n notesContent = targetRow.find(notesContentSelector);\n addForm = true;\n } else {\n const isCurrentlyShown = targetRow.find('.content:not(:empty)').is(':visible');\n const isForced = forceShow === true || forceShow === false;\n const showNow = forceShow === true || (!isCurrentlyShown && !isForced);\n\n targetRow.toggle(showNow);\n notesContent.toggle(showNow);\n }\n\n if (addForm) {\n newForm = this.cleanForm(this.formClone.clone());\n newForm.appendTo(notesContent);\n // show the form\n return this.setupDiscussionNoteForm($link, newForm);\n }\n }\n\n /**\n * Called in response to \"cancel\" on a diff note form.\n *\n * Shows the reply button again.\n * Removes the form and if necessary it's temporary row.\n */\n removeDiscussionNoteForm(form) {\n var glForm, row;\n row = form.closest('tr');\n glForm = form.data('gl-form');\n glForm.destroy();\n form.find('.js-note-text').data('autosave').reset();\n // show the reply button (will only work for replies)\n form\n .prev('.discussion-reply-holder')\n .show();\n if (row.is('.js-temp-notes-holder')) {\n // remove temporary row for diff lines\n return row.remove();\n } else {\n // only remove the form\n return form.remove();\n }\n }\n\n cancelDiscussionForm(e) {\n e.preventDefault();\n const $form = $(e.target).closest('.js-discussion-note-form');\n const $discussionNote = $(e.target).closest('.discussion-notes');\n\n if ($discussionNote.length === 0) {\n // Only send blur event when the discussion form\n // is not part of a discussion note\n const $diffFile = $form.closest('.diff-file');\n\n if ($diffFile.length > 0) {\n const blurEvent = new CustomEvent('blur.imageDiff', {\n detail: e,\n });\n\n $diffFile[0].dispatchEvent(blurEvent);\n }\n }\n\n return this.removeDiscussionNoteForm($form);\n }\n\n /**\n * Called after an attachment file has been selected.\n *\n * Updates the file name for the selected attachment.\n */\n updateFormAttachment() {\n var filename, form;\n form = $(this).closest('form');\n // get only the basename\n filename = $(this).val().replace(/^.*[\\\\\\/]/, '');\n return form.find('.js-attachment-filename').text(filename);\n }\n\n /**\n * Called when the tab visibility changes\n */\n visibilityChange() {\n return this.refresh();\n }\n\n updateTargetButtons(e) {\n var closebtn, closetext, discardbtn, form, reopenbtn, reopentext, textarea;\n textarea = $(e.target);\n form = textarea.parents('form');\n reopenbtn = form.find('.js-note-target-reopen');\n closebtn = form.find('.js-note-target-close');\n discardbtn = form.find('.js-note-discard');\n\n if (textarea.val().trim().length > 0) {\n reopentext = reopenbtn.attr('data-alternative-text');\n closetext = closebtn.attr('data-alternative-text');\n if (reopenbtn.text() !== reopentext) {\n reopenbtn.text(reopentext);\n }\n if (closebtn.text() !== closetext) {\n closebtn.text(closetext);\n }\n if (reopenbtn.is(':not(.btn-comment-and-reopen)')) {\n reopenbtn.addClass('btn-comment-and-reopen');\n }\n if (closebtn.is(':not(.btn-comment-and-close)')) {\n closebtn.addClass('btn-comment-and-close');\n }\n if (discardbtn.is(':hidden')) {\n return discardbtn.show();\n }\n } else {\n reopentext = reopenbtn.data('original-text');\n closetext = closebtn.data('original-text');\n if (reopenbtn.text() !== reopentext) {\n reopenbtn.text(reopentext);\n }\n if (closebtn.text() !== closetext) {\n closebtn.text(closetext);\n }\n if (reopenbtn.is('.btn-comment-and-reopen')) {\n reopenbtn.removeClass('btn-comment-and-reopen');\n }\n if (closebtn.is('.btn-comment-and-close')) {\n closebtn.removeClass('btn-comment-and-close');\n }\n if (discardbtn.is(':visible')) {\n return discardbtn.hide();\n }\n }\n }\n\n putEditFormInPlace($el) {\n var $editForm = $(this.getEditFormSelector($el));\n var $note = $el.closest('.note');\n\n $editForm.insertAfter($note.find('.note-text'));\n\n var $originalContentEl = $note.find('.original-note-content');\n var originalContent = $originalContentEl.text().trim();\n var postUrl = $originalContentEl.data('post-url');\n var targetId = $originalContentEl.data('target-id');\n var targetType = $originalContentEl.data('target-type');\n\n this.glForm = new GLForm($editForm.find('form'), this.enableGFM);\n\n $editForm.find('form')\n .attr('action', postUrl)\n .attr('data-remote', 'true');\n $editForm.find('.js-form-target-id').val(targetId);\n $editForm.find('.js-form-target-type').val(targetType);\n $editForm.find('.js-note-text').focus().val(originalContent);\n $editForm.find('.js-md-write-button').trigger('click');\n $editForm.find('.referenced-users').hide();\n }\n\n putConflictEditWarningInPlace(noteEntity, $note) {\n if ($note.find('.js-conflict-edit-warning').length === 0) {\n const $alert = $(`
      \n This comment has changed since you started editing, please review the\n \n updated comment\n \n to ensure information is not lost\n
      `);\n $alert.insertAfter($note.find('.note-text'));\n }\n }\n\n updateNotesCount(updateCount) {\n return this.notesCountBadge.text(parseInt(this.notesCountBadge.text(), 10) + updateCount);\n }\n\n toggleCommitList(e) {\n const $element = $(e.currentTarget);\n const $closestSystemCommitList = $element.siblings('.system-note-commit-list');\n\n $element.find('.fa').toggleClass('fa-angle-down').toggleClass('fa-angle-up');\n $closestSystemCommitList.toggleClass('hide-shade');\n }\n\n /**\n * Scans system notes with `ul` elements in system note body\n * then collapse long commit list pushed by user to make it less\n * intrusive.\n */\n collapseLongCommitList() {\n const systemNotes = $('#notes-list').find('li.system-note').has('ul');\n\n $.each(systemNotes, function(index, systemNote) {\n const $systemNote = $(systemNote);\n const headerMessage = $systemNote.find('.note-text').find('p:first').text().replace(':', '');\n\n $systemNote.find('.note-header .system-note-message').html(headerMessage);\n\n if ($systemNote.find('li').length > MAX_VISIBLE_COMMIT_LIST_COUNT) {\n $systemNote.find('.note-text').addClass('system-note-commit-list');\n $systemNote.find('.system-note-commit-list-toggler').show();\n } else {\n $systemNote.find('.note-text').addClass('system-note-commit-list hide-shade');\n }\n });\n }\n\n addFlash(...flashParams) {\n this.flashContainer = new Flash(...flashParams);\n }\n\n clearFlash() {\n if (this.flashContainer) {\n this.flashContainer.style.display = 'none';\n this.flashContainer = null;\n }\n }\n\n cleanForm($form) {\n // Remove JS classes that are not needed here\n $form\n .find('.js-comment-type-dropdown')\n .removeClass('btn-group');\n\n // Remove dropdown\n $form\n .find('.dropdown-menu')\n .remove();\n\n return $form;\n }\n\n /**\n * Check if note does not exists on page\n */\n static isNewNote(noteEntity, noteIds) {\n return $.inArray(noteEntity.id, noteIds) === -1;\n }\n\n /**\n * Check if $note already contains the `noteEntity` content\n */\n static isUpdatedNote(noteEntity, $note) {\n // There can be CRLF vs LF mismatches if we don't sanitize and compare the same way\n const sanitizedNoteEntityText = normalizeNewlines(noteEntity.note.trim());\n const currentNoteText = normalizeNewlines(\n $note.find('.original-note-content').first().text().trim()\n );\n return sanitizedNoteEntityText !== currentNoteText;\n }\n\n static checkMergeRequestStatus() {\n if (getPagePath(1) === 'merge_requests' && gl.mrWidget) {\n gl.mrWidget.checkStatus();\n }\n }\n\n static animateAppendNote(noteHtml, $notesList) {\n const $note = $(noteHtml);\n\n $note.addClass('fade-in-full').renderGFM();\n $notesList.append($note);\n return $note;\n }\n\n static animateUpdateNote(noteHtml, $note) {\n const $updatedNote = $(noteHtml);\n\n $updatedNote.addClass('fade-in').renderGFM();\n $note.replaceWith($updatedNote);\n return $updatedNote;\n }\n\n /**\n * Get data from Form attributes to use for saving/submitting comment.\n */\n getFormData($form) {\n const content = $form.find('.js-note-text').val();\n return {\n formData: $form.serialize(),\n formContent: _.escape(content),\n formAction: $form.attr('action'),\n formContentOriginal: content,\n };\n }\n\n /**\n * Identify if comment has any quick actions\n */\n hasQuickActions(formContent) {\n return REGEX_QUICK_ACTIONS.test(formContent);\n }\n\n /**\n * Remove quick actions and leave comment with pure message\n */\n stripQuickActions(formContent) {\n return formContent.replace(REGEX_QUICK_ACTIONS, '').trim();\n }\n\n /**\n * Gets appropriate description from quick actions found in provided `formContent`\n */\n getQuickActionDescription(formContent, availableQuickActions = []) {\n let tempFormContent;\n\n // Identify executed quick actions from `formContent`\n const executedCommands = availableQuickActions.filter((command, index) => {\n const commandRegex = new RegExp(`/${command.name}`);\n return commandRegex.test(formContent);\n });\n\n if (executedCommands && executedCommands.length) {\n if (executedCommands.length > 1) {\n tempFormContent = 'Applying multiple commands';\n } else {\n const commandDescription = executedCommands[0].description.toLowerCase();\n tempFormContent = `Applying command to ${commandDescription}`;\n }\n } else {\n tempFormContent = 'Applying command';\n }\n\n return tempFormContent;\n }\n\n /**\n * Create placeholder note DOM element populated with comment body\n * that we will show while comment is being posted.\n * Once comment is _actually_ posted on server, we will have final element\n * in response that we will show in place of this temporary element.\n */\n createPlaceholderNote({ formContent, uniqueId, isDiscussionNote, currentUsername, currentUserFullname, currentUserAvatar }) {\n const discussionClass = isDiscussionNote ? 'discussion' : '';\n const $tempNote = $(\n `
    • \n
      \n
      \n \n \n \n
      \n
      \n \n
      \n
      \n

      ${formContent}

      \n
      \n
      \n
      \n
      \n
    • `\n );\n\n $tempNote.find('.hidden-xs').text(_.escape(currentUserFullname));\n $tempNote.find('.note-headline-light').text(`@${_.escape(currentUsername)}`);\n\n return $tempNote;\n }\n\n /**\n * Create Placeholder System Note DOM element populated with quick action description\n */\n createPlaceholderSystemNote({ formContent, uniqueId }) {\n const $tempNote = $(\n `
    • \n
      \n
      \n ${formContent}\n
      \n
      \n
    • `\n );\n\n return $tempNote;\n }\n\n /**\n * This method does following tasks step-by-step whenever a new comment\n * is submitted by user (both main thread comments as well as discussion comments).\n *\n * 1) Get Form metadata\n * 2) Identify comment type; a) Main thread b) Discussion thread c) Discussion resolve\n * 3) Build temporary placeholder element (using `createPlaceholderNote`)\n * 4) Show placeholder note on UI\n * 5) Perform network request to submit the note using `axios.post`\n * a) If request is successfully completed\n * 1. Remove placeholder element\n * 2. Show submitted Note element\n * 3. Perform post-submit errands\n * a. Mark discussion as resolved if comment submission was for resolve.\n * b. Reset comment form to original state.\n * b) If request failed\n * 1. Remove placeholder element\n * 2. Show error Flash message about failure\n */\n postComment(e) {\n e.preventDefault();\n\n // Get Form metadata\n const $submitBtn = $(e.target);\n let $form = $submitBtn.parents('form');\n const $closeBtn = $form.find('.js-note-target-close');\n const isDiscussionNote = $submitBtn.parent().find('li.droplab-item-selected').attr('id') === 'discussion';\n const isMainForm = $form.hasClass('js-main-target-form');\n const isDiscussionForm = $form.hasClass('js-discussion-note-form');\n const isDiscussionResolve = $submitBtn.hasClass('js-comment-resolve-button');\n const { formData, formContent, formAction, formContentOriginal } = this.getFormData($form);\n let noteUniqueId;\n let systemNoteUniqueId;\n let hasQuickActions = false;\n let $notesContainer;\n let tempFormContent;\n\n // Get reference to notes container based on type of comment\n if (isDiscussionForm) {\n $notesContainer = $form.parent('.discussion-notes').find('.notes');\n } else if (isMainForm) {\n $notesContainer = $('ul.main-notes-list');\n }\n\n // If comment is to resolve discussion, disable submit buttons while\n // comment posting is finished.\n if (isDiscussionResolve) {\n $submitBtn.disable();\n $form.find('.js-comment-submit-button').disable();\n }\n\n tempFormContent = formContent;\n if (this.hasQuickActions(formContent)) {\n tempFormContent = this.stripQuickActions(formContent);\n hasQuickActions = true;\n }\n\n // Show placeholder note\n if (tempFormContent) {\n noteUniqueId = _.uniqueId('tempNote_');\n $notesContainer.append(this.createPlaceholderNote({\n formContent: tempFormContent,\n uniqueId: noteUniqueId,\n isDiscussionNote,\n currentUsername: gon.current_username,\n currentUserFullname: gon.current_user_fullname,\n currentUserAvatar: gon.current_user_avatar_url,\n }));\n }\n\n // Show placeholder system note\n if (hasQuickActions) {\n systemNoteUniqueId = _.uniqueId('tempSystemNote_');\n $notesContainer.append(this.createPlaceholderSystemNote({\n formContent: this.getQuickActionDescription(formContent, AjaxCache.get(gl.GfmAutoComplete.dataSources.commands)),\n uniqueId: systemNoteUniqueId,\n }));\n }\n\n // Clear the form textarea\n if ($notesContainer.length) {\n if (isMainForm) {\n this.resetMainTargetForm(e);\n } else if (isDiscussionForm) {\n this.removeDiscussionNoteForm($form);\n }\n }\n\n /* eslint-disable promise/catch-or-return */\n // Make request to submit comment on server\n axios.post(formAction, formData)\n .then((res) => {\n const note = res.data;\n\n // Submission successful! remove placeholder\n $notesContainer.find(`#${noteUniqueId}`).remove();\n\n const $diffFile = $form.closest('.diff-file');\n if ($diffFile.length > 0) {\n const blurEvent = new CustomEvent('blur.imageDiff', {\n detail: e,\n });\n\n $diffFile[0].dispatchEvent(blurEvent);\n }\n\n // Reset cached commands list when command is applied\n if (hasQuickActions) {\n $form.find('textarea.js-note-text').trigger('clear-commands-cache.atwho');\n }\n\n // Clear previous form errors\n this.clearFlashWrapper();\n\n // Check if this was discussion comment\n if (isDiscussionForm) {\n // Remove flash-container\n $notesContainer.find('.flash-container').remove();\n\n // If comment intends to resolve discussion, do the same.\n if (isDiscussionResolve) {\n $form\n .attr('data-discussion-id', $submitBtn.data('discussion-id'))\n .attr('data-resolve-all', 'true')\n .attr('data-project-path', $submitBtn.data('project-path'));\n }\n\n // Show final note element on UI\n const isNewDiffComment = $notesContainer.length === 0;\n this.addDiscussionNote($form, note, isNewDiffComment);\n\n if (isNewDiffComment) {\n // Add image badge, avatar badge and toggle discussion badge for new image diffs\n const notePosition = $form.find('#note_position').val();\n if ($diffFile.length > 0 && notePosition.length > 0) {\n const { x, y, width, height } = JSON.parse(notePosition);\n const addBadgeEvent = new CustomEvent('addBadge.imageDiff', {\n detail: {\n x,\n y,\n width,\n height,\n noteId: `note_${note.id}`,\n discussionId: note.discussion_id,\n },\n });\n\n $diffFile[0].dispatchEvent(addBadgeEvent);\n }\n }\n\n // append flash-container to the Notes list\n if ($notesContainer.length) {\n $notesContainer.append('
      ');\n }\n } else if (isMainForm) { // Check if this was main thread comment\n // Show final note element on UI and perform form and action buttons cleanup\n this.addNote($form, note);\n this.reenableTargetFormSubmitButton(e);\n }\n\n if (note.commands_changes) {\n this.handleQuickActions(note);\n }\n\n $form.trigger('ajax:success', [note]);\n }).catch(() => {\n // Submission failed, remove placeholder note and show Flash error message\n $notesContainer.find(`#${noteUniqueId}`).remove();\n\n const blurEvent = new CustomEvent('blur.imageDiff', {\n detail: e,\n });\n\n const closestDiffFile = $form.closest('.diff-file');\n\n if (closestDiffFile.length) {\n closestDiffFile[0].dispatchEvent(blurEvent);\n }\n\n if (hasQuickActions) {\n $notesContainer.find(`#${systemNoteUniqueId}`).remove();\n }\n\n // Show form again on UI on failure\n if (isDiscussionForm && $notesContainer.length) {\n const replyButton = $notesContainer.parent().find('.js-discussion-reply-button');\n this.replyToDiscussionNote(replyButton[0]);\n $form = $notesContainer.parent().find('form');\n }\n\n $form.find('.js-note-text').val(formContentOriginal);\n this.reenableTargetFormSubmitButton(e);\n this.addNoteError($form);\n });\n\n return $closeBtn.text($closeBtn.data('original-text'));\n }\n\n /**\n * This method does following tasks step-by-step whenever an existing comment\n * is updated by user (both main thread comments as well as discussion comments).\n *\n * 1) Get Form metadata\n * 2) Update note element with new content\n * 3) Perform network request to submit the updated note using `axios.post`\n * a) If request is successfully completed\n * 1. Show submitted Note element\n * b) If request failed\n * 1. Revert Note element to original content\n * 2. Show error Flash message about failure\n */\n updateComment(e) {\n e.preventDefault();\n\n // Get Form metadata\n const $submitBtn = $(e.target);\n const $form = $submitBtn.parents('form');\n const $closeBtn = $form.find('.js-note-target-close');\n const $editingNote = $form.parents('.note.is-editing');\n const $noteBody = $editingNote.find('.js-task-list-container');\n const $noteBodyText = $noteBody.find('.note-text');\n const { formData, formContent, formAction } = this.getFormData($form);\n const $diffFile = $form.closest('.diff-file');\n const $notesContainer = $form.closest('.notes');\n\n // Cache original comment content\n const cachedNoteBodyText = $noteBodyText.html();\n\n // Show updated comment content temporarily\n $noteBodyText.html(formContent);\n $editingNote.removeClass('is-editing fade-in-full').addClass('being-posted fade-in-half');\n $editingNote.find('.note-headline-meta a').html('');\n\n /* eslint-disable promise/catch-or-return */\n // Make request to update comment on server\n axios.post(formAction, formData)\n .then(({ data }) => {\n // Submission successful! render final note element\n this.updateNote(data, $editingNote);\n })\n .catch(() => {\n // Submission failed, revert back to original note\n $noteBodyText.html(_.escape(cachedNoteBodyText));\n $editingNote.removeClass('being-posted fade-in');\n $editingNote.find('.fa.fa-spinner').remove();\n\n // Show Flash message about failure\n this.updateNoteError();\n });\n\n return $closeBtn.text($closeBtn.data('original-text'));\n }\n}\n\nwindow.Notes = Notes;\n\n\n\n// WEBPACK FOOTER //\n// ./notes.js","import DropLab from './droplab/drop_lab';\nimport ISetter from './droplab/plugins/input_setter';\n\n// Todo: Remove this when fixing issue in input_setter plugin\nconst InputSetter = Object.assign({}, ISetter);\n\nclass CommentTypeToggle {\n constructor(opts = {}) {\n this.dropdownTrigger = opts.dropdownTrigger;\n this.dropdownList = opts.dropdownList;\n this.noteTypeInput = opts.noteTypeInput;\n this.submitButton = opts.submitButton;\n this.closeButton = opts.closeButton;\n this.reopenButton = opts.reopenButton;\n }\n\n initDroplab() {\n this.droplab = new DropLab();\n\n const config = this.setConfig();\n\n this.droplab.init(this.dropdownTrigger, this.dropdownList, [InputSetter], config);\n }\n\n setConfig() {\n const config = {\n InputSetter: [{\n input: this.noteTypeInput,\n valueAttribute: 'data-value',\n },\n {\n input: this.submitButton,\n valueAttribute: 'data-submit-text',\n }],\n };\n\n if (this.closeButton) {\n config.InputSetter.push({\n input: this.closeButton,\n valueAttribute: 'data-close-text',\n }, {\n input: this.closeButton,\n valueAttribute: 'data-close-text',\n inputAttribute: 'data-alternative-text',\n });\n }\n\n if (this.reopenButton) {\n config.InputSetter.push({\n input: this.reopenButton,\n valueAttribute: 'data-reopen-text',\n }, {\n input: this.reopenButton,\n valueAttribute: 'data-reopen-text',\n inputAttribute: 'data-alternative-text',\n });\n }\n\n return config;\n }\n}\n\nexport default CommentTypeToggle;\n\n\n\n// WEBPACK FOOTER //\n// ./comment_type_toggle.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 = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\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 = ","var normalizeComponent = require(\"!../../../../../node_modules/vue-loader/lib/component-normalizer\")\n/* 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 __vue_template__ 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\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\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 = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\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 = ","var normalizeComponent = require(\"!../../../../../node_modules/vue-loader/lib/component-normalizer\")\n/* 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 __vue_template__ 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\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\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 = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\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 = ","var normalizeComponent = require(\"!../../../../../node_modules/vue-loader/lib/component-normalizer\")\n/* 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 __vue_template__ 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\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\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 = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\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 = ","var normalizeComponent = require(\"!../../../../../node_modules/vue-loader/lib/component-normalizer\")\n/* 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 __vue_template__ 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\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\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 = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\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 = ","var normalizeComponent = require(\"!../../../../../node_modules/vue-loader/lib/component-normalizer\")\n/* 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 __vue_template__ 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\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\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// 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 func-names, space-before-function-paren, no-var, prefer-rest-params, wrap-iife, no-unused-vars, consistent-return, one-var, one-var-declaration-per-line, quotes, prefer-template, object-shorthand, comma-dangle, no-else-return, no-param-reassign, max-len */\n\nimport _ from 'underscore';\nimport Cookies from 'js-cookie';\nimport flash from './flash';\nimport axios from './lib/utils/axios_utils';\n\nfunction Sidebar(currentUser) {\n this.toggleTodo = this.toggleTodo.bind(this);\n this.sidebar = $('aside');\n\n this.removeListeners();\n this.addEventListeners();\n}\n\nSidebar.initialize = function(currentUser) {\n if (!this.instance) {\n this.instance = new Sidebar(currentUser);\n }\n};\n\nSidebar.prototype.removeListeners = function () {\n this.sidebar.off('click', '.sidebar-collapsed-icon');\n this.sidebar.off('hidden.gl.dropdown');\n $('.dropdown').off('loading.gl.dropdown');\n $('.dropdown').off('loaded.gl.dropdown');\n $(document).off('click', '.js-sidebar-toggle');\n};\n\nSidebar.prototype.addEventListeners = function() {\n const $document = $(document);\n\n this.sidebar.on('click', '.sidebar-collapsed-icon', this, this.sidebarCollapseClicked);\n this.sidebar.on('hidden.gl.dropdown', this, this.onSidebarDropdownHidden);\n $('.dropdown').on('loading.gl.dropdown', this.sidebarDropdownLoading);\n $('.dropdown').on('loaded.gl.dropdown', this.sidebarDropdownLoaded);\n\n $document.on('click', '.js-sidebar-toggle', this.sidebarToggleClicked);\n return $(document).off('click', '.js-issuable-todo').on('click', '.js-issuable-todo', this.toggleTodo);\n};\n\nSidebar.prototype.sidebarToggleClicked = function (e, triggered) {\n var $allGutterToggleIcons, $this, $thisIcon;\n e.preventDefault();\n $this = $(this);\n $thisIcon = $this.find('i');\n $allGutterToggleIcons = $('.js-sidebar-toggle i');\n if ($thisIcon.hasClass('fa-angle-double-right')) {\n $allGutterToggleIcons.removeClass('fa-angle-double-right').addClass('fa-angle-double-left');\n $('aside.right-sidebar').removeClass('right-sidebar-expanded').addClass('right-sidebar-collapsed');\n $('.layout-page').removeClass('right-sidebar-expanded').addClass('right-sidebar-collapsed');\n } else {\n $allGutterToggleIcons.removeClass('fa-angle-double-left').addClass('fa-angle-double-right');\n $('aside.right-sidebar').removeClass('right-sidebar-collapsed').addClass('right-sidebar-expanded');\n $('.layout-page').removeClass('right-sidebar-collapsed').addClass('right-sidebar-expanded');\n\n if (gl.lazyLoader) gl.lazyLoader.loadCheck();\n }\n if (!triggered) {\n Cookies.set(\"collapsed_gutter\", $('.right-sidebar').hasClass('right-sidebar-collapsed'));\n }\n};\n\nSidebar.prototype.toggleTodo = function(e) {\n var $btnText, $this, $todoLoading, ajaxType, url;\n $this = $(e.currentTarget);\n ajaxType = $this.attr('data-delete-path') ? 'delete' : 'post';\n if ($this.attr('data-delete-path')) {\n url = \"\" + ($this.attr('data-delete-path'));\n } else {\n url = \"\" + ($this.data('url'));\n }\n\n $this.tooltip('hide');\n\n $('.js-issuable-todo').disable().addClass('is-loading');\n\n axios[ajaxType](url, {\n issuable_id: $this.data('issuable-id'),\n issuable_type: $this.data('issuable-type'),\n }).then(({ data }) => {\n this.todoUpdateDone(data);\n }).catch(() => flash(`There was an error ${ajaxType === 'post' ? 'adding a' : 'deleting the'} todo.`));\n};\n\nSidebar.prototype.todoUpdateDone = function(data) {\n const deletePath = data.delete_path ? data.delete_path : null;\n const attrPrefix = deletePath ? 'mark' : 'todo';\n const $todoBtns = $('.js-issuable-todo');\n\n $(document).trigger('todo:toggle', data.count);\n\n $todoBtns.each((i, el) => {\n const $el = $(el);\n const $elText = $el.find('.js-issuable-todo-inner');\n\n $el.removeClass('is-loading')\n .enable()\n .attr('aria-label', $el.data(`${attrPrefix}-text`))\n .attr('data-delete-path', deletePath)\n .attr('title', $el.data(`${attrPrefix}-text`));\n\n if ($el.hasClass('has-tooltip')) {\n $el.tooltip('fixTitle');\n }\n\n if ($el.data(`${attrPrefix}-icon`)) {\n $elText.html($el.data(`${attrPrefix}-icon`));\n } else {\n $elText.text($el.data(`${attrPrefix}-text`));\n }\n });\n};\n\nSidebar.prototype.sidebarDropdownLoading = function(e) {\n var $loading, $sidebarCollapsedIcon, i, img;\n $sidebarCollapsedIcon = $(this).closest('.block').find('.sidebar-collapsed-icon');\n img = $sidebarCollapsedIcon.find('img');\n i = $sidebarCollapsedIcon.find('i');\n $loading = $('');\n if (img.length) {\n img.before($loading);\n return img.hide();\n } else if (i.length) {\n i.before($loading);\n return i.hide();\n }\n};\n\nSidebar.prototype.sidebarDropdownLoaded = function(e) {\n var $sidebarCollapsedIcon, i, img;\n $sidebarCollapsedIcon = $(this).closest('.block').find('.sidebar-collapsed-icon');\n img = $sidebarCollapsedIcon.find('img');\n $sidebarCollapsedIcon.find('i.fa-spin').remove();\n i = $sidebarCollapsedIcon.find('i');\n if (img.length) {\n return img.show();\n } else {\n return i.show();\n }\n};\n\nSidebar.prototype.sidebarCollapseClicked = function(e) {\n var $block, sidebar;\n if ($(e.currentTarget).hasClass('dont-change-state')) {\n return;\n }\n sidebar = e.data;\n e.preventDefault();\n $block = $(this).closest('.block');\n return sidebar.openDropdown($block);\n};\n\nSidebar.prototype.openDropdown = function(blockOrName) {\n var $block;\n $block = _.isString(blockOrName) ? this.getBlock(blockOrName) : blockOrName;\n if (!this.isOpen()) {\n this.setCollapseAfterUpdate($block);\n this.toggleSidebar('open');\n }\n\n // Wait for the sidebar to trigger('click') open\n // so it doesn't cause our dropdown to close preemptively\n setTimeout(() => {\n $block.find('.js-sidebar-dropdown-toggle').trigger('click');\n });\n};\n\nSidebar.prototype.setCollapseAfterUpdate = function($block) {\n $block.addClass('collapse-after-update');\n return $('.layout-page').addClass('with-overlay');\n};\n\nSidebar.prototype.onSidebarDropdownHidden = function(e) {\n var $block, sidebar;\n sidebar = e.data;\n e.preventDefault();\n $block = $(e.target).closest('.block');\n return sidebar.sidebarDropdownHidden($block);\n};\n\nSidebar.prototype.sidebarDropdownHidden = function($block) {\n if ($block.hasClass('collapse-after-update')) {\n $block.removeClass('collapse-after-update');\n $('.layout-page').removeClass('with-overlay');\n return this.toggleSidebar('hide');\n }\n};\n\nSidebar.prototype.triggerOpenSidebar = function() {\n return this.sidebar.find('.js-sidebar-toggle').trigger('click');\n};\n\nSidebar.prototype.toggleSidebar = function(action) {\n if (action == null) {\n action = 'toggle';\n }\n if (action === 'toggle') {\n this.triggerOpenSidebar();\n }\n if (action === 'open') {\n if (!this.isOpen()) {\n this.triggerOpenSidebar();\n }\n }\n if (action === 'hide') {\n if (this.isOpen()) {\n return this.triggerOpenSidebar();\n }\n }\n};\n\nSidebar.prototype.isOpen = function() {\n return this.sidebar.is('.right-sidebar-expanded');\n};\n\nSidebar.prototype.getBlock = function(name) {\n return this.sidebar.find(\".block.\" + name);\n};\n\nexport default Sidebar;\n\n\n\n// WEBPACK FOOTER //\n// ./right_sidebar.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 { 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('project-path');\n\n gl.projectOptions[projectPath] = {\n name: $projectOptionsDataEl.data('name'),\n issuesPath: $projectOptionsDataEl.data('issues-path'),\n issuesDisabled: $projectOptionsDataEl.data('issues-disabled'),\n mrPath: $projectOptionsDataEl.data('mr-path'),\n };\n }\n\n if ($groupOptionsDataEl.length) {\n gl.groupOptions = gl.groupOptions || {};\n\n var groupPath = $groupOptionsDataEl.data('group-path');\n\n gl.groupOptions[groupPath] = {\n name: $groupOptionsDataEl.data('name'),\n issuesPath: $groupOptionsDataEl.data('issues-path'),\n mrPath: $groupOptionsDataEl.data('mr-path'),\n };\n }\n\n if ($dashboardOptionsDataEl.length) {\n gl.dashboardOptions = {\n issuesPath: $dashboardOptionsDataEl.data('issues-path'),\n mrPath: $dashboardOptionsDataEl.data('mr-path'),\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('autocomplete-path');\n this.projectId = projectId || (this.optsEl.data('autocomplete-project-id') || '');\n this.projectRef = projectRef || (this.optsEl.data('autocomplete-project-ref') || '');\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","import Mousetrap from 'mousetrap';\nimport _ from 'underscore';\nimport Sidebar from './right_sidebar';\nimport Shortcuts from './shortcuts';\nimport { CopyAsGFM } from './behaviors/copy_as_gfm';\n\nexport default class ShortcutsIssuable extends Shortcuts {\n constructor(isMergeRequest) {\n super();\n\n this.$replyField = isMergeRequest ? $('.js-main-target-form #note_note') : $('.js-main-target-form .js-vue-comment-form');\n\n Mousetrap.bind('a', () => ShortcutsIssuable.openSidebarDropdown('assignee'));\n Mousetrap.bind('m', () => ShortcutsIssuable.openSidebarDropdown('milestone'));\n Mousetrap.bind('l', () => ShortcutsIssuable.openSidebarDropdown('labels'));\n Mousetrap.bind('r', this.replyWithSelectedText.bind(this));\n Mousetrap.bind('e', ShortcutsIssuable.editIssue);\n\n if (isMergeRequest) {\n this.enabledHelp.push('.hidden-shortcut.merge_requests');\n } else {\n this.enabledHelp.push('.hidden-shortcut.issues');\n }\n }\n\n replyWithSelectedText() {\n const documentFragment = window.gl.utils.getSelectedFragment();\n\n if (!documentFragment) {\n this.$replyField.focus();\n return false;\n }\n\n const el = CopyAsGFM.transformGFMSelection(documentFragment.cloneNode(true));\n const selected = CopyAsGFM.nodeToGFM(el);\n\n if (selected.trim() === '') {\n return false;\n }\n\n const quote = _.map(selected.split('\\n'), val => `${(`> ${val}`).trim()}\\n`);\n\n // If replyField already has some content, add a newline before our quote\n const separator = (this.$replyField.val().trim() !== '' && '\\n\\n') || '';\n this.$replyField.val((a, current) => `${current}${separator}${quote.join('')}\\n`)\n .trigger('input')\n .trigger('change');\n\n // Trigger autosize\n const event = document.createEvent('Event');\n event.initEvent('autosize:update', true, false);\n this.$replyField.get(0).dispatchEvent(event);\n\n // Focus the input field\n this.$replyField.focus();\n\n return false;\n }\n\n static editIssue() {\n // Need to click the element as on issues, editing is inline\n // on merge request, editing is on a different page\n document.querySelector('.js-issuable-edit').click();\n\n return false;\n }\n\n static openSidebarDropdown(name) {\n Sidebar.instance.openDropdown(name);\n return false;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./shortcuts_issuable.js","/* eslint-disable func-names, prefer-arrow-callback, space-before-function-paren, no-var, prefer-rest-params, wrap-iife, one-var, one-var-declaration-per-line, consistent-return, no-param-reassign, max-len */\n\nimport { __ } from './locale';\nimport axios from './lib/utils/axios_utils';\nimport createFlash from './flash';\nimport FilesCommentButton from './files_comment_button';\nimport imageDiffHelper from './image_diff/helpers/index';\nimport syntaxHighlight from './syntax_highlight';\n\nconst WRAPPER = '
      ';\nconst LOADING_HTML = '';\nconst ERROR_HTML = '
      Could not load diff
      ';\nconst COLLAPSED_HTML = '
      This diff is collapsed. Click to expand it.
      ';\n\nexport default class SingleFileDiff {\n constructor(file) {\n this.file = file;\n this.toggleDiff = this.toggleDiff.bind(this);\n this.content = $('.diff-content', this.file);\n this.$toggleIcon = $('.diff-toggle-caret', this.file);\n this.diffForPath = this.content.find('[data-diff-for-path]').data('diff-for-path');\n this.isOpen = !this.diffForPath;\n if (this.diffForPath) {\n this.collapsedContent = this.content;\n this.loadingContent = $(WRAPPER).addClass('loading').html(LOADING_HTML).hide();\n this.content = null;\n this.collapsedContent.after(this.loadingContent);\n this.$toggleIcon.addClass('fa-caret-right');\n } else {\n this.collapsedContent = $(WRAPPER).html(COLLAPSED_HTML).hide();\n this.content.after(this.collapsedContent);\n this.$toggleIcon.addClass('fa-caret-down');\n }\n\n $('.js-file-title, .click-to-expand', this.file).on('click', (function (e) {\n this.toggleDiff($(e.target));\n }).bind(this));\n }\n\n toggleDiff($target, cb) {\n if (!$target.hasClass('js-file-title') && !$target.hasClass('click-to-expand') && !$target.hasClass('diff-toggle-caret')) return;\n this.isOpen = !this.isOpen;\n if (!this.isOpen && !this.hasError) {\n this.content.hide();\n this.$toggleIcon.addClass('fa-caret-right').removeClass('fa-caret-down');\n this.collapsedContent.show();\n if (typeof gl.diffNotesCompileComponents !== 'undefined') {\n gl.diffNotesCompileComponents();\n }\n } else if (this.content) {\n this.collapsedContent.hide();\n this.content.show();\n this.$toggleIcon.addClass('fa-caret-down').removeClass('fa-caret-right');\n if (typeof gl.diffNotesCompileComponents !== 'undefined') {\n gl.diffNotesCompileComponents();\n }\n } else {\n this.$toggleIcon.addClass('fa-caret-down').removeClass('fa-caret-right');\n return this.getContentHTML(cb);\n }\n }\n\n getContentHTML(cb) {\n this.collapsedContent.hide();\n this.loadingContent.show();\n\n axios.get(this.diffForPath)\n .then(({ data }) => {\n this.loadingContent.hide();\n if (data.html) {\n this.content = $(data.html);\n syntaxHighlight(this.content);\n } else {\n this.hasError = true;\n this.content = $(ERROR_HTML);\n }\n this.collapsedContent.after(this.content);\n\n if (typeof gl.diffNotesCompileComponents !== 'undefined') {\n gl.diffNotesCompileComponents();\n }\n\n const $file = $(this.file);\n FilesCommentButton.init($file);\n\n const canCreateNote = $file.closest('.files').is('[data-can-create-note]');\n imageDiffHelper.initImageDiff($file[0], canCreateNote);\n\n if (cb) cb();\n })\n .catch(() => {\n createFlash(__('An error occurred while retrieving diff'));\n });\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./single_file_diff.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","import 'deckar01-task_list';\nimport axios from './lib/utils/axios_utils';\nimport Flash from './flash';\n\nexport default class TaskList {\n constructor(options = {}) {\n this.selector = options.selector;\n this.dataType = options.dataType;\n this.fieldName = options.fieldName;\n this.onSuccess = options.onSuccess || (() => {});\n this.onError = function showFlash(e) {\n let errorMessages = '';\n\n if (e.response.data && typeof e.response.data === 'object') {\n errorMessages = e.response.data.errors.join(' ');\n }\n\n return new Flash(errorMessages || 'Update failed', 'alert');\n };\n\n this.init();\n }\n\n init() {\n // Prevent duplicate event bindings\n this.disable();\n $(`${this.selector} .js-task-list-container`).taskList('enable');\n $(document).on('tasklist:changed', `${this.selector} .js-task-list-container`, this.update.bind(this));\n }\n\n disable() {\n $(`${this.selector} .js-task-list-container`).taskList('disable');\n $(document).off('tasklist:changed', `${this.selector} .js-task-list-container`);\n }\n\n update(e) {\n const $target = $(e.target);\n const patchData = {};\n patchData[this.dataType] = {\n [this.fieldName]: $target.val(),\n };\n\n return axios.patch($target.data('update-url') || $('form.js-issuable-update').attr('action'), patchData)\n .then(({ data }) => this.onSuccess(data))\n .catch(err => this.onError(err));\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./task_list.js","/* eslint-disable func-names, space-before-function-paren, one-var, no-var, prefer-rest-params, wrap-iife, quotes, max-len, one-var-declaration-per-line, vars-on-top, prefer-arrow-callback, consistent-return, comma-dangle, object-shorthand, no-shadow, no-unused-vars, no-else-return, no-self-compare, prefer-template, no-unused-expressions, no-lonely-if, yoda, prefer-spread, no-void, camelcase, no-param-reassign */\n/* global Issuable */\n/* global emitSidebarEvent */\nimport _ from 'underscore';\nimport axios from './lib/utils/axios_utils';\n\n// TODO: remove eventHub hack after code splitting refactor\nwindow.emitSidebarEvent = window.emitSidebarEvent || $.noop;\n\nfunction UsersSelect(currentUser, els, options = {}) {\n var $els;\n this.users = this.users.bind(this);\n this.user = this.user.bind(this);\n this.usersPath = \"/autocomplete/users.json\";\n this.userPath = \"/autocomplete/users/:id.json\";\n if (currentUser != null) {\n if (typeof currentUser === 'object') {\n this.currentUser = currentUser;\n } else {\n this.currentUser = JSON.parse(currentUser);\n }\n }\n\n const { handleClick } = options;\n\n $els = $(els);\n\n if (!els) {\n $els = $('.js-user-search');\n }\n\n $els.each((function(_this) {\n return function(i, dropdown) {\n var options = {};\n var $block, $collapsedSidebar, $dropdown, $loading, $selectbox, $value, abilityName, assignTo, assigneeTemplate, collapsedAssigneeTemplate, defaultLabel, defaultNullUser, firstUser, issueURL, selectedId, selectedIdDefault, showAnyUser, showNullUser, showMenuAbove;\n $dropdown = $(dropdown);\n options.projectId = $dropdown.data('projectId');\n options.groupId = $dropdown.data('groupId');\n options.showCurrentUser = $dropdown.data('currentUser');\n options.todoFilter = $dropdown.data('todoFilter');\n options.todoStateFilter = $dropdown.data('todoStateFilter');\n showNullUser = $dropdown.data('nullUser');\n defaultNullUser = $dropdown.data('nullUserDefault');\n showMenuAbove = $dropdown.data('showMenuAbove');\n showAnyUser = $dropdown.data('any-user');\n firstUser = $dropdown.data('first-user');\n options.authorId = $dropdown.data('author-id');\n defaultLabel = $dropdown.data('default-label');\n issueURL = $dropdown.data('issueUpdate');\n $selectbox = $dropdown.closest('.selectbox');\n $block = $selectbox.closest('.block');\n abilityName = $dropdown.data('ability-name');\n $value = $block.find('.value');\n $collapsedSidebar = $block.find('.sidebar-collapsed-user');\n $loading = $block.find('.block-loading').fadeOut();\n selectedIdDefault = (defaultNullUser && showNullUser) ? 0 : null;\n selectedId = $dropdown.data('selected');\n\n if (selectedId === undefined) {\n selectedId = selectedIdDefault;\n }\n\n const assignYourself = function () {\n const unassignedSelected = $dropdown.closest('.selectbox')\n .find(`input[name='${$dropdown.data('field-name')}'][value=0]`);\n\n if (unassignedSelected) {\n unassignedSelected.remove();\n }\n\n // Save current selected user to the DOM\n const input = document.createElement('input');\n input.type = 'hidden';\n input.name = $dropdown.data('field-name');\n\n const currentUserInfo = $dropdown.data('currentUserInfo');\n\n if (currentUserInfo) {\n input.value = currentUserInfo.id;\n input.dataset.meta = _.escape(currentUserInfo.name);\n } else if (_this.currentUser) {\n input.value = _this.currentUser.id;\n }\n\n if ($selectbox) {\n $dropdown.parent().before(input);\n } else {\n $dropdown.after(input);\n }\n };\n\n if ($block[0]) {\n $block[0].addEventListener('assignYourself', assignYourself);\n }\n\n const getSelectedUserInputs = function() {\n return $selectbox\n .find(`input[name=\"${$dropdown.data('field-name')}\"]`);\n };\n\n const getSelected = function() {\n return getSelectedUserInputs()\n .map((index, input) => parseInt(input.value, 10))\n .get();\n };\n\n const checkMaxSelect = function() {\n const maxSelect = $dropdown.data('max-select');\n if (maxSelect) {\n const selected = getSelected();\n\n if (selected.length > maxSelect) {\n const firstSelectedId = selected[0];\n const firstSelected = $dropdown.closest('.selectbox')\n .find(`input[name='${$dropdown.data('field-name')}'][value=${firstSelectedId}]`);\n\n firstSelected.remove();\n emitSidebarEvent('sidebar.removeAssignee', {\n id: firstSelectedId,\n });\n }\n }\n };\n\n const getMultiSelectDropdownTitle = function(selectedUser, isSelected) {\n const selectedUsers = getSelected()\n .filter(u => u !== 0);\n\n const firstUser = getSelectedUserInputs()\n .map((index, input) => ({\n name: input.dataset.meta,\n value: parseInt(input.value, 10),\n }))\n .filter(u => u.id !== 0)\n .get(0);\n\n if (selectedUsers.length === 0) {\n return '未指派';\n } else if (selectedUsers.length === 1) {\n return firstUser.name;\n } else if (isSelected) {\n const otherSelected = selectedUsers.filter(s => s !== selectedUser.id);\n return `${selectedUser.name} + ${otherSelected.length} more`;\n } else {\n return `${firstUser.name} + ${selectedUsers.length - 1} more`;\n }\n };\n\n $('.assign-to-me-link').on('click', (e) => {\n e.preventDefault();\n $(e.currentTarget).hide();\n\n if ($dropdown.data('multiSelect')) {\n assignYourself();\n checkMaxSelect();\n\n const currentUserInfo = $dropdown.data('currentUserInfo');\n $dropdown.find('.dropdown-toggle-text').text(getMultiSelectDropdownTitle(currentUserInfo)).removeClass('is-default');\n } else {\n const $input = $(`input[name=\"${$dropdown.data('field-name')}\"]`);\n $input.val(gon.current_user_id);\n selectedId = $input.val();\n $dropdown.find('.dropdown-toggle-text').text(gon.current_user_fullname).removeClass('is-default');\n }\n });\n\n $block.on('click', '.js-assign-yourself', (e) => {\n e.preventDefault();\n return assignTo(_this.currentUser.id);\n });\n\n assignTo = function(selected) {\n var data;\n data = {};\n data[abilityName] = {};\n data[abilityName].assignee_id = selected != null ? selected : null;\n $loading.removeClass('hidden').fadeIn();\n $dropdown.trigger('loading.gl.dropdown');\n\n return axios.put(issueURL, data)\n .then(({ data }) => {\n var user;\n $dropdown.trigger('loaded.gl.dropdown');\n $loading.fadeOut();\n if (data.assignee) {\n user = {\n name: data.assignee.name,\n username: data.assignee.username,\n avatar: data.assignee.avatar_url\n };\n } else {\n user = {\n name: '未指派',\n username: '',\n avatar: ''\n };\n }\n $value.html(assigneeTemplate(user));\n $collapsedSidebar.attr('title', _.escape(user.name)).tooltip('fixTitle');\n return $collapsedSidebar.html(collapsedAssigneeTemplate(user));\n });\n };\n collapsedAssigneeTemplate = _.template('<% if( avatar ) { %> \"> \"\"\"> <% } else { %> <% } %>');\n assigneeTemplate = _.template('<% if (username) { %> \"> <% if( avatar ) { %> \"\"\"> <% } %> <%- name %> @<%- username %> <% } else { %> No assignee - assign yourself <% } %>');\n return $dropdown.glDropdown({\n showMenuAbove: showMenuAbove,\n data: function(term, callback) {\n return _this.users(term, options, function(users) {\n // GitLabDropdownFilter returns this.instance\n // GitLabDropdownRemote returns this.options.instance\n const glDropdown = this.instance || this.options.instance;\n glDropdown.options.processData(term, users, callback);\n }.bind(this));\n },\n processData: function(term, data, callback) {\n let users = data;\n\n // Only show assigned user list when there is no search term\n if ($dropdown.hasClass('js-multiselect') && term.length === 0) {\n const selectedInputs = getSelectedUserInputs();\n\n // Potential duplicate entries when dealing with issue board\n // because issue board is also managed by vue\n const selectedUsers = _.uniq(selectedInputs, false, a => a.value)\n .filter((input) => {\n const userId = parseInt(input.value, 10);\n const inUsersArray = users.find(u => u.id === userId);\n\n return !inUsersArray && userId !== 0;\n })\n .map((input) => {\n const userId = parseInt(input.value, 10);\n const { avatarUrl, avatar_url, name, username } = input.dataset;\n return {\n avatar_url: avatarUrl || avatar_url,\n id: userId,\n name,\n username,\n };\n });\n\n users = data.concat(selectedUsers);\n }\n\n let anyUser;\n let index;\n let j;\n let len;\n let name;\n let obj;\n let showDivider;\n if (term.length === 0) {\n showDivider = 0;\n if (firstUser) {\n // Move current user to the front of the list\n for (index = j = 0, len = users.length; j < len; index = (j += 1)) {\n obj = users[index];\n if (obj.username === firstUser) {\n users.splice(index, 1);\n users.unshift(obj);\n break;\n }\n }\n }\n if (showNullUser) {\n showDivider += 1;\n users.unshift({\n beforeDivider: true,\n name: '未指派',\n id: 0\n });\n }\n if (showAnyUser) {\n showDivider += 1;\n name = showAnyUser;\n if (name === true) {\n name = 'Any User';\n }\n anyUser = {\n beforeDivider: true,\n name: name,\n id: null\n };\n users.unshift(anyUser);\n }\n\n if (showDivider) {\n users.splice(showDivider, 0, 'divider');\n }\n\n if ($dropdown.hasClass('js-multiselect')) {\n const selected = getSelected().filter(i => i !== 0);\n\n if (selected.length > 0) {\n if ($dropdown.data('dropdown-header')) {\n showDivider += 1;\n users.splice(showDivider, 0, {\n header: $dropdown.data('dropdown-header'),\n });\n }\n\n const selectedUsers = users\n .filter(u => selected.indexOf(u.id) !== -1)\n .sort((a, b) => a.name > b.name);\n\n users = users.filter(u => selected.indexOf(u.id) === -1);\n\n selectedUsers.forEach((selectedUser) => {\n showDivider += 1;\n users.splice(showDivider, 0, selectedUser);\n });\n\n users.splice(showDivider + 1, 0, 'divider');\n }\n }\n }\n\n callback(users);\n if (showMenuAbove) {\n $dropdown.data('glDropdown').positionMenuAbove();\n }\n },\n filterable: true,\n filterRemote: true,\n search: {\n fields: ['name', 'username']\n },\n selectable: true,\n fieldName: $dropdown.data('field-name'),\n toggleLabel: function(selected, el, glDropdown) {\n const inputValue = glDropdown.filterInput.val();\n\n if (this.multiSelect && inputValue === '') {\n // Remove non-users from the fullData array\n const users = glDropdown.filteredFullData();\n const callback = glDropdown.parseData.bind(glDropdown);\n\n // Update the data model\n this.processData(inputValue, users, callback);\n }\n\n if (this.multiSelect) {\n return getMultiSelectDropdownTitle(selected, $(el).hasClass('is-active'));\n }\n\n if (selected && 'id' in selected && $(el).hasClass('is-active')) {\n $dropdown.find('.dropdown-toggle-text').removeClass('is-default');\n if (selected.text) {\n return selected.text;\n } else {\n return selected.name;\n }\n } else {\n $dropdown.find('.dropdown-toggle-text').addClass('is-default');\n return defaultLabel;\n }\n },\n defaultLabel: defaultLabel,\n hidden: function(e) {\n if ($dropdown.hasClass('js-multiselect')) {\n emitSidebarEvent('sidebar.saveAssignees');\n }\n\n if (!$dropdown.data('always-show-selectbox')) {\n $selectbox.hide();\n\n // Recalculate where .value is because vue might have changed it\n $block = $selectbox.closest('.block');\n $value = $block.find('.value');\n // display:block overrides the hide-collapse rule\n $value.css('display', '');\n }\n },\n multiSelect: $dropdown.hasClass('js-multiselect'),\n inputMeta: $dropdown.data('input-meta'),\n clicked: function(options) {\n const { $el, e, isMarking } = options;\n const user = options.selectedObj;\n\n if ($dropdown.hasClass('js-multiselect')) {\n const isActive = $el.hasClass('is-active');\n const previouslySelected = $dropdown.closest('.selectbox')\n .find(\"input[name='\" + ($dropdown.data('field-name')) + \"'][value!=0]\");\n\n // Enables support for limiting the number of users selected\n // Automatically removes the first on the list if more users are selected\n checkMaxSelect();\n\n if (user.beforeDivider && user.name.toLowerCase() === '未指派') {\n // Unassigned selected\n previouslySelected.each((index, element) => {\n const id = parseInt(element.value, 10);\n element.remove();\n });\n emitSidebarEvent('sidebar.removeAllAssignees');\n } else if (isActive) {\n // user selected\n emitSidebarEvent('sidebar.addAssignee', user);\n\n // Remove unassigned selection (if it was previously selected)\n const unassignedSelected = $dropdown.closest('.selectbox')\n .find(\"input[name='\" + ($dropdown.data('field-name')) + \"'][value=0]\");\n\n if (unassignedSelected) {\n unassignedSelected.remove();\n }\n } else {\n if (previouslySelected.length === 0) {\n // Select unassigned because there is no more selected users\n this.addInput($dropdown.data('field-name'), 0, {});\n }\n\n // User unselected\n emitSidebarEvent('sidebar.removeAssignee', user);\n }\n\n if (getSelected().find(u => u === gon.current_user_id)) {\n $('.assign-to-me-link').hide();\n } else {\n $('.assign-to-me-link').show();\n }\n }\n\n var isIssueIndex, isMRIndex, page, selected;\n page = $('body').attr('data-page');\n isIssueIndex = page === 'projects:issues:index';\n isMRIndex = (page === page && page === 'projects:merge_requests:index');\n if ($dropdown.hasClass('js-filter-bulk-update') || $dropdown.hasClass('js-issuable-form-dropdown')) {\n e.preventDefault();\n\n const isSelecting = (user.id !== selectedId);\n selectedId = isSelecting ? user.id : selectedIdDefault;\n\n if (selectedId === gon.current_user_id) {\n $('.assign-to-me-link').hide();\n } else {\n $('.assign-to-me-link').show();\n }\n return;\n }\n if ($el.closest('.add-issues-modal').length) {\n gl.issueBoards.ModalStore.store.filter[$dropdown.data('field-name')] = user.id;\n } else if (handleClick) {\n e.preventDefault();\n handleClick(user, isMarking);\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-multiselect')) {\n selected = $dropdown.closest('.selectbox').find(\"input[name='\" + ($dropdown.data('field-name')) + \"']\").val();\n return assignTo(selected);\n }\n\n // Automatically close dropdown after assignee is selected\n // since CE has no multiple assignees\n // EE does not have a max-select\n if ($dropdown.data('max-select') &&\n getSelected().length === $dropdown.data('max-select')) {\n // Close the dropdown\n $dropdown.dropdown('toggle');\n }\n },\n id: function (user) {\n return user.id;\n },\n opened: function(e) {\n const $el = $(e.currentTarget);\n const selected = getSelected();\n if ($dropdown.hasClass('js-issue-board-sidebar') && selected.length === 0) {\n this.addInput($dropdown.data('field-name'), 0, {});\n }\n $el.find('.is-active').removeClass('is-active');\n\n function highlightSelected(id) {\n $el.find(`li[data-user-id=\"${id}\"] .dropdown-menu-user-link`).addClass('is-active');\n }\n\n if (selected.length > 0) {\n getSelected().forEach(selectedId => highlightSelected(selectedId));\n } else if ($dropdown.hasClass('js-issue-board-sidebar')) {\n highlightSelected(0);\n } else {\n highlightSelected(selectedId);\n }\n },\n updateLabel: $dropdown.data('dropdown-title'),\n renderRow: function(user) {\n var avatar, img, listClosingTags, listWithName, listWithUserName, username;\n username = user.username ? \"@\" + user.username : \"\";\n avatar = user.avatar_url ? user.avatar_url : gon.default_avatar_url;\n\n let selected = false;\n\n if (this.multiSelect) {\n selected = getSelected().find(u => user.id === u);\n\n const fieldName = this.fieldName;\n const field = $dropdown.closest('.selectbox').find(\"input[name='\" + fieldName + \"'][value='\" + user.id + \"']\");\n\n if (field.length) {\n selected = true;\n }\n } else {\n selected = user.id === selectedId;\n }\n\n img = \"\";\n if (user.beforeDivider != null) {\n `
    • ${_.escape(user.name)}
    • `;\n } else {\n img = \"\";\n }\n\n return `\n
    • \n \n ${img}\n \n ${_.escape(user.name)}\n \n ${username ? `${username}` : ''}\n \n
    • \n `;\n }\n });\n };\n })(this));\n $('.ajax-users-select').each((function(_this) {\n return function(i, select) {\n var firstUser, showAnyUser, showEmailUser, showNullUser;\n var options = {};\n options.skipLdap = $(select).hasClass('skip_ldap');\n options.projectId = $(select).data('project-id');\n options.groupId = $(select).data('group-id');\n options.showCurrentUser = $(select).data('current-user');\n options.authorId = $(select).data('author-id');\n options.skipUsers = $(select).data('skip-users');\n showNullUser = $(select).data('null-user');\n showAnyUser = $(select).data('any-user');\n showEmailUser = $(select).data('email-user');\n firstUser = $(select).data('first-user');\n return $(select).select2({\n placeholder: \"Search for a user\",\n multiple: $(select).hasClass('multiselect'),\n minimumInputLength: 0,\n query: function(query) {\n return _this.users(query.term, options, function(users) {\n var anyUser, data, emailUser, index, j, len, name, nullUser, obj, ref;\n data = {\n results: users\n };\n if (query.term.length === 0) {\n if (firstUser) {\n // Move current user to the front of the list\n ref = data.results;\n for (index = j = 0, len = ref.length; j < len; index = (j += 1)) {\n obj = ref[index];\n if (obj.username === firstUser) {\n data.results.splice(index, 1);\n data.results.unshift(obj);\n break;\n }\n }\n }\n if (showNullUser) {\n nullUser = {\n name: '未指派',\n id: 0\n };\n data.results.unshift(nullUser);\n }\n if (showAnyUser) {\n name = showAnyUser;\n if (name === true) {\n name = 'Any User';\n }\n anyUser = {\n name: name,\n id: null\n };\n data.results.unshift(anyUser);\n }\n }\n if (showEmailUser && data.results.length === 0 && query.term.match(/^[^@]+@[^@]+$/)) {\n var trimmed = query.term.trim();\n emailUser = {\n name: \"邀请 \\\"\" + query.term + \"\\\" by email\",\n username: trimmed,\n id: trimmed,\n invite: true\n };\n data.results.unshift(emailUser);\n }\n return query.callback(data);\n });\n },\n initSelection: function() {\n var args;\n args = 1 <= arguments.length ? [].slice.call(arguments, 0) : [];\n return _this.initSelection.apply(_this, args);\n },\n formatResult: function() {\n var args;\n args = 1 <= arguments.length ? [].slice.call(arguments, 0) : [];\n return _this.formatResult.apply(_this, args);\n },\n formatSelection: function() {\n var args;\n args = 1 <= arguments.length ? [].slice.call(arguments, 0) : [];\n return _this.formatSelection.apply(_this, args);\n },\n dropdownCssClass: \"ajax-users-dropdown\",\n // we do not want to escape markup since we are displaying html in results\n escapeMarkup: function(m) {\n return m;\n }\n });\n };\n })(this));\n}\n\nUsersSelect.prototype.initSelection = function(element, callback) {\n var id, nullUser;\n id = $(element).val();\n if (id === \"0\") {\n nullUser = {\n name: '未指派'\n };\n return callback(nullUser);\n } else if (id !== \"\") {\n return this.user(id, callback);\n }\n};\n\nUsersSelect.prototype.formatResult = function(user) {\n var avatar;\n if (user.avatar_url) {\n avatar = user.avatar_url;\n } else {\n avatar = gon.default_avatar_url;\n }\n return \"
      \";\n};\n\nUsersSelect.prototype.formatSelection = function(user) {\n return _.escape(user.name);\n};\n\nUsersSelect.prototype.user = function(user_id, callback) {\n if (!/^\\d+$/.test(user_id)) {\n return false;\n }\n\n var url;\n url = this.buildUrl(this.userPath);\n url = url.replace(':id', user_id);\n return axios.get(url)\n .then(({ data }) => {\n callback(data);\n });\n};\n\n// Return users list. Filtered by query\n// Only active users retrieved\nUsersSelect.prototype.users = function(query, options, callback) {\n const url = this.buildUrl(this.usersPath);\n const params = {\n search: query,\n active: true,\n project_id: options.projectId || null,\n group_id: options.groupId || null,\n skip_ldap: options.skipLdap || null,\n todo_filter: options.todoFilter || null,\n todo_state_filter: options.todoStateFilter || null,\n current_user: options.showCurrentUser || null,\n author_id: options.authorId || null,\n skip_users: options.skipUsers || null\n };\n return axios.get(url, { params })\n .then(({ data }) => {\n callback(data);\n });\n};\n\nUsersSelect.prototype.buildUrl = function(url) {\n if (gon.relative_url_root != null) {\n url = gon.relative_url_root.replace(/\\/$/, '') + url;\n }\n return url;\n};\n\nexport default UsersSelect;\n\n\n\n// WEBPACK FOOTER //\n// ./users_select.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 = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\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 = ","var normalizeComponent = require(\"!../../../../../node_modules/vue-loader/lib/component-normalizer\")\n/* 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 __vue_template__ 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\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\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 = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\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 = ","var normalizeComponent = require(\"!../../../../../node_modules/vue-loader/lib/component-normalizer\")\n/* 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 __vue_template__ 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\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\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","/* eslint-disable func-names, space-before-function-paren, wrap-iife, prefer-arrow-callback, no-unused-vars, consistent-return, camelcase, comma-dangle, max-len, class-methods-use-this */\n\n// Zen Mode (full screen) textarea\n//\n/*= provides zen_mode:enter */\n/*= provides zen_mode:leave */\n\nimport 'vendor/jquery.scrollTo';\nimport Dropzone from 'dropzone';\nimport Mousetrap from 'mousetrap';\nimport 'mousetrap/plugins/pause/mousetrap-pause';\n\nDropzone.autoDiscover = false;\n\n//\n// ### Events\n//\n// `zen_mode:enter`\n//\n// Fired when the \"Edit in fullscreen\" link is clicked.\n//\n// **Synchronicity** Sync\n// **Bubbles** Yes\n// **Cancelable** No\n// **Target** a.js-zen-enter\n//\n// `zen_mode:leave`\n//\n// Fired when the \"Leave Fullscreen\" link is clicked.\n//\n// **Synchronicity** Sync\n// **Bubbles** Yes\n// **Cancelable** No\n// **Target** a.js-zen-leave\n//\n\nexport default class ZenMode {\n constructor() {\n this.active_backdrop = null;\n this.active_textarea = null;\n $(document).on('click', '.js-zen-enter', function(e) {\n e.preventDefault();\n return $(e.currentTarget).trigger('zen_mode:enter');\n });\n $(document).on('click', '.js-zen-leave', function(e) {\n e.preventDefault();\n return $(e.currentTarget).trigger('zen_mode:leave');\n });\n $(document).on('zen_mode:enter', (function(_this) {\n return function(e) {\n return _this.enter($(e.target).closest('.md-area').find('.zen-backdrop'));\n };\n })(this));\n $(document).on('zen_mode:leave', (function(_this) {\n return function(e) {\n return _this.exit();\n };\n })(this));\n $(document).on('keydown', function(e) {\n // Esc\n if (e.keyCode === 27) {\n e.preventDefault();\n return $(document).trigger('zen_mode:leave');\n }\n });\n }\n\n enter(backdrop) {\n Mousetrap.pause();\n this.active_backdrop = $(backdrop);\n this.active_backdrop.addClass('fullscreen');\n this.active_textarea = this.active_backdrop.find('textarea');\n // Prevent a user-resized textarea from persisting to fullscreen\n this.active_textarea.removeAttr('style');\n this.active_textarea.focus();\n }\n\n exit() {\n if (this.active_textarea) {\n Mousetrap.unpause();\n this.active_textarea.closest('.zen-backdrop').removeClass('fullscreen');\n this.scrollTo(this.active_textarea);\n this.active_textarea = null;\n this.active_backdrop = null;\n\n const $dropzone = $('.div-dropzone');\n if ($dropzone && !$dropzone.hasClass('js-invalid-dropzone')) {\n Dropzone.forElement('.div-dropzone').enable();\n }\n }\n }\n\n scrollTo(zen_area) {\n return $.scrollTo(zen_area, 0, {\n offset: -150\n });\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./zen_mode.js"],"sourceRoot":""}