{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/jquery/src/core.js","webpack:///./node_modules/jquery/src/var/isFunction.js","webpack:///./node_modules/jquery/src/var/document.js","webpack:///./node_modules/jquery/src/selector.js","webpack:///./node_modules/codemirror/lib/codemirror.js","webpack:///./node_modules/jquery/src/core/init.js","webpack:///./node_modules/jquery/src/data/var/dataPriv.js","webpack:///./node_modules/@stimulus/core/dist/src/event_listener.js","webpack:///./node_modules/@stimulus/core/dist/src/dispatcher.js","webpack:///./node_modules/@stimulus/core/dist/src/action_descriptor.js","webpack:///./node_modules/@stimulus/core/dist/src/action.js","webpack:///./node_modules/@stimulus/core/dist/src/binding.js","webpack:///./node_modules/@stimulus/mutation-observers/dist/src/element_observer.js","webpack:///./node_modules/@stimulus/mutation-observers/dist/src/attribute_observer.js","webpack:///./node_modules/@stimulus/multimap/dist/src/set_operations.js","webpack:///./node_modules/@stimulus/multimap/dist/src/multimap.js","webpack:///./node_modules/@stimulus/multimap/dist/src/indexed_multimap.js","webpack:///./node_modules/@stimulus/mutation-observers/dist/src/token_list_observer.js","webpack:///./node_modules/@stimulus/mutation-observers/dist/src/value_list_observer.js","webpack:///./node_modules/@stimulus/core/dist/src/binding_observer.js","webpack:///./node_modules/@stimulus/core/dist/src/context.js","webpack:///./node_modules/@stimulus/core/dist/src/definition.js","webpack:///./node_modules/@stimulus/core/dist/src/module.js","webpack:///./node_modules/@stimulus/core/dist/src/data_map.js","webpack:///./node_modules/@stimulus/core/dist/src/selectors.js","webpack:///./node_modules/@stimulus/core/dist/src/target_set.js","webpack:///./node_modules/@stimulus/core/dist/src/scope.js","webpack:///./node_modules/@stimulus/core/dist/src/scope_observer.js","webpack:///./node_modules/@stimulus/core/dist/src/router.js","webpack:///./node_modules/@stimulus/core/dist/src/schema.js","webpack:///./node_modules/@stimulus/core/dist/src/application.js","webpack:///./node_modules/@stimulus/core/dist/src/target_properties.js","webpack:///./node_modules/@stimulus/core/dist/src/controller.js","webpack:///./node_modules/jquery/src/core/nodeName.js","webpack:///./node_modules/jquery/src/var/rnothtmlwhite.js","webpack:///(webpack)/buildin/module.js","webpack:///./node_modules/jquery/src/var/support.js","webpack:///./node_modules/jquery/src/core/access.js","webpack:///./node_modules/jquery/src/ajax.js","webpack:///./node_modules/jquery/src/core/toType.js","webpack:///./node_modules/jquery/src/traversing.js","webpack:///./node_modules/jquery/src/deferred.js","webpack:///./node_modules/jquery/src/event.js","webpack:///./node_modules/jquery/src/jquery.js","webpack:///./node_modules/jquery/src/var/arr.js","webpack:///./node_modules/jquery/src/var/isWindow.js","webpack:///./node_modules/jquery/src/core/camelCase.js","webpack:///./node_modules/jquery/src/css.js","webpack:///./node_modules/jquery/src/var/slice.js","webpack:///./node_modules/jquery/src/var/class2type.js","webpack:///./node_modules/jquery/src/data/var/acceptData.js","webpack:///./node_modules/jquery/src/core/isAttached.js","webpack:///./node_modules/jquery/src/var/documentElement.js","webpack:///./node_modules/jquery/src/manipulation.js","webpack:///./node_modules/jquery/src/var/indexOf.js","webpack:///./node_modules/jquery/src/var/hasOwn.js","webpack:///./node_modules/jquery/src/callbacks.js","webpack:///./node_modules/jquery/src/queue.js","webpack:///./node_modules/jquery/src/effects.js","webpack:///./node_modules/jquery/src/var/rcssNum.js","webpack:///./node_modules/jquery/src/css/var/cssExpand.js","webpack:///./node_modules/jquery/src/var/rcheckableType.js","webpack:///./node_modules/jquery/src/css/var/rnumnonpx.js","webpack:///./node_modules/jquery/src/css/support.js","webpack:///./node_modules/jquery/src/attributes/support.js","webpack:///./node_modules/jquery/src/core/stripAndCollapse.js","webpack:///./node_modules/jquery/src/event/trigger.js","webpack:///./node_modules/jquery/src/var/getProto.js","webpack:///./node_modules/jquery/src/var/flat.js","webpack:///./node_modules/jquery/src/var/push.js","webpack:///./node_modules/jquery/src/var/toString.js","webpack:///./node_modules/jquery/src/var/fnToString.js","webpack:///./node_modules/jquery/src/core/DOMEval.js","webpack:///./node_modules/jquery/src/traversing/var/rneedsContext.js","webpack:///./node_modules/jquery/src/core/var/rsingleTag.js","webpack:///./node_modules/jquery/src/traversing/findFilter.js","webpack:///./node_modules/jquery/src/core/ready.js","webpack:///./node_modules/jquery/src/data/Data.js","webpack:///./node_modules/jquery/src/data/var/dataUser.js","webpack:///./node_modules/jquery/src/var/pnum.js","webpack:///./node_modules/jquery/src/css/var/isHiddenWithinTree.js","webpack:///./node_modules/jquery/src/css/adjustCSS.js","webpack:///./node_modules/jquery/src/manipulation/var/rtagName.js","webpack:///./node_modules/jquery/src/manipulation/var/rscriptType.js","webpack:///./node_modules/jquery/src/manipulation/wrapMap.js","webpack:///./node_modules/jquery/src/manipulation/support.js","webpack:///./node_modules/jquery/src/manipulation/getAll.js","webpack:///./node_modules/jquery/src/manipulation/setGlobalEval.js","webpack:///./node_modules/jquery/src/manipulation/buildFragment.js","webpack:///./node_modules/jquery/src/css/var/getStyles.js","webpack:///./node_modules/jquery/src/css/curCSS.js","webpack:///./node_modules/jquery/src/css/addGetHookIf.js","webpack:///./node_modules/jquery/src/css/finalPropName.js","webpack:///./node_modules/jquery/src/attributes/prop.js","webpack:///./node_modules/jquery/src/ajax/var/nonce.js","webpack:///./node_modules/jquery/src/ajax/var/rquery.js","webpack:///./node_modules/jquery/src/core/parseXML.js","webpack:///./node_modules/jquery/src/serialize.js","webpack:///./node_modules/jquery/src/core/parseHTML.js","webpack:///./node_modules/codemirror/mode/markdown/markdown.js","webpack:///./node_modules/codemirror/mode/xml/xml.js","webpack:///./node_modules/codemirror/mode/meta.js","webpack:///./node_modules/codemirror/addon/mode/overlay.js","webpack:///./app/javascript/src/controllers/index.js","webpack:///./node_modules/@stimulus/webpack-helpers/dist/index.js","webpack:///./app/javascript/packs/application.js","webpack:///./node_modules/@rails/ujs/lib/assets/compiled/rails-ujs.js","webpack:///./node_modules/jquery/src/var/ObjectFunctionString.js","webpack:///./node_modules/jquery/src/selector-sizzle.js","webpack:///./node_modules/jquery/external/sizzle/dist/sizzle.js","webpack:///./node_modules/jquery/src/traversing/var/dir.js","webpack:///./node_modules/jquery/src/traversing/var/siblings.js","webpack:///./node_modules/jquery/src/deferred/exceptionHook.js","webpack:///./node_modules/jquery/src/core/readyException.js","webpack:///./node_modules/jquery/src/data.js","webpack:///./node_modules/jquery/src/queue/delay.js","webpack:///./node_modules/jquery/src/css/showHide.js","webpack:///./node_modules/jquery/src/css/var/swap.js","webpack:///./node_modules/jquery/src/css/var/rboxStyle.js","webpack:///./node_modules/jquery/src/effects/Tween.js","webpack:///./node_modules/jquery/src/attributes.js","webpack:///./node_modules/jquery/src/attributes/attr.js","webpack:///./node_modules/jquery/src/attributes/classes.js","webpack:///./node_modules/jquery/src/attributes/val.js","webpack:///./node_modules/jquery/src/event/focusin.js","webpack:///./node_modules/jquery/src/event/support.js","webpack:///./node_modules/jquery/src/manipulation/_evalUrl.js","webpack:///./node_modules/jquery/src/ajax/var/location.js","webpack:///./node_modules/jquery/src/wrap.js","webpack:///./node_modules/jquery/src/css/hiddenVisibleSelectors.js","webpack:///./node_modules/jquery/src/ajax/xhr.js","webpack:///./node_modules/jquery/src/ajax/script.js","webpack:///./node_modules/jquery/src/ajax/jsonp.js","webpack:///./node_modules/jquery/src/ajax/load.js","webpack:///./node_modules/jquery/src/core/support.js","webpack:///./node_modules/jquery/src/effects/animatedSelector.js","webpack:///./node_modules/jquery/src/offset.js","webpack:///./node_modules/jquery/src/dimensions.js","webpack:///./node_modules/jquery/src/deprecated.js","webpack:///./node_modules/jquery/src/deprecated/ajax-event-alias.js","webpack:///./node_modules/jquery/src/deprecated/event.js","webpack:///./node_modules/jquery/src/exports/amd.js","webpack:///./node_modules/jquery/src/exports/global.js","webpack:///./node_modules/turbolinks/dist/turbolinks.js","webpack:///./node_modules/@rails/activestorage/app/assets/javascripts/activestorage.js","webpack:///./app/javascript/channels/index.js","webpack:///./app/javascript/channels sync _channel\\.js$","webpack:///./node_modules/jquery/dist/jquery.js","webpack:///./app/javascript/src/controllers sync \\.js$","webpack:///./app/javascript/src/controllers/markdown_controller.js","webpack:///./node_modules/codemirror/mode/gfm/gfm.js","webpack:///./app/javascript/src/controllers/nav_controller.js","webpack:///./app/javascript/src/controllers/toc_controller.js","webpack:///./app/javascript/src/controllers/twig_controller.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","_typeof","iterator","obj","constructor","arr","getProto","_slice","flat","push","indexOf","class2type","toString","hasOwn","fnToString","ObjectFunctionString","support","isFunction","isWindow","DOMEval","toType","version","jQuery","selector","context","fn","init","isArrayLike","length","type","jquery","toArray","this","num","pushStack","elems","ret","merge","prevObject","each","callback","map","elem","slice","apply","arguments","first","eq","last","even","grep","_elem","odd","len","j","end","sort","splice","extend","options","src","copy","copyIsArray","clone","target","deep","isPlainObject","Array","isArray","undefined","expando","Math","random","replace","isReady","error","msg","Error","noop","proto","Ctor","isEmptyObject","globalEval","code","doc","nonce","makeArray","results","inArray","second","invert","matches","callbackExpect","arg","guid","split","_i","toLowerCase","nodeType","item","window","document","factory","userAgent","navigator","platform","gecko","test","ie_upto10","ie_11up","exec","edge","ie","ie_version","documentMode","webkit","qtwebkit","chrome","presto","safari","vendor","mac_geMountainLion","phantom","ios","maxTouchPoints","android","mobile","mac","chromeOS","windows","presto_version","match","Number","flipCtrlCmd","captureRightClick","classTest","cls","RegExp","range","rmClass","node","current","className","after","index","removeChildren","e","count","childNodes","removeChild","firstChild","removeChildrenAndAdd","parent","appendChild","elt","tag","content","style","createElement","cssText","createTextNode","eltP","setAttribute","contains","child","parentNode","host","activeElt","activeElement","body","shadowRoot","addClass","joinClasses","a","b","as","createRange","start","endNode","setEnd","setStart","createTextRange","moveToElementText","collapse","moveEnd","moveStart","selectInput","select","f","args","copyObj","overwrite","prop","countColumn","string","tabSize","startIndex","startValue","search","nextTab","selectionStart","selectionEnd","_e","Delayed","id","time","handler","onTimeout","array","self","Date","setTimeout","set","ms","clearTimeout","Pass","sel_dontScroll","scroll","sel_mouse","origin","sel_move","findColumn","goal","pos","col","skipped","min","spaceStrs","spaceStr","lst","out","nothing","createObj","base","props","inst","nonASCIISingleCaseWordChar","isWordCharBasic","ch","toUpperCase","isWordChar","helper","source","isEmpty","extendingChars","isExtendingChar","charCodeAt","skipExtendingChars","str","dir","charAt","findFirst","pred","from","to","midF","mid","ceil","floor","bidiOther","getBidiPartAt","order","sticky","found","cur","bidiOrdering","bidiRE","isNeutral","isStrong","countsAsLeft","countsAsNum","BidiSpan","level","direction","outerType","types","i$1","prev","i$2","type$1","i$3","prev$1","type$2","i$4","type$3","i$5","cur$1","type$4","i$6","end$1","before","replace$1","j$1","i$7","at","isRTL","j$2","nstart","unshift","reverse","getOrder","line","text","noHandlers","on","emitter","addEventListener","attachEvent","_handlers","concat","getHandlers","off","removeEventListener","detachEvent","signal","handlers","signalDOMEvent","cm","override","preventDefault","defaultPrevented","e_defaultPrevented","codemirrorIgnore","signalCursorActivity","cursorActivity","curOp","cursorActivityHandlers","hasHandler","eventMixin","ctor","e_preventDefault","returnValue","e_stopPropagation","stopPropagation","cancelBubble","e_stop","e_target","srcElement","e_button","which","button","ctrlKey","zwspSupported","badBidiRects","dragAndDrop","div","zeroWidthElement","measure","offsetHeight","offsetWidth","hasBadBidiRects","txt","r0","getBoundingClientRect","r1","left","right","splitLinesAuto","result","nl","rt","hasSelection","getSelection","te","ownerDocument","selection","parentElement","compareEndPoints","hasCopyEvent","oncopy","badZoomedRects","modes","mimeModes","defineMode","dependencies","resolveMode","spec","getMode","mfactory","modeObj","modeExtensions","exts","helperType","modeProps","prop$1","extendMode","properties","copyState","state","nstate","val","innerMode","info","startState","a1","a2","StringStream","lineOracle","lastColumnPos","lastColumnValue","lineStart","getLine","size","chunk","lines","children","sz","chunkSize","getBetween","iter","getLines","updateLineHeight","height","diff","lineNo","no","_lineAtHeight","h","outer","lh","isLine","lineNumberFor","String","lineNumberFormatter","firstLineNumber","Pos","cmp","equalCursorPos","copyPos","x","maxPos","minPos","clipLine","max","_clipPos","linelen","clipToLen","clipPosArray","eol","sol","peek","next","eat","eatWhile","eatSpace","skipToEnd","skipTo","backUp","column","indentation","pattern","consume","caseInsensitive","cased","substr","hideFirstChars","inner","lookAhead","oracle","baseToken","SavedContext","Context","maxLookAhead","baseTokens","baseTokenPos","highlightLine","forceToEnd","st","modeGen","lineClasses","runMode","loop","overlay","overlays","i_end","opaque","styles","classes","bgClass","textClass","getLineStyles","updateFrontier","getContextBefore","resetState","maxHighlightLength","stateAfter","save","styleClasses","highlightFrontier","modeFrontier","precise","display","minindent","minline","lim","indented","findStartLine","saved","fromSaved","processLine","viewFrom","viewTo","nextLine","startAt","stream","callBlankLine","readToken","blankLine","token","Token","takeToken","asArray","tokens","extractLineClasses","output","lineClass","flattenSpans","curStart","curStyle","addModeClass","mName","sawReadOnlySpans","sawCollapsedSpans","MarkedSpan","marker","getMarkedSpanFor","spans","span","removeMarkedSpan","stretchSpansOverChange","change","full","oldFirst","markedSpans","oldLast","startCh","endCh","isInsert","old","nw","inclusiveLeft","insertLeft","endsAfter","inclusiveRight","markedSpansBefore","startsBefore","markedSpansAfter","sameLine","offset","span$1","clearEmptySpans","newMarkers","gapMarkers","gap","clearWhenEmpty","detachMarkedSpans","detachLine","attachMarkedSpans","attachLine","extraLeft","extraRight","compareCollapsedMarkers","lenDiff","aPos","find","bPos","fromCmp","toCmp","collapsedSpanAtSide","sps","sp","collapsed","collapsedSpanAtStart","collapsedSpanAtEnd","collapsedSpanAround","conflictingCollapsedRange","visualLine","merged","visualLineNo","lineN","vis","visualLineEndNo","lastLine","lineIsHidden","widgetNode","lineIsHiddenInner","_heightAtLine","lineObj","lineLength","found$1","findMaxLine","maxLine","maxLineLength","maxLineChanged","Line","estimateHeight","cleanUpLine","styleToClassCache","styleToClassCacheWithMode","interpretTokenStyle","cache","buildLineContent","lineView","builder","pre","trailingSpace","splitSpaces","getOption","rest","addToken","buildToken","buildTokenBadBidi","insertLineContent","externalMeasured","maps","caches","lastChild","querySelector","defaultSpecialCharPlaceholder","title","startStyle","endStyle","css","attributes","displayText","trailingBefore","spaceBefore","special","specialChars","mustWrap","createDocumentFragment","lastIndex","txt$1","tabWidth","specialCharPlaceholder","fullStyle","attr","part","buildCollapsedSpan","ignoreWidget","widget","input","needsContentAttribute","setUneditable","allText","spanStyle","spanEndStyle","spanStartStyle","nextChange","Infinity","foundBookmarks","endStyles","upto","tokenText","LineView","visualLineContinued","hidden","buildViewArray","nextPos","view","operationGroup","orphanDelayedCallbacks","signalLater","list","delayedCallbacks","fireOrphanDelayed","delayed","updateLineForChanges","dims","changes","updateLineText","updateLineGutter","updateLineClasses","updateLineWidgets","ensureLineWrapped","replaceChild","zIndex","getLineContent","ext","built","background","wrap","insertBefore","updateLineBackground","wrapClass","gutter","gutterBackground","gutterClass","fixedGutter","fixedPos","gutterTotalWidth","markers","gutterMarkers","lineNumbers","wrap$1","gutterWrap","lineNumber","gutterLeft","lineNumInnerWidth","k","gutterSpecs","gutterWidth","alignable","isWidget","nextSibling","insertLineWidgets","buildLineElement","insertLineWidgetsFor","allowAbove","widgets","ws","handleMouseEvents","positionLineWidget","above","noHScroll","width","wrapperWidth","coverGutter","paddingLeft","position","marginLeft","widgetHeight","parentStyle","gutters","wrapper","clientWidth","eventInWidget","getAttribute","sizer","mover","paddingTop","lineSpace","offsetTop","paddingVert","paddingH","cachedPaddingH","getComputedStyle","currentStyle","data","parseInt","paddingRight","isNaN","scrollGap","nativeBarWidth","displayWidth","scroller","barWidth","displayHeight","clientHeight","barHeight","mapFromLineView","measureChar","bias","measureCharPrepared","prepareMeasureForLine","findViewForLine","findViewIndex","getDimensions","forceUpdate","lineMeasure","updateExternalMeasurement","rect","hasHeights","prepared","varHeight","wrapping","lineWrapping","curWidth","heights","rects","getClientRects","abs","bottom","top","ensureLineHeights","place","nodeAndOffsetInLineMap","coverStart","coverEnd","getUsefulRect","screen","logicalXDPI","deviceXDPI","normal","fromRange","hasBadZoomedRects","scaleX","scaleY","logicalYDPI","deviceYDPI","maybeUpdateRectForZooming","rSpan","charWidth","nullRect","rtop","rbot","bot","bogus","singleCursorHeightPerLine","rbottom","measureCharInner","measureText","mStart","mEnd","clearLineMeasurementCacheFor","clearLineMeasurementCache","externalMeasure","clearCaches","cachedCharWidth","cachedTextHeight","lineNumChars","pageScrollX","pageXOffset","documentElement","scrollLeft","pageScrollY","marginTop","pageYOffset","scrollTop","widgetTopHeight","intoCoordSystem","includeWidgets","yOff","viewOffset","lOff","xOff","fromCoordSystem","coords","localBox","lineSpaceBox","_charCoords","_cursorCoords","preparedMeasure","getBidi","partPos","other","estimateCoords","PosWithInfo","outside","xRel","_coordsChar","y","coordsCharInner","rangeEnd","wrappedLineExtent","begin","wrappedLineExtentChar","boxIsAfter","box","ltr","coordsBidiPartWrapped","coordsBidiPart","baseX","chAround","boxAround","atLeft","atStart","_lineNo","ref","closestDist","endX","dist","textHeight","anchor","clientLeft","offsetLeft","compensateForHScroll","th","perLine","widgetsHeight","estimateLineHeights","est","estHeight","posFromMouse","liberal","forRect","space","clientX","clientY","e$1","colDiff","round","regChange","lendiff","updateLineNumbers","viewChanged","resetView","cut","viewCuttingPoint","cut$1","cutTop","cutBot","regLineChange","oldN","newN","countDirtyView","dirty","updateSelection","showSelection","prepareSelection","primary","curFragment","cursors","selFragment","sel","ranges","primIndex","empty","showCursorWhenSelecting","drawSelectionCursor","head","drawSelectionRange","cursor","cursorHeight","getWrapperElement","charPos","otherCursor","cmpCoords","fragment","padding","leftSide","rightSide","sizerWidth","docLTR","add","drawForLine","fromArg","toArg","lineLen","wrapX","side","extent","iterateBidiSections","fromPos","toPos","openStart","openEnd","openRight","topLeft","topRight","botLeft","botRight","sFrom","sTo","fromLine","toLine","singleVLine","leftEnd","rightStart","restartBlink","focused","clearInterval","blinker","cursorDiv","visibility","cursorBlinkRate","setInterval","hasFocus","onBlur","ensureFocus","focus","onFocus","delayBlurEvent","delayingBlurEvent","draggingText","readOnly","selForContextMenu","reset","receivedFocus","shift","updateHeightsInViewport","prevBottom","lineDiv","updateWidgetHeight","chWidth","w","visibleLines","viewport","ensure","ensureFrom","ensureTo","calculateScrollPos","snapMargin","screentop","docBottom","atTop","atBottom","newTop","gutterSpace","screenleft","screenw","tooWide","addToScrollTop","resolveScrollToPos","ensureCursorVisible","getCursor","scrollToPos","margin","cursorScrollMargin","scrollToCoords","scrollToCoordsRange","sPos","updateScrollTop","updateDisplaySimple","setScrollTop","startWorker","forceScroll","scrollHeight","scrollbars","setScrollLeft","isScroller","scrollWidth","alignHorizontally","measureForScrollbars","gutterW","docH","viewHeight","viewWidth","barLeft","docHeight","NativeScrollbars","vert","horiz","tabIndex","checkedZeroWidth","minHeight","minWidth","update","needsH","needsV","sWidth","totalHeight","totalWidth","zeroWidthHack","disableHoriz","enableZeroWidthBar","disableVert","pointerEvents","bar","delay","maybeDisable","elementFromPoint","clear","NullScrollbars","updateScrollbars","startWidth","startHeight","updateScrollbarsInner","sizes","paddingBottom","heightForcer","borderBottom","scrollbarFiller","coverGutterNextToScrollbar","gutterFiller","scrollbarModel","initScrollbars","scrollbarStyle","axis","nextOpId","_startOperation","op","updateInput","typing","changeObjs","cursorActivityCalled","selectionChanged","updateMaxLine","markArrays","ops","ownsGroup","_endOperation","endCb","group","callbacks","fireCallbacksForOps","finishOperation","endOperation_R1","endOperation_W1","endOperation_R2","endOperation_W2","endOperation_finish","endOperations","scrollbarsClipped","marginBottom","borderRightWidth","maybeClipScrollbars","mustUpdate","DisplayUpdate","updatedDisplay","updateDisplayIfNeeded","barMeasure","adjustWidthTo","maxScrollLeft","preparedSelection","takeFocus","setDocumentHeight","postUpdateDisplay","wheelStartX","wheelStartY","doScroll","innerHeight","scrollNode","scrollIntoView","maybeScrollWindow","limit","changed","endCoords","scrollPos","startTop","startLeft","scrollPosIntoView","maybeHiddenMarkers","unhidden","maybeUnhiddenMarkers","finish","runInOp","operation","methodOp","docMethodOp","highlight","highlightWorker","workTime","changedLines","oldStyles","highlighted","oldCls","newCls","ischange","workDelay","force","visible","editorIsHidden","wrapperHeight","oldDisplayWidth","events","renderedView","maybeUpdateLineNumberWidth","viewportMargin","different","lastWrapHeight","lastWrapWidth","adjustView","toUpdate","selSnapshot","active","anchorNode","anchorOffset","focusNode","focusOffset","selectionSnapshot","updateNumbersFrom","container","rm","currentWheelTarget","updateNumber","patchDisplay","snapshot","nodeName","removeAllRanges","addRange","restoreSelection","selectionDiv","reportedViewFrom","reportedViewTo","updateGutterSpace","alignWidgets","comp","align","innerW","lineGutter","lineNumWidth","getGutters","sawLineNumbers","renderGutters","specs","gElt","updateGutters","Display","draggable","wheelDX","wheelDY","activeTouch","wheelSamples","wheelPixelsPerUnit","wheelEventDelta","dx","wheelDeltaX","dy","wheelDeltaY","detail","HORIZONTAL_AXIS","VERTICAL_AXIS","wheelDelta","wheelEventPixels","delta","onScrollWheel","canScrollX","canScrollY","pixels","movedX","movedY","sample","Selection","equals","here","there","deepCopy","Range","somethingSelected","normalizeSelection","mayTouch","selectionsMayTouch","prim","inv","simpleSelection","changeEnd","adjustForChange","computeSelAfterChange","offsetPos","loadMode","modeOption","resetModeState","isWholeLineUpdate","wholeLineUpdateBefore","updateDoc","spansFor","updateLine","linesFor","firstLine","lastText","lastSpans","nlines","insert","remove","added","added$1","added$2","linkedDocs","sharedHistOnly","propagate","skip","sharedHist","linked","rel","shared","attachDoc","setDirectionClass","History","done","undone","undoDepth","lastModTime","lastSelTime","lastOp","lastSelOp","lastOrigin","lastSelOrigin","generation","maxGeneration","historyChangeFromChange","histChange","attachLocalSpans","clearSelectionEvents","pop","addChangeToHistory","selAfter","opId","hist","history","historyEventDelay","lastChangeEvent","pushSelectionToHistory","addSelectionToHistory","selectionEventCanBeMerged","clearRedo","dest","existing","removeClearedSpans","explicitlyCleared","mergeOldSpans","getOldSpans","stretched","oldCur","stretchCur","copyHistoryArray","newGroup","instantiateSel","event","newChanges","extendRange","posBefore","extendSelection","setSelection","extendSelections","heads","replaceOneSelection","setSimpleSelection","setSelectionReplaceHistory","setSelectionNoUndo","NaN","filterSelectionChange","setSelectionInner","skipAtomicInSelection","reCheckSelection","mayClear","newAnchor","skipAtomic","newHead","skipAtomicInner","oldPos","preventCursorLeft","selectLeft","preventCursorRight","selectRight","atomic","near","movePos","far","cantEdit","selectAll","filterChange","canceled","cancel","makeChange","ignoreReadOnly","suppressEdits","mark","parts","mk","newParts","dfrom","dto","removeReadOnlyRanges","makeChangeInner","makeChangeSingleDoc","rebased","rebaseHist","makeChangeFromHistory","allowSelectionOnly","suppress","antiChanges","filter","returned","v","shiftDoc","distance","removed","recomputeMaxLength","checkWidthStart","retreatFrontier","changesHandler","changeHandler","makeChangeSingleDocInEditor","_replaceRange","assign","splitLines","rebaseHistSelSingle","rebaseHistArray","sub","ok","copied","changeLine","handle","changeType","LeafChunk","BranchChunk","removeInner","insertInner","iterN","oldHeight","remaining","leaf","maybeSpill","me","sibling","myIndex","used","LineWidget","opt","adjustScrollWhenAboveVisible","this$1","oldH","nextMarkerId","TextMarker","_markText","cloneNode","isParent","SharedTextMarker","markTextShared","replacedWith","addToHistory","curLine","inThisOp","WeakSet","has","addMarkedSpan","clearOnEnter","clearHistory","withOp","visual","dHeight","findSharedMarkers","findMarks","clipPos","detachSharedMarkers","subMarker","nextDocId","Doc","lineSep","cleanGeneration","getValue","join","lineSeparator","setValue","replaceRange","getRange","getLineHandle","getLineNumber","getLineHandleVisualStart","lineCount","listSelections","setCursor","extendSelectionsBy","setSelections","addSelection","getSelections","replaceSelection","dup","replaceSelections","newSel","hint","oldPrev","newPrev","computeReplacedSel","undo","redo","undoSelection","redoSelection","setExtending","getExtending","historySize","markClean","changeGeneration","forceSplit","isClean","gen","getHistory","setHistory","histData","setGutterMarker","gutterID","clearGutter","lineInfo","addLineClass","where","removeLineClass","addLineWidget","insertAt","aboveVisible","removeLineWidget","markText","setBookmark","realOpts","findMarksAt","getAllMarks","posFromIndex","sepSize","indexFromPos","copyHistory","linkedDoc","mFrom","mTo","subMark","copySharedMarkers","unlinkDoc","CodeMirror","splitIds","iterLinkedDocs","getEditor","setDirection","eachLine","lastDrop","onDrop","clearDragCursor","files","dataTransfer","isReadOnly","FileReader","File","read","markAsReadAndPasteIfAllFilesAreRead","readTextFromFile","file","allowDropFileTypes","reader","onerror","onload","readAsText","text$1","getData","selected","dragCursor","forEachCodeMirror","getElementsByClassName","byClass","editors","globalsRegistered","ensureGlobalHandlers","resizeTimer","onResize","setSize","keyNames","fromCharCode","keyMap","normalizeKeyName","alt","ctrl","cmd","mod","normalizeKeyMap","keymap","keyname","keys","lookupKey","getKeyMap","fallthrough","isModifierKey","keyCode","addModifierNames","noShift","altKey","metaKey","shiftKey","keyName","altGraphKey","deleteNearSelection","compute","kill","toKill","replaced","moveCharLogically","moveLogically","endOfLine","visually","prep","targetTop","basic","pcDefault","emacsy","macDefault","commands","singleSelection","killLine","deleteLine","delLineLeft","delWrappedLineLeft","charCoords","coordsChar","delWrappedLineRight","rightPos","goDocStart","goDocEnd","goLineStart","goLineStartSmart","lineStartSmart","goLineEnd","visualLineEnd","lineEnd","goLineRight","cursorCoords","goLineLeft","goLineLeftSmart","goLineUp","moveV","goLineDown","goPageUp","goPageDown","goCharLeft","moveH","goCharRight","goColumnLeft","goColumnRight","goWordLeft","goGroupRight","goGroupLeft","goWordRight","delCharBefore","deleteH","delCharAfter","delWordBefore","delWordAfter","delGroupBefore","delGroupAfter","indentAuto","indentSelection","indentMore","indentLess","insertTab","insertSoftTab","spaces","defaultTab","execCommand","transposeChars","newlineAndIndent","sels","indentLine","openLine","toggleOverwrite","firstNonWS","inWS","doHandleBinding","bound","dropShift","ensurePolled","prevShift","stopSeq","dispatchKey","seq","keySeq","dispatchKeyInner","keyMaps","extraKeys","lookupKeyForEditor","handleKeyBinding","motion","lastStoppedKey","onKeyDown","getField","handled","up","showCrossHair","onKeyUp","onKeyPress","charCode","handleCharBinding","lastClick","lastDoubleClick","PastClick","onMouseDown","supportsTouch","clickInGutter","repeat","now","compare","clickRepeat","selectingText","handleMappedButton","contained","behavior","option","unit","addNew","moveOnDrag","configureMouse","dragDrop","moved","dragEnd","mouseMove","dragStart","preventScroll","e2","leftButtonStartDrag","ourRange","ourIndex","startSel","rangeForUnit","lastPos","extendTo","startCol","posCol","leftPos","oldRange","ranges$1","anchorLine","boundary","headIndex","usePart","bidiSimplify","editorSize","counter","curCount","move","buttons","leftButtonSelect","leftButtonDown","onContextMenu","findWordAt","gutterEvent","prevent","mX","mY","touches","lineBox","g","contextMenuInGutter","themeChanged","theme","Init","defaults","optionHandlers","dragDropChanged","funcs","dragFunctions","toggle","enter","over","leave","drop","wrappingChanged","inputStyles","inputStyle","pasteIncoming","cutIncoming","autofocus","word","touchFinished","prevTouch","finishTouch","isMouseLikeTouchEvent","touch","radiusX","radiusY","farAway","pageX","pageY","frag","onDragOver","setData","effectAllowed","setDragImage","img","_top","onDragStart","inp","registerEventHandlers","finishInit","initHooks","textRendering","how","aggressive","indent","curSpace","curSpaceString","indentUnit","indentString","indentWithTabs","pos$1","defineInitHook","lastCopied","setLastCopied","newLastCopied","applyTextInput","inserted","deleted","recent","paste","textLines","multiPaste","pasteLinesPerSelection","lineWise","changeEvent","triggerElectric","handlePaste","pasted","clipboardData","disableInput","electricChars","smartIndent","getModeAt","electricInput","copyableRanges","lineRange","disableBrowserMagic","field","spellcheck","autocorrect","autocapitalize","hiddenTextarea","border","_findPosH","origDir","lineDir","moveOnce","boundToLine","astral","bidi","mv","getWrappedLineExtent","moveInStorageOrder","searchInVisualLine","getRes","res","nextCh","moveVisually","sawType","getHelper","hitSide","_findPosV","pageSize","moveAmount","ContentEditableInput","lastAnchorNode","lastAnchorOffset","lastFocusNode","lastFocusOffset","polling","composing","gracePeriod","readDOMTimeout","posToDOM","badPos","bad","domToPos","lineNode","locateNodeInLineView","textNode","topNode","nodeValue","curNode","textContent","previousSibling","dist$1","belongsToInput","onCopyCut","lineWiseCopyCut","clearData","kludge","hadFocus","showPrimarySelection","contentEditable","updateFromDOM","readFromDOMSoon","forceCompositionEnd","screenReaderLabelChanged","label","removeAttribute","showMultipleSelections","curAnchor","curFocus","rng","rangeCount","getRangeAt","startGracePeriod","rememberSelection","selectionInEditor","commonAncestorContainer","blur","pollSelection","pollInterval","poll","scan","isInGutter","triggerOnKeyDown","pollContent","fromIndex","fromNode","toNode","toIndex","newText","closing","extraLinebreak","recognizeMarker","close","addText","walk","cmText","markerID","isBlock","domTextBetween","oldText","cutFront","cutEnd","oldTop","maxCutFront","newBot","oldBot","maxCutEnd","chFrom","chTo","readOnlyChanged","resetPosition","TextareaInput","prevInput","pollingFast","createField","textarea","prepareCopyCut","fastPoll","dispatchEvent","Event","_display","moveInputWithCursor","headPos","wrapOff","lineOff","teTop","teLeft","drawn","contextMenuPending","slowPoll","missed","same","resetSelectionOnContextMenu","oldScrollY","oldCSS","oldWrapperCSS","wrapperBox","offsetParent","scrollY","scrollTo","rehide","detectingSelectAll","prepareSelectAllHack","mouseup","extval","disabled","deflt","notOnInit","defineOption","newBreaks","refresh","getInputField","detach","attach","integer","defineOptions","helpers","setOption","getDoc","addKeyMap","removeKeyMap","addOverlay","score","priority","insertSorted","modeSpec","removeOverlay","newRanges","getTokenAt","getLineTokens","getTokenTypeAt","getHelpers","help","_global","getStateAfter","lineAtHeight","heightAtLine","defaultTextHeight","defaultCharWidth","getViewport","addWidget","vspace","hspace","triggerOnKeyPress","triggerOnKeyUp","triggerOnMouseDown","findPosH","amount","rtlMoveVisually","findPosV","goalColumn","goals","startChar","check","getScrollInfo","scrollToRange","interpret","startOperation","endOperation","swapDoc","phrase","phraseText","phrases","getScrollerElement","getGutterElement","registerHelper","registerGlobalHelper","predicate","addEditorMethods","dontDelegate","method","defineMIME","mime","defineExtension","func","defineDocExtension","fromTextArea","tabindex","placeholder","realSubmit","form","leaveSubmitMethodAlone","submit","wrappedSubmit","getTextArea","toTextArea","cmpPos","addLegacyProps","rsingleTag","rootjQuery","rquickExpr","root","parseHTML","getElementById","ready","Data","EventListener","eventTarget","eventName","unorderedBindings","Set","connect","disconnect","bindingConnected","binding","bindingDisconnected","delete","handleEvent","extendedEvent","stopImmediatePropagation_1","stopImmediatePropagation","immediatePropagationStopped","extendEvent","_a","bindings","leftIndex","rightIndex","configurable","Dispatcher","application","eventListenerMaps","Map","started","eventListeners","forEach","eventListener","stop","values","reduce","listeners","fetchEventListenerForBinding","handleError","message","fetchEventListener","eventListenerMap","fetchEventListenerMapForEventTarget","createEventListener","descriptorPattern","parseEventTarget","eventTargetName","Action","element","descriptor","tagName","defaultEventNames","getDefaultEventNameForElement","identifier","methodName","forToken","descriptorString","trim","eventNameSuffix","Binding","action","willBeInvokedByEvent","invokeWithEvent","controller","Element","scope","containsElement","ElementObserver","delegate","_this","elements","mutationObserver","MutationObserver","mutations","processMutations","observe","childList","subtree","takeRecords","matchElementsInTree","removeElement","_b","_c","addElement","mutations_1","mutation","processMutation","processAttributeChange","attributeName","processRemovedNodes","removedNodes","processAddedNodes","addedNodes","elementAttributeChanged","matchElement","nodes","elementFromNode","processTree","elementIsActive","tree","processor","Node","ELEMENT_NODE","isConnected","elementMatched","elementUnmatched","AttributeObserver","elementObserver","hasAttribute","querySelectorAll","elementMatchedAttribute","elementUnmatchedAttribute","elementAttributeValueChanged","fetch","del","prune","extendStatics","Multimap","valuesByKey","hasKey","hasValue","some","getValuesForKey","getKeysForValue","__extends","setPrototypeOf","__proto__","__","_super","IndexedMultimap","keysByValue","TokenListObserver","attributeObserver","tokensByElement","tokensMatched","readTokensForElement","refreshTokensForElement","unmatchedTokens","matchedTokens","tokensUnmatched","tokenMatched","tokenUnmatched","previousTokens","currentTokens","firstDifferingIndex","_","findIndex","tokensAreEqual","tokenString","parseTokenString","ValueListObserver","tokenListObserver","parseResultsByToken","WeakMap","valuesByTokenByElement","fetchParseResultForToken","fetchValuesByTokenForElement","elementMatchedValue","elementUnmatchedValue","parseResult","parseToken","valuesByToken","parseValueForToken","BindingObserver","bindingsByAction","valueListObserver","actionAttribute","disconnectAllActions","schema","connectAction","disconnectAction","controllerConstructor","bindingObserver","dispatcher","initialize","blessControllerConstructor","bless","extendWithReflect","Controller","_newTarget","Reflect","construct","Module","definition","blessDefinition","contextsByScope","connectedContexts","connectContextForScope","fetchContextForScope","disconnectContextForScope","DataMap","getFormattedKey","char","attributeValueContainsToken","TargetSet","targetName","targetNames","getSelectorForTargetNames","findElement","findAll","findAllElements","getSelectorForTargetName","targetDescriptor","targetAttribute","Scope","targets","tail","filterElements","closest","controllerSelector","controllerAttribute","ScopeObserver","scopesByIdentifierByElement","scopeReferenceCounts","scopesByIdentifier","fetchScopesByIdentifierForElement","referenceCount","scopeConnected","scopeDisconnected","Router","scopeObserver","modulesByIdentifier","contexts","loadDefinition","unloadIdentifier","connectModule","disconnectModule","getContextForElementAndIdentifier","defaultSchema","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","step","rejected","then","__generator","sent","trys","verb","TypeError","Application","router","readyState","register","load","definitions","unload","identifiers","getControllerForElementAndIdentifier","console","defineTargetProperties","ancestors","getPrototypeOf","getAncestorsForConstructor","getOwnTargetNamesForConstructor","getTargetNamesForConstructor","capitalize","webpackPolyfill","deprecate","paths","access","chainable","emptyGet","raw","bulk","_key","rnothtmlwhite","location","rquery","r20","rhash","rantiCache","rheaders","rnoContent","rprotocol","prefilters","transports","allTypes","originAnchor","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","originalOptions","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","href","lastModified","etag","url","isLocal","protocol","global","processData","async","contentType","accepts","html","xml","json","contents","responseFields","converters","JSON","parse","parseXML","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","urlAnchor","completed","fireGlobals","uncached","callbackContext","globalEventContext","deferred","Deferred","completeDeferred","Callbacks","_statusCode","statusCode","requestHeaders","requestHeadersNames","strAbort","getResponseHeader","getAllResponseHeaders","setRequestHeader","overrideMimeType","mimeType","always","status","abort","statusText","finalText","promise","crossDomain","param","traditional","trigger","hasContent","ifModified","headers","beforeSend","complete","success","fail","timeout","send","nativeStatusText","responses","isSuccess","response","modified","ct","finalDataType","firstDataType","ajaxHandleResponses","conv2","conv","tmp","dataFilter","throws","ajaxConvert","resolveWith","rejectWith","fireWith","getJSON","getScript","_siblings","rneedsContext","rparentsprev","guaranteedUnique","selectors","matched","matchesSelector","uniqueSort","prevAll","addBack","parents","parentsUntil","until","nextAll","nextUntil","prevUntil","siblings","contentDocument","Identity","Thrower","ex","adoptValue","noValue","tuples","_state","_promise","pipe","fns","newDefer","tuple","progress","notify","onFulfilled","onRejected","onProgress","maxDepth","depth","that","mightThrow","notifyWith","process","exceptionHook","stackTrace","getStackHook","stateString","disable","lock","fire","when","singleValue","resolveContexts","resolveValues","updateFunc","rcheckableType","acceptData","dataPriv","rtypenamespace","returnTrue","returnFalse","expectSync","err","safeActiveElement","_on","one","origFn","leverageNative","el","namespace","notAsync","isTrigger","delegateType","handleObjIn","eventHandle","handleObj","namespaces","origType","elemData","triggered","dispatch","bindType","needsContext","expr","delegateCount","setup","mappedTypes","origCount","hasData","teardown","removeEvent","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","isPropagationStopped","currentTarget","isImmediatePropagationStopped","rnamespace","postDispatch","matchedHandlers","matchedSelectors","addProp","hook","originalEvent","writable","noBubble","click","_default","beforeunload","isDefaultPrevented","relatedTarget","timeStamp","isSimulated","bubbles","cancelable","changedTouches","eventPhase","offsetX","offsetY","pointerId","pointerType","screenX","screenY","targetTouches","toElement","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","rmsPrefix","rdashAlpha","fcamelCase","_all","letter","camelCase","rcssNum","rnumnonpx","cssExpand","getStyles","swap","curCSS","adjustCSS","addGetHookIf","finalPropName","rdisplayswap","rcustomProp","cssShow","cssNormalTransform","letterSpacing","fontWeight","setPositiveNumber","subtract","boxModelAdjustment","dimension","isBorderBox","computedVal","extra","getWidthOrHeight","boxSizingReliable","valueIsBorderBox","offsetProp","reliableTrDimensions","parseFloat","cssHooks","opacity","computed","cssNumber","cssProps","hooks","origName","isCustomProp","clearCloneStyle","setProperty","isFinite","scrollboxSizeBuggy","scrollboxSize","reliableMarginLeft","prefix","suffix","expand","expanded","owner","isAttached","composed","getRootNode","rtagName","rscriptType","wrapMap","getAll","setGlobalEval","buildFragment","dataUser","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","udataOld","udataCur","fixInput","checked","defaultValue","domManip","collection","ignored","scripts","hasScripts","iNoClone","valueIsFunction","checkClone","_evalUrl","noModule","_remove","keepData","cleanData","htmlPrefilter","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","noCloneChecked","isXMLDoc","append","prepend","innerHTML","replaceWith","appendTo","prependTo","insertAfter","replaceAll","original","flag","createOptions","firing","memory","_fired","_locked","queue","firingIndex","once","stopOnFalse","unique","locked","fired","dequeue","startLength","_queueHooks","setter","clearQueue","defer","isHiddenWithinTree","showHide","fxNow","inProgress","rfxtypes","rrun","schedule","requestAnimationFrame","fx","interval","tick","createFxNow","genFx","includeWidth","attrs","createTween","animation","tween","Animation","tweeners","stopped","currentTime","startTime","duration","percent","tweens","run","opts","specialEasing","easing","originalProperties","Tween","gotoEnd","propFilter","timer","anim","tweener","oldfire","propTween","restoreDisplay","isBox","dataShow","unqueued","overflow","overflowX","overflowY","prefilter","speed","speeds","fadeTo","show","animate","optall","doAnimation","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","fast","pnum","computeStyleTests","divStyle","pixelPositionVal","reliableMarginLeftVal","roundPixelMeasures","pixelBoxStylesVal","boxSizingReliableVal","scrollboxSizeVal","reliableTrDimensionsVal","backgroundClip","pixelBoxStyles","pixelPosition","table","tr","trChild","trStyle","borderTopWidth","borderBottomWidth","checkOn","optSelected","radioValue","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","defaultView","parentWindow","simulate","triggerHandler","preservedScriptAttributes","script","winnow","qualifier","not","is","readyList","catch","readyException","readyWait","wait","uid","valueParts","adjusted","scale","maxIterations","currentValue","initial","initialInUnit","thead","td","tbody","tfoot","colgroup","caption","optgroup","getElementsByTagName","refElements","rhtml","attached","opener","rboxStyle","maxWidth","getPropertyValue","conditionFn","hookFn","cssPrefixes","emptyStyle","vendorProps","final","capName","vendorPropName","rfocusable","rclickable","removeProp","propFix","nType","propHooks","selectedIndex","parserErrorElem","DOMParser","parseFromString","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","valueOrFunction","encodeURIComponent","serialize","serializeArray","keepScripts","createHTMLDocument","implementation","parsed","cmCfg","modeCfg","htmlMode","htmlModeMissing","highlightFormatting","maxBlockquoteDepth","taskLists","strikethrough","emoji","fencedCodeBlockHighlighting","fencedCodeBlockDefaultMode","tokenTypeOverrides","tokenTypes","header","quote","list1","list2","list3","hr","image","imageAltText","imageMarker","formatting","linkInline","linkEmail","linkText","linkHref","em","strong","tokenType","hrRE","listRE","taskListRE","atxHeaderRE","allowAtxHeaderWithoutSpace","setextHeaderRE","textRE","fencedCodeRE","linkDefRE","punctuation","switchInline","inline","switchBlock","block","linkTitle","indentedCode","htmlBlock","exit","htmlState","tagStart","tokenize","isInText","inlineNormal","blockNormal","trailingSpaceNewLine","prevLine","thisLine","firstTokenOnLine","prevLineLineIsEmpty","prevLineIsIndentedCode","prevLineIsHr","prevLineIsList","maxNonCodeIndentation","listStack","lineIndentation","indentationDiff","allowsInlineContinuation","fencedCodeEnd","isHr","getType","setext","listType","taskList","fencedEndRE","localMode","findModeByName","mimes","localState","local","footnoteLink","md_inside","returnType","currListInd","hasExitedList","maxFencedEndInd","taskOpen","taskClosed","listMod","handleText","matchCh","regex","previousFormatting","formattingEscape","atts","substring","leftFlanking","rightFlanking","setEm","setStrong","retType","endChar","returnState","linkRE","footnoteLinkInside","footnoteUrl","textAfter","blockCommentStart","blockCommentEnd","closeBrackets","fold","htmlConfig","autoSelfClosers","implicitlyClosed","contextGrabbers","doNotIndent","allowUnquoted","allowMissing","caseFold","xmlConfig","allowMissingTagName","editorConf","config_","setStyle","config","inText","chain","parser","inBlock","doctype","inTag","closure","baseState","isInAttribute","stringStartCol","terminator","startOfLine","noIndent","popContext","maybePopContext","nextTagName","parentTagName","tagNameState","closeTagNameState","attrState","matchClosing","closeState","closeStateErr","_stream","attrEqState","attrValueState","attrContinuedState","baseIndent","fullLine","multilineTagIndentPastTag","multilineTagIndentFactor","alignCDATA","tagAfter","grabbers","configuration","skipAttribute","xmlCurrentTag","xmlCurrentContext","cx","modeInfo","alias","findModeByMIME","findModeByExtension","findModeByFileName","filename","dot","lastIndexOf","overlayMode","combine","basePos","baseCur","overlayPos","overlayCur","streamSeen","combineTokens","overlayToken","require","logicalName","identifierForContextKey","default","definitionForModuleAndIdentifier","definitionForModuleWithContextAndKey","definitionsFromContext","Rails","linkClickSelector","buttonClickSelector","exclude","inputChangeSelector","formSubmitSelector","formInputClickSelector","formDisableSelector","formEnableSelector","fileInputSelector","linkDisableSelector","buttonDisableSelector","loadCSPNonce","cspNonce","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","$","csrfParam","csrfToken","meta","CSRFProtection","xhr","refreshCSRFTokens","CustomEvent","params","evt","createEvent","initCustomEvent","stopEverything","eventType","AcceptHeaders","createXHR","prepareOptions","processResponse","responseText","XMLHttpRequest","OPENED","accept","open","withCredentials","onreadystatechange","DONE","isCrossDomain","serializeElement","additionalParam","inputs","formElements","allowAction","handleConfirm","confirm","answer","disableFormElement","disableFormElements","disableLinkElement","enableFormElement","enableFormElements","enableLinkElement","isXhrRedirect","handleDisabledElement","enableElement","disableElement","replacement","originalText","handleMethod","formContent","link","isRemote","handleRemote","enctype","FormData","formSubmitButtonClick","formNoValidate","preventInsignificantClick","insignificantMetaClick","rails","_rails_loaded","Sizzle","pseudos","getText","isXML","escapeSelector","escape","Expr","compile","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","preferredDoc","dirruns","classCache","createCache","tokenCache","compilerCache","nonnativeSelectorCache","sortOrder","pushNative","booleans","whitespace","rwhitespace","rtrim","rcomma","rcombinators","rdescend","rpseudo","ridentifier","matchExpr","rinputs","rheader","rnative","rsibling","runescape","funescape","nonHex","high","rcssescape","fcssescape","asCodePoint","unloadHandler","inDisabledFieldset","addCombinator","els","seed","nid","groups","newSelector","newContext","qsa","testContext","toSelector","qsaError","cacheLength","markFunction","assert","addHandle","attrHandle","siblingCheck","sourceIndex","createInputPseudo","createButtonPseudo","createDisabledPseudo","isDisabled","createPositionalPseudo","argument","matchIndexes","namespaceURI","hasCompare","subWindow","createComment","getById","getElementsByName","attrId","getAttributeNode","disconnectedMatch","compareDocumentPosition","adown","bup","sortDetached","aup","ap","bp","specified","duplicates","detectDuplicates","sortStable","createPseudo","relative","preFilter","excess","unquoted","nodeNameSelector","operator","what","_argument","simple","forward","ofType","_context","uniqueCache","outerCache","nodeIndex","useCache","uniqueID","pseudo","setFilters","idx","matcher","unmatched","lang","elemLang","hash","_matchIndexes","radio","checkbox","password","combinator","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","multipleContexts","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","filters","parseOnly","soFar","preFilters","cached","setMatchers","elementMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","matcherFromGroupMatchers","compiled","_name","_sizzle","noConflict","truncate","rerrorNames","stack","warn","rbrace","rmultiDash","dataAttr","_data","removeData","_removeData","defaultDisplayMap","getDefaultDisplay","hide","eased","linear","swing","cos","PI","boolHook","removeAttr","attrHooks","bool","attrNames","lowercaseName","stripAndCollapse","getClass","classesToArray","curValue","clazz","finalValue","removeClass","toggleClass","stateVal","isValidValue","classNames","hasClass","rreturn","valHooks","optionSet","focusin","attaches","wrapAll","firstElementChild","wrapInner","htmlIsFunction","unwrap","xhrSuccessStatus","xhrSupported","cors","_callback","errorCallback","username","xhrFields","onabort","ontimeout","responseType","binary","scriptAttrs","charset","scriptCharset","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","animated","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","using","win","parentOffset","Height","Width","defaultExtra","funcName","proxy","holdReady","hold","parseJSON","isNumeric","unbind","undelegate","hover","fnOver","fnOut","_jQuery","_$","noGlobal","Turbolinks","supported","pushState","visit","clearCache","setProgressBarDelay","copyObject","throttle","u","initEvent","uuid","Location","absoluteURL","requestURL","getOrigin","getPath","getPathComponents","getLastPathComponent","getExtension","isHTML","isPrefixedBy","isEqualTo","toCacheKey","toJSON","valueOf","_t","HttpRequest","requestCanceled","requestTimedOut","requestFailed","requestLoaded","requestProgressed","referrer","NETWORK_FAILURE","TIMEOUT_FAILURE","notifyApplicationBeforeRequestStart","setProgress","requestStarted","lengthComputable","loaded","total","endRequest","requestCompletedWithResponse","failed","requestFailedWithStatusCode","notifyApplicationAfterRequestEnd","onprogress","destroy","requestFinished","ProgressBar","trickle","_t2","stylesheetElement","createStylesheetElement","progressElement","createProgressElement","defaultCSS","installStylesheetElement","installProgressElement","startTrickling","hiding","fadeProgressElement","uninstallProgressElement","stopTrickling","trickleInterval","BrowserAdapter","showProgressBar","_t3","progressBar","visitProposedToLocationWithAction","startVisitToLocationWithAction","visitStarted","issueRequest","changeHistory","loadCachedSnapshot","visitRequestStarted","hasCachedSnapshot","showProgressBarAfterDelay","visitRequestProgressed","visitRequestCompleted","loadResponse","visitRequestFailedWithStatusCode","reload","visitRequestFinished","hideProgressBar","visitCompleted","followRedirect","pageInvalidated","progressBarTimeout","progressBarDelay","_t4","onPageLoad","onPopState","shouldHandlePopState","turbolinks","restorationIdentifier","historyPoppedToLocationWithRestorationIdentifier","pageLoaded","pageIsLoaded","HeadDetails","outerHTML","tracked","fromHeadElement","hasElementWithKey","getTrackedElementSignature","getScriptElementsNotInDetails","getElementsMatchingTypeNotInDetails","getStylesheetElementsNotInDetails","getProvisionalElements","getMetaValue","findMetaElementByName","Snapshot","headDetails","bodyElement","fromHTMLString","fromHTMLElement","getRootLocation","getSetting","getCacheControlValue","getElementForAnchor","getPermanentElements","getPermanentElementById","getPermanentElementsPresentInSnapshot","findFirstAutofocusableElement","hasAnchor","isPreviewable","isCacheable","isVisitable","Renderer","render","renderView","viewWillRender","newBody","viewRendered","invalidateView","viewInvalidated","createScriptElement","__super__","SnapshotRenderer","currentSnapshot","newSnapshot","isPreview","currentHeadDetails","newHeadDetails","currentBody","shouldRender","mergeHead","replaceBody","focusFirstAutofocusableElement","copyNewHeadStylesheetElements","copyNewHeadScriptElements","removeCurrentHeadProvisionalElements","copyNewHeadProvisionalElements","relocateCurrentBodyPermanentElements","activateNewBodyScriptElements","assignNewBody","replacePlaceholderElementsWithClonedPermanentElements","trackedElementsAreIdentical","getNewHeadStylesheetElements","getNewHeadScriptElements","getCurrentHeadProvisionalElements","getNewHeadProvisionalElements","getCurrentBodyPermanentElements","permanentElement","getNewBodyScriptElements","_t5","_t6","ErrorRenderer","replaceHeadAndBody","activateBodyScriptElements","getScriptElements","View","htmlElement","getSnapshot","markAsPreview","renderSnapshot","renderError","ScrollManager","onScroll","_t7","scrollToElement","scrollToPosition","updatePosition","scrollPositionChanged","SnapshotCache","snapshots","put","write","Visit","performScroll","_t8","adapter","timingMetrics","recordTimingMetric","request","cancelRender","visitFailed","historyChanged","shouldIssueRequest","getCachedSnapshot","getCachedSnapshotForLocation","cacheSnapshot","visitRendered","redirectedToLocation","followedRedirect","replaceHistoryWithLocationAndRestorationIdentifier","scrolled","scrollToRestoredPosition","scrollToTop","scrollToAnchor","restorationData","scrollPosition","getTime","getTimingMetrics","snapshotCached","frame","cancelAnimationFrame","_t9","clickBubbled","clickCaptured","scrollManager","startHistory","enabled","stopHistory","applicationAllowsVisitingLocation","locationIsVisitable","getRestorationDataForIdentifier","startVisit","pushHistoryWithLocationAndRestorationIdentifier","shouldCacheSnapshot","notifyApplicationBeforeCachingSnapshot","lastRenderedLocation","getCurrentRestorationData","notifyApplicationBeforeRender","currentVisit","notifyApplicationAfterRender","notifyApplicationAfterPageLoad","clickEventIsSignificant","getVisitableLinkForNode","getVisitableLocationForLink","applicationAllowsFollowingLinkToLocation","getActionForLink","notifyApplicationAfterClickingLinkToLocation","notifyApplicationBeforeVisitingLocation","notifyApplicationAfterVisitingLocation","timing","createVisit","isContentEditable","nodeIsVisitable","currentScript","sparkMd5","createCommonjsModule","hex_chr","md5cycle","md5blk","md5blks","md5blk_array","md51","lo","hi","md51_array","subarray","Uint8Array","rhex","hex","toUtf8","unescape","utf8Str2ArrayBuffer","returnUInt8Array","buff","ArrayBuffer","arrayBuffer2Utf8Str","concatenateArrayBuffers","byteLength","buffer","hexToBinaryString","bytes","SparkMD5","clamp","targetArray","sourceArray","appendBinary","_buff","_length","_hash","_finish","getState","setState","hashBinary","classCallCheck","instance","Constructor","createClass","defineProperties","protoProps","staticProps","fileSlice","mozSlice","webkitSlice","FileChecksum","chunkCount","chunkIndex","md5Buffer","fileReader","fileReaderDidLoad","fileReaderDidError","readNextChunk","binaryDigest","base64digest","btoa","readAsArrayBuffer","eventInit","toArray$1","BlobRecord","checksum","content_type","byte_size","requestDidLoad","requestDidError","stringify","blob","direct_upload","directUploadData","_xhr","BlobUpload","_blob$directUploadDat","DirectUpload","upload","_len","messages","DirectUploadController","directUpload","hiddenInput","insertAdjacentElement","dispatchError","signed_id","alert","_this2","uploadRequestDidProgress","DirectUploadsController","controllers","createDirectUploadControllers","startNextController","processingAttribute","submitButtonsByForm","didClick","didSubmitForm","didSubmitRemoteElement","handleFormSubmissionEvent","enable","submitForm","ActiveStorage","channels","webpackEmptyContext","req","_dir","_callback2","webpackContext","webpackContextResolve","markdownCodeEditor","textCodeEditor","markdownTarget","textTarget","preview","copyText","clipboard","writeText","$preview","previewTarget","post","contentWindow","urlRE","modeConfig","codeDepth","gfmOverlay","codeBlock","ateSpace","difference","gitHubSpice","markdownConfig","nodeId","dataset","$node","path","log","navMenuTarget","classList"],"mappings":"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","file":"js/application-e7e711c4bb79c1b26e48.js","sourcesContent":[" \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// 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, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\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 = \"/packs/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 79);\n","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\ndefine([\"./var/arr\", \"./var/getProto\", \"./var/slice\", \"./var/flat\", \"./var/push\", \"./var/indexOf\", \"./var/class2type\", \"./var/toString\", \"./var/hasOwn\", \"./var/fnToString\", \"./var/ObjectFunctionString\", \"./var/support\", \"./var/isFunction\", \"./var/isWindow\", \"./core/DOMEval\", \"./core/toType\"], function (arr, getProto, _slice, flat, push, indexOf, class2type, toString, hasOwn, fnToString, ObjectFunctionString, support, isFunction, isWindow, DOMEval, toType) {\n \"use strict\";\n\n var version = \"3.6.0\",\n // Define a local copy of jQuery\n jQuery = function jQuery(selector, context) {\n // The jQuery object is actually just the init constructor 'enhanced'\n // Need init if jQuery is called (just allow error to be thrown if not included)\n return new jQuery.fn.init(selector, context);\n };\n\n jQuery.fn = jQuery.prototype = {\n // The current version of jQuery being used\n jquery: version,\n constructor: jQuery,\n // The default length of a jQuery object is 0\n length: 0,\n toArray: function toArray() {\n return _slice.call(this);\n },\n // Get the Nth element in the matched element set OR\n // Get the whole matched element set as a clean array\n get: function get(num) {\n // Return all the elements in a clean array\n if (num == null) {\n return _slice.call(this);\n } // Return just the one element from the set\n\n\n return num < 0 ? this[num + this.length] : this[num];\n },\n // Take an array of elements and push it onto the stack\n // (returning the new matched element set)\n pushStack: function pushStack(elems) {\n // Build a new jQuery matched element set\n var ret = jQuery.merge(this.constructor(), elems); // Add the old object onto the stack (as a reference)\n\n ret.prevObject = this; // Return the newly-formed element set\n\n return ret;\n },\n // Execute a callback for every element in the matched set.\n each: function each(callback) {\n return jQuery.each(this, callback);\n },\n map: function map(callback) {\n return this.pushStack(jQuery.map(this, function (elem, i) {\n return callback.call(elem, i, elem);\n }));\n },\n slice: function slice() {\n return this.pushStack(_slice.apply(this, arguments));\n },\n first: function first() {\n return this.eq(0);\n },\n last: function last() {\n return this.eq(-1);\n },\n even: function even() {\n return this.pushStack(jQuery.grep(this, function (_elem, i) {\n return (i + 1) % 2;\n }));\n },\n odd: function odd() {\n return this.pushStack(jQuery.grep(this, function (_elem, i) {\n return i % 2;\n }));\n },\n eq: function eq(i) {\n var len = this.length,\n j = +i + (i < 0 ? len : 0);\n return this.pushStack(j >= 0 && j < len ? [this[j]] : []);\n },\n end: function end() {\n return this.prevObject || this.constructor();\n },\n // For internal use only.\n // Behaves like an Array's method, not like a jQuery method.\n push: push,\n sort: arr.sort,\n splice: arr.splice\n };\n\n jQuery.extend = jQuery.fn.extend = function () {\n var options,\n name,\n src,\n copy,\n copyIsArray,\n clone,\n target = arguments[0] || {},\n i = 1,\n length = arguments.length,\n deep = false; // Handle a deep copy situation\n\n if (typeof target === \"boolean\") {\n deep = target; // Skip the boolean and the target\n\n target = arguments[i] || {};\n i++;\n } // Handle case when target is a string or something (possible in deep copy)\n\n\n if (_typeof(target) !== \"object\" && !isFunction(target)) {\n target = {};\n } // Extend jQuery itself if only one argument is passed\n\n\n if (i === length) {\n target = this;\n i--;\n }\n\n for (; i < length; i++) {\n // Only deal with non-null/undefined values\n if ((options = arguments[i]) != null) {\n // Extend the base object\n for (name in options) {\n copy = options[name]; // Prevent Object.prototype pollution\n // Prevent never-ending loop\n\n if (name === \"__proto__\" || target === copy) {\n continue;\n } // Recurse if we're merging plain objects or arrays\n\n\n if (deep && copy && (jQuery.isPlainObject(copy) || (copyIsArray = Array.isArray(copy)))) {\n src = target[name]; // Ensure proper type for the source value\n\n if (copyIsArray && !Array.isArray(src)) {\n clone = [];\n } else if (!copyIsArray && !jQuery.isPlainObject(src)) {\n clone = {};\n } else {\n clone = src;\n }\n\n copyIsArray = false; // Never move original objects, clone them\n\n target[name] = jQuery.extend(deep, clone, copy); // Don't bring in undefined values\n } else if (copy !== undefined) {\n target[name] = copy;\n }\n }\n }\n } // Return the modified object\n\n\n return target;\n };\n\n jQuery.extend({\n // Unique for each copy of jQuery on the page\n expando: \"jQuery\" + (version + Math.random()).replace(/\\D/g, \"\"),\n // Assume jQuery is ready without the ready module\n isReady: true,\n error: function error(msg) {\n throw new Error(msg);\n },\n noop: function noop() {},\n isPlainObject: function isPlainObject(obj) {\n var proto, Ctor; // Detect obvious negatives\n // Use toString instead of jQuery.type to catch host objects\n\n if (!obj || toString.call(obj) !== \"[object Object]\") {\n return false;\n }\n\n proto = getProto(obj); // Objects with no prototype (e.g., `Object.create( null )`) are plain\n\n if (!proto) {\n return true;\n } // Objects with prototype are plain iff they were constructed by a global Object function\n\n\n Ctor = hasOwn.call(proto, \"constructor\") && proto.constructor;\n return typeof Ctor === \"function\" && fnToString.call(Ctor) === ObjectFunctionString;\n },\n isEmptyObject: function isEmptyObject(obj) {\n var name;\n\n for (name in obj) {\n return false;\n }\n\n return true;\n },\n // Evaluates a script in a provided context; falls back to the global one\n // if not specified.\n globalEval: function globalEval(code, options, doc) {\n DOMEval(code, {\n nonce: options && options.nonce\n }, doc);\n },\n each: function each(obj, callback) {\n var length,\n i = 0;\n\n if (isArrayLike(obj)) {\n length = obj.length;\n\n for (; i < length; i++) {\n if (callback.call(obj[i], i, obj[i]) === false) {\n break;\n }\n }\n } else {\n for (i in obj) {\n if (callback.call(obj[i], i, obj[i]) === false) {\n break;\n }\n }\n }\n\n return obj;\n },\n // results is for internal usage only\n makeArray: function makeArray(arr, results) {\n var ret = results || [];\n\n if (arr != null) {\n if (isArrayLike(Object(arr))) {\n jQuery.merge(ret, typeof arr === \"string\" ? [arr] : arr);\n } else {\n push.call(ret, arr);\n }\n }\n\n return ret;\n },\n inArray: function inArray(elem, arr, i) {\n return arr == null ? -1 : indexOf.call(arr, elem, i);\n },\n // Support: Android <=4.0 only, PhantomJS 1 only\n // push.apply(_, arraylike) throws on ancient WebKit\n merge: function merge(first, second) {\n var len = +second.length,\n j = 0,\n i = first.length;\n\n for (; j < len; j++) {\n first[i++] = second[j];\n }\n\n first.length = i;\n return first;\n },\n grep: function grep(elems, callback, invert) {\n var callbackInverse,\n matches = [],\n i = 0,\n length = elems.length,\n callbackExpect = !invert; // Go through the array, only saving the items\n // that pass the validator function\n\n for (; i < length; i++) {\n callbackInverse = !callback(elems[i], i);\n\n if (callbackInverse !== callbackExpect) {\n matches.push(elems[i]);\n }\n }\n\n return matches;\n },\n // arg is for internal usage only\n map: function map(elems, callback, arg) {\n var length,\n value,\n i = 0,\n ret = []; // Go through the array, translating each of the items to their new values\n\n if (isArrayLike(elems)) {\n length = elems.length;\n\n for (; i < length; i++) {\n value = callback(elems[i], i, arg);\n\n if (value != null) {\n ret.push(value);\n }\n } // Go through every key on the object,\n\n } else {\n for (i in elems) {\n value = callback(elems[i], i, arg);\n\n if (value != null) {\n ret.push(value);\n }\n }\n } // Flatten any nested arrays\n\n\n return flat(ret);\n },\n // A global GUID counter for objects\n guid: 1,\n // jQuery.support is not used in Core but other projects attach their\n // properties to it so it needs to exist.\n support: support\n });\n\n if (typeof Symbol === \"function\") {\n jQuery.fn[Symbol.iterator] = arr[Symbol.iterator];\n } // Populate the class2type map\n\n\n jQuery.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"), function (_i, name) {\n class2type[\"[object \" + name + \"]\"] = name.toLowerCase();\n });\n\n function isArrayLike(obj) {\n // Support: real iOS 8.2 only (not reproducible in simulator)\n // `in` check used to prevent JIT error (gh-2145)\n // hasOwn isn't used here due to false negatives\n // regarding Nodelist length in IE\n var length = !!obj && \"length\" in obj && obj.length,\n type = toType(obj);\n\n if (isFunction(obj) || isWindow(obj)) {\n return false;\n }\n\n return type === \"array\" || length === 0 || typeof length === \"number\" && length > 0 && length - 1 in obj;\n }\n\n return jQuery;\n});","define(function () {\n \"use strict\";\n\n return function isFunction(obj) {\n // Support: Chrome <=57, Firefox <=52\n // In some browsers, typeof returns \"function\" for HTML elements\n // (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n // We don't want to classify *any* DOM node as a function.\n // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n // Plus for old WebKit, typeof returns \"function\" for HTML collections\n // (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n return typeof obj === \"function\" && typeof obj.nodeType !== \"number\" && typeof obj.item !== \"function\";\n };\n});","define(function () {\n \"use strict\";\n\n return window.document;\n});","define([\"./selector-sizzle\"], function () {\n \"use strict\";\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n// This is CodeMirror (https://codemirror.net), a code editor\n// implemented in JavaScript on top of the browser's DOM.\n//\n// You can find some technical background for some of the code below\n// at http://marijnhaverbeke.nl/blog/#cm-internals .\n(function (global, factory) {\n (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.CodeMirror = factory());\n})(this, function () {\n 'use strict'; // Kludges for bugs and behavior differences that can't be feature\n // detected are enabled based on userAgent etc sniffing.\n\n var userAgent = navigator.userAgent;\n var platform = navigator.platform;\n var gecko = /gecko\\/\\d/i.test(userAgent);\n var ie_upto10 = /MSIE \\d/.test(userAgent);\n var ie_11up = /Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(userAgent);\n var edge = /Edge\\/(\\d+)/.exec(userAgent);\n var ie = ie_upto10 || ie_11up || edge;\n var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : +(edge || ie_11up)[1]);\n var webkit = !edge && /WebKit\\//.test(userAgent);\n var qtwebkit = webkit && /Qt\\/\\d+\\.\\d+/.test(userAgent);\n var chrome = !edge && /Chrome\\//.test(userAgent);\n var presto = /Opera\\//.test(userAgent);\n var safari = /Apple Computer/.test(navigator.vendor);\n var mac_geMountainLion = /Mac OS X 1\\d\\D([8-9]|\\d\\d)\\D/.test(userAgent);\n var phantom = /PhantomJS/.test(userAgent);\n var ios = safari && (/Mobile\\/\\w+/.test(userAgent) || navigator.maxTouchPoints > 2);\n var android = /Android/.test(userAgent); // This is woefully incomplete. Suggestions for alternative methods welcome.\n\n var mobile = ios || android || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent);\n var mac = ios || /Mac/.test(platform);\n var chromeOS = /\\bCrOS\\b/.test(userAgent);\n var windows = /win/i.test(platform);\n var presto_version = presto && userAgent.match(/Version\\/(\\d*\\.\\d*)/);\n\n if (presto_version) {\n presto_version = Number(presto_version[1]);\n }\n\n if (presto_version && presto_version >= 15) {\n presto = false;\n webkit = true;\n } // Some browsers use the wrong event properties to signal cmd/ctrl on OS X\n\n\n var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11));\n var captureRightClick = gecko || ie && ie_version >= 9;\n\n function classTest(cls) {\n return new RegExp(\"(^|\\\\s)\" + cls + \"(?:$|\\\\s)\\\\s*\");\n }\n\n var rmClass = function rmClass(node, cls) {\n var current = node.className;\n var match = classTest(cls).exec(current);\n\n if (match) {\n var after = current.slice(match.index + match[0].length);\n node.className = current.slice(0, match.index) + (after ? match[1] + after : \"\");\n }\n };\n\n function removeChildren(e) {\n for (var count = e.childNodes.length; count > 0; --count) {\n e.removeChild(e.firstChild);\n }\n\n return e;\n }\n\n function removeChildrenAndAdd(parent, e) {\n return removeChildren(parent).appendChild(e);\n }\n\n function elt(tag, content, className, style) {\n var e = document.createElement(tag);\n\n if (className) {\n e.className = className;\n }\n\n if (style) {\n e.style.cssText = style;\n }\n\n if (typeof content == \"string\") {\n e.appendChild(document.createTextNode(content));\n } else if (content) {\n for (var i = 0; i < content.length; ++i) {\n e.appendChild(content[i]);\n }\n }\n\n return e;\n } // wrapper for elt, which removes the elt from the accessibility tree\n\n\n function eltP(tag, content, className, style) {\n var e = elt(tag, content, className, style);\n e.setAttribute(\"role\", \"presentation\");\n return e;\n }\n\n var range;\n\n if (document.createRange) {\n range = function range(node, start, end, endNode) {\n var r = document.createRange();\n r.setEnd(endNode || node, end);\n r.setStart(node, start);\n return r;\n };\n } else {\n range = function range(node, start, end) {\n var r = document.body.createTextRange();\n\n try {\n r.moveToElementText(node.parentNode);\n } catch (e) {\n return r;\n }\n\n r.collapse(true);\n r.moveEnd(\"character\", end);\n r.moveStart(\"character\", start);\n return r;\n };\n }\n\n function contains(parent, child) {\n if (child.nodeType == 3) // Android browser always returns false when child is a textnode\n {\n child = child.parentNode;\n }\n\n if (parent.contains) {\n return parent.contains(child);\n }\n\n do {\n if (child.nodeType == 11) {\n child = child.host;\n }\n\n if (child == parent) {\n return true;\n }\n } while (child = child.parentNode);\n }\n\n function activeElt() {\n // IE and Edge may throw an \"Unspecified Error\" when accessing document.activeElement.\n // IE < 10 will throw when accessed while the page is loading or in an iframe.\n // IE > 9 and Edge will throw when accessed in an iframe if document.body is unavailable.\n var activeElement;\n\n try {\n activeElement = document.activeElement;\n } catch (e) {\n activeElement = document.body || null;\n }\n\n while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement) {\n activeElement = activeElement.shadowRoot.activeElement;\n }\n\n return activeElement;\n }\n\n function addClass(node, cls) {\n var current = node.className;\n\n if (!classTest(cls).test(current)) {\n node.className += (current ? \" \" : \"\") + cls;\n }\n }\n\n function joinClasses(a, b) {\n var as = a.split(\" \");\n\n for (var i = 0; i < as.length; i++) {\n if (as[i] && !classTest(as[i]).test(b)) {\n b += \" \" + as[i];\n }\n }\n\n return b;\n }\n\n var selectInput = function selectInput(node) {\n node.select();\n };\n\n if (ios) // Mobile Safari apparently has a bug where select() is broken.\n {\n selectInput = function selectInput(node) {\n node.selectionStart = 0;\n node.selectionEnd = node.value.length;\n };\n } else if (ie) // Suppress mysterious IE10 errors\n {\n selectInput = function selectInput(node) {\n try {\n node.select();\n } catch (_e) {}\n };\n }\n\n function bind(f) {\n var args = Array.prototype.slice.call(arguments, 1);\n return function () {\n return f.apply(null, args);\n };\n }\n\n function copyObj(obj, target, overwrite) {\n if (!target) {\n target = {};\n }\n\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop))) {\n target[prop] = obj[prop];\n }\n }\n\n return target;\n } // Counts the column offset in a string, taking tabs into account.\n // Used mostly to find indentation.\n\n\n function countColumn(string, end, tabSize, startIndex, startValue) {\n if (end == null) {\n end = string.search(/[^\\s\\u00a0]/);\n\n if (end == -1) {\n end = string.length;\n }\n }\n\n for (var i = startIndex || 0, n = startValue || 0;;) {\n var nextTab = string.indexOf(\"\\t\", i);\n\n if (nextTab < 0 || nextTab >= end) {\n return n + (end - i);\n }\n\n n += nextTab - i;\n n += tabSize - n % tabSize;\n i = nextTab + 1;\n }\n }\n\n var Delayed = function Delayed() {\n this.id = null;\n this.f = null;\n this.time = 0;\n this.handler = bind(this.onTimeout, this);\n };\n\n Delayed.prototype.onTimeout = function (self) {\n self.id = 0;\n\n if (self.time <= +new Date()) {\n self.f();\n } else {\n setTimeout(self.handler, self.time - +new Date());\n }\n };\n\n Delayed.prototype.set = function (ms, f) {\n this.f = f;\n var time = +new Date() + ms;\n\n if (!this.id || time < this.time) {\n clearTimeout(this.id);\n this.id = setTimeout(this.handler, ms);\n this.time = time;\n }\n };\n\n function indexOf(array, elt) {\n for (var i = 0; i < array.length; ++i) {\n if (array[i] == elt) {\n return i;\n }\n }\n\n return -1;\n } // Number of pixels added to scroller and sizer to hide scrollbar\n\n\n var scrollerGap = 50; // Returned or thrown by various protocols to signal 'I'm not\n // handling this'.\n\n var Pass = {\n toString: function toString() {\n return \"CodeMirror.Pass\";\n }\n }; // Reused option objects for setSelection & friends\n\n var sel_dontScroll = {\n scroll: false\n },\n sel_mouse = {\n origin: \"*mouse\"\n },\n sel_move = {\n origin: \"+move\"\n }; // The inverse of countColumn -- find the offset that corresponds to\n // a particular column.\n\n function findColumn(string, goal, tabSize) {\n for (var pos = 0, col = 0;;) {\n var nextTab = string.indexOf(\"\\t\", pos);\n\n if (nextTab == -1) {\n nextTab = string.length;\n }\n\n var skipped = nextTab - pos;\n\n if (nextTab == string.length || col + skipped >= goal) {\n return pos + Math.min(skipped, goal - col);\n }\n\n col += nextTab - pos;\n col += tabSize - col % tabSize;\n pos = nextTab + 1;\n\n if (col >= goal) {\n return pos;\n }\n }\n }\n\n var spaceStrs = [\"\"];\n\n function spaceStr(n) {\n while (spaceStrs.length <= n) {\n spaceStrs.push(lst(spaceStrs) + \" \");\n }\n\n return spaceStrs[n];\n }\n\n function lst(arr) {\n return arr[arr.length - 1];\n }\n\n function map(array, f) {\n var out = [];\n\n for (var i = 0; i < array.length; i++) {\n out[i] = f(array[i], i);\n }\n\n return out;\n }\n\n function insertSorted(array, value, score) {\n var pos = 0,\n priority = score(value);\n\n while (pos < array.length && score(array[pos]) <= priority) {\n pos++;\n }\n\n array.splice(pos, 0, value);\n }\n\n function nothing() {}\n\n function createObj(base, props) {\n var inst;\n\n if (Object.create) {\n inst = Object.create(base);\n } else {\n nothing.prototype = base;\n inst = new nothing();\n }\n\n if (props) {\n copyObj(props, inst);\n }\n\n return inst;\n }\n\n var nonASCIISingleCaseWordChar = /[\\u00df\\u0587\\u0590-\\u05f4\\u0600-\\u06ff\\u3040-\\u309f\\u30a0-\\u30ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\uac00-\\ud7af]/;\n\n function isWordCharBasic(ch) {\n return /\\w/.test(ch) || ch > \"\\x80\" && (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch));\n }\n\n function isWordChar(ch, helper) {\n if (!helper) {\n return isWordCharBasic(ch);\n }\n\n if (helper.source.indexOf(\"\\\\w\") > -1 && isWordCharBasic(ch)) {\n return true;\n }\n\n return helper.test(ch);\n }\n\n function isEmpty(obj) {\n for (var n in obj) {\n if (obj.hasOwnProperty(n) && obj[n]) {\n return false;\n }\n }\n\n return true;\n } // Extending unicode characters. A series of a non-extending char +\n // any number of extending chars is treated as a single unit as far\n // as editing and measuring is concerned. This is not fully correct,\n // since some scripts/fonts/browsers also treat other configurations\n // of code points as a group.\n\n\n var extendingChars = /[\\u0300-\\u036f\\u0483-\\u0489\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u065e\\u0670\\u06d6-\\u06dc\\u06de-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0900-\\u0902\\u093c\\u0941-\\u0948\\u094d\\u0951-\\u0955\\u0962\\u0963\\u0981\\u09bc\\u09be\\u09c1-\\u09c4\\u09cd\\u09d7\\u09e2\\u09e3\\u0a01\\u0a02\\u0a3c\\u0a41\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a70\\u0a71\\u0a75\\u0a81\\u0a82\\u0abc\\u0ac1-\\u0ac5\\u0ac7\\u0ac8\\u0acd\\u0ae2\\u0ae3\\u0b01\\u0b3c\\u0b3e\\u0b3f\\u0b41-\\u0b44\\u0b4d\\u0b56\\u0b57\\u0b62\\u0b63\\u0b82\\u0bbe\\u0bc0\\u0bcd\\u0bd7\\u0c3e-\\u0c40\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0cbc\\u0cbf\\u0cc2\\u0cc6\\u0ccc\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0d3e\\u0d41-\\u0d44\\u0d4d\\u0d57\\u0d62\\u0d63\\u0dca\\u0dcf\\u0dd2-\\u0dd4\\u0dd6\\u0ddf\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0eb1\\u0eb4-\\u0eb9\\u0ebb\\u0ebc\\u0ec8-\\u0ecd\\u0f18\\u0f19\\u0f35\\u0f37\\u0f39\\u0f71-\\u0f7e\\u0f80-\\u0f84\\u0f86\\u0f87\\u0f90-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102d-\\u1030\\u1032-\\u1037\\u1039\\u103a\\u103d\\u103e\\u1058\\u1059\\u105e-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108d\\u109d\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b7-\\u17bd\\u17c6\\u17c9-\\u17d3\\u17dd\\u180b-\\u180d\\u18a9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193b\\u1a17\\u1a18\\u1a56\\u1a58-\\u1a5e\\u1a60\\u1a62\\u1a65-\\u1a6c\\u1a73-\\u1a7c\\u1a7f\\u1b00-\\u1b03\\u1b34\\u1b36-\\u1b3a\\u1b3c\\u1b42\\u1b6b-\\u1b73\\u1b80\\u1b81\\u1ba2-\\u1ba5\\u1ba8\\u1ba9\\u1c2c-\\u1c33\\u1c36\\u1c37\\u1cd0-\\u1cd2\\u1cd4-\\u1ce0\\u1ce2-\\u1ce8\\u1ced\\u1dc0-\\u1de6\\u1dfd-\\u1dff\\u200c\\u200d\\u20d0-\\u20f0\\u2cef-\\u2cf1\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua66f-\\ua672\\ua67c\\ua67d\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua825\\ua826\\ua8c4\\ua8e0-\\ua8f1\\ua926-\\ua92d\\ua947-\\ua951\\ua980-\\ua982\\ua9b3\\ua9b6-\\ua9b9\\ua9bc\\uaa29-\\uaa2e\\uaa31\\uaa32\\uaa35\\uaa36\\uaa43\\uaa4c\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uabe5\\uabe8\\uabed\\udc00-\\udfff\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe26\\uff9e\\uff9f]/;\n\n function isExtendingChar(ch) {\n return ch.charCodeAt(0) >= 768 && extendingChars.test(ch);\n } // Returns a number from the range [`0`; `str.length`] unless `pos` is outside that range.\n\n\n function skipExtendingChars(str, pos, dir) {\n while ((dir < 0 ? pos > 0 : pos < str.length) && isExtendingChar(str.charAt(pos))) {\n pos += dir;\n }\n\n return pos;\n } // Returns the value from the range [`from`; `to`] that satisfies\n // `pred` and is closest to `from`. Assumes that at least `to`\n // satisfies `pred`. Supports `from` being greater than `to`.\n\n\n function findFirst(pred, from, to) {\n // At any point we are certain `to` satisfies `pred`, don't know\n // whether `from` does.\n var dir = from > to ? -1 : 1;\n\n for (;;) {\n if (from == to) {\n return from;\n }\n\n var midF = (from + to) / 2,\n mid = dir < 0 ? Math.ceil(midF) : Math.floor(midF);\n\n if (mid == from) {\n return pred(mid) ? from : to;\n }\n\n if (pred(mid)) {\n to = mid;\n } else {\n from = mid + dir;\n }\n }\n } // BIDI HELPERS\n\n\n function iterateBidiSections(order, from, to, f) {\n if (!order) {\n return f(from, to, \"ltr\", 0);\n }\n\n var found = false;\n\n for (var i = 0; i < order.length; ++i) {\n var part = order[i];\n\n if (part.from < to && part.to > from || from == to && part.to == from) {\n f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? \"rtl\" : \"ltr\", i);\n found = true;\n }\n }\n\n if (!found) {\n f(from, to, \"ltr\");\n }\n }\n\n var bidiOther = null;\n\n function getBidiPartAt(order, ch, sticky) {\n var found;\n bidiOther = null;\n\n for (var i = 0; i < order.length; ++i) {\n var cur = order[i];\n\n if (cur.from < ch && cur.to > ch) {\n return i;\n }\n\n if (cur.to == ch) {\n if (cur.from != cur.to && sticky == \"before\") {\n found = i;\n } else {\n bidiOther = i;\n }\n }\n\n if (cur.from == ch) {\n if (cur.from != cur.to && sticky != \"before\") {\n found = i;\n } else {\n bidiOther = i;\n }\n }\n }\n\n return found != null ? found : bidiOther;\n } // Bidirectional ordering algorithm\n // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm\n // that this (partially) implements.\n // One-char codes used for character types:\n // L (L): Left-to-Right\n // R (R): Right-to-Left\n // r (AL): Right-to-Left Arabic\n // 1 (EN): European Number\n // + (ES): European Number Separator\n // % (ET): European Number Terminator\n // n (AN): Arabic Number\n // , (CS): Common Number Separator\n // m (NSM): Non-Spacing Mark\n // b (BN): Boundary Neutral\n // s (B): Paragraph Separator\n // t (S): Segment Separator\n // w (WS): Whitespace\n // N (ON): Other Neutrals\n // Returns null if characters are ordered as they appear\n // (left-to-right), or an array of sections ({from, to, level}\n // objects) in the order in which they occur visually.\n\n\n var bidiOrdering = function () {\n // Character types for codepoints 0 to 0xff\n var lowTypes = \"bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN\"; // Character types for codepoints 0x600 to 0x6f9\n\n var arabicTypes = \"nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111\";\n\n function charType(code) {\n if (code <= 0xf7) {\n return lowTypes.charAt(code);\n } else if (0x590 <= code && code <= 0x5f4) {\n return \"R\";\n } else if (0x600 <= code && code <= 0x6f9) {\n return arabicTypes.charAt(code - 0x600);\n } else if (0x6ee <= code && code <= 0x8ac) {\n return \"r\";\n } else if (0x2000 <= code && code <= 0x200b) {\n return \"w\";\n } else if (code == 0x200c) {\n return \"b\";\n } else {\n return \"L\";\n }\n }\n\n var bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/;\n var isNeutral = /[stwN]/,\n isStrong = /[LRr]/,\n countsAsLeft = /[Lb1n]/,\n countsAsNum = /[1n]/;\n\n function BidiSpan(level, from, to) {\n this.level = level;\n this.from = from;\n this.to = to;\n }\n\n return function (str, direction) {\n var outerType = direction == \"ltr\" ? \"L\" : \"R\";\n\n if (str.length == 0 || direction == \"ltr\" && !bidiRE.test(str)) {\n return false;\n }\n\n var len = str.length,\n types = [];\n\n for (var i = 0; i < len; ++i) {\n types.push(charType(str.charCodeAt(i)));\n } // W1. Examine each non-spacing mark (NSM) in the level run, and\n // change the type of the NSM to the type of the previous\n // character. If the NSM is at the start of the level run, it will\n // get the type of sor.\n\n\n for (var i$1 = 0, prev = outerType; i$1 < len; ++i$1) {\n var type = types[i$1];\n\n if (type == \"m\") {\n types[i$1] = prev;\n } else {\n prev = type;\n }\n } // W2. Search backwards from each instance of a European number\n // until the first strong type (R, L, AL, or sor) is found. If an\n // AL is found, change the type of the European number to Arabic\n // number.\n // W3. Change all ALs to R.\n\n\n for (var i$2 = 0, cur = outerType; i$2 < len; ++i$2) {\n var type$1 = types[i$2];\n\n if (type$1 == \"1\" && cur == \"r\") {\n types[i$2] = \"n\";\n } else if (isStrong.test(type$1)) {\n cur = type$1;\n\n if (type$1 == \"r\") {\n types[i$2] = \"R\";\n }\n }\n } // W4. A single European separator between two European numbers\n // changes to a European number. A single common separator between\n // two numbers of the same type changes to that type.\n\n\n for (var i$3 = 1, prev$1 = types[0]; i$3 < len - 1; ++i$3) {\n var type$2 = types[i$3];\n\n if (type$2 == \"+\" && prev$1 == \"1\" && types[i$3 + 1] == \"1\") {\n types[i$3] = \"1\";\n } else if (type$2 == \",\" && prev$1 == types[i$3 + 1] && (prev$1 == \"1\" || prev$1 == \"n\")) {\n types[i$3] = prev$1;\n }\n\n prev$1 = type$2;\n } // W5. A sequence of European terminators adjacent to European\n // numbers changes to all European numbers.\n // W6. Otherwise, separators and terminators change to Other\n // Neutral.\n\n\n for (var i$4 = 0; i$4 < len; ++i$4) {\n var type$3 = types[i$4];\n\n if (type$3 == \",\") {\n types[i$4] = \"N\";\n } else if (type$3 == \"%\") {\n var end = void 0;\n\n for (end = i$4 + 1; end < len && types[end] == \"%\"; ++end) {}\n\n var replace = i$4 && types[i$4 - 1] == \"!\" || end < len && types[end] == \"1\" ? \"1\" : \"N\";\n\n for (var j = i$4; j < end; ++j) {\n types[j] = replace;\n }\n\n i$4 = end - 1;\n }\n } // W7. Search backwards from each instance of a European number\n // until the first strong type (R, L, or sor) is found. If an L is\n // found, then change the type of the European number to L.\n\n\n for (var i$5 = 0, cur$1 = outerType; i$5 < len; ++i$5) {\n var type$4 = types[i$5];\n\n if (cur$1 == \"L\" && type$4 == \"1\") {\n types[i$5] = \"L\";\n } else if (isStrong.test(type$4)) {\n cur$1 = type$4;\n }\n } // N1. A sequence of neutrals takes the direction of the\n // surrounding strong text if the text on both sides has the same\n // direction. European and Arabic numbers act as if they were R in\n // terms of their influence on neutrals. Start-of-level-run (sor)\n // and end-of-level-run (eor) are used at level run boundaries.\n // N2. Any remaining neutrals take the embedding direction.\n\n\n for (var i$6 = 0; i$6 < len; ++i$6) {\n if (isNeutral.test(types[i$6])) {\n var end$1 = void 0;\n\n for (end$1 = i$6 + 1; end$1 < len && isNeutral.test(types[end$1]); ++end$1) {}\n\n var before = (i$6 ? types[i$6 - 1] : outerType) == \"L\";\n var after = (end$1 < len ? types[end$1] : outerType) == \"L\";\n var replace$1 = before == after ? before ? \"L\" : \"R\" : outerType;\n\n for (var j$1 = i$6; j$1 < end$1; ++j$1) {\n types[j$1] = replace$1;\n }\n\n i$6 = end$1 - 1;\n }\n } // Here we depart from the documented algorithm, in order to avoid\n // building up an actual levels array. Since there are only three\n // levels (0, 1, 2) in an implementation that doesn't take\n // explicit embedding into account, we can build up the order on\n // the fly, without following the level-based algorithm.\n\n\n var order = [],\n m;\n\n for (var i$7 = 0; i$7 < len;) {\n if (countsAsLeft.test(types[i$7])) {\n var start = i$7;\n\n for (++i$7; i$7 < len && countsAsLeft.test(types[i$7]); ++i$7) {}\n\n order.push(new BidiSpan(0, start, i$7));\n } else {\n var pos = i$7,\n at = order.length,\n isRTL = direction == \"rtl\" ? 1 : 0;\n\n for (++i$7; i$7 < len && types[i$7] != \"L\"; ++i$7) {}\n\n for (var j$2 = pos; j$2 < i$7;) {\n if (countsAsNum.test(types[j$2])) {\n if (pos < j$2) {\n order.splice(at, 0, new BidiSpan(1, pos, j$2));\n at += isRTL;\n }\n\n var nstart = j$2;\n\n for (++j$2; j$2 < i$7 && countsAsNum.test(types[j$2]); ++j$2) {}\n\n order.splice(at, 0, new BidiSpan(2, nstart, j$2));\n at += isRTL;\n pos = j$2;\n } else {\n ++j$2;\n }\n }\n\n if (pos < i$7) {\n order.splice(at, 0, new BidiSpan(1, pos, i$7));\n }\n }\n }\n\n if (direction == \"ltr\") {\n if (order[0].level == 1 && (m = str.match(/^\\s+/))) {\n order[0].from = m[0].length;\n order.unshift(new BidiSpan(0, 0, m[0].length));\n }\n\n if (lst(order).level == 1 && (m = str.match(/\\s+$/))) {\n lst(order).to -= m[0].length;\n order.push(new BidiSpan(0, len - m[0].length, len));\n }\n }\n\n return direction == \"rtl\" ? order.reverse() : order;\n };\n }(); // Get the bidi ordering for the given line (and cache it). Returns\n // false for lines that are fully left-to-right, and an array of\n // BidiSpan objects otherwise.\n\n\n function getOrder(line, direction) {\n var order = line.order;\n\n if (order == null) {\n order = line.order = bidiOrdering(line.text, direction);\n }\n\n return order;\n } // EVENT HANDLING\n // Lightweight event framework. on/off also work on DOM nodes,\n // registering native DOM handlers.\n\n\n var noHandlers = [];\n\n var on = function on(emitter, type, f) {\n if (emitter.addEventListener) {\n emitter.addEventListener(type, f, false);\n } else if (emitter.attachEvent) {\n emitter.attachEvent(\"on\" + type, f);\n } else {\n var map = emitter._handlers || (emitter._handlers = {});\n map[type] = (map[type] || noHandlers).concat(f);\n }\n };\n\n function getHandlers(emitter, type) {\n return emitter._handlers && emitter._handlers[type] || noHandlers;\n }\n\n function off(emitter, type, f) {\n if (emitter.removeEventListener) {\n emitter.removeEventListener(type, f, false);\n } else if (emitter.detachEvent) {\n emitter.detachEvent(\"on\" + type, f);\n } else {\n var map = emitter._handlers,\n arr = map && map[type];\n\n if (arr) {\n var index = indexOf(arr, f);\n\n if (index > -1) {\n map[type] = arr.slice(0, index).concat(arr.slice(index + 1));\n }\n }\n }\n }\n\n function signal(emitter, type\n /*, values...*/\n ) {\n var handlers = getHandlers(emitter, type);\n\n if (!handlers.length) {\n return;\n }\n\n var args = Array.prototype.slice.call(arguments, 2);\n\n for (var i = 0; i < handlers.length; ++i) {\n handlers[i].apply(null, args);\n }\n } // The DOM events that CodeMirror handles can be overridden by\n // registering a (non-DOM) handler on the editor for the event name,\n // and preventDefault-ing the event in that handler.\n\n\n function signalDOMEvent(cm, e, override) {\n if (typeof e == \"string\") {\n e = {\n type: e,\n preventDefault: function preventDefault() {\n this.defaultPrevented = true;\n }\n };\n }\n\n signal(cm, override || e.type, cm, e);\n return e_defaultPrevented(e) || e.codemirrorIgnore;\n }\n\n function signalCursorActivity(cm) {\n var arr = cm._handlers && cm._handlers.cursorActivity;\n\n if (!arr) {\n return;\n }\n\n var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []);\n\n for (var i = 0; i < arr.length; ++i) {\n if (indexOf(set, arr[i]) == -1) {\n set.push(arr[i]);\n }\n }\n }\n\n function hasHandler(emitter, type) {\n return getHandlers(emitter, type).length > 0;\n } // Add on and off methods to a constructor's prototype, to make\n // registering events on such objects more convenient.\n\n\n function eventMixin(ctor) {\n ctor.prototype.on = function (type, f) {\n on(this, type, f);\n };\n\n ctor.prototype.off = function (type, f) {\n off(this, type, f);\n };\n } // Due to the fact that we still support jurassic IE versions, some\n // compatibility wrappers are needed.\n\n\n function e_preventDefault(e) {\n if (e.preventDefault) {\n e.preventDefault();\n } else {\n e.returnValue = false;\n }\n }\n\n function e_stopPropagation(e) {\n if (e.stopPropagation) {\n e.stopPropagation();\n } else {\n e.cancelBubble = true;\n }\n }\n\n function e_defaultPrevented(e) {\n return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false;\n }\n\n function e_stop(e) {\n e_preventDefault(e);\n e_stopPropagation(e);\n }\n\n function e_target(e) {\n return e.target || e.srcElement;\n }\n\n function e_button(e) {\n var b = e.which;\n\n if (b == null) {\n if (e.button & 1) {\n b = 1;\n } else if (e.button & 2) {\n b = 3;\n } else if (e.button & 4) {\n b = 2;\n }\n }\n\n if (mac && e.ctrlKey && b == 1) {\n b = 3;\n }\n\n return b;\n } // Detect drag-and-drop\n\n\n var dragAndDrop = function () {\n // There is *some* kind of drag-and-drop support in IE6-8, but I\n // couldn't get it to work yet.\n if (ie && ie_version < 9) {\n return false;\n }\n\n var div = elt('div');\n return \"draggable\" in div || \"dragDrop\" in div;\n }();\n\n var zwspSupported;\n\n function zeroWidthElement(measure) {\n if (zwspSupported == null) {\n var test = elt(\"span\", \"\\u200B\");\n removeChildrenAndAdd(measure, elt(\"span\", [test, document.createTextNode(\"x\")]));\n\n if (measure.firstChild.offsetHeight != 0) {\n zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8);\n }\n }\n\n var node = zwspSupported ? elt(\"span\", \"\\u200B\") : elt(\"span\", \"\\xA0\", null, \"display: inline-block; width: 1px; margin-right: -1px\");\n node.setAttribute(\"cm-text\", \"\");\n return node;\n } // Feature-detect IE's crummy client rect reporting for bidi text\n\n\n var badBidiRects;\n\n function hasBadBidiRects(measure) {\n if (badBidiRects != null) {\n return badBidiRects;\n }\n\n var txt = removeChildrenAndAdd(measure, document.createTextNode(\"A\\u062EA\"));\n var r0 = range(txt, 0, 1).getBoundingClientRect();\n var r1 = range(txt, 1, 2).getBoundingClientRect();\n removeChildren(measure);\n\n if (!r0 || r0.left == r0.right) {\n return false;\n } // Safari returns null in some cases (#2780)\n\n\n return badBidiRects = r1.right - r0.right < 3;\n } // See if \"\".split is the broken IE version, if so, provide an\n // alternative way to split lines.\n\n\n var splitLinesAuto = \"\\n\\nb\".split(/\\n/).length != 3 ? function (string) {\n var pos = 0,\n result = [],\n l = string.length;\n\n while (pos <= l) {\n var nl = string.indexOf(\"\\n\", pos);\n\n if (nl == -1) {\n nl = string.length;\n }\n\n var line = string.slice(pos, string.charAt(nl - 1) == \"\\r\" ? nl - 1 : nl);\n var rt = line.indexOf(\"\\r\");\n\n if (rt != -1) {\n result.push(line.slice(0, rt));\n pos += rt + 1;\n } else {\n result.push(line);\n pos = nl + 1;\n }\n }\n\n return result;\n } : function (string) {\n return string.split(/\\r\\n?|\\n/);\n };\n var hasSelection = window.getSelection ? function (te) {\n try {\n return te.selectionStart != te.selectionEnd;\n } catch (e) {\n return false;\n }\n } : function (te) {\n var range;\n\n try {\n range = te.ownerDocument.selection.createRange();\n } catch (e) {}\n\n if (!range || range.parentElement() != te) {\n return false;\n }\n\n return range.compareEndPoints(\"StartToEnd\", range) != 0;\n };\n\n var hasCopyEvent = function () {\n var e = elt(\"div\");\n\n if (\"oncopy\" in e) {\n return true;\n }\n\n e.setAttribute(\"oncopy\", \"return;\");\n return typeof e.oncopy == \"function\";\n }();\n\n var badZoomedRects = null;\n\n function hasBadZoomedRects(measure) {\n if (badZoomedRects != null) {\n return badZoomedRects;\n }\n\n var node = removeChildrenAndAdd(measure, elt(\"span\", \"x\"));\n var normal = node.getBoundingClientRect();\n var fromRange = range(node, 0, 1).getBoundingClientRect();\n return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1;\n } // Known modes, by name and by MIME\n\n\n var modes = {},\n mimeModes = {}; // Extra arguments are stored as the mode's dependencies, which is\n // used by (legacy) mechanisms like loadmode.js to automatically\n // load a mode. (Preferred mechanism is the require/define calls.)\n\n function defineMode(name, mode) {\n if (arguments.length > 2) {\n mode.dependencies = Array.prototype.slice.call(arguments, 2);\n }\n\n modes[name] = mode;\n }\n\n function defineMIME(mime, spec) {\n mimeModes[mime] = spec;\n } // Given a MIME type, a {name, ...options} config object, or a name\n // string, return a mode config object.\n\n\n function resolveMode(spec) {\n if (typeof spec == \"string\" && mimeModes.hasOwnProperty(spec)) {\n spec = mimeModes[spec];\n } else if (spec && typeof spec.name == \"string\" && mimeModes.hasOwnProperty(spec.name)) {\n var found = mimeModes[spec.name];\n\n if (typeof found == \"string\") {\n found = {\n name: found\n };\n }\n\n spec = createObj(found, spec);\n spec.name = found.name;\n } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+xml$/.test(spec)) {\n return resolveMode(\"application/xml\");\n } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+json$/.test(spec)) {\n return resolveMode(\"application/json\");\n }\n\n if (typeof spec == \"string\") {\n return {\n name: spec\n };\n } else {\n return spec || {\n name: \"null\"\n };\n }\n } // Given a mode spec (anything that resolveMode accepts), find and\n // initialize an actual mode object.\n\n\n function getMode(options, spec) {\n spec = resolveMode(spec);\n var mfactory = modes[spec.name];\n\n if (!mfactory) {\n return getMode(options, \"text/plain\");\n }\n\n var modeObj = mfactory(options, spec);\n\n if (modeExtensions.hasOwnProperty(spec.name)) {\n var exts = modeExtensions[spec.name];\n\n for (var prop in exts) {\n if (!exts.hasOwnProperty(prop)) {\n continue;\n }\n\n if (modeObj.hasOwnProperty(prop)) {\n modeObj[\"_\" + prop] = modeObj[prop];\n }\n\n modeObj[prop] = exts[prop];\n }\n }\n\n modeObj.name = spec.name;\n\n if (spec.helperType) {\n modeObj.helperType = spec.helperType;\n }\n\n if (spec.modeProps) {\n for (var prop$1 in spec.modeProps) {\n modeObj[prop$1] = spec.modeProps[prop$1];\n }\n }\n\n return modeObj;\n } // This can be used to attach properties to mode objects from\n // outside the actual mode definition.\n\n\n var modeExtensions = {};\n\n function extendMode(mode, properties) {\n var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : modeExtensions[mode] = {};\n copyObj(properties, exts);\n }\n\n function copyState(mode, state) {\n if (state === true) {\n return state;\n }\n\n if (mode.copyState) {\n return mode.copyState(state);\n }\n\n var nstate = {};\n\n for (var n in state) {\n var val = state[n];\n\n if (val instanceof Array) {\n val = val.concat([]);\n }\n\n nstate[n] = val;\n }\n\n return nstate;\n } // Given a mode and a state (for that mode), find the inner mode and\n // state at the position that the state refers to.\n\n\n function innerMode(mode, state) {\n var info;\n\n while (mode.innerMode) {\n info = mode.innerMode(state);\n\n if (!info || info.mode == mode) {\n break;\n }\n\n state = info.state;\n mode = info.mode;\n }\n\n return info || {\n mode: mode,\n state: state\n };\n }\n\n function startState(mode, a1, a2) {\n return mode.startState ? mode.startState(a1, a2) : true;\n } // STRING STREAM\n // Fed to the mode parsers, provides helper functions to make\n // parsers more succinct.\n\n\n var StringStream = function StringStream(string, tabSize, lineOracle) {\n this.pos = this.start = 0;\n this.string = string;\n this.tabSize = tabSize || 8;\n this.lastColumnPos = this.lastColumnValue = 0;\n this.lineStart = 0;\n this.lineOracle = lineOracle;\n };\n\n StringStream.prototype.eol = function () {\n return this.pos >= this.string.length;\n };\n\n StringStream.prototype.sol = function () {\n return this.pos == this.lineStart;\n };\n\n StringStream.prototype.peek = function () {\n return this.string.charAt(this.pos) || undefined;\n };\n\n StringStream.prototype.next = function () {\n if (this.pos < this.string.length) {\n return this.string.charAt(this.pos++);\n }\n };\n\n StringStream.prototype.eat = function (match) {\n var ch = this.string.charAt(this.pos);\n var ok;\n\n if (typeof match == \"string\") {\n ok = ch == match;\n } else {\n ok = ch && (match.test ? match.test(ch) : match(ch));\n }\n\n if (ok) {\n ++this.pos;\n return ch;\n }\n };\n\n StringStream.prototype.eatWhile = function (match) {\n var start = this.pos;\n\n while (this.eat(match)) {}\n\n return this.pos > start;\n };\n\n StringStream.prototype.eatSpace = function () {\n var start = this.pos;\n\n while (/[\\s\\u00a0]/.test(this.string.charAt(this.pos))) {\n ++this.pos;\n }\n\n return this.pos > start;\n };\n\n StringStream.prototype.skipToEnd = function () {\n this.pos = this.string.length;\n };\n\n StringStream.prototype.skipTo = function (ch) {\n var found = this.string.indexOf(ch, this.pos);\n\n if (found > -1) {\n this.pos = found;\n return true;\n }\n };\n\n StringStream.prototype.backUp = function (n) {\n this.pos -= n;\n };\n\n StringStream.prototype.column = function () {\n if (this.lastColumnPos < this.start) {\n this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue);\n this.lastColumnPos = this.start;\n }\n\n return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0);\n };\n\n StringStream.prototype.indentation = function () {\n return countColumn(this.string, null, this.tabSize) - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0);\n };\n\n StringStream.prototype.match = function (pattern, consume, caseInsensitive) {\n if (typeof pattern == \"string\") {\n var cased = function cased(str) {\n return caseInsensitive ? str.toLowerCase() : str;\n };\n\n var substr = this.string.substr(this.pos, pattern.length);\n\n if (cased(substr) == cased(pattern)) {\n if (consume !== false) {\n this.pos += pattern.length;\n }\n\n return true;\n }\n } else {\n var match = this.string.slice(this.pos).match(pattern);\n\n if (match && match.index > 0) {\n return null;\n }\n\n if (match && consume !== false) {\n this.pos += match[0].length;\n }\n\n return match;\n }\n };\n\n StringStream.prototype.current = function () {\n return this.string.slice(this.start, this.pos);\n };\n\n StringStream.prototype.hideFirstChars = function (n, inner) {\n this.lineStart += n;\n\n try {\n return inner();\n } finally {\n this.lineStart -= n;\n }\n };\n\n StringStream.prototype.lookAhead = function (n) {\n var oracle = this.lineOracle;\n return oracle && oracle.lookAhead(n);\n };\n\n StringStream.prototype.baseToken = function () {\n var oracle = this.lineOracle;\n return oracle && oracle.baseToken(this.pos);\n }; // Find the line object corresponding to the given line number.\n\n\n function getLine(doc, n) {\n n -= doc.first;\n\n if (n < 0 || n >= doc.size) {\n throw new Error(\"There is no line \" + (n + doc.first) + \" in the document.\");\n }\n\n var chunk = doc;\n\n while (!chunk.lines) {\n for (var i = 0;; ++i) {\n var child = chunk.children[i],\n sz = child.chunkSize();\n\n if (n < sz) {\n chunk = child;\n break;\n }\n\n n -= sz;\n }\n }\n\n return chunk.lines[n];\n } // Get the part of a document between two positions, as an array of\n // strings.\n\n\n function getBetween(doc, start, end) {\n var out = [],\n n = start.line;\n doc.iter(start.line, end.line + 1, function (line) {\n var text = line.text;\n\n if (n == end.line) {\n text = text.slice(0, end.ch);\n }\n\n if (n == start.line) {\n text = text.slice(start.ch);\n }\n\n out.push(text);\n ++n;\n });\n return out;\n } // Get the lines between from and to, as array of strings.\n\n\n function getLines(doc, from, to) {\n var out = [];\n doc.iter(from, to, function (line) {\n out.push(line.text);\n }); // iter aborts when callback returns truthy value\n\n return out;\n } // Update the height of a line, propagating the height change\n // upwards to parent nodes.\n\n\n function updateLineHeight(line, height) {\n var diff = height - line.height;\n\n if (diff) {\n for (var n = line; n; n = n.parent) {\n n.height += diff;\n }\n }\n } // Given a line object, find its line number by walking up through\n // its parent links.\n\n\n function lineNo(line) {\n if (line.parent == null) {\n return null;\n }\n\n var cur = line.parent,\n no = indexOf(cur.lines, line);\n\n for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) {\n for (var i = 0;; ++i) {\n if (chunk.children[i] == cur) {\n break;\n }\n\n no += chunk.children[i].chunkSize();\n }\n }\n\n return no + cur.first;\n } // Find the line at the given vertical position, using the height\n // information in the document tree.\n\n\n function _lineAtHeight(chunk, h) {\n var n = chunk.first;\n\n outer: do {\n for (var i$1 = 0; i$1 < chunk.children.length; ++i$1) {\n var child = chunk.children[i$1],\n ch = child.height;\n\n if (h < ch) {\n chunk = child;\n continue outer;\n }\n\n h -= ch;\n n += child.chunkSize();\n }\n\n return n;\n } while (!chunk.lines);\n\n var i = 0;\n\n for (; i < chunk.lines.length; ++i) {\n var line = chunk.lines[i],\n lh = line.height;\n\n if (h < lh) {\n break;\n }\n\n h -= lh;\n }\n\n return n + i;\n }\n\n function isLine(doc, l) {\n return l >= doc.first && l < doc.first + doc.size;\n }\n\n function lineNumberFor(options, i) {\n return String(options.lineNumberFormatter(i + options.firstLineNumber));\n } // A Pos instance represents a position within the text.\n\n\n function Pos(line, ch, sticky) {\n if (sticky === void 0) sticky = null;\n\n if (!(this instanceof Pos)) {\n return new Pos(line, ch, sticky);\n }\n\n this.line = line;\n this.ch = ch;\n this.sticky = sticky;\n } // Compare two positions, return 0 if they are the same, a negative\n // number when a is less, and a positive number otherwise.\n\n\n function cmp(a, b) {\n return a.line - b.line || a.ch - b.ch;\n }\n\n function equalCursorPos(a, b) {\n return a.sticky == b.sticky && cmp(a, b) == 0;\n }\n\n function copyPos(x) {\n return Pos(x.line, x.ch);\n }\n\n function maxPos(a, b) {\n return cmp(a, b) < 0 ? b : a;\n }\n\n function minPos(a, b) {\n return cmp(a, b) < 0 ? a : b;\n } // Most of the external API clips given positions to make sure they\n // actually exist within the document.\n\n\n function clipLine(doc, n) {\n return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1));\n }\n\n function _clipPos(doc, pos) {\n if (pos.line < doc.first) {\n return Pos(doc.first, 0);\n }\n\n var last = doc.first + doc.size - 1;\n\n if (pos.line > last) {\n return Pos(last, getLine(doc, last).text.length);\n }\n\n return clipToLen(pos, getLine(doc, pos.line).text.length);\n }\n\n function clipToLen(pos, linelen) {\n var ch = pos.ch;\n\n if (ch == null || ch > linelen) {\n return Pos(pos.line, linelen);\n } else if (ch < 0) {\n return Pos(pos.line, 0);\n } else {\n return pos;\n }\n }\n\n function clipPosArray(doc, array) {\n var out = [];\n\n for (var i = 0; i < array.length; i++) {\n out[i] = _clipPos(doc, array[i]);\n }\n\n return out;\n }\n\n var SavedContext = function SavedContext(state, lookAhead) {\n this.state = state;\n this.lookAhead = lookAhead;\n };\n\n var Context = function Context(doc, state, line, lookAhead) {\n this.state = state;\n this.doc = doc;\n this.line = line;\n this.maxLookAhead = lookAhead || 0;\n this.baseTokens = null;\n this.baseTokenPos = 1;\n };\n\n Context.prototype.lookAhead = function (n) {\n var line = this.doc.getLine(this.line + n);\n\n if (line != null && n > this.maxLookAhead) {\n this.maxLookAhead = n;\n }\n\n return line;\n };\n\n Context.prototype.baseToken = function (n) {\n if (!this.baseTokens) {\n return null;\n }\n\n while (this.baseTokens[this.baseTokenPos] <= n) {\n this.baseTokenPos += 2;\n }\n\n var type = this.baseTokens[this.baseTokenPos + 1];\n return {\n type: type && type.replace(/( |^)overlay .*/, \"\"),\n size: this.baseTokens[this.baseTokenPos] - n\n };\n };\n\n Context.prototype.nextLine = function () {\n this.line++;\n\n if (this.maxLookAhead > 0) {\n this.maxLookAhead--;\n }\n };\n\n Context.fromSaved = function (doc, saved, line) {\n if (saved instanceof SavedContext) {\n return new Context(doc, copyState(doc.mode, saved.state), line, saved.lookAhead);\n } else {\n return new Context(doc, copyState(doc.mode, saved), line);\n }\n };\n\n Context.prototype.save = function (copy) {\n var state = copy !== false ? copyState(this.doc.mode, this.state) : this.state;\n return this.maxLookAhead > 0 ? new SavedContext(state, this.maxLookAhead) : state;\n }; // Compute a style array (an array starting with a mode generation\n // -- for invalidation -- followed by pairs of end positions and\n // style strings), which is used to highlight the tokens on the\n // line.\n\n\n function highlightLine(cm, line, context, forceToEnd) {\n // A styles array always starts with a number identifying the\n // mode/overlays that it is based on (for easy invalidation).\n var st = [cm.state.modeGen],\n lineClasses = {}; // Compute the base array of styles\n\n runMode(cm, line.text, cm.doc.mode, context, function (end, style) {\n return st.push(end, style);\n }, lineClasses, forceToEnd);\n var state = context.state; // Run overlays, adjust style array.\n\n var loop = function loop(o) {\n context.baseTokens = st;\n var overlay = cm.state.overlays[o],\n i = 1,\n at = 0;\n context.state = true;\n runMode(cm, line.text, overlay.mode, context, function (end, style) {\n var start = i; // Ensure there's a token end at the current position, and that i points at it\n\n while (at < end) {\n var i_end = st[i];\n\n if (i_end > end) {\n st.splice(i, 1, end, st[i + 1], i_end);\n }\n\n i += 2;\n at = Math.min(end, i_end);\n }\n\n if (!style) {\n return;\n }\n\n if (overlay.opaque) {\n st.splice(start, i - start, end, \"overlay \" + style);\n i = start + 2;\n } else {\n for (; start < i; start += 2) {\n var cur = st[start + 1];\n st[start + 1] = (cur ? cur + \" \" : \"\") + \"overlay \" + style;\n }\n }\n }, lineClasses);\n context.state = state;\n context.baseTokens = null;\n context.baseTokenPos = 1;\n };\n\n for (var o = 0; o < cm.state.overlays.length; ++o) {\n loop(o);\n }\n\n return {\n styles: st,\n classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null\n };\n }\n\n function getLineStyles(cm, line, updateFrontier) {\n if (!line.styles || line.styles[0] != cm.state.modeGen) {\n var context = getContextBefore(cm, lineNo(line));\n var resetState = line.text.length > cm.options.maxHighlightLength && copyState(cm.doc.mode, context.state);\n var result = highlightLine(cm, line, context);\n\n if (resetState) {\n context.state = resetState;\n }\n\n line.stateAfter = context.save(!resetState);\n line.styles = result.styles;\n\n if (result.classes) {\n line.styleClasses = result.classes;\n } else if (line.styleClasses) {\n line.styleClasses = null;\n }\n\n if (updateFrontier === cm.doc.highlightFrontier) {\n cm.doc.modeFrontier = Math.max(cm.doc.modeFrontier, ++cm.doc.highlightFrontier);\n }\n }\n\n return line.styles;\n }\n\n function getContextBefore(cm, n, precise) {\n var doc = cm.doc,\n display = cm.display;\n\n if (!doc.mode.startState) {\n return new Context(doc, true, n);\n }\n\n var start = findStartLine(cm, n, precise);\n var saved = start > doc.first && getLine(doc, start - 1).stateAfter;\n var context = saved ? Context.fromSaved(doc, saved, start) : new Context(doc, startState(doc.mode), start);\n doc.iter(start, n, function (line) {\n processLine(cm, line.text, context);\n var pos = context.line;\n line.stateAfter = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo ? context.save() : null;\n context.nextLine();\n });\n\n if (precise) {\n doc.modeFrontier = context.line;\n }\n\n return context;\n } // Lightweight form of highlight -- proceed over this line and\n // update state, but don't save a style array. Used for lines that\n // aren't currently visible.\n\n\n function processLine(cm, text, context, startAt) {\n var mode = cm.doc.mode;\n var stream = new StringStream(text, cm.options.tabSize, context);\n stream.start = stream.pos = startAt || 0;\n\n if (text == \"\") {\n callBlankLine(mode, context.state);\n }\n\n while (!stream.eol()) {\n readToken(mode, stream, context.state);\n stream.start = stream.pos;\n }\n }\n\n function callBlankLine(mode, state) {\n if (mode.blankLine) {\n return mode.blankLine(state);\n }\n\n if (!mode.innerMode) {\n return;\n }\n\n var inner = innerMode(mode, state);\n\n if (inner.mode.blankLine) {\n return inner.mode.blankLine(inner.state);\n }\n }\n\n function readToken(mode, stream, state, inner) {\n for (var i = 0; i < 10; i++) {\n if (inner) {\n inner[0] = innerMode(mode, state).mode;\n }\n\n var style = mode.token(stream, state);\n\n if (stream.pos > stream.start) {\n return style;\n }\n }\n\n throw new Error(\"Mode \" + mode.name + \" failed to advance stream.\");\n }\n\n var Token = function Token(stream, type, state) {\n this.start = stream.start;\n this.end = stream.pos;\n this.string = stream.current();\n this.type = type || null;\n this.state = state;\n }; // Utility for getTokenAt and getLineTokens\n\n\n function takeToken(cm, pos, precise, asArray) {\n var doc = cm.doc,\n mode = doc.mode,\n style;\n pos = _clipPos(doc, pos);\n var line = getLine(doc, pos.line),\n context = getContextBefore(cm, pos.line, precise);\n var stream = new StringStream(line.text, cm.options.tabSize, context),\n tokens;\n\n if (asArray) {\n tokens = [];\n }\n\n while ((asArray || stream.pos < pos.ch) && !stream.eol()) {\n stream.start = stream.pos;\n style = readToken(mode, stream, context.state);\n\n if (asArray) {\n tokens.push(new Token(stream, style, copyState(doc.mode, context.state)));\n }\n }\n\n return asArray ? tokens : new Token(stream, style, context.state);\n }\n\n function extractLineClasses(type, output) {\n if (type) {\n for (;;) {\n var lineClass = type.match(/(?:^|\\s+)line-(background-)?(\\S+)/);\n\n if (!lineClass) {\n break;\n }\n\n type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length);\n var prop = lineClass[1] ? \"bgClass\" : \"textClass\";\n\n if (output[prop] == null) {\n output[prop] = lineClass[2];\n } else if (!new RegExp(\"(?:^|\\\\s)\" + lineClass[2] + \"(?:$|\\\\s)\").test(output[prop])) {\n output[prop] += \" \" + lineClass[2];\n }\n }\n }\n\n return type;\n } // Run the given mode's parser over a line, calling f for each token.\n\n\n function runMode(cm, text, mode, context, f, lineClasses, forceToEnd) {\n var flattenSpans = mode.flattenSpans;\n\n if (flattenSpans == null) {\n flattenSpans = cm.options.flattenSpans;\n }\n\n var curStart = 0,\n curStyle = null;\n var stream = new StringStream(text, cm.options.tabSize, context),\n style;\n var inner = cm.options.addModeClass && [null];\n\n if (text == \"\") {\n extractLineClasses(callBlankLine(mode, context.state), lineClasses);\n }\n\n while (!stream.eol()) {\n if (stream.pos > cm.options.maxHighlightLength) {\n flattenSpans = false;\n\n if (forceToEnd) {\n processLine(cm, text, context, stream.pos);\n }\n\n stream.pos = text.length;\n style = null;\n } else {\n style = extractLineClasses(readToken(mode, stream, context.state, inner), lineClasses);\n }\n\n if (inner) {\n var mName = inner[0].name;\n\n if (mName) {\n style = \"m-\" + (style ? mName + \" \" + style : mName);\n }\n }\n\n if (!flattenSpans || curStyle != style) {\n while (curStart < stream.start) {\n curStart = Math.min(stream.start, curStart + 5000);\n f(curStart, curStyle);\n }\n\n curStyle = style;\n }\n\n stream.start = stream.pos;\n }\n\n while (curStart < stream.pos) {\n // Webkit seems to refuse to render text nodes longer than 57444\n // characters, and returns inaccurate measurements in nodes\n // starting around 5000 chars.\n var pos = Math.min(stream.pos, curStart + 5000);\n f(pos, curStyle);\n curStart = pos;\n }\n } // Finds the line to start with when starting a parse. Tries to\n // find a line with a stateAfter, so that it can start with a\n // valid state. If that fails, it returns the line with the\n // smallest indentation, which tends to need the least context to\n // parse correctly.\n\n\n function findStartLine(cm, n, precise) {\n var minindent,\n minline,\n doc = cm.doc;\n var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100);\n\n for (var search = n; search > lim; --search) {\n if (search <= doc.first) {\n return doc.first;\n }\n\n var line = getLine(doc, search - 1),\n after = line.stateAfter;\n\n if (after && (!precise || search + (after instanceof SavedContext ? after.lookAhead : 0) <= doc.modeFrontier)) {\n return search;\n }\n\n var indented = countColumn(line.text, null, cm.options.tabSize);\n\n if (minline == null || minindent > indented) {\n minline = search - 1;\n minindent = indented;\n }\n }\n\n return minline;\n }\n\n function retreatFrontier(doc, n) {\n doc.modeFrontier = Math.min(doc.modeFrontier, n);\n\n if (doc.highlightFrontier < n - 10) {\n return;\n }\n\n var start = doc.first;\n\n for (var line = n - 1; line > start; line--) {\n var saved = getLine(doc, line).stateAfter; // change is on 3\n // state on line 1 looked ahead 2 -- so saw 3\n // test 1 + 2 < 3 should cover this\n\n if (saved && (!(saved instanceof SavedContext) || line + saved.lookAhead < n)) {\n start = line + 1;\n break;\n }\n }\n\n doc.highlightFrontier = Math.min(doc.highlightFrontier, start);\n } // Optimize some code when these features are not used.\n\n\n var sawReadOnlySpans = false,\n sawCollapsedSpans = false;\n\n function seeReadOnlySpans() {\n sawReadOnlySpans = true;\n }\n\n function seeCollapsedSpans() {\n sawCollapsedSpans = true;\n } // TEXTMARKER SPANS\n\n\n function MarkedSpan(marker, from, to) {\n this.marker = marker;\n this.from = from;\n this.to = to;\n } // Search an array of spans for a span matching the given marker.\n\n\n function getMarkedSpanFor(spans, marker) {\n if (spans) {\n for (var i = 0; i < spans.length; ++i) {\n var span = spans[i];\n\n if (span.marker == marker) {\n return span;\n }\n }\n }\n } // Remove a span from an array, returning undefined if no spans are\n // left (we don't store arrays for lines without spans).\n\n\n function removeMarkedSpan(spans, span) {\n var r;\n\n for (var i = 0; i < spans.length; ++i) {\n if (spans[i] != span) {\n (r || (r = [])).push(spans[i]);\n }\n }\n\n return r;\n } // Add a span to a line.\n\n\n function addMarkedSpan(line, span, op) {\n var inThisOp = op && window.WeakSet && (op.markedSpans || (op.markedSpans = new WeakSet()));\n\n if (inThisOp && inThisOp.has(line.markedSpans)) {\n line.markedSpans.push(span);\n } else {\n line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span];\n\n if (inThisOp) {\n inThisOp.add(line.markedSpans);\n }\n }\n\n span.marker.attachLine(line);\n } // Used for the algorithm that adjusts markers for a change in the\n // document. These functions cut an array of spans at a given\n // character position, returning an array of remaining chunks (or\n // undefined if nothing remains).\n\n\n function markedSpansBefore(old, startCh, isInsert) {\n var nw;\n\n if (old) {\n for (var i = 0; i < old.length; ++i) {\n var span = old[i],\n marker = span.marker;\n var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh);\n\n if (startsBefore || span.from == startCh && marker.type == \"bookmark\" && (!isInsert || !span.marker.insertLeft)) {\n var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh);\n (nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to));\n }\n }\n }\n\n return nw;\n }\n\n function markedSpansAfter(old, endCh, isInsert) {\n var nw;\n\n if (old) {\n for (var i = 0; i < old.length; ++i) {\n var span = old[i],\n marker = span.marker;\n var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh);\n\n if (endsAfter || span.from == endCh && marker.type == \"bookmark\" && (!isInsert || span.marker.insertLeft)) {\n var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh);\n (nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh, span.to == null ? null : span.to - endCh));\n }\n }\n }\n\n return nw;\n } // Given a change object, compute the new set of marker spans that\n // cover the line in which the change took place. Removes spans\n // entirely within the change, reconnects spans belonging to the\n // same marker that appear on both sides of the change, and cuts off\n // spans partially within the change. Returns an array of span\n // arrays with one element for each line in (after) the change.\n\n\n function stretchSpansOverChange(doc, change) {\n if (change.full) {\n return null;\n }\n\n var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans;\n var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans;\n\n if (!oldFirst && !oldLast) {\n return null;\n }\n\n var startCh = change.from.ch,\n endCh = change.to.ch,\n isInsert = cmp(change.from, change.to) == 0; // Get the spans that 'stick out' on both sides\n\n var first = markedSpansBefore(oldFirst, startCh, isInsert);\n var last = markedSpansAfter(oldLast, endCh, isInsert); // Next, merge those two ends\n\n var sameLine = change.text.length == 1,\n offset = lst(change.text).length + (sameLine ? startCh : 0);\n\n if (first) {\n // Fix up .to properties of first\n for (var i = 0; i < first.length; ++i) {\n var span = first[i];\n\n if (span.to == null) {\n var found = getMarkedSpanFor(last, span.marker);\n\n if (!found) {\n span.to = startCh;\n } else if (sameLine) {\n span.to = found.to == null ? null : found.to + offset;\n }\n }\n }\n }\n\n if (last) {\n // Fix up .from in last (or move them into first in case of sameLine)\n for (var i$1 = 0; i$1 < last.length; ++i$1) {\n var span$1 = last[i$1];\n\n if (span$1.to != null) {\n span$1.to += offset;\n }\n\n if (span$1.from == null) {\n var found$1 = getMarkedSpanFor(first, span$1.marker);\n\n if (!found$1) {\n span$1.from = offset;\n\n if (sameLine) {\n (first || (first = [])).push(span$1);\n }\n }\n } else {\n span$1.from += offset;\n\n if (sameLine) {\n (first || (first = [])).push(span$1);\n }\n }\n }\n } // Make sure we didn't create any zero-length spans\n\n\n if (first) {\n first = clearEmptySpans(first);\n }\n\n if (last && last != first) {\n last = clearEmptySpans(last);\n }\n\n var newMarkers = [first];\n\n if (!sameLine) {\n // Fill gap with whole-line-spans\n var gap = change.text.length - 2,\n gapMarkers;\n\n if (gap > 0 && first) {\n for (var i$2 = 0; i$2 < first.length; ++i$2) {\n if (first[i$2].to == null) {\n (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i$2].marker, null, null));\n }\n }\n }\n\n for (var i$3 = 0; i$3 < gap; ++i$3) {\n newMarkers.push(gapMarkers);\n }\n\n newMarkers.push(last);\n }\n\n return newMarkers;\n } // Remove spans that are empty and don't have a clearWhenEmpty\n // option of false.\n\n\n function clearEmptySpans(spans) {\n for (var i = 0; i < spans.length; ++i) {\n var span = spans[i];\n\n if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false) {\n spans.splice(i--, 1);\n }\n }\n\n if (!spans.length) {\n return null;\n }\n\n return spans;\n } // Used to 'clip' out readOnly ranges when making a change.\n\n\n function removeReadOnlyRanges(doc, from, to) {\n var markers = null;\n doc.iter(from.line, to.line + 1, function (line) {\n if (line.markedSpans) {\n for (var i = 0; i < line.markedSpans.length; ++i) {\n var mark = line.markedSpans[i].marker;\n\n if (mark.readOnly && (!markers || indexOf(markers, mark) == -1)) {\n (markers || (markers = [])).push(mark);\n }\n }\n }\n });\n\n if (!markers) {\n return null;\n }\n\n var parts = [{\n from: from,\n to: to\n }];\n\n for (var i = 0; i < markers.length; ++i) {\n var mk = markers[i],\n m = mk.find(0);\n\n for (var j = 0; j < parts.length; ++j) {\n var p = parts[j];\n\n if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) {\n continue;\n }\n\n var newParts = [j, 1],\n dfrom = cmp(p.from, m.from),\n dto = cmp(p.to, m.to);\n\n if (dfrom < 0 || !mk.inclusiveLeft && !dfrom) {\n newParts.push({\n from: p.from,\n to: m.from\n });\n }\n\n if (dto > 0 || !mk.inclusiveRight && !dto) {\n newParts.push({\n from: m.to,\n to: p.to\n });\n }\n\n parts.splice.apply(parts, newParts);\n j += newParts.length - 3;\n }\n }\n\n return parts;\n } // Connect or disconnect spans from a line.\n\n\n function detachMarkedSpans(line) {\n var spans = line.markedSpans;\n\n if (!spans) {\n return;\n }\n\n for (var i = 0; i < spans.length; ++i) {\n spans[i].marker.detachLine(line);\n }\n\n line.markedSpans = null;\n }\n\n function attachMarkedSpans(line, spans) {\n if (!spans) {\n return;\n }\n\n for (var i = 0; i < spans.length; ++i) {\n spans[i].marker.attachLine(line);\n }\n\n line.markedSpans = spans;\n } // Helpers used when computing which overlapping collapsed span\n // counts as the larger one.\n\n\n function extraLeft(marker) {\n return marker.inclusiveLeft ? -1 : 0;\n }\n\n function extraRight(marker) {\n return marker.inclusiveRight ? 1 : 0;\n } // Returns a number indicating which of two overlapping collapsed\n // spans is larger (and thus includes the other). Falls back to\n // comparing ids when the spans cover exactly the same range.\n\n\n function compareCollapsedMarkers(a, b) {\n var lenDiff = a.lines.length - b.lines.length;\n\n if (lenDiff != 0) {\n return lenDiff;\n }\n\n var aPos = a.find(),\n bPos = b.find();\n var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b);\n\n if (fromCmp) {\n return -fromCmp;\n }\n\n var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b);\n\n if (toCmp) {\n return toCmp;\n }\n\n return b.id - a.id;\n } // Find out whether a line ends or starts in a collapsed span. If\n // so, return the marker for that span.\n\n\n function collapsedSpanAtSide(line, start) {\n var sps = sawCollapsedSpans && line.markedSpans,\n found;\n\n if (sps) {\n for (var sp = void 0, i = 0; i < sps.length; ++i) {\n sp = sps[i];\n\n if (sp.marker.collapsed && (start ? sp.from : sp.to) == null && (!found || compareCollapsedMarkers(found, sp.marker) < 0)) {\n found = sp.marker;\n }\n }\n }\n\n return found;\n }\n\n function collapsedSpanAtStart(line) {\n return collapsedSpanAtSide(line, true);\n }\n\n function collapsedSpanAtEnd(line) {\n return collapsedSpanAtSide(line, false);\n }\n\n function collapsedSpanAround(line, ch) {\n var sps = sawCollapsedSpans && line.markedSpans,\n found;\n\n if (sps) {\n for (var i = 0; i < sps.length; ++i) {\n var sp = sps[i];\n\n if (sp.marker.collapsed && (sp.from == null || sp.from < ch) && (sp.to == null || sp.to > ch) && (!found || compareCollapsedMarkers(found, sp.marker) < 0)) {\n found = sp.marker;\n }\n }\n }\n\n return found;\n } // Test whether there exists a collapsed span that partially\n // overlaps (covers the start or end, but not both) of a new span.\n // Such overlap is not allowed.\n\n\n function conflictingCollapsedRange(doc, lineNo, from, to, marker) {\n var line = getLine(doc, lineNo);\n var sps = sawCollapsedSpans && line.markedSpans;\n\n if (sps) {\n for (var i = 0; i < sps.length; ++i) {\n var sp = sps[i];\n\n if (!sp.marker.collapsed) {\n continue;\n }\n\n var found = sp.marker.find(0);\n var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker);\n var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker);\n\n if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) {\n continue;\n }\n\n if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) || fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0)) {\n return true;\n }\n }\n }\n } // A visual line is a line as drawn on the screen. Folding, for\n // example, can cause multiple logical lines to appear on the same\n // visual line. This finds the start of the visual line that the\n // given line is part of (usually that is the line itself).\n\n\n function visualLine(line) {\n var merged;\n\n while (merged = collapsedSpanAtStart(line)) {\n line = merged.find(-1, true).line;\n }\n\n return line;\n }\n\n function visualLineEnd(line) {\n var merged;\n\n while (merged = collapsedSpanAtEnd(line)) {\n line = merged.find(1, true).line;\n }\n\n return line;\n } // Returns an array of logical lines that continue the visual line\n // started by the argument, or undefined if there are no such lines.\n\n\n function visualLineContinued(line) {\n var merged, lines;\n\n while (merged = collapsedSpanAtEnd(line)) {\n line = merged.find(1, true).line;\n (lines || (lines = [])).push(line);\n }\n\n return lines;\n } // Get the line number of the start of the visual line that the\n // given line number is part of.\n\n\n function visualLineNo(doc, lineN) {\n var line = getLine(doc, lineN),\n vis = visualLine(line);\n\n if (line == vis) {\n return lineN;\n }\n\n return lineNo(vis);\n } // Get the line number of the start of the next visual line after\n // the given line.\n\n\n function visualLineEndNo(doc, lineN) {\n if (lineN > doc.lastLine()) {\n return lineN;\n }\n\n var line = getLine(doc, lineN),\n merged;\n\n if (!lineIsHidden(doc, line)) {\n return lineN;\n }\n\n while (merged = collapsedSpanAtEnd(line)) {\n line = merged.find(1, true).line;\n }\n\n return lineNo(line) + 1;\n } // Compute whether a line is hidden. Lines count as hidden when they\n // are part of a visual line that starts with another line, or when\n // they are entirely covered by collapsed, non-widget span.\n\n\n function lineIsHidden(doc, line) {\n var sps = sawCollapsedSpans && line.markedSpans;\n\n if (sps) {\n for (var sp = void 0, i = 0; i < sps.length; ++i) {\n sp = sps[i];\n\n if (!sp.marker.collapsed) {\n continue;\n }\n\n if (sp.from == null) {\n return true;\n }\n\n if (sp.marker.widgetNode) {\n continue;\n }\n\n if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp)) {\n return true;\n }\n }\n }\n }\n\n function lineIsHiddenInner(doc, line, span) {\n if (span.to == null) {\n var end = span.marker.find(1, true);\n return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker));\n }\n\n if (span.marker.inclusiveRight && span.to == line.text.length) {\n return true;\n }\n\n for (var sp = void 0, i = 0; i < line.markedSpans.length; ++i) {\n sp = line.markedSpans[i];\n\n if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to && (sp.to == null || sp.to != span.from) && (sp.marker.inclusiveLeft || span.marker.inclusiveRight) && lineIsHiddenInner(doc, line, sp)) {\n return true;\n }\n }\n } // Find the height above the given line.\n\n\n function _heightAtLine(lineObj) {\n lineObj = visualLine(lineObj);\n var h = 0,\n chunk = lineObj.parent;\n\n for (var i = 0; i < chunk.lines.length; ++i) {\n var line = chunk.lines[i];\n\n if (line == lineObj) {\n break;\n } else {\n h += line.height;\n }\n }\n\n for (var p = chunk.parent; p; chunk = p, p = chunk.parent) {\n for (var i$1 = 0; i$1 < p.children.length; ++i$1) {\n var cur = p.children[i$1];\n\n if (cur == chunk) {\n break;\n } else {\n h += cur.height;\n }\n }\n }\n\n return h;\n } // Compute the character length of a line, taking into account\n // collapsed ranges (see markText) that might hide parts, and join\n // other lines onto it.\n\n\n function lineLength(line) {\n if (line.height == 0) {\n return 0;\n }\n\n var len = line.text.length,\n merged,\n cur = line;\n\n while (merged = collapsedSpanAtStart(cur)) {\n var found = merged.find(0, true);\n cur = found.from.line;\n len += found.from.ch - found.to.ch;\n }\n\n cur = line;\n\n while (merged = collapsedSpanAtEnd(cur)) {\n var found$1 = merged.find(0, true);\n len -= cur.text.length - found$1.from.ch;\n cur = found$1.to.line;\n len += cur.text.length - found$1.to.ch;\n }\n\n return len;\n } // Find the longest line in the document.\n\n\n function findMaxLine(cm) {\n var d = cm.display,\n doc = cm.doc;\n d.maxLine = getLine(doc, doc.first);\n d.maxLineLength = lineLength(d.maxLine);\n d.maxLineChanged = true;\n doc.iter(function (line) {\n var len = lineLength(line);\n\n if (len > d.maxLineLength) {\n d.maxLineLength = len;\n d.maxLine = line;\n }\n });\n } // LINE DATA STRUCTURE\n // Line objects. These hold state related to a line, including\n // highlighting info (the styles array).\n\n\n var Line = function Line(text, markedSpans, estimateHeight) {\n this.text = text;\n attachMarkedSpans(this, markedSpans);\n this.height = estimateHeight ? estimateHeight(this) : 1;\n };\n\n Line.prototype.lineNo = function () {\n return lineNo(this);\n };\n\n eventMixin(Line); // Change the content (text, markers) of a line. Automatically\n // invalidates cached information and tries to re-estimate the\n // line's height.\n\n function updateLine(line, text, markedSpans, estimateHeight) {\n line.text = text;\n\n if (line.stateAfter) {\n line.stateAfter = null;\n }\n\n if (line.styles) {\n line.styles = null;\n }\n\n if (line.order != null) {\n line.order = null;\n }\n\n detachMarkedSpans(line);\n attachMarkedSpans(line, markedSpans);\n var estHeight = estimateHeight ? estimateHeight(line) : 1;\n\n if (estHeight != line.height) {\n updateLineHeight(line, estHeight);\n }\n } // Detach a line from the document tree and its markers.\n\n\n function cleanUpLine(line) {\n line.parent = null;\n detachMarkedSpans(line);\n } // Convert a style as returned by a mode (either null, or a string\n // containing one or more styles) to a CSS style. This is cached,\n // and also looks for line-wide styles.\n\n\n var styleToClassCache = {},\n styleToClassCacheWithMode = {};\n\n function interpretTokenStyle(style, options) {\n if (!style || /^\\s*$/.test(style)) {\n return null;\n }\n\n var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache;\n return cache[style] || (cache[style] = style.replace(/\\S+/g, \"cm-$&\"));\n } // Render the DOM representation of the text of a line. Also builds\n // up a 'line map', which points at the DOM nodes that represent\n // specific stretches of text, and is used by the measuring code.\n // The returned object contains the DOM node, this map, and\n // information about line-wide styles that were set by the mode.\n\n\n function buildLineContent(cm, lineView) {\n // The padding-right forces the element to have a 'border', which\n // is needed on Webkit to be able to get line-level bounding\n // rectangles for it (in measureChar).\n var content = eltP(\"span\", null, null, webkit ? \"padding-right: .1px\" : null);\n var builder = {\n pre: eltP(\"pre\", [content], \"CodeMirror-line\"),\n content: content,\n col: 0,\n pos: 0,\n cm: cm,\n trailingSpace: false,\n splitSpaces: cm.getOption(\"lineWrapping\")\n };\n lineView.measure = {}; // Iterate over the logical lines that make up this visual line.\n\n for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) {\n var line = i ? lineView.rest[i - 1] : lineView.line,\n order = void 0;\n builder.pos = 0;\n builder.addToken = buildToken; // Optionally wire in some hacks into the token-rendering\n // algorithm, to deal with browser quirks.\n\n if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line, cm.doc.direction))) {\n builder.addToken = buildTokenBadBidi(builder.addToken, order);\n }\n\n builder.map = [];\n var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line);\n insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate));\n\n if (line.styleClasses) {\n if (line.styleClasses.bgClass) {\n builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || \"\");\n }\n\n if (line.styleClasses.textClass) {\n builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || \"\");\n }\n } // Ensure at least a single node is present, for measuring.\n\n\n if (builder.map.length == 0) {\n builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure)));\n } // Store the map and a cache object for the current logical line\n\n\n if (i == 0) {\n lineView.measure.map = builder.map;\n lineView.measure.cache = {};\n } else {\n (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map);\n (lineView.measure.caches || (lineView.measure.caches = [])).push({});\n }\n } // See issue #2901\n\n\n if (webkit) {\n var last = builder.content.lastChild;\n\n if (/\\bcm-tab\\b/.test(last.className) || last.querySelector && last.querySelector(\".cm-tab\")) {\n builder.content.className = \"cm-tab-wrap-hack\";\n }\n }\n\n signal(cm, \"renderLine\", cm, lineView.line, builder.pre);\n\n if (builder.pre.className) {\n builder.textClass = joinClasses(builder.pre.className, builder.textClass || \"\");\n }\n\n return builder;\n }\n\n function defaultSpecialCharPlaceholder(ch) {\n var token = elt(\"span\", \"\\u2022\", \"cm-invalidchar\");\n token.title = \"\\\\u\" + ch.charCodeAt(0).toString(16);\n token.setAttribute(\"aria-label\", token.title);\n return token;\n } // Build up the DOM representation for a single token, and add it to\n // the line map. Takes care to render special characters separately.\n\n\n function buildToken(builder, text, style, startStyle, endStyle, css, attributes) {\n if (!text) {\n return;\n }\n\n var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text;\n var special = builder.cm.state.specialChars,\n mustWrap = false;\n var content;\n\n if (!special.test(text)) {\n builder.col += text.length;\n content = document.createTextNode(displayText);\n builder.map.push(builder.pos, builder.pos + text.length, content);\n\n if (ie && ie_version < 9) {\n mustWrap = true;\n }\n\n builder.pos += text.length;\n } else {\n content = document.createDocumentFragment();\n var pos = 0;\n\n while (true) {\n special.lastIndex = pos;\n var m = special.exec(text);\n var skipped = m ? m.index - pos : text.length - pos;\n\n if (skipped) {\n var txt = document.createTextNode(displayText.slice(pos, pos + skipped));\n\n if (ie && ie_version < 9) {\n content.appendChild(elt(\"span\", [txt]));\n } else {\n content.appendChild(txt);\n }\n\n builder.map.push(builder.pos, builder.pos + skipped, txt);\n builder.col += skipped;\n builder.pos += skipped;\n }\n\n if (!m) {\n break;\n }\n\n pos += skipped + 1;\n var txt$1 = void 0;\n\n if (m[0] == \"\\t\") {\n var tabSize = builder.cm.options.tabSize,\n tabWidth = tabSize - builder.col % tabSize;\n txt$1 = content.appendChild(elt(\"span\", spaceStr(tabWidth), \"cm-tab\"));\n txt$1.setAttribute(\"role\", \"presentation\");\n txt$1.setAttribute(\"cm-text\", \"\\t\");\n builder.col += tabWidth;\n } else if (m[0] == \"\\r\" || m[0] == \"\\n\") {\n txt$1 = content.appendChild(elt(\"span\", m[0] == \"\\r\" ? \"\\u240D\" : \"\\u2424\", \"cm-invalidchar\"));\n txt$1.setAttribute(\"cm-text\", m[0]);\n builder.col += 1;\n } else {\n txt$1 = builder.cm.options.specialCharPlaceholder(m[0]);\n txt$1.setAttribute(\"cm-text\", m[0]);\n\n if (ie && ie_version < 9) {\n content.appendChild(elt(\"span\", [txt$1]));\n } else {\n content.appendChild(txt$1);\n }\n\n builder.col += 1;\n }\n\n builder.map.push(builder.pos, builder.pos + 1, txt$1);\n builder.pos++;\n }\n }\n\n builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32;\n\n if (style || startStyle || endStyle || mustWrap || css || attributes) {\n var fullStyle = style || \"\";\n\n if (startStyle) {\n fullStyle += startStyle;\n }\n\n if (endStyle) {\n fullStyle += endStyle;\n }\n\n var token = elt(\"span\", [content], fullStyle, css);\n\n if (attributes) {\n for (var attr in attributes) {\n if (attributes.hasOwnProperty(attr) && attr != \"style\" && attr != \"class\") {\n token.setAttribute(attr, attributes[attr]);\n }\n }\n }\n\n return builder.content.appendChild(token);\n }\n\n builder.content.appendChild(content);\n } // Change some spaces to NBSP to prevent the browser from collapsing\n // trailing spaces at the end of a line when rendering text (issue #1362).\n\n\n function splitSpaces(text, trailingBefore) {\n if (text.length > 1 && !/ /.test(text)) {\n return text;\n }\n\n var spaceBefore = trailingBefore,\n result = \"\";\n\n for (var i = 0; i < text.length; i++) {\n var ch = text.charAt(i);\n\n if (ch == \" \" && spaceBefore && (i == text.length - 1 || text.charCodeAt(i + 1) == 32)) {\n ch = \"\\xA0\";\n }\n\n result += ch;\n spaceBefore = ch == \" \";\n }\n\n return result;\n } // Work around nonsense dimensions being reported for stretches of\n // right-to-left text.\n\n\n function buildTokenBadBidi(inner, order) {\n return function (builder, text, style, startStyle, endStyle, css, attributes) {\n style = style ? style + \" cm-force-border\" : \"cm-force-border\";\n var start = builder.pos,\n end = start + text.length;\n\n for (;;) {\n // Find the part that overlaps with the start of this text\n var part = void 0;\n\n for (var i = 0; i < order.length; i++) {\n part = order[i];\n\n if (part.to > start && part.from <= start) {\n break;\n }\n }\n\n if (part.to >= end) {\n return inner(builder, text, style, startStyle, endStyle, css, attributes);\n }\n\n inner(builder, text.slice(0, part.to - start), style, startStyle, null, css, attributes);\n startStyle = null;\n text = text.slice(part.to - start);\n start = part.to;\n }\n };\n }\n\n function buildCollapsedSpan(builder, size, marker, ignoreWidget) {\n var widget = !ignoreWidget && marker.widgetNode;\n\n if (widget) {\n builder.map.push(builder.pos, builder.pos + size, widget);\n }\n\n if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) {\n if (!widget) {\n widget = builder.content.appendChild(document.createElement(\"span\"));\n }\n\n widget.setAttribute(\"cm-marker\", marker.id);\n }\n\n if (widget) {\n builder.cm.display.input.setUneditable(widget);\n builder.content.appendChild(widget);\n }\n\n builder.pos += size;\n builder.trailingSpace = false;\n } // Outputs a number of spans to make up a line, taking highlighting\n // and marked text into account.\n\n\n function insertLineContent(line, builder, styles) {\n var spans = line.markedSpans,\n allText = line.text,\n at = 0;\n\n if (!spans) {\n for (var i$1 = 1; i$1 < styles.length; i$1 += 2) {\n builder.addToken(builder, allText.slice(at, at = styles[i$1]), interpretTokenStyle(styles[i$1 + 1], builder.cm.options));\n }\n\n return;\n }\n\n var len = allText.length,\n pos = 0,\n i = 1,\n text = \"\",\n style,\n css;\n var nextChange = 0,\n spanStyle,\n spanEndStyle,\n spanStartStyle,\n collapsed,\n attributes;\n\n for (;;) {\n if (nextChange == pos) {\n // Update current marker set\n spanStyle = spanEndStyle = spanStartStyle = css = \"\";\n attributes = null;\n collapsed = null;\n nextChange = Infinity;\n var foundBookmarks = [],\n endStyles = void 0;\n\n for (var j = 0; j < spans.length; ++j) {\n var sp = spans[j],\n m = sp.marker;\n\n if (m.type == \"bookmark\" && sp.from == pos && m.widgetNode) {\n foundBookmarks.push(m);\n } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) {\n if (sp.to != null && sp.to != pos && nextChange > sp.to) {\n nextChange = sp.to;\n spanEndStyle = \"\";\n }\n\n if (m.className) {\n spanStyle += \" \" + m.className;\n }\n\n if (m.css) {\n css = (css ? css + \";\" : \"\") + m.css;\n }\n\n if (m.startStyle && sp.from == pos) {\n spanStartStyle += \" \" + m.startStyle;\n }\n\n if (m.endStyle && sp.to == nextChange) {\n (endStyles || (endStyles = [])).push(m.endStyle, sp.to);\n } // support for the old title property\n // https://github.com/codemirror/CodeMirror/pull/5673\n\n\n if (m.title) {\n (attributes || (attributes = {})).title = m.title;\n }\n\n if (m.attributes) {\n for (var attr in m.attributes) {\n (attributes || (attributes = {}))[attr] = m.attributes[attr];\n }\n }\n\n if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0)) {\n collapsed = sp;\n }\n } else if (sp.from > pos && nextChange > sp.from) {\n nextChange = sp.from;\n }\n }\n\n if (endStyles) {\n for (var j$1 = 0; j$1 < endStyles.length; j$1 += 2) {\n if (endStyles[j$1 + 1] == nextChange) {\n spanEndStyle += \" \" + endStyles[j$1];\n }\n }\n }\n\n if (!collapsed || collapsed.from == pos) {\n for (var j$2 = 0; j$2 < foundBookmarks.length; ++j$2) {\n buildCollapsedSpan(builder, 0, foundBookmarks[j$2]);\n }\n }\n\n if (collapsed && (collapsed.from || 0) == pos) {\n buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos, collapsed.marker, collapsed.from == null);\n\n if (collapsed.to == null) {\n return;\n }\n\n if (collapsed.to == pos) {\n collapsed = false;\n }\n }\n }\n\n if (pos >= len) {\n break;\n }\n\n var upto = Math.min(len, nextChange);\n\n while (true) {\n if (text) {\n var end = pos + text.length;\n\n if (!collapsed) {\n var tokenText = end > upto ? text.slice(0, upto - pos) : text;\n builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle, spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : \"\", css, attributes);\n }\n\n if (end >= upto) {\n text = text.slice(upto - pos);\n pos = upto;\n break;\n }\n\n pos = end;\n spanStartStyle = \"\";\n }\n\n text = allText.slice(at, at = styles[i++]);\n style = interpretTokenStyle(styles[i++], builder.cm.options);\n }\n }\n } // These objects are used to represent the visible (currently drawn)\n // part of the document. A LineView may correspond to multiple\n // logical lines, if those are connected by collapsed ranges.\n\n\n function LineView(doc, line, lineN) {\n // The starting line\n this.line = line; // Continuing lines, if any\n\n this.rest = visualLineContinued(line); // Number of logical lines in this visual line\n\n this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1;\n this.node = this.text = null;\n this.hidden = lineIsHidden(doc, line);\n } // Create a range of LineView objects for the given lines.\n\n\n function buildViewArray(cm, from, to) {\n var array = [],\n nextPos;\n\n for (var pos = from; pos < to; pos = nextPos) {\n var view = new LineView(cm.doc, getLine(cm.doc, pos), pos);\n nextPos = pos + view.size;\n array.push(view);\n }\n\n return array;\n }\n\n var operationGroup = null;\n\n function pushOperation(op) {\n if (operationGroup) {\n operationGroup.ops.push(op);\n } else {\n op.ownsGroup = operationGroup = {\n ops: [op],\n delayedCallbacks: []\n };\n }\n }\n\n function fireCallbacksForOps(group) {\n // Calls delayed callbacks and cursorActivity handlers until no\n // new ones appear\n var callbacks = group.delayedCallbacks,\n i = 0;\n\n do {\n for (; i < callbacks.length; i++) {\n callbacks[i].call(null);\n }\n\n for (var j = 0; j < group.ops.length; j++) {\n var op = group.ops[j];\n\n if (op.cursorActivityHandlers) {\n while (op.cursorActivityCalled < op.cursorActivityHandlers.length) {\n op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm);\n }\n }\n }\n } while (i < callbacks.length);\n }\n\n function finishOperation(op, endCb) {\n var group = op.ownsGroup;\n\n if (!group) {\n return;\n }\n\n try {\n fireCallbacksForOps(group);\n } finally {\n operationGroup = null;\n endCb(group);\n }\n }\n\n var orphanDelayedCallbacks = null; // Often, we want to signal events at a point where we are in the\n // middle of some work, but don't want the handler to start calling\n // other methods on the editor, which might be in an inconsistent\n // state or simply not expect any other events to happen.\n // signalLater looks whether there are any handlers, and schedules\n // them to be executed when the last operation ends, or, if no\n // operation is active, when a timeout fires.\n\n function signalLater(emitter, type\n /*, values...*/\n ) {\n var arr = getHandlers(emitter, type);\n\n if (!arr.length) {\n return;\n }\n\n var args = Array.prototype.slice.call(arguments, 2),\n list;\n\n if (operationGroup) {\n list = operationGroup.delayedCallbacks;\n } else if (orphanDelayedCallbacks) {\n list = orphanDelayedCallbacks;\n } else {\n list = orphanDelayedCallbacks = [];\n setTimeout(fireOrphanDelayed, 0);\n }\n\n var loop = function loop(i) {\n list.push(function () {\n return arr[i].apply(null, args);\n });\n };\n\n for (var i = 0; i < arr.length; ++i) {\n loop(i);\n }\n }\n\n function fireOrphanDelayed() {\n var delayed = orphanDelayedCallbacks;\n orphanDelayedCallbacks = null;\n\n for (var i = 0; i < delayed.length; ++i) {\n delayed[i]();\n }\n } // When an aspect of a line changes, a string is added to\n // lineView.changes. This updates the relevant part of the line's\n // DOM structure.\n\n\n function updateLineForChanges(cm, lineView, lineN, dims) {\n for (var j = 0; j < lineView.changes.length; j++) {\n var type = lineView.changes[j];\n\n if (type == \"text\") {\n updateLineText(cm, lineView);\n } else if (type == \"gutter\") {\n updateLineGutter(cm, lineView, lineN, dims);\n } else if (type == \"class\") {\n updateLineClasses(cm, lineView);\n } else if (type == \"widget\") {\n updateLineWidgets(cm, lineView, dims);\n }\n }\n\n lineView.changes = null;\n } // Lines with gutter elements, widgets or a background class need to\n // be wrapped, and have the extra elements added to the wrapper div\n\n\n function ensureLineWrapped(lineView) {\n if (lineView.node == lineView.text) {\n lineView.node = elt(\"div\", null, null, \"position: relative\");\n\n if (lineView.text.parentNode) {\n lineView.text.parentNode.replaceChild(lineView.node, lineView.text);\n }\n\n lineView.node.appendChild(lineView.text);\n\n if (ie && ie_version < 8) {\n lineView.node.style.zIndex = 2;\n }\n }\n\n return lineView.node;\n }\n\n function updateLineBackground(cm, lineView) {\n var cls = lineView.bgClass ? lineView.bgClass + \" \" + (lineView.line.bgClass || \"\") : lineView.line.bgClass;\n\n if (cls) {\n cls += \" CodeMirror-linebackground\";\n }\n\n if (lineView.background) {\n if (cls) {\n lineView.background.className = cls;\n } else {\n lineView.background.parentNode.removeChild(lineView.background);\n lineView.background = null;\n }\n } else if (cls) {\n var wrap = ensureLineWrapped(lineView);\n lineView.background = wrap.insertBefore(elt(\"div\", null, cls), wrap.firstChild);\n cm.display.input.setUneditable(lineView.background);\n }\n } // Wrapper around buildLineContent which will reuse the structure\n // in display.externalMeasured when possible.\n\n\n function getLineContent(cm, lineView) {\n var ext = cm.display.externalMeasured;\n\n if (ext && ext.line == lineView.line) {\n cm.display.externalMeasured = null;\n lineView.measure = ext.measure;\n return ext.built;\n }\n\n return buildLineContent(cm, lineView);\n } // Redraw the line's text. Interacts with the background and text\n // classes because the mode may output tokens that influence these\n // classes.\n\n\n function updateLineText(cm, lineView) {\n var cls = lineView.text.className;\n var built = getLineContent(cm, lineView);\n\n if (lineView.text == lineView.node) {\n lineView.node = built.pre;\n }\n\n lineView.text.parentNode.replaceChild(built.pre, lineView.text);\n lineView.text = built.pre;\n\n if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) {\n lineView.bgClass = built.bgClass;\n lineView.textClass = built.textClass;\n updateLineClasses(cm, lineView);\n } else if (cls) {\n lineView.text.className = cls;\n }\n }\n\n function updateLineClasses(cm, lineView) {\n updateLineBackground(cm, lineView);\n\n if (lineView.line.wrapClass) {\n ensureLineWrapped(lineView).className = lineView.line.wrapClass;\n } else if (lineView.node != lineView.text) {\n lineView.node.className = \"\";\n }\n\n var textClass = lineView.textClass ? lineView.textClass + \" \" + (lineView.line.textClass || \"\") : lineView.line.textClass;\n lineView.text.className = textClass || \"\";\n }\n\n function updateLineGutter(cm, lineView, lineN, dims) {\n if (lineView.gutter) {\n lineView.node.removeChild(lineView.gutter);\n lineView.gutter = null;\n }\n\n if (lineView.gutterBackground) {\n lineView.node.removeChild(lineView.gutterBackground);\n lineView.gutterBackground = null;\n }\n\n if (lineView.line.gutterClass) {\n var wrap = ensureLineWrapped(lineView);\n lineView.gutterBackground = elt(\"div\", null, \"CodeMirror-gutter-background \" + lineView.line.gutterClass, \"left: \" + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + \"px; width: \" + dims.gutterTotalWidth + \"px\");\n cm.display.input.setUneditable(lineView.gutterBackground);\n wrap.insertBefore(lineView.gutterBackground, lineView.text);\n }\n\n var markers = lineView.line.gutterMarkers;\n\n if (cm.options.lineNumbers || markers) {\n var wrap$1 = ensureLineWrapped(lineView);\n var gutterWrap = lineView.gutter = elt(\"div\", null, \"CodeMirror-gutter-wrapper\", \"left: \" + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + \"px\");\n gutterWrap.setAttribute(\"aria-hidden\", \"true\");\n cm.display.input.setUneditable(gutterWrap);\n wrap$1.insertBefore(gutterWrap, lineView.text);\n\n if (lineView.line.gutterClass) {\n gutterWrap.className += \" \" + lineView.line.gutterClass;\n }\n\n if (cm.options.lineNumbers && (!markers || !markers[\"CodeMirror-linenumbers\"])) {\n lineView.lineNumber = gutterWrap.appendChild(elt(\"div\", lineNumberFor(cm.options, lineN), \"CodeMirror-linenumber CodeMirror-gutter-elt\", \"left: \" + dims.gutterLeft[\"CodeMirror-linenumbers\"] + \"px; width: \" + cm.display.lineNumInnerWidth + \"px\"));\n }\n\n if (markers) {\n for (var k = 0; k < cm.display.gutterSpecs.length; ++k) {\n var id = cm.display.gutterSpecs[k].className,\n found = markers.hasOwnProperty(id) && markers[id];\n\n if (found) {\n gutterWrap.appendChild(elt(\"div\", [found], \"CodeMirror-gutter-elt\", \"left: \" + dims.gutterLeft[id] + \"px; width: \" + dims.gutterWidth[id] + \"px\"));\n }\n }\n }\n }\n }\n\n function updateLineWidgets(cm, lineView, dims) {\n if (lineView.alignable) {\n lineView.alignable = null;\n }\n\n var isWidget = classTest(\"CodeMirror-linewidget\");\n\n for (var node = lineView.node.firstChild, next = void 0; node; node = next) {\n next = node.nextSibling;\n\n if (isWidget.test(node.className)) {\n lineView.node.removeChild(node);\n }\n }\n\n insertLineWidgets(cm, lineView, dims);\n } // Build a line's DOM representation from scratch\n\n\n function buildLineElement(cm, lineView, lineN, dims) {\n var built = getLineContent(cm, lineView);\n lineView.text = lineView.node = built.pre;\n\n if (built.bgClass) {\n lineView.bgClass = built.bgClass;\n }\n\n if (built.textClass) {\n lineView.textClass = built.textClass;\n }\n\n updateLineClasses(cm, lineView);\n updateLineGutter(cm, lineView, lineN, dims);\n insertLineWidgets(cm, lineView, dims);\n return lineView.node;\n } // A lineView may contain multiple logical lines (when merged by\n // collapsed spans). The widgets for all of them need to be drawn.\n\n\n function insertLineWidgets(cm, lineView, dims) {\n insertLineWidgetsFor(cm, lineView.line, lineView, dims, true);\n\n if (lineView.rest) {\n for (var i = 0; i < lineView.rest.length; i++) {\n insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false);\n }\n }\n }\n\n function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) {\n if (!line.widgets) {\n return;\n }\n\n var wrap = ensureLineWrapped(lineView);\n\n for (var i = 0, ws = line.widgets; i < ws.length; ++i) {\n var widget = ws[i],\n node = elt(\"div\", [widget.node], \"CodeMirror-linewidget\" + (widget.className ? \" \" + widget.className : \"\"));\n\n if (!widget.handleMouseEvents) {\n node.setAttribute(\"cm-ignore-events\", \"true\");\n }\n\n positionLineWidget(widget, node, lineView, dims);\n cm.display.input.setUneditable(node);\n\n if (allowAbove && widget.above) {\n wrap.insertBefore(node, lineView.gutter || lineView.text);\n } else {\n wrap.appendChild(node);\n }\n\n signalLater(widget, \"redraw\");\n }\n }\n\n function positionLineWidget(widget, node, lineView, dims) {\n if (widget.noHScroll) {\n (lineView.alignable || (lineView.alignable = [])).push(node);\n var width = dims.wrapperWidth;\n node.style.left = dims.fixedPos + \"px\";\n\n if (!widget.coverGutter) {\n width -= dims.gutterTotalWidth;\n node.style.paddingLeft = dims.gutterTotalWidth + \"px\";\n }\n\n node.style.width = width + \"px\";\n }\n\n if (widget.coverGutter) {\n node.style.zIndex = 5;\n node.style.position = \"relative\";\n\n if (!widget.noHScroll) {\n node.style.marginLeft = -dims.gutterTotalWidth + \"px\";\n }\n }\n }\n\n function widgetHeight(widget) {\n if (widget.height != null) {\n return widget.height;\n }\n\n var cm = widget.doc.cm;\n\n if (!cm) {\n return 0;\n }\n\n if (!contains(document.body, widget.node)) {\n var parentStyle = \"position: relative;\";\n\n if (widget.coverGutter) {\n parentStyle += \"margin-left: -\" + cm.display.gutters.offsetWidth + \"px;\";\n }\n\n if (widget.noHScroll) {\n parentStyle += \"width: \" + cm.display.wrapper.clientWidth + \"px;\";\n }\n\n removeChildrenAndAdd(cm.display.measure, elt(\"div\", [widget.node], null, parentStyle));\n }\n\n return widget.height = widget.node.parentNode.offsetHeight;\n } // Return true when the given mouse event happened in a widget\n\n\n function eventInWidget(display, e) {\n for (var n = e_target(e); n != display.wrapper; n = n.parentNode) {\n if (!n || n.nodeType == 1 && n.getAttribute(\"cm-ignore-events\") == \"true\" || n.parentNode == display.sizer && n != display.mover) {\n return true;\n }\n }\n } // POSITION MEASUREMENT\n\n\n function paddingTop(display) {\n return display.lineSpace.offsetTop;\n }\n\n function paddingVert(display) {\n return display.mover.offsetHeight - display.lineSpace.offsetHeight;\n }\n\n function paddingH(display) {\n if (display.cachedPaddingH) {\n return display.cachedPaddingH;\n }\n\n var e = removeChildrenAndAdd(display.measure, elt(\"pre\", \"x\", \"CodeMirror-line-like\"));\n var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle;\n var data = {\n left: parseInt(style.paddingLeft),\n right: parseInt(style.paddingRight)\n };\n\n if (!isNaN(data.left) && !isNaN(data.right)) {\n display.cachedPaddingH = data;\n }\n\n return data;\n }\n\n function scrollGap(cm) {\n return scrollerGap - cm.display.nativeBarWidth;\n }\n\n function displayWidth(cm) {\n return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth;\n }\n\n function displayHeight(cm) {\n return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight;\n } // Ensure the lineView.wrapping.heights array is populated. This is\n // an array of bottom offsets for the lines that make up a drawn\n // line. When lineWrapping is on, there might be more than one\n // height.\n\n\n function ensureLineHeights(cm, lineView, rect) {\n var wrapping = cm.options.lineWrapping;\n var curWidth = wrapping && displayWidth(cm);\n\n if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) {\n var heights = lineView.measure.heights = [];\n\n if (wrapping) {\n lineView.measure.width = curWidth;\n var rects = lineView.text.firstChild.getClientRects();\n\n for (var i = 0; i < rects.length - 1; i++) {\n var cur = rects[i],\n next = rects[i + 1];\n\n if (Math.abs(cur.bottom - next.bottom) > 2) {\n heights.push((cur.bottom + next.top) / 2 - rect.top);\n }\n }\n }\n\n heights.push(rect.bottom - rect.top);\n }\n } // Find a line map (mapping character offsets to text nodes) and a\n // measurement cache for the given line number. (A line view might\n // contain multiple lines when collapsed ranges are present.)\n\n\n function mapFromLineView(lineView, line, lineN) {\n if (lineView.line == line) {\n return {\n map: lineView.measure.map,\n cache: lineView.measure.cache\n };\n }\n\n for (var i = 0; i < lineView.rest.length; i++) {\n if (lineView.rest[i] == line) {\n return {\n map: lineView.measure.maps[i],\n cache: lineView.measure.caches[i]\n };\n }\n }\n\n for (var i$1 = 0; i$1 < lineView.rest.length; i$1++) {\n if (lineNo(lineView.rest[i$1]) > lineN) {\n return {\n map: lineView.measure.maps[i$1],\n cache: lineView.measure.caches[i$1],\n before: true\n };\n }\n }\n } // Render a line into the hidden node display.externalMeasured. Used\n // when measurement is needed for a line that's not in the viewport.\n\n\n function updateExternalMeasurement(cm, line) {\n line = visualLine(line);\n var lineN = lineNo(line);\n var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN);\n view.lineN = lineN;\n var built = view.built = buildLineContent(cm, view);\n view.text = built.pre;\n removeChildrenAndAdd(cm.display.lineMeasure, built.pre);\n return view;\n } // Get a {top, bottom, left, right} box (in line-local coordinates)\n // for a given character.\n\n\n function measureChar(cm, line, ch, bias) {\n return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias);\n } // Find a line view that corresponds to the given line number.\n\n\n function findViewForLine(cm, lineN) {\n if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo) {\n return cm.display.view[findViewIndex(cm, lineN)];\n }\n\n var ext = cm.display.externalMeasured;\n\n if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size) {\n return ext;\n }\n } // Measurement can be split in two steps, the set-up work that\n // applies to the whole line, and the measurement of the actual\n // character. Functions like coordsChar, that need to do a lot of\n // measurements in a row, can thus ensure that the set-up work is\n // only done once.\n\n\n function prepareMeasureForLine(cm, line) {\n var lineN = lineNo(line);\n var view = findViewForLine(cm, lineN);\n\n if (view && !view.text) {\n view = null;\n } else if (view && view.changes) {\n updateLineForChanges(cm, view, lineN, getDimensions(cm));\n cm.curOp.forceUpdate = true;\n }\n\n if (!view) {\n view = updateExternalMeasurement(cm, line);\n }\n\n var info = mapFromLineView(view, line, lineN);\n return {\n line: line,\n view: view,\n rect: null,\n map: info.map,\n cache: info.cache,\n before: info.before,\n hasHeights: false\n };\n } // Given a prepared measurement object, measures the position of an\n // actual character (or fetches it from the cache).\n\n\n function measureCharPrepared(cm, prepared, ch, bias, varHeight) {\n if (prepared.before) {\n ch = -1;\n }\n\n var key = ch + (bias || \"\"),\n found;\n\n if (prepared.cache.hasOwnProperty(key)) {\n found = prepared.cache[key];\n } else {\n if (!prepared.rect) {\n prepared.rect = prepared.view.text.getBoundingClientRect();\n }\n\n if (!prepared.hasHeights) {\n ensureLineHeights(cm, prepared.view, prepared.rect);\n prepared.hasHeights = true;\n }\n\n found = measureCharInner(cm, prepared, ch, bias);\n\n if (!found.bogus) {\n prepared.cache[key] = found;\n }\n }\n\n return {\n left: found.left,\n right: found.right,\n top: varHeight ? found.rtop : found.top,\n bottom: varHeight ? found.rbottom : found.bottom\n };\n }\n\n var nullRect = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n\n function nodeAndOffsetInLineMap(map, ch, bias) {\n var node, start, end, collapse, mStart, mEnd; // First, search the line map for the text node corresponding to,\n // or closest to, the target character.\n\n for (var i = 0; i < map.length; i += 3) {\n mStart = map[i];\n mEnd = map[i + 1];\n\n if (ch < mStart) {\n start = 0;\n end = 1;\n collapse = \"left\";\n } else if (ch < mEnd) {\n start = ch - mStart;\n end = start + 1;\n } else if (i == map.length - 3 || ch == mEnd && map[i + 3] > ch) {\n end = mEnd - mStart;\n start = end - 1;\n\n if (ch >= mEnd) {\n collapse = \"right\";\n }\n }\n\n if (start != null) {\n node = map[i + 2];\n\n if (mStart == mEnd && bias == (node.insertLeft ? \"left\" : \"right\")) {\n collapse = bias;\n }\n\n if (bias == \"left\" && start == 0) {\n while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) {\n node = map[(i -= 3) + 2];\n collapse = \"left\";\n }\n }\n\n if (bias == \"right\" && start == mEnd - mStart) {\n while (i < map.length - 3 && map[i + 3] == map[i + 4] && !map[i + 5].insertLeft) {\n node = map[(i += 3) + 2];\n collapse = \"right\";\n }\n }\n\n break;\n }\n }\n\n return {\n node: node,\n start: start,\n end: end,\n collapse: collapse,\n coverStart: mStart,\n coverEnd: mEnd\n };\n }\n\n function getUsefulRect(rects, bias) {\n var rect = nullRect;\n\n if (bias == \"left\") {\n for (var i = 0; i < rects.length; i++) {\n if ((rect = rects[i]).left != rect.right) {\n break;\n }\n }\n } else {\n for (var i$1 = rects.length - 1; i$1 >= 0; i$1--) {\n if ((rect = rects[i$1]).left != rect.right) {\n break;\n }\n }\n }\n\n return rect;\n }\n\n function measureCharInner(cm, prepared, ch, bias) {\n var place = nodeAndOffsetInLineMap(prepared.map, ch, bias);\n var node = place.node,\n start = place.start,\n end = place.end,\n collapse = place.collapse;\n var rect;\n\n if (node.nodeType == 3) {\n // If it is a text node, use a range to retrieve the coordinates.\n for (var i$1 = 0; i$1 < 4; i$1++) {\n // Retry a maximum of 4 times when nonsense rectangles are returned\n while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) {\n --start;\n }\n\n while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) {\n ++end;\n }\n\n if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart) {\n rect = node.parentNode.getBoundingClientRect();\n } else {\n rect = getUsefulRect(range(node, start, end).getClientRects(), bias);\n }\n\n if (rect.left || rect.right || start == 0) {\n break;\n }\n\n end = start;\n start = start - 1;\n collapse = \"right\";\n }\n\n if (ie && ie_version < 11) {\n rect = maybeUpdateRectForZooming(cm.display.measure, rect);\n }\n } else {\n // If it is a widget, simply get the box for the whole widget.\n if (start > 0) {\n collapse = bias = \"right\";\n }\n\n var rects;\n\n if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1) {\n rect = rects[bias == \"right\" ? rects.length - 1 : 0];\n } else {\n rect = node.getBoundingClientRect();\n }\n }\n\n if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) {\n var rSpan = node.parentNode.getClientRects()[0];\n\n if (rSpan) {\n rect = {\n left: rSpan.left,\n right: rSpan.left + charWidth(cm.display),\n top: rSpan.top,\n bottom: rSpan.bottom\n };\n } else {\n rect = nullRect;\n }\n }\n\n var rtop = rect.top - prepared.rect.top,\n rbot = rect.bottom - prepared.rect.top;\n var mid = (rtop + rbot) / 2;\n var heights = prepared.view.measure.heights;\n var i = 0;\n\n for (; i < heights.length - 1; i++) {\n if (mid < heights[i]) {\n break;\n }\n }\n\n var top = i ? heights[i - 1] : 0,\n bot = heights[i];\n var result = {\n left: (collapse == \"right\" ? rect.right : rect.left) - prepared.rect.left,\n right: (collapse == \"left\" ? rect.left : rect.right) - prepared.rect.left,\n top: top,\n bottom: bot\n };\n\n if (!rect.left && !rect.right) {\n result.bogus = true;\n }\n\n if (!cm.options.singleCursorHeightPerLine) {\n result.rtop = rtop;\n result.rbottom = rbot;\n }\n\n return result;\n } // Work around problem with bounding client rects on ranges being\n // returned incorrectly when zoomed on IE10 and below.\n\n\n function maybeUpdateRectForZooming(measure, rect) {\n if (!window.screen || screen.logicalXDPI == null || screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure)) {\n return rect;\n }\n\n var scaleX = screen.logicalXDPI / screen.deviceXDPI;\n var scaleY = screen.logicalYDPI / screen.deviceYDPI;\n return {\n left: rect.left * scaleX,\n right: rect.right * scaleX,\n top: rect.top * scaleY,\n bottom: rect.bottom * scaleY\n };\n }\n\n function clearLineMeasurementCacheFor(lineView) {\n if (lineView.measure) {\n lineView.measure.cache = {};\n lineView.measure.heights = null;\n\n if (lineView.rest) {\n for (var i = 0; i < lineView.rest.length; i++) {\n lineView.measure.caches[i] = {};\n }\n }\n }\n }\n\n function clearLineMeasurementCache(cm) {\n cm.display.externalMeasure = null;\n removeChildren(cm.display.lineMeasure);\n\n for (var i = 0; i < cm.display.view.length; i++) {\n clearLineMeasurementCacheFor(cm.display.view[i]);\n }\n }\n\n function clearCaches(cm) {\n clearLineMeasurementCache(cm);\n cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null;\n\n if (!cm.options.lineWrapping) {\n cm.display.maxLineChanged = true;\n }\n\n cm.display.lineNumChars = null;\n }\n\n function pageScrollX() {\n // Work around https://bugs.chromium.org/p/chromium/issues/detail?id=489206\n // which causes page_Offset and bounding client rects to use\n // different reference viewports and invalidate our calculations.\n if (chrome && android) {\n return -(document.body.getBoundingClientRect().left - parseInt(getComputedStyle(document.body).marginLeft));\n }\n\n return window.pageXOffset || (document.documentElement || document.body).scrollLeft;\n }\n\n function pageScrollY() {\n if (chrome && android) {\n return -(document.body.getBoundingClientRect().top - parseInt(getComputedStyle(document.body).marginTop));\n }\n\n return window.pageYOffset || (document.documentElement || document.body).scrollTop;\n }\n\n function widgetTopHeight(lineObj) {\n var height = 0;\n\n if (lineObj.widgets) {\n for (var i = 0; i < lineObj.widgets.length; ++i) {\n if (lineObj.widgets[i].above) {\n height += widgetHeight(lineObj.widgets[i]);\n }\n }\n }\n\n return height;\n } // Converts a {top, bottom, left, right} box from line-local\n // coordinates into another coordinate system. Context may be one of\n // \"line\", \"div\" (display.lineDiv), \"local\"./null (editor), \"window\",\n // or \"page\".\n\n\n function intoCoordSystem(cm, lineObj, rect, context, includeWidgets) {\n if (!includeWidgets) {\n var height = widgetTopHeight(lineObj);\n rect.top += height;\n rect.bottom += height;\n }\n\n if (context == \"line\") {\n return rect;\n }\n\n if (!context) {\n context = \"local\";\n }\n\n var yOff = _heightAtLine(lineObj);\n\n if (context == \"local\") {\n yOff += paddingTop(cm.display);\n } else {\n yOff -= cm.display.viewOffset;\n }\n\n if (context == \"page\" || context == \"window\") {\n var lOff = cm.display.lineSpace.getBoundingClientRect();\n yOff += lOff.top + (context == \"window\" ? 0 : pageScrollY());\n var xOff = lOff.left + (context == \"window\" ? 0 : pageScrollX());\n rect.left += xOff;\n rect.right += xOff;\n }\n\n rect.top += yOff;\n rect.bottom += yOff;\n return rect;\n } // Coverts a box from \"div\" coords to another coordinate system.\n // Context may be \"window\", \"page\", \"div\", or \"local\"./null.\n\n\n function fromCoordSystem(cm, coords, context) {\n if (context == \"div\") {\n return coords;\n }\n\n var left = coords.left,\n top = coords.top; // First move into \"page\" coordinate system\n\n if (context == \"page\") {\n left -= pageScrollX();\n top -= pageScrollY();\n } else if (context == \"local\" || !context) {\n var localBox = cm.display.sizer.getBoundingClientRect();\n left += localBox.left;\n top += localBox.top;\n }\n\n var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect();\n return {\n left: left - lineSpaceBox.left,\n top: top - lineSpaceBox.top\n };\n }\n\n function _charCoords(cm, pos, context, lineObj, bias) {\n if (!lineObj) {\n lineObj = getLine(cm.doc, pos.line);\n }\n\n return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context);\n } // Returns a box for a given cursor position, which may have an\n // 'other' property containing the position of the secondary cursor\n // on a bidi boundary.\n // A cursor Pos(line, char, \"before\") is on the same visual line as `char - 1`\n // and after `char - 1` in writing order of `char - 1`\n // A cursor Pos(line, char, \"after\") is on the same visual line as `char`\n // and before `char` in writing order of `char`\n // Examples (upper-case letters are RTL, lower-case are LTR):\n // Pos(0, 1, ...)\n // before after\n // ab a|b a|b\n // aB a|B aB|\n // Ab |Ab A|b\n // AB B|A B|A\n // Every position after the last character on a line is considered to stick\n // to the last character on the line.\n\n\n function _cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) {\n lineObj = lineObj || getLine(cm.doc, pos.line);\n\n if (!preparedMeasure) {\n preparedMeasure = prepareMeasureForLine(cm, lineObj);\n }\n\n function get(ch, right) {\n var m = measureCharPrepared(cm, preparedMeasure, ch, right ? \"right\" : \"left\", varHeight);\n\n if (right) {\n m.left = m.right;\n } else {\n m.right = m.left;\n }\n\n return intoCoordSystem(cm, lineObj, m, context);\n }\n\n var order = getOrder(lineObj, cm.doc.direction),\n ch = pos.ch,\n sticky = pos.sticky;\n\n if (ch >= lineObj.text.length) {\n ch = lineObj.text.length;\n sticky = \"before\";\n } else if (ch <= 0) {\n ch = 0;\n sticky = \"after\";\n }\n\n if (!order) {\n return get(sticky == \"before\" ? ch - 1 : ch, sticky == \"before\");\n }\n\n function getBidi(ch, partPos, invert) {\n var part = order[partPos],\n right = part.level == 1;\n return get(invert ? ch - 1 : ch, right != invert);\n }\n\n var partPos = getBidiPartAt(order, ch, sticky);\n var other = bidiOther;\n var val = getBidi(ch, partPos, sticky == \"before\");\n\n if (other != null) {\n val.other = getBidi(ch, other, sticky != \"before\");\n }\n\n return val;\n } // Used to cheaply estimate the coordinates for a position. Used for\n // intermediate scroll updates.\n\n\n function estimateCoords(cm, pos) {\n var left = 0;\n pos = _clipPos(cm.doc, pos);\n\n if (!cm.options.lineWrapping) {\n left = charWidth(cm.display) * pos.ch;\n }\n\n var lineObj = getLine(cm.doc, pos.line);\n var top = _heightAtLine(lineObj) + paddingTop(cm.display);\n return {\n left: left,\n right: left,\n top: top,\n bottom: top + lineObj.height\n };\n } // Positions returned by coordsChar contain some extra information.\n // xRel is the relative x position of the input coordinates compared\n // to the found position (so xRel > 0 means the coordinates are to\n // the right of the character position, for example). When outside\n // is true, that means the coordinates lie outside the line's\n // vertical range.\n\n\n function PosWithInfo(line, ch, sticky, outside, xRel) {\n var pos = Pos(line, ch, sticky);\n pos.xRel = xRel;\n\n if (outside) {\n pos.outside = outside;\n }\n\n return pos;\n } // Compute the character position closest to the given coordinates.\n // Input must be lineSpace-local (\"div\" coordinate system).\n\n\n function _coordsChar(cm, x, y) {\n var doc = cm.doc;\n y += cm.display.viewOffset;\n\n if (y < 0) {\n return PosWithInfo(doc.first, 0, null, -1, -1);\n }\n\n var lineN = _lineAtHeight(doc, y),\n last = doc.first + doc.size - 1;\n\n if (lineN > last) {\n return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, null, 1, 1);\n }\n\n if (x < 0) {\n x = 0;\n }\n\n var lineObj = getLine(doc, lineN);\n\n for (;;) {\n var found = coordsCharInner(cm, lineObj, lineN, x, y);\n var collapsed = collapsedSpanAround(lineObj, found.ch + (found.xRel > 0 || found.outside > 0 ? 1 : 0));\n\n if (!collapsed) {\n return found;\n }\n\n var rangeEnd = collapsed.find(1);\n\n if (rangeEnd.line == lineN) {\n return rangeEnd;\n }\n\n lineObj = getLine(doc, lineN = rangeEnd.line);\n }\n }\n\n function wrappedLineExtent(cm, lineObj, preparedMeasure, y) {\n y -= widgetTopHeight(lineObj);\n var end = lineObj.text.length;\n var begin = findFirst(function (ch) {\n return measureCharPrepared(cm, preparedMeasure, ch - 1).bottom <= y;\n }, end, 0);\n end = findFirst(function (ch) {\n return measureCharPrepared(cm, preparedMeasure, ch).top > y;\n }, begin, end);\n return {\n begin: begin,\n end: end\n };\n }\n\n function wrappedLineExtentChar(cm, lineObj, preparedMeasure, target) {\n if (!preparedMeasure) {\n preparedMeasure = prepareMeasureForLine(cm, lineObj);\n }\n\n var targetTop = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, target), \"line\").top;\n return wrappedLineExtent(cm, lineObj, preparedMeasure, targetTop);\n } // Returns true if the given side of a box is after the given\n // coordinates, in top-to-bottom, left-to-right order.\n\n\n function boxIsAfter(box, x, y, left) {\n return box.bottom <= y ? false : box.top > y ? true : (left ? box.left : box.right) > x;\n }\n\n function coordsCharInner(cm, lineObj, lineNo, x, y) {\n // Move y into line-local coordinate space\n y -= _heightAtLine(lineObj);\n var preparedMeasure = prepareMeasureForLine(cm, lineObj); // When directly calling `measureCharPrepared`, we have to adjust\n // for the widgets at this line.\n\n var widgetHeight = widgetTopHeight(lineObj);\n var begin = 0,\n end = lineObj.text.length,\n ltr = true;\n var order = getOrder(lineObj, cm.doc.direction); // If the line isn't plain left-to-right text, first figure out\n // which bidi section the coordinates fall into.\n\n if (order) {\n var part = (cm.options.lineWrapping ? coordsBidiPartWrapped : coordsBidiPart)(cm, lineObj, lineNo, preparedMeasure, order, x, y);\n ltr = part.level != 1; // The awkward -1 offsets are needed because findFirst (called\n // on these below) will treat its first bound as inclusive,\n // second as exclusive, but we want to actually address the\n // characters in the part's range\n\n begin = ltr ? part.from : part.to - 1;\n end = ltr ? part.to : part.from - 1;\n } // A binary search to find the first character whose bounding box\n // starts after the coordinates. If we run across any whose box wrap\n // the coordinates, store that.\n\n\n var chAround = null,\n boxAround = null;\n var ch = findFirst(function (ch) {\n var box = measureCharPrepared(cm, preparedMeasure, ch);\n box.top += widgetHeight;\n box.bottom += widgetHeight;\n\n if (!boxIsAfter(box, x, y, false)) {\n return false;\n }\n\n if (box.top <= y && box.left <= x) {\n chAround = ch;\n boxAround = box;\n }\n\n return true;\n }, begin, end);\n var baseX,\n sticky,\n outside = false; // If a box around the coordinates was found, use that\n\n if (boxAround) {\n // Distinguish coordinates nearer to the left or right side of the box\n var atLeft = x - boxAround.left < boxAround.right - x,\n atStart = atLeft == ltr;\n ch = chAround + (atStart ? 0 : 1);\n sticky = atStart ? \"after\" : \"before\";\n baseX = atLeft ? boxAround.left : boxAround.right;\n } else {\n // (Adjust for extended bound, if necessary.)\n if (!ltr && (ch == end || ch == begin)) {\n ch++;\n } // To determine which side to associate with, get the box to the\n // left of the character and compare it's vertical position to the\n // coordinates\n\n\n sticky = ch == 0 ? \"after\" : ch == lineObj.text.length ? \"before\" : measureCharPrepared(cm, preparedMeasure, ch - (ltr ? 1 : 0)).bottom + widgetHeight <= y == ltr ? \"after\" : \"before\"; // Now get accurate coordinates for this place, in order to get a\n // base X position\n\n var coords = _cursorCoords(cm, Pos(lineNo, ch, sticky), \"line\", lineObj, preparedMeasure);\n\n baseX = coords.left;\n outside = y < coords.top ? -1 : y >= coords.bottom ? 1 : 0;\n }\n\n ch = skipExtendingChars(lineObj.text, ch, 1);\n return PosWithInfo(lineNo, ch, sticky, outside, x - baseX);\n }\n\n function coordsBidiPart(cm, lineObj, lineNo, preparedMeasure, order, x, y) {\n // Bidi parts are sorted left-to-right, and in a non-line-wrapping\n // situation, we can take this ordering to correspond to the visual\n // ordering. This finds the first part whose end is after the given\n // coordinates.\n var index = findFirst(function (i) {\n var part = order[i],\n ltr = part.level != 1;\n return boxIsAfter(_cursorCoords(cm, Pos(lineNo, ltr ? part.to : part.from, ltr ? \"before\" : \"after\"), \"line\", lineObj, preparedMeasure), x, y, true);\n }, 0, order.length - 1);\n var part = order[index]; // If this isn't the first part, the part's start is also after\n // the coordinates, and the coordinates aren't on the same line as\n // that start, move one part back.\n\n if (index > 0) {\n var ltr = part.level != 1;\n\n var start = _cursorCoords(cm, Pos(lineNo, ltr ? part.from : part.to, ltr ? \"after\" : \"before\"), \"line\", lineObj, preparedMeasure);\n\n if (boxIsAfter(start, x, y, true) && start.top > y) {\n part = order[index - 1];\n }\n }\n\n return part;\n }\n\n function coordsBidiPartWrapped(cm, lineObj, _lineNo, preparedMeasure, order, x, y) {\n // In a wrapped line, rtl text on wrapping boundaries can do things\n // that don't correspond to the ordering in our `order` array at\n // all, so a binary search doesn't work, and we want to return a\n // part that only spans one line so that the binary search in\n // coordsCharInner is safe. As such, we first find the extent of the\n // wrapped line, and then do a flat search in which we discard any\n // spans that aren't on the line.\n var ref = wrappedLineExtent(cm, lineObj, preparedMeasure, y);\n var begin = ref.begin;\n var end = ref.end;\n\n if (/\\s/.test(lineObj.text.charAt(end - 1))) {\n end--;\n }\n\n var part = null,\n closestDist = null;\n\n for (var i = 0; i < order.length; i++) {\n var p = order[i];\n\n if (p.from >= end || p.to <= begin) {\n continue;\n }\n\n var ltr = p.level != 1;\n var endX = measureCharPrepared(cm, preparedMeasure, ltr ? Math.min(end, p.to) - 1 : Math.max(begin, p.from)).right; // Weigh against spans ending before this, so that they are only\n // picked if nothing ends after\n\n var dist = endX < x ? x - endX + 1e9 : endX - x;\n\n if (!part || closestDist > dist) {\n part = p;\n closestDist = dist;\n }\n }\n\n if (!part) {\n part = order[order.length - 1];\n } // Clip the part to the wrapped line.\n\n\n if (part.from < begin) {\n part = {\n from: begin,\n to: part.to,\n level: part.level\n };\n }\n\n if (part.to > end) {\n part = {\n from: part.from,\n to: end,\n level: part.level\n };\n }\n\n return part;\n }\n\n var measureText; // Compute the default text height.\n\n function textHeight(display) {\n if (display.cachedTextHeight != null) {\n return display.cachedTextHeight;\n }\n\n if (measureText == null) {\n measureText = elt(\"pre\", null, \"CodeMirror-line-like\"); // Measure a bunch of lines, for browsers that compute\n // fractional heights.\n\n for (var i = 0; i < 49; ++i) {\n measureText.appendChild(document.createTextNode(\"x\"));\n measureText.appendChild(elt(\"br\"));\n }\n\n measureText.appendChild(document.createTextNode(\"x\"));\n }\n\n removeChildrenAndAdd(display.measure, measureText);\n var height = measureText.offsetHeight / 50;\n\n if (height > 3) {\n display.cachedTextHeight = height;\n }\n\n removeChildren(display.measure);\n return height || 1;\n } // Compute the default character width.\n\n\n function charWidth(display) {\n if (display.cachedCharWidth != null) {\n return display.cachedCharWidth;\n }\n\n var anchor = elt(\"span\", \"xxxxxxxxxx\");\n var pre = elt(\"pre\", [anchor], \"CodeMirror-line-like\");\n removeChildrenAndAdd(display.measure, pre);\n var rect = anchor.getBoundingClientRect(),\n width = (rect.right - rect.left) / 10;\n\n if (width > 2) {\n display.cachedCharWidth = width;\n }\n\n return width || 10;\n } // Do a bulk-read of the DOM positions and sizes needed to draw the\n // view, so that we don't interleave reading and writing to the DOM.\n\n\n function getDimensions(cm) {\n var d = cm.display,\n left = {},\n width = {};\n var gutterLeft = d.gutters.clientLeft;\n\n for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) {\n var id = cm.display.gutterSpecs[i].className;\n left[id] = n.offsetLeft + n.clientLeft + gutterLeft;\n width[id] = n.clientWidth;\n }\n\n return {\n fixedPos: compensateForHScroll(d),\n gutterTotalWidth: d.gutters.offsetWidth,\n gutterLeft: left,\n gutterWidth: width,\n wrapperWidth: d.wrapper.clientWidth\n };\n } // Computes display.scroller.scrollLeft + display.gutters.offsetWidth,\n // but using getBoundingClientRect to get a sub-pixel-accurate\n // result.\n\n\n function compensateForHScroll(display) {\n return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left;\n } // Returns a function that estimates the height of a line, to use as\n // first approximation until the line becomes visible (and is thus\n // properly measurable).\n\n\n function estimateHeight(cm) {\n var th = textHeight(cm.display),\n wrapping = cm.options.lineWrapping;\n var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3);\n return function (line) {\n if (lineIsHidden(cm.doc, line)) {\n return 0;\n }\n\n var widgetsHeight = 0;\n\n if (line.widgets) {\n for (var i = 0; i < line.widgets.length; i++) {\n if (line.widgets[i].height) {\n widgetsHeight += line.widgets[i].height;\n }\n }\n }\n\n if (wrapping) {\n return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th;\n } else {\n return widgetsHeight + th;\n }\n };\n }\n\n function estimateLineHeights(cm) {\n var doc = cm.doc,\n est = estimateHeight(cm);\n doc.iter(function (line) {\n var estHeight = est(line);\n\n if (estHeight != line.height) {\n updateLineHeight(line, estHeight);\n }\n });\n } // Given a mouse event, find the corresponding position. If liberal\n // is false, it checks whether a gutter or scrollbar was clicked,\n // and returns null if it was. forRect is used by rectangular\n // selections, and tries to estimate a character position even for\n // coordinates beyond the right of the text.\n\n\n function posFromMouse(cm, e, liberal, forRect) {\n var display = cm.display;\n\n if (!liberal && e_target(e).getAttribute(\"cm-not-content\") == \"true\") {\n return null;\n }\n\n var x,\n y,\n space = display.lineSpace.getBoundingClientRect(); // Fails unpredictably on IE[67] when mouse is dragged around quickly.\n\n try {\n x = e.clientX - space.left;\n y = e.clientY - space.top;\n } catch (e$1) {\n return null;\n }\n\n var coords = _coordsChar(cm, x, y),\n line;\n\n if (forRect && coords.xRel > 0 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) {\n var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length;\n coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff));\n }\n\n return coords;\n } // Find the view element corresponding to a given line. Return null\n // when the line isn't visible.\n\n\n function findViewIndex(cm, n) {\n if (n >= cm.display.viewTo) {\n return null;\n }\n\n n -= cm.display.viewFrom;\n\n if (n < 0) {\n return null;\n }\n\n var view = cm.display.view;\n\n for (var i = 0; i < view.length; i++) {\n n -= view[i].size;\n\n if (n < 0) {\n return i;\n }\n }\n } // Updates the display.view data structure for a given change to the\n // document. From and to are in pre-change coordinates. Lendiff is\n // the amount of lines added or subtracted by the change. This is\n // used for changes that span multiple lines, or change the way\n // lines are divided into visual lines. regLineChange (below)\n // registers single-line changes.\n\n\n function regChange(cm, from, to, lendiff) {\n if (from == null) {\n from = cm.doc.first;\n }\n\n if (to == null) {\n to = cm.doc.first + cm.doc.size;\n }\n\n if (!lendiff) {\n lendiff = 0;\n }\n\n var display = cm.display;\n\n if (lendiff && to < display.viewTo && (display.updateLineNumbers == null || display.updateLineNumbers > from)) {\n display.updateLineNumbers = from;\n }\n\n cm.curOp.viewChanged = true;\n\n if (from >= display.viewTo) {\n // Change after\n if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo) {\n resetView(cm);\n }\n } else if (to <= display.viewFrom) {\n // Change before\n if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) {\n resetView(cm);\n } else {\n display.viewFrom += lendiff;\n display.viewTo += lendiff;\n }\n } else if (from <= display.viewFrom && to >= display.viewTo) {\n // Full overlap\n resetView(cm);\n } else if (from <= display.viewFrom) {\n // Top overlap\n var cut = viewCuttingPoint(cm, to, to + lendiff, 1);\n\n if (cut) {\n display.view = display.view.slice(cut.index);\n display.viewFrom = cut.lineN;\n display.viewTo += lendiff;\n } else {\n resetView(cm);\n }\n } else if (to >= display.viewTo) {\n // Bottom overlap\n var cut$1 = viewCuttingPoint(cm, from, from, -1);\n\n if (cut$1) {\n display.view = display.view.slice(0, cut$1.index);\n display.viewTo = cut$1.lineN;\n } else {\n resetView(cm);\n }\n } else {\n // Gap in the middle\n var cutTop = viewCuttingPoint(cm, from, from, -1);\n var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1);\n\n if (cutTop && cutBot) {\n display.view = display.view.slice(0, cutTop.index).concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN)).concat(display.view.slice(cutBot.index));\n display.viewTo += lendiff;\n } else {\n resetView(cm);\n }\n }\n\n var ext = display.externalMeasured;\n\n if (ext) {\n if (to < ext.lineN) {\n ext.lineN += lendiff;\n } else if (from < ext.lineN + ext.size) {\n display.externalMeasured = null;\n }\n }\n } // Register a change to a single line. Type must be one of \"text\",\n // \"gutter\", \"class\", \"widget\"\n\n\n function regLineChange(cm, line, type) {\n cm.curOp.viewChanged = true;\n var display = cm.display,\n ext = cm.display.externalMeasured;\n\n if (ext && line >= ext.lineN && line < ext.lineN + ext.size) {\n display.externalMeasured = null;\n }\n\n if (line < display.viewFrom || line >= display.viewTo) {\n return;\n }\n\n var lineView = display.view[findViewIndex(cm, line)];\n\n if (lineView.node == null) {\n return;\n }\n\n var arr = lineView.changes || (lineView.changes = []);\n\n if (indexOf(arr, type) == -1) {\n arr.push(type);\n }\n } // Clear the view.\n\n\n function resetView(cm) {\n cm.display.viewFrom = cm.display.viewTo = cm.doc.first;\n cm.display.view = [];\n cm.display.viewOffset = 0;\n }\n\n function viewCuttingPoint(cm, oldN, newN, dir) {\n var index = findViewIndex(cm, oldN),\n diff,\n view = cm.display.view;\n\n if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size) {\n return {\n index: index,\n lineN: newN\n };\n }\n\n var n = cm.display.viewFrom;\n\n for (var i = 0; i < index; i++) {\n n += view[i].size;\n }\n\n if (n != oldN) {\n if (dir > 0) {\n if (index == view.length - 1) {\n return null;\n }\n\n diff = n + view[index].size - oldN;\n index++;\n } else {\n diff = n - oldN;\n }\n\n oldN += diff;\n newN += diff;\n }\n\n while (visualLineNo(cm.doc, newN) != newN) {\n if (index == (dir < 0 ? 0 : view.length - 1)) {\n return null;\n }\n\n newN += dir * view[index - (dir < 0 ? 1 : 0)].size;\n index += dir;\n }\n\n return {\n index: index,\n lineN: newN\n };\n } // Force the view to cover a given range, adding empty view element\n // or clipping off existing ones as needed.\n\n\n function adjustView(cm, from, to) {\n var display = cm.display,\n view = display.view;\n\n if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) {\n display.view = buildViewArray(cm, from, to);\n display.viewFrom = from;\n } else {\n if (display.viewFrom > from) {\n display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view);\n } else if (display.viewFrom < from) {\n display.view = display.view.slice(findViewIndex(cm, from));\n }\n\n display.viewFrom = from;\n\n if (display.viewTo < to) {\n display.view = display.view.concat(buildViewArray(cm, display.viewTo, to));\n } else if (display.viewTo > to) {\n display.view = display.view.slice(0, findViewIndex(cm, to));\n }\n }\n\n display.viewTo = to;\n } // Count the number of lines in the view whose DOM representation is\n // out of date (or nonexistent).\n\n\n function countDirtyView(cm) {\n var view = cm.display.view,\n dirty = 0;\n\n for (var i = 0; i < view.length; i++) {\n var lineView = view[i];\n\n if (!lineView.hidden && (!lineView.node || lineView.changes)) {\n ++dirty;\n }\n }\n\n return dirty;\n }\n\n function updateSelection(cm) {\n cm.display.input.showSelection(cm.display.input.prepareSelection());\n }\n\n function prepareSelection(cm, primary) {\n if (primary === void 0) primary = true;\n var doc = cm.doc,\n result = {};\n var curFragment = result.cursors = document.createDocumentFragment();\n var selFragment = result.selection = document.createDocumentFragment();\n\n for (var i = 0; i < doc.sel.ranges.length; i++) {\n if (!primary && i == doc.sel.primIndex) {\n continue;\n }\n\n var range = doc.sel.ranges[i];\n\n if (range.from().line >= cm.display.viewTo || range.to().line < cm.display.viewFrom) {\n continue;\n }\n\n var collapsed = range.empty();\n\n if (collapsed || cm.options.showCursorWhenSelecting) {\n drawSelectionCursor(cm, range.head, curFragment);\n }\n\n if (!collapsed) {\n drawSelectionRange(cm, range, selFragment);\n }\n }\n\n return result;\n } // Draws a cursor for the given range\n\n\n function drawSelectionCursor(cm, head, output) {\n var pos = _cursorCoords(cm, head, \"div\", null, null, !cm.options.singleCursorHeightPerLine);\n\n var cursor = output.appendChild(elt(\"div\", \"\\xA0\", \"CodeMirror-cursor\"));\n cursor.style.left = pos.left + \"px\";\n cursor.style.top = pos.top + \"px\";\n cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + \"px\";\n\n if (/\\bcm-fat-cursor\\b/.test(cm.getWrapperElement().className)) {\n var charPos = _charCoords(cm, head, \"div\", null, null);\n\n cursor.style.width = Math.max(0, charPos.right - charPos.left) + \"px\";\n }\n\n if (pos.other) {\n // Secondary cursor, shown when on a 'jump' in bi-directional text\n var otherCursor = output.appendChild(elt(\"div\", \"\\xA0\", \"CodeMirror-cursor CodeMirror-secondarycursor\"));\n otherCursor.style.display = \"\";\n otherCursor.style.left = pos.other.left + \"px\";\n otherCursor.style.top = pos.other.top + \"px\";\n otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + \"px\";\n }\n }\n\n function cmpCoords(a, b) {\n return a.top - b.top || a.left - b.left;\n } // Draws the given range as a highlighted selection\n\n\n function drawSelectionRange(cm, range, output) {\n var display = cm.display,\n doc = cm.doc;\n var fragment = document.createDocumentFragment();\n var padding = paddingH(cm.display),\n leftSide = padding.left;\n var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right;\n var docLTR = doc.direction == \"ltr\";\n\n function add(left, top, width, bottom) {\n if (top < 0) {\n top = 0;\n }\n\n top = Math.round(top);\n bottom = Math.round(bottom);\n fragment.appendChild(elt(\"div\", null, \"CodeMirror-selected\", \"position: absolute; left: \" + left + \"px;\\n top: \" + top + \"px; width: \" + (width == null ? rightSide - left : width) + \"px;\\n height: \" + (bottom - top) + \"px\"));\n }\n\n function drawForLine(line, fromArg, toArg) {\n var lineObj = getLine(doc, line);\n var lineLen = lineObj.text.length;\n var start, end;\n\n function coords(ch, bias) {\n return _charCoords(cm, Pos(line, ch), \"div\", lineObj, bias);\n }\n\n function wrapX(pos, dir, side) {\n var extent = wrappedLineExtentChar(cm, lineObj, null, pos);\n var prop = dir == \"ltr\" == (side == \"after\") ? \"left\" : \"right\";\n var ch = side == \"after\" ? extent.begin : extent.end - (/\\s/.test(lineObj.text.charAt(extent.end - 1)) ? 2 : 1);\n return coords(ch, prop)[prop];\n }\n\n var order = getOrder(lineObj, doc.direction);\n iterateBidiSections(order, fromArg || 0, toArg == null ? lineLen : toArg, function (from, to, dir, i) {\n var ltr = dir == \"ltr\";\n var fromPos = coords(from, ltr ? \"left\" : \"right\");\n var toPos = coords(to - 1, ltr ? \"right\" : \"left\");\n var openStart = fromArg == null && from == 0,\n openEnd = toArg == null && to == lineLen;\n var first = i == 0,\n last = !order || i == order.length - 1;\n\n if (toPos.top - fromPos.top <= 3) {\n // Single line\n var openLeft = (docLTR ? openStart : openEnd) && first;\n var openRight = (docLTR ? openEnd : openStart) && last;\n var left = openLeft ? leftSide : (ltr ? fromPos : toPos).left;\n var right = openRight ? rightSide : (ltr ? toPos : fromPos).right;\n add(left, fromPos.top, right - left, fromPos.bottom);\n } else {\n // Multiple lines\n var topLeft, topRight, botLeft, botRight;\n\n if (ltr) {\n topLeft = docLTR && openStart && first ? leftSide : fromPos.left;\n topRight = docLTR ? rightSide : wrapX(from, dir, \"before\");\n botLeft = docLTR ? leftSide : wrapX(to, dir, \"after\");\n botRight = docLTR && openEnd && last ? rightSide : toPos.right;\n } else {\n topLeft = !docLTR ? leftSide : wrapX(from, dir, \"before\");\n topRight = !docLTR && openStart && first ? rightSide : fromPos.right;\n botLeft = !docLTR && openEnd && last ? leftSide : toPos.left;\n botRight = !docLTR ? rightSide : wrapX(to, dir, \"after\");\n }\n\n add(topLeft, fromPos.top, topRight - topLeft, fromPos.bottom);\n\n if (fromPos.bottom < toPos.top) {\n add(leftSide, fromPos.bottom, null, toPos.top);\n }\n\n add(botLeft, toPos.top, botRight - botLeft, toPos.bottom);\n }\n\n if (!start || cmpCoords(fromPos, start) < 0) {\n start = fromPos;\n }\n\n if (cmpCoords(toPos, start) < 0) {\n start = toPos;\n }\n\n if (!end || cmpCoords(fromPos, end) < 0) {\n end = fromPos;\n }\n\n if (cmpCoords(toPos, end) < 0) {\n end = toPos;\n }\n });\n return {\n start: start,\n end: end\n };\n }\n\n var sFrom = range.from(),\n sTo = range.to();\n\n if (sFrom.line == sTo.line) {\n drawForLine(sFrom.line, sFrom.ch, sTo.ch);\n } else {\n var fromLine = getLine(doc, sFrom.line),\n toLine = getLine(doc, sTo.line);\n var singleVLine = visualLine(fromLine) == visualLine(toLine);\n var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end;\n var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start;\n\n if (singleVLine) {\n if (leftEnd.top < rightStart.top - 2) {\n add(leftEnd.right, leftEnd.top, null, leftEnd.bottom);\n add(leftSide, rightStart.top, rightStart.left, rightStart.bottom);\n } else {\n add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom);\n }\n }\n\n if (leftEnd.bottom < rightStart.top) {\n add(leftSide, leftEnd.bottom, null, rightStart.top);\n }\n }\n\n output.appendChild(fragment);\n } // Cursor-blinking\n\n\n function restartBlink(cm) {\n if (!cm.state.focused) {\n return;\n }\n\n var display = cm.display;\n clearInterval(display.blinker);\n var on = true;\n display.cursorDiv.style.visibility = \"\";\n\n if (cm.options.cursorBlinkRate > 0) {\n display.blinker = setInterval(function () {\n if (!cm.hasFocus()) {\n onBlur(cm);\n }\n\n display.cursorDiv.style.visibility = (on = !on) ? \"\" : \"hidden\";\n }, cm.options.cursorBlinkRate);\n } else if (cm.options.cursorBlinkRate < 0) {\n display.cursorDiv.style.visibility = \"hidden\";\n }\n }\n\n function ensureFocus(cm) {\n if (!cm.hasFocus()) {\n cm.display.input.focus();\n\n if (!cm.state.focused) {\n onFocus(cm);\n }\n }\n }\n\n function delayBlurEvent(cm) {\n cm.state.delayingBlurEvent = true;\n setTimeout(function () {\n if (cm.state.delayingBlurEvent) {\n cm.state.delayingBlurEvent = false;\n\n if (cm.state.focused) {\n onBlur(cm);\n }\n }\n }, 100);\n }\n\n function onFocus(cm, e) {\n if (cm.state.delayingBlurEvent && !cm.state.draggingText) {\n cm.state.delayingBlurEvent = false;\n }\n\n if (cm.options.readOnly == \"nocursor\") {\n return;\n }\n\n if (!cm.state.focused) {\n signal(cm, \"focus\", cm, e);\n cm.state.focused = true;\n addClass(cm.display.wrapper, \"CodeMirror-focused\"); // This test prevents this from firing when a context\n // menu is closed (since the input reset would kill the\n // select-all detection hack)\n\n if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) {\n cm.display.input.reset();\n\n if (webkit) {\n setTimeout(function () {\n return cm.display.input.reset(true);\n }, 20);\n } // Issue #1730\n\n }\n\n cm.display.input.receivedFocus();\n }\n\n restartBlink(cm);\n }\n\n function onBlur(cm, e) {\n if (cm.state.delayingBlurEvent) {\n return;\n }\n\n if (cm.state.focused) {\n signal(cm, \"blur\", cm, e);\n cm.state.focused = false;\n rmClass(cm.display.wrapper, \"CodeMirror-focused\");\n }\n\n clearInterval(cm.display.blinker);\n setTimeout(function () {\n if (!cm.state.focused) {\n cm.display.shift = false;\n }\n }, 150);\n } // Read the actual heights of the rendered lines, and update their\n // stored heights to match.\n\n\n function updateHeightsInViewport(cm) {\n var display = cm.display;\n var prevBottom = display.lineDiv.offsetTop;\n\n for (var i = 0; i < display.view.length; i++) {\n var cur = display.view[i],\n wrapping = cm.options.lineWrapping;\n var height = void 0,\n width = 0;\n\n if (cur.hidden) {\n continue;\n }\n\n if (ie && ie_version < 8) {\n var bot = cur.node.offsetTop + cur.node.offsetHeight;\n height = bot - prevBottom;\n prevBottom = bot;\n } else {\n var box = cur.node.getBoundingClientRect();\n height = box.bottom - box.top; // Check that lines don't extend past the right of the current\n // editor width\n\n if (!wrapping && cur.text.firstChild) {\n width = cur.text.firstChild.getBoundingClientRect().right - box.left - 1;\n }\n }\n\n var diff = cur.line.height - height;\n\n if (diff > .005 || diff < -.005) {\n updateLineHeight(cur.line, height);\n updateWidgetHeight(cur.line);\n\n if (cur.rest) {\n for (var j = 0; j < cur.rest.length; j++) {\n updateWidgetHeight(cur.rest[j]);\n }\n }\n }\n\n if (width > cm.display.sizerWidth) {\n var chWidth = Math.ceil(width / charWidth(cm.display));\n\n if (chWidth > cm.display.maxLineLength) {\n cm.display.maxLineLength = chWidth;\n cm.display.maxLine = cur.line;\n cm.display.maxLineChanged = true;\n }\n }\n }\n } // Read and store the height of line widgets associated with the\n // given line.\n\n\n function updateWidgetHeight(line) {\n if (line.widgets) {\n for (var i = 0; i < line.widgets.length; ++i) {\n var w = line.widgets[i],\n parent = w.node.parentNode;\n\n if (parent) {\n w.height = parent.offsetHeight;\n }\n }\n }\n } // Compute the lines that are visible in a given viewport (defaults\n // the the current scroll position). viewport may contain top,\n // height, and ensure (see op.scrollToPos) properties.\n\n\n function visibleLines(display, doc, viewport) {\n var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop;\n top = Math.floor(top - paddingTop(display));\n var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight;\n\n var from = _lineAtHeight(doc, top),\n to = _lineAtHeight(doc, bottom); // Ensure is a {from: {line, ch}, to: {line, ch}} object, and\n // forces those lines into the viewport (if possible).\n\n\n if (viewport && viewport.ensure) {\n var ensureFrom = viewport.ensure.from.line,\n ensureTo = viewport.ensure.to.line;\n\n if (ensureFrom < from) {\n from = ensureFrom;\n to = _lineAtHeight(doc, _heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight);\n } else if (Math.min(ensureTo, doc.lastLine()) >= to) {\n from = _lineAtHeight(doc, _heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight);\n to = ensureTo;\n }\n }\n\n return {\n from: from,\n to: Math.max(to, from + 1)\n };\n } // SCROLLING THINGS INTO VIEW\n // If an editor sits on the top or bottom of the window, partially\n // scrolled out of view, this ensures that the cursor is visible.\n\n\n function maybeScrollWindow(cm, rect) {\n if (signalDOMEvent(cm, \"scrollCursorIntoView\")) {\n return;\n }\n\n var display = cm.display,\n box = display.sizer.getBoundingClientRect(),\n doScroll = null;\n\n if (rect.top + box.top < 0) {\n doScroll = true;\n } else if (rect.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) {\n doScroll = false;\n }\n\n if (doScroll != null && !phantom) {\n var scrollNode = elt(\"div\", \"\\u200B\", null, \"position: absolute;\\n top: \" + (rect.top - display.viewOffset - paddingTop(cm.display)) + \"px;\\n height: \" + (rect.bottom - rect.top + scrollGap(cm) + display.barHeight) + \"px;\\n left: \" + rect.left + \"px; width: \" + Math.max(2, rect.right - rect.left) + \"px;\");\n cm.display.lineSpace.appendChild(scrollNode);\n scrollNode.scrollIntoView(doScroll);\n cm.display.lineSpace.removeChild(scrollNode);\n }\n } // Scroll a given position into view (immediately), verifying that\n // it actually became visible (as line heights are accurately\n // measured, the position of something may 'drift' during drawing).\n\n\n function scrollPosIntoView(cm, pos, end, margin) {\n if (margin == null) {\n margin = 0;\n }\n\n var rect;\n\n if (!cm.options.lineWrapping && pos == end) {\n // Set pos and end to the cursor positions around the character pos sticks to\n // If pos.sticky == \"before\", that is around pos.ch - 1, otherwise around pos.ch\n // If pos == Pos(_, 0, \"before\"), pos and end are unchanged\n end = pos.sticky == \"before\" ? Pos(pos.line, pos.ch + 1, \"before\") : pos;\n pos = pos.ch ? Pos(pos.line, pos.sticky == \"before\" ? pos.ch - 1 : pos.ch, \"after\") : pos;\n }\n\n for (var limit = 0; limit < 5; limit++) {\n var changed = false;\n\n var coords = _cursorCoords(cm, pos);\n\n var endCoords = !end || end == pos ? coords : _cursorCoords(cm, end);\n rect = {\n left: Math.min(coords.left, endCoords.left),\n top: Math.min(coords.top, endCoords.top) - margin,\n right: Math.max(coords.left, endCoords.left),\n bottom: Math.max(coords.bottom, endCoords.bottom) + margin\n };\n var scrollPos = calculateScrollPos(cm, rect);\n var startTop = cm.doc.scrollTop,\n startLeft = cm.doc.scrollLeft;\n\n if (scrollPos.scrollTop != null) {\n updateScrollTop(cm, scrollPos.scrollTop);\n\n if (Math.abs(cm.doc.scrollTop - startTop) > 1) {\n changed = true;\n }\n }\n\n if (scrollPos.scrollLeft != null) {\n setScrollLeft(cm, scrollPos.scrollLeft);\n\n if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) {\n changed = true;\n }\n }\n\n if (!changed) {\n break;\n }\n }\n\n return rect;\n } // Scroll a given set of coordinates into view (immediately).\n\n\n function scrollIntoView(cm, rect) {\n var scrollPos = calculateScrollPos(cm, rect);\n\n if (scrollPos.scrollTop != null) {\n updateScrollTop(cm, scrollPos.scrollTop);\n }\n\n if (scrollPos.scrollLeft != null) {\n setScrollLeft(cm, scrollPos.scrollLeft);\n }\n } // Calculate a new scroll position needed to scroll the given\n // rectangle into view. Returns an object with scrollTop and\n // scrollLeft properties. When these are undefined, the\n // vertical/horizontal position does not need to be adjusted.\n\n\n function calculateScrollPos(cm, rect) {\n var display = cm.display,\n snapMargin = textHeight(cm.display);\n\n if (rect.top < 0) {\n rect.top = 0;\n }\n\n var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop;\n var screen = displayHeight(cm),\n result = {};\n\n if (rect.bottom - rect.top > screen) {\n rect.bottom = rect.top + screen;\n }\n\n var docBottom = cm.doc.height + paddingVert(display);\n var atTop = rect.top < snapMargin,\n atBottom = rect.bottom > docBottom - snapMargin;\n\n if (rect.top < screentop) {\n result.scrollTop = atTop ? 0 : rect.top;\n } else if (rect.bottom > screentop + screen) {\n var newTop = Math.min(rect.top, (atBottom ? docBottom : rect.bottom) - screen);\n\n if (newTop != screentop) {\n result.scrollTop = newTop;\n }\n }\n\n var gutterSpace = cm.options.fixedGutter ? 0 : display.gutters.offsetWidth;\n var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft - gutterSpace;\n var screenw = displayWidth(cm) - display.gutters.offsetWidth;\n var tooWide = rect.right - rect.left > screenw;\n\n if (tooWide) {\n rect.right = rect.left + screenw;\n }\n\n if (rect.left < 10) {\n result.scrollLeft = 0;\n } else if (rect.left < screenleft) {\n result.scrollLeft = Math.max(0, rect.left + gutterSpace - (tooWide ? 0 : 10));\n } else if (rect.right > screenw + screenleft - 3) {\n result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw;\n }\n\n return result;\n } // Store a relative adjustment to the scroll position in the current\n // operation (to be applied when the operation finishes).\n\n\n function addToScrollTop(cm, top) {\n if (top == null) {\n return;\n }\n\n resolveScrollToPos(cm);\n cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top;\n } // Make sure that at the end of the operation the current cursor is\n // shown.\n\n\n function ensureCursorVisible(cm) {\n resolveScrollToPos(cm);\n var cur = cm.getCursor();\n cm.curOp.scrollToPos = {\n from: cur,\n to: cur,\n margin: cm.options.cursorScrollMargin\n };\n }\n\n function scrollToCoords(cm, x, y) {\n if (x != null || y != null) {\n resolveScrollToPos(cm);\n }\n\n if (x != null) {\n cm.curOp.scrollLeft = x;\n }\n\n if (y != null) {\n cm.curOp.scrollTop = y;\n }\n }\n\n function scrollToRange(cm, range) {\n resolveScrollToPos(cm);\n cm.curOp.scrollToPos = range;\n } // When an operation has its scrollToPos property set, and another\n // scroll action is applied before the end of the operation, this\n // 'simulates' scrolling that position into view in a cheap way, so\n // that the effect of intermediate scroll commands is not ignored.\n\n\n function resolveScrollToPos(cm) {\n var range = cm.curOp.scrollToPos;\n\n if (range) {\n cm.curOp.scrollToPos = null;\n var from = estimateCoords(cm, range.from),\n to = estimateCoords(cm, range.to);\n scrollToCoordsRange(cm, from, to, range.margin);\n }\n }\n\n function scrollToCoordsRange(cm, from, to, margin) {\n var sPos = calculateScrollPos(cm, {\n left: Math.min(from.left, to.left),\n top: Math.min(from.top, to.top) - margin,\n right: Math.max(from.right, to.right),\n bottom: Math.max(from.bottom, to.bottom) + margin\n });\n scrollToCoords(cm, sPos.scrollLeft, sPos.scrollTop);\n } // Sync the scrollable area and scrollbars, ensure the viewport\n // covers the visible area.\n\n\n function updateScrollTop(cm, val) {\n if (Math.abs(cm.doc.scrollTop - val) < 2) {\n return;\n }\n\n if (!gecko) {\n updateDisplaySimple(cm, {\n top: val\n });\n }\n\n setScrollTop(cm, val, true);\n\n if (gecko) {\n updateDisplaySimple(cm);\n }\n\n startWorker(cm, 100);\n }\n\n function setScrollTop(cm, val, forceScroll) {\n val = Math.max(0, Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight, val));\n\n if (cm.display.scroller.scrollTop == val && !forceScroll) {\n return;\n }\n\n cm.doc.scrollTop = val;\n cm.display.scrollbars.setScrollTop(val);\n\n if (cm.display.scroller.scrollTop != val) {\n cm.display.scroller.scrollTop = val;\n }\n } // Sync scroller and scrollbar, ensure the gutter elements are\n // aligned.\n\n\n function setScrollLeft(cm, val, isScroller, forceScroll) {\n val = Math.max(0, Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth));\n\n if ((isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) && !forceScroll) {\n return;\n }\n\n cm.doc.scrollLeft = val;\n alignHorizontally(cm);\n\n if (cm.display.scroller.scrollLeft != val) {\n cm.display.scroller.scrollLeft = val;\n }\n\n cm.display.scrollbars.setScrollLeft(val);\n } // SCROLLBARS\n // Prepare DOM reads needed to update the scrollbars. Done in one\n // shot to minimize update/measure roundtrips.\n\n\n function measureForScrollbars(cm) {\n var d = cm.display,\n gutterW = d.gutters.offsetWidth;\n var docH = Math.round(cm.doc.height + paddingVert(cm.display));\n return {\n clientHeight: d.scroller.clientHeight,\n viewHeight: d.wrapper.clientHeight,\n scrollWidth: d.scroller.scrollWidth,\n clientWidth: d.scroller.clientWidth,\n viewWidth: d.wrapper.clientWidth,\n barLeft: cm.options.fixedGutter ? gutterW : 0,\n docHeight: docH,\n scrollHeight: docH + scrollGap(cm) + d.barHeight,\n nativeBarWidth: d.nativeBarWidth,\n gutterWidth: gutterW\n };\n }\n\n var NativeScrollbars = function NativeScrollbars(place, scroll, cm) {\n this.cm = cm;\n var vert = this.vert = elt(\"div\", [elt(\"div\", null, null, \"min-width: 1px\")], \"CodeMirror-vscrollbar\");\n var horiz = this.horiz = elt(\"div\", [elt(\"div\", null, null, \"height: 100%; min-height: 1px\")], \"CodeMirror-hscrollbar\");\n vert.tabIndex = horiz.tabIndex = -1;\n place(vert);\n place(horiz);\n on(vert, \"scroll\", function () {\n if (vert.clientHeight) {\n scroll(vert.scrollTop, \"vertical\");\n }\n });\n on(horiz, \"scroll\", function () {\n if (horiz.clientWidth) {\n scroll(horiz.scrollLeft, \"horizontal\");\n }\n });\n this.checkedZeroWidth = false; // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8).\n\n if (ie && ie_version < 8) {\n this.horiz.style.minHeight = this.vert.style.minWidth = \"18px\";\n }\n };\n\n NativeScrollbars.prototype.update = function (measure) {\n var needsH = measure.scrollWidth > measure.clientWidth + 1;\n var needsV = measure.scrollHeight > measure.clientHeight + 1;\n var sWidth = measure.nativeBarWidth;\n\n if (needsV) {\n this.vert.style.display = \"block\";\n this.vert.style.bottom = needsH ? sWidth + \"px\" : \"0\";\n var totalHeight = measure.viewHeight - (needsH ? sWidth : 0); // A bug in IE8 can cause this value to be negative, so guard it.\n\n this.vert.firstChild.style.height = Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + \"px\";\n } else {\n this.vert.style.display = \"\";\n this.vert.firstChild.style.height = \"0\";\n }\n\n if (needsH) {\n this.horiz.style.display = \"block\";\n this.horiz.style.right = needsV ? sWidth + \"px\" : \"0\";\n this.horiz.style.left = measure.barLeft + \"px\";\n var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0);\n this.horiz.firstChild.style.width = Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + \"px\";\n } else {\n this.horiz.style.display = \"\";\n this.horiz.firstChild.style.width = \"0\";\n }\n\n if (!this.checkedZeroWidth && measure.clientHeight > 0) {\n if (sWidth == 0) {\n this.zeroWidthHack();\n }\n\n this.checkedZeroWidth = true;\n }\n\n return {\n right: needsV ? sWidth : 0,\n bottom: needsH ? sWidth : 0\n };\n };\n\n NativeScrollbars.prototype.setScrollLeft = function (pos) {\n if (this.horiz.scrollLeft != pos) {\n this.horiz.scrollLeft = pos;\n }\n\n if (this.disableHoriz) {\n this.enableZeroWidthBar(this.horiz, this.disableHoriz, \"horiz\");\n }\n };\n\n NativeScrollbars.prototype.setScrollTop = function (pos) {\n if (this.vert.scrollTop != pos) {\n this.vert.scrollTop = pos;\n }\n\n if (this.disableVert) {\n this.enableZeroWidthBar(this.vert, this.disableVert, \"vert\");\n }\n };\n\n NativeScrollbars.prototype.zeroWidthHack = function () {\n var w = mac && !mac_geMountainLion ? \"12px\" : \"18px\";\n this.horiz.style.height = this.vert.style.width = w;\n this.horiz.style.pointerEvents = this.vert.style.pointerEvents = \"none\";\n this.disableHoriz = new Delayed();\n this.disableVert = new Delayed();\n };\n\n NativeScrollbars.prototype.enableZeroWidthBar = function (bar, delay, type) {\n bar.style.pointerEvents = \"auto\";\n\n function maybeDisable() {\n // To find out whether the scrollbar is still visible, we\n // check whether the element under the pixel in the bottom\n // right corner of the scrollbar box is the scrollbar box\n // itself (when the bar is still visible) or its filler child\n // (when the bar is hidden). If it is still visible, we keep\n // it enabled, if it's hidden, we disable pointer events.\n var box = bar.getBoundingClientRect();\n var elt = type == \"vert\" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2) : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1);\n\n if (elt != bar) {\n bar.style.pointerEvents = \"none\";\n } else {\n delay.set(1000, maybeDisable);\n }\n }\n\n delay.set(1000, maybeDisable);\n };\n\n NativeScrollbars.prototype.clear = function () {\n var parent = this.horiz.parentNode;\n parent.removeChild(this.horiz);\n parent.removeChild(this.vert);\n };\n\n var NullScrollbars = function NullScrollbars() {};\n\n NullScrollbars.prototype.update = function () {\n return {\n bottom: 0,\n right: 0\n };\n };\n\n NullScrollbars.prototype.setScrollLeft = function () {};\n\n NullScrollbars.prototype.setScrollTop = function () {};\n\n NullScrollbars.prototype.clear = function () {};\n\n function updateScrollbars(cm, measure) {\n if (!measure) {\n measure = measureForScrollbars(cm);\n }\n\n var startWidth = cm.display.barWidth,\n startHeight = cm.display.barHeight;\n updateScrollbarsInner(cm, measure);\n\n for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) {\n if (startWidth != cm.display.barWidth && cm.options.lineWrapping) {\n updateHeightsInViewport(cm);\n }\n\n updateScrollbarsInner(cm, measureForScrollbars(cm));\n startWidth = cm.display.barWidth;\n startHeight = cm.display.barHeight;\n }\n } // Re-synchronize the fake scrollbars with the actual size of the\n // content.\n\n\n function updateScrollbarsInner(cm, measure) {\n var d = cm.display;\n var sizes = d.scrollbars.update(measure);\n d.sizer.style.paddingRight = (d.barWidth = sizes.right) + \"px\";\n d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + \"px\";\n d.heightForcer.style.borderBottom = sizes.bottom + \"px solid transparent\";\n\n if (sizes.right && sizes.bottom) {\n d.scrollbarFiller.style.display = \"block\";\n d.scrollbarFiller.style.height = sizes.bottom + \"px\";\n d.scrollbarFiller.style.width = sizes.right + \"px\";\n } else {\n d.scrollbarFiller.style.display = \"\";\n }\n\n if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) {\n d.gutterFiller.style.display = \"block\";\n d.gutterFiller.style.height = sizes.bottom + \"px\";\n d.gutterFiller.style.width = measure.gutterWidth + \"px\";\n } else {\n d.gutterFiller.style.display = \"\";\n }\n }\n\n var scrollbarModel = {\n \"native\": NativeScrollbars,\n \"null\": NullScrollbars\n };\n\n function initScrollbars(cm) {\n if (cm.display.scrollbars) {\n cm.display.scrollbars.clear();\n\n if (cm.display.scrollbars.addClass) {\n rmClass(cm.display.wrapper, cm.display.scrollbars.addClass);\n }\n }\n\n cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](function (node) {\n cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller); // Prevent clicks in the scrollbars from killing focus\n\n on(node, \"mousedown\", function () {\n if (cm.state.focused) {\n setTimeout(function () {\n return cm.display.input.focus();\n }, 0);\n }\n });\n node.setAttribute(\"cm-not-content\", \"true\");\n }, function (pos, axis) {\n if (axis == \"horizontal\") {\n setScrollLeft(cm, pos);\n } else {\n updateScrollTop(cm, pos);\n }\n }, cm);\n\n if (cm.display.scrollbars.addClass) {\n addClass(cm.display.wrapper, cm.display.scrollbars.addClass);\n }\n } // Operations are used to wrap a series of changes to the editor\n // state in such a way that each change won't have to update the\n // cursor and display (which would be awkward, slow, and\n // error-prone). Instead, display updates are batched and then all\n // combined and executed at once.\n\n\n var nextOpId = 0; // Start a new operation.\n\n function _startOperation(cm) {\n cm.curOp = {\n cm: cm,\n viewChanged: false,\n // Flag that indicates that lines might need to be redrawn\n startHeight: cm.doc.height,\n // Used to detect need to update scrollbar\n forceUpdate: false,\n // Used to force a redraw\n updateInput: 0,\n // Whether to reset the input textarea\n typing: false,\n // Whether this reset should be careful to leave existing text (for compositing)\n changeObjs: null,\n // Accumulated changes, for firing change events\n cursorActivityHandlers: null,\n // Set of handlers to fire cursorActivity on\n cursorActivityCalled: 0,\n // Tracks which cursorActivity handlers have been called already\n selectionChanged: false,\n // Whether the selection needs to be redrawn\n updateMaxLine: false,\n // Set when the widest line needs to be determined anew\n scrollLeft: null,\n scrollTop: null,\n // Intermediate scroll position, not pushed to DOM yet\n scrollToPos: null,\n // Used to scroll to a specific position\n focus: false,\n id: ++nextOpId,\n // Unique ID\n markArrays: null // Used by addMarkedSpan\n\n };\n pushOperation(cm.curOp);\n } // Finish an operation, updating the display and signalling delayed events\n\n\n function _endOperation(cm) {\n var op = cm.curOp;\n\n if (op) {\n finishOperation(op, function (group) {\n for (var i = 0; i < group.ops.length; i++) {\n group.ops[i].cm.curOp = null;\n }\n\n endOperations(group);\n });\n }\n } // The DOM updates done when an operation finishes are batched so\n // that the minimum number of relayouts are required.\n\n\n function endOperations(group) {\n var ops = group.ops;\n\n for (var i = 0; i < ops.length; i++) // Read DOM\n {\n endOperation_R1(ops[i]);\n }\n\n for (var i$1 = 0; i$1 < ops.length; i$1++) // Write DOM (maybe)\n {\n endOperation_W1(ops[i$1]);\n }\n\n for (var i$2 = 0; i$2 < ops.length; i$2++) // Read DOM\n {\n endOperation_R2(ops[i$2]);\n }\n\n for (var i$3 = 0; i$3 < ops.length; i$3++) // Write DOM (maybe)\n {\n endOperation_W2(ops[i$3]);\n }\n\n for (var i$4 = 0; i$4 < ops.length; i$4++) // Read DOM\n {\n endOperation_finish(ops[i$4]);\n }\n }\n\n function endOperation_R1(op) {\n var cm = op.cm,\n display = cm.display;\n maybeClipScrollbars(cm);\n\n if (op.updateMaxLine) {\n findMaxLine(cm);\n }\n\n op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null || op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom || op.scrollToPos.to.line >= display.viewTo) || display.maxLineChanged && cm.options.lineWrapping;\n op.update = op.mustUpdate && new DisplayUpdate(cm, op.mustUpdate && {\n top: op.scrollTop,\n ensure: op.scrollToPos\n }, op.forceUpdate);\n }\n\n function endOperation_W1(op) {\n op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update);\n }\n\n function endOperation_R2(op) {\n var cm = op.cm,\n display = cm.display;\n\n if (op.updatedDisplay) {\n updateHeightsInViewport(cm);\n }\n\n op.barMeasure = measureForScrollbars(cm); // If the max line changed since it was last measured, measure it,\n // and ensure the document's width matches it.\n // updateDisplay_W2 will use these properties to do the actual resizing\n\n if (display.maxLineChanged && !cm.options.lineWrapping) {\n op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3;\n cm.display.sizerWidth = op.adjustWidthTo;\n op.barMeasure.scrollWidth = Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth);\n op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm));\n }\n\n if (op.updatedDisplay || op.selectionChanged) {\n op.preparedSelection = display.input.prepareSelection();\n }\n }\n\n function endOperation_W2(op) {\n var cm = op.cm;\n\n if (op.adjustWidthTo != null) {\n cm.display.sizer.style.minWidth = op.adjustWidthTo + \"px\";\n\n if (op.maxScrollLeft < cm.doc.scrollLeft) {\n setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true);\n }\n\n cm.display.maxLineChanged = false;\n }\n\n var takeFocus = op.focus && op.focus == activeElt();\n\n if (op.preparedSelection) {\n cm.display.input.showSelection(op.preparedSelection, takeFocus);\n }\n\n if (op.updatedDisplay || op.startHeight != cm.doc.height) {\n updateScrollbars(cm, op.barMeasure);\n }\n\n if (op.updatedDisplay) {\n setDocumentHeight(cm, op.barMeasure);\n }\n\n if (op.selectionChanged) {\n restartBlink(cm);\n }\n\n if (cm.state.focused && op.updateInput) {\n cm.display.input.reset(op.typing);\n }\n\n if (takeFocus) {\n ensureFocus(op.cm);\n }\n }\n\n function endOperation_finish(op) {\n var cm = op.cm,\n display = cm.display,\n doc = cm.doc;\n\n if (op.updatedDisplay) {\n postUpdateDisplay(cm, op.update);\n } // Abort mouse wheel delta measurement, when scrolling explicitly\n\n\n if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos)) {\n display.wheelStartX = display.wheelStartY = null;\n } // Propagate the scroll position to the actual DOM scroller\n\n\n if (op.scrollTop != null) {\n setScrollTop(cm, op.scrollTop, op.forceScroll);\n }\n\n if (op.scrollLeft != null) {\n setScrollLeft(cm, op.scrollLeft, true, true);\n } // If we need to scroll a specific position into view, do so.\n\n\n if (op.scrollToPos) {\n var rect = scrollPosIntoView(cm, _clipPos(doc, op.scrollToPos.from), _clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin);\n maybeScrollWindow(cm, rect);\n } // Fire events for markers that are hidden/unidden by editing or\n // undoing\n\n\n var hidden = op.maybeHiddenMarkers,\n unhidden = op.maybeUnhiddenMarkers;\n\n if (hidden) {\n for (var i = 0; i < hidden.length; ++i) {\n if (!hidden[i].lines.length) {\n signal(hidden[i], \"hide\");\n }\n }\n }\n\n if (unhidden) {\n for (var i$1 = 0; i$1 < unhidden.length; ++i$1) {\n if (unhidden[i$1].lines.length) {\n signal(unhidden[i$1], \"unhide\");\n }\n }\n }\n\n if (display.wrapper.offsetHeight) {\n doc.scrollTop = cm.display.scroller.scrollTop;\n } // Fire change events, and delayed event handlers\n\n\n if (op.changeObjs) {\n signal(cm, \"changes\", cm, op.changeObjs);\n }\n\n if (op.update) {\n op.update.finish();\n }\n } // Run the given function in an operation\n\n\n function runInOp(cm, f) {\n if (cm.curOp) {\n return f();\n }\n\n _startOperation(cm);\n\n try {\n return f();\n } finally {\n _endOperation(cm);\n }\n } // Wraps a function in an operation. Returns the wrapped function.\n\n\n function operation(cm, f) {\n return function () {\n if (cm.curOp) {\n return f.apply(cm, arguments);\n }\n\n _startOperation(cm);\n\n try {\n return f.apply(cm, arguments);\n } finally {\n _endOperation(cm);\n }\n };\n } // Used to add methods to editor and doc instances, wrapping them in\n // operations.\n\n\n function methodOp(f) {\n return function () {\n if (this.curOp) {\n return f.apply(this, arguments);\n }\n\n _startOperation(this);\n\n try {\n return f.apply(this, arguments);\n } finally {\n _endOperation(this);\n }\n };\n }\n\n function docMethodOp(f) {\n return function () {\n var cm = this.cm;\n\n if (!cm || cm.curOp) {\n return f.apply(this, arguments);\n }\n\n _startOperation(cm);\n\n try {\n return f.apply(this, arguments);\n } finally {\n _endOperation(cm);\n }\n };\n } // HIGHLIGHT WORKER\n\n\n function startWorker(cm, time) {\n if (cm.doc.highlightFrontier < cm.display.viewTo) {\n cm.state.highlight.set(time, bind(highlightWorker, cm));\n }\n }\n\n function highlightWorker(cm) {\n var doc = cm.doc;\n\n if (doc.highlightFrontier >= cm.display.viewTo) {\n return;\n }\n\n var end = +new Date() + cm.options.workTime;\n var context = getContextBefore(cm, doc.highlightFrontier);\n var changedLines = [];\n doc.iter(context.line, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function (line) {\n if (context.line >= cm.display.viewFrom) {\n // Visible\n var oldStyles = line.styles;\n var resetState = line.text.length > cm.options.maxHighlightLength ? copyState(doc.mode, context.state) : null;\n var highlighted = highlightLine(cm, line, context, true);\n\n if (resetState) {\n context.state = resetState;\n }\n\n line.styles = highlighted.styles;\n var oldCls = line.styleClasses,\n newCls = highlighted.classes;\n\n if (newCls) {\n line.styleClasses = newCls;\n } else if (oldCls) {\n line.styleClasses = null;\n }\n\n var ischange = !oldStyles || oldStyles.length != line.styles.length || oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass);\n\n for (var i = 0; !ischange && i < oldStyles.length; ++i) {\n ischange = oldStyles[i] != line.styles[i];\n }\n\n if (ischange) {\n changedLines.push(context.line);\n }\n\n line.stateAfter = context.save();\n context.nextLine();\n } else {\n if (line.text.length <= cm.options.maxHighlightLength) {\n processLine(cm, line.text, context);\n }\n\n line.stateAfter = context.line % 5 == 0 ? context.save() : null;\n context.nextLine();\n }\n\n if (+new Date() > end) {\n startWorker(cm, cm.options.workDelay);\n return true;\n }\n });\n doc.highlightFrontier = context.line;\n doc.modeFrontier = Math.max(doc.modeFrontier, context.line);\n\n if (changedLines.length) {\n runInOp(cm, function () {\n for (var i = 0; i < changedLines.length; i++) {\n regLineChange(cm, changedLines[i], \"text\");\n }\n });\n }\n } // DISPLAY DRAWING\n\n\n var DisplayUpdate = function DisplayUpdate(cm, viewport, force) {\n var display = cm.display;\n this.viewport = viewport; // Store some values that we'll need later (but don't want to force a relayout for)\n\n this.visible = visibleLines(display, cm.doc, viewport);\n this.editorIsHidden = !display.wrapper.offsetWidth;\n this.wrapperHeight = display.wrapper.clientHeight;\n this.wrapperWidth = display.wrapper.clientWidth;\n this.oldDisplayWidth = displayWidth(cm);\n this.force = force;\n this.dims = getDimensions(cm);\n this.events = [];\n };\n\n DisplayUpdate.prototype.signal = function (emitter, type) {\n if (hasHandler(emitter, type)) {\n this.events.push(arguments);\n }\n };\n\n DisplayUpdate.prototype.finish = function () {\n for (var i = 0; i < this.events.length; i++) {\n signal.apply(null, this.events[i]);\n }\n };\n\n function maybeClipScrollbars(cm) {\n var display = cm.display;\n\n if (!display.scrollbarsClipped && display.scroller.offsetWidth) {\n display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth;\n display.heightForcer.style.height = scrollGap(cm) + \"px\";\n display.sizer.style.marginBottom = -display.nativeBarWidth + \"px\";\n display.sizer.style.borderRightWidth = scrollGap(cm) + \"px\";\n display.scrollbarsClipped = true;\n }\n }\n\n function selectionSnapshot(cm) {\n if (cm.hasFocus()) {\n return null;\n }\n\n var active = activeElt();\n\n if (!active || !contains(cm.display.lineDiv, active)) {\n return null;\n }\n\n var result = {\n activeElt: active\n };\n\n if (window.getSelection) {\n var sel = window.getSelection();\n\n if (sel.anchorNode && sel.extend && contains(cm.display.lineDiv, sel.anchorNode)) {\n result.anchorNode = sel.anchorNode;\n result.anchorOffset = sel.anchorOffset;\n result.focusNode = sel.focusNode;\n result.focusOffset = sel.focusOffset;\n }\n }\n\n return result;\n }\n\n function restoreSelection(snapshot) {\n if (!snapshot || !snapshot.activeElt || snapshot.activeElt == activeElt()) {\n return;\n }\n\n snapshot.activeElt.focus();\n\n if (!/^(INPUT|TEXTAREA)$/.test(snapshot.activeElt.nodeName) && snapshot.anchorNode && contains(document.body, snapshot.anchorNode) && contains(document.body, snapshot.focusNode)) {\n var sel = window.getSelection(),\n range = document.createRange();\n range.setEnd(snapshot.anchorNode, snapshot.anchorOffset);\n range.collapse(false);\n sel.removeAllRanges();\n sel.addRange(range);\n sel.extend(snapshot.focusNode, snapshot.focusOffset);\n }\n } // Does the actual updating of the line display. Bails out\n // (returning false) when there is nothing to be done and forced is\n // false.\n\n\n function updateDisplayIfNeeded(cm, update) {\n var display = cm.display,\n doc = cm.doc;\n\n if (update.editorIsHidden) {\n resetView(cm);\n return false;\n } // Bail out if the visible area is already rendered and nothing changed.\n\n\n if (!update.force && update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo && (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) && display.renderedView == display.view && countDirtyView(cm) == 0) {\n return false;\n }\n\n if (maybeUpdateLineNumberWidth(cm)) {\n resetView(cm);\n update.dims = getDimensions(cm);\n } // Compute a suitable new viewport (from & to)\n\n\n var end = doc.first + doc.size;\n var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first);\n var to = Math.min(end, update.visible.to + cm.options.viewportMargin);\n\n if (display.viewFrom < from && from - display.viewFrom < 20) {\n from = Math.max(doc.first, display.viewFrom);\n }\n\n if (display.viewTo > to && display.viewTo - to < 20) {\n to = Math.min(end, display.viewTo);\n }\n\n if (sawCollapsedSpans) {\n from = visualLineNo(cm.doc, from);\n to = visualLineEndNo(cm.doc, to);\n }\n\n var different = from != display.viewFrom || to != display.viewTo || display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth;\n adjustView(cm, from, to);\n display.viewOffset = _heightAtLine(getLine(cm.doc, display.viewFrom)); // Position the mover div to align with the current scroll position\n\n cm.display.mover.style.top = display.viewOffset + \"px\";\n var toUpdate = countDirtyView(cm);\n\n if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view && (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo)) {\n return false;\n } // For big changes, we hide the enclosing element during the\n // update, since that speeds up the operations on most browsers.\n\n\n var selSnapshot = selectionSnapshot(cm);\n\n if (toUpdate > 4) {\n display.lineDiv.style.display = \"none\";\n }\n\n patchDisplay(cm, display.updateLineNumbers, update.dims);\n\n if (toUpdate > 4) {\n display.lineDiv.style.display = \"\";\n }\n\n display.renderedView = display.view; // There might have been a widget with a focused element that got\n // hidden or updated, if so re-focus it.\n\n restoreSelection(selSnapshot); // Prevent selection and cursors from interfering with the scroll\n // width and height.\n\n removeChildren(display.cursorDiv);\n removeChildren(display.selectionDiv);\n display.gutters.style.height = display.sizer.style.minHeight = 0;\n\n if (different) {\n display.lastWrapHeight = update.wrapperHeight;\n display.lastWrapWidth = update.wrapperWidth;\n startWorker(cm, 400);\n }\n\n display.updateLineNumbers = null;\n return true;\n }\n\n function postUpdateDisplay(cm, update) {\n var viewport = update.viewport;\n\n for (var first = true;; first = false) {\n if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) {\n // Clip forced viewport to actual scrollable area.\n if (viewport && viewport.top != null) {\n viewport = {\n top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)\n };\n } // Updated line heights might result in the drawn area not\n // actually covering the viewport. Keep looping until it does.\n\n\n update.visible = visibleLines(cm.display, cm.doc, viewport);\n\n if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo) {\n break;\n }\n } else if (first) {\n update.visible = visibleLines(cm.display, cm.doc, viewport);\n }\n\n if (!updateDisplayIfNeeded(cm, update)) {\n break;\n }\n\n updateHeightsInViewport(cm);\n var barMeasure = measureForScrollbars(cm);\n updateSelection(cm);\n updateScrollbars(cm, barMeasure);\n setDocumentHeight(cm, barMeasure);\n update.force = false;\n }\n\n update.signal(cm, \"update\", cm);\n\n if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) {\n update.signal(cm, \"viewportChange\", cm, cm.display.viewFrom, cm.display.viewTo);\n cm.display.reportedViewFrom = cm.display.viewFrom;\n cm.display.reportedViewTo = cm.display.viewTo;\n }\n }\n\n function updateDisplaySimple(cm, viewport) {\n var update = new DisplayUpdate(cm, viewport);\n\n if (updateDisplayIfNeeded(cm, update)) {\n updateHeightsInViewport(cm);\n postUpdateDisplay(cm, update);\n var barMeasure = measureForScrollbars(cm);\n updateSelection(cm);\n updateScrollbars(cm, barMeasure);\n setDocumentHeight(cm, barMeasure);\n update.finish();\n }\n } // Sync the actual display DOM structure with display.view, removing\n // nodes for lines that are no longer in view, and creating the ones\n // that are not there yet, and updating the ones that are out of\n // date.\n\n\n function patchDisplay(cm, updateNumbersFrom, dims) {\n var display = cm.display,\n lineNumbers = cm.options.lineNumbers;\n var container = display.lineDiv,\n cur = container.firstChild;\n\n function rm(node) {\n var next = node.nextSibling; // Works around a throw-scroll bug in OS X Webkit\n\n if (webkit && mac && cm.display.currentWheelTarget == node) {\n node.style.display = \"none\";\n } else {\n node.parentNode.removeChild(node);\n }\n\n return next;\n }\n\n var view = display.view,\n lineN = display.viewFrom; // Loop over the elements in the view, syncing cur (the DOM nodes\n // in display.lineDiv) with the view as we go.\n\n for (var i = 0; i < view.length; i++) {\n var lineView = view[i];\n if (lineView.hidden) ;else if (!lineView.node || lineView.node.parentNode != container) {\n // Not drawn yet\n var node = buildLineElement(cm, lineView, lineN, dims);\n container.insertBefore(node, cur);\n } else {\n // Already drawn\n while (cur != lineView.node) {\n cur = rm(cur);\n }\n\n var updateNumber = lineNumbers && updateNumbersFrom != null && updateNumbersFrom <= lineN && lineView.lineNumber;\n\n if (lineView.changes) {\n if (indexOf(lineView.changes, \"gutter\") > -1) {\n updateNumber = false;\n }\n\n updateLineForChanges(cm, lineView, lineN, dims);\n }\n\n if (updateNumber) {\n removeChildren(lineView.lineNumber);\n lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN)));\n }\n\n cur = lineView.node.nextSibling;\n }\n lineN += lineView.size;\n }\n\n while (cur) {\n cur = rm(cur);\n }\n }\n\n function updateGutterSpace(display) {\n var width = display.gutters.offsetWidth;\n display.sizer.style.marginLeft = width + \"px\"; // Send an event to consumers responding to changes in gutter width.\n\n signalLater(display, \"gutterChanged\", display);\n }\n\n function setDocumentHeight(cm, measure) {\n cm.display.sizer.style.minHeight = measure.docHeight + \"px\";\n cm.display.heightForcer.style.top = measure.docHeight + \"px\";\n cm.display.gutters.style.height = measure.docHeight + cm.display.barHeight + scrollGap(cm) + \"px\";\n } // Re-align line numbers and gutter marks to compensate for\n // horizontal scrolling.\n\n\n function alignHorizontally(cm) {\n var display = cm.display,\n view = display.view;\n\n if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) {\n return;\n }\n\n var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft;\n var gutterW = display.gutters.offsetWidth,\n left = comp + \"px\";\n\n for (var i = 0; i < view.length; i++) {\n if (!view[i].hidden) {\n if (cm.options.fixedGutter) {\n if (view[i].gutter) {\n view[i].gutter.style.left = left;\n }\n\n if (view[i].gutterBackground) {\n view[i].gutterBackground.style.left = left;\n }\n }\n\n var align = view[i].alignable;\n\n if (align) {\n for (var j = 0; j < align.length; j++) {\n align[j].style.left = left;\n }\n }\n }\n }\n\n if (cm.options.fixedGutter) {\n display.gutters.style.left = comp + gutterW + \"px\";\n }\n } // Used to ensure that the line number gutter is still the right\n // size for the current document size. Returns true when an update\n // is needed.\n\n\n function maybeUpdateLineNumberWidth(cm) {\n if (!cm.options.lineNumbers) {\n return false;\n }\n\n var doc = cm.doc,\n last = lineNumberFor(cm.options, doc.first + doc.size - 1),\n display = cm.display;\n\n if (last.length != display.lineNumChars) {\n var test = display.measure.appendChild(elt(\"div\", [elt(\"div\", last)], \"CodeMirror-linenumber CodeMirror-gutter-elt\"));\n var innerW = test.firstChild.offsetWidth,\n padding = test.offsetWidth - innerW;\n display.lineGutter.style.width = \"\";\n display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1;\n display.lineNumWidth = display.lineNumInnerWidth + padding;\n display.lineNumChars = display.lineNumInnerWidth ? last.length : -1;\n display.lineGutter.style.width = display.lineNumWidth + \"px\";\n updateGutterSpace(cm.display);\n return true;\n }\n\n return false;\n }\n\n function getGutters(gutters, lineNumbers) {\n var result = [],\n sawLineNumbers = false;\n\n for (var i = 0; i < gutters.length; i++) {\n var name = gutters[i],\n style = null;\n\n if (typeof name != \"string\") {\n style = name.style;\n name = name.className;\n }\n\n if (name == \"CodeMirror-linenumbers\") {\n if (!lineNumbers) {\n continue;\n } else {\n sawLineNumbers = true;\n }\n }\n\n result.push({\n className: name,\n style: style\n });\n }\n\n if (lineNumbers && !sawLineNumbers) {\n result.push({\n className: \"CodeMirror-linenumbers\",\n style: null\n });\n }\n\n return result;\n } // Rebuild the gutter elements, ensure the margin to the left of the\n // code matches their width.\n\n\n function renderGutters(display) {\n var gutters = display.gutters,\n specs = display.gutterSpecs;\n removeChildren(gutters);\n display.lineGutter = null;\n\n for (var i = 0; i < specs.length; ++i) {\n var ref = specs[i];\n var className = ref.className;\n var style = ref.style;\n var gElt = gutters.appendChild(elt(\"div\", null, \"CodeMirror-gutter \" + className));\n\n if (style) {\n gElt.style.cssText = style;\n }\n\n if (className == \"CodeMirror-linenumbers\") {\n display.lineGutter = gElt;\n gElt.style.width = (display.lineNumWidth || 1) + \"px\";\n }\n }\n\n gutters.style.display = specs.length ? \"\" : \"none\";\n updateGutterSpace(display);\n }\n\n function updateGutters(cm) {\n renderGutters(cm.display);\n regChange(cm);\n alignHorizontally(cm);\n } // The display handles the DOM integration, both for input reading\n // and content drawing. It holds references to DOM nodes and\n // display-related state.\n\n\n function Display(place, doc, input, options) {\n var d = this;\n this.input = input; // Covers bottom-right square when both scrollbars are present.\n\n d.scrollbarFiller = elt(\"div\", null, \"CodeMirror-scrollbar-filler\");\n d.scrollbarFiller.setAttribute(\"cm-not-content\", \"true\"); // Covers bottom of gutter when coverGutterNextToScrollbar is on\n // and h scrollbar is present.\n\n d.gutterFiller = elt(\"div\", null, \"CodeMirror-gutter-filler\");\n d.gutterFiller.setAttribute(\"cm-not-content\", \"true\"); // Will contain the actual code, positioned to cover the viewport.\n\n d.lineDiv = eltP(\"div\", null, \"CodeMirror-code\"); // Elements are added to these to represent selection and cursors.\n\n d.selectionDiv = elt(\"div\", null, null, \"position: relative; z-index: 1\");\n d.cursorDiv = elt(\"div\", null, \"CodeMirror-cursors\"); // A visibility: hidden element used to find the size of things.\n\n d.measure = elt(\"div\", null, \"CodeMirror-measure\"); // When lines outside of the viewport are measured, they are drawn in this.\n\n d.lineMeasure = elt(\"div\", null, \"CodeMirror-measure\"); // Wraps everything that needs to exist inside the vertically-padded coordinate system\n\n d.lineSpace = eltP(\"div\", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv], null, \"position: relative; outline: none\");\n var lines = eltP(\"div\", [d.lineSpace], \"CodeMirror-lines\"); // Moved around its parent to cover visible view.\n\n d.mover = elt(\"div\", [lines], null, \"position: relative\"); // Set to the height of the document, allowing scrolling.\n\n d.sizer = elt(\"div\", [d.mover], \"CodeMirror-sizer\");\n d.sizerWidth = null; // Behavior of elts with overflow: auto and padding is\n // inconsistent across browsers. This is used to ensure the\n // scrollable area is big enough.\n\n d.heightForcer = elt(\"div\", null, null, \"position: absolute; height: \" + scrollerGap + \"px; width: 1px;\"); // Will contain the gutters, if any.\n\n d.gutters = elt(\"div\", null, \"CodeMirror-gutters\");\n d.lineGutter = null; // Actual scrollable element.\n\n d.scroller = elt(\"div\", [d.sizer, d.heightForcer, d.gutters], \"CodeMirror-scroll\");\n d.scroller.setAttribute(\"tabIndex\", \"-1\"); // The element in which the editor lives.\n\n d.wrapper = elt(\"div\", [d.scrollbarFiller, d.gutterFiller, d.scroller], \"CodeMirror\"); // This attribute is respected by automatic translation systems such as Google Translate,\n // and may also be respected by tools used by human translators.\n\n d.wrapper.setAttribute('translate', 'no'); // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported)\n\n if (ie && ie_version < 8) {\n d.gutters.style.zIndex = -1;\n d.scroller.style.paddingRight = 0;\n }\n\n if (!webkit && !(gecko && mobile)) {\n d.scroller.draggable = true;\n }\n\n if (place) {\n if (place.appendChild) {\n place.appendChild(d.wrapper);\n } else {\n place(d.wrapper);\n }\n } // Current rendered range (may be bigger than the view window).\n\n\n d.viewFrom = d.viewTo = doc.first;\n d.reportedViewFrom = d.reportedViewTo = doc.first; // Information about the rendered lines.\n\n d.view = [];\n d.renderedView = null; // Holds info about a single rendered line when it was rendered\n // for measurement, while not in view.\n\n d.externalMeasured = null; // Empty space (in pixels) above the view\n\n d.viewOffset = 0;\n d.lastWrapHeight = d.lastWrapWidth = 0;\n d.updateLineNumbers = null;\n d.nativeBarWidth = d.barHeight = d.barWidth = 0;\n d.scrollbarsClipped = false; // Used to only resize the line number gutter when necessary (when\n // the amount of lines crosses a boundary that makes its width change)\n\n d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null; // Set to true when a non-horizontal-scrolling line widget is\n // added. As an optimization, line widget aligning is skipped when\n // this is false.\n\n d.alignWidgets = false;\n d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null; // Tracks the maximum line length so that the horizontal scrollbar\n // can be kept static when scrolling.\n\n d.maxLine = null;\n d.maxLineLength = 0;\n d.maxLineChanged = false; // Used for measuring wheel scrolling granularity\n\n d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null; // True when shift is held down.\n\n d.shift = false; // Used to track whether anything happened since the context menu\n // was opened.\n\n d.selForContextMenu = null;\n d.activeTouch = null;\n d.gutterSpecs = getGutters(options.gutters, options.lineNumbers);\n renderGutters(d);\n input.init(d);\n } // Since the delta values reported on mouse wheel events are\n // unstandardized between browsers and even browser versions, and\n // generally horribly unpredictable, this code starts by measuring\n // the scroll effect that the first few mouse wheel events have,\n // and, from that, detects the way it can convert deltas to pixel\n // offsets afterwards.\n //\n // The reason we want to know the amount a wheel event will scroll\n // is that it gives us a chance to update the display before the\n // actual scrolling happens, reducing flickering.\n\n\n var wheelSamples = 0,\n wheelPixelsPerUnit = null; // Fill in a browser-detected starting value on browsers where we\n // know one. These don't have to be accurate -- the result of them\n // being wrong would just be a slight flicker on the first wheel\n // scroll (if it is large enough).\n\n if (ie) {\n wheelPixelsPerUnit = -.53;\n } else if (gecko) {\n wheelPixelsPerUnit = 15;\n } else if (chrome) {\n wheelPixelsPerUnit = -.7;\n } else if (safari) {\n wheelPixelsPerUnit = -1 / 3;\n }\n\n function wheelEventDelta(e) {\n var dx = e.wheelDeltaX,\n dy = e.wheelDeltaY;\n\n if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) {\n dx = e.detail;\n }\n\n if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) {\n dy = e.detail;\n } else if (dy == null) {\n dy = e.wheelDelta;\n }\n\n return {\n x: dx,\n y: dy\n };\n }\n\n function wheelEventPixels(e) {\n var delta = wheelEventDelta(e);\n delta.x *= wheelPixelsPerUnit;\n delta.y *= wheelPixelsPerUnit;\n return delta;\n }\n\n function onScrollWheel(cm, e) {\n var delta = wheelEventDelta(e),\n dx = delta.x,\n dy = delta.y;\n var display = cm.display,\n scroll = display.scroller; // Quit if there's nothing to scroll here\n\n var canScrollX = scroll.scrollWidth > scroll.clientWidth;\n var canScrollY = scroll.scrollHeight > scroll.clientHeight;\n\n if (!(dx && canScrollX || dy && canScrollY)) {\n return;\n } // Webkit browsers on OS X abort momentum scrolls when the target\n // of the scroll event is removed from the scrollable element.\n // This hack (see related code in patchDisplay) makes sure the\n // element is kept around.\n\n\n if (dy && mac && webkit) {\n outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) {\n for (var i = 0; i < view.length; i++) {\n if (view[i].node == cur) {\n cm.display.currentWheelTarget = cur;\n break outer;\n }\n }\n }\n } // On some browsers, horizontal scrolling will cause redraws to\n // happen before the gutter has been realigned, causing it to\n // wriggle around in a most unseemly way. When we have an\n // estimated pixels/delta value, we just handle horizontal\n // scrolling entirely here. It'll be slightly off from native, but\n // better than glitching out.\n\n\n if (dx && !gecko && !presto && wheelPixelsPerUnit != null) {\n if (dy && canScrollY) {\n updateScrollTop(cm, Math.max(0, scroll.scrollTop + dy * wheelPixelsPerUnit));\n }\n\n setScrollLeft(cm, Math.max(0, scroll.scrollLeft + dx * wheelPixelsPerUnit)); // Only prevent default scrolling if vertical scrolling is\n // actually possible. Otherwise, it causes vertical scroll\n // jitter on OSX trackpads when deltaX is small and deltaY\n // is large (issue #3579)\n\n if (!dy || dy && canScrollY) {\n e_preventDefault(e);\n }\n\n display.wheelStartX = null; // Abort measurement, if in progress\n\n return;\n } // 'Project' the visible viewport to cover the area that is being\n // scrolled into view (if we know enough to estimate it).\n\n\n if (dy && wheelPixelsPerUnit != null) {\n var pixels = dy * wheelPixelsPerUnit;\n var top = cm.doc.scrollTop,\n bot = top + display.wrapper.clientHeight;\n\n if (pixels < 0) {\n top = Math.max(0, top + pixels - 50);\n } else {\n bot = Math.min(cm.doc.height, bot + pixels + 50);\n }\n\n updateDisplaySimple(cm, {\n top: top,\n bottom: bot\n });\n }\n\n if (wheelSamples < 20) {\n if (display.wheelStartX == null) {\n display.wheelStartX = scroll.scrollLeft;\n display.wheelStartY = scroll.scrollTop;\n display.wheelDX = dx;\n display.wheelDY = dy;\n setTimeout(function () {\n if (display.wheelStartX == null) {\n return;\n }\n\n var movedX = scroll.scrollLeft - display.wheelStartX;\n var movedY = scroll.scrollTop - display.wheelStartY;\n var sample = movedY && display.wheelDY && movedY / display.wheelDY || movedX && display.wheelDX && movedX / display.wheelDX;\n display.wheelStartX = display.wheelStartY = null;\n\n if (!sample) {\n return;\n }\n\n wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1);\n ++wheelSamples;\n }, 200);\n } else {\n display.wheelDX += dx;\n display.wheelDY += dy;\n }\n }\n } // Selection objects are immutable. A new one is created every time\n // the selection changes. A selection is one or more non-overlapping\n // (and non-touching) ranges, sorted, and an integer that indicates\n // which one is the primary selection (the one that's scrolled into\n // view, that getCursor returns, etc).\n\n\n var Selection = function Selection(ranges, primIndex) {\n this.ranges = ranges;\n this.primIndex = primIndex;\n };\n\n Selection.prototype.primary = function () {\n return this.ranges[this.primIndex];\n };\n\n Selection.prototype.equals = function (other) {\n if (other == this) {\n return true;\n }\n\n if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) {\n return false;\n }\n\n for (var i = 0; i < this.ranges.length; i++) {\n var here = this.ranges[i],\n there = other.ranges[i];\n\n if (!equalCursorPos(here.anchor, there.anchor) || !equalCursorPos(here.head, there.head)) {\n return false;\n }\n }\n\n return true;\n };\n\n Selection.prototype.deepCopy = function () {\n var out = [];\n\n for (var i = 0; i < this.ranges.length; i++) {\n out[i] = new Range(copyPos(this.ranges[i].anchor), copyPos(this.ranges[i].head));\n }\n\n return new Selection(out, this.primIndex);\n };\n\n Selection.prototype.somethingSelected = function () {\n for (var i = 0; i < this.ranges.length; i++) {\n if (!this.ranges[i].empty()) {\n return true;\n }\n }\n\n return false;\n };\n\n Selection.prototype.contains = function (pos, end) {\n if (!end) {\n end = pos;\n }\n\n for (var i = 0; i < this.ranges.length; i++) {\n var range = this.ranges[i];\n\n if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0) {\n return i;\n }\n }\n\n return -1;\n };\n\n var Range = function Range(anchor, head) {\n this.anchor = anchor;\n this.head = head;\n };\n\n Range.prototype.from = function () {\n return minPos(this.anchor, this.head);\n };\n\n Range.prototype.to = function () {\n return maxPos(this.anchor, this.head);\n };\n\n Range.prototype.empty = function () {\n return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch;\n }; // Take an unsorted, potentially overlapping set of ranges, and\n // build a selection out of it. 'Consumes' ranges array (modifying\n // it).\n\n\n function normalizeSelection(cm, ranges, primIndex) {\n var mayTouch = cm && cm.options.selectionsMayTouch;\n var prim = ranges[primIndex];\n ranges.sort(function (a, b) {\n return cmp(a.from(), b.from());\n });\n primIndex = indexOf(ranges, prim);\n\n for (var i = 1; i < ranges.length; i++) {\n var cur = ranges[i],\n prev = ranges[i - 1];\n var diff = cmp(prev.to(), cur.from());\n\n if (mayTouch && !cur.empty() ? diff > 0 : diff >= 0) {\n var from = minPos(prev.from(), cur.from()),\n to = maxPos(prev.to(), cur.to());\n var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head;\n\n if (i <= primIndex) {\n --primIndex;\n }\n\n ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to));\n }\n }\n\n return new Selection(ranges, primIndex);\n }\n\n function simpleSelection(anchor, head) {\n return new Selection([new Range(anchor, head || anchor)], 0);\n } // Compute the position of the end of a change (its 'to' property\n // refers to the pre-change end).\n\n\n function changeEnd(change) {\n if (!change.text) {\n return change.to;\n }\n\n return Pos(change.from.line + change.text.length - 1, lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0));\n } // Adjust a position to refer to the post-change position of the\n // same text, or the end of the change if the change covers it.\n\n\n function adjustForChange(pos, change) {\n if (cmp(pos, change.from) < 0) {\n return pos;\n }\n\n if (cmp(pos, change.to) <= 0) {\n return changeEnd(change);\n }\n\n var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1,\n ch = pos.ch;\n\n if (pos.line == change.to.line) {\n ch += changeEnd(change).ch - change.to.ch;\n }\n\n return Pos(line, ch);\n }\n\n function computeSelAfterChange(doc, change) {\n var out = [];\n\n for (var i = 0; i < doc.sel.ranges.length; i++) {\n var range = doc.sel.ranges[i];\n out.push(new Range(adjustForChange(range.anchor, change), adjustForChange(range.head, change)));\n }\n\n return normalizeSelection(doc.cm, out, doc.sel.primIndex);\n }\n\n function offsetPos(pos, old, nw) {\n if (pos.line == old.line) {\n return Pos(nw.line, pos.ch - old.ch + nw.ch);\n } else {\n return Pos(nw.line + (pos.line - old.line), pos.ch);\n }\n } // Used by replaceSelections to allow moving the selection to the\n // start or around the replaced test. Hint may be \"start\" or \"around\".\n\n\n function computeReplacedSel(doc, changes, hint) {\n var out = [];\n var oldPrev = Pos(doc.first, 0),\n newPrev = oldPrev;\n\n for (var i = 0; i < changes.length; i++) {\n var change = changes[i];\n var from = offsetPos(change.from, oldPrev, newPrev);\n var to = offsetPos(changeEnd(change), oldPrev, newPrev);\n oldPrev = change.to;\n newPrev = to;\n\n if (hint == \"around\") {\n var range = doc.sel.ranges[i],\n inv = cmp(range.head, range.anchor) < 0;\n out[i] = new Range(inv ? to : from, inv ? from : to);\n } else {\n out[i] = new Range(from, from);\n }\n }\n\n return new Selection(out, doc.sel.primIndex);\n } // Used to get the editor into a consistent state again when options change.\n\n\n function loadMode(cm) {\n cm.doc.mode = getMode(cm.options, cm.doc.modeOption);\n resetModeState(cm);\n }\n\n function resetModeState(cm) {\n cm.doc.iter(function (line) {\n if (line.stateAfter) {\n line.stateAfter = null;\n }\n\n if (line.styles) {\n line.styles = null;\n }\n });\n cm.doc.modeFrontier = cm.doc.highlightFrontier = cm.doc.first;\n startWorker(cm, 100);\n cm.state.modeGen++;\n\n if (cm.curOp) {\n regChange(cm);\n }\n } // DOCUMENT DATA STRUCTURE\n // By default, updates that start and end at the beginning of a line\n // are treated specially, in order to make the association of line\n // widgets and marker elements with the text behave more intuitive.\n\n\n function isWholeLineUpdate(doc, change) {\n return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == \"\" && (!doc.cm || doc.cm.options.wholeLineUpdateBefore);\n } // Perform a change on the document data structure.\n\n\n function updateDoc(doc, change, markedSpans, estimateHeight) {\n function spansFor(n) {\n return markedSpans ? markedSpans[n] : null;\n }\n\n function update(line, text, spans) {\n updateLine(line, text, spans, estimateHeight);\n signalLater(line, \"change\", line, change);\n }\n\n function linesFor(start, end) {\n var result = [];\n\n for (var i = start; i < end; ++i) {\n result.push(new Line(text[i], spansFor(i), estimateHeight));\n }\n\n return result;\n }\n\n var from = change.from,\n to = change.to,\n text = change.text;\n var firstLine = getLine(doc, from.line),\n lastLine = getLine(doc, to.line);\n var lastText = lst(text),\n lastSpans = spansFor(text.length - 1),\n nlines = to.line - from.line; // Adjust the line structure\n\n if (change.full) {\n doc.insert(0, linesFor(0, text.length));\n doc.remove(text.length, doc.size - text.length);\n } else if (isWholeLineUpdate(doc, change)) {\n // This is a whole-line replace. Treated specially to make\n // sure line objects move the way they are supposed to.\n var added = linesFor(0, text.length - 1);\n update(lastLine, lastLine.text, lastSpans);\n\n if (nlines) {\n doc.remove(from.line, nlines);\n }\n\n if (added.length) {\n doc.insert(from.line, added);\n }\n } else if (firstLine == lastLine) {\n if (text.length == 1) {\n update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans);\n } else {\n var added$1 = linesFor(1, text.length - 1);\n added$1.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight));\n update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n doc.insert(from.line + 1, added$1);\n }\n } else if (text.length == 1) {\n update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0));\n doc.remove(from.line + 1, nlines);\n } else {\n update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans);\n var added$2 = linesFor(1, text.length - 1);\n\n if (nlines > 1) {\n doc.remove(from.line + 1, nlines - 1);\n }\n\n doc.insert(from.line + 1, added$2);\n }\n\n signalLater(doc, \"change\", doc, change);\n } // Call f for all linked documents.\n\n\n function linkedDocs(doc, f, sharedHistOnly) {\n function propagate(doc, skip, sharedHist) {\n if (doc.linked) {\n for (var i = 0; i < doc.linked.length; ++i) {\n var rel = doc.linked[i];\n\n if (rel.doc == skip) {\n continue;\n }\n\n var shared = sharedHist && rel.sharedHist;\n\n if (sharedHistOnly && !shared) {\n continue;\n }\n\n f(rel.doc, shared);\n propagate(rel.doc, doc, shared);\n }\n }\n }\n\n propagate(doc, null, true);\n } // Attach a document to an editor.\n\n\n function attachDoc(cm, doc) {\n if (doc.cm) {\n throw new Error(\"This document is already in use.\");\n }\n\n cm.doc = doc;\n doc.cm = cm;\n estimateLineHeights(cm);\n loadMode(cm);\n setDirectionClass(cm);\n cm.options.direction = doc.direction;\n\n if (!cm.options.lineWrapping) {\n findMaxLine(cm);\n }\n\n cm.options.mode = doc.modeOption;\n regChange(cm);\n }\n\n function setDirectionClass(cm) {\n (cm.doc.direction == \"rtl\" ? addClass : rmClass)(cm.display.lineDiv, \"CodeMirror-rtl\");\n }\n\n function directionChanged(cm) {\n runInOp(cm, function () {\n setDirectionClass(cm);\n regChange(cm);\n });\n }\n\n function History(prev) {\n // Arrays of change events and selections. Doing something adds an\n // event to done and clears undo. Undoing moves events from done\n // to undone, redoing moves them in the other direction.\n this.done = [];\n this.undone = [];\n this.undoDepth = prev ? prev.undoDepth : Infinity; // Used to track when changes can be merged into a single undo\n // event\n\n this.lastModTime = this.lastSelTime = 0;\n this.lastOp = this.lastSelOp = null;\n this.lastOrigin = this.lastSelOrigin = null; // Used by the isClean() method\n\n this.generation = this.maxGeneration = prev ? prev.maxGeneration : 1;\n } // Create a history change event from an updateDoc-style change\n // object.\n\n\n function historyChangeFromChange(doc, change) {\n var histChange = {\n from: copyPos(change.from),\n to: changeEnd(change),\n text: getBetween(doc, change.from, change.to)\n };\n attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);\n linkedDocs(doc, function (doc) {\n return attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);\n }, true);\n return histChange;\n } // Pop all selection events off the end of a history array. Stop at\n // a change event.\n\n\n function clearSelectionEvents(array) {\n while (array.length) {\n var last = lst(array);\n\n if (last.ranges) {\n array.pop();\n } else {\n break;\n }\n }\n } // Find the top change event in the history. Pop off selection\n // events that are in the way.\n\n\n function lastChangeEvent(hist, force) {\n if (force) {\n clearSelectionEvents(hist.done);\n return lst(hist.done);\n } else if (hist.done.length && !lst(hist.done).ranges) {\n return lst(hist.done);\n } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) {\n hist.done.pop();\n return lst(hist.done);\n }\n } // Register a change in the history. Merges changes that are within\n // a single operation, or are close together with an origin that\n // allows merging (starting with \"+\") into a single event.\n\n\n function addChangeToHistory(doc, change, selAfter, opId) {\n var hist = doc.history;\n hist.undone.length = 0;\n var time = +new Date(),\n cur;\n var last;\n\n if ((hist.lastOp == opId || hist.lastOrigin == change.origin && change.origin && (change.origin.charAt(0) == \"+\" && hist.lastModTime > time - (doc.cm ? doc.cm.options.historyEventDelay : 500) || change.origin.charAt(0) == \"*\")) && (cur = lastChangeEvent(hist, hist.lastOp == opId))) {\n // Merge this change into the last event\n last = lst(cur.changes);\n\n if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) {\n // Optimized case for simple insertion -- don't want to add\n // new changesets for every character typed\n last.to = changeEnd(change);\n } else {\n // Add new sub-event\n cur.changes.push(historyChangeFromChange(doc, change));\n }\n } else {\n // Can not be merged, start a new event.\n var before = lst(hist.done);\n\n if (!before || !before.ranges) {\n pushSelectionToHistory(doc.sel, hist.done);\n }\n\n cur = {\n changes: [historyChangeFromChange(doc, change)],\n generation: hist.generation\n };\n hist.done.push(cur);\n\n while (hist.done.length > hist.undoDepth) {\n hist.done.shift();\n\n if (!hist.done[0].ranges) {\n hist.done.shift();\n }\n }\n }\n\n hist.done.push(selAfter);\n hist.generation = ++hist.maxGeneration;\n hist.lastModTime = hist.lastSelTime = time;\n hist.lastOp = hist.lastSelOp = opId;\n hist.lastOrigin = hist.lastSelOrigin = change.origin;\n\n if (!last) {\n signal(doc, \"historyAdded\");\n }\n }\n\n function selectionEventCanBeMerged(doc, origin, prev, sel) {\n var ch = origin.charAt(0);\n return ch == \"*\" || ch == \"+\" && prev.ranges.length == sel.ranges.length && prev.somethingSelected() == sel.somethingSelected() && new Date() - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500);\n } // Called whenever the selection changes, sets the new selection as\n // the pending selection in the history, and pushes the old pending\n // selection into the 'done' array when it was significantly\n // different (in number of selected ranges, emptiness, or time).\n\n\n function addSelectionToHistory(doc, sel, opId, options) {\n var hist = doc.history,\n origin = options && options.origin; // A new event is started when the previous origin does not match\n // the current, or the origins don't allow matching. Origins\n // starting with * are always merged, those starting with + are\n // merged when similar and close together in time.\n\n if (opId == hist.lastSelOp || origin && hist.lastSelOrigin == origin && (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin || selectionEventCanBeMerged(doc, origin, lst(hist.done), sel))) {\n hist.done[hist.done.length - 1] = sel;\n } else {\n pushSelectionToHistory(sel, hist.done);\n }\n\n hist.lastSelTime = +new Date();\n hist.lastSelOrigin = origin;\n hist.lastSelOp = opId;\n\n if (options && options.clearRedo !== false) {\n clearSelectionEvents(hist.undone);\n }\n }\n\n function pushSelectionToHistory(sel, dest) {\n var top = lst(dest);\n\n if (!(top && top.ranges && top.equals(sel))) {\n dest.push(sel);\n }\n } // Used to store marked span information in the history.\n\n\n function attachLocalSpans(doc, change, from, to) {\n var existing = change[\"spans_\" + doc.id],\n n = 0;\n doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function (line) {\n if (line.markedSpans) {\n (existing || (existing = change[\"spans_\" + doc.id] = {}))[n] = line.markedSpans;\n }\n\n ++n;\n });\n } // When un/re-doing restores text containing marked spans, those\n // that have been explicitly cleared should not be restored.\n\n\n function removeClearedSpans(spans) {\n if (!spans) {\n return null;\n }\n\n var out;\n\n for (var i = 0; i < spans.length; ++i) {\n if (spans[i].marker.explicitlyCleared) {\n if (!out) {\n out = spans.slice(0, i);\n }\n } else if (out) {\n out.push(spans[i]);\n }\n }\n\n return !out ? spans : out.length ? out : null;\n } // Retrieve and filter the old marked spans stored in a change event.\n\n\n function getOldSpans(doc, change) {\n var found = change[\"spans_\" + doc.id];\n\n if (!found) {\n return null;\n }\n\n var nw = [];\n\n for (var i = 0; i < change.text.length; ++i) {\n nw.push(removeClearedSpans(found[i]));\n }\n\n return nw;\n } // Used for un/re-doing changes from the history. Combines the\n // result of computing the existing spans with the set of spans that\n // existed in the history (so that deleting around a span and then\n // undoing brings back the span).\n\n\n function mergeOldSpans(doc, change) {\n var old = getOldSpans(doc, change);\n var stretched = stretchSpansOverChange(doc, change);\n\n if (!old) {\n return stretched;\n }\n\n if (!stretched) {\n return old;\n }\n\n for (var i = 0; i < old.length; ++i) {\n var oldCur = old[i],\n stretchCur = stretched[i];\n\n if (oldCur && stretchCur) {\n spans: for (var j = 0; j < stretchCur.length; ++j) {\n var span = stretchCur[j];\n\n for (var k = 0; k < oldCur.length; ++k) {\n if (oldCur[k].marker == span.marker) {\n continue spans;\n }\n }\n\n oldCur.push(span);\n }\n } else if (stretchCur) {\n old[i] = stretchCur;\n }\n }\n\n return old;\n } // Used both to provide a JSON-safe object in .getHistory, and, when\n // detaching a document, to split the history in two\n\n\n function copyHistoryArray(events, newGroup, instantiateSel) {\n var copy = [];\n\n for (var i = 0; i < events.length; ++i) {\n var event = events[i];\n\n if (event.ranges) {\n copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event);\n continue;\n }\n\n var changes = event.changes,\n newChanges = [];\n copy.push({\n changes: newChanges\n });\n\n for (var j = 0; j < changes.length; ++j) {\n var change = changes[j],\n m = void 0;\n newChanges.push({\n from: change.from,\n to: change.to,\n text: change.text\n });\n\n if (newGroup) {\n for (var prop in change) {\n if (m = prop.match(/^spans_(\\d+)$/)) {\n if (indexOf(newGroup, Number(m[1])) > -1) {\n lst(newChanges)[prop] = change[prop];\n delete change[prop];\n }\n }\n }\n }\n }\n }\n\n return copy;\n } // The 'scroll' parameter given to many of these indicated whether\n // the new cursor position should be scrolled into view after\n // modifying the selection.\n // If shift is held or the extend flag is set, extends a range to\n // include a given position (and optionally a second position).\n // Otherwise, simply returns the range between the given positions.\n // Used for cursor motion and such.\n\n\n function extendRange(range, head, other, extend) {\n if (extend) {\n var anchor = range.anchor;\n\n if (other) {\n var posBefore = cmp(head, anchor) < 0;\n\n if (posBefore != cmp(other, anchor) < 0) {\n anchor = head;\n head = other;\n } else if (posBefore != cmp(head, other) < 0) {\n head = other;\n }\n }\n\n return new Range(anchor, head);\n } else {\n return new Range(other || head, head);\n }\n } // Extend the primary selection range, discard the rest.\n\n\n function extendSelection(doc, head, other, options, extend) {\n if (extend == null) {\n extend = doc.cm && (doc.cm.display.shift || doc.extend);\n }\n\n setSelection(doc, new Selection([extendRange(doc.sel.primary(), head, other, extend)], 0), options);\n } // Extend all selections (pos is an array of selections with length\n // equal the number of selections)\n\n\n function extendSelections(doc, heads, options) {\n var out = [];\n var extend = doc.cm && (doc.cm.display.shift || doc.extend);\n\n for (var i = 0; i < doc.sel.ranges.length; i++) {\n out[i] = extendRange(doc.sel.ranges[i], heads[i], null, extend);\n }\n\n var newSel = normalizeSelection(doc.cm, out, doc.sel.primIndex);\n setSelection(doc, newSel, options);\n } // Updates a single range in the selection.\n\n\n function replaceOneSelection(doc, i, range, options) {\n var ranges = doc.sel.ranges.slice(0);\n ranges[i] = range;\n setSelection(doc, normalizeSelection(doc.cm, ranges, doc.sel.primIndex), options);\n } // Reset the selection to a single range.\n\n\n function setSimpleSelection(doc, anchor, head, options) {\n setSelection(doc, simpleSelection(anchor, head), options);\n } // Give beforeSelectionChange handlers a change to influence a\n // selection update.\n\n\n function filterSelectionChange(doc, sel, options) {\n var obj = {\n ranges: sel.ranges,\n update: function update(ranges) {\n this.ranges = [];\n\n for (var i = 0; i < ranges.length; i++) {\n this.ranges[i] = new Range(_clipPos(doc, ranges[i].anchor), _clipPos(doc, ranges[i].head));\n }\n },\n origin: options && options.origin\n };\n signal(doc, \"beforeSelectionChange\", doc, obj);\n\n if (doc.cm) {\n signal(doc.cm, \"beforeSelectionChange\", doc.cm, obj);\n }\n\n if (obj.ranges != sel.ranges) {\n return normalizeSelection(doc.cm, obj.ranges, obj.ranges.length - 1);\n } else {\n return sel;\n }\n }\n\n function setSelectionReplaceHistory(doc, sel, options) {\n var done = doc.history.done,\n last = lst(done);\n\n if (last && last.ranges) {\n done[done.length - 1] = sel;\n setSelectionNoUndo(doc, sel, options);\n } else {\n setSelection(doc, sel, options);\n }\n } // Set a new selection.\n\n\n function setSelection(doc, sel, options) {\n setSelectionNoUndo(doc, sel, options);\n addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options);\n }\n\n function setSelectionNoUndo(doc, sel, options) {\n if (hasHandler(doc, \"beforeSelectionChange\") || doc.cm && hasHandler(doc.cm, \"beforeSelectionChange\")) {\n sel = filterSelectionChange(doc, sel, options);\n }\n\n var bias = options && options.bias || (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1);\n setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true));\n\n if (!(options && options.scroll === false) && doc.cm && doc.cm.getOption(\"readOnly\") != \"nocursor\") {\n ensureCursorVisible(doc.cm);\n }\n }\n\n function setSelectionInner(doc, sel) {\n if (sel.equals(doc.sel)) {\n return;\n }\n\n doc.sel = sel;\n\n if (doc.cm) {\n doc.cm.curOp.updateInput = 1;\n doc.cm.curOp.selectionChanged = true;\n signalCursorActivity(doc.cm);\n }\n\n signalLater(doc, \"cursorActivity\", doc);\n } // Verify that the selection does not partially select any atomic\n // marked ranges.\n\n\n function reCheckSelection(doc) {\n setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false));\n } // Return a selection that does not partially select any atomic\n // ranges.\n\n\n function skipAtomicInSelection(doc, sel, bias, mayClear) {\n var out;\n\n for (var i = 0; i < sel.ranges.length; i++) {\n var range = sel.ranges[i];\n var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i];\n var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear);\n var newHead = skipAtomic(doc, range.head, old && old.head, bias, mayClear);\n\n if (out || newAnchor != range.anchor || newHead != range.head) {\n if (!out) {\n out = sel.ranges.slice(0, i);\n }\n\n out[i] = new Range(newAnchor, newHead);\n }\n }\n\n return out ? normalizeSelection(doc.cm, out, sel.primIndex) : sel;\n }\n\n function skipAtomicInner(doc, pos, oldPos, dir, mayClear) {\n var line = getLine(doc, pos.line);\n\n if (line.markedSpans) {\n for (var i = 0; i < line.markedSpans.length; ++i) {\n var sp = line.markedSpans[i],\n m = sp.marker; // Determine if we should prevent the cursor being placed to the left/right of an atomic marker\n // Historically this was determined using the inclusiveLeft/Right option, but the new way to control it\n // is with selectLeft/Right\n\n var preventCursorLeft = \"selectLeft\" in m ? !m.selectLeft : m.inclusiveLeft;\n var preventCursorRight = \"selectRight\" in m ? !m.selectRight : m.inclusiveRight;\n\n if ((sp.from == null || (preventCursorLeft ? sp.from <= pos.ch : sp.from < pos.ch)) && (sp.to == null || (preventCursorRight ? sp.to >= pos.ch : sp.to > pos.ch))) {\n if (mayClear) {\n signal(m, \"beforeCursorEnter\");\n\n if (m.explicitlyCleared) {\n if (!line.markedSpans) {\n break;\n } else {\n --i;\n continue;\n }\n }\n }\n\n if (!m.atomic) {\n continue;\n }\n\n if (oldPos) {\n var near = m.find(dir < 0 ? 1 : -1),\n diff = void 0;\n\n if (dir < 0 ? preventCursorRight : preventCursorLeft) {\n near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null);\n }\n\n if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0)) {\n return skipAtomicInner(doc, near, pos, dir, mayClear);\n }\n }\n\n var far = m.find(dir < 0 ? -1 : 1);\n\n if (dir < 0 ? preventCursorLeft : preventCursorRight) {\n far = movePos(doc, far, dir, far.line == pos.line ? line : null);\n }\n\n return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null;\n }\n }\n }\n\n return pos;\n } // Ensure a given position is not inside an atomic range.\n\n\n function skipAtomic(doc, pos, oldPos, bias, mayClear) {\n var dir = bias || 1;\n var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) || !mayClear && skipAtomicInner(doc, pos, oldPos, dir, true) || skipAtomicInner(doc, pos, oldPos, -dir, mayClear) || !mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true);\n\n if (!found) {\n doc.cantEdit = true;\n return Pos(doc.first, 0);\n }\n\n return found;\n }\n\n function movePos(doc, pos, dir, line) {\n if (dir < 0 && pos.ch == 0) {\n if (pos.line > doc.first) {\n return _clipPos(doc, Pos(pos.line - 1));\n } else {\n return null;\n }\n } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) {\n if (pos.line < doc.first + doc.size - 1) {\n return Pos(pos.line + 1, 0);\n } else {\n return null;\n }\n } else {\n return new Pos(pos.line, pos.ch + dir);\n }\n }\n\n function selectAll(cm) {\n cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll);\n } // UPDATING\n // Allow \"beforeChange\" event handlers to influence a change\n\n\n function filterChange(doc, change, update) {\n var obj = {\n canceled: false,\n from: change.from,\n to: change.to,\n text: change.text,\n origin: change.origin,\n cancel: function cancel() {\n return obj.canceled = true;\n }\n };\n\n if (update) {\n obj.update = function (from, to, text, origin) {\n if (from) {\n obj.from = _clipPos(doc, from);\n }\n\n if (to) {\n obj.to = _clipPos(doc, to);\n }\n\n if (text) {\n obj.text = text;\n }\n\n if (origin !== undefined) {\n obj.origin = origin;\n }\n };\n }\n\n signal(doc, \"beforeChange\", doc, obj);\n\n if (doc.cm) {\n signal(doc.cm, \"beforeChange\", doc.cm, obj);\n }\n\n if (obj.canceled) {\n if (doc.cm) {\n doc.cm.curOp.updateInput = 2;\n }\n\n return null;\n }\n\n return {\n from: obj.from,\n to: obj.to,\n text: obj.text,\n origin: obj.origin\n };\n } // Apply a change to a document, and add it to the document's\n // history, and propagating it to all linked documents.\n\n\n function makeChange(doc, change, ignoreReadOnly) {\n if (doc.cm) {\n if (!doc.cm.curOp) {\n return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly);\n }\n\n if (doc.cm.state.suppressEdits) {\n return;\n }\n }\n\n if (hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\")) {\n change = filterChange(doc, change, true);\n\n if (!change) {\n return;\n }\n } // Possibly split or suppress the update based on the presence\n // of read-only spans in its range.\n\n\n var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to);\n\n if (split) {\n for (var i = split.length - 1; i >= 0; --i) {\n makeChangeInner(doc, {\n from: split[i].from,\n to: split[i].to,\n text: i ? [\"\"] : change.text,\n origin: change.origin\n });\n }\n } else {\n makeChangeInner(doc, change);\n }\n }\n\n function makeChangeInner(doc, change) {\n if (change.text.length == 1 && change.text[0] == \"\" && cmp(change.from, change.to) == 0) {\n return;\n }\n\n var selAfter = computeSelAfterChange(doc, change);\n addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN);\n makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change));\n var rebased = [];\n linkedDocs(doc, function (doc, sharedHist) {\n if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n rebaseHist(doc.history, change);\n rebased.push(doc.history);\n }\n\n makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change));\n });\n } // Revert a change stored in a document's history.\n\n\n function makeChangeFromHistory(doc, type, allowSelectionOnly) {\n var suppress = doc.cm && doc.cm.state.suppressEdits;\n\n if (suppress && !allowSelectionOnly) {\n return;\n }\n\n var hist = doc.history,\n event,\n selAfter = doc.sel;\n var source = type == \"undo\" ? hist.done : hist.undone,\n dest = type == \"undo\" ? hist.undone : hist.done; // Verify that there is a useable event (so that ctrl-z won't\n // needlessly clear selection events)\n\n var i = 0;\n\n for (; i < source.length; i++) {\n event = source[i];\n\n if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges) {\n break;\n }\n }\n\n if (i == source.length) {\n return;\n }\n\n hist.lastOrigin = hist.lastSelOrigin = null;\n\n for (;;) {\n event = source.pop();\n\n if (event.ranges) {\n pushSelectionToHistory(event, dest);\n\n if (allowSelectionOnly && !event.equals(doc.sel)) {\n setSelection(doc, event, {\n clearRedo: false\n });\n return;\n }\n\n selAfter = event;\n } else if (suppress) {\n source.push(event);\n return;\n } else {\n break;\n }\n } // Build up a reverse change object to add to the opposite history\n // stack (redo when undoing, and vice versa).\n\n\n var antiChanges = [];\n pushSelectionToHistory(selAfter, dest);\n dest.push({\n changes: antiChanges,\n generation: hist.generation\n });\n hist.generation = event.generation || ++hist.maxGeneration;\n var filter = hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\");\n\n var loop = function loop(i) {\n var change = event.changes[i];\n change.origin = type;\n\n if (filter && !filterChange(doc, change, false)) {\n source.length = 0;\n return {};\n }\n\n antiChanges.push(historyChangeFromChange(doc, change));\n var after = i ? computeSelAfterChange(doc, change) : lst(source);\n makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change));\n\n if (!i && doc.cm) {\n doc.cm.scrollIntoView({\n from: change.from,\n to: changeEnd(change)\n });\n }\n\n var rebased = []; // Propagate to the linked documents\n\n linkedDocs(doc, function (doc, sharedHist) {\n if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n rebaseHist(doc.history, change);\n rebased.push(doc.history);\n }\n\n makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change));\n });\n };\n\n for (var i$1 = event.changes.length - 1; i$1 >= 0; --i$1) {\n var returned = loop(i$1);\n if (returned) return returned.v;\n }\n } // Sub-views need their line numbers shifted when text is added\n // above or below them in the parent document.\n\n\n function shiftDoc(doc, distance) {\n if (distance == 0) {\n return;\n }\n\n doc.first += distance;\n doc.sel = new Selection(map(doc.sel.ranges, function (range) {\n return new Range(Pos(range.anchor.line + distance, range.anchor.ch), Pos(range.head.line + distance, range.head.ch));\n }), doc.sel.primIndex);\n\n if (doc.cm) {\n regChange(doc.cm, doc.first, doc.first - distance, distance);\n\n for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++) {\n regLineChange(doc.cm, l, \"gutter\");\n }\n }\n } // More lower-level change function, handling only a single document\n // (not linked ones).\n\n\n function makeChangeSingleDoc(doc, change, selAfter, spans) {\n if (doc.cm && !doc.cm.curOp) {\n return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans);\n }\n\n if (change.to.line < doc.first) {\n shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line));\n return;\n }\n\n if (change.from.line > doc.lastLine()) {\n return;\n } // Clip the change to the size of this doc\n\n\n if (change.from.line < doc.first) {\n var shift = change.text.length - 1 - (doc.first - change.from.line);\n shiftDoc(doc, shift);\n change = {\n from: Pos(doc.first, 0),\n to: Pos(change.to.line + shift, change.to.ch),\n text: [lst(change.text)],\n origin: change.origin\n };\n }\n\n var last = doc.lastLine();\n\n if (change.to.line > last) {\n change = {\n from: change.from,\n to: Pos(last, getLine(doc, last).text.length),\n text: [change.text[0]],\n origin: change.origin\n };\n }\n\n change.removed = getBetween(doc, change.from, change.to);\n\n if (!selAfter) {\n selAfter = computeSelAfterChange(doc, change);\n }\n\n if (doc.cm) {\n makeChangeSingleDocInEditor(doc.cm, change, spans);\n } else {\n updateDoc(doc, change, spans);\n }\n\n setSelectionNoUndo(doc, selAfter, sel_dontScroll);\n\n if (doc.cantEdit && skipAtomic(doc, Pos(doc.firstLine(), 0))) {\n doc.cantEdit = false;\n }\n } // Handle the interaction of a change to a document with the editor\n // that this document is part of.\n\n\n function makeChangeSingleDocInEditor(cm, change, spans) {\n var doc = cm.doc,\n display = cm.display,\n from = change.from,\n to = change.to;\n var recomputeMaxLength = false,\n checkWidthStart = from.line;\n\n if (!cm.options.lineWrapping) {\n checkWidthStart = lineNo(visualLine(getLine(doc, from.line)));\n doc.iter(checkWidthStart, to.line + 1, function (line) {\n if (line == display.maxLine) {\n recomputeMaxLength = true;\n return true;\n }\n });\n }\n\n if (doc.sel.contains(change.from, change.to) > -1) {\n signalCursorActivity(cm);\n }\n\n updateDoc(doc, change, spans, estimateHeight(cm));\n\n if (!cm.options.lineWrapping) {\n doc.iter(checkWidthStart, from.line + change.text.length, function (line) {\n var len = lineLength(line);\n\n if (len > display.maxLineLength) {\n display.maxLine = line;\n display.maxLineLength = len;\n display.maxLineChanged = true;\n recomputeMaxLength = false;\n }\n });\n\n if (recomputeMaxLength) {\n cm.curOp.updateMaxLine = true;\n }\n }\n\n retreatFrontier(doc, from.line);\n startWorker(cm, 400);\n var lendiff = change.text.length - (to.line - from.line) - 1; // Remember that these lines changed, for updating the display\n\n if (change.full) {\n regChange(cm);\n } else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change)) {\n regLineChange(cm, from.line, \"text\");\n } else {\n regChange(cm, from.line, to.line + 1, lendiff);\n }\n\n var changesHandler = hasHandler(cm, \"changes\"),\n changeHandler = hasHandler(cm, \"change\");\n\n if (changeHandler || changesHandler) {\n var obj = {\n from: from,\n to: to,\n text: change.text,\n removed: change.removed,\n origin: change.origin\n };\n\n if (changeHandler) {\n signalLater(cm, \"change\", cm, obj);\n }\n\n if (changesHandler) {\n (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj);\n }\n }\n\n cm.display.selForContextMenu = null;\n }\n\n function _replaceRange(doc, code, from, to, origin) {\n var assign;\n\n if (!to) {\n to = from;\n }\n\n if (cmp(to, from) < 0) {\n assign = [to, from], from = assign[0], to = assign[1];\n }\n\n if (typeof code == \"string\") {\n code = doc.splitLines(code);\n }\n\n makeChange(doc, {\n from: from,\n to: to,\n text: code,\n origin: origin\n });\n } // Rebasing/resetting history to deal with externally-sourced changes\n\n\n function rebaseHistSelSingle(pos, from, to, diff) {\n if (to < pos.line) {\n pos.line += diff;\n } else if (from < pos.line) {\n pos.line = from;\n pos.ch = 0;\n }\n } // Tries to rebase an array of history events given a change in the\n // document. If the change touches the same lines as the event, the\n // event, and everything 'behind' it, is discarded. If the change is\n // before the event, the event's positions are updated. Uses a\n // copy-on-write scheme for the positions, to avoid having to\n // reallocate them all on every rebase, but also avoid problems with\n // shared position objects being unsafely updated.\n\n\n function rebaseHistArray(array, from, to, diff) {\n for (var i = 0; i < array.length; ++i) {\n var sub = array[i],\n ok = true;\n\n if (sub.ranges) {\n if (!sub.copied) {\n sub = array[i] = sub.deepCopy();\n sub.copied = true;\n }\n\n for (var j = 0; j < sub.ranges.length; j++) {\n rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff);\n rebaseHistSelSingle(sub.ranges[j].head, from, to, diff);\n }\n\n continue;\n }\n\n for (var j$1 = 0; j$1 < sub.changes.length; ++j$1) {\n var cur = sub.changes[j$1];\n\n if (to < cur.from.line) {\n cur.from = Pos(cur.from.line + diff, cur.from.ch);\n cur.to = Pos(cur.to.line + diff, cur.to.ch);\n } else if (from <= cur.to.line) {\n ok = false;\n break;\n }\n }\n\n if (!ok) {\n array.splice(0, i + 1);\n i = 0;\n }\n }\n }\n\n function rebaseHist(hist, change) {\n var from = change.from.line,\n to = change.to.line,\n diff = change.text.length - (to - from) - 1;\n rebaseHistArray(hist.done, from, to, diff);\n rebaseHistArray(hist.undone, from, to, diff);\n } // Utility for applying a change to a line by handle or number,\n // returning the number and optionally registering the line as\n // changed.\n\n\n function changeLine(doc, handle, changeType, op) {\n var no = handle,\n line = handle;\n\n if (typeof handle == \"number\") {\n line = getLine(doc, clipLine(doc, handle));\n } else {\n no = lineNo(handle);\n }\n\n if (no == null) {\n return null;\n }\n\n if (op(line, no) && doc.cm) {\n regLineChange(doc.cm, no, changeType);\n }\n\n return line;\n } // The document is represented as a BTree consisting of leaves, with\n // chunk of lines in them, and branches, with up to ten leaves or\n // other branch nodes below them. The top node is always a branch\n // node, and is the document object itself (meaning it has\n // additional methods and properties).\n //\n // All nodes have parent links. The tree is used both to go from\n // line numbers to line objects, and to go from objects to numbers.\n // It also indexes by height, and is used to convert between height\n // and line object, and to find the total height of the document.\n //\n // See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html\n\n\n function LeafChunk(lines) {\n this.lines = lines;\n this.parent = null;\n var height = 0;\n\n for (var i = 0; i < lines.length; ++i) {\n lines[i].parent = this;\n height += lines[i].height;\n }\n\n this.height = height;\n }\n\n LeafChunk.prototype = {\n chunkSize: function chunkSize() {\n return this.lines.length;\n },\n // Remove the n lines at offset 'at'.\n removeInner: function removeInner(at, n) {\n for (var i = at, e = at + n; i < e; ++i) {\n var line = this.lines[i];\n this.height -= line.height;\n cleanUpLine(line);\n signalLater(line, \"delete\");\n }\n\n this.lines.splice(at, n);\n },\n // Helper used to collapse a small branch into a single leaf.\n collapse: function collapse(lines) {\n lines.push.apply(lines, this.lines);\n },\n // Insert the given array of lines at offset 'at', count them as\n // having the given height.\n insertInner: function insertInner(at, lines, height) {\n this.height += height;\n this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at));\n\n for (var i = 0; i < lines.length; ++i) {\n lines[i].parent = this;\n }\n },\n // Used to iterate over a part of the tree.\n iterN: function iterN(at, n, op) {\n for (var e = at + n; at < e; ++at) {\n if (op(this.lines[at])) {\n return true;\n }\n }\n }\n };\n\n function BranchChunk(children) {\n this.children = children;\n var size = 0,\n height = 0;\n\n for (var i = 0; i < children.length; ++i) {\n var ch = children[i];\n size += ch.chunkSize();\n height += ch.height;\n ch.parent = this;\n }\n\n this.size = size;\n this.height = height;\n this.parent = null;\n }\n\n BranchChunk.prototype = {\n chunkSize: function chunkSize() {\n return this.size;\n },\n removeInner: function removeInner(at, n) {\n this.size -= n;\n\n for (var i = 0; i < this.children.length; ++i) {\n var child = this.children[i],\n sz = child.chunkSize();\n\n if (at < sz) {\n var rm = Math.min(n, sz - at),\n oldHeight = child.height;\n child.removeInner(at, rm);\n this.height -= oldHeight - child.height;\n\n if (sz == rm) {\n this.children.splice(i--, 1);\n child.parent = null;\n }\n\n if ((n -= rm) == 0) {\n break;\n }\n\n at = 0;\n } else {\n at -= sz;\n }\n } // If the result is smaller than 25 lines, ensure that it is a\n // single leaf node.\n\n\n if (this.size - n < 25 && (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) {\n var lines = [];\n this.collapse(lines);\n this.children = [new LeafChunk(lines)];\n this.children[0].parent = this;\n }\n },\n collapse: function collapse(lines) {\n for (var i = 0; i < this.children.length; ++i) {\n this.children[i].collapse(lines);\n }\n },\n insertInner: function insertInner(at, lines, height) {\n this.size += lines.length;\n this.height += height;\n\n for (var i = 0; i < this.children.length; ++i) {\n var child = this.children[i],\n sz = child.chunkSize();\n\n if (at <= sz) {\n child.insertInner(at, lines, height);\n\n if (child.lines && child.lines.length > 50) {\n // To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced.\n // Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest.\n var remaining = child.lines.length % 25 + 25;\n\n for (var pos = remaining; pos < child.lines.length;) {\n var leaf = new LeafChunk(child.lines.slice(pos, pos += 25));\n child.height -= leaf.height;\n this.children.splice(++i, 0, leaf);\n leaf.parent = this;\n }\n\n child.lines = child.lines.slice(0, remaining);\n this.maybeSpill();\n }\n\n break;\n }\n\n at -= sz;\n }\n },\n // When a node has grown, check whether it should be split.\n maybeSpill: function maybeSpill() {\n if (this.children.length <= 10) {\n return;\n }\n\n var me = this;\n\n do {\n var spilled = me.children.splice(me.children.length - 5, 5);\n var sibling = new BranchChunk(spilled);\n\n if (!me.parent) {\n // Become the parent node\n var copy = new BranchChunk(me.children);\n copy.parent = me;\n me.children = [copy, sibling];\n me = copy;\n } else {\n me.size -= sibling.size;\n me.height -= sibling.height;\n var myIndex = indexOf(me.parent.children, me);\n me.parent.children.splice(myIndex + 1, 0, sibling);\n }\n\n sibling.parent = me.parent;\n } while (me.children.length > 10);\n\n me.parent.maybeSpill();\n },\n iterN: function iterN(at, n, op) {\n for (var i = 0; i < this.children.length; ++i) {\n var child = this.children[i],\n sz = child.chunkSize();\n\n if (at < sz) {\n var used = Math.min(n, sz - at);\n\n if (child.iterN(at, used, op)) {\n return true;\n }\n\n if ((n -= used) == 0) {\n break;\n }\n\n at = 0;\n } else {\n at -= sz;\n }\n }\n }\n }; // Line widgets are block elements displayed above or below a line.\n\n var LineWidget = function LineWidget(doc, node, options) {\n if (options) {\n for (var opt in options) {\n if (options.hasOwnProperty(opt)) {\n this[opt] = options[opt];\n }\n }\n }\n\n this.doc = doc;\n this.node = node;\n };\n\n LineWidget.prototype.clear = function () {\n var cm = this.doc.cm,\n ws = this.line.widgets,\n line = this.line,\n no = lineNo(line);\n\n if (no == null || !ws) {\n return;\n }\n\n for (var i = 0; i < ws.length; ++i) {\n if (ws[i] == this) {\n ws.splice(i--, 1);\n }\n }\n\n if (!ws.length) {\n line.widgets = null;\n }\n\n var height = widgetHeight(this);\n updateLineHeight(line, Math.max(0, line.height - height));\n\n if (cm) {\n runInOp(cm, function () {\n adjustScrollWhenAboveVisible(cm, line, -height);\n regLineChange(cm, no, \"widget\");\n });\n signalLater(cm, \"lineWidgetCleared\", cm, this, no);\n }\n };\n\n LineWidget.prototype.changed = function () {\n var this$1 = this;\n var oldH = this.height,\n cm = this.doc.cm,\n line = this.line;\n this.height = null;\n var diff = widgetHeight(this) - oldH;\n\n if (!diff) {\n return;\n }\n\n if (!lineIsHidden(this.doc, line)) {\n updateLineHeight(line, line.height + diff);\n }\n\n if (cm) {\n runInOp(cm, function () {\n cm.curOp.forceUpdate = true;\n adjustScrollWhenAboveVisible(cm, line, diff);\n signalLater(cm, \"lineWidgetChanged\", cm, this$1, lineNo(line));\n });\n }\n };\n\n eventMixin(LineWidget);\n\n function adjustScrollWhenAboveVisible(cm, line, diff) {\n if (_heightAtLine(line) < (cm.curOp && cm.curOp.scrollTop || cm.doc.scrollTop)) {\n addToScrollTop(cm, diff);\n }\n }\n\n function addLineWidget(doc, handle, node, options) {\n var widget = new LineWidget(doc, node, options);\n var cm = doc.cm;\n\n if (cm && widget.noHScroll) {\n cm.display.alignWidgets = true;\n }\n\n changeLine(doc, handle, \"widget\", function (line) {\n var widgets = line.widgets || (line.widgets = []);\n\n if (widget.insertAt == null) {\n widgets.push(widget);\n } else {\n widgets.splice(Math.min(widgets.length, Math.max(0, widget.insertAt)), 0, widget);\n }\n\n widget.line = line;\n\n if (cm && !lineIsHidden(doc, line)) {\n var aboveVisible = _heightAtLine(line) < doc.scrollTop;\n updateLineHeight(line, line.height + widgetHeight(widget));\n\n if (aboveVisible) {\n addToScrollTop(cm, widget.height);\n }\n\n cm.curOp.forceUpdate = true;\n }\n\n return true;\n });\n\n if (cm) {\n signalLater(cm, \"lineWidgetAdded\", cm, widget, typeof handle == \"number\" ? handle : lineNo(handle));\n }\n\n return widget;\n } // TEXTMARKERS\n // Created with markText and setBookmark methods. A TextMarker is a\n // handle that can be used to clear or find a marked position in the\n // document. Line objects hold arrays (markedSpans) containing\n // {from, to, marker} object pointing to such marker objects, and\n // indicating that such a marker is present on that line. Multiple\n // lines may point to the same marker when it spans across lines.\n // The spans will have null for their from/to properties when the\n // marker continues beyond the start/end of the line. Markers have\n // links back to the lines they currently touch.\n // Collapsed markers have unique ids, in order to be able to order\n // them, which is needed for uniquely determining an outer marker\n // when they overlap (they may nest, but not partially overlap).\n\n\n var nextMarkerId = 0;\n\n var TextMarker = function TextMarker(doc, type) {\n this.lines = [];\n this.type = type;\n this.doc = doc;\n this.id = ++nextMarkerId;\n }; // Clear the marker.\n\n\n TextMarker.prototype.clear = function () {\n if (this.explicitlyCleared) {\n return;\n }\n\n var cm = this.doc.cm,\n withOp = cm && !cm.curOp;\n\n if (withOp) {\n _startOperation(cm);\n }\n\n if (hasHandler(this, \"clear\")) {\n var found = this.find();\n\n if (found) {\n signalLater(this, \"clear\", found.from, found.to);\n }\n }\n\n var min = null,\n max = null;\n\n for (var i = 0; i < this.lines.length; ++i) {\n var line = this.lines[i];\n var span = getMarkedSpanFor(line.markedSpans, this);\n\n if (cm && !this.collapsed) {\n regLineChange(cm, lineNo(line), \"text\");\n } else if (cm) {\n if (span.to != null) {\n max = lineNo(line);\n }\n\n if (span.from != null) {\n min = lineNo(line);\n }\n }\n\n line.markedSpans = removeMarkedSpan(line.markedSpans, span);\n\n if (span.from == null && this.collapsed && !lineIsHidden(this.doc, line) && cm) {\n updateLineHeight(line, textHeight(cm.display));\n }\n }\n\n if (cm && this.collapsed && !cm.options.lineWrapping) {\n for (var i$1 = 0; i$1 < this.lines.length; ++i$1) {\n var visual = visualLine(this.lines[i$1]),\n len = lineLength(visual);\n\n if (len > cm.display.maxLineLength) {\n cm.display.maxLine = visual;\n cm.display.maxLineLength = len;\n cm.display.maxLineChanged = true;\n }\n }\n }\n\n if (min != null && cm && this.collapsed) {\n regChange(cm, min, max + 1);\n }\n\n this.lines.length = 0;\n this.explicitlyCleared = true;\n\n if (this.atomic && this.doc.cantEdit) {\n this.doc.cantEdit = false;\n\n if (cm) {\n reCheckSelection(cm.doc);\n }\n }\n\n if (cm) {\n signalLater(cm, \"markerCleared\", cm, this, min, max);\n }\n\n if (withOp) {\n _endOperation(cm);\n }\n\n if (this.parent) {\n this.parent.clear();\n }\n }; // Find the position of the marker in the document. Returns a {from,\n // to} object by default. Side can be passed to get a specific side\n // -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the\n // Pos objects returned contain a line object, rather than a line\n // number (used to prevent looking up the same line twice).\n\n\n TextMarker.prototype.find = function (side, lineObj) {\n if (side == null && this.type == \"bookmark\") {\n side = 1;\n }\n\n var from, to;\n\n for (var i = 0; i < this.lines.length; ++i) {\n var line = this.lines[i];\n var span = getMarkedSpanFor(line.markedSpans, this);\n\n if (span.from != null) {\n from = Pos(lineObj ? line : lineNo(line), span.from);\n\n if (side == -1) {\n return from;\n }\n }\n\n if (span.to != null) {\n to = Pos(lineObj ? line : lineNo(line), span.to);\n\n if (side == 1) {\n return to;\n }\n }\n }\n\n return from && {\n from: from,\n to: to\n };\n }; // Signals that the marker's widget changed, and surrounding layout\n // should be recomputed.\n\n\n TextMarker.prototype.changed = function () {\n var this$1 = this;\n var pos = this.find(-1, true),\n widget = this,\n cm = this.doc.cm;\n\n if (!pos || !cm) {\n return;\n }\n\n runInOp(cm, function () {\n var line = pos.line,\n lineN = lineNo(pos.line);\n var view = findViewForLine(cm, lineN);\n\n if (view) {\n clearLineMeasurementCacheFor(view);\n cm.curOp.selectionChanged = cm.curOp.forceUpdate = true;\n }\n\n cm.curOp.updateMaxLine = true;\n\n if (!lineIsHidden(widget.doc, line) && widget.height != null) {\n var oldHeight = widget.height;\n widget.height = null;\n var dHeight = widgetHeight(widget) - oldHeight;\n\n if (dHeight) {\n updateLineHeight(line, line.height + dHeight);\n }\n }\n\n signalLater(cm, \"markerChanged\", cm, this$1);\n });\n };\n\n TextMarker.prototype.attachLine = function (line) {\n if (!this.lines.length && this.doc.cm) {\n var op = this.doc.cm.curOp;\n\n if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1) {\n (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this);\n }\n }\n\n this.lines.push(line);\n };\n\n TextMarker.prototype.detachLine = function (line) {\n this.lines.splice(indexOf(this.lines, line), 1);\n\n if (!this.lines.length && this.doc.cm) {\n var op = this.doc.cm.curOp;\n (op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this);\n }\n };\n\n eventMixin(TextMarker); // Create a marker, wire it up to the right lines, and\n\n function _markText(doc, from, to, options, type) {\n // Shared markers (across linked documents) are handled separately\n // (markTextShared will call out to this again, once per\n // document).\n if (options && options.shared) {\n return markTextShared(doc, from, to, options, type);\n } // Ensure we are in an operation.\n\n\n if (doc.cm && !doc.cm.curOp) {\n return operation(doc.cm, _markText)(doc, from, to, options, type);\n }\n\n var marker = new TextMarker(doc, type),\n diff = cmp(from, to);\n\n if (options) {\n copyObj(options, marker, false);\n } // Don't connect empty markers unless clearWhenEmpty is false\n\n\n if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false) {\n return marker;\n }\n\n if (marker.replacedWith) {\n // Showing up as a widget implies collapsed (widget replaces text)\n marker.collapsed = true;\n marker.widgetNode = eltP(\"span\", [marker.replacedWith], \"CodeMirror-widget\");\n\n if (!options.handleMouseEvents) {\n marker.widgetNode.setAttribute(\"cm-ignore-events\", \"true\");\n }\n\n if (options.insertLeft) {\n marker.widgetNode.insertLeft = true;\n }\n }\n\n if (marker.collapsed) {\n if (conflictingCollapsedRange(doc, from.line, from, to, marker) || from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker)) {\n throw new Error(\"Inserting collapsed marker partially overlapping an existing one\");\n }\n\n seeCollapsedSpans();\n }\n\n if (marker.addToHistory) {\n addChangeToHistory(doc, {\n from: from,\n to: to,\n origin: \"markText\"\n }, doc.sel, NaN);\n }\n\n var curLine = from.line,\n cm = doc.cm,\n updateMaxLine;\n doc.iter(curLine, to.line + 1, function (line) {\n if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine) {\n updateMaxLine = true;\n }\n\n if (marker.collapsed && curLine != from.line) {\n updateLineHeight(line, 0);\n }\n\n addMarkedSpan(line, new MarkedSpan(marker, curLine == from.line ? from.ch : null, curLine == to.line ? to.ch : null), doc.cm && doc.cm.curOp);\n ++curLine;\n }); // lineIsHidden depends on the presence of the spans, so needs a second pass\n\n if (marker.collapsed) {\n doc.iter(from.line, to.line + 1, function (line) {\n if (lineIsHidden(doc, line)) {\n updateLineHeight(line, 0);\n }\n });\n }\n\n if (marker.clearOnEnter) {\n on(marker, \"beforeCursorEnter\", function () {\n return marker.clear();\n });\n }\n\n if (marker.readOnly) {\n seeReadOnlySpans();\n\n if (doc.history.done.length || doc.history.undone.length) {\n doc.clearHistory();\n }\n }\n\n if (marker.collapsed) {\n marker.id = ++nextMarkerId;\n marker.atomic = true;\n }\n\n if (cm) {\n // Sync editor state\n if (updateMaxLine) {\n cm.curOp.updateMaxLine = true;\n }\n\n if (marker.collapsed) {\n regChange(cm, from.line, to.line + 1);\n } else if (marker.className || marker.startStyle || marker.endStyle || marker.css || marker.attributes || marker.title) {\n for (var i = from.line; i <= to.line; i++) {\n regLineChange(cm, i, \"text\");\n }\n }\n\n if (marker.atomic) {\n reCheckSelection(cm.doc);\n }\n\n signalLater(cm, \"markerAdded\", cm, marker);\n }\n\n return marker;\n } // SHARED TEXTMARKERS\n // A shared marker spans multiple linked documents. It is\n // implemented as a meta-marker-object controlling multiple normal\n // markers.\n\n\n var SharedTextMarker = function SharedTextMarker(markers, primary) {\n this.markers = markers;\n this.primary = primary;\n\n for (var i = 0; i < markers.length; ++i) {\n markers[i].parent = this;\n }\n };\n\n SharedTextMarker.prototype.clear = function () {\n if (this.explicitlyCleared) {\n return;\n }\n\n this.explicitlyCleared = true;\n\n for (var i = 0; i < this.markers.length; ++i) {\n this.markers[i].clear();\n }\n\n signalLater(this, \"clear\");\n };\n\n SharedTextMarker.prototype.find = function (side, lineObj) {\n return this.primary.find(side, lineObj);\n };\n\n eventMixin(SharedTextMarker);\n\n function markTextShared(doc, from, to, options, type) {\n options = copyObj(options);\n options.shared = false;\n var markers = [_markText(doc, from, to, options, type)],\n primary = markers[0];\n var widget = options.widgetNode;\n linkedDocs(doc, function (doc) {\n if (widget) {\n options.widgetNode = widget.cloneNode(true);\n }\n\n markers.push(_markText(doc, _clipPos(doc, from), _clipPos(doc, to), options, type));\n\n for (var i = 0; i < doc.linked.length; ++i) {\n if (doc.linked[i].isParent) {\n return;\n }\n }\n\n primary = lst(markers);\n });\n return new SharedTextMarker(markers, primary);\n }\n\n function findSharedMarkers(doc) {\n return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function (m) {\n return m.parent;\n });\n }\n\n function copySharedMarkers(doc, markers) {\n for (var i = 0; i < markers.length; i++) {\n var marker = markers[i],\n pos = marker.find();\n var mFrom = doc.clipPos(pos.from),\n mTo = doc.clipPos(pos.to);\n\n if (cmp(mFrom, mTo)) {\n var subMark = _markText(doc, mFrom, mTo, marker.primary, marker.primary.type);\n\n marker.markers.push(subMark);\n subMark.parent = marker;\n }\n }\n }\n\n function detachSharedMarkers(markers) {\n var loop = function loop(i) {\n var marker = markers[i],\n linked = [marker.primary.doc];\n linkedDocs(marker.primary.doc, function (d) {\n return linked.push(d);\n });\n\n for (var j = 0; j < marker.markers.length; j++) {\n var subMarker = marker.markers[j];\n\n if (indexOf(linked, subMarker.doc) == -1) {\n subMarker.parent = null;\n marker.markers.splice(j--, 1);\n }\n }\n };\n\n for (var i = 0; i < markers.length; i++) {\n loop(i);\n }\n }\n\n var nextDocId = 0;\n\n var Doc = function Doc(text, mode, firstLine, lineSep, direction) {\n if (!(this instanceof Doc)) {\n return new Doc(text, mode, firstLine, lineSep, direction);\n }\n\n if (firstLine == null) {\n firstLine = 0;\n }\n\n BranchChunk.call(this, [new LeafChunk([new Line(\"\", null)])]);\n this.first = firstLine;\n this.scrollTop = this.scrollLeft = 0;\n this.cantEdit = false;\n this.cleanGeneration = 1;\n this.modeFrontier = this.highlightFrontier = firstLine;\n var start = Pos(firstLine, 0);\n this.sel = simpleSelection(start);\n this.history = new History(null);\n this.id = ++nextDocId;\n this.modeOption = mode;\n this.lineSep = lineSep;\n this.direction = direction == \"rtl\" ? \"rtl\" : \"ltr\";\n this.extend = false;\n\n if (typeof text == \"string\") {\n text = this.splitLines(text);\n }\n\n updateDoc(this, {\n from: start,\n to: start,\n text: text\n });\n setSelection(this, simpleSelection(start), sel_dontScroll);\n };\n\n Doc.prototype = createObj(BranchChunk.prototype, {\n constructor: Doc,\n // Iterate over the document. Supports two forms -- with only one\n // argument, it calls that for each line in the document. With\n // three, it iterates over the range given by the first two (with\n // the second being non-inclusive).\n iter: function iter(from, to, op) {\n if (op) {\n this.iterN(from - this.first, to - from, op);\n } else {\n this.iterN(this.first, this.first + this.size, from);\n }\n },\n // Non-public interface for adding and removing lines.\n insert: function insert(at, lines) {\n var height = 0;\n\n for (var i = 0; i < lines.length; ++i) {\n height += lines[i].height;\n }\n\n this.insertInner(at - this.first, lines, height);\n },\n remove: function remove(at, n) {\n this.removeInner(at - this.first, n);\n },\n // From here, the methods are part of the public interface. Most\n // are also available from CodeMirror (editor) instances.\n getValue: function getValue(lineSep) {\n var lines = getLines(this, this.first, this.first + this.size);\n\n if (lineSep === false) {\n return lines;\n }\n\n return lines.join(lineSep || this.lineSeparator());\n },\n setValue: docMethodOp(function (code) {\n var top = Pos(this.first, 0),\n last = this.first + this.size - 1;\n makeChange(this, {\n from: top,\n to: Pos(last, getLine(this, last).text.length),\n text: this.splitLines(code),\n origin: \"setValue\",\n full: true\n }, true);\n\n if (this.cm) {\n scrollToCoords(this.cm, 0, 0);\n }\n\n setSelection(this, simpleSelection(top), sel_dontScroll);\n }),\n replaceRange: function replaceRange(code, from, to, origin) {\n from = _clipPos(this, from);\n to = to ? _clipPos(this, to) : from;\n\n _replaceRange(this, code, from, to, origin);\n },\n getRange: function getRange(from, to, lineSep) {\n var lines = getBetween(this, _clipPos(this, from), _clipPos(this, to));\n\n if (lineSep === false) {\n return lines;\n }\n\n if (lineSep === '') {\n return lines.join('');\n }\n\n return lines.join(lineSep || this.lineSeparator());\n },\n getLine: function getLine(line) {\n var l = this.getLineHandle(line);\n return l && l.text;\n },\n getLineHandle: function getLineHandle(line) {\n if (isLine(this, line)) {\n return getLine(this, line);\n }\n },\n getLineNumber: function getLineNumber(line) {\n return lineNo(line);\n },\n getLineHandleVisualStart: function getLineHandleVisualStart(line) {\n if (typeof line == \"number\") {\n line = getLine(this, line);\n }\n\n return visualLine(line);\n },\n lineCount: function lineCount() {\n return this.size;\n },\n firstLine: function firstLine() {\n return this.first;\n },\n lastLine: function lastLine() {\n return this.first + this.size - 1;\n },\n clipPos: function clipPos(pos) {\n return _clipPos(this, pos);\n },\n getCursor: function getCursor(start) {\n var range = this.sel.primary(),\n pos;\n\n if (start == null || start == \"head\") {\n pos = range.head;\n } else if (start == \"anchor\") {\n pos = range.anchor;\n } else if (start == \"end\" || start == \"to\" || start === false) {\n pos = range.to();\n } else {\n pos = range.from();\n }\n\n return pos;\n },\n listSelections: function listSelections() {\n return this.sel.ranges;\n },\n somethingSelected: function somethingSelected() {\n return this.sel.somethingSelected();\n },\n setCursor: docMethodOp(function (line, ch, options) {\n setSimpleSelection(this, _clipPos(this, typeof line == \"number\" ? Pos(line, ch || 0) : line), null, options);\n }),\n setSelection: docMethodOp(function (anchor, head, options) {\n setSimpleSelection(this, _clipPos(this, anchor), _clipPos(this, head || anchor), options);\n }),\n extendSelection: docMethodOp(function (head, other, options) {\n extendSelection(this, _clipPos(this, head), other && _clipPos(this, other), options);\n }),\n extendSelections: docMethodOp(function (heads, options) {\n extendSelections(this, clipPosArray(this, heads), options);\n }),\n extendSelectionsBy: docMethodOp(function (f, options) {\n var heads = map(this.sel.ranges, f);\n extendSelections(this, clipPosArray(this, heads), options);\n }),\n setSelections: docMethodOp(function (ranges, primary, options) {\n if (!ranges.length) {\n return;\n }\n\n var out = [];\n\n for (var i = 0; i < ranges.length; i++) {\n out[i] = new Range(_clipPos(this, ranges[i].anchor), _clipPos(this, ranges[i].head || ranges[i].anchor));\n }\n\n if (primary == null) {\n primary = Math.min(ranges.length - 1, this.sel.primIndex);\n }\n\n setSelection(this, normalizeSelection(this.cm, out, primary), options);\n }),\n addSelection: docMethodOp(function (anchor, head, options) {\n var ranges = this.sel.ranges.slice(0);\n ranges.push(new Range(_clipPos(this, anchor), _clipPos(this, head || anchor)));\n setSelection(this, normalizeSelection(this.cm, ranges, ranges.length - 1), options);\n }),\n getSelection: function getSelection(lineSep) {\n var ranges = this.sel.ranges,\n lines;\n\n for (var i = 0; i < ranges.length; i++) {\n var sel = getBetween(this, ranges[i].from(), ranges[i].to());\n lines = lines ? lines.concat(sel) : sel;\n }\n\n if (lineSep === false) {\n return lines;\n } else {\n return lines.join(lineSep || this.lineSeparator());\n }\n },\n getSelections: function getSelections(lineSep) {\n var parts = [],\n ranges = this.sel.ranges;\n\n for (var i = 0; i < ranges.length; i++) {\n var sel = getBetween(this, ranges[i].from(), ranges[i].to());\n\n if (lineSep !== false) {\n sel = sel.join(lineSep || this.lineSeparator());\n }\n\n parts[i] = sel;\n }\n\n return parts;\n },\n replaceSelection: function replaceSelection(code, collapse, origin) {\n var dup = [];\n\n for (var i = 0; i < this.sel.ranges.length; i++) {\n dup[i] = code;\n }\n\n this.replaceSelections(dup, collapse, origin || \"+input\");\n },\n replaceSelections: docMethodOp(function (code, collapse, origin) {\n var changes = [],\n sel = this.sel;\n\n for (var i = 0; i < sel.ranges.length; i++) {\n var range = sel.ranges[i];\n changes[i] = {\n from: range.from(),\n to: range.to(),\n text: this.splitLines(code[i]),\n origin: origin\n };\n }\n\n var newSel = collapse && collapse != \"end\" && computeReplacedSel(this, changes, collapse);\n\n for (var i$1 = changes.length - 1; i$1 >= 0; i$1--) {\n makeChange(this, changes[i$1]);\n }\n\n if (newSel) {\n setSelectionReplaceHistory(this, newSel);\n } else if (this.cm) {\n ensureCursorVisible(this.cm);\n }\n }),\n undo: docMethodOp(function () {\n makeChangeFromHistory(this, \"undo\");\n }),\n redo: docMethodOp(function () {\n makeChangeFromHistory(this, \"redo\");\n }),\n undoSelection: docMethodOp(function () {\n makeChangeFromHistory(this, \"undo\", true);\n }),\n redoSelection: docMethodOp(function () {\n makeChangeFromHistory(this, \"redo\", true);\n }),\n setExtending: function setExtending(val) {\n this.extend = val;\n },\n getExtending: function getExtending() {\n return this.extend;\n },\n historySize: function historySize() {\n var hist = this.history,\n done = 0,\n undone = 0;\n\n for (var i = 0; i < hist.done.length; i++) {\n if (!hist.done[i].ranges) {\n ++done;\n }\n }\n\n for (var i$1 = 0; i$1 < hist.undone.length; i$1++) {\n if (!hist.undone[i$1].ranges) {\n ++undone;\n }\n }\n\n return {\n undo: done,\n redo: undone\n };\n },\n clearHistory: function clearHistory() {\n var this$1 = this;\n this.history = new History(this.history);\n linkedDocs(this, function (doc) {\n return doc.history = this$1.history;\n }, true);\n },\n markClean: function markClean() {\n this.cleanGeneration = this.changeGeneration(true);\n },\n changeGeneration: function changeGeneration(forceSplit) {\n if (forceSplit) {\n this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null;\n }\n\n return this.history.generation;\n },\n isClean: function isClean(gen) {\n return this.history.generation == (gen || this.cleanGeneration);\n },\n getHistory: function getHistory() {\n return {\n done: copyHistoryArray(this.history.done),\n undone: copyHistoryArray(this.history.undone)\n };\n },\n setHistory: function setHistory(histData) {\n var hist = this.history = new History(this.history);\n hist.done = copyHistoryArray(histData.done.slice(0), null, true);\n hist.undone = copyHistoryArray(histData.undone.slice(0), null, true);\n },\n setGutterMarker: docMethodOp(function (line, gutterID, value) {\n return changeLine(this, line, \"gutter\", function (line) {\n var markers = line.gutterMarkers || (line.gutterMarkers = {});\n markers[gutterID] = value;\n\n if (!value && isEmpty(markers)) {\n line.gutterMarkers = null;\n }\n\n return true;\n });\n }),\n clearGutter: docMethodOp(function (gutterID) {\n var this$1 = this;\n this.iter(function (line) {\n if (line.gutterMarkers && line.gutterMarkers[gutterID]) {\n changeLine(this$1, line, \"gutter\", function () {\n line.gutterMarkers[gutterID] = null;\n\n if (isEmpty(line.gutterMarkers)) {\n line.gutterMarkers = null;\n }\n\n return true;\n });\n }\n });\n }),\n lineInfo: function lineInfo(line) {\n var n;\n\n if (typeof line == \"number\") {\n if (!isLine(this, line)) {\n return null;\n }\n\n n = line;\n line = getLine(this, line);\n\n if (!line) {\n return null;\n }\n } else {\n n = lineNo(line);\n\n if (n == null) {\n return null;\n }\n }\n\n return {\n line: n,\n handle: line,\n text: line.text,\n gutterMarkers: line.gutterMarkers,\n textClass: line.textClass,\n bgClass: line.bgClass,\n wrapClass: line.wrapClass,\n widgets: line.widgets\n };\n },\n addLineClass: docMethodOp(function (handle, where, cls) {\n return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", function (line) {\n var prop = where == \"text\" ? \"textClass\" : where == \"background\" ? \"bgClass\" : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n\n if (!line[prop]) {\n line[prop] = cls;\n } else if (classTest(cls).test(line[prop])) {\n return false;\n } else {\n line[prop] += \" \" + cls;\n }\n\n return true;\n });\n }),\n removeLineClass: docMethodOp(function (handle, where, cls) {\n return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", function (line) {\n var prop = where == \"text\" ? \"textClass\" : where == \"background\" ? \"bgClass\" : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n var cur = line[prop];\n\n if (!cur) {\n return false;\n } else if (cls == null) {\n line[prop] = null;\n } else {\n var found = cur.match(classTest(cls));\n\n if (!found) {\n return false;\n }\n\n var end = found.index + found[0].length;\n line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? \"\" : \" \") + cur.slice(end) || null;\n }\n\n return true;\n });\n }),\n addLineWidget: docMethodOp(function (handle, node, options) {\n return addLineWidget(this, handle, node, options);\n }),\n removeLineWidget: function removeLineWidget(widget) {\n widget.clear();\n },\n markText: function markText(from, to, options) {\n return _markText(this, _clipPos(this, from), _clipPos(this, to), options, options && options.type || \"range\");\n },\n setBookmark: function setBookmark(pos, options) {\n var realOpts = {\n replacedWith: options && (options.nodeType == null ? options.widget : options),\n insertLeft: options && options.insertLeft,\n clearWhenEmpty: false,\n shared: options && options.shared,\n handleMouseEvents: options && options.handleMouseEvents\n };\n pos = _clipPos(this, pos);\n return _markText(this, pos, pos, realOpts, \"bookmark\");\n },\n findMarksAt: function findMarksAt(pos) {\n pos = _clipPos(this, pos);\n var markers = [],\n spans = getLine(this, pos.line).markedSpans;\n\n if (spans) {\n for (var i = 0; i < spans.length; ++i) {\n var span = spans[i];\n\n if ((span.from == null || span.from <= pos.ch) && (span.to == null || span.to >= pos.ch)) {\n markers.push(span.marker.parent || span.marker);\n }\n }\n }\n\n return markers;\n },\n findMarks: function findMarks(from, to, filter) {\n from = _clipPos(this, from);\n to = _clipPos(this, to);\n var found = [],\n lineNo = from.line;\n this.iter(from.line, to.line + 1, function (line) {\n var spans = line.markedSpans;\n\n if (spans) {\n for (var i = 0; i < spans.length; i++) {\n var span = spans[i];\n\n if (!(span.to != null && lineNo == from.line && from.ch >= span.to || span.from == null && lineNo != from.line || span.from != null && lineNo == to.line && span.from >= to.ch) && (!filter || filter(span.marker))) {\n found.push(span.marker.parent || span.marker);\n }\n }\n }\n\n ++lineNo;\n });\n return found;\n },\n getAllMarks: function getAllMarks() {\n var markers = [];\n this.iter(function (line) {\n var sps = line.markedSpans;\n\n if (sps) {\n for (var i = 0; i < sps.length; ++i) {\n if (sps[i].from != null) {\n markers.push(sps[i].marker);\n }\n }\n }\n });\n return markers;\n },\n posFromIndex: function posFromIndex(off) {\n var ch,\n lineNo = this.first,\n sepSize = this.lineSeparator().length;\n this.iter(function (line) {\n var sz = line.text.length + sepSize;\n\n if (sz > off) {\n ch = off;\n return true;\n }\n\n off -= sz;\n ++lineNo;\n });\n return _clipPos(this, Pos(lineNo, ch));\n },\n indexFromPos: function indexFromPos(coords) {\n coords = _clipPos(this, coords);\n var index = coords.ch;\n\n if (coords.line < this.first || coords.ch < 0) {\n return 0;\n }\n\n var sepSize = this.lineSeparator().length;\n this.iter(this.first, coords.line, function (line) {\n // iter aborts when callback returns a truthy value\n index += line.text.length + sepSize;\n });\n return index;\n },\n copy: function copy(copyHistory) {\n var doc = new Doc(getLines(this, this.first, this.first + this.size), this.modeOption, this.first, this.lineSep, this.direction);\n doc.scrollTop = this.scrollTop;\n doc.scrollLeft = this.scrollLeft;\n doc.sel = this.sel;\n doc.extend = false;\n\n if (copyHistory) {\n doc.history.undoDepth = this.history.undoDepth;\n doc.setHistory(this.getHistory());\n }\n\n return doc;\n },\n linkedDoc: function linkedDoc(options) {\n if (!options) {\n options = {};\n }\n\n var from = this.first,\n to = this.first + this.size;\n\n if (options.from != null && options.from > from) {\n from = options.from;\n }\n\n if (options.to != null && options.to < to) {\n to = options.to;\n }\n\n var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep, this.direction);\n\n if (options.sharedHist) {\n copy.history = this.history;\n }\n\n (this.linked || (this.linked = [])).push({\n doc: copy,\n sharedHist: options.sharedHist\n });\n copy.linked = [{\n doc: this,\n isParent: true,\n sharedHist: options.sharedHist\n }];\n copySharedMarkers(copy, findSharedMarkers(this));\n return copy;\n },\n unlinkDoc: function unlinkDoc(other) {\n if (other instanceof CodeMirror) {\n other = other.doc;\n }\n\n if (this.linked) {\n for (var i = 0; i < this.linked.length; ++i) {\n var link = this.linked[i];\n\n if (link.doc != other) {\n continue;\n }\n\n this.linked.splice(i, 1);\n other.unlinkDoc(this);\n detachSharedMarkers(findSharedMarkers(this));\n break;\n }\n } // If the histories were shared, split them again\n\n\n if (other.history == this.history) {\n var splitIds = [other.id];\n linkedDocs(other, function (doc) {\n return splitIds.push(doc.id);\n }, true);\n other.history = new History(null);\n other.history.done = copyHistoryArray(this.history.done, splitIds);\n other.history.undone = copyHistoryArray(this.history.undone, splitIds);\n }\n },\n iterLinkedDocs: function iterLinkedDocs(f) {\n linkedDocs(this, f);\n },\n getMode: function getMode() {\n return this.mode;\n },\n getEditor: function getEditor() {\n return this.cm;\n },\n splitLines: function splitLines(str) {\n if (this.lineSep) {\n return str.split(this.lineSep);\n }\n\n return splitLinesAuto(str);\n },\n lineSeparator: function lineSeparator() {\n return this.lineSep || \"\\n\";\n },\n setDirection: docMethodOp(function (dir) {\n if (dir != \"rtl\") {\n dir = \"ltr\";\n }\n\n if (dir == this.direction) {\n return;\n }\n\n this.direction = dir;\n this.iter(function (line) {\n return line.order = null;\n });\n\n if (this.cm) {\n directionChanged(this.cm);\n }\n })\n }); // Public alias.\n\n Doc.prototype.eachLine = Doc.prototype.iter; // Kludge to work around strange IE behavior where it'll sometimes\n // re-fire a series of drag-related events right after the drop (#1551)\n\n var lastDrop = 0;\n\n function onDrop(e) {\n var cm = this;\n clearDragCursor(cm);\n\n if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) {\n return;\n }\n\n e_preventDefault(e);\n\n if (ie) {\n lastDrop = +new Date();\n }\n\n var pos = posFromMouse(cm, e, true),\n files = e.dataTransfer.files;\n\n if (!pos || cm.isReadOnly()) {\n return;\n } // Might be a file drop, in which case we simply extract the text\n // and insert it.\n\n\n if (files && files.length && window.FileReader && window.File) {\n var n = files.length,\n text = Array(n),\n read = 0;\n\n var markAsReadAndPasteIfAllFilesAreRead = function markAsReadAndPasteIfAllFilesAreRead() {\n if (++read == n) {\n operation(cm, function () {\n pos = _clipPos(cm.doc, pos);\n var change = {\n from: pos,\n to: pos,\n text: cm.doc.splitLines(text.filter(function (t) {\n return t != null;\n }).join(cm.doc.lineSeparator())),\n origin: \"paste\"\n };\n makeChange(cm.doc, change);\n setSelectionReplaceHistory(cm.doc, simpleSelection(_clipPos(cm.doc, pos), _clipPos(cm.doc, changeEnd(change))));\n })();\n }\n };\n\n var readTextFromFile = function readTextFromFile(file, i) {\n if (cm.options.allowDropFileTypes && indexOf(cm.options.allowDropFileTypes, file.type) == -1) {\n markAsReadAndPasteIfAllFilesAreRead();\n return;\n }\n\n var reader = new FileReader();\n\n reader.onerror = function () {\n return markAsReadAndPasteIfAllFilesAreRead();\n };\n\n reader.onload = function () {\n var content = reader.result;\n\n if (/[\\x00-\\x08\\x0e-\\x1f]{2}/.test(content)) {\n markAsReadAndPasteIfAllFilesAreRead();\n return;\n }\n\n text[i] = content;\n markAsReadAndPasteIfAllFilesAreRead();\n };\n\n reader.readAsText(file);\n };\n\n for (var i = 0; i < files.length; i++) {\n readTextFromFile(files[i], i);\n }\n } else {\n // Normal drop\n // Don't do a replace if the drop happened inside of the selected text.\n if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) {\n cm.state.draggingText(e); // Ensure the editor is re-focused\n\n setTimeout(function () {\n return cm.display.input.focus();\n }, 20);\n return;\n }\n\n try {\n var text$1 = e.dataTransfer.getData(\"Text\");\n\n if (text$1) {\n var selected;\n\n if (cm.state.draggingText && !cm.state.draggingText.copy) {\n selected = cm.listSelections();\n }\n\n setSelectionNoUndo(cm.doc, simpleSelection(pos, pos));\n\n if (selected) {\n for (var i$1 = 0; i$1 < selected.length; ++i$1) {\n _replaceRange(cm.doc, \"\", selected[i$1].anchor, selected[i$1].head, \"drag\");\n }\n }\n\n cm.replaceSelection(text$1, \"around\", \"paste\");\n cm.display.input.focus();\n }\n } catch (e$1) {}\n }\n }\n\n function onDragStart(cm, e) {\n if (ie && (!cm.state.draggingText || +new Date() - lastDrop < 100)) {\n e_stop(e);\n return;\n }\n\n if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) {\n return;\n }\n\n e.dataTransfer.setData(\"Text\", cm.getSelection());\n e.dataTransfer.effectAllowed = \"copyMove\"; // Use dummy image instead of default browsers image.\n // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there.\n\n if (e.dataTransfer.setDragImage && !safari) {\n var img = elt(\"img\", null, null, \"position: fixed; left: 0; top: 0;\");\n img.src = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n\n if (presto) {\n img.width = img.height = 1;\n cm.display.wrapper.appendChild(img); // Force a relayout, or Opera won't use our image for some obscure reason\n\n img._top = img.offsetTop;\n }\n\n e.dataTransfer.setDragImage(img, 0, 0);\n\n if (presto) {\n img.parentNode.removeChild(img);\n }\n }\n }\n\n function onDragOver(cm, e) {\n var pos = posFromMouse(cm, e);\n\n if (!pos) {\n return;\n }\n\n var frag = document.createDocumentFragment();\n drawSelectionCursor(cm, pos, frag);\n\n if (!cm.display.dragCursor) {\n cm.display.dragCursor = elt(\"div\", null, \"CodeMirror-cursors CodeMirror-dragcursors\");\n cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv);\n }\n\n removeChildrenAndAdd(cm.display.dragCursor, frag);\n }\n\n function clearDragCursor(cm) {\n if (cm.display.dragCursor) {\n cm.display.lineSpace.removeChild(cm.display.dragCursor);\n cm.display.dragCursor = null;\n }\n } // These must be handled carefully, because naively registering a\n // handler for each editor will cause the editors to never be\n // garbage collected.\n\n\n function forEachCodeMirror(f) {\n if (!document.getElementsByClassName) {\n return;\n }\n\n var byClass = document.getElementsByClassName(\"CodeMirror\"),\n editors = [];\n\n for (var i = 0; i < byClass.length; i++) {\n var cm = byClass[i].CodeMirror;\n\n if (cm) {\n editors.push(cm);\n }\n }\n\n if (editors.length) {\n editors[0].operation(function () {\n for (var i = 0; i < editors.length; i++) {\n f(editors[i]);\n }\n });\n }\n }\n\n var globalsRegistered = false;\n\n function ensureGlobalHandlers() {\n if (globalsRegistered) {\n return;\n }\n\n registerGlobalHandlers();\n globalsRegistered = true;\n }\n\n function registerGlobalHandlers() {\n // When the window resizes, we need to refresh active editors.\n var resizeTimer;\n on(window, \"resize\", function () {\n if (resizeTimer == null) {\n resizeTimer = setTimeout(function () {\n resizeTimer = null;\n forEachCodeMirror(onResize);\n }, 100);\n }\n }); // When the window loses focus, we want to show the editor as blurred\n\n on(window, \"blur\", function () {\n return forEachCodeMirror(onBlur);\n });\n } // Called when the window resizes\n\n\n function onResize(cm) {\n var d = cm.display; // Might be a text scaling operation, clear size caches.\n\n d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;\n d.scrollbarsClipped = false;\n cm.setSize();\n }\n\n var keyNames = {\n 3: \"Pause\",\n 8: \"Backspace\",\n 9: \"Tab\",\n 13: \"Enter\",\n 16: \"Shift\",\n 17: \"Ctrl\",\n 18: \"Alt\",\n 19: \"Pause\",\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 44: \"PrintScrn\",\n 45: \"Insert\",\n 46: \"Delete\",\n 59: \";\",\n 61: \"=\",\n 91: \"Mod\",\n 92: \"Mod\",\n 93: \"Mod\",\n 106: \"*\",\n 107: \"=\",\n 109: \"-\",\n 110: \".\",\n 111: \"/\",\n 145: \"ScrollLock\",\n 173: \"-\",\n 186: \";\",\n 187: \"=\",\n 188: \",\",\n 189: \"-\",\n 190: \".\",\n 191: \"/\",\n 192: \"`\",\n 219: \"[\",\n 220: \"\\\\\",\n 221: \"]\",\n 222: \"'\",\n 224: \"Mod\",\n 63232: \"Up\",\n 63233: \"Down\",\n 63234: \"Left\",\n 63235: \"Right\",\n 63272: \"Delete\",\n 63273: \"Home\",\n 63275: \"End\",\n 63276: \"PageUp\",\n 63277: \"PageDown\",\n 63302: \"Insert\"\n }; // Number keys\n\n for (var i = 0; i < 10; i++) {\n keyNames[i + 48] = keyNames[i + 96] = String(i);\n } // Alphabetic keys\n\n\n for (var i$1 = 65; i$1 <= 90; i$1++) {\n keyNames[i$1] = String.fromCharCode(i$1);\n } // Function keys\n\n\n for (var i$2 = 1; i$2 <= 12; i$2++) {\n keyNames[i$2 + 111] = keyNames[i$2 + 63235] = \"F\" + i$2;\n }\n\n var keyMap = {};\n keyMap.basic = {\n \"Left\": \"goCharLeft\",\n \"Right\": \"goCharRight\",\n \"Up\": \"goLineUp\",\n \"Down\": \"goLineDown\",\n \"End\": \"goLineEnd\",\n \"Home\": \"goLineStartSmart\",\n \"PageUp\": \"goPageUp\",\n \"PageDown\": \"goPageDown\",\n \"Delete\": \"delCharAfter\",\n \"Backspace\": \"delCharBefore\",\n \"Shift-Backspace\": \"delCharBefore\",\n \"Tab\": \"defaultTab\",\n \"Shift-Tab\": \"indentAuto\",\n \"Enter\": \"newlineAndIndent\",\n \"Insert\": \"toggleOverwrite\",\n \"Esc\": \"singleSelection\"\n }; // Note that the save and find-related commands aren't defined by\n // default. User code or addons can define them. Unknown commands\n // are simply ignored.\n\n keyMap.pcDefault = {\n \"Ctrl-A\": \"selectAll\",\n \"Ctrl-D\": \"deleteLine\",\n \"Ctrl-Z\": \"undo\",\n \"Shift-Ctrl-Z\": \"redo\",\n \"Ctrl-Y\": \"redo\",\n \"Ctrl-Home\": \"goDocStart\",\n \"Ctrl-End\": \"goDocEnd\",\n \"Ctrl-Up\": \"goLineUp\",\n \"Ctrl-Down\": \"goLineDown\",\n \"Ctrl-Left\": \"goGroupLeft\",\n \"Ctrl-Right\": \"goGroupRight\",\n \"Alt-Left\": \"goLineStart\",\n \"Alt-Right\": \"goLineEnd\",\n \"Ctrl-Backspace\": \"delGroupBefore\",\n \"Ctrl-Delete\": \"delGroupAfter\",\n \"Ctrl-S\": \"save\",\n \"Ctrl-F\": \"find\",\n \"Ctrl-G\": \"findNext\",\n \"Shift-Ctrl-G\": \"findPrev\",\n \"Shift-Ctrl-F\": \"replace\",\n \"Shift-Ctrl-R\": \"replaceAll\",\n \"Ctrl-[\": \"indentLess\",\n \"Ctrl-]\": \"indentMore\",\n \"Ctrl-U\": \"undoSelection\",\n \"Shift-Ctrl-U\": \"redoSelection\",\n \"Alt-U\": \"redoSelection\",\n \"fallthrough\": \"basic\"\n }; // Very basic readline/emacs-style bindings, which are standard on Mac.\n\n keyMap.emacsy = {\n \"Ctrl-F\": \"goCharRight\",\n \"Ctrl-B\": \"goCharLeft\",\n \"Ctrl-P\": \"goLineUp\",\n \"Ctrl-N\": \"goLineDown\",\n \"Ctrl-A\": \"goLineStart\",\n \"Ctrl-E\": \"goLineEnd\",\n \"Ctrl-V\": \"goPageDown\",\n \"Shift-Ctrl-V\": \"goPageUp\",\n \"Ctrl-D\": \"delCharAfter\",\n \"Ctrl-H\": \"delCharBefore\",\n \"Alt-Backspace\": \"delWordBefore\",\n \"Ctrl-K\": \"killLine\",\n \"Ctrl-T\": \"transposeChars\",\n \"Ctrl-O\": \"openLine\"\n };\n keyMap.macDefault = {\n \"Cmd-A\": \"selectAll\",\n \"Cmd-D\": \"deleteLine\",\n \"Cmd-Z\": \"undo\",\n \"Shift-Cmd-Z\": \"redo\",\n \"Cmd-Y\": \"redo\",\n \"Cmd-Home\": \"goDocStart\",\n \"Cmd-Up\": \"goDocStart\",\n \"Cmd-End\": \"goDocEnd\",\n \"Cmd-Down\": \"goDocEnd\",\n \"Alt-Left\": \"goGroupLeft\",\n \"Alt-Right\": \"goGroupRight\",\n \"Cmd-Left\": \"goLineLeft\",\n \"Cmd-Right\": \"goLineRight\",\n \"Alt-Backspace\": \"delGroupBefore\",\n \"Ctrl-Alt-Backspace\": \"delGroupAfter\",\n \"Alt-Delete\": \"delGroupAfter\",\n \"Cmd-S\": \"save\",\n \"Cmd-F\": \"find\",\n \"Cmd-G\": \"findNext\",\n \"Shift-Cmd-G\": \"findPrev\",\n \"Cmd-Alt-F\": \"replace\",\n \"Shift-Cmd-Alt-F\": \"replaceAll\",\n \"Cmd-[\": \"indentLess\",\n \"Cmd-]\": \"indentMore\",\n \"Cmd-Backspace\": \"delWrappedLineLeft\",\n \"Cmd-Delete\": \"delWrappedLineRight\",\n \"Cmd-U\": \"undoSelection\",\n \"Shift-Cmd-U\": \"redoSelection\",\n \"Ctrl-Up\": \"goDocStart\",\n \"Ctrl-Down\": \"goDocEnd\",\n \"fallthrough\": [\"basic\", \"emacsy\"]\n };\n keyMap[\"default\"] = mac ? keyMap.macDefault : keyMap.pcDefault; // KEYMAP DISPATCH\n\n function normalizeKeyName(name) {\n var parts = name.split(/-(?!$)/);\n name = parts[parts.length - 1];\n var alt, ctrl, shift, cmd;\n\n for (var i = 0; i < parts.length - 1; i++) {\n var mod = parts[i];\n\n if (/^(cmd|meta|m)$/i.test(mod)) {\n cmd = true;\n } else if (/^a(lt)?$/i.test(mod)) {\n alt = true;\n } else if (/^(c|ctrl|control)$/i.test(mod)) {\n ctrl = true;\n } else if (/^s(hift)?$/i.test(mod)) {\n shift = true;\n } else {\n throw new Error(\"Unrecognized modifier name: \" + mod);\n }\n }\n\n if (alt) {\n name = \"Alt-\" + name;\n }\n\n if (ctrl) {\n name = \"Ctrl-\" + name;\n }\n\n if (cmd) {\n name = \"Cmd-\" + name;\n }\n\n if (shift) {\n name = \"Shift-\" + name;\n }\n\n return name;\n } // This is a kludge to keep keymaps mostly working as raw objects\n // (backwards compatibility) while at the same time support features\n // like normalization and multi-stroke key bindings. It compiles a\n // new normalized keymap, and then updates the old object to reflect\n // this.\n\n\n function normalizeKeyMap(keymap) {\n var copy = {};\n\n for (var keyname in keymap) {\n if (keymap.hasOwnProperty(keyname)) {\n var value = keymap[keyname];\n\n if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) {\n continue;\n }\n\n if (value == \"...\") {\n delete keymap[keyname];\n continue;\n }\n\n var keys = map(keyname.split(\" \"), normalizeKeyName);\n\n for (var i = 0; i < keys.length; i++) {\n var val = void 0,\n name = void 0;\n\n if (i == keys.length - 1) {\n name = keys.join(\" \");\n val = value;\n } else {\n name = keys.slice(0, i + 1).join(\" \");\n val = \"...\";\n }\n\n var prev = copy[name];\n\n if (!prev) {\n copy[name] = val;\n } else if (prev != val) {\n throw new Error(\"Inconsistent bindings for \" + name);\n }\n }\n\n delete keymap[keyname];\n }\n }\n\n for (var prop in copy) {\n keymap[prop] = copy[prop];\n }\n\n return keymap;\n }\n\n function lookupKey(key, map, handle, context) {\n map = getKeyMap(map);\n var found = map.call ? map.call(key, context) : map[key];\n\n if (found === false) {\n return \"nothing\";\n }\n\n if (found === \"...\") {\n return \"multi\";\n }\n\n if (found != null && handle(found)) {\n return \"handled\";\n }\n\n if (map.fallthrough) {\n if (Object.prototype.toString.call(map.fallthrough) != \"[object Array]\") {\n return lookupKey(key, map.fallthrough, handle, context);\n }\n\n for (var i = 0; i < map.fallthrough.length; i++) {\n var result = lookupKey(key, map.fallthrough[i], handle, context);\n\n if (result) {\n return result;\n }\n }\n }\n } // Modifier key presses don't count as 'real' key presses for the\n // purpose of keymap fallthrough.\n\n\n function isModifierKey(value) {\n var name = typeof value == \"string\" ? value : keyNames[value.keyCode];\n return name == \"Ctrl\" || name == \"Alt\" || name == \"Shift\" || name == \"Mod\";\n }\n\n function addModifierNames(name, event, noShift) {\n var base = name;\n\n if (event.altKey && base != \"Alt\") {\n name = \"Alt-\" + name;\n }\n\n if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != \"Ctrl\") {\n name = \"Ctrl-\" + name;\n }\n\n if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != \"Mod\") {\n name = \"Cmd-\" + name;\n }\n\n if (!noShift && event.shiftKey && base != \"Shift\") {\n name = \"Shift-\" + name;\n }\n\n return name;\n } // Look up the name of a key as indicated by an event object.\n\n\n function keyName(event, noShift) {\n if (presto && event.keyCode == 34 && event[\"char\"]) {\n return false;\n }\n\n var name = keyNames[event.keyCode];\n\n if (name == null || event.altGraphKey) {\n return false;\n } // Ctrl-ScrollLock has keyCode 3, same as Ctrl-Pause,\n // so we'll use event.code when available (Chrome 48+, FF 38+, Safari 10.1+)\n\n\n if (event.keyCode == 3 && event.code) {\n name = event.code;\n }\n\n return addModifierNames(name, event, noShift);\n }\n\n function getKeyMap(val) {\n return typeof val == \"string\" ? keyMap[val] : val;\n } // Helper for deleting text near the selection(s), used to implement\n // backspace, delete, and similar functionality.\n\n\n function deleteNearSelection(cm, compute) {\n var ranges = cm.doc.sel.ranges,\n kill = []; // Build up a set of ranges to kill first, merging overlapping\n // ranges.\n\n for (var i = 0; i < ranges.length; i++) {\n var toKill = compute(ranges[i]);\n\n while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) {\n var replaced = kill.pop();\n\n if (cmp(replaced.from, toKill.from) < 0) {\n toKill.from = replaced.from;\n break;\n }\n }\n\n kill.push(toKill);\n } // Next, remove those actual ranges.\n\n\n runInOp(cm, function () {\n for (var i = kill.length - 1; i >= 0; i--) {\n _replaceRange(cm.doc, \"\", kill[i].from, kill[i].to, \"+delete\");\n }\n\n ensureCursorVisible(cm);\n });\n }\n\n function moveCharLogically(line, ch, dir) {\n var target = skipExtendingChars(line.text, ch + dir, dir);\n return target < 0 || target > line.text.length ? null : target;\n }\n\n function moveLogically(line, start, dir) {\n var ch = moveCharLogically(line, start.ch, dir);\n return ch == null ? null : new Pos(start.line, ch, dir < 0 ? \"after\" : \"before\");\n }\n\n function endOfLine(visually, cm, lineObj, lineNo, dir) {\n if (visually) {\n if (cm.doc.direction == \"rtl\") {\n dir = -dir;\n }\n\n var order = getOrder(lineObj, cm.doc.direction);\n\n if (order) {\n var part = dir < 0 ? lst(order) : order[0];\n var moveInStorageOrder = dir < 0 == (part.level == 1);\n var sticky = moveInStorageOrder ? \"after\" : \"before\";\n var ch; // With a wrapped rtl chunk (possibly spanning multiple bidi parts),\n // it could be that the last bidi part is not on the last visual line,\n // since visual lines contain content order-consecutive chunks.\n // Thus, in rtl, we are looking for the first (content-order) character\n // in the rtl chunk that is on the last line (that is, the same line\n // as the last (content-order) character).\n\n if (part.level > 0 || cm.doc.direction == \"rtl\") {\n var prep = prepareMeasureForLine(cm, lineObj);\n ch = dir < 0 ? lineObj.text.length - 1 : 0;\n var targetTop = measureCharPrepared(cm, prep, ch).top;\n ch = findFirst(function (ch) {\n return measureCharPrepared(cm, prep, ch).top == targetTop;\n }, dir < 0 == (part.level == 1) ? part.from : part.to - 1, ch);\n\n if (sticky == \"before\") {\n ch = moveCharLogically(lineObj, ch, 1);\n }\n } else {\n ch = dir < 0 ? part.to : part.from;\n }\n\n return new Pos(lineNo, ch, sticky);\n }\n }\n\n return new Pos(lineNo, dir < 0 ? lineObj.text.length : 0, dir < 0 ? \"before\" : \"after\");\n }\n\n function moveVisually(cm, line, start, dir) {\n var bidi = getOrder(line, cm.doc.direction);\n\n if (!bidi) {\n return moveLogically(line, start, dir);\n }\n\n if (start.ch >= line.text.length) {\n start.ch = line.text.length;\n start.sticky = \"before\";\n } else if (start.ch <= 0) {\n start.ch = 0;\n start.sticky = \"after\";\n }\n\n var partPos = getBidiPartAt(bidi, start.ch, start.sticky),\n part = bidi[partPos];\n\n if (cm.doc.direction == \"ltr\" && part.level % 2 == 0 && (dir > 0 ? part.to > start.ch : part.from < start.ch)) {\n // Case 1: We move within an ltr part in an ltr editor. Even with wrapped lines,\n // nothing interesting happens.\n return moveLogically(line, start, dir);\n }\n\n var mv = function mv(pos, dir) {\n return moveCharLogically(line, pos instanceof Pos ? pos.ch : pos, dir);\n };\n\n var prep;\n\n var getWrappedLineExtent = function getWrappedLineExtent(ch) {\n if (!cm.options.lineWrapping) {\n return {\n begin: 0,\n end: line.text.length\n };\n }\n\n prep = prep || prepareMeasureForLine(cm, line);\n return wrappedLineExtentChar(cm, line, prep, ch);\n };\n\n var wrappedLineExtent = getWrappedLineExtent(start.sticky == \"before\" ? mv(start, -1) : start.ch);\n\n if (cm.doc.direction == \"rtl\" || part.level == 1) {\n var moveInStorageOrder = part.level == 1 == dir < 0;\n var ch = mv(start, moveInStorageOrder ? 1 : -1);\n\n if (ch != null && (!moveInStorageOrder ? ch >= part.from && ch >= wrappedLineExtent.begin : ch <= part.to && ch <= wrappedLineExtent.end)) {\n // Case 2: We move within an rtl part or in an rtl editor on the same visual line\n var sticky = moveInStorageOrder ? \"before\" : \"after\";\n return new Pos(start.line, ch, sticky);\n }\n } // Case 3: Could not move within this bidi part in this visual line, so leave\n // the current bidi part\n\n\n var searchInVisualLine = function searchInVisualLine(partPos, dir, wrappedLineExtent) {\n var getRes = function getRes(ch, moveInStorageOrder) {\n return moveInStorageOrder ? new Pos(start.line, mv(ch, 1), \"before\") : new Pos(start.line, ch, \"after\");\n };\n\n for (; partPos >= 0 && partPos < bidi.length; partPos += dir) {\n var part = bidi[partPos];\n var moveInStorageOrder = dir > 0 == (part.level != 1);\n var ch = moveInStorageOrder ? wrappedLineExtent.begin : mv(wrappedLineExtent.end, -1);\n\n if (part.from <= ch && ch < part.to) {\n return getRes(ch, moveInStorageOrder);\n }\n\n ch = moveInStorageOrder ? part.from : mv(part.to, -1);\n\n if (wrappedLineExtent.begin <= ch && ch < wrappedLineExtent.end) {\n return getRes(ch, moveInStorageOrder);\n }\n }\n }; // Case 3a: Look for other bidi parts on the same visual line\n\n\n var res = searchInVisualLine(partPos + dir, dir, wrappedLineExtent);\n\n if (res) {\n return res;\n } // Case 3b: Look for other bidi parts on the next visual line\n\n\n var nextCh = dir > 0 ? wrappedLineExtent.end : mv(wrappedLineExtent.begin, -1);\n\n if (nextCh != null && !(dir > 0 && nextCh == line.text.length)) {\n res = searchInVisualLine(dir > 0 ? 0 : bidi.length - 1, dir, getWrappedLineExtent(nextCh));\n\n if (res) {\n return res;\n }\n } // Case 4: Nowhere to move\n\n\n return null;\n } // Commands are parameter-less actions that can be performed on an\n // editor, mostly used for keybindings.\n\n\n var commands = {\n selectAll: selectAll,\n singleSelection: function singleSelection(cm) {\n return cm.setSelection(cm.getCursor(\"anchor\"), cm.getCursor(\"head\"), sel_dontScroll);\n },\n killLine: function killLine(cm) {\n return deleteNearSelection(cm, function (range) {\n if (range.empty()) {\n var len = getLine(cm.doc, range.head.line).text.length;\n\n if (range.head.ch == len && range.head.line < cm.lastLine()) {\n return {\n from: range.head,\n to: Pos(range.head.line + 1, 0)\n };\n } else {\n return {\n from: range.head,\n to: Pos(range.head.line, len)\n };\n }\n } else {\n return {\n from: range.from(),\n to: range.to()\n };\n }\n });\n },\n deleteLine: function deleteLine(cm) {\n return deleteNearSelection(cm, function (range) {\n return {\n from: Pos(range.from().line, 0),\n to: _clipPos(cm.doc, Pos(range.to().line + 1, 0))\n };\n });\n },\n delLineLeft: function delLineLeft(cm) {\n return deleteNearSelection(cm, function (range) {\n return {\n from: Pos(range.from().line, 0),\n to: range.from()\n };\n });\n },\n delWrappedLineLeft: function delWrappedLineLeft(cm) {\n return deleteNearSelection(cm, function (range) {\n var top = cm.charCoords(range.head, \"div\").top + 5;\n var leftPos = cm.coordsChar({\n left: 0,\n top: top\n }, \"div\");\n return {\n from: leftPos,\n to: range.from()\n };\n });\n },\n delWrappedLineRight: function delWrappedLineRight(cm) {\n return deleteNearSelection(cm, function (range) {\n var top = cm.charCoords(range.head, \"div\").top + 5;\n var rightPos = cm.coordsChar({\n left: cm.display.lineDiv.offsetWidth + 100,\n top: top\n }, \"div\");\n return {\n from: range.from(),\n to: rightPos\n };\n });\n },\n undo: function undo(cm) {\n return cm.undo();\n },\n redo: function redo(cm) {\n return cm.redo();\n },\n undoSelection: function undoSelection(cm) {\n return cm.undoSelection();\n },\n redoSelection: function redoSelection(cm) {\n return cm.redoSelection();\n },\n goDocStart: function goDocStart(cm) {\n return cm.extendSelection(Pos(cm.firstLine(), 0));\n },\n goDocEnd: function goDocEnd(cm) {\n return cm.extendSelection(Pos(cm.lastLine()));\n },\n goLineStart: function goLineStart(cm) {\n return cm.extendSelectionsBy(function (range) {\n return lineStart(cm, range.head.line);\n }, {\n origin: \"+move\",\n bias: 1\n });\n },\n goLineStartSmart: function goLineStartSmart(cm) {\n return cm.extendSelectionsBy(function (range) {\n return lineStartSmart(cm, range.head);\n }, {\n origin: \"+move\",\n bias: 1\n });\n },\n goLineEnd: function goLineEnd(cm) {\n return cm.extendSelectionsBy(function (range) {\n return lineEnd(cm, range.head.line);\n }, {\n origin: \"+move\",\n bias: -1\n });\n },\n goLineRight: function goLineRight(cm) {\n return cm.extendSelectionsBy(function (range) {\n var top = cm.cursorCoords(range.head, \"div\").top + 5;\n return cm.coordsChar({\n left: cm.display.lineDiv.offsetWidth + 100,\n top: top\n }, \"div\");\n }, sel_move);\n },\n goLineLeft: function goLineLeft(cm) {\n return cm.extendSelectionsBy(function (range) {\n var top = cm.cursorCoords(range.head, \"div\").top + 5;\n return cm.coordsChar({\n left: 0,\n top: top\n }, \"div\");\n }, sel_move);\n },\n goLineLeftSmart: function goLineLeftSmart(cm) {\n return cm.extendSelectionsBy(function (range) {\n var top = cm.cursorCoords(range.head, \"div\").top + 5;\n var pos = cm.coordsChar({\n left: 0,\n top: top\n }, \"div\");\n\n if (pos.ch < cm.getLine(pos.line).search(/\\S/)) {\n return lineStartSmart(cm, range.head);\n }\n\n return pos;\n }, sel_move);\n },\n goLineUp: function goLineUp(cm) {\n return cm.moveV(-1, \"line\");\n },\n goLineDown: function goLineDown(cm) {\n return cm.moveV(1, \"line\");\n },\n goPageUp: function goPageUp(cm) {\n return cm.moveV(-1, \"page\");\n },\n goPageDown: function goPageDown(cm) {\n return cm.moveV(1, \"page\");\n },\n goCharLeft: function goCharLeft(cm) {\n return cm.moveH(-1, \"char\");\n },\n goCharRight: function goCharRight(cm) {\n return cm.moveH(1, \"char\");\n },\n goColumnLeft: function goColumnLeft(cm) {\n return cm.moveH(-1, \"column\");\n },\n goColumnRight: function goColumnRight(cm) {\n return cm.moveH(1, \"column\");\n },\n goWordLeft: function goWordLeft(cm) {\n return cm.moveH(-1, \"word\");\n },\n goGroupRight: function goGroupRight(cm) {\n return cm.moveH(1, \"group\");\n },\n goGroupLeft: function goGroupLeft(cm) {\n return cm.moveH(-1, \"group\");\n },\n goWordRight: function goWordRight(cm) {\n return cm.moveH(1, \"word\");\n },\n delCharBefore: function delCharBefore(cm) {\n return cm.deleteH(-1, \"codepoint\");\n },\n delCharAfter: function delCharAfter(cm) {\n return cm.deleteH(1, \"char\");\n },\n delWordBefore: function delWordBefore(cm) {\n return cm.deleteH(-1, \"word\");\n },\n delWordAfter: function delWordAfter(cm) {\n return cm.deleteH(1, \"word\");\n },\n delGroupBefore: function delGroupBefore(cm) {\n return cm.deleteH(-1, \"group\");\n },\n delGroupAfter: function delGroupAfter(cm) {\n return cm.deleteH(1, \"group\");\n },\n indentAuto: function indentAuto(cm) {\n return cm.indentSelection(\"smart\");\n },\n indentMore: function indentMore(cm) {\n return cm.indentSelection(\"add\");\n },\n indentLess: function indentLess(cm) {\n return cm.indentSelection(\"subtract\");\n },\n insertTab: function insertTab(cm) {\n return cm.replaceSelection(\"\\t\");\n },\n insertSoftTab: function insertSoftTab(cm) {\n var spaces = [],\n ranges = cm.listSelections(),\n tabSize = cm.options.tabSize;\n\n for (var i = 0; i < ranges.length; i++) {\n var pos = ranges[i].from();\n var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize);\n spaces.push(spaceStr(tabSize - col % tabSize));\n }\n\n cm.replaceSelections(spaces);\n },\n defaultTab: function defaultTab(cm) {\n if (cm.somethingSelected()) {\n cm.indentSelection(\"add\");\n } else {\n cm.execCommand(\"insertTab\");\n }\n },\n // Swap the two chars left and right of each selection's head.\n // Move cursor behind the two swapped characters afterwards.\n //\n // Doesn't consider line feeds a character.\n // Doesn't scan more than one line above to find a character.\n // Doesn't do anything on an empty line.\n // Doesn't do anything with non-empty selections.\n transposeChars: function transposeChars(cm) {\n return runInOp(cm, function () {\n var ranges = cm.listSelections(),\n newSel = [];\n\n for (var i = 0; i < ranges.length; i++) {\n if (!ranges[i].empty()) {\n continue;\n }\n\n var cur = ranges[i].head,\n line = getLine(cm.doc, cur.line).text;\n\n if (line) {\n if (cur.ch == line.length) {\n cur = new Pos(cur.line, cur.ch - 1);\n }\n\n if (cur.ch > 0) {\n cur = new Pos(cur.line, cur.ch + 1);\n cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2), Pos(cur.line, cur.ch - 2), cur, \"+transpose\");\n } else if (cur.line > cm.doc.first) {\n var prev = getLine(cm.doc, cur.line - 1).text;\n\n if (prev) {\n cur = new Pos(cur.line, 1);\n cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() + prev.charAt(prev.length - 1), Pos(cur.line - 1, prev.length - 1), cur, \"+transpose\");\n }\n }\n }\n\n newSel.push(new Range(cur, cur));\n }\n\n cm.setSelections(newSel);\n });\n },\n newlineAndIndent: function newlineAndIndent(cm) {\n return runInOp(cm, function () {\n var sels = cm.listSelections();\n\n for (var i = sels.length - 1; i >= 0; i--) {\n cm.replaceRange(cm.doc.lineSeparator(), sels[i].anchor, sels[i].head, \"+input\");\n }\n\n sels = cm.listSelections();\n\n for (var i$1 = 0; i$1 < sels.length; i$1++) {\n cm.indentLine(sels[i$1].from().line, null, true);\n }\n\n ensureCursorVisible(cm);\n });\n },\n openLine: function openLine(cm) {\n return cm.replaceSelection(\"\\n\", \"start\");\n },\n toggleOverwrite: function toggleOverwrite(cm) {\n return cm.toggleOverwrite();\n }\n };\n\n function lineStart(cm, lineN) {\n var line = getLine(cm.doc, lineN);\n var visual = visualLine(line);\n\n if (visual != line) {\n lineN = lineNo(visual);\n }\n\n return endOfLine(true, cm, visual, lineN, 1);\n }\n\n function lineEnd(cm, lineN) {\n var line = getLine(cm.doc, lineN);\n var visual = visualLineEnd(line);\n\n if (visual != line) {\n lineN = lineNo(visual);\n }\n\n return endOfLine(true, cm, line, lineN, -1);\n }\n\n function lineStartSmart(cm, pos) {\n var start = lineStart(cm, pos.line);\n var line = getLine(cm.doc, start.line);\n var order = getOrder(line, cm.doc.direction);\n\n if (!order || order[0].level == 0) {\n var firstNonWS = Math.max(start.ch, line.text.search(/\\S/));\n var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch;\n return Pos(start.line, inWS ? 0 : firstNonWS, start.sticky);\n }\n\n return start;\n } // Run a handler that was bound to a key.\n\n\n function doHandleBinding(cm, bound, dropShift) {\n if (typeof bound == \"string\") {\n bound = commands[bound];\n\n if (!bound) {\n return false;\n }\n } // Ensure previous input has been read, so that the handler sees a\n // consistent view of the document\n\n\n cm.display.input.ensurePolled();\n var prevShift = cm.display.shift,\n done = false;\n\n try {\n if (cm.isReadOnly()) {\n cm.state.suppressEdits = true;\n }\n\n if (dropShift) {\n cm.display.shift = false;\n }\n\n done = bound(cm) != Pass;\n } finally {\n cm.display.shift = prevShift;\n cm.state.suppressEdits = false;\n }\n\n return done;\n }\n\n function lookupKeyForEditor(cm, name, handle) {\n for (var i = 0; i < cm.state.keyMaps.length; i++) {\n var result = lookupKey(name, cm.state.keyMaps[i], handle, cm);\n\n if (result) {\n return result;\n }\n }\n\n return cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm) || lookupKey(name, cm.options.keyMap, handle, cm);\n } // Note that, despite the name, this function is also used to check\n // for bound mouse clicks.\n\n\n var stopSeq = new Delayed();\n\n function dispatchKey(cm, name, e, handle) {\n var seq = cm.state.keySeq;\n\n if (seq) {\n if (isModifierKey(name)) {\n return \"handled\";\n }\n\n if (/\\'$/.test(name)) {\n cm.state.keySeq = null;\n } else {\n stopSeq.set(50, function () {\n if (cm.state.keySeq == seq) {\n cm.state.keySeq = null;\n cm.display.input.reset();\n }\n });\n }\n\n if (dispatchKeyInner(cm, seq + \" \" + name, e, handle)) {\n return true;\n }\n }\n\n return dispatchKeyInner(cm, name, e, handle);\n }\n\n function dispatchKeyInner(cm, name, e, handle) {\n var result = lookupKeyForEditor(cm, name, handle);\n\n if (result == \"multi\") {\n cm.state.keySeq = name;\n }\n\n if (result == \"handled\") {\n signalLater(cm, \"keyHandled\", cm, name, e);\n }\n\n if (result == \"handled\" || result == \"multi\") {\n e_preventDefault(e);\n restartBlink(cm);\n }\n\n return !!result;\n } // Handle a key from the keydown event.\n\n\n function handleKeyBinding(cm, e) {\n var name = keyName(e, true);\n\n if (!name) {\n return false;\n }\n\n if (e.shiftKey && !cm.state.keySeq) {\n // First try to resolve full name (including 'Shift-'). Failing\n // that, see if there is a cursor-motion command (starting with\n // 'go') bound to the keyname without 'Shift-'.\n return dispatchKey(cm, \"Shift-\" + name, e, function (b) {\n return doHandleBinding(cm, b, true);\n }) || dispatchKey(cm, name, e, function (b) {\n if (typeof b == \"string\" ? /^go[A-Z]/.test(b) : b.motion) {\n return doHandleBinding(cm, b);\n }\n });\n } else {\n return dispatchKey(cm, name, e, function (b) {\n return doHandleBinding(cm, b);\n });\n }\n } // Handle a key from the keypress event\n\n\n function handleCharBinding(cm, e, ch) {\n return dispatchKey(cm, \"'\" + ch + \"'\", e, function (b) {\n return doHandleBinding(cm, b, true);\n });\n }\n\n var lastStoppedKey = null;\n\n function onKeyDown(e) {\n var cm = this;\n\n if (e.target && e.target != cm.display.input.getField()) {\n return;\n }\n\n cm.curOp.focus = activeElt();\n\n if (signalDOMEvent(cm, e)) {\n return;\n } // IE does strange things with escape.\n\n\n if (ie && ie_version < 11 && e.keyCode == 27) {\n e.returnValue = false;\n }\n\n var code = e.keyCode;\n cm.display.shift = code == 16 || e.shiftKey;\n var handled = handleKeyBinding(cm, e);\n\n if (presto) {\n lastStoppedKey = handled ? code : null; // Opera has no cut event... we try to at least catch the key combo\n\n if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey)) {\n cm.replaceSelection(\"\", null, \"cut\");\n }\n }\n\n if (gecko && !mac && !handled && code == 46 && e.shiftKey && !e.ctrlKey && document.execCommand) {\n document.execCommand(\"cut\");\n } // Turn mouse into crosshair when Alt is held on Mac.\n\n\n if (code == 18 && !/\\bCodeMirror-crosshair\\b/.test(cm.display.lineDiv.className)) {\n showCrossHair(cm);\n }\n }\n\n function showCrossHair(cm) {\n var lineDiv = cm.display.lineDiv;\n addClass(lineDiv, \"CodeMirror-crosshair\");\n\n function up(e) {\n if (e.keyCode == 18 || !e.altKey) {\n rmClass(lineDiv, \"CodeMirror-crosshair\");\n off(document, \"keyup\", up);\n off(document, \"mouseover\", up);\n }\n }\n\n on(document, \"keyup\", up);\n on(document, \"mouseover\", up);\n }\n\n function onKeyUp(e) {\n if (e.keyCode == 16) {\n this.doc.sel.shift = false;\n }\n\n signalDOMEvent(this, e);\n }\n\n function onKeyPress(e) {\n var cm = this;\n\n if (e.target && e.target != cm.display.input.getField()) {\n return;\n }\n\n if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) {\n return;\n }\n\n var keyCode = e.keyCode,\n charCode = e.charCode;\n\n if (presto && keyCode == lastStoppedKey) {\n lastStoppedKey = null;\n e_preventDefault(e);\n return;\n }\n\n if (presto && (!e.which || e.which < 10) && handleKeyBinding(cm, e)) {\n return;\n }\n\n var ch = String.fromCharCode(charCode == null ? keyCode : charCode); // Some browsers fire keypress events for backspace\n\n if (ch == \"\\x08\") {\n return;\n }\n\n if (handleCharBinding(cm, e, ch)) {\n return;\n }\n\n cm.display.input.onKeyPress(e);\n }\n\n var DOUBLECLICK_DELAY = 400;\n\n var PastClick = function PastClick(time, pos, button) {\n this.time = time;\n this.pos = pos;\n this.button = button;\n };\n\n PastClick.prototype.compare = function (time, pos, button) {\n return this.time + DOUBLECLICK_DELAY > time && cmp(pos, this.pos) == 0 && button == this.button;\n };\n\n var lastClick, lastDoubleClick;\n\n function clickRepeat(pos, button) {\n var now = +new Date();\n\n if (lastDoubleClick && lastDoubleClick.compare(now, pos, button)) {\n lastClick = lastDoubleClick = null;\n return \"triple\";\n } else if (lastClick && lastClick.compare(now, pos, button)) {\n lastDoubleClick = new PastClick(now, pos, button);\n lastClick = null;\n return \"double\";\n } else {\n lastClick = new PastClick(now, pos, button);\n lastDoubleClick = null;\n return \"single\";\n }\n } // A mouse down can be a single click, double click, triple click,\n // start of selection drag, start of text drag, new cursor\n // (ctrl-click), rectangle drag (alt-drag), or xwin\n // middle-click-paste. Or it might be a click on something we should\n // not interfere with, such as a scrollbar or widget.\n\n\n function onMouseDown(e) {\n var cm = this,\n display = cm.display;\n\n if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) {\n return;\n }\n\n display.input.ensurePolled();\n display.shift = e.shiftKey;\n\n if (eventInWidget(display, e)) {\n if (!webkit) {\n // Briefly turn off draggability, to allow widgets to do\n // normal dragging things.\n display.scroller.draggable = false;\n setTimeout(function () {\n return display.scroller.draggable = true;\n }, 100);\n }\n\n return;\n }\n\n if (clickInGutter(cm, e)) {\n return;\n }\n\n var pos = posFromMouse(cm, e),\n button = e_button(e),\n repeat = pos ? clickRepeat(pos, button) : \"single\";\n window.focus(); // #3261: make sure, that we're not starting a second selection\n\n if (button == 1 && cm.state.selectingText) {\n cm.state.selectingText(e);\n }\n\n if (pos && handleMappedButton(cm, button, pos, repeat, e)) {\n return;\n }\n\n if (button == 1) {\n if (pos) {\n leftButtonDown(cm, pos, repeat, e);\n } else if (e_target(e) == display.scroller) {\n e_preventDefault(e);\n }\n } else if (button == 2) {\n if (pos) {\n extendSelection(cm.doc, pos);\n }\n\n setTimeout(function () {\n return display.input.focus();\n }, 20);\n } else if (button == 3) {\n if (captureRightClick) {\n cm.display.input.onContextMenu(e);\n } else {\n delayBlurEvent(cm);\n }\n }\n }\n\n function handleMappedButton(cm, button, pos, repeat, event) {\n var name = \"Click\";\n\n if (repeat == \"double\") {\n name = \"Double\" + name;\n } else if (repeat == \"triple\") {\n name = \"Triple\" + name;\n }\n\n name = (button == 1 ? \"Left\" : button == 2 ? \"Middle\" : \"Right\") + name;\n return dispatchKey(cm, addModifierNames(name, event), event, function (bound) {\n if (typeof bound == \"string\") {\n bound = commands[bound];\n }\n\n if (!bound) {\n return false;\n }\n\n var done = false;\n\n try {\n if (cm.isReadOnly()) {\n cm.state.suppressEdits = true;\n }\n\n done = bound(cm, pos) != Pass;\n } finally {\n cm.state.suppressEdits = false;\n }\n\n return done;\n });\n }\n\n function configureMouse(cm, repeat, event) {\n var option = cm.getOption(\"configureMouse\");\n var value = option ? option(cm, repeat, event) : {};\n\n if (value.unit == null) {\n var rect = chromeOS ? event.shiftKey && event.metaKey : event.altKey;\n value.unit = rect ? \"rectangle\" : repeat == \"single\" ? \"char\" : repeat == \"double\" ? \"word\" : \"line\";\n }\n\n if (value.extend == null || cm.doc.extend) {\n value.extend = cm.doc.extend || event.shiftKey;\n }\n\n if (value.addNew == null) {\n value.addNew = mac ? event.metaKey : event.ctrlKey;\n }\n\n if (value.moveOnDrag == null) {\n value.moveOnDrag = !(mac ? event.altKey : event.ctrlKey);\n }\n\n return value;\n }\n\n function leftButtonDown(cm, pos, repeat, event) {\n if (ie) {\n setTimeout(bind(ensureFocus, cm), 0);\n } else {\n cm.curOp.focus = activeElt();\n }\n\n var behavior = configureMouse(cm, repeat, event);\n var sel = cm.doc.sel,\n contained;\n\n if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() && repeat == \"single\" && (contained = sel.contains(pos)) > -1 && (cmp((contained = sel.ranges[contained]).from(), pos) < 0 || pos.xRel > 0) && (cmp(contained.to(), pos) > 0 || pos.xRel < 0)) {\n leftButtonStartDrag(cm, event, pos, behavior);\n } else {\n leftButtonSelect(cm, event, pos, behavior);\n }\n } // Start a text drag. When it ends, see if any dragging actually\n // happen, and treat as a click if it didn't.\n\n\n function leftButtonStartDrag(cm, event, pos, behavior) {\n var display = cm.display,\n moved = false;\n var dragEnd = operation(cm, function (e) {\n if (webkit) {\n display.scroller.draggable = false;\n }\n\n cm.state.draggingText = false;\n\n if (cm.state.delayingBlurEvent) {\n if (cm.hasFocus()) {\n cm.state.delayingBlurEvent = false;\n } else {\n delayBlurEvent(cm);\n }\n }\n\n off(display.wrapper.ownerDocument, \"mouseup\", dragEnd);\n off(display.wrapper.ownerDocument, \"mousemove\", mouseMove);\n off(display.scroller, \"dragstart\", dragStart);\n off(display.scroller, \"drop\", dragEnd);\n\n if (!moved) {\n e_preventDefault(e);\n\n if (!behavior.addNew) {\n extendSelection(cm.doc, pos, null, null, behavior.extend);\n } // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081)\n\n\n if (webkit && !safari || ie && ie_version == 9) {\n setTimeout(function () {\n display.wrapper.ownerDocument.body.focus({\n preventScroll: true\n });\n display.input.focus();\n }, 20);\n } else {\n display.input.focus();\n }\n }\n });\n\n var mouseMove = function mouseMove(e2) {\n moved = moved || Math.abs(event.clientX - e2.clientX) + Math.abs(event.clientY - e2.clientY) >= 10;\n };\n\n var dragStart = function dragStart() {\n return moved = true;\n }; // Let the drag handler handle this.\n\n\n if (webkit) {\n display.scroller.draggable = true;\n }\n\n cm.state.draggingText = dragEnd;\n dragEnd.copy = !behavior.moveOnDrag;\n on(display.wrapper.ownerDocument, \"mouseup\", dragEnd);\n on(display.wrapper.ownerDocument, \"mousemove\", mouseMove);\n on(display.scroller, \"dragstart\", dragStart);\n on(display.scroller, \"drop\", dragEnd);\n cm.state.delayingBlurEvent = true;\n setTimeout(function () {\n return display.input.focus();\n }, 20); // IE's approach to draggable\n\n if (display.scroller.dragDrop) {\n display.scroller.dragDrop();\n }\n }\n\n function rangeForUnit(cm, pos, unit) {\n if (unit == \"char\") {\n return new Range(pos, pos);\n }\n\n if (unit == \"word\") {\n return cm.findWordAt(pos);\n }\n\n if (unit == \"line\") {\n return new Range(Pos(pos.line, 0), _clipPos(cm.doc, Pos(pos.line + 1, 0)));\n }\n\n var result = unit(cm, pos);\n return new Range(result.from, result.to);\n } // Normal selection, as opposed to text dragging.\n\n\n function leftButtonSelect(cm, event, start, behavior) {\n if (ie) {\n delayBlurEvent(cm);\n }\n\n var display = cm.display,\n doc = cm.doc;\n e_preventDefault(event);\n var ourRange,\n ourIndex,\n startSel = doc.sel,\n ranges = startSel.ranges;\n\n if (behavior.addNew && !behavior.extend) {\n ourIndex = doc.sel.contains(start);\n\n if (ourIndex > -1) {\n ourRange = ranges[ourIndex];\n } else {\n ourRange = new Range(start, start);\n }\n } else {\n ourRange = doc.sel.primary();\n ourIndex = doc.sel.primIndex;\n }\n\n if (behavior.unit == \"rectangle\") {\n if (!behavior.addNew) {\n ourRange = new Range(start, start);\n }\n\n start = posFromMouse(cm, event, true, true);\n ourIndex = -1;\n } else {\n var range = rangeForUnit(cm, start, behavior.unit);\n\n if (behavior.extend) {\n ourRange = extendRange(ourRange, range.anchor, range.head, behavior.extend);\n } else {\n ourRange = range;\n }\n }\n\n if (!behavior.addNew) {\n ourIndex = 0;\n setSelection(doc, new Selection([ourRange], 0), sel_mouse);\n startSel = doc.sel;\n } else if (ourIndex == -1) {\n ourIndex = ranges.length;\n setSelection(doc, normalizeSelection(cm, ranges.concat([ourRange]), ourIndex), {\n scroll: false,\n origin: \"*mouse\"\n });\n } else if (ranges.length > 1 && ranges[ourIndex].empty() && behavior.unit == \"char\" && !behavior.extend) {\n setSelection(doc, normalizeSelection(cm, ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0), {\n scroll: false,\n origin: \"*mouse\"\n });\n startSel = doc.sel;\n } else {\n replaceOneSelection(doc, ourIndex, ourRange, sel_mouse);\n }\n\n var lastPos = start;\n\n function extendTo(pos) {\n if (cmp(lastPos, pos) == 0) {\n return;\n }\n\n lastPos = pos;\n\n if (behavior.unit == \"rectangle\") {\n var ranges = [],\n tabSize = cm.options.tabSize;\n var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize);\n var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize);\n var left = Math.min(startCol, posCol),\n right = Math.max(startCol, posCol);\n\n for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line)); line <= end; line++) {\n var text = getLine(doc, line).text,\n leftPos = findColumn(text, left, tabSize);\n\n if (left == right) {\n ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos)));\n } else if (text.length > leftPos) {\n ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize))));\n }\n }\n\n if (!ranges.length) {\n ranges.push(new Range(start, start));\n }\n\n setSelection(doc, normalizeSelection(cm, startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex), {\n origin: \"*mouse\",\n scroll: false\n });\n cm.scrollIntoView(pos);\n } else {\n var oldRange = ourRange;\n var range = rangeForUnit(cm, pos, behavior.unit);\n var anchor = oldRange.anchor,\n head;\n\n if (cmp(range.anchor, anchor) > 0) {\n head = range.head;\n anchor = minPos(oldRange.from(), range.anchor);\n } else {\n head = range.anchor;\n anchor = maxPos(oldRange.to(), range.head);\n }\n\n var ranges$1 = startSel.ranges.slice(0);\n ranges$1[ourIndex] = bidiSimplify(cm, new Range(_clipPos(doc, anchor), head));\n setSelection(doc, normalizeSelection(cm, ranges$1, ourIndex), sel_mouse);\n }\n }\n\n var editorSize = display.wrapper.getBoundingClientRect(); // Used to ensure timeout re-tries don't fire when another extend\n // happened in the meantime (clearTimeout isn't reliable -- at\n // least on Chrome, the timeouts still happen even when cleared,\n // if the clear happens after their scheduled firing time).\n\n var counter = 0;\n\n function extend(e) {\n var curCount = ++counter;\n var cur = posFromMouse(cm, e, true, behavior.unit == \"rectangle\");\n\n if (!cur) {\n return;\n }\n\n if (cmp(cur, lastPos) != 0) {\n cm.curOp.focus = activeElt();\n extendTo(cur);\n var visible = visibleLines(display, doc);\n\n if (cur.line >= visible.to || cur.line < visible.from) {\n setTimeout(operation(cm, function () {\n if (counter == curCount) {\n extend(e);\n }\n }), 150);\n }\n } else {\n var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0;\n\n if (outside) {\n setTimeout(operation(cm, function () {\n if (counter != curCount) {\n return;\n }\n\n display.scroller.scrollTop += outside;\n extend(e);\n }), 50);\n }\n }\n }\n\n function done(e) {\n cm.state.selectingText = false;\n counter = Infinity; // If e is null or undefined we interpret this as someone trying\n // to explicitly cancel the selection rather than the user\n // letting go of the mouse button.\n\n if (e) {\n e_preventDefault(e);\n display.input.focus();\n }\n\n off(display.wrapper.ownerDocument, \"mousemove\", move);\n off(display.wrapper.ownerDocument, \"mouseup\", up);\n doc.history.lastSelOrigin = null;\n }\n\n var move = operation(cm, function (e) {\n if (e.buttons === 0 || !e_button(e)) {\n done(e);\n } else {\n extend(e);\n }\n });\n var up = operation(cm, done);\n cm.state.selectingText = up;\n on(display.wrapper.ownerDocument, \"mousemove\", move);\n on(display.wrapper.ownerDocument, \"mouseup\", up);\n } // Used when mouse-selecting to adjust the anchor to the proper side\n // of a bidi jump depending on the visual position of the head.\n\n\n function bidiSimplify(cm, range) {\n var anchor = range.anchor;\n var head = range.head;\n var anchorLine = getLine(cm.doc, anchor.line);\n\n if (cmp(anchor, head) == 0 && anchor.sticky == head.sticky) {\n return range;\n }\n\n var order = getOrder(anchorLine);\n\n if (!order) {\n return range;\n }\n\n var index = getBidiPartAt(order, anchor.ch, anchor.sticky),\n part = order[index];\n\n if (part.from != anchor.ch && part.to != anchor.ch) {\n return range;\n }\n\n var boundary = index + (part.from == anchor.ch == (part.level != 1) ? 0 : 1);\n\n if (boundary == 0 || boundary == order.length) {\n return range;\n } // Compute the relative visual position of the head compared to the\n // anchor (<0 is to the left, >0 to the right)\n\n\n var leftSide;\n\n if (head.line != anchor.line) {\n leftSide = (head.line - anchor.line) * (cm.doc.direction == \"ltr\" ? 1 : -1) > 0;\n } else {\n var headIndex = getBidiPartAt(order, head.ch, head.sticky);\n var dir = headIndex - index || (head.ch - anchor.ch) * (part.level == 1 ? -1 : 1);\n\n if (headIndex == boundary - 1 || headIndex == boundary) {\n leftSide = dir < 0;\n } else {\n leftSide = dir > 0;\n }\n }\n\n var usePart = order[boundary + (leftSide ? -1 : 0)];\n var from = leftSide == (usePart.level == 1);\n var ch = from ? usePart.from : usePart.to,\n sticky = from ? \"after\" : \"before\";\n return anchor.ch == ch && anchor.sticky == sticky ? range : new Range(new Pos(anchor.line, ch, sticky), head);\n } // Determines whether an event happened in the gutter, and fires the\n // handlers for the corresponding event.\n\n\n function gutterEvent(cm, e, type, prevent) {\n var mX, mY;\n\n if (e.touches) {\n mX = e.touches[0].clientX;\n mY = e.touches[0].clientY;\n } else {\n try {\n mX = e.clientX;\n mY = e.clientY;\n } catch (e$1) {\n return false;\n }\n }\n\n if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) {\n return false;\n }\n\n if (prevent) {\n e_preventDefault(e);\n }\n\n var display = cm.display;\n var lineBox = display.lineDiv.getBoundingClientRect();\n\n if (mY > lineBox.bottom || !hasHandler(cm, type)) {\n return e_defaultPrevented(e);\n }\n\n mY -= lineBox.top - display.viewOffset;\n\n for (var i = 0; i < cm.display.gutterSpecs.length; ++i) {\n var g = display.gutters.childNodes[i];\n\n if (g && g.getBoundingClientRect().right >= mX) {\n var line = _lineAtHeight(cm.doc, mY);\n\n var gutter = cm.display.gutterSpecs[i];\n signal(cm, type, cm, line, gutter.className, e);\n return e_defaultPrevented(e);\n }\n }\n }\n\n function clickInGutter(cm, e) {\n return gutterEvent(cm, e, \"gutterClick\", true);\n } // CONTEXT MENU HANDLING\n // To make the context menu work, we need to briefly unhide the\n // textarea (making it as unobtrusive as possible) to let the\n // right-click take effect on it.\n\n\n function onContextMenu(cm, e) {\n if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) {\n return;\n }\n\n if (signalDOMEvent(cm, e, \"contextmenu\")) {\n return;\n }\n\n if (!captureRightClick) {\n cm.display.input.onContextMenu(e);\n }\n }\n\n function contextMenuInGutter(cm, e) {\n if (!hasHandler(cm, \"gutterContextMenu\")) {\n return false;\n }\n\n return gutterEvent(cm, e, \"gutterContextMenu\", false);\n }\n\n function themeChanged(cm) {\n cm.display.wrapper.className = cm.display.wrapper.className.replace(/\\s*cm-s-\\S+/g, \"\") + cm.options.theme.replace(/(^|\\s)\\s*/g, \" cm-s-\");\n clearCaches(cm);\n }\n\n var Init = {\n toString: function toString() {\n return \"CodeMirror.Init\";\n }\n };\n var defaults = {};\n var optionHandlers = {};\n\n function defineOptions(CodeMirror) {\n var optionHandlers = CodeMirror.optionHandlers;\n\n function option(name, deflt, handle, notOnInit) {\n CodeMirror.defaults[name] = deflt;\n\n if (handle) {\n optionHandlers[name] = notOnInit ? function (cm, val, old) {\n if (old != Init) {\n handle(cm, val, old);\n }\n } : handle;\n }\n }\n\n CodeMirror.defineOption = option; // Passed to option handlers when there is no old value.\n\n CodeMirror.Init = Init; // These two are, on init, called from the constructor because they\n // have to be initialized before the editor can start at all.\n\n option(\"value\", \"\", function (cm, val) {\n return cm.setValue(val);\n }, true);\n option(\"mode\", null, function (cm, val) {\n cm.doc.modeOption = val;\n loadMode(cm);\n }, true);\n option(\"indentUnit\", 2, loadMode, true);\n option(\"indentWithTabs\", false);\n option(\"smartIndent\", true);\n option(\"tabSize\", 4, function (cm) {\n resetModeState(cm);\n clearCaches(cm);\n regChange(cm);\n }, true);\n option(\"lineSeparator\", null, function (cm, val) {\n cm.doc.lineSep = val;\n\n if (!val) {\n return;\n }\n\n var newBreaks = [],\n lineNo = cm.doc.first;\n cm.doc.iter(function (line) {\n for (var pos = 0;;) {\n var found = line.text.indexOf(val, pos);\n\n if (found == -1) {\n break;\n }\n\n pos = found + val.length;\n newBreaks.push(Pos(lineNo, found));\n }\n\n lineNo++;\n });\n\n for (var i = newBreaks.length - 1; i >= 0; i--) {\n _replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length));\n }\n });\n option(\"specialChars\", /[\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u061c\\u200b\\u200e\\u200f\\u2028\\u2029\\ufeff\\ufff9-\\ufffc]/g, function (cm, val, old) {\n cm.state.specialChars = new RegExp(val.source + (val.test(\"\\t\") ? \"\" : \"|\\t\"), \"g\");\n\n if (old != Init) {\n cm.refresh();\n }\n });\n option(\"specialCharPlaceholder\", defaultSpecialCharPlaceholder, function (cm) {\n return cm.refresh();\n }, true);\n option(\"electricChars\", true);\n option(\"inputStyle\", mobile ? \"contenteditable\" : \"textarea\", function () {\n throw new Error(\"inputStyle can not (yet) be changed in a running editor\"); // FIXME\n }, true);\n option(\"spellcheck\", false, function (cm, val) {\n return cm.getInputField().spellcheck = val;\n }, true);\n option(\"autocorrect\", false, function (cm, val) {\n return cm.getInputField().autocorrect = val;\n }, true);\n option(\"autocapitalize\", false, function (cm, val) {\n return cm.getInputField().autocapitalize = val;\n }, true);\n option(\"rtlMoveVisually\", !windows);\n option(\"wholeLineUpdateBefore\", true);\n option(\"theme\", \"default\", function (cm) {\n themeChanged(cm);\n updateGutters(cm);\n }, true);\n option(\"keyMap\", \"default\", function (cm, val, old) {\n var next = getKeyMap(val);\n var prev = old != Init && getKeyMap(old);\n\n if (prev && prev.detach) {\n prev.detach(cm, next);\n }\n\n if (next.attach) {\n next.attach(cm, prev || null);\n }\n });\n option(\"extraKeys\", null);\n option(\"configureMouse\", null);\n option(\"lineWrapping\", false, wrappingChanged, true);\n option(\"gutters\", [], function (cm, val) {\n cm.display.gutterSpecs = getGutters(val, cm.options.lineNumbers);\n updateGutters(cm);\n }, true);\n option(\"fixedGutter\", true, function (cm, val) {\n cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + \"px\" : \"0\";\n cm.refresh();\n }, true);\n option(\"coverGutterNextToScrollbar\", false, function (cm) {\n return updateScrollbars(cm);\n }, true);\n option(\"scrollbarStyle\", \"native\", function (cm) {\n initScrollbars(cm);\n updateScrollbars(cm);\n cm.display.scrollbars.setScrollTop(cm.doc.scrollTop);\n cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft);\n }, true);\n option(\"lineNumbers\", false, function (cm, val) {\n cm.display.gutterSpecs = getGutters(cm.options.gutters, val);\n updateGutters(cm);\n }, true);\n option(\"firstLineNumber\", 1, updateGutters, true);\n option(\"lineNumberFormatter\", function (integer) {\n return integer;\n }, updateGutters, true);\n option(\"showCursorWhenSelecting\", false, updateSelection, true);\n option(\"resetSelectionOnContextMenu\", true);\n option(\"lineWiseCopyCut\", true);\n option(\"pasteLinesPerSelection\", true);\n option(\"selectionsMayTouch\", false);\n option(\"readOnly\", false, function (cm, val) {\n if (val == \"nocursor\") {\n onBlur(cm);\n cm.display.input.blur();\n }\n\n cm.display.input.readOnlyChanged(val);\n });\n option(\"screenReaderLabel\", null, function (cm, val) {\n val = val === '' ? null : val;\n cm.display.input.screenReaderLabelChanged(val);\n });\n option(\"disableInput\", false, function (cm, val) {\n if (!val) {\n cm.display.input.reset();\n }\n }, true);\n option(\"dragDrop\", true, dragDropChanged);\n option(\"allowDropFileTypes\", null);\n option(\"cursorBlinkRate\", 530);\n option(\"cursorScrollMargin\", 0);\n option(\"cursorHeight\", 1, updateSelection, true);\n option(\"singleCursorHeightPerLine\", true, updateSelection, true);\n option(\"workTime\", 100);\n option(\"workDelay\", 100);\n option(\"flattenSpans\", true, resetModeState, true);\n option(\"addModeClass\", false, resetModeState, true);\n option(\"pollInterval\", 100);\n option(\"undoDepth\", 200, function (cm, val) {\n return cm.doc.history.undoDepth = val;\n });\n option(\"historyEventDelay\", 1250);\n option(\"viewportMargin\", 10, function (cm) {\n return cm.refresh();\n }, true);\n option(\"maxHighlightLength\", 10000, resetModeState, true);\n option(\"moveInputWithCursor\", true, function (cm, val) {\n if (!val) {\n cm.display.input.resetPosition();\n }\n });\n option(\"tabindex\", null, function (cm, val) {\n return cm.display.input.getField().tabIndex = val || \"\";\n });\n option(\"autofocus\", null);\n option(\"direction\", \"ltr\", function (cm, val) {\n return cm.doc.setDirection(val);\n }, true);\n option(\"phrases\", null);\n }\n\n function dragDropChanged(cm, value, old) {\n var wasOn = old && old != Init;\n\n if (!value != !wasOn) {\n var funcs = cm.display.dragFunctions;\n var toggle = value ? on : off;\n toggle(cm.display.scroller, \"dragstart\", funcs.start);\n toggle(cm.display.scroller, \"dragenter\", funcs.enter);\n toggle(cm.display.scroller, \"dragover\", funcs.over);\n toggle(cm.display.scroller, \"dragleave\", funcs.leave);\n toggle(cm.display.scroller, \"drop\", funcs.drop);\n }\n }\n\n function wrappingChanged(cm) {\n if (cm.options.lineWrapping) {\n addClass(cm.display.wrapper, \"CodeMirror-wrap\");\n cm.display.sizer.style.minWidth = \"\";\n cm.display.sizerWidth = null;\n } else {\n rmClass(cm.display.wrapper, \"CodeMirror-wrap\");\n findMaxLine(cm);\n }\n\n estimateLineHeights(cm);\n regChange(cm);\n clearCaches(cm);\n setTimeout(function () {\n return updateScrollbars(cm);\n }, 100);\n } // A CodeMirror instance represents an editor. This is the object\n // that user code is usually dealing with.\n\n\n function CodeMirror(place, options) {\n var this$1 = this;\n\n if (!(this instanceof CodeMirror)) {\n return new CodeMirror(place, options);\n }\n\n this.options = options = options ? copyObj(options) : {}; // Determine effective options based on given values and defaults.\n\n copyObj(defaults, options, false);\n var doc = options.value;\n\n if (typeof doc == \"string\") {\n doc = new Doc(doc, options.mode, null, options.lineSeparator, options.direction);\n } else if (options.mode) {\n doc.modeOption = options.mode;\n }\n\n this.doc = doc;\n var input = new CodeMirror.inputStyles[options.inputStyle](this);\n var display = this.display = new Display(place, doc, input, options);\n display.wrapper.CodeMirror = this;\n themeChanged(this);\n\n if (options.lineWrapping) {\n this.display.wrapper.className += \" CodeMirror-wrap\";\n }\n\n initScrollbars(this);\n this.state = {\n keyMaps: [],\n // stores maps added by addKeyMap\n overlays: [],\n // highlighting overlays, as added by addOverlay\n modeGen: 0,\n // bumped when mode/overlay changes, used to invalidate highlighting info\n overwrite: false,\n delayingBlurEvent: false,\n focused: false,\n suppressEdits: false,\n // used to disable editing during key handlers when in readOnly mode\n pasteIncoming: -1,\n cutIncoming: -1,\n // help recognize paste/cut edits in input.poll\n selectingText: false,\n draggingText: false,\n highlight: new Delayed(),\n // stores highlight worker timeout\n keySeq: null,\n // Unfinished key sequence\n specialChars: null\n };\n\n if (options.autofocus && !mobile) {\n display.input.focus();\n } // Override magic textarea content restore that IE sometimes does\n // on our hidden textarea on reload\n\n\n if (ie && ie_version < 11) {\n setTimeout(function () {\n return this$1.display.input.reset(true);\n }, 20);\n }\n\n registerEventHandlers(this);\n ensureGlobalHandlers();\n\n _startOperation(this);\n\n this.curOp.forceUpdate = true;\n attachDoc(this, doc);\n\n if (options.autofocus && !mobile || this.hasFocus()) {\n setTimeout(function () {\n if (this$1.hasFocus() && !this$1.state.focused) {\n onFocus(this$1);\n }\n }, 20);\n } else {\n onBlur(this);\n }\n\n for (var opt in optionHandlers) {\n if (optionHandlers.hasOwnProperty(opt)) {\n optionHandlers[opt](this, options[opt], Init);\n }\n }\n\n maybeUpdateLineNumberWidth(this);\n\n if (options.finishInit) {\n options.finishInit(this);\n }\n\n for (var i = 0; i < initHooks.length; ++i) {\n initHooks[i](this);\n }\n\n _endOperation(this); // Suppress optimizelegibility in Webkit, since it breaks text\n // measuring on line wrapping boundaries.\n\n\n if (webkit && options.lineWrapping && getComputedStyle(display.lineDiv).textRendering == \"optimizelegibility\") {\n display.lineDiv.style.textRendering = \"auto\";\n }\n } // The default configuration options.\n\n\n CodeMirror.defaults = defaults; // Functions to run when options are changed.\n\n CodeMirror.optionHandlers = optionHandlers; // Attach the necessary event handlers when initializing the editor\n\n function registerEventHandlers(cm) {\n var d = cm.display;\n on(d.scroller, \"mousedown\", operation(cm, onMouseDown)); // Older IE's will not fire a second mousedown for a double click\n\n if (ie && ie_version < 11) {\n on(d.scroller, \"dblclick\", operation(cm, function (e) {\n if (signalDOMEvent(cm, e)) {\n return;\n }\n\n var pos = posFromMouse(cm, e);\n\n if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) {\n return;\n }\n\n e_preventDefault(e);\n var word = cm.findWordAt(pos);\n extendSelection(cm.doc, word.anchor, word.head);\n }));\n } else {\n on(d.scroller, \"dblclick\", function (e) {\n return signalDOMEvent(cm, e) || e_preventDefault(e);\n });\n } // Some browsers fire contextmenu *after* opening the menu, at\n // which point we can't mess with it anymore. Context menu is\n // handled in onMouseDown for these browsers.\n\n\n on(d.scroller, \"contextmenu\", function (e) {\n return onContextMenu(cm, e);\n });\n on(d.input.getField(), \"contextmenu\", function (e) {\n if (!d.scroller.contains(e.target)) {\n onContextMenu(cm, e);\n }\n }); // Used to suppress mouse event handling when a touch happens\n\n var touchFinished,\n prevTouch = {\n end: 0\n };\n\n function finishTouch() {\n if (d.activeTouch) {\n touchFinished = setTimeout(function () {\n return d.activeTouch = null;\n }, 1000);\n prevTouch = d.activeTouch;\n prevTouch.end = +new Date();\n }\n }\n\n function isMouseLikeTouchEvent(e) {\n if (e.touches.length != 1) {\n return false;\n }\n\n var touch = e.touches[0];\n return touch.radiusX <= 1 && touch.radiusY <= 1;\n }\n\n function farAway(touch, other) {\n if (other.left == null) {\n return true;\n }\n\n var dx = other.left - touch.left,\n dy = other.top - touch.top;\n return dx * dx + dy * dy > 20 * 20;\n }\n\n on(d.scroller, \"touchstart\", function (e) {\n if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e) && !clickInGutter(cm, e)) {\n d.input.ensurePolled();\n clearTimeout(touchFinished);\n var now = +new Date();\n d.activeTouch = {\n start: now,\n moved: false,\n prev: now - prevTouch.end <= 300 ? prevTouch : null\n };\n\n if (e.touches.length == 1) {\n d.activeTouch.left = e.touches[0].pageX;\n d.activeTouch.top = e.touches[0].pageY;\n }\n }\n });\n on(d.scroller, \"touchmove\", function () {\n if (d.activeTouch) {\n d.activeTouch.moved = true;\n }\n });\n on(d.scroller, \"touchend\", function (e) {\n var touch = d.activeTouch;\n\n if (touch && !eventInWidget(d, e) && touch.left != null && !touch.moved && new Date() - touch.start < 300) {\n var pos = cm.coordsChar(d.activeTouch, \"page\"),\n range;\n\n if (!touch.prev || farAway(touch, touch.prev)) // Single tap\n {\n range = new Range(pos, pos);\n } else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap\n {\n range = cm.findWordAt(pos);\n } else // Triple tap\n {\n range = new Range(Pos(pos.line, 0), _clipPos(cm.doc, Pos(pos.line + 1, 0)));\n }\n\n cm.setSelection(range.anchor, range.head);\n cm.focus();\n e_preventDefault(e);\n }\n\n finishTouch();\n });\n on(d.scroller, \"touchcancel\", finishTouch); // Sync scrolling between fake scrollbars and real scrollable\n // area, ensure viewport is updated when scrolling.\n\n on(d.scroller, \"scroll\", function () {\n if (d.scroller.clientHeight) {\n updateScrollTop(cm, d.scroller.scrollTop);\n setScrollLeft(cm, d.scroller.scrollLeft, true);\n signal(cm, \"scroll\", cm);\n }\n }); // Listen to wheel events in order to try and update the viewport on time.\n\n on(d.scroller, \"mousewheel\", function (e) {\n return onScrollWheel(cm, e);\n });\n on(d.scroller, \"DOMMouseScroll\", function (e) {\n return onScrollWheel(cm, e);\n }); // Prevent wrapper from ever scrolling\n\n on(d.wrapper, \"scroll\", function () {\n return d.wrapper.scrollTop = d.wrapper.scrollLeft = 0;\n });\n d.dragFunctions = {\n enter: function enter(e) {\n if (!signalDOMEvent(cm, e)) {\n e_stop(e);\n }\n },\n over: function over(e) {\n if (!signalDOMEvent(cm, e)) {\n onDragOver(cm, e);\n e_stop(e);\n }\n },\n start: function start(e) {\n return onDragStart(cm, e);\n },\n drop: operation(cm, onDrop),\n leave: function leave(e) {\n if (!signalDOMEvent(cm, e)) {\n clearDragCursor(cm);\n }\n }\n };\n var inp = d.input.getField();\n on(inp, \"keyup\", function (e) {\n return onKeyUp.call(cm, e);\n });\n on(inp, \"keydown\", operation(cm, onKeyDown));\n on(inp, \"keypress\", operation(cm, onKeyPress));\n on(inp, \"focus\", function (e) {\n return onFocus(cm, e);\n });\n on(inp, \"blur\", function (e) {\n return onBlur(cm, e);\n });\n }\n\n var initHooks = [];\n\n CodeMirror.defineInitHook = function (f) {\n return initHooks.push(f);\n }; // Indent the given line. The how parameter can be \"smart\",\n // \"add\"/null, \"subtract\", or \"prev\". When aggressive is false\n // (typically set to true for forced single-line indents), empty\n // lines are not indented, and places where the mode returns Pass\n // are left alone.\n\n\n function indentLine(cm, n, how, aggressive) {\n var doc = cm.doc,\n state;\n\n if (how == null) {\n how = \"add\";\n }\n\n if (how == \"smart\") {\n // Fall back to \"prev\" when the mode doesn't have an indentation\n // method.\n if (!doc.mode.indent) {\n how = \"prev\";\n } else {\n state = getContextBefore(cm, n).state;\n }\n }\n\n var tabSize = cm.options.tabSize;\n var line = getLine(doc, n),\n curSpace = countColumn(line.text, null, tabSize);\n\n if (line.stateAfter) {\n line.stateAfter = null;\n }\n\n var curSpaceString = line.text.match(/^\\s*/)[0],\n indentation;\n\n if (!aggressive && !/\\S/.test(line.text)) {\n indentation = 0;\n how = \"not\";\n } else if (how == \"smart\") {\n indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text);\n\n if (indentation == Pass || indentation > 150) {\n if (!aggressive) {\n return;\n }\n\n how = \"prev\";\n }\n }\n\n if (how == \"prev\") {\n if (n > doc.first) {\n indentation = countColumn(getLine(doc, n - 1).text, null, tabSize);\n } else {\n indentation = 0;\n }\n } else if (how == \"add\") {\n indentation = curSpace + cm.options.indentUnit;\n } else if (how == \"subtract\") {\n indentation = curSpace - cm.options.indentUnit;\n } else if (typeof how == \"number\") {\n indentation = curSpace + how;\n }\n\n indentation = Math.max(0, indentation);\n var indentString = \"\",\n pos = 0;\n\n if (cm.options.indentWithTabs) {\n for (var i = Math.floor(indentation / tabSize); i; --i) {\n pos += tabSize;\n indentString += \"\\t\";\n }\n }\n\n if (pos < indentation) {\n indentString += spaceStr(indentation - pos);\n }\n\n if (indentString != curSpaceString) {\n _replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), \"+input\");\n\n line.stateAfter = null;\n return true;\n } else {\n // Ensure that, if the cursor was in the whitespace at the start\n // of the line, it is moved to the end of that space.\n for (var i$1 = 0; i$1 < doc.sel.ranges.length; i$1++) {\n var range = doc.sel.ranges[i$1];\n\n if (range.head.line == n && range.head.ch < curSpaceString.length) {\n var pos$1 = Pos(n, curSpaceString.length);\n replaceOneSelection(doc, i$1, new Range(pos$1, pos$1));\n break;\n }\n }\n }\n } // This will be set to a {lineWise: bool, text: [string]} object, so\n // that, when pasting, we know what kind of selections the copied\n // text was made out of.\n\n\n var lastCopied = null;\n\n function setLastCopied(newLastCopied) {\n lastCopied = newLastCopied;\n }\n\n function applyTextInput(cm, inserted, deleted, sel, origin) {\n var doc = cm.doc;\n cm.display.shift = false;\n\n if (!sel) {\n sel = doc.sel;\n }\n\n var recent = +new Date() - 200;\n var paste = origin == \"paste\" || cm.state.pasteIncoming > recent;\n var textLines = splitLinesAuto(inserted),\n multiPaste = null; // When pasting N lines into N selections, insert one line per selection\n\n if (paste && sel.ranges.length > 1) {\n if (lastCopied && lastCopied.text.join(\"\\n\") == inserted) {\n if (sel.ranges.length % lastCopied.text.length == 0) {\n multiPaste = [];\n\n for (var i = 0; i < lastCopied.text.length; i++) {\n multiPaste.push(doc.splitLines(lastCopied.text[i]));\n }\n }\n } else if (textLines.length == sel.ranges.length && cm.options.pasteLinesPerSelection) {\n multiPaste = map(textLines, function (l) {\n return [l];\n });\n }\n }\n\n var updateInput = cm.curOp.updateInput; // Normal behavior is to insert the new text into every selection\n\n for (var i$1 = sel.ranges.length - 1; i$1 >= 0; i$1--) {\n var range = sel.ranges[i$1];\n var from = range.from(),\n to = range.to();\n\n if (range.empty()) {\n if (deleted && deleted > 0) // Handle deletion\n {\n from = Pos(from.line, from.ch - deleted);\n } else if (cm.state.overwrite && !paste) // Handle overwrite\n {\n to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length));\n } else if (paste && lastCopied && lastCopied.lineWise && lastCopied.text.join(\"\\n\") == textLines.join(\"\\n\")) {\n from = to = Pos(from.line, 0);\n }\n }\n\n var changeEvent = {\n from: from,\n to: to,\n text: multiPaste ? multiPaste[i$1 % multiPaste.length] : textLines,\n origin: origin || (paste ? \"paste\" : cm.state.cutIncoming > recent ? \"cut\" : \"+input\")\n };\n makeChange(cm.doc, changeEvent);\n signalLater(cm, \"inputRead\", cm, changeEvent);\n }\n\n if (inserted && !paste) {\n triggerElectric(cm, inserted);\n }\n\n ensureCursorVisible(cm);\n\n if (cm.curOp.updateInput < 2) {\n cm.curOp.updateInput = updateInput;\n }\n\n cm.curOp.typing = true;\n cm.state.pasteIncoming = cm.state.cutIncoming = -1;\n }\n\n function handlePaste(e, cm) {\n var pasted = e.clipboardData && e.clipboardData.getData(\"Text\");\n\n if (pasted) {\n e.preventDefault();\n\n if (!cm.isReadOnly() && !cm.options.disableInput) {\n runInOp(cm, function () {\n return applyTextInput(cm, pasted, 0, null, \"paste\");\n });\n }\n\n return true;\n }\n }\n\n function triggerElectric(cm, inserted) {\n // When an 'electric' character is inserted, immediately trigger a reindent\n if (!cm.options.electricChars || !cm.options.smartIndent) {\n return;\n }\n\n var sel = cm.doc.sel;\n\n for (var i = sel.ranges.length - 1; i >= 0; i--) {\n var range = sel.ranges[i];\n\n if (range.head.ch > 100 || i && sel.ranges[i - 1].head.line == range.head.line) {\n continue;\n }\n\n var mode = cm.getModeAt(range.head);\n var indented = false;\n\n if (mode.electricChars) {\n for (var j = 0; j < mode.electricChars.length; j++) {\n if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) {\n indented = indentLine(cm, range.head.line, \"smart\");\n break;\n }\n }\n } else if (mode.electricInput) {\n if (mode.electricInput.test(getLine(cm.doc, range.head.line).text.slice(0, range.head.ch))) {\n indented = indentLine(cm, range.head.line, \"smart\");\n }\n }\n\n if (indented) {\n signalLater(cm, \"electricInput\", cm, range.head.line);\n }\n }\n }\n\n function copyableRanges(cm) {\n var text = [],\n ranges = [];\n\n for (var i = 0; i < cm.doc.sel.ranges.length; i++) {\n var line = cm.doc.sel.ranges[i].head.line;\n var lineRange = {\n anchor: Pos(line, 0),\n head: Pos(line + 1, 0)\n };\n ranges.push(lineRange);\n text.push(cm.getRange(lineRange.anchor, lineRange.head));\n }\n\n return {\n text: text,\n ranges: ranges\n };\n }\n\n function disableBrowserMagic(field, spellcheck, autocorrect, autocapitalize) {\n field.setAttribute(\"autocorrect\", autocorrect ? \"\" : \"off\");\n field.setAttribute(\"autocapitalize\", autocapitalize ? \"\" : \"off\");\n field.setAttribute(\"spellcheck\", !!spellcheck);\n }\n\n function hiddenTextarea() {\n var te = elt(\"textarea\", null, null, \"position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none\");\n var div = elt(\"div\", [te], null, \"overflow: hidden; position: relative; width: 3px; height: 0px;\"); // The textarea is kept positioned near the cursor to prevent the\n // fact that it'll be scrolled into view on input from scrolling\n // our fake cursor out of view. On webkit, when wrap=off, paste is\n // very slow. So make the area wide instead.\n\n if (webkit) {\n te.style.width = \"1000px\";\n } else {\n te.setAttribute(\"wrap\", \"off\");\n } // If border: 0; -- iOS fails to open keyboard (issue #1287)\n\n\n if (ios) {\n te.style.border = \"1px solid black\";\n }\n\n disableBrowserMagic(te);\n return div;\n } // The publicly visible API. Note that methodOp(f) means\n // 'wrap f in an operation, performed on its `this` parameter'.\n // This is not the complete set of editor methods. Most of the\n // methods defined on the Doc type are also injected into\n // CodeMirror.prototype, for backwards compatibility and\n // convenience.\n\n\n function addEditorMethods(CodeMirror) {\n var optionHandlers = CodeMirror.optionHandlers;\n var helpers = CodeMirror.helpers = {};\n CodeMirror.prototype = {\n constructor: CodeMirror,\n focus: function focus() {\n window.focus();\n this.display.input.focus();\n },\n setOption: function setOption(option, value) {\n var options = this.options,\n old = options[option];\n\n if (options[option] == value && option != \"mode\") {\n return;\n }\n\n options[option] = value;\n\n if (optionHandlers.hasOwnProperty(option)) {\n operation(this, optionHandlers[option])(this, value, old);\n }\n\n signal(this, \"optionChange\", this, option);\n },\n getOption: function getOption(option) {\n return this.options[option];\n },\n getDoc: function getDoc() {\n return this.doc;\n },\n addKeyMap: function addKeyMap(map, bottom) {\n this.state.keyMaps[bottom ? \"push\" : \"unshift\"](getKeyMap(map));\n },\n removeKeyMap: function removeKeyMap(map) {\n var maps = this.state.keyMaps;\n\n for (var i = 0; i < maps.length; ++i) {\n if (maps[i] == map || maps[i].name == map) {\n maps.splice(i, 1);\n return true;\n }\n }\n },\n addOverlay: methodOp(function (spec, options) {\n var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec);\n\n if (mode.startState) {\n throw new Error(\"Overlays may not be stateful.\");\n }\n\n insertSorted(this.state.overlays, {\n mode: mode,\n modeSpec: spec,\n opaque: options && options.opaque,\n priority: options && options.priority || 0\n }, function (overlay) {\n return overlay.priority;\n });\n this.state.modeGen++;\n regChange(this);\n }),\n removeOverlay: methodOp(function (spec) {\n var overlays = this.state.overlays;\n\n for (var i = 0; i < overlays.length; ++i) {\n var cur = overlays[i].modeSpec;\n\n if (cur == spec || typeof spec == \"string\" && cur.name == spec) {\n overlays.splice(i, 1);\n this.state.modeGen++;\n regChange(this);\n return;\n }\n }\n }),\n indentLine: methodOp(function (n, dir, aggressive) {\n if (typeof dir != \"string\" && typeof dir != \"number\") {\n if (dir == null) {\n dir = this.options.smartIndent ? \"smart\" : \"prev\";\n } else {\n dir = dir ? \"add\" : \"subtract\";\n }\n }\n\n if (isLine(this.doc, n)) {\n indentLine(this, n, dir, aggressive);\n }\n }),\n indentSelection: methodOp(function (how) {\n var ranges = this.doc.sel.ranges,\n end = -1;\n\n for (var i = 0; i < ranges.length; i++) {\n var range = ranges[i];\n\n if (!range.empty()) {\n var from = range.from(),\n to = range.to();\n var start = Math.max(end, from.line);\n end = Math.min(this.lastLine(), to.line - (to.ch ? 0 : 1)) + 1;\n\n for (var j = start; j < end; ++j) {\n indentLine(this, j, how);\n }\n\n var newRanges = this.doc.sel.ranges;\n\n if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0) {\n replaceOneSelection(this.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll);\n }\n } else if (range.head.line > end) {\n indentLine(this, range.head.line, how, true);\n end = range.head.line;\n\n if (i == this.doc.sel.primIndex) {\n ensureCursorVisible(this);\n }\n }\n }\n }),\n // Fetch the parser token for a given character. Useful for hacks\n // that want to inspect the mode state (say, for completion).\n getTokenAt: function getTokenAt(pos, precise) {\n return takeToken(this, pos, precise);\n },\n getLineTokens: function getLineTokens(line, precise) {\n return takeToken(this, Pos(line), precise, true);\n },\n getTokenTypeAt: function getTokenTypeAt(pos) {\n pos = _clipPos(this.doc, pos);\n var styles = getLineStyles(this, getLine(this.doc, pos.line));\n var before = 0,\n after = (styles.length - 1) / 2,\n ch = pos.ch;\n var type;\n\n if (ch == 0) {\n type = styles[2];\n } else {\n for (;;) {\n var mid = before + after >> 1;\n\n if ((mid ? styles[mid * 2 - 1] : 0) >= ch) {\n after = mid;\n } else if (styles[mid * 2 + 1] < ch) {\n before = mid + 1;\n } else {\n type = styles[mid * 2 + 2];\n break;\n }\n }\n }\n\n var cut = type ? type.indexOf(\"overlay \") : -1;\n return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1);\n },\n getModeAt: function getModeAt(pos) {\n var mode = this.doc.mode;\n\n if (!mode.innerMode) {\n return mode;\n }\n\n return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode;\n },\n getHelper: function getHelper(pos, type) {\n return this.getHelpers(pos, type)[0];\n },\n getHelpers: function getHelpers(pos, type) {\n var found = [];\n\n if (!helpers.hasOwnProperty(type)) {\n return found;\n }\n\n var help = helpers[type],\n mode = this.getModeAt(pos);\n\n if (typeof mode[type] == \"string\") {\n if (help[mode[type]]) {\n found.push(help[mode[type]]);\n }\n } else if (mode[type]) {\n for (var i = 0; i < mode[type].length; i++) {\n var val = help[mode[type][i]];\n\n if (val) {\n found.push(val);\n }\n }\n } else if (mode.helperType && help[mode.helperType]) {\n found.push(help[mode.helperType]);\n } else if (help[mode.name]) {\n found.push(help[mode.name]);\n }\n\n for (var i$1 = 0; i$1 < help._global.length; i$1++) {\n var cur = help._global[i$1];\n\n if (cur.pred(mode, this) && indexOf(found, cur.val) == -1) {\n found.push(cur.val);\n }\n }\n\n return found;\n },\n getStateAfter: function getStateAfter(line, precise) {\n var doc = this.doc;\n line = clipLine(doc, line == null ? doc.first + doc.size - 1 : line);\n return getContextBefore(this, line + 1, precise).state;\n },\n cursorCoords: function cursorCoords(start, mode) {\n var pos,\n range = this.doc.sel.primary();\n\n if (start == null) {\n pos = range.head;\n } else if (_typeof(start) == \"object\") {\n pos = _clipPos(this.doc, start);\n } else {\n pos = start ? range.from() : range.to();\n }\n\n return _cursorCoords(this, pos, mode || \"page\");\n },\n charCoords: function charCoords(pos, mode) {\n return _charCoords(this, _clipPos(this.doc, pos), mode || \"page\");\n },\n coordsChar: function coordsChar(coords, mode) {\n coords = fromCoordSystem(this, coords, mode || \"page\");\n return _coordsChar(this, coords.left, coords.top);\n },\n lineAtHeight: function lineAtHeight(height, mode) {\n height = fromCoordSystem(this, {\n top: height,\n left: 0\n }, mode || \"page\").top;\n return _lineAtHeight(this.doc, height + this.display.viewOffset);\n },\n heightAtLine: function heightAtLine(line, mode, includeWidgets) {\n var end = false,\n lineObj;\n\n if (typeof line == \"number\") {\n var last = this.doc.first + this.doc.size - 1;\n\n if (line < this.doc.first) {\n line = this.doc.first;\n } else if (line > last) {\n line = last;\n end = true;\n }\n\n lineObj = getLine(this.doc, line);\n } else {\n lineObj = line;\n }\n\n return intoCoordSystem(this, lineObj, {\n top: 0,\n left: 0\n }, mode || \"page\", includeWidgets || end).top + (end ? this.doc.height - _heightAtLine(lineObj) : 0);\n },\n defaultTextHeight: function defaultTextHeight() {\n return textHeight(this.display);\n },\n defaultCharWidth: function defaultCharWidth() {\n return charWidth(this.display);\n },\n getViewport: function getViewport() {\n return {\n from: this.display.viewFrom,\n to: this.display.viewTo\n };\n },\n addWidget: function addWidget(pos, node, scroll, vert, horiz) {\n var display = this.display;\n pos = _cursorCoords(this, _clipPos(this.doc, pos));\n var top = pos.bottom,\n left = pos.left;\n node.style.position = \"absolute\";\n node.setAttribute(\"cm-ignore-events\", \"true\");\n this.display.input.setUneditable(node);\n display.sizer.appendChild(node);\n\n if (vert == \"over\") {\n top = pos.top;\n } else if (vert == \"above\" || vert == \"near\") {\n var vspace = Math.max(display.wrapper.clientHeight, this.doc.height),\n hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth); // Default to positioning above (if specified and possible); otherwise default to positioning below\n\n if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight) {\n top = pos.top - node.offsetHeight;\n } else if (pos.bottom + node.offsetHeight <= vspace) {\n top = pos.bottom;\n }\n\n if (left + node.offsetWidth > hspace) {\n left = hspace - node.offsetWidth;\n }\n }\n\n node.style.top = top + \"px\";\n node.style.left = node.style.right = \"\";\n\n if (horiz == \"right\") {\n left = display.sizer.clientWidth - node.offsetWidth;\n node.style.right = \"0px\";\n } else {\n if (horiz == \"left\") {\n left = 0;\n } else if (horiz == \"middle\") {\n left = (display.sizer.clientWidth - node.offsetWidth) / 2;\n }\n\n node.style.left = left + \"px\";\n }\n\n if (scroll) {\n scrollIntoView(this, {\n left: left,\n top: top,\n right: left + node.offsetWidth,\n bottom: top + node.offsetHeight\n });\n }\n },\n triggerOnKeyDown: methodOp(onKeyDown),\n triggerOnKeyPress: methodOp(onKeyPress),\n triggerOnKeyUp: onKeyUp,\n triggerOnMouseDown: methodOp(onMouseDown),\n execCommand: function execCommand(cmd) {\n if (commands.hasOwnProperty(cmd)) {\n return commands[cmd].call(null, this);\n }\n },\n triggerElectric: methodOp(function (text) {\n triggerElectric(this, text);\n }),\n findPosH: function findPosH(from, amount, unit, visually) {\n var dir = 1;\n\n if (amount < 0) {\n dir = -1;\n amount = -amount;\n }\n\n var cur = _clipPos(this.doc, from);\n\n for (var i = 0; i < amount; ++i) {\n cur = _findPosH(this.doc, cur, dir, unit, visually);\n\n if (cur.hitSide) {\n break;\n }\n }\n\n return cur;\n },\n moveH: methodOp(function (dir, unit) {\n var this$1 = this;\n this.extendSelectionsBy(function (range) {\n if (this$1.display.shift || this$1.doc.extend || range.empty()) {\n return _findPosH(this$1.doc, range.head, dir, unit, this$1.options.rtlMoveVisually);\n } else {\n return dir < 0 ? range.from() : range.to();\n }\n }, sel_move);\n }),\n deleteH: methodOp(function (dir, unit) {\n var sel = this.doc.sel,\n doc = this.doc;\n\n if (sel.somethingSelected()) {\n doc.replaceSelection(\"\", null, \"+delete\");\n } else {\n deleteNearSelection(this, function (range) {\n var other = _findPosH(doc, range.head, dir, unit, false);\n\n return dir < 0 ? {\n from: other,\n to: range.head\n } : {\n from: range.head,\n to: other\n };\n });\n }\n }),\n findPosV: function findPosV(from, amount, unit, goalColumn) {\n var dir = 1,\n x = goalColumn;\n\n if (amount < 0) {\n dir = -1;\n amount = -amount;\n }\n\n var cur = _clipPos(this.doc, from);\n\n for (var i = 0; i < amount; ++i) {\n var coords = _cursorCoords(this, cur, \"div\");\n\n if (x == null) {\n x = coords.left;\n } else {\n coords.left = x;\n }\n\n cur = _findPosV(this, coords, dir, unit);\n\n if (cur.hitSide) {\n break;\n }\n }\n\n return cur;\n },\n moveV: methodOp(function (dir, unit) {\n var this$1 = this;\n var doc = this.doc,\n goals = [];\n var collapse = !this.display.shift && !doc.extend && doc.sel.somethingSelected();\n doc.extendSelectionsBy(function (range) {\n if (collapse) {\n return dir < 0 ? range.from() : range.to();\n }\n\n var headPos = _cursorCoords(this$1, range.head, \"div\");\n\n if (range.goalColumn != null) {\n headPos.left = range.goalColumn;\n }\n\n goals.push(headPos.left);\n\n var pos = _findPosV(this$1, headPos, dir, unit);\n\n if (unit == \"page\" && range == doc.sel.primary()) {\n addToScrollTop(this$1, _charCoords(this$1, pos, \"div\").top - headPos.top);\n }\n\n return pos;\n }, sel_move);\n\n if (goals.length) {\n for (var i = 0; i < doc.sel.ranges.length; i++) {\n doc.sel.ranges[i].goalColumn = goals[i];\n }\n }\n }),\n // Find the word at the given position (as returned by coordsChar).\n findWordAt: function findWordAt(pos) {\n var doc = this.doc,\n line = getLine(doc, pos.line).text;\n var start = pos.ch,\n end = pos.ch;\n\n if (line) {\n var helper = this.getHelper(pos, \"wordChars\");\n\n if ((pos.sticky == \"before\" || end == line.length) && start) {\n --start;\n } else {\n ++end;\n }\n\n var startChar = line.charAt(start);\n var check = isWordChar(startChar, helper) ? function (ch) {\n return isWordChar(ch, helper);\n } : /\\s/.test(startChar) ? function (ch) {\n return /\\s/.test(ch);\n } : function (ch) {\n return !/\\s/.test(ch) && !isWordChar(ch);\n };\n\n while (start > 0 && check(line.charAt(start - 1))) {\n --start;\n }\n\n while (end < line.length && check(line.charAt(end))) {\n ++end;\n }\n }\n\n return new Range(Pos(pos.line, start), Pos(pos.line, end));\n },\n toggleOverwrite: function toggleOverwrite(value) {\n if (value != null && value == this.state.overwrite) {\n return;\n }\n\n if (this.state.overwrite = !this.state.overwrite) {\n addClass(this.display.cursorDiv, \"CodeMirror-overwrite\");\n } else {\n rmClass(this.display.cursorDiv, \"CodeMirror-overwrite\");\n }\n\n signal(this, \"overwriteToggle\", this, this.state.overwrite);\n },\n hasFocus: function hasFocus() {\n return this.display.input.getField() == activeElt();\n },\n isReadOnly: function isReadOnly() {\n return !!(this.options.readOnly || this.doc.cantEdit);\n },\n scrollTo: methodOp(function (x, y) {\n scrollToCoords(this, x, y);\n }),\n getScrollInfo: function getScrollInfo() {\n var scroller = this.display.scroller;\n return {\n left: scroller.scrollLeft,\n top: scroller.scrollTop,\n height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight,\n width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth,\n clientHeight: displayHeight(this),\n clientWidth: displayWidth(this)\n };\n },\n scrollIntoView: methodOp(function (range, margin) {\n if (range == null) {\n range = {\n from: this.doc.sel.primary().head,\n to: null\n };\n\n if (margin == null) {\n margin = this.options.cursorScrollMargin;\n }\n } else if (typeof range == \"number\") {\n range = {\n from: Pos(range, 0),\n to: null\n };\n } else if (range.from == null) {\n range = {\n from: range,\n to: null\n };\n }\n\n if (!range.to) {\n range.to = range.from;\n }\n\n range.margin = margin || 0;\n\n if (range.from.line != null) {\n scrollToRange(this, range);\n } else {\n scrollToCoordsRange(this, range.from, range.to, range.margin);\n }\n }),\n setSize: methodOp(function (width, height) {\n var this$1 = this;\n\n var interpret = function interpret(val) {\n return typeof val == \"number\" || /^\\d+$/.test(String(val)) ? val + \"px\" : val;\n };\n\n if (width != null) {\n this.display.wrapper.style.width = interpret(width);\n }\n\n if (height != null) {\n this.display.wrapper.style.height = interpret(height);\n }\n\n if (this.options.lineWrapping) {\n clearLineMeasurementCache(this);\n }\n\n var lineNo = this.display.viewFrom;\n this.doc.iter(lineNo, this.display.viewTo, function (line) {\n if (line.widgets) {\n for (var i = 0; i < line.widgets.length; i++) {\n if (line.widgets[i].noHScroll) {\n regLineChange(this$1, lineNo, \"widget\");\n break;\n }\n }\n }\n\n ++lineNo;\n });\n this.curOp.forceUpdate = true;\n signal(this, \"refresh\", this);\n }),\n operation: function operation(f) {\n return runInOp(this, f);\n },\n startOperation: function startOperation() {\n return _startOperation(this);\n },\n endOperation: function endOperation() {\n return _endOperation(this);\n },\n refresh: methodOp(function () {\n var oldHeight = this.display.cachedTextHeight;\n regChange(this);\n this.curOp.forceUpdate = true;\n clearCaches(this);\n scrollToCoords(this, this.doc.scrollLeft, this.doc.scrollTop);\n updateGutterSpace(this.display);\n\n if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5 || this.options.lineWrapping) {\n estimateLineHeights(this);\n }\n\n signal(this, \"refresh\", this);\n }),\n swapDoc: methodOp(function (doc) {\n var old = this.doc;\n old.cm = null; // Cancel the current text selection if any (#5821)\n\n if (this.state.selectingText) {\n this.state.selectingText();\n }\n\n attachDoc(this, doc);\n clearCaches(this);\n this.display.input.reset();\n scrollToCoords(this, doc.scrollLeft, doc.scrollTop);\n this.curOp.forceScroll = true;\n signalLater(this, \"swapDoc\", this, old);\n return old;\n }),\n phrase: function phrase(phraseText) {\n var phrases = this.options.phrases;\n return phrases && Object.prototype.hasOwnProperty.call(phrases, phraseText) ? phrases[phraseText] : phraseText;\n },\n getInputField: function getInputField() {\n return this.display.input.getField();\n },\n getWrapperElement: function getWrapperElement() {\n return this.display.wrapper;\n },\n getScrollerElement: function getScrollerElement() {\n return this.display.scroller;\n },\n getGutterElement: function getGutterElement() {\n return this.display.gutters;\n }\n };\n eventMixin(CodeMirror);\n\n CodeMirror.registerHelper = function (type, name, value) {\n if (!helpers.hasOwnProperty(type)) {\n helpers[type] = CodeMirror[type] = {\n _global: []\n };\n }\n\n helpers[type][name] = value;\n };\n\n CodeMirror.registerGlobalHelper = function (type, name, predicate, value) {\n CodeMirror.registerHelper(type, name, value);\n\n helpers[type]._global.push({\n pred: predicate,\n val: value\n });\n };\n } // Used for horizontal relative motion. Dir is -1 or 1 (left or\n // right), unit can be \"codepoint\", \"char\", \"column\" (like char, but\n // doesn't cross line boundaries), \"word\" (across next word), or\n // \"group\" (to the start of next group of word or\n // non-word-non-whitespace chars). The visually param controls\n // whether, in right-to-left text, direction 1 means to move towards\n // the next index in the string, or towards the character to the right\n // of the current position. The resulting position will have a\n // hitSide=true property if it reached the end of the document.\n\n\n function _findPosH(doc, pos, dir, unit, visually) {\n var oldPos = pos;\n var origDir = dir;\n var lineObj = getLine(doc, pos.line);\n var lineDir = visually && doc.direction == \"rtl\" ? -dir : dir;\n\n function findNextLine() {\n var l = pos.line + lineDir;\n\n if (l < doc.first || l >= doc.first + doc.size) {\n return false;\n }\n\n pos = new Pos(l, pos.ch, pos.sticky);\n return lineObj = getLine(doc, l);\n }\n\n function moveOnce(boundToLine) {\n var next;\n\n if (unit == \"codepoint\") {\n var ch = lineObj.text.charCodeAt(pos.ch + (dir > 0 ? 0 : -1));\n\n if (isNaN(ch)) {\n next = null;\n } else {\n var astral = dir > 0 ? ch >= 0xD800 && ch < 0xDC00 : ch >= 0xDC00 && ch < 0xDFFF;\n next = new Pos(pos.line, Math.max(0, Math.min(lineObj.text.length, pos.ch + dir * (astral ? 2 : 1))), -dir);\n }\n } else if (visually) {\n next = moveVisually(doc.cm, lineObj, pos, dir);\n } else {\n next = moveLogically(lineObj, pos, dir);\n }\n\n if (next == null) {\n if (!boundToLine && findNextLine()) {\n pos = endOfLine(visually, doc.cm, lineObj, pos.line, lineDir);\n } else {\n return false;\n }\n } else {\n pos = next;\n }\n\n return true;\n }\n\n if (unit == \"char\" || unit == \"codepoint\") {\n moveOnce();\n } else if (unit == \"column\") {\n moveOnce(true);\n } else if (unit == \"word\" || unit == \"group\") {\n var sawType = null,\n group = unit == \"group\";\n var helper = doc.cm && doc.cm.getHelper(pos, \"wordChars\");\n\n for (var first = true;; first = false) {\n if (dir < 0 && !moveOnce(!first)) {\n break;\n }\n\n var cur = lineObj.text.charAt(pos.ch) || \"\\n\";\n var type = isWordChar(cur, helper) ? \"w\" : group && cur == \"\\n\" ? \"n\" : !group || /\\s/.test(cur) ? null : \"p\";\n\n if (group && !first && !type) {\n type = \"s\";\n }\n\n if (sawType && sawType != type) {\n if (dir < 0) {\n dir = 1;\n moveOnce();\n pos.sticky = \"after\";\n }\n\n break;\n }\n\n if (type) {\n sawType = type;\n }\n\n if (dir > 0 && !moveOnce(!first)) {\n break;\n }\n }\n }\n\n var result = skipAtomic(doc, pos, oldPos, origDir, true);\n\n if (equalCursorPos(oldPos, result)) {\n result.hitSide = true;\n }\n\n return result;\n } // For relative vertical movement. Dir may be -1 or 1. Unit can be\n // \"page\" or \"line\". The resulting position will have a hitSide=true\n // property if it reached the end of the document.\n\n\n function _findPosV(cm, pos, dir, unit) {\n var doc = cm.doc,\n x = pos.left,\n y;\n\n if (unit == \"page\") {\n var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight);\n var moveAmount = Math.max(pageSize - .5 * textHeight(cm.display), 3);\n y = (dir > 0 ? pos.bottom : pos.top) + dir * moveAmount;\n } else if (unit == \"line\") {\n y = dir > 0 ? pos.bottom + 3 : pos.top - 3;\n }\n\n var target;\n\n for (;;) {\n target = _coordsChar(cm, x, y);\n\n if (!target.outside) {\n break;\n }\n\n if (dir < 0 ? y <= 0 : y >= doc.height) {\n target.hitSide = true;\n break;\n }\n\n y += dir * 5;\n }\n\n return target;\n } // CONTENTEDITABLE INPUT STYLE\n\n\n var ContentEditableInput = function ContentEditableInput(cm) {\n this.cm = cm;\n this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null;\n this.polling = new Delayed();\n this.composing = null;\n this.gracePeriod = false;\n this.readDOMTimeout = null;\n };\n\n ContentEditableInput.prototype.init = function (display) {\n var this$1 = this;\n var input = this,\n cm = input.cm;\n var div = input.div = display.lineDiv;\n div.contentEditable = true;\n disableBrowserMagic(div, cm.options.spellcheck, cm.options.autocorrect, cm.options.autocapitalize);\n\n function belongsToInput(e) {\n for (var t = e.target; t; t = t.parentNode) {\n if (t == div) {\n return true;\n }\n\n if (/\\bCodeMirror-(?:line)?widget\\b/.test(t.className)) {\n break;\n }\n }\n\n return false;\n }\n\n on(div, \"paste\", function (e) {\n if (!belongsToInput(e) || signalDOMEvent(cm, e) || handlePaste(e, cm)) {\n return;\n } // IE doesn't fire input events, so we schedule a read for the pasted content in this way\n\n\n if (ie_version <= 11) {\n setTimeout(operation(cm, function () {\n return this$1.updateFromDOM();\n }), 20);\n }\n });\n on(div, \"compositionstart\", function (e) {\n this$1.composing = {\n data: e.data,\n done: false\n };\n });\n on(div, \"compositionupdate\", function (e) {\n if (!this$1.composing) {\n this$1.composing = {\n data: e.data,\n done: false\n };\n }\n });\n on(div, \"compositionend\", function (e) {\n if (this$1.composing) {\n if (e.data != this$1.composing.data) {\n this$1.readFromDOMSoon();\n }\n\n this$1.composing.done = true;\n }\n });\n on(div, \"touchstart\", function () {\n return input.forceCompositionEnd();\n });\n on(div, \"input\", function () {\n if (!this$1.composing) {\n this$1.readFromDOMSoon();\n }\n });\n\n function onCopyCut(e) {\n if (!belongsToInput(e) || signalDOMEvent(cm, e)) {\n return;\n }\n\n if (cm.somethingSelected()) {\n setLastCopied({\n lineWise: false,\n text: cm.getSelections()\n });\n\n if (e.type == \"cut\") {\n cm.replaceSelection(\"\", null, \"cut\");\n }\n } else if (!cm.options.lineWiseCopyCut) {\n return;\n } else {\n var ranges = copyableRanges(cm);\n setLastCopied({\n lineWise: true,\n text: ranges.text\n });\n\n if (e.type == \"cut\") {\n cm.operation(function () {\n cm.setSelections(ranges.ranges, 0, sel_dontScroll);\n cm.replaceSelection(\"\", null, \"cut\");\n });\n }\n }\n\n if (e.clipboardData) {\n e.clipboardData.clearData();\n var content = lastCopied.text.join(\"\\n\"); // iOS exposes the clipboard API, but seems to discard content inserted into it\n\n e.clipboardData.setData(\"Text\", content);\n\n if (e.clipboardData.getData(\"Text\") == content) {\n e.preventDefault();\n return;\n }\n } // Old-fashioned briefly-focus-a-textarea hack\n\n\n var kludge = hiddenTextarea(),\n te = kludge.firstChild;\n cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild);\n te.value = lastCopied.text.join(\"\\n\");\n var hadFocus = activeElt();\n selectInput(te);\n setTimeout(function () {\n cm.display.lineSpace.removeChild(kludge);\n hadFocus.focus();\n\n if (hadFocus == div) {\n input.showPrimarySelection();\n }\n }, 50);\n }\n\n on(div, \"copy\", onCopyCut);\n on(div, \"cut\", onCopyCut);\n };\n\n ContentEditableInput.prototype.screenReaderLabelChanged = function (label) {\n // Label for screenreaders, accessibility\n if (label) {\n this.div.setAttribute('aria-label', label);\n } else {\n this.div.removeAttribute('aria-label');\n }\n };\n\n ContentEditableInput.prototype.prepareSelection = function () {\n var result = prepareSelection(this.cm, false);\n result.focus = activeElt() == this.div;\n return result;\n };\n\n ContentEditableInput.prototype.showSelection = function (info, takeFocus) {\n if (!info || !this.cm.display.view.length) {\n return;\n }\n\n if (info.focus || takeFocus) {\n this.showPrimarySelection();\n }\n\n this.showMultipleSelections(info);\n };\n\n ContentEditableInput.prototype.getSelection = function () {\n return this.cm.display.wrapper.ownerDocument.getSelection();\n };\n\n ContentEditableInput.prototype.showPrimarySelection = function () {\n var sel = this.getSelection(),\n cm = this.cm,\n prim = cm.doc.sel.primary();\n var from = prim.from(),\n to = prim.to();\n\n if (cm.display.viewTo == cm.display.viewFrom || from.line >= cm.display.viewTo || to.line < cm.display.viewFrom) {\n sel.removeAllRanges();\n return;\n }\n\n var curAnchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);\n var curFocus = domToPos(cm, sel.focusNode, sel.focusOffset);\n\n if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad && cmp(minPos(curAnchor, curFocus), from) == 0 && cmp(maxPos(curAnchor, curFocus), to) == 0) {\n return;\n }\n\n var view = cm.display.view;\n var start = from.line >= cm.display.viewFrom && posToDOM(cm, from) || {\n node: view[0].measure.map[2],\n offset: 0\n };\n var end = to.line < cm.display.viewTo && posToDOM(cm, to);\n\n if (!end) {\n var measure = view[view.length - 1].measure;\n var map = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map;\n end = {\n node: map[map.length - 1],\n offset: map[map.length - 2] - map[map.length - 3]\n };\n }\n\n if (!start || !end) {\n sel.removeAllRanges();\n return;\n }\n\n var old = sel.rangeCount && sel.getRangeAt(0),\n rng;\n\n try {\n rng = range(start.node, start.offset, end.offset, end.node);\n } catch (e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible\n\n\n if (rng) {\n if (!gecko && cm.state.focused) {\n sel.collapse(start.node, start.offset);\n\n if (!rng.collapsed) {\n sel.removeAllRanges();\n sel.addRange(rng);\n }\n } else {\n sel.removeAllRanges();\n sel.addRange(rng);\n }\n\n if (old && sel.anchorNode == null) {\n sel.addRange(old);\n } else if (gecko) {\n this.startGracePeriod();\n }\n }\n\n this.rememberSelection();\n };\n\n ContentEditableInput.prototype.startGracePeriod = function () {\n var this$1 = this;\n clearTimeout(this.gracePeriod);\n this.gracePeriod = setTimeout(function () {\n this$1.gracePeriod = false;\n\n if (this$1.selectionChanged()) {\n this$1.cm.operation(function () {\n return this$1.cm.curOp.selectionChanged = true;\n });\n }\n }, 20);\n };\n\n ContentEditableInput.prototype.showMultipleSelections = function (info) {\n removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors);\n removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection);\n };\n\n ContentEditableInput.prototype.rememberSelection = function () {\n var sel = this.getSelection();\n this.lastAnchorNode = sel.anchorNode;\n this.lastAnchorOffset = sel.anchorOffset;\n this.lastFocusNode = sel.focusNode;\n this.lastFocusOffset = sel.focusOffset;\n };\n\n ContentEditableInput.prototype.selectionInEditor = function () {\n var sel = this.getSelection();\n\n if (!sel.rangeCount) {\n return false;\n }\n\n var node = sel.getRangeAt(0).commonAncestorContainer;\n return contains(this.div, node);\n };\n\n ContentEditableInput.prototype.focus = function () {\n if (this.cm.options.readOnly != \"nocursor\") {\n if (!this.selectionInEditor() || activeElt() != this.div) {\n this.showSelection(this.prepareSelection(), true);\n }\n\n this.div.focus();\n }\n };\n\n ContentEditableInput.prototype.blur = function () {\n this.div.blur();\n };\n\n ContentEditableInput.prototype.getField = function () {\n return this.div;\n };\n\n ContentEditableInput.prototype.supportsTouch = function () {\n return true;\n };\n\n ContentEditableInput.prototype.receivedFocus = function () {\n var input = this;\n\n if (this.selectionInEditor()) {\n this.pollSelection();\n } else {\n runInOp(this.cm, function () {\n return input.cm.curOp.selectionChanged = true;\n });\n }\n\n function poll() {\n if (input.cm.state.focused) {\n input.pollSelection();\n input.polling.set(input.cm.options.pollInterval, poll);\n }\n }\n\n this.polling.set(this.cm.options.pollInterval, poll);\n };\n\n ContentEditableInput.prototype.selectionChanged = function () {\n var sel = this.getSelection();\n return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset || sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset;\n };\n\n ContentEditableInput.prototype.pollSelection = function () {\n if (this.readDOMTimeout != null || this.gracePeriod || !this.selectionChanged()) {\n return;\n }\n\n var sel = this.getSelection(),\n cm = this.cm; // On Android Chrome (version 56, at least), backspacing into an\n // uneditable block element will put the cursor in that element,\n // and then, because it's not editable, hide the virtual keyboard.\n // Because Android doesn't allow us to actually detect backspace\n // presses in a sane way, this code checks for when that happens\n // and simulates a backspace press in this case.\n\n if (android && chrome && this.cm.display.gutterSpecs.length && isInGutter(sel.anchorNode)) {\n this.cm.triggerOnKeyDown({\n type: \"keydown\",\n keyCode: 8,\n preventDefault: Math.abs\n });\n this.blur();\n this.focus();\n return;\n }\n\n if (this.composing) {\n return;\n }\n\n this.rememberSelection();\n var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);\n var head = domToPos(cm, sel.focusNode, sel.focusOffset);\n\n if (anchor && head) {\n runInOp(cm, function () {\n setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll);\n\n if (anchor.bad || head.bad) {\n cm.curOp.selectionChanged = true;\n }\n });\n }\n };\n\n ContentEditableInput.prototype.pollContent = function () {\n if (this.readDOMTimeout != null) {\n clearTimeout(this.readDOMTimeout);\n this.readDOMTimeout = null;\n }\n\n var cm = this.cm,\n display = cm.display,\n sel = cm.doc.sel.primary();\n var from = sel.from(),\n to = sel.to();\n\n if (from.ch == 0 && from.line > cm.firstLine()) {\n from = Pos(from.line - 1, getLine(cm.doc, from.line - 1).length);\n }\n\n if (to.ch == getLine(cm.doc, to.line).text.length && to.line < cm.lastLine()) {\n to = Pos(to.line + 1, 0);\n }\n\n if (from.line < display.viewFrom || to.line > display.viewTo - 1) {\n return false;\n }\n\n var fromIndex, fromLine, fromNode;\n\n if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) {\n fromLine = lineNo(display.view[0].line);\n fromNode = display.view[0].node;\n } else {\n fromLine = lineNo(display.view[fromIndex].line);\n fromNode = display.view[fromIndex - 1].node.nextSibling;\n }\n\n var toIndex = findViewIndex(cm, to.line);\n var toLine, toNode;\n\n if (toIndex == display.view.length - 1) {\n toLine = display.viewTo - 1;\n toNode = display.lineDiv.lastChild;\n } else {\n toLine = lineNo(display.view[toIndex + 1].line) - 1;\n toNode = display.view[toIndex + 1].node.previousSibling;\n }\n\n if (!fromNode) {\n return false;\n }\n\n var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine));\n var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length));\n\n while (newText.length > 1 && oldText.length > 1) {\n if (lst(newText) == lst(oldText)) {\n newText.pop();\n oldText.pop();\n toLine--;\n } else if (newText[0] == oldText[0]) {\n newText.shift();\n oldText.shift();\n fromLine++;\n } else {\n break;\n }\n }\n\n var cutFront = 0,\n cutEnd = 0;\n var newTop = newText[0],\n oldTop = oldText[0],\n maxCutFront = Math.min(newTop.length, oldTop.length);\n\n while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront)) {\n ++cutFront;\n }\n\n var newBot = lst(newText),\n oldBot = lst(oldText);\n var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0), oldBot.length - (oldText.length == 1 ? cutFront : 0));\n\n while (cutEnd < maxCutEnd && newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) {\n ++cutEnd;\n } // Try to move start of change to start of selection if ambiguous\n\n\n if (newText.length == 1 && oldText.length == 1 && fromLine == from.line) {\n while (cutFront && cutFront > from.ch && newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) {\n cutFront--;\n cutEnd++;\n }\n }\n\n newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd).replace(/^\\u200b+/, \"\");\n newText[0] = newText[0].slice(cutFront).replace(/\\u200b+$/, \"\");\n var chFrom = Pos(fromLine, cutFront);\n var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0);\n\n if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) {\n _replaceRange(cm.doc, newText, chFrom, chTo, \"+input\");\n\n return true;\n }\n };\n\n ContentEditableInput.prototype.ensurePolled = function () {\n this.forceCompositionEnd();\n };\n\n ContentEditableInput.prototype.reset = function () {\n this.forceCompositionEnd();\n };\n\n ContentEditableInput.prototype.forceCompositionEnd = function () {\n if (!this.composing) {\n return;\n }\n\n clearTimeout(this.readDOMTimeout);\n this.composing = null;\n this.updateFromDOM();\n this.div.blur();\n this.div.focus();\n };\n\n ContentEditableInput.prototype.readFromDOMSoon = function () {\n var this$1 = this;\n\n if (this.readDOMTimeout != null) {\n return;\n }\n\n this.readDOMTimeout = setTimeout(function () {\n this$1.readDOMTimeout = null;\n\n if (this$1.composing) {\n if (this$1.composing.done) {\n this$1.composing = null;\n } else {\n return;\n }\n }\n\n this$1.updateFromDOM();\n }, 80);\n };\n\n ContentEditableInput.prototype.updateFromDOM = function () {\n var this$1 = this;\n\n if (this.cm.isReadOnly() || !this.pollContent()) {\n runInOp(this.cm, function () {\n return regChange(this$1.cm);\n });\n }\n };\n\n ContentEditableInput.prototype.setUneditable = function (node) {\n node.contentEditable = \"false\";\n };\n\n ContentEditableInput.prototype.onKeyPress = function (e) {\n if (e.charCode == 0 || this.composing) {\n return;\n }\n\n e.preventDefault();\n\n if (!this.cm.isReadOnly()) {\n operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0);\n }\n };\n\n ContentEditableInput.prototype.readOnlyChanged = function (val) {\n this.div.contentEditable = String(val != \"nocursor\");\n };\n\n ContentEditableInput.prototype.onContextMenu = function () {};\n\n ContentEditableInput.prototype.resetPosition = function () {};\n\n ContentEditableInput.prototype.needsContentAttribute = true;\n\n function posToDOM(cm, pos) {\n var view = findViewForLine(cm, pos.line);\n\n if (!view || view.hidden) {\n return null;\n }\n\n var line = getLine(cm.doc, pos.line);\n var info = mapFromLineView(view, line, pos.line);\n var order = getOrder(line, cm.doc.direction),\n side = \"left\";\n\n if (order) {\n var partPos = getBidiPartAt(order, pos.ch);\n side = partPos % 2 ? \"right\" : \"left\";\n }\n\n var result = nodeAndOffsetInLineMap(info.map, pos.ch, side);\n result.offset = result.collapse == \"right\" ? result.end : result.start;\n return result;\n }\n\n function isInGutter(node) {\n for (var scan = node; scan; scan = scan.parentNode) {\n if (/CodeMirror-gutter-wrapper/.test(scan.className)) {\n return true;\n }\n }\n\n return false;\n }\n\n function badPos(pos, bad) {\n if (bad) {\n pos.bad = true;\n }\n\n return pos;\n }\n\n function domTextBetween(cm, from, to, fromLine, toLine) {\n var text = \"\",\n closing = false,\n lineSep = cm.doc.lineSeparator(),\n extraLinebreak = false;\n\n function recognizeMarker(id) {\n return function (marker) {\n return marker.id == id;\n };\n }\n\n function close() {\n if (closing) {\n text += lineSep;\n\n if (extraLinebreak) {\n text += lineSep;\n }\n\n closing = extraLinebreak = false;\n }\n }\n\n function addText(str) {\n if (str) {\n close();\n text += str;\n }\n }\n\n function walk(node) {\n if (node.nodeType == 1) {\n var cmText = node.getAttribute(\"cm-text\");\n\n if (cmText) {\n addText(cmText);\n return;\n }\n\n var markerID = node.getAttribute(\"cm-marker\"),\n range;\n\n if (markerID) {\n var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID));\n\n if (found.length && (range = found[0].find(0))) {\n addText(getBetween(cm.doc, range.from, range.to).join(lineSep));\n }\n\n return;\n }\n\n if (node.getAttribute(\"contenteditable\") == \"false\") {\n return;\n }\n\n var isBlock = /^(pre|div|p|li|table|br)$/i.test(node.nodeName);\n\n if (!/^br$/i.test(node.nodeName) && node.textContent.length == 0) {\n return;\n }\n\n if (isBlock) {\n close();\n }\n\n for (var i = 0; i < node.childNodes.length; i++) {\n walk(node.childNodes[i]);\n }\n\n if (/^(pre|p)$/i.test(node.nodeName)) {\n extraLinebreak = true;\n }\n\n if (isBlock) {\n closing = true;\n }\n } else if (node.nodeType == 3) {\n addText(node.nodeValue.replace(/\\u200b/g, \"\").replace(/\\u00a0/g, \" \"));\n }\n }\n\n for (;;) {\n walk(from);\n\n if (from == to) {\n break;\n }\n\n from = from.nextSibling;\n extraLinebreak = false;\n }\n\n return text;\n }\n\n function domToPos(cm, node, offset) {\n var lineNode;\n\n if (node == cm.display.lineDiv) {\n lineNode = cm.display.lineDiv.childNodes[offset];\n\n if (!lineNode) {\n return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true);\n }\n\n node = null;\n offset = 0;\n } else {\n for (lineNode = node;; lineNode = lineNode.parentNode) {\n if (!lineNode || lineNode == cm.display.lineDiv) {\n return null;\n }\n\n if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) {\n break;\n }\n }\n }\n\n for (var i = 0; i < cm.display.view.length; i++) {\n var lineView = cm.display.view[i];\n\n if (lineView.node == lineNode) {\n return locateNodeInLineView(lineView, node, offset);\n }\n }\n }\n\n function locateNodeInLineView(lineView, node, offset) {\n var wrapper = lineView.text.firstChild,\n bad = false;\n\n if (!node || !contains(wrapper, node)) {\n return badPos(Pos(lineNo(lineView.line), 0), true);\n }\n\n if (node == wrapper) {\n bad = true;\n node = wrapper.childNodes[offset];\n offset = 0;\n\n if (!node) {\n var line = lineView.rest ? lst(lineView.rest) : lineView.line;\n return badPos(Pos(lineNo(line), line.text.length), bad);\n }\n }\n\n var textNode = node.nodeType == 3 ? node : null,\n topNode = node;\n\n if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) {\n textNode = node.firstChild;\n\n if (offset) {\n offset = textNode.nodeValue.length;\n }\n }\n\n while (topNode.parentNode != wrapper) {\n topNode = topNode.parentNode;\n }\n\n var measure = lineView.measure,\n maps = measure.maps;\n\n function find(textNode, topNode, offset) {\n for (var i = -1; i < (maps ? maps.length : 0); i++) {\n var map = i < 0 ? measure.map : maps[i];\n\n for (var j = 0; j < map.length; j += 3) {\n var curNode = map[j + 2];\n\n if (curNode == textNode || curNode == topNode) {\n var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]);\n var ch = map[j] + offset;\n\n if (offset < 0 || curNode != textNode) {\n ch = map[j + (offset ? 1 : 0)];\n }\n\n return Pos(line, ch);\n }\n }\n }\n }\n\n var found = find(textNode, topNode, offset);\n\n if (found) {\n return badPos(found, bad);\n } // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems\n\n\n for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) {\n found = find(after, after.firstChild, 0);\n\n if (found) {\n return badPos(Pos(found.line, found.ch - dist), bad);\n } else {\n dist += after.textContent.length;\n }\n }\n\n for (var before = topNode.previousSibling, dist$1 = offset; before; before = before.previousSibling) {\n found = find(before, before.firstChild, -1);\n\n if (found) {\n return badPos(Pos(found.line, found.ch + dist$1), bad);\n } else {\n dist$1 += before.textContent.length;\n }\n }\n } // TEXTAREA INPUT STYLE\n\n\n var TextareaInput = function TextareaInput(cm) {\n this.cm = cm; // See input.poll and input.reset\n\n this.prevInput = \"\"; // Flag that indicates whether we expect input to appear real soon\n // now (after some event like 'keypress' or 'input') and are\n // polling intensively.\n\n this.pollingFast = false; // Self-resetting timeout for the poller\n\n this.polling = new Delayed(); // Used to work around IE issue with selection being forgotten when focus moves away from textarea\n\n this.hasSelection = false;\n this.composing = null;\n };\n\n TextareaInput.prototype.init = function (display) {\n var this$1 = this;\n var input = this,\n cm = this.cm;\n this.createField(display);\n var te = this.textarea;\n display.wrapper.insertBefore(this.wrapper, display.wrapper.firstChild); // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore)\n\n if (ios) {\n te.style.width = \"0px\";\n }\n\n on(te, \"input\", function () {\n if (ie && ie_version >= 9 && this$1.hasSelection) {\n this$1.hasSelection = null;\n }\n\n input.poll();\n });\n on(te, \"paste\", function (e) {\n if (signalDOMEvent(cm, e) || handlePaste(e, cm)) {\n return;\n }\n\n cm.state.pasteIncoming = +new Date();\n input.fastPoll();\n });\n\n function prepareCopyCut(e) {\n if (signalDOMEvent(cm, e)) {\n return;\n }\n\n if (cm.somethingSelected()) {\n setLastCopied({\n lineWise: false,\n text: cm.getSelections()\n });\n } else if (!cm.options.lineWiseCopyCut) {\n return;\n } else {\n var ranges = copyableRanges(cm);\n setLastCopied({\n lineWise: true,\n text: ranges.text\n });\n\n if (e.type == \"cut\") {\n cm.setSelections(ranges.ranges, null, sel_dontScroll);\n } else {\n input.prevInput = \"\";\n te.value = ranges.text.join(\"\\n\");\n selectInput(te);\n }\n }\n\n if (e.type == \"cut\") {\n cm.state.cutIncoming = +new Date();\n }\n }\n\n on(te, \"cut\", prepareCopyCut);\n on(te, \"copy\", prepareCopyCut);\n on(display.scroller, \"paste\", function (e) {\n if (eventInWidget(display, e) || signalDOMEvent(cm, e)) {\n return;\n }\n\n if (!te.dispatchEvent) {\n cm.state.pasteIncoming = +new Date();\n input.focus();\n return;\n } // Pass the `paste` event to the textarea so it's handled by its event listener.\n\n\n var event = new Event(\"paste\");\n event.clipboardData = e.clipboardData;\n te.dispatchEvent(event);\n }); // Prevent normal selection in the editor (we handle our own)\n\n on(display.lineSpace, \"selectstart\", function (e) {\n if (!eventInWidget(display, e)) {\n e_preventDefault(e);\n }\n });\n on(te, \"compositionstart\", function () {\n var start = cm.getCursor(\"from\");\n\n if (input.composing) {\n input.composing.range.clear();\n }\n\n input.composing = {\n start: start,\n range: cm.markText(start, cm.getCursor(\"to\"), {\n className: \"CodeMirror-composing\"\n })\n };\n });\n on(te, \"compositionend\", function () {\n if (input.composing) {\n input.poll();\n input.composing.range.clear();\n input.composing = null;\n }\n });\n };\n\n TextareaInput.prototype.createField = function (_display) {\n // Wraps and hides input textarea\n this.wrapper = hiddenTextarea(); // The semihidden textarea that is focused when the editor is\n // focused, and receives input.\n\n this.textarea = this.wrapper.firstChild;\n };\n\n TextareaInput.prototype.screenReaderLabelChanged = function (label) {\n // Label for screenreaders, accessibility\n if (label) {\n this.textarea.setAttribute('aria-label', label);\n } else {\n this.textarea.removeAttribute('aria-label');\n }\n };\n\n TextareaInput.prototype.prepareSelection = function () {\n // Redraw the selection and/or cursor\n var cm = this.cm,\n display = cm.display,\n doc = cm.doc;\n var result = prepareSelection(cm); // Move the hidden textarea near the cursor to prevent scrolling artifacts\n\n if (cm.options.moveInputWithCursor) {\n var headPos = _cursorCoords(cm, doc.sel.primary().head, \"div\");\n\n var wrapOff = display.wrapper.getBoundingClientRect(),\n lineOff = display.lineDiv.getBoundingClientRect();\n result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10, headPos.top + lineOff.top - wrapOff.top));\n result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10, headPos.left + lineOff.left - wrapOff.left));\n }\n\n return result;\n };\n\n TextareaInput.prototype.showSelection = function (drawn) {\n var cm = this.cm,\n display = cm.display;\n removeChildrenAndAdd(display.cursorDiv, drawn.cursors);\n removeChildrenAndAdd(display.selectionDiv, drawn.selection);\n\n if (drawn.teTop != null) {\n this.wrapper.style.top = drawn.teTop + \"px\";\n this.wrapper.style.left = drawn.teLeft + \"px\";\n }\n }; // Reset the input to correspond to the selection (or to be empty,\n // when not typing and nothing is selected)\n\n\n TextareaInput.prototype.reset = function (typing) {\n if (this.contextMenuPending || this.composing) {\n return;\n }\n\n var cm = this.cm;\n\n if (cm.somethingSelected()) {\n this.prevInput = \"\";\n var content = cm.getSelection();\n this.textarea.value = content;\n\n if (cm.state.focused) {\n selectInput(this.textarea);\n }\n\n if (ie && ie_version >= 9) {\n this.hasSelection = content;\n }\n } else if (!typing) {\n this.prevInput = this.textarea.value = \"\";\n\n if (ie && ie_version >= 9) {\n this.hasSelection = null;\n }\n }\n };\n\n TextareaInput.prototype.getField = function () {\n return this.textarea;\n };\n\n TextareaInput.prototype.supportsTouch = function () {\n return false;\n };\n\n TextareaInput.prototype.focus = function () {\n if (this.cm.options.readOnly != \"nocursor\" && (!mobile || activeElt() != this.textarea)) {\n try {\n this.textarea.focus();\n } catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM\n\n }\n };\n\n TextareaInput.prototype.blur = function () {\n this.textarea.blur();\n };\n\n TextareaInput.prototype.resetPosition = function () {\n this.wrapper.style.top = this.wrapper.style.left = 0;\n };\n\n TextareaInput.prototype.receivedFocus = function () {\n this.slowPoll();\n }; // Poll for input changes, using the normal rate of polling. This\n // runs as long as the editor is focused.\n\n\n TextareaInput.prototype.slowPoll = function () {\n var this$1 = this;\n\n if (this.pollingFast) {\n return;\n }\n\n this.polling.set(this.cm.options.pollInterval, function () {\n this$1.poll();\n\n if (this$1.cm.state.focused) {\n this$1.slowPoll();\n }\n });\n }; // When an event has just come in that is likely to add or change\n // something in the input textarea, we poll faster, to ensure that\n // the change appears on the screen quickly.\n\n\n TextareaInput.prototype.fastPoll = function () {\n var missed = false,\n input = this;\n input.pollingFast = true;\n\n function p() {\n var changed = input.poll();\n\n if (!changed && !missed) {\n missed = true;\n input.polling.set(60, p);\n } else {\n input.pollingFast = false;\n input.slowPoll();\n }\n }\n\n input.polling.set(20, p);\n }; // Read input from the textarea, and update the document to match.\n // When something is selected, it is present in the textarea, and\n // selected (unless it is huge, in which case a placeholder is\n // used). When nothing is selected, the cursor sits after previously\n // seen text (can be empty), which is stored in prevInput (we must\n // not reset the textarea when typing, because that breaks IME).\n\n\n TextareaInput.prototype.poll = function () {\n var this$1 = this;\n var cm = this.cm,\n input = this.textarea,\n prevInput = this.prevInput; // Since this is called a *lot*, try to bail out as cheaply as\n // possible when it is clear that nothing happened. hasSelection\n // will be the case when there is a lot of text in the textarea,\n // in which case reading its value would be expensive.\n\n if (this.contextMenuPending || !cm.state.focused || hasSelection(input) && !prevInput && !this.composing || cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq) {\n return false;\n }\n\n var text = input.value; // If nothing changed, bail.\n\n if (text == prevInput && !cm.somethingSelected()) {\n return false;\n } // Work around nonsensical selection resetting in IE9/10, and\n // inexplicable appearance of private area unicode characters on\n // some key combos in Mac (#2689).\n\n\n if (ie && ie_version >= 9 && this.hasSelection === text || mac && /[\\uf700-\\uf7ff]/.test(text)) {\n cm.display.input.reset();\n return false;\n }\n\n if (cm.doc.sel == cm.display.selForContextMenu) {\n var first = text.charCodeAt(0);\n\n if (first == 0x200b && !prevInput) {\n prevInput = \"\\u200B\";\n }\n\n if (first == 0x21da) {\n this.reset();\n return this.cm.execCommand(\"undo\");\n }\n } // Find the part of the input that is actually new\n\n\n var same = 0,\n l = Math.min(prevInput.length, text.length);\n\n while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) {\n ++same;\n }\n\n runInOp(cm, function () {\n applyTextInput(cm, text.slice(same), prevInput.length - same, null, this$1.composing ? \"*compose\" : null); // Don't leave long text in the textarea, since it makes further polling slow\n\n if (text.length > 1000 || text.indexOf(\"\\n\") > -1) {\n input.value = this$1.prevInput = \"\";\n } else {\n this$1.prevInput = text;\n }\n\n if (this$1.composing) {\n this$1.composing.range.clear();\n this$1.composing.range = cm.markText(this$1.composing.start, cm.getCursor(\"to\"), {\n className: \"CodeMirror-composing\"\n });\n }\n });\n return true;\n };\n\n TextareaInput.prototype.ensurePolled = function () {\n if (this.pollingFast && this.poll()) {\n this.pollingFast = false;\n }\n };\n\n TextareaInput.prototype.onKeyPress = function () {\n if (ie && ie_version >= 9) {\n this.hasSelection = null;\n }\n\n this.fastPoll();\n };\n\n TextareaInput.prototype.onContextMenu = function (e) {\n var input = this,\n cm = input.cm,\n display = cm.display,\n te = input.textarea;\n\n if (input.contextMenuPending) {\n input.contextMenuPending();\n }\n\n var pos = posFromMouse(cm, e),\n scrollPos = display.scroller.scrollTop;\n\n if (!pos || presto) {\n return;\n } // Opera is difficult.\n // Reset the current text selection only if the click is done outside of the selection\n // and 'resetSelectionOnContextMenu' option is true.\n\n\n var reset = cm.options.resetSelectionOnContextMenu;\n\n if (reset && cm.doc.sel.contains(pos) == -1) {\n operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll);\n }\n\n var oldCSS = te.style.cssText,\n oldWrapperCSS = input.wrapper.style.cssText;\n var wrapperBox = input.wrapper.offsetParent.getBoundingClientRect();\n input.wrapper.style.cssText = \"position: static\";\n te.style.cssText = \"position: absolute; width: 30px; height: 30px;\\n top: \" + (e.clientY - wrapperBox.top - 5) + \"px; left: \" + (e.clientX - wrapperBox.left - 5) + \"px;\\n z-index: 1000; background: \" + (ie ? \"rgba(255, 255, 255, .05)\" : \"transparent\") + \";\\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);\";\n var oldScrollY;\n\n if (webkit) {\n oldScrollY = window.scrollY;\n } // Work around Chrome issue (#2712)\n\n\n display.input.focus();\n\n if (webkit) {\n window.scrollTo(null, oldScrollY);\n }\n\n display.input.reset(); // Adds \"Select all\" to context menu in FF\n\n if (!cm.somethingSelected()) {\n te.value = input.prevInput = \" \";\n }\n\n input.contextMenuPending = rehide;\n display.selForContextMenu = cm.doc.sel;\n clearTimeout(display.detectingSelectAll); // Select-all will be greyed out if there's nothing to select, so\n // this adds a zero-width space so that we can later check whether\n // it got selected.\n\n function prepareSelectAllHack() {\n if (te.selectionStart != null) {\n var selected = cm.somethingSelected();\n var extval = \"\\u200B\" + (selected ? te.value : \"\");\n te.value = \"\\u21DA\"; // Used to catch context-menu undo\n\n te.value = extval;\n input.prevInput = selected ? \"\" : \"\\u200B\";\n te.selectionStart = 1;\n te.selectionEnd = extval.length; // Re-set this, in case some other handler touched the\n // selection in the meantime.\n\n display.selForContextMenu = cm.doc.sel;\n }\n }\n\n function rehide() {\n if (input.contextMenuPending != rehide) {\n return;\n }\n\n input.contextMenuPending = false;\n input.wrapper.style.cssText = oldWrapperCSS;\n te.style.cssText = oldCSS;\n\n if (ie && ie_version < 9) {\n display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos);\n } // Try to detect the user choosing select-all\n\n\n if (te.selectionStart != null) {\n if (!ie || ie && ie_version < 9) {\n prepareSelectAllHack();\n }\n\n var i = 0,\n poll = function poll() {\n if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 && te.selectionEnd > 0 && input.prevInput == \"\\u200B\") {\n operation(cm, selectAll)(cm);\n } else if (i++ < 10) {\n display.detectingSelectAll = setTimeout(poll, 500);\n } else {\n display.selForContextMenu = null;\n display.input.reset();\n }\n };\n\n display.detectingSelectAll = setTimeout(poll, 200);\n }\n }\n\n if (ie && ie_version >= 9) {\n prepareSelectAllHack();\n }\n\n if (captureRightClick) {\n e_stop(e);\n\n var mouseup = function mouseup() {\n off(window, \"mouseup\", mouseup);\n setTimeout(rehide, 20);\n };\n\n on(window, \"mouseup\", mouseup);\n } else {\n setTimeout(rehide, 50);\n }\n };\n\n TextareaInput.prototype.readOnlyChanged = function (val) {\n if (!val) {\n this.reset();\n }\n\n this.textarea.disabled = val == \"nocursor\";\n this.textarea.readOnly = !!val;\n };\n\n TextareaInput.prototype.setUneditable = function () {};\n\n TextareaInput.prototype.needsContentAttribute = false;\n\n function fromTextArea(textarea, options) {\n options = options ? copyObj(options) : {};\n options.value = textarea.value;\n\n if (!options.tabindex && textarea.tabIndex) {\n options.tabindex = textarea.tabIndex;\n }\n\n if (!options.placeholder && textarea.placeholder) {\n options.placeholder = textarea.placeholder;\n } // Set autofocus to true if this textarea is focused, or if it has\n // autofocus and no other element is focused.\n\n\n if (options.autofocus == null) {\n var hasFocus = activeElt();\n options.autofocus = hasFocus == textarea || textarea.getAttribute(\"autofocus\") != null && hasFocus == document.body;\n }\n\n function save() {\n textarea.value = cm.getValue();\n }\n\n var realSubmit;\n\n if (textarea.form) {\n on(textarea.form, \"submit\", save); // Deplorable hack to make the submit method do the right thing.\n\n if (!options.leaveSubmitMethodAlone) {\n var form = textarea.form;\n realSubmit = form.submit;\n\n try {\n var wrappedSubmit = form.submit = function () {\n save();\n form.submit = realSubmit;\n form.submit();\n form.submit = wrappedSubmit;\n };\n } catch (e) {}\n }\n }\n\n options.finishInit = function (cm) {\n cm.save = save;\n\n cm.getTextArea = function () {\n return textarea;\n };\n\n cm.toTextArea = function () {\n cm.toTextArea = isNaN; // Prevent this from being ran twice\n\n save();\n textarea.parentNode.removeChild(cm.getWrapperElement());\n textarea.style.display = \"\";\n\n if (textarea.form) {\n off(textarea.form, \"submit\", save);\n\n if (!options.leaveSubmitMethodAlone && typeof textarea.form.submit == \"function\") {\n textarea.form.submit = realSubmit;\n }\n }\n };\n };\n\n textarea.style.display = \"none\";\n var cm = CodeMirror(function (node) {\n return textarea.parentNode.insertBefore(node, textarea.nextSibling);\n }, options);\n return cm;\n }\n\n function addLegacyProps(CodeMirror) {\n CodeMirror.off = off;\n CodeMirror.on = on;\n CodeMirror.wheelEventPixels = wheelEventPixels;\n CodeMirror.Doc = Doc;\n CodeMirror.splitLines = splitLinesAuto;\n CodeMirror.countColumn = countColumn;\n CodeMirror.findColumn = findColumn;\n CodeMirror.isWordChar = isWordCharBasic;\n CodeMirror.Pass = Pass;\n CodeMirror.signal = signal;\n CodeMirror.Line = Line;\n CodeMirror.changeEnd = changeEnd;\n CodeMirror.scrollbarModel = scrollbarModel;\n CodeMirror.Pos = Pos;\n CodeMirror.cmpPos = cmp;\n CodeMirror.modes = modes;\n CodeMirror.mimeModes = mimeModes;\n CodeMirror.resolveMode = resolveMode;\n CodeMirror.getMode = getMode;\n CodeMirror.modeExtensions = modeExtensions;\n CodeMirror.extendMode = extendMode;\n CodeMirror.copyState = copyState;\n CodeMirror.startState = startState;\n CodeMirror.innerMode = innerMode;\n CodeMirror.commands = commands;\n CodeMirror.keyMap = keyMap;\n CodeMirror.keyName = keyName;\n CodeMirror.isModifierKey = isModifierKey;\n CodeMirror.lookupKey = lookupKey;\n CodeMirror.normalizeKeyMap = normalizeKeyMap;\n CodeMirror.StringStream = StringStream;\n CodeMirror.SharedTextMarker = SharedTextMarker;\n CodeMirror.TextMarker = TextMarker;\n CodeMirror.LineWidget = LineWidget;\n CodeMirror.e_preventDefault = e_preventDefault;\n CodeMirror.e_stopPropagation = e_stopPropagation;\n CodeMirror.e_stop = e_stop;\n CodeMirror.addClass = addClass;\n CodeMirror.contains = contains;\n CodeMirror.rmClass = rmClass;\n CodeMirror.keyNames = keyNames;\n } // EDITOR CONSTRUCTOR\n\n\n defineOptions(CodeMirror);\n addEditorMethods(CodeMirror); // Set up methods on CodeMirror's prototype to redirect to the editor's document.\n\n var dontDelegate = \"iter insert remove copy getEditor constructor\".split(\" \");\n\n for (var prop in Doc.prototype) {\n if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0) {\n CodeMirror.prototype[prop] = function (method) {\n return function () {\n return method.apply(this.doc, arguments);\n };\n }(Doc.prototype[prop]);\n }\n }\n\n eventMixin(Doc);\n CodeMirror.inputStyles = {\n \"textarea\": TextareaInput,\n \"contenteditable\": ContentEditableInput\n }; // Extra arguments are stored as the mode's dependencies, which is\n // used by (legacy) mechanisms like loadmode.js to automatically\n // load a mode. (Preferred mechanism is the require/define calls.)\n\n CodeMirror.defineMode = function (name\n /*, mode, …*/\n ) {\n if (!CodeMirror.defaults.mode && name != \"null\") {\n CodeMirror.defaults.mode = name;\n }\n\n defineMode.apply(this, arguments);\n };\n\n CodeMirror.defineMIME = defineMIME; // Minimal default mode.\n\n CodeMirror.defineMode(\"null\", function () {\n return {\n token: function token(stream) {\n return stream.skipToEnd();\n }\n };\n });\n CodeMirror.defineMIME(\"text/plain\", \"null\"); // EXTENSIONS\n\n CodeMirror.defineExtension = function (name, func) {\n CodeMirror.prototype[name] = func;\n };\n\n CodeMirror.defineDocExtension = function (name, func) {\n Doc.prototype[name] = func;\n };\n\n CodeMirror.fromTextArea = fromTextArea;\n addLegacyProps(CodeMirror);\n CodeMirror.version = \"5.62.3\";\n return CodeMirror;\n});","// Initialize a jQuery object\ndefine([\"../core\", \"../var/document\", \"../var/isFunction\", \"./var/rsingleTag\", \"../traversing/findFilter\"], function (jQuery, document, isFunction, rsingleTag) {\n \"use strict\"; // A central reference to the root jQuery(document)\n\n var rootjQuery,\n // A simple way to check for HTML strings\n // Prioritize #id over to avoid XSS via location.hash (#9521)\n // Strict HTML recognition (#11290: must start with <)\n // Shortcut simple #id case for speed\n rquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n init = jQuery.fn.init = function (selector, context, root) {\n var match, elem; // HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\n if (!selector) {\n return this;\n } // Method init() accepts an alternate rootjQuery\n // so migrate can support jQuery.sub (gh-2101)\n\n\n root = root || rootjQuery; // Handle HTML strings\n\n if (typeof selector === \"string\") {\n if (selector[0] === \"<\" && selector[selector.length - 1] === \">\" && selector.length >= 3) {\n // Assume that strings that start and end with <> are HTML and skip the regex check\n match = [null, selector, null];\n } else {\n match = rquickExpr.exec(selector);\n } // Match html or make sure no context is specified for #id\n\n\n if (match && (match[1] || !context)) {\n // HANDLE: $(html) -> $(array)\n if (match[1]) {\n context = context instanceof jQuery ? context[0] : context; // Option to run scripts is true for back-compat\n // Intentionally let the error be thrown if parseHTML is not present\n\n jQuery.merge(this, jQuery.parseHTML(match[1], context && context.nodeType ? context.ownerDocument || context : document, true)); // HANDLE: $(html, props)\n\n if (rsingleTag.test(match[1]) && jQuery.isPlainObject(context)) {\n for (match in context) {\n // Properties of context are called as methods if possible\n if (isFunction(this[match])) {\n this[match](context[match]); // ...and otherwise set as attributes\n } else {\n this.attr(match, context[match]);\n }\n }\n }\n\n return this; // HANDLE: $(#id)\n } else {\n elem = document.getElementById(match[2]);\n\n if (elem) {\n // Inject the element directly into the jQuery object\n this[0] = elem;\n this.length = 1;\n }\n\n return this;\n } // HANDLE: $(expr, $(...))\n\n } else if (!context || context.jquery) {\n return (context || root).find(selector); // HANDLE: $(expr, context)\n // (which is just equivalent to: $(context).find(expr)\n } else {\n return this.constructor(context).find(selector);\n } // HANDLE: $(DOMElement)\n\n } else if (selector.nodeType) {\n this[0] = selector;\n this.length = 1;\n return this; // HANDLE: $(function)\n // Shortcut for document ready\n } else if (isFunction(selector)) {\n return root.ready !== undefined ? root.ready(selector) : // Execute immediately if ready is not present\n selector(jQuery);\n }\n\n return jQuery.makeArray(selector, this);\n }; // Give the init function the jQuery prototype for later instantiation\n\n\n init.prototype = jQuery.fn; // Initialize central reference\n\n rootjQuery = jQuery(document);\n return init;\n});","define([\"../Data\"], function (Data) {\n \"use strict\";\n\n return new Data();\n});","var EventListener = function () {\n function EventListener(eventTarget, eventName) {\n this.eventTarget = eventTarget;\n this.eventName = eventName;\n this.unorderedBindings = new Set();\n }\n\n EventListener.prototype.connect = function () {\n this.eventTarget.addEventListener(this.eventName, this, false);\n };\n\n EventListener.prototype.disconnect = function () {\n this.eventTarget.removeEventListener(this.eventName, this, false);\n }; // Binding observer delegate\n\n /** @hidden */\n\n\n EventListener.prototype.bindingConnected = function (binding) {\n this.unorderedBindings.add(binding);\n };\n /** @hidden */\n\n\n EventListener.prototype.bindingDisconnected = function (binding) {\n this.unorderedBindings.delete(binding);\n };\n\n EventListener.prototype.handleEvent = function (event) {\n var extendedEvent = extendEvent(event);\n\n for (var _i = 0, _a = this.bindings; _i < _a.length; _i++) {\n var binding = _a[_i];\n\n if (extendedEvent.immediatePropagationStopped) {\n break;\n } else {\n binding.handleEvent(extendedEvent);\n }\n }\n };\n\n Object.defineProperty(EventListener.prototype, \"bindings\", {\n get: function get() {\n return Array.from(this.unorderedBindings).sort(function (left, right) {\n var leftIndex = left.index,\n rightIndex = right.index;\n return leftIndex < rightIndex ? -1 : leftIndex > rightIndex ? 1 : 0;\n });\n },\n enumerable: true,\n configurable: true\n });\n return EventListener;\n}();\n\nexport { EventListener };\n\nfunction extendEvent(event) {\n if (\"immediatePropagationStopped\" in event) {\n return event;\n } else {\n var stopImmediatePropagation_1 = event.stopImmediatePropagation;\n return Object.assign(event, {\n immediatePropagationStopped: false,\n stopImmediatePropagation: function stopImmediatePropagation() {\n this.immediatePropagationStopped = true;\n stopImmediatePropagation_1.call(this);\n }\n });\n }\n}","import { EventListener } from \"./event_listener\";\n\nvar Dispatcher = function () {\n function Dispatcher(application) {\n this.application = application;\n this.eventListenerMaps = new Map();\n this.started = false;\n }\n\n Dispatcher.prototype.start = function () {\n if (!this.started) {\n this.started = true;\n this.eventListeners.forEach(function (eventListener) {\n return eventListener.connect();\n });\n }\n };\n\n Dispatcher.prototype.stop = function () {\n if (this.started) {\n this.started = false;\n this.eventListeners.forEach(function (eventListener) {\n return eventListener.disconnect();\n });\n }\n };\n\n Object.defineProperty(Dispatcher.prototype, \"eventListeners\", {\n get: function get() {\n return Array.from(this.eventListenerMaps.values()).reduce(function (listeners, map) {\n return listeners.concat(Array.from(map.values()));\n }, []);\n },\n enumerable: true,\n configurable: true\n }); // Binding observer delegate\n\n /** @hidden */\n\n Dispatcher.prototype.bindingConnected = function (binding) {\n this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n };\n /** @hidden */\n\n\n Dispatcher.prototype.bindingDisconnected = function (binding) {\n this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n }; // Error handling\n\n\n Dispatcher.prototype.handleError = function (error, message, detail) {\n if (detail === void 0) {\n detail = {};\n }\n\n this.application.handleError(error, \"Error \" + message, detail);\n };\n\n Dispatcher.prototype.fetchEventListenerForBinding = function (binding) {\n var eventTarget = binding.eventTarget,\n eventName = binding.eventName;\n return this.fetchEventListener(eventTarget, eventName);\n };\n\n Dispatcher.prototype.fetchEventListener = function (eventTarget, eventName) {\n var eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n var eventListener = eventListenerMap.get(eventName);\n\n if (!eventListener) {\n eventListener = this.createEventListener(eventTarget, eventName);\n eventListenerMap.set(eventName, eventListener);\n }\n\n return eventListener;\n };\n\n Dispatcher.prototype.createEventListener = function (eventTarget, eventName) {\n var eventListener = new EventListener(eventTarget, eventName);\n\n if (this.started) {\n eventListener.connect();\n }\n\n return eventListener;\n };\n\n Dispatcher.prototype.fetchEventListenerMapForEventTarget = function (eventTarget) {\n var eventListenerMap = this.eventListenerMaps.get(eventTarget);\n\n if (!eventListenerMap) {\n eventListenerMap = new Map();\n this.eventListenerMaps.set(eventTarget, eventListenerMap);\n }\n\n return eventListenerMap;\n };\n\n return Dispatcher;\n}();\n\nexport { Dispatcher };","// capture nos.: 12 23 4 43 1 5 56 7 76\nvar descriptorPattern = /^((.+?)(@(window|document))?->)?(.+?)(#(.+))?$/;\nexport function parseDescriptorString(descriptorString) {\n var source = descriptorString.trim();\n var matches = source.match(descriptorPattern) || [];\n return {\n eventTarget: parseEventTarget(matches[4]),\n eventName: matches[2],\n identifier: matches[5],\n methodName: matches[7]\n };\n}\n\nfunction parseEventTarget(eventTargetName) {\n if (eventTargetName == \"window\") {\n return window;\n } else if (eventTargetName == \"document\") {\n return document;\n }\n}\n\nexport function stringifyEventTarget(eventTarget) {\n if (eventTarget == window) {\n return \"window\";\n } else if (eventTarget == document) {\n return \"document\";\n }\n}","import { parseDescriptorString, stringifyEventTarget } from \"./action_descriptor\";\n\nvar Action = function () {\n function Action(element, index, descriptor) {\n this.element = element;\n this.index = index;\n this.eventTarget = descriptor.eventTarget || element;\n this.eventName = descriptor.eventName || getDefaultEventNameForElement(element) || error(\"missing event name\");\n this.identifier = descriptor.identifier || error(\"missing identifier\");\n this.methodName = descriptor.methodName || error(\"missing method name\");\n }\n\n Action.forToken = function (token) {\n return new this(token.element, token.index, parseDescriptorString(token.content));\n };\n\n Action.prototype.toString = function () {\n var eventNameSuffix = this.eventTargetName ? \"@\" + this.eventTargetName : \"\";\n return \"\" + this.eventName + eventNameSuffix + \"->\" + this.identifier + \"#\" + this.methodName;\n };\n\n Object.defineProperty(Action.prototype, \"eventTargetName\", {\n get: function get() {\n return stringifyEventTarget(this.eventTarget);\n },\n enumerable: true,\n configurable: true\n });\n return Action;\n}();\n\nexport { Action };\nvar defaultEventNames = {\n \"a\": function a(e) {\n return \"click\";\n },\n \"button\": function button(e) {\n return \"click\";\n },\n \"form\": function form(e) {\n return \"submit\";\n },\n \"input\": function input(e) {\n return e.getAttribute(\"type\") == \"submit\" ? \"click\" : \"change\";\n },\n \"select\": function select(e) {\n return \"change\";\n },\n \"textarea\": function textarea(e) {\n return \"change\";\n }\n};\nexport function getDefaultEventNameForElement(element) {\n var tagName = element.tagName.toLowerCase();\n\n if (tagName in defaultEventNames) {\n return defaultEventNames[tagName](element);\n }\n}\n\nfunction error(message) {\n throw new Error(message);\n}","var Binding = function () {\n function Binding(context, action) {\n this.context = context;\n this.action = action;\n }\n\n Object.defineProperty(Binding.prototype, \"index\", {\n get: function get() {\n return this.action.index;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Binding.prototype, \"eventTarget\", {\n get: function get() {\n return this.action.eventTarget;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Binding.prototype, \"identifier\", {\n get: function get() {\n return this.context.identifier;\n },\n enumerable: true,\n configurable: true\n });\n\n Binding.prototype.handleEvent = function (event) {\n if (this.willBeInvokedByEvent(event)) {\n this.invokeWithEvent(event);\n }\n };\n\n Object.defineProperty(Binding.prototype, \"eventName\", {\n get: function get() {\n return this.action.eventName;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Binding.prototype, \"method\", {\n get: function get() {\n var method = this.controller[this.methodName];\n\n if (typeof method == \"function\") {\n return method;\n }\n\n throw new Error(\"Action \\\"\" + this.action + \"\\\" references undefined method \\\"\" + this.methodName + \"\\\"\");\n },\n enumerable: true,\n configurable: true\n });\n\n Binding.prototype.invokeWithEvent = function (event) {\n try {\n this.method.call(this.controller, event);\n } catch (error) {\n var _a = this,\n identifier = _a.identifier,\n controller = _a.controller,\n element = _a.element,\n index = _a.index;\n\n var detail = {\n identifier: identifier,\n controller: controller,\n element: element,\n index: index,\n event: event\n };\n this.context.handleError(error, \"invoking action \\\"\" + this.action + \"\\\"\", detail);\n }\n };\n\n Binding.prototype.willBeInvokedByEvent = function (event) {\n var eventTarget = event.target;\n\n if (this.element === eventTarget) {\n return true;\n } else if (eventTarget instanceof Element && this.element.contains(eventTarget)) {\n return this.scope.containsElement(eventTarget);\n } else {\n return true;\n }\n };\n\n Object.defineProperty(Binding.prototype, \"controller\", {\n get: function get() {\n return this.context.controller;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Binding.prototype, \"methodName\", {\n get: function get() {\n return this.action.methodName;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Binding.prototype, \"element\", {\n get: function get() {\n return this.scope.element;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Binding.prototype, \"scope\", {\n get: function get() {\n return this.context.scope;\n },\n enumerable: true,\n configurable: true\n });\n return Binding;\n}();\n\nexport { Binding };","var ElementObserver = function () {\n function ElementObserver(element, delegate) {\n var _this = this;\n\n this.element = element;\n this.started = false;\n this.delegate = delegate;\n this.elements = new Set();\n this.mutationObserver = new MutationObserver(function (mutations) {\n return _this.processMutations(mutations);\n });\n }\n\n ElementObserver.prototype.start = function () {\n if (!this.started) {\n this.started = true;\n this.mutationObserver.observe(this.element, {\n attributes: true,\n childList: true,\n subtree: true\n });\n this.refresh();\n }\n };\n\n ElementObserver.prototype.stop = function () {\n if (this.started) {\n this.mutationObserver.takeRecords();\n this.mutationObserver.disconnect();\n this.started = false;\n }\n };\n\n ElementObserver.prototype.refresh = function () {\n if (this.started) {\n var matches = new Set(this.matchElementsInTree());\n\n for (var _i = 0, _a = Array.from(this.elements); _i < _a.length; _i++) {\n var element = _a[_i];\n\n if (!matches.has(element)) {\n this.removeElement(element);\n }\n }\n\n for (var _b = 0, _c = Array.from(matches); _b < _c.length; _b++) {\n var element = _c[_b];\n this.addElement(element);\n }\n }\n }; // Mutation record processing\n\n\n ElementObserver.prototype.processMutations = function (mutations) {\n if (this.started) {\n for (var _i = 0, mutations_1 = mutations; _i < mutations_1.length; _i++) {\n var mutation = mutations_1[_i];\n this.processMutation(mutation);\n }\n }\n };\n\n ElementObserver.prototype.processMutation = function (mutation) {\n if (mutation.type == \"attributes\") {\n this.processAttributeChange(mutation.target, mutation.attributeName);\n } else if (mutation.type == \"childList\") {\n this.processRemovedNodes(mutation.removedNodes);\n this.processAddedNodes(mutation.addedNodes);\n }\n };\n\n ElementObserver.prototype.processAttributeChange = function (node, attributeName) {\n var element = node;\n\n if (this.elements.has(element)) {\n if (this.delegate.elementAttributeChanged && this.matchElement(element)) {\n this.delegate.elementAttributeChanged(element, attributeName);\n } else {\n this.removeElement(element);\n }\n } else if (this.matchElement(element)) {\n this.addElement(element);\n }\n };\n\n ElementObserver.prototype.processRemovedNodes = function (nodes) {\n for (var _i = 0, _a = Array.from(nodes); _i < _a.length; _i++) {\n var node = _a[_i];\n var element = this.elementFromNode(node);\n\n if (element) {\n this.processTree(element, this.removeElement);\n }\n }\n };\n\n ElementObserver.prototype.processAddedNodes = function (nodes) {\n for (var _i = 0, _a = Array.from(nodes); _i < _a.length; _i++) {\n var node = _a[_i];\n var element = this.elementFromNode(node);\n\n if (element && this.elementIsActive(element)) {\n this.processTree(element, this.addElement);\n }\n }\n }; // Element matching\n\n\n ElementObserver.prototype.matchElement = function (element) {\n return this.delegate.matchElement(element);\n };\n\n ElementObserver.prototype.matchElementsInTree = function (tree) {\n if (tree === void 0) {\n tree = this.element;\n }\n\n return this.delegate.matchElementsInTree(tree);\n };\n\n ElementObserver.prototype.processTree = function (tree, processor) {\n for (var _i = 0, _a = this.matchElementsInTree(tree); _i < _a.length; _i++) {\n var element = _a[_i];\n processor.call(this, element);\n }\n };\n\n ElementObserver.prototype.elementFromNode = function (node) {\n if (node.nodeType == Node.ELEMENT_NODE) {\n return node;\n }\n };\n\n ElementObserver.prototype.elementIsActive = function (element) {\n if (element.isConnected != this.element.isConnected) {\n return false;\n } else {\n return this.element.contains(element);\n }\n }; // Element tracking\n\n\n ElementObserver.prototype.addElement = function (element) {\n if (!this.elements.has(element)) {\n if (this.elementIsActive(element)) {\n this.elements.add(element);\n\n if (this.delegate.elementMatched) {\n this.delegate.elementMatched(element);\n }\n }\n }\n };\n\n ElementObserver.prototype.removeElement = function (element) {\n if (this.elements.has(element)) {\n this.elements.delete(element);\n\n if (this.delegate.elementUnmatched) {\n this.delegate.elementUnmatched(element);\n }\n }\n };\n\n return ElementObserver;\n}();\n\nexport { ElementObserver };","import { ElementObserver } from \"./element_observer\";\n\nvar AttributeObserver = function () {\n function AttributeObserver(element, attributeName, delegate) {\n this.attributeName = attributeName;\n this.delegate = delegate;\n this.elementObserver = new ElementObserver(element, this);\n }\n\n Object.defineProperty(AttributeObserver.prototype, \"element\", {\n get: function get() {\n return this.elementObserver.element;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AttributeObserver.prototype, \"selector\", {\n get: function get() {\n return \"[\" + this.attributeName + \"]\";\n },\n enumerable: true,\n configurable: true\n });\n\n AttributeObserver.prototype.start = function () {\n this.elementObserver.start();\n };\n\n AttributeObserver.prototype.stop = function () {\n this.elementObserver.stop();\n };\n\n AttributeObserver.prototype.refresh = function () {\n this.elementObserver.refresh();\n };\n\n Object.defineProperty(AttributeObserver.prototype, \"started\", {\n get: function get() {\n return this.elementObserver.started;\n },\n enumerable: true,\n configurable: true\n }); // Element observer delegate\n\n AttributeObserver.prototype.matchElement = function (element) {\n return element.hasAttribute(this.attributeName);\n };\n\n AttributeObserver.prototype.matchElementsInTree = function (tree) {\n var match = this.matchElement(tree) ? [tree] : [];\n var matches = Array.from(tree.querySelectorAll(this.selector));\n return match.concat(matches);\n };\n\n AttributeObserver.prototype.elementMatched = function (element) {\n if (this.delegate.elementMatchedAttribute) {\n this.delegate.elementMatchedAttribute(element, this.attributeName);\n }\n };\n\n AttributeObserver.prototype.elementUnmatched = function (element) {\n if (this.delegate.elementUnmatchedAttribute) {\n this.delegate.elementUnmatchedAttribute(element, this.attributeName);\n }\n };\n\n AttributeObserver.prototype.elementAttributeChanged = function (element, attributeName) {\n if (this.delegate.elementAttributeValueChanged && this.attributeName == attributeName) {\n this.delegate.elementAttributeValueChanged(element, attributeName);\n }\n };\n\n return AttributeObserver;\n}();\n\nexport { AttributeObserver };","export function add(map, key, value) {\n fetch(map, key).add(value);\n}\nexport function del(map, key, value) {\n fetch(map, key).delete(value);\n prune(map, key);\n}\nexport function fetch(map, key) {\n var values = map.get(key);\n\n if (!values) {\n values = new Set();\n map.set(key, values);\n }\n\n return values;\n}\nexport function prune(map, key) {\n var values = map.get(key);\n\n if (values != null && values.size == 0) {\n map.delete(key);\n }\n}","import { add, del } from \"./set_operations\";\n\nvar Multimap = function () {\n function Multimap() {\n this.valuesByKey = new Map();\n }\n\n Object.defineProperty(Multimap.prototype, \"values\", {\n get: function get() {\n var sets = Array.from(this.valuesByKey.values());\n return sets.reduce(function (values, set) {\n return values.concat(Array.from(set));\n }, []);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Multimap.prototype, \"size\", {\n get: function get() {\n var sets = Array.from(this.valuesByKey.values());\n return sets.reduce(function (size, set) {\n return size + set.size;\n }, 0);\n },\n enumerable: true,\n configurable: true\n });\n\n Multimap.prototype.add = function (key, value) {\n add(this.valuesByKey, key, value);\n };\n\n Multimap.prototype.delete = function (key, value) {\n del(this.valuesByKey, key, value);\n };\n\n Multimap.prototype.has = function (key, value) {\n var values = this.valuesByKey.get(key);\n return values != null && values.has(value);\n };\n\n Multimap.prototype.hasKey = function (key) {\n return this.valuesByKey.has(key);\n };\n\n Multimap.prototype.hasValue = function (value) {\n var sets = Array.from(this.valuesByKey.values());\n return sets.some(function (set) {\n return set.has(value);\n });\n };\n\n Multimap.prototype.getValuesForKey = function (key) {\n var values = this.valuesByKey.get(key);\n return values ? Array.from(values) : [];\n };\n\n Multimap.prototype.getKeysForValue = function (value) {\n return Array.from(this.valuesByKey).filter(function (_a) {\n var key = _a[0],\n values = _a[1];\n return values.has(value);\n }).map(function (_a) {\n var key = _a[0],\n values = _a[1];\n return key;\n });\n };\n\n return Multimap;\n}();\n\nexport { Multimap };","var __extends = this && this.__extends || function () {\n var extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) {\n if (b.hasOwnProperty(p)) d[p] = b[p];\n }\n };\n\n return function (d, b) {\n extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\n\nimport { Multimap } from \"./multimap\";\nimport { add, del } from \"./set_operations\";\n\nvar IndexedMultimap = function (_super) {\n __extends(IndexedMultimap, _super);\n\n function IndexedMultimap() {\n var _this = _super.call(this) || this;\n\n _this.keysByValue = new Map();\n return _this;\n }\n\n Object.defineProperty(IndexedMultimap.prototype, \"values\", {\n get: function get() {\n return Array.from(this.keysByValue.keys());\n },\n enumerable: true,\n configurable: true\n });\n\n IndexedMultimap.prototype.add = function (key, value) {\n _super.prototype.add.call(this, key, value);\n\n add(this.keysByValue, value, key);\n };\n\n IndexedMultimap.prototype.delete = function (key, value) {\n _super.prototype.delete.call(this, key, value);\n\n del(this.keysByValue, value, key);\n };\n\n IndexedMultimap.prototype.hasValue = function (value) {\n return this.keysByValue.has(value);\n };\n\n IndexedMultimap.prototype.getKeysForValue = function (value) {\n var set = this.keysByValue.get(value);\n return set ? Array.from(set) : [];\n };\n\n return IndexedMultimap;\n}(Multimap);\n\nexport { IndexedMultimap };","import { AttributeObserver } from \"./attribute_observer\";\nimport { Multimap } from \"@stimulus/multimap\";\n\nvar TokenListObserver = function () {\n function TokenListObserver(element, attributeName, delegate) {\n this.attributeObserver = new AttributeObserver(element, attributeName, this);\n this.delegate = delegate;\n this.tokensByElement = new Multimap();\n }\n\n Object.defineProperty(TokenListObserver.prototype, \"started\", {\n get: function get() {\n return this.attributeObserver.started;\n },\n enumerable: true,\n configurable: true\n });\n\n TokenListObserver.prototype.start = function () {\n this.attributeObserver.start();\n };\n\n TokenListObserver.prototype.stop = function () {\n this.attributeObserver.stop();\n };\n\n TokenListObserver.prototype.refresh = function () {\n this.attributeObserver.refresh();\n };\n\n Object.defineProperty(TokenListObserver.prototype, \"element\", {\n get: function get() {\n return this.attributeObserver.element;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TokenListObserver.prototype, \"attributeName\", {\n get: function get() {\n return this.attributeObserver.attributeName;\n },\n enumerable: true,\n configurable: true\n }); // Attribute observer delegate\n\n TokenListObserver.prototype.elementMatchedAttribute = function (element) {\n this.tokensMatched(this.readTokensForElement(element));\n };\n\n TokenListObserver.prototype.elementAttributeValueChanged = function (element) {\n var _a = this.refreshTokensForElement(element),\n unmatchedTokens = _a[0],\n matchedTokens = _a[1];\n\n this.tokensUnmatched(unmatchedTokens);\n this.tokensMatched(matchedTokens);\n };\n\n TokenListObserver.prototype.elementUnmatchedAttribute = function (element) {\n this.tokensUnmatched(this.tokensByElement.getValuesForKey(element));\n };\n\n TokenListObserver.prototype.tokensMatched = function (tokens) {\n var _this = this;\n\n tokens.forEach(function (token) {\n return _this.tokenMatched(token);\n });\n };\n\n TokenListObserver.prototype.tokensUnmatched = function (tokens) {\n var _this = this;\n\n tokens.forEach(function (token) {\n return _this.tokenUnmatched(token);\n });\n };\n\n TokenListObserver.prototype.tokenMatched = function (token) {\n this.delegate.tokenMatched(token);\n this.tokensByElement.add(token.element, token);\n };\n\n TokenListObserver.prototype.tokenUnmatched = function (token) {\n this.delegate.tokenUnmatched(token);\n this.tokensByElement.delete(token.element, token);\n };\n\n TokenListObserver.prototype.refreshTokensForElement = function (element) {\n var previousTokens = this.tokensByElement.getValuesForKey(element);\n var currentTokens = this.readTokensForElement(element);\n var firstDifferingIndex = zip(previousTokens, currentTokens).findIndex(function (_a) {\n var previousToken = _a[0],\n currentToken = _a[1];\n return !tokensAreEqual(previousToken, currentToken);\n });\n\n if (firstDifferingIndex == -1) {\n return [[], []];\n } else {\n return [previousTokens.slice(firstDifferingIndex), currentTokens.slice(firstDifferingIndex)];\n }\n };\n\n TokenListObserver.prototype.readTokensForElement = function (element) {\n var attributeName = this.attributeName;\n var tokenString = element.getAttribute(attributeName) || \"\";\n return parseTokenString(tokenString, element, attributeName);\n };\n\n return TokenListObserver;\n}();\n\nexport { TokenListObserver };\n\nfunction parseTokenString(tokenString, element, attributeName) {\n return tokenString.trim().split(/\\s+/).filter(function (content) {\n return content.length;\n }).map(function (content, index) {\n return {\n element: element,\n attributeName: attributeName,\n content: content,\n index: index\n };\n });\n}\n\nfunction zip(left, right) {\n var length = Math.max(left.length, right.length);\n return Array.from({\n length: length\n }, function (_, index) {\n return [left[index], right[index]];\n });\n}\n\nfunction tokensAreEqual(left, right) {\n return left && right && left.index == right.index && left.content == right.content;\n}","import { TokenListObserver } from \"./token_list_observer\";\n\nvar ValueListObserver = function () {\n function ValueListObserver(element, attributeName, delegate) {\n this.tokenListObserver = new TokenListObserver(element, attributeName, this);\n this.delegate = delegate;\n this.parseResultsByToken = new WeakMap();\n this.valuesByTokenByElement = new WeakMap();\n }\n\n Object.defineProperty(ValueListObserver.prototype, \"started\", {\n get: function get() {\n return this.tokenListObserver.started;\n },\n enumerable: true,\n configurable: true\n });\n\n ValueListObserver.prototype.start = function () {\n this.tokenListObserver.start();\n };\n\n ValueListObserver.prototype.stop = function () {\n this.tokenListObserver.stop();\n };\n\n ValueListObserver.prototype.refresh = function () {\n this.tokenListObserver.refresh();\n };\n\n Object.defineProperty(ValueListObserver.prototype, \"element\", {\n get: function get() {\n return this.tokenListObserver.element;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ValueListObserver.prototype, \"attributeName\", {\n get: function get() {\n return this.tokenListObserver.attributeName;\n },\n enumerable: true,\n configurable: true\n });\n\n ValueListObserver.prototype.tokenMatched = function (token) {\n var element = token.element;\n var value = this.fetchParseResultForToken(token).value;\n\n if (value) {\n this.fetchValuesByTokenForElement(element).set(token, value);\n this.delegate.elementMatchedValue(element, value);\n }\n };\n\n ValueListObserver.prototype.tokenUnmatched = function (token) {\n var element = token.element;\n var value = this.fetchParseResultForToken(token).value;\n\n if (value) {\n this.fetchValuesByTokenForElement(element).delete(token);\n this.delegate.elementUnmatchedValue(element, value);\n }\n };\n\n ValueListObserver.prototype.fetchParseResultForToken = function (token) {\n var parseResult = this.parseResultsByToken.get(token);\n\n if (!parseResult) {\n parseResult = this.parseToken(token);\n this.parseResultsByToken.set(token, parseResult);\n }\n\n return parseResult;\n };\n\n ValueListObserver.prototype.fetchValuesByTokenForElement = function (element) {\n var valuesByToken = this.valuesByTokenByElement.get(element);\n\n if (!valuesByToken) {\n valuesByToken = new Map();\n this.valuesByTokenByElement.set(element, valuesByToken);\n }\n\n return valuesByToken;\n };\n\n ValueListObserver.prototype.parseToken = function (token) {\n try {\n var value = this.delegate.parseValueForToken(token);\n return {\n value: value\n };\n } catch (error) {\n return {\n error: error\n };\n }\n };\n\n return ValueListObserver;\n}();\n\nexport { ValueListObserver };","import { Action } from \"./action\";\nimport { Binding } from \"./binding\";\nimport { ValueListObserver } from \"@stimulus/mutation-observers\";\n\nvar BindingObserver = function () {\n function BindingObserver(context, delegate) {\n this.context = context;\n this.delegate = delegate;\n this.bindingsByAction = new Map();\n }\n\n BindingObserver.prototype.start = function () {\n if (!this.valueListObserver) {\n this.valueListObserver = new ValueListObserver(this.element, this.actionAttribute, this);\n this.valueListObserver.start();\n }\n };\n\n BindingObserver.prototype.stop = function () {\n if (this.valueListObserver) {\n this.valueListObserver.stop();\n delete this.valueListObserver;\n this.disconnectAllActions();\n }\n };\n\n Object.defineProperty(BindingObserver.prototype, \"element\", {\n get: function get() {\n return this.context.element;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BindingObserver.prototype, \"identifier\", {\n get: function get() {\n return this.context.identifier;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BindingObserver.prototype, \"actionAttribute\", {\n get: function get() {\n return this.schema.actionAttribute;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BindingObserver.prototype, \"schema\", {\n get: function get() {\n return this.context.schema;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BindingObserver.prototype, \"bindings\", {\n get: function get() {\n return Array.from(this.bindingsByAction.values());\n },\n enumerable: true,\n configurable: true\n });\n\n BindingObserver.prototype.connectAction = function (action) {\n var binding = new Binding(this.context, action);\n this.bindingsByAction.set(action, binding);\n this.delegate.bindingConnected(binding);\n };\n\n BindingObserver.prototype.disconnectAction = function (action) {\n var binding = this.bindingsByAction.get(action);\n\n if (binding) {\n this.bindingsByAction.delete(action);\n this.delegate.bindingDisconnected(binding);\n }\n };\n\n BindingObserver.prototype.disconnectAllActions = function () {\n var _this = this;\n\n this.bindings.forEach(function (binding) {\n return _this.delegate.bindingDisconnected(binding);\n });\n this.bindingsByAction.clear();\n }; // Value observer delegate\n\n\n BindingObserver.prototype.parseValueForToken = function (token) {\n var action = Action.forToken(token);\n\n if (action.identifier == this.identifier) {\n return action;\n }\n };\n\n BindingObserver.prototype.elementMatchedValue = function (element, action) {\n this.connectAction(action);\n };\n\n BindingObserver.prototype.elementUnmatchedValue = function (element, action) {\n this.disconnectAction(action);\n };\n\n return BindingObserver;\n}();\n\nexport { BindingObserver };","import { BindingObserver } from \"./binding_observer\";\n\nvar Context = function () {\n function Context(module, scope) {\n this.module = module;\n this.scope = scope;\n this.controller = new module.controllerConstructor(this);\n this.bindingObserver = new BindingObserver(this, this.dispatcher);\n\n try {\n this.controller.initialize();\n } catch (error) {\n this.handleError(error, \"initializing controller\");\n }\n }\n\n Context.prototype.connect = function () {\n this.bindingObserver.start();\n\n try {\n this.controller.connect();\n } catch (error) {\n this.handleError(error, \"connecting controller\");\n }\n };\n\n Context.prototype.disconnect = function () {\n try {\n this.controller.disconnect();\n } catch (error) {\n this.handleError(error, \"disconnecting controller\");\n }\n\n this.bindingObserver.stop();\n };\n\n Object.defineProperty(Context.prototype, \"application\", {\n get: function get() {\n return this.module.application;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Context.prototype, \"identifier\", {\n get: function get() {\n return this.module.identifier;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Context.prototype, \"schema\", {\n get: function get() {\n return this.application.schema;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Context.prototype, \"dispatcher\", {\n get: function get() {\n return this.application.dispatcher;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Context.prototype, \"element\", {\n get: function get() {\n return this.scope.element;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Context.prototype, \"parentElement\", {\n get: function get() {\n return this.element.parentElement;\n },\n enumerable: true,\n configurable: true\n }); // Error handling\n\n Context.prototype.handleError = function (error, message, detail) {\n if (detail === void 0) {\n detail = {};\n }\n\n var _a = this,\n identifier = _a.identifier,\n controller = _a.controller,\n element = _a.element;\n\n detail = Object.assign({\n identifier: identifier,\n controller: controller,\n element: element\n }, detail);\n this.application.handleError(error, \"Error \" + message, detail);\n };\n\n return Context;\n}();\n\nexport { Context };","var __extends = this && this.__extends || function () {\n var extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) {\n if (b.hasOwnProperty(p)) d[p] = b[p];\n }\n };\n\n return function (d, b) {\n extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\n/** @hidden */\n\n\nexport function blessDefinition(definition) {\n return {\n identifier: definition.identifier,\n controllerConstructor: blessControllerConstructor(definition.controllerConstructor)\n };\n}\n\nfunction blessControllerConstructor(controllerConstructor) {\n var constructor = extend(controllerConstructor);\n constructor.bless();\n return constructor;\n}\n\nvar extend = function () {\n function extendWithReflect(constructor) {\n function Controller() {\n var _newTarget = this && this instanceof Controller ? this.constructor : void 0;\n\n return Reflect.construct(constructor, arguments, _newTarget);\n }\n\n Controller.prototype = Object.create(constructor.prototype, {\n constructor: {\n value: Controller\n }\n });\n Reflect.setPrototypeOf(Controller, constructor);\n return Controller;\n }\n\n function testReflectExtension() {\n var a = function a() {\n this.a.call(this);\n };\n\n var b = extendWithReflect(a);\n\n b.prototype.a = function () {};\n\n return new b();\n }\n\n try {\n testReflectExtension();\n return extendWithReflect;\n } catch (error) {\n return function (constructor) {\n return function (_super) {\n __extends(Controller, _super);\n\n function Controller() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n return Controller;\n }(constructor);\n };\n }\n}();","import { Context } from \"./context\";\nimport { blessDefinition } from \"./definition\";\n\nvar Module = function () {\n function Module(application, definition) {\n this.application = application;\n this.definition = blessDefinition(definition);\n this.contextsByScope = new WeakMap();\n this.connectedContexts = new Set();\n }\n\n Object.defineProperty(Module.prototype, \"identifier\", {\n get: function get() {\n return this.definition.identifier;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Module.prototype, \"controllerConstructor\", {\n get: function get() {\n return this.definition.controllerConstructor;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Module.prototype, \"contexts\", {\n get: function get() {\n return Array.from(this.connectedContexts);\n },\n enumerable: true,\n configurable: true\n });\n\n Module.prototype.connectContextForScope = function (scope) {\n var context = this.fetchContextForScope(scope);\n this.connectedContexts.add(context);\n context.connect();\n };\n\n Module.prototype.disconnectContextForScope = function (scope) {\n var context = this.contextsByScope.get(scope);\n\n if (context) {\n this.connectedContexts.delete(context);\n context.disconnect();\n }\n };\n\n Module.prototype.fetchContextForScope = function (scope) {\n var context = this.contextsByScope.get(scope);\n\n if (!context) {\n context = new Context(this, scope);\n this.contextsByScope.set(scope, context);\n }\n\n return context;\n };\n\n return Module;\n}();\n\nexport { Module };","var DataMap = function () {\n function DataMap(scope) {\n this.scope = scope;\n }\n\n Object.defineProperty(DataMap.prototype, \"element\", {\n get: function get() {\n return this.scope.element;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataMap.prototype, \"identifier\", {\n get: function get() {\n return this.scope.identifier;\n },\n enumerable: true,\n configurable: true\n });\n\n DataMap.prototype.get = function (key) {\n key = this.getFormattedKey(key);\n return this.element.getAttribute(key);\n };\n\n DataMap.prototype.set = function (key, value) {\n key = this.getFormattedKey(key);\n this.element.setAttribute(key, value);\n return this.get(key);\n };\n\n DataMap.prototype.has = function (key) {\n key = this.getFormattedKey(key);\n return this.element.hasAttribute(key);\n };\n\n DataMap.prototype.delete = function (key) {\n if (this.has(key)) {\n key = this.getFormattedKey(key);\n this.element.removeAttribute(key);\n return true;\n } else {\n return false;\n }\n };\n\n DataMap.prototype.getFormattedKey = function (key) {\n return \"data-\" + this.identifier + \"-\" + dasherize(key);\n };\n\n return DataMap;\n}();\n\nexport { DataMap };\n\nfunction dasherize(value) {\n return value.replace(/([A-Z])/g, function (_, char) {\n return \"-\" + char.toLowerCase();\n });\n}","/** @hidden */\nexport function attributeValueContainsToken(attributeName, token) {\n return \"[\" + attributeName + \"~=\\\"\" + token + \"\\\"]\";\n}","import { attributeValueContainsToken } from \"./selectors\";\n\nvar TargetSet = function () {\n function TargetSet(scope) {\n this.scope = scope;\n }\n\n Object.defineProperty(TargetSet.prototype, \"element\", {\n get: function get() {\n return this.scope.element;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TargetSet.prototype, \"identifier\", {\n get: function get() {\n return this.scope.identifier;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TargetSet.prototype, \"schema\", {\n get: function get() {\n return this.scope.schema;\n },\n enumerable: true,\n configurable: true\n });\n\n TargetSet.prototype.has = function (targetName) {\n return this.find(targetName) != null;\n };\n\n TargetSet.prototype.find = function () {\n var targetNames = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n targetNames[_i] = arguments[_i];\n }\n\n var selector = this.getSelectorForTargetNames(targetNames);\n return this.scope.findElement(selector);\n };\n\n TargetSet.prototype.findAll = function () {\n var targetNames = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n targetNames[_i] = arguments[_i];\n }\n\n var selector = this.getSelectorForTargetNames(targetNames);\n return this.scope.findAllElements(selector);\n };\n\n TargetSet.prototype.getSelectorForTargetNames = function (targetNames) {\n var _this = this;\n\n return targetNames.map(function (targetName) {\n return _this.getSelectorForTargetName(targetName);\n }).join(\", \");\n };\n\n TargetSet.prototype.getSelectorForTargetName = function (targetName) {\n var targetDescriptor = this.identifier + \".\" + targetName;\n return attributeValueContainsToken(this.schema.targetAttribute, targetDescriptor);\n };\n\n return TargetSet;\n}();\n\nexport { TargetSet };","import { DataMap } from \"./data_map\";\nimport { TargetSet } from \"./target_set\";\nimport { attributeValueContainsToken } from \"./selectors\";\n\nvar Scope = function () {\n function Scope(schema, identifier, element) {\n this.schema = schema;\n this.identifier = identifier;\n this.element = element;\n this.targets = new TargetSet(this);\n this.data = new DataMap(this);\n }\n\n Scope.prototype.findElement = function (selector) {\n return this.findAllElements(selector)[0];\n };\n\n Scope.prototype.findAllElements = function (selector) {\n var head = this.element.matches(selector) ? [this.element] : [];\n var tail = this.filterElements(Array.from(this.element.querySelectorAll(selector)));\n return head.concat(tail);\n };\n\n Scope.prototype.filterElements = function (elements) {\n var _this = this;\n\n return elements.filter(function (element) {\n return _this.containsElement(element);\n });\n };\n\n Scope.prototype.containsElement = function (element) {\n return element.closest(this.controllerSelector) === this.element;\n };\n\n Object.defineProperty(Scope.prototype, \"controllerSelector\", {\n get: function get() {\n return attributeValueContainsToken(this.schema.controllerAttribute, this.identifier);\n },\n enumerable: true,\n configurable: true\n });\n return Scope;\n}();\n\nexport { Scope };","import { Scope } from \"./scope\";\nimport { ValueListObserver } from \"@stimulus/mutation-observers\";\n\nvar ScopeObserver = function () {\n function ScopeObserver(element, schema, delegate) {\n this.element = element;\n this.schema = schema;\n this.delegate = delegate;\n this.valueListObserver = new ValueListObserver(this.element, this.controllerAttribute, this);\n this.scopesByIdentifierByElement = new WeakMap();\n this.scopeReferenceCounts = new WeakMap();\n }\n\n ScopeObserver.prototype.start = function () {\n this.valueListObserver.start();\n };\n\n ScopeObserver.prototype.stop = function () {\n this.valueListObserver.stop();\n };\n\n Object.defineProperty(ScopeObserver.prototype, \"controllerAttribute\", {\n get: function get() {\n return this.schema.controllerAttribute;\n },\n enumerable: true,\n configurable: true\n }); // Value observer delegate\n\n /** @hidden */\n\n ScopeObserver.prototype.parseValueForToken = function (token) {\n var element = token.element,\n identifier = token.content;\n var scopesByIdentifier = this.fetchScopesByIdentifierForElement(element);\n var scope = scopesByIdentifier.get(identifier);\n\n if (!scope) {\n scope = new Scope(this.schema, identifier, element);\n scopesByIdentifier.set(identifier, scope);\n }\n\n return scope;\n };\n /** @hidden */\n\n\n ScopeObserver.prototype.elementMatchedValue = function (element, value) {\n var referenceCount = (this.scopeReferenceCounts.get(value) || 0) + 1;\n this.scopeReferenceCounts.set(value, referenceCount);\n\n if (referenceCount == 1) {\n this.delegate.scopeConnected(value);\n }\n };\n /** @hidden */\n\n\n ScopeObserver.prototype.elementUnmatchedValue = function (element, value) {\n var referenceCount = this.scopeReferenceCounts.get(value);\n\n if (referenceCount) {\n this.scopeReferenceCounts.set(value, referenceCount - 1);\n\n if (referenceCount == 1) {\n this.delegate.scopeDisconnected(value);\n }\n }\n };\n\n ScopeObserver.prototype.fetchScopesByIdentifierForElement = function (element) {\n var scopesByIdentifier = this.scopesByIdentifierByElement.get(element);\n\n if (!scopesByIdentifier) {\n scopesByIdentifier = new Map();\n this.scopesByIdentifierByElement.set(element, scopesByIdentifier);\n }\n\n return scopesByIdentifier;\n };\n\n return ScopeObserver;\n}();\n\nexport { ScopeObserver };","import { Module } from \"./module\";\nimport { Multimap } from \"@stimulus/multimap\";\nimport { ScopeObserver } from \"./scope_observer\";\n\nvar Router = function () {\n function Router(application) {\n this.application = application;\n this.scopeObserver = new ScopeObserver(this.element, this.schema, this);\n this.scopesByIdentifier = new Multimap();\n this.modulesByIdentifier = new Map();\n }\n\n Object.defineProperty(Router.prototype, \"element\", {\n get: function get() {\n return this.application.element;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Router.prototype, \"schema\", {\n get: function get() {\n return this.application.schema;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Router.prototype, \"controllerAttribute\", {\n get: function get() {\n return this.schema.controllerAttribute;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Router.prototype, \"modules\", {\n get: function get() {\n return Array.from(this.modulesByIdentifier.values());\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Router.prototype, \"contexts\", {\n get: function get() {\n return this.modules.reduce(function (contexts, module) {\n return contexts.concat(module.contexts);\n }, []);\n },\n enumerable: true,\n configurable: true\n });\n\n Router.prototype.start = function () {\n this.scopeObserver.start();\n };\n\n Router.prototype.stop = function () {\n this.scopeObserver.stop();\n };\n\n Router.prototype.loadDefinition = function (definition) {\n this.unloadIdentifier(definition.identifier);\n var module = new Module(this.application, definition);\n this.connectModule(module);\n };\n\n Router.prototype.unloadIdentifier = function (identifier) {\n var module = this.modulesByIdentifier.get(identifier);\n\n if (module) {\n this.disconnectModule(module);\n }\n };\n\n Router.prototype.getContextForElementAndIdentifier = function (element, identifier) {\n var module = this.modulesByIdentifier.get(identifier);\n\n if (module) {\n return module.contexts.find(function (context) {\n return context.element == element;\n });\n }\n }; // Error handler delegate\n\n /** @hidden */\n\n\n Router.prototype.handleError = function (error, message, detail) {\n this.application.handleError(error, message, detail);\n }; // Scope observer delegate\n\n /** @hidden */\n\n\n Router.prototype.scopeConnected = function (scope) {\n this.scopesByIdentifier.add(scope.identifier, scope);\n var module = this.modulesByIdentifier.get(scope.identifier);\n\n if (module) {\n module.connectContextForScope(scope);\n }\n };\n /** @hidden */\n\n\n Router.prototype.scopeDisconnected = function (scope) {\n this.scopesByIdentifier.delete(scope.identifier, scope);\n var module = this.modulesByIdentifier.get(scope.identifier);\n\n if (module) {\n module.disconnectContextForScope(scope);\n }\n }; // Modules\n\n\n Router.prototype.connectModule = function (module) {\n this.modulesByIdentifier.set(module.identifier, module);\n var scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n scopes.forEach(function (scope) {\n return module.connectContextForScope(scope);\n });\n };\n\n Router.prototype.disconnectModule = function (module) {\n this.modulesByIdentifier.delete(module.identifier);\n var scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n scopes.forEach(function (scope) {\n return module.disconnectContextForScope(scope);\n });\n };\n\n return Router;\n}();\n\nexport { Router };","export var defaultSchema = {\n controllerAttribute: \"data-controller\",\n actionAttribute: \"data-action\",\n targetAttribute: \"data-target\"\n};","var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) {\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n\n function step(result) {\n result.done ? resolve(result.value) : new P(function (resolve) {\n resolve(result.value);\n }).then(fulfilled, rejected);\n }\n\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n\nvar __generator = this && this.__generator || function (thisArg, body) {\n var _ = {\n label: 0,\n sent: function sent() {\n if (t[0] & 1) throw t[1];\n return t[1];\n },\n trys: [],\n ops: []\n },\n f,\n y,\n t,\n g;\n return g = {\n next: verb(0),\n \"throw\": verb(1),\n \"return\": verb(2)\n }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function () {\n return this;\n }), g;\n\n function verb(n) {\n return function (v) {\n return step([n, v]);\n };\n }\n\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n\n while (_) {\n try {\n if (f = 1, y && (t = y[op[0] & 2 ? \"return\" : op[0] ? \"throw\" : \"next\"]) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [0, t.value];\n\n switch (op[0]) {\n case 0:\n case 1:\n t = op;\n break;\n\n case 4:\n _.label++;\n return {\n value: op[1],\n done: false\n };\n\n case 5:\n _.label++;\n y = op[1];\n op = [0];\n continue;\n\n case 7:\n op = _.ops.pop();\n\n _.trys.pop();\n\n continue;\n\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n\n if (t && _.label < t[2]) {\n _.label = t[2];\n\n _.ops.push(op);\n\n break;\n }\n\n if (t[2]) _.ops.pop();\n\n _.trys.pop();\n\n continue;\n }\n\n op = body.call(thisArg, _);\n } catch (e) {\n op = [6, e];\n y = 0;\n } finally {\n f = t = 0;\n }\n }\n\n if (op[0] & 5) throw op[1];\n return {\n value: op[0] ? op[1] : void 0,\n done: true\n };\n }\n};\n\nimport { Dispatcher } from \"./dispatcher\";\nimport { Router } from \"./router\";\nimport { defaultSchema } from \"./schema\";\n\nvar Application = function () {\n function Application(element, schema) {\n if (element === void 0) {\n element = document.documentElement;\n }\n\n if (schema === void 0) {\n schema = defaultSchema;\n }\n\n this.element = element;\n this.schema = schema;\n this.dispatcher = new Dispatcher(this);\n this.router = new Router(this);\n }\n\n Application.start = function (element, schema) {\n var application = new Application(element, schema);\n application.start();\n return application;\n };\n\n Application.prototype.start = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n return [4\n /*yield*/\n , domReady()];\n\n case 1:\n _a.sent();\n\n this.router.start();\n this.dispatcher.start();\n return [2\n /*return*/\n ];\n }\n });\n });\n };\n\n Application.prototype.stop = function () {\n this.router.stop();\n this.dispatcher.stop();\n };\n\n Application.prototype.register = function (identifier, controllerConstructor) {\n this.load({\n identifier: identifier,\n controllerConstructor: controllerConstructor\n });\n };\n\n Application.prototype.load = function (head) {\n var _this = this;\n\n var rest = [];\n\n for (var _i = 1; _i < arguments.length; _i++) {\n rest[_i - 1] = arguments[_i];\n }\n\n var definitions = Array.isArray(head) ? head : [head].concat(rest);\n definitions.forEach(function (definition) {\n return _this.router.loadDefinition(definition);\n });\n };\n\n Application.prototype.unload = function (head) {\n var _this = this;\n\n var rest = [];\n\n for (var _i = 1; _i < arguments.length; _i++) {\n rest[_i - 1] = arguments[_i];\n }\n\n var identifiers = Array.isArray(head) ? head : [head].concat(rest);\n identifiers.forEach(function (identifier) {\n return _this.router.unloadIdentifier(identifier);\n });\n };\n\n Object.defineProperty(Application.prototype, \"controllers\", {\n // Controllers\n get: function get() {\n return this.router.contexts.map(function (context) {\n return context.controller;\n });\n },\n enumerable: true,\n configurable: true\n });\n\n Application.prototype.getControllerForElementAndIdentifier = function (element, identifier) {\n var context = this.router.getContextForElementAndIdentifier(element, identifier);\n return context ? context.controller : null;\n }; // Error handling\n\n\n Application.prototype.handleError = function (error, message, detail) {\n console.error(\"%s\\n\\n%o\\n\\n%o\", message, error, detail);\n };\n\n return Application;\n}();\n\nexport { Application };\n\nfunction domReady() {\n return new Promise(function (resolve) {\n if (document.readyState == \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", resolve);\n } else {\n resolve();\n }\n });\n}","/** @hidden */\nexport function defineTargetProperties(constructor) {\n var prototype = constructor.prototype;\n var targetNames = getTargetNamesForConstructor(constructor);\n targetNames.forEach(function (name) {\n var _a;\n\n return defineLinkedProperties(prototype, (_a = {}, _a[name + \"Target\"] = {\n get: function get() {\n var target = this.targets.find(name);\n\n if (target) {\n return target;\n } else {\n throw new Error(\"Missing target element \\\"\" + this.identifier + \".\" + name + \"\\\"\");\n }\n }\n }, _a[name + \"Targets\"] = {\n get: function get() {\n return this.targets.findAll(name);\n }\n }, _a[\"has\" + capitalize(name) + \"Target\"] = {\n get: function get() {\n return this.targets.has(name);\n }\n }, _a));\n });\n}\n\nfunction getTargetNamesForConstructor(constructor) {\n var ancestors = getAncestorsForConstructor(constructor);\n return Array.from(ancestors.reduce(function (targetNames, constructor) {\n getOwnTargetNamesForConstructor(constructor).forEach(function (name) {\n return targetNames.add(name);\n });\n return targetNames;\n }, new Set()));\n}\n\nfunction getAncestorsForConstructor(constructor) {\n var ancestors = [];\n\n while (constructor) {\n ancestors.push(constructor);\n constructor = Object.getPrototypeOf(constructor);\n }\n\n return ancestors;\n}\n\nfunction getOwnTargetNamesForConstructor(constructor) {\n var definition = constructor[\"targets\"];\n return Array.isArray(definition) ? definition : [];\n}\n\nfunction defineLinkedProperties(object, properties) {\n Object.keys(properties).forEach(function (name) {\n if (!(name in object)) {\n var descriptor = properties[name];\n Object.defineProperty(object, name, descriptor);\n }\n });\n}\n\nfunction capitalize(name) {\n return name.charAt(0).toUpperCase() + name.slice(1);\n}","import { defineTargetProperties } from \"./target_properties\";\n\nvar Controller = function () {\n function Controller(context) {\n this.context = context;\n }\n\n Controller.bless = function () {\n defineTargetProperties(this);\n };\n\n Object.defineProperty(Controller.prototype, \"application\", {\n get: function get() {\n return this.context.application;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Controller.prototype, \"scope\", {\n get: function get() {\n return this.context.scope;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Controller.prototype, \"element\", {\n get: function get() {\n return this.scope.element;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Controller.prototype, \"identifier\", {\n get: function get() {\n return this.scope.identifier;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Controller.prototype, \"targets\", {\n get: function get() {\n return this.scope.targets;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Controller.prototype, \"data\", {\n get: function get() {\n return this.scope.data;\n },\n enumerable: true,\n configurable: true\n });\n\n Controller.prototype.initialize = function () {// Override in your subclass to set up initial controller state\n };\n\n Controller.prototype.connect = function () {// Override in your subclass to respond when the controller is connected to the DOM\n };\n\n Controller.prototype.disconnect = function () {// Override in your subclass to respond when the controller is disconnected from the DOM\n };\n\n Controller.targets = [];\n return Controller;\n}();\n\nexport { Controller };","define(function () {\n \"use strict\";\n\n function nodeName(elem, name) {\n return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n }\n\n return nodeName;\n});","define(function () {\n \"use strict\"; // Only count HTML whitespace\n // Other whitespace should count in values\n // https://infra.spec.whatwg.org/#ascii-whitespace\n\n return /[^\\x20\\t\\r\\n\\f]+/g;\n});","module.exports = function (module) {\n if (!module.webpackPolyfill) {\n module.deprecate = function () {};\n\n module.paths = []; // module.parent = undefined by default\n\n if (!module.children) module.children = [];\n Object.defineProperty(module, \"loaded\", {\n enumerable: true,\n get: function get() {\n return module.l;\n }\n });\n Object.defineProperty(module, \"id\", {\n enumerable: true,\n get: function get() {\n return module.i;\n }\n });\n module.webpackPolyfill = 1;\n }\n\n return module;\n};","define(function () {\n \"use strict\"; // All support tests are defined in their respective modules.\n\n return {};\n});","define([\"../core\", \"../core/toType\", \"../var/isFunction\"], function (jQuery, toType, isFunction) {\n \"use strict\"; // Multifunctional method to get and set values of a collection\n // The value/s can optionally be executed if it's a function\n\n var access = function access(elems, fn, key, value, chainable, emptyGet, raw) {\n var i = 0,\n len = elems.length,\n bulk = key == null; // Sets many values\n\n if (toType(key) === \"object\") {\n chainable = true;\n\n for (i in key) {\n access(elems, fn, i, key[i], true, emptyGet, raw);\n } // Sets one value\n\n } else if (value !== undefined) {\n chainable = true;\n\n if (!isFunction(value)) {\n raw = true;\n }\n\n if (bulk) {\n // Bulk operations run against the entire set\n if (raw) {\n fn.call(elems, value);\n fn = null; // ...except when executing function values\n } else {\n bulk = fn;\n\n fn = function fn(elem, _key, value) {\n return bulk.call(jQuery(elem), value);\n };\n }\n }\n\n if (fn) {\n for (; i < len; i++) {\n fn(elems[i], key, raw ? value : value.call(elems[i], i, fn(elems[i], key)));\n }\n }\n }\n\n if (chainable) {\n return elems;\n } // Gets\n\n\n if (bulk) {\n return fn.call(elems);\n }\n\n return len ? fn(elems[0], key) : emptyGet;\n };\n\n return access;\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\ndefine([\"./core\", \"./var/document\", \"./var/isFunction\", \"./var/rnothtmlwhite\", \"./ajax/var/location\", \"./ajax/var/nonce\", \"./ajax/var/rquery\", \"./core/init\", \"./core/parseXML\", \"./event/trigger\", \"./deferred\", \"./serialize\" // jQuery.param\n], function (jQuery, document, isFunction, rnothtmlwhite, location, nonce, rquery) {\n \"use strict\";\n\n var r20 = /%20/g,\n rhash = /#.*$/,\n rantiCache = /([?&])_=[^&]*/,\n rheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n // #7653, #8125, #8152: local protocol detection\n rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n rnoContent = /^(?:GET|HEAD)$/,\n rprotocol = /^\\/\\//,\n\n /* Prefilters\n * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n * 2) These are called:\n * - BEFORE asking for a transport\n * - AFTER param serialization (s.data is a string if s.processData is true)\n * 3) key is the dataType\n * 4) the catchall symbol \"*\" can be used\n * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n */\n prefilters = {},\n\n /* Transports bindings\n * 1) key is the dataType\n * 2) the catchall symbol \"*\" can be used\n * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n */\n transports = {},\n // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n allTypes = \"*/\".concat(\"*\"),\n // Anchor tag for parsing the document origin\n originAnchor = document.createElement(\"a\");\n originAnchor.href = location.href; // Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\n\n function addToPrefiltersOrTransports(structure) {\n // dataTypeExpression is optional and defaults to \"*\"\n return function (dataTypeExpression, func) {\n if (typeof dataTypeExpression !== \"string\") {\n func = dataTypeExpression;\n dataTypeExpression = \"*\";\n }\n\n var dataType,\n i = 0,\n dataTypes = dataTypeExpression.toLowerCase().match(rnothtmlwhite) || [];\n\n if (isFunction(func)) {\n // For each dataType in the dataTypeExpression\n while (dataType = dataTypes[i++]) {\n // Prepend if requested\n if (dataType[0] === \"+\") {\n dataType = dataType.slice(1) || \"*\";\n (structure[dataType] = structure[dataType] || []).unshift(func); // Otherwise append\n } else {\n (structure[dataType] = structure[dataType] || []).push(func);\n }\n }\n }\n };\n } // Base inspection function for prefilters and transports\n\n\n function inspectPrefiltersOrTransports(structure, options, originalOptions, jqXHR) {\n var inspected = {},\n seekingTransport = structure === transports;\n\n function inspect(dataType) {\n var selected;\n inspected[dataType] = true;\n jQuery.each(structure[dataType] || [], function (_, prefilterOrFactory) {\n var dataTypeOrTransport = prefilterOrFactory(options, originalOptions, jqXHR);\n\n if (typeof dataTypeOrTransport === \"string\" && !seekingTransport && !inspected[dataTypeOrTransport]) {\n options.dataTypes.unshift(dataTypeOrTransport);\n inspect(dataTypeOrTransport);\n return false;\n } else if (seekingTransport) {\n return !(selected = dataTypeOrTransport);\n }\n });\n return selected;\n }\n\n return inspect(options.dataTypes[0]) || !inspected[\"*\"] && inspect(\"*\");\n } // A special extend for ajax options\n // that takes \"flat\" options (not to be deep extended)\n // Fixes #9887\n\n\n function ajaxExtend(target, src) {\n var key,\n deep,\n flatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n for (key in src) {\n if (src[key] !== undefined) {\n (flatOptions[key] ? target : deep || (deep = {}))[key] = src[key];\n }\n }\n\n if (deep) {\n jQuery.extend(true, target, deep);\n }\n\n return target;\n }\n /* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\n\n\n function ajaxHandleResponses(s, jqXHR, responses) {\n var ct,\n type,\n finalDataType,\n firstDataType,\n contents = s.contents,\n dataTypes = s.dataTypes; // Remove auto dataType and get content-type in the process\n\n while (dataTypes[0] === \"*\") {\n dataTypes.shift();\n\n if (ct === undefined) {\n ct = s.mimeType || jqXHR.getResponseHeader(\"Content-Type\");\n }\n } // Check if we're dealing with a known content-type\n\n\n if (ct) {\n for (type in contents) {\n if (contents[type] && contents[type].test(ct)) {\n dataTypes.unshift(type);\n break;\n }\n }\n } // Check to see if we have a response for the expected dataType\n\n\n if (dataTypes[0] in responses) {\n finalDataType = dataTypes[0];\n } else {\n // Try convertible dataTypes\n for (type in responses) {\n if (!dataTypes[0] || s.converters[type + \" \" + dataTypes[0]]) {\n finalDataType = type;\n break;\n }\n\n if (!firstDataType) {\n firstDataType = type;\n }\n } // Or just use first one\n\n\n finalDataType = finalDataType || firstDataType;\n } // If we found a dataType\n // We add the dataType to the list if needed\n // and return the corresponding response\n\n\n if (finalDataType) {\n if (finalDataType !== dataTypes[0]) {\n dataTypes.unshift(finalDataType);\n }\n\n return responses[finalDataType];\n }\n }\n /* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\n\n\n function ajaxConvert(s, response, jqXHR, isSuccess) {\n var conv2,\n current,\n conv,\n tmp,\n prev,\n converters = {},\n // Work with a copy of dataTypes in case we need to modify it for conversion\n dataTypes = s.dataTypes.slice(); // Create converters map with lowercased keys\n\n if (dataTypes[1]) {\n for (conv in s.converters) {\n converters[conv.toLowerCase()] = s.converters[conv];\n }\n }\n\n current = dataTypes.shift(); // Convert to each sequential dataType\n\n while (current) {\n if (s.responseFields[current]) {\n jqXHR[s.responseFields[current]] = response;\n } // Apply the dataFilter if provided\n\n\n if (!prev && isSuccess && s.dataFilter) {\n response = s.dataFilter(response, s.dataType);\n }\n\n prev = current;\n current = dataTypes.shift();\n\n if (current) {\n // There's only work to do if current dataType is non-auto\n if (current === \"*\") {\n current = prev; // Convert response if prev dataType is non-auto and differs from current\n } else if (prev !== \"*\" && prev !== current) {\n // Seek a direct converter\n conv = converters[prev + \" \" + current] || converters[\"* \" + current]; // If none found, seek a pair\n\n if (!conv) {\n for (conv2 in converters) {\n // If conv2 outputs current\n tmp = conv2.split(\" \");\n\n if (tmp[1] === current) {\n // If prev can be converted to accepted input\n conv = converters[prev + \" \" + tmp[0]] || converters[\"* \" + tmp[0]];\n\n if (conv) {\n // Condense equivalence converters\n if (conv === true) {\n conv = converters[conv2]; // Otherwise, insert the intermediate dataType\n } else if (converters[conv2] !== true) {\n current = tmp[0];\n dataTypes.unshift(tmp[1]);\n }\n\n break;\n }\n }\n }\n } // Apply converter (if not an equivalence)\n\n\n if (conv !== true) {\n // Unless errors are allowed to bubble, catch and return them\n if (conv && s.throws) {\n response = conv(response);\n } else {\n try {\n response = conv(response);\n } catch (e) {\n return {\n state: \"parsererror\",\n error: conv ? e : \"No conversion from \" + prev + \" to \" + current\n };\n }\n }\n }\n }\n }\n }\n\n return {\n state: \"success\",\n data: response\n };\n }\n\n jQuery.extend({\n // Counter for holding the number of active queries\n active: 0,\n // Last-Modified header cache for next request\n lastModified: {},\n etag: {},\n ajaxSettings: {\n url: location.href,\n type: \"GET\",\n isLocal: rlocalProtocol.test(location.protocol),\n global: true,\n processData: true,\n async: true,\n contentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n /*\n timeout: 0,\n data: null,\n dataType: null,\n username: null,\n password: null,\n cache: null,\n throws: false,\n traditional: false,\n headers: {},\n */\n accepts: {\n \"*\": allTypes,\n text: \"text/plain\",\n html: \"text/html\",\n xml: \"application/xml, text/xml\",\n json: \"application/json, text/javascript\"\n },\n contents: {\n xml: /\\bxml\\b/,\n html: /\\bhtml/,\n json: /\\bjson\\b/\n },\n responseFields: {\n xml: \"responseXML\",\n text: \"responseText\",\n json: \"responseJSON\"\n },\n // Data converters\n // Keys separate source (or catchall \"*\") and destination types with a single space\n converters: {\n // Convert anything to text\n \"* text\": String,\n // Text to html (true = no transformation)\n \"text html\": true,\n // Evaluate text as a json expression\n \"text json\": JSON.parse,\n // Parse text as xml\n \"text xml\": jQuery.parseXML\n },\n // For options that shouldn't be deep extended:\n // you can add your own custom options here if\n // and when you create one that shouldn't be\n // deep extended (see ajaxExtend)\n flatOptions: {\n url: true,\n context: true\n }\n },\n // Creates a full fledged settings object into target\n // with both ajaxSettings and settings fields.\n // If target is omitted, writes into ajaxSettings.\n ajaxSetup: function ajaxSetup(target, settings) {\n return settings ? // Building a settings object\n ajaxExtend(ajaxExtend(target, jQuery.ajaxSettings), settings) : // Extending ajaxSettings\n ajaxExtend(jQuery.ajaxSettings, target);\n },\n ajaxPrefilter: addToPrefiltersOrTransports(prefilters),\n ajaxTransport: addToPrefiltersOrTransports(transports),\n // Main method\n ajax: function ajax(url, options) {\n // If url is an object, simulate pre-1.5 signature\n if (_typeof(url) === \"object\") {\n options = url;\n url = undefined;\n } // Force options to be an object\n\n\n options = options || {};\n\n var transport,\n // URL without anti-cache param\n cacheURL,\n // Response headers\n responseHeadersString,\n responseHeaders,\n // timeout handle\n timeoutTimer,\n // Url cleanup var\n urlAnchor,\n // Request state (becomes false upon send and true upon completion)\n completed,\n // To know if global events are to be dispatched\n fireGlobals,\n // Loop variable\n i,\n // uncached part of the url\n uncached,\n // Create the final options object\n s = jQuery.ajaxSetup({}, options),\n // Callbacks context\n callbackContext = s.context || s,\n // Context for global events is callbackContext if it is a DOM node or jQuery collection\n globalEventContext = s.context && (callbackContext.nodeType || callbackContext.jquery) ? jQuery(callbackContext) : jQuery.event,\n // Deferreds\n deferred = jQuery.Deferred(),\n completeDeferred = jQuery.Callbacks(\"once memory\"),\n // Status-dependent callbacks\n _statusCode = s.statusCode || {},\n // Headers (they are sent all at once)\n requestHeaders = {},\n requestHeadersNames = {},\n // Default abort message\n strAbort = \"canceled\",\n // Fake xhr\n jqXHR = {\n readyState: 0,\n // Builds headers hashtable if needed\n getResponseHeader: function getResponseHeader(key) {\n var match;\n\n if (completed) {\n if (!responseHeaders) {\n responseHeaders = {};\n\n while (match = rheaders.exec(responseHeadersString)) {\n responseHeaders[match[1].toLowerCase() + \" \"] = (responseHeaders[match[1].toLowerCase() + \" \"] || []).concat(match[2]);\n }\n }\n\n match = responseHeaders[key.toLowerCase() + \" \"];\n }\n\n return match == null ? null : match.join(\", \");\n },\n // Raw string\n getAllResponseHeaders: function getAllResponseHeaders() {\n return completed ? responseHeadersString : null;\n },\n // Caches the header\n setRequestHeader: function setRequestHeader(name, value) {\n if (completed == null) {\n name = requestHeadersNames[name.toLowerCase()] = requestHeadersNames[name.toLowerCase()] || name;\n requestHeaders[name] = value;\n }\n\n return this;\n },\n // Overrides response content-type header\n overrideMimeType: function overrideMimeType(type) {\n if (completed == null) {\n s.mimeType = type;\n }\n\n return this;\n },\n // Status-dependent callbacks\n statusCode: function statusCode(map) {\n var code;\n\n if (map) {\n if (completed) {\n // Execute the appropriate callbacks\n jqXHR.always(map[jqXHR.status]);\n } else {\n // Lazy-add the new callbacks in a way that preserves old ones\n for (code in map) {\n _statusCode[code] = [_statusCode[code], map[code]];\n }\n }\n }\n\n return this;\n },\n // Cancel the request\n abort: function abort(statusText) {\n var finalText = statusText || strAbort;\n\n if (transport) {\n transport.abort(finalText);\n }\n\n done(0, finalText);\n return this;\n }\n }; // Attach deferreds\n\n\n deferred.promise(jqXHR); // Add protocol if not provided (prefilters might expect it)\n // Handle falsy url in the settings object (#10093: consistency with old signature)\n // We also use the url parameter if available\n\n s.url = ((url || s.url || location.href) + \"\").replace(rprotocol, location.protocol + \"//\"); // Alias method option to type as per ticket #12004\n\n s.type = options.method || options.type || s.method || s.type; // Extract dataTypes list\n\n s.dataTypes = (s.dataType || \"*\").toLowerCase().match(rnothtmlwhite) || [\"\"]; // A cross-domain request is in order when the origin doesn't match the current origin.\n\n if (s.crossDomain == null) {\n urlAnchor = document.createElement(\"a\"); // Support: IE <=8 - 11, Edge 12 - 15\n // IE throws exception on accessing the href property if url is malformed,\n // e.g. http://example.com:80x/\n\n try {\n urlAnchor.href = s.url; // Support: IE <=8 - 11 only\n // Anchor's host property isn't correctly set when s.url is relative\n\n urlAnchor.href = urlAnchor.href;\n s.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !== urlAnchor.protocol + \"//\" + urlAnchor.host;\n } catch (e) {\n // If there is an error parsing the URL, assume it is crossDomain,\n // it can be rejected by the transport if it is invalid\n s.crossDomain = true;\n }\n } // Convert data if not already a string\n\n\n if (s.data && s.processData && typeof s.data !== \"string\") {\n s.data = jQuery.param(s.data, s.traditional);\n } // Apply prefilters\n\n\n inspectPrefiltersOrTransports(prefilters, s, options, jqXHR); // If request was aborted inside a prefilter, stop there\n\n if (completed) {\n return jqXHR;\n } // We can fire global events as of now if asked to\n // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\n\n fireGlobals = jQuery.event && s.global; // Watch for a new set of requests\n\n if (fireGlobals && jQuery.active++ === 0) {\n jQuery.event.trigger(\"ajaxStart\");\n } // Uppercase the type\n\n\n s.type = s.type.toUpperCase(); // Determine if request has content\n\n s.hasContent = !rnoContent.test(s.type); // Save the URL in case we're toying with the If-Modified-Since\n // and/or If-None-Match header later on\n // Remove hash to simplify url manipulation\n\n cacheURL = s.url.replace(rhash, \"\"); // More options handling for requests with no content\n\n if (!s.hasContent) {\n // Remember the hash so we can put it back\n uncached = s.url.slice(cacheURL.length); // If data is available and should be processed, append data to url\n\n if (s.data && (s.processData || typeof s.data === \"string\")) {\n cacheURL += (rquery.test(cacheURL) ? \"&\" : \"?\") + s.data; // #9682: remove data so that it's not used in an eventual retry\n\n delete s.data;\n } // Add or update anti-cache param if needed\n\n\n if (s.cache === false) {\n cacheURL = cacheURL.replace(rantiCache, \"$1\");\n uncached = (rquery.test(cacheURL) ? \"&\" : \"?\") + \"_=\" + nonce.guid++ + uncached;\n } // Put hash and anti-cache on the URL that will be requested (gh-1732)\n\n\n s.url = cacheURL + uncached; // Change '%20' to '+' if this is encoded form body content (gh-2658)\n } else if (s.data && s.processData && (s.contentType || \"\").indexOf(\"application/x-www-form-urlencoded\") === 0) {\n s.data = s.data.replace(r20, \"+\");\n } // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\n\n if (s.ifModified) {\n if (jQuery.lastModified[cacheURL]) {\n jqXHR.setRequestHeader(\"If-Modified-Since\", jQuery.lastModified[cacheURL]);\n }\n\n if (jQuery.etag[cacheURL]) {\n jqXHR.setRequestHeader(\"If-None-Match\", jQuery.etag[cacheURL]);\n }\n } // Set the correct header, if data is being sent\n\n\n if (s.data && s.hasContent && s.contentType !== false || options.contentType) {\n jqXHR.setRequestHeader(\"Content-Type\", s.contentType);\n } // Set the Accepts header for the server, depending on the dataType\n\n\n jqXHR.setRequestHeader(\"Accept\", s.dataTypes[0] && s.accepts[s.dataTypes[0]] ? s.accepts[s.dataTypes[0]] + (s.dataTypes[0] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\") : s.accepts[\"*\"]); // Check for headers option\n\n for (i in s.headers) {\n jqXHR.setRequestHeader(i, s.headers[i]);\n } // Allow custom headers/mimetypes and early abort\n\n\n if (s.beforeSend && (s.beforeSend.call(callbackContext, jqXHR, s) === false || completed)) {\n // Abort if not done already and return\n return jqXHR.abort();\n } // Aborting is no longer a cancellation\n\n\n strAbort = \"abort\"; // Install callbacks on deferreds\n\n completeDeferred.add(s.complete);\n jqXHR.done(s.success);\n jqXHR.fail(s.error); // Get transport\n\n transport = inspectPrefiltersOrTransports(transports, s, options, jqXHR); // If no transport, we auto-abort\n\n if (!transport) {\n done(-1, \"No Transport\");\n } else {\n jqXHR.readyState = 1; // Send global event\n\n if (fireGlobals) {\n globalEventContext.trigger(\"ajaxSend\", [jqXHR, s]);\n } // If request was aborted inside ajaxSend, stop there\n\n\n if (completed) {\n return jqXHR;\n } // Timeout\n\n\n if (s.async && s.timeout > 0) {\n timeoutTimer = window.setTimeout(function () {\n jqXHR.abort(\"timeout\");\n }, s.timeout);\n }\n\n try {\n completed = false;\n transport.send(requestHeaders, done);\n } catch (e) {\n // Rethrow post-completion exceptions\n if (completed) {\n throw e;\n } // Propagate others as results\n\n\n done(-1, e);\n }\n } // Callback for when everything is done\n\n\n function done(status, nativeStatusText, responses, headers) {\n var isSuccess,\n success,\n error,\n response,\n modified,\n statusText = nativeStatusText; // Ignore repeat invocations\n\n if (completed) {\n return;\n }\n\n completed = true; // Clear timeout if it exists\n\n if (timeoutTimer) {\n window.clearTimeout(timeoutTimer);\n } // Dereference transport for early garbage collection\n // (no matter how long the jqXHR object will be used)\n\n\n transport = undefined; // Cache response headers\n\n responseHeadersString = headers || \"\"; // Set readyState\n\n jqXHR.readyState = status > 0 ? 4 : 0; // Determine if successful\n\n isSuccess = status >= 200 && status < 300 || status === 304; // Get response data\n\n if (responses) {\n response = ajaxHandleResponses(s, jqXHR, responses);\n } // Use a noop converter for missing script but not if jsonp\n\n\n if (!isSuccess && jQuery.inArray(\"script\", s.dataTypes) > -1 && jQuery.inArray(\"json\", s.dataTypes) < 0) {\n s.converters[\"text script\"] = function () {};\n } // Convert no matter what (that way responseXXX fields are always set)\n\n\n response = ajaxConvert(s, response, jqXHR, isSuccess); // If successful, handle type chaining\n\n if (isSuccess) {\n // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n if (s.ifModified) {\n modified = jqXHR.getResponseHeader(\"Last-Modified\");\n\n if (modified) {\n jQuery.lastModified[cacheURL] = modified;\n }\n\n modified = jqXHR.getResponseHeader(\"etag\");\n\n if (modified) {\n jQuery.etag[cacheURL] = modified;\n }\n } // if no content\n\n\n if (status === 204 || s.type === \"HEAD\") {\n statusText = \"nocontent\"; // if not modified\n } else if (status === 304) {\n statusText = \"notmodified\"; // If we have data, let's convert it\n } else {\n statusText = response.state;\n success = response.data;\n error = response.error;\n isSuccess = !error;\n }\n } else {\n // Extract error from statusText and normalize for non-aborts\n error = statusText;\n\n if (status || !statusText) {\n statusText = \"error\";\n\n if (status < 0) {\n status = 0;\n }\n }\n } // Set data for the fake xhr object\n\n\n jqXHR.status = status;\n jqXHR.statusText = (nativeStatusText || statusText) + \"\"; // Success/Error\n\n if (isSuccess) {\n deferred.resolveWith(callbackContext, [success, statusText, jqXHR]);\n } else {\n deferred.rejectWith(callbackContext, [jqXHR, statusText, error]);\n } // Status-dependent callbacks\n\n\n jqXHR.statusCode(_statusCode);\n _statusCode = undefined;\n\n if (fireGlobals) {\n globalEventContext.trigger(isSuccess ? \"ajaxSuccess\" : \"ajaxError\", [jqXHR, s, isSuccess ? success : error]);\n } // Complete\n\n\n completeDeferred.fireWith(callbackContext, [jqXHR, statusText]);\n\n if (fireGlobals) {\n globalEventContext.trigger(\"ajaxComplete\", [jqXHR, s]); // Handle the global AJAX counter\n\n if (! --jQuery.active) {\n jQuery.event.trigger(\"ajaxStop\");\n }\n }\n }\n\n return jqXHR;\n },\n getJSON: function getJSON(url, data, callback) {\n return jQuery.get(url, data, callback, \"json\");\n },\n getScript: function getScript(url, callback) {\n return jQuery.get(url, undefined, callback, \"script\");\n }\n });\n jQuery.each([\"get\", \"post\"], function (_i, method) {\n jQuery[method] = function (url, data, callback, type) {\n // Shift arguments if data argument was omitted\n if (isFunction(data)) {\n type = type || callback;\n callback = data;\n data = undefined;\n } // The url can be an options object (which then must have .url)\n\n\n return jQuery.ajax(jQuery.extend({\n url: url,\n type: method,\n dataType: type,\n data: data,\n success: callback\n }, jQuery.isPlainObject(url) && url));\n };\n });\n jQuery.ajaxPrefilter(function (s) {\n var i;\n\n for (i in s.headers) {\n if (i.toLowerCase() === \"content-type\") {\n s.contentType = s.headers[i] || \"\";\n }\n }\n });\n return jQuery;\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\ndefine([\"../var/class2type\", \"../var/toString\"], function (class2type, toString) {\n \"use strict\";\n\n function toType(obj) {\n if (obj == null) {\n return obj + \"\";\n } // Support: Android <=2.3 only (functionish RegExp)\n\n\n return _typeof(obj) === \"object\" || typeof obj === \"function\" ? class2type[toString.call(obj)] || \"object\" : _typeof(obj);\n }\n\n return toType;\n});","define([\"./core\", \"./var/getProto\", \"./var/indexOf\", \"./traversing/var/dir\", \"./traversing/var/siblings\", \"./traversing/var/rneedsContext\", \"./core/nodeName\", \"./core/init\", \"./traversing/findFilter\", \"./selector\"], function (jQuery, getProto, indexOf, dir, _siblings, rneedsContext, nodeName) {\n \"use strict\";\n\n var rparentsprev = /^(?:parents|prev(?:Until|All))/,\n // Methods guaranteed to produce a unique set when starting from a unique set\n guaranteedUnique = {\n children: true,\n contents: true,\n next: true,\n prev: true\n };\n jQuery.fn.extend({\n has: function has(target) {\n var targets = jQuery(target, this),\n l = targets.length;\n return this.filter(function () {\n var i = 0;\n\n for (; i < l; i++) {\n if (jQuery.contains(this, targets[i])) {\n return true;\n }\n }\n });\n },\n closest: function closest(selectors, context) {\n var cur,\n i = 0,\n l = this.length,\n matched = [],\n targets = typeof selectors !== \"string\" && jQuery(selectors); // Positional selectors never match, since there's no _selection_ context\n\n if (!rneedsContext.test(selectors)) {\n for (; i < l; i++) {\n for (cur = this[i]; cur && cur !== context; cur = cur.parentNode) {\n // Always skip document fragments\n if (cur.nodeType < 11 && (targets ? targets.index(cur) > -1 : // Don't pass non-elements to Sizzle\n cur.nodeType === 1 && jQuery.find.matchesSelector(cur, selectors))) {\n matched.push(cur);\n break;\n }\n }\n }\n }\n\n return this.pushStack(matched.length > 1 ? jQuery.uniqueSort(matched) : matched);\n },\n // Determine the position of an element within the set\n index: function index(elem) {\n // No argument, return index in parent\n if (!elem) {\n return this[0] && this[0].parentNode ? this.first().prevAll().length : -1;\n } // Index in selector\n\n\n if (typeof elem === \"string\") {\n return indexOf.call(jQuery(elem), this[0]);\n } // Locate the position of the desired element\n\n\n return indexOf.call(this, // If it receives a jQuery object, the first element is used\n elem.jquery ? elem[0] : elem);\n },\n add: function add(selector, context) {\n return this.pushStack(jQuery.uniqueSort(jQuery.merge(this.get(), jQuery(selector, context))));\n },\n addBack: function addBack(selector) {\n return this.add(selector == null ? this.prevObject : this.prevObject.filter(selector));\n }\n });\n\n function sibling(cur, dir) {\n while ((cur = cur[dir]) && cur.nodeType !== 1) {}\n\n return cur;\n }\n\n jQuery.each({\n parent: function parent(elem) {\n var parent = elem.parentNode;\n return parent && parent.nodeType !== 11 ? parent : null;\n },\n parents: function parents(elem) {\n return dir(elem, \"parentNode\");\n },\n parentsUntil: function parentsUntil(elem, _i, until) {\n return dir(elem, \"parentNode\", until);\n },\n next: function next(elem) {\n return sibling(elem, \"nextSibling\");\n },\n prev: function prev(elem) {\n return sibling(elem, \"previousSibling\");\n },\n nextAll: function nextAll(elem) {\n return dir(elem, \"nextSibling\");\n },\n prevAll: function prevAll(elem) {\n return dir(elem, \"previousSibling\");\n },\n nextUntil: function nextUntil(elem, _i, until) {\n return dir(elem, \"nextSibling\", until);\n },\n prevUntil: function prevUntil(elem, _i, until) {\n return dir(elem, \"previousSibling\", until);\n },\n siblings: function siblings(elem) {\n return _siblings((elem.parentNode || {}).firstChild, elem);\n },\n children: function children(elem) {\n return _siblings(elem.firstChild);\n },\n contents: function contents(elem) {\n if (elem.contentDocument != null && // Support: IE 11+\n // elements with no `data` attribute has an object\n // `contentDocument` with a `null` prototype.\n getProto(elem.contentDocument)) {\n return elem.contentDocument;\n } // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n // Treat the template element as a regular one in browsers that\n // don't support it.\n\n\n if (nodeName(elem, \"template\")) {\n elem = elem.content || elem;\n }\n\n return jQuery.merge([], elem.childNodes);\n }\n }, function (name, fn) {\n jQuery.fn[name] = function (until, selector) {\n var matched = jQuery.map(this, fn, until);\n\n if (name.slice(-5) !== \"Until\") {\n selector = until;\n }\n\n if (selector && typeof selector === \"string\") {\n matched = jQuery.filter(selector, matched);\n }\n\n if (this.length > 1) {\n // Remove duplicates\n if (!guaranteedUnique[name]) {\n jQuery.uniqueSort(matched);\n } // Reverse order for parents* and prev-derivatives\n\n\n if (rparentsprev.test(name)) {\n matched.reverse();\n }\n }\n\n return this.pushStack(matched);\n };\n });\n return jQuery;\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\ndefine([\"./core\", \"./var/isFunction\", \"./var/slice\", \"./callbacks\"], function (jQuery, isFunction, slice) {\n \"use strict\";\n\n function Identity(v) {\n return v;\n }\n\n function Thrower(ex) {\n throw ex;\n }\n\n function adoptValue(value, resolve, reject, noValue) {\n var method;\n\n try {\n // Check for promise aspect first to privilege synchronous behavior\n if (value && isFunction(method = value.promise)) {\n method.call(value).done(resolve).fail(reject); // Other thenables\n } else if (value && isFunction(method = value.then)) {\n method.call(value, resolve, reject); // Other non-thenables\n } else {\n // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n // * false: [ value ].slice( 0 ) => resolve( value )\n // * true: [ value ].slice( 1 ) => resolve()\n resolve.apply(undefined, [value].slice(noValue));\n } // For Promises/A+, convert exceptions into rejections\n // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n // Deferred#then to conditionally suppress rejection.\n\n } catch (value) {\n // Support: Android 4.0 only\n // Strict mode functions invoked without .call/.apply get global-object context\n reject.apply(undefined, [value]);\n }\n }\n\n jQuery.extend({\n Deferred: function Deferred(func) {\n var tuples = [// action, add listener, callbacks,\n // ... .then handlers, argument index, [final state]\n [\"notify\", \"progress\", jQuery.Callbacks(\"memory\"), jQuery.Callbacks(\"memory\"), 2], [\"resolve\", \"done\", jQuery.Callbacks(\"once memory\"), jQuery.Callbacks(\"once memory\"), 0, \"resolved\"], [\"reject\", \"fail\", jQuery.Callbacks(\"once memory\"), jQuery.Callbacks(\"once memory\"), 1, \"rejected\"]],\n _state = \"pending\",\n _promise = {\n state: function state() {\n return _state;\n },\n always: function always() {\n deferred.done(arguments).fail(arguments);\n return this;\n },\n \"catch\": function _catch(fn) {\n return _promise.then(null, fn);\n },\n // Keep pipe for back-compat\n pipe: function pipe() {\n var fns = arguments;\n return jQuery.Deferred(function (newDefer) {\n jQuery.each(tuples, function (_i, tuple) {\n // Map tuples (progress, done, fail) to arguments (done, fail, progress)\n var fn = isFunction(fns[tuple[4]]) && fns[tuple[4]]; // deferred.progress(function() { bind to newDefer or newDefer.notify })\n // deferred.done(function() { bind to newDefer or newDefer.resolve })\n // deferred.fail(function() { bind to newDefer or newDefer.reject })\n\n deferred[tuple[1]](function () {\n var returned = fn && fn.apply(this, arguments);\n\n if (returned && isFunction(returned.promise)) {\n returned.promise().progress(newDefer.notify).done(newDefer.resolve).fail(newDefer.reject);\n } else {\n newDefer[tuple[0] + \"With\"](this, fn ? [returned] : arguments);\n }\n });\n });\n fns = null;\n }).promise();\n },\n then: function then(onFulfilled, onRejected, onProgress) {\n var maxDepth = 0;\n\n function resolve(depth, deferred, handler, special) {\n return function () {\n var that = this,\n args = arguments,\n mightThrow = function mightThrow() {\n var returned, then; // Support: Promises/A+ section 2.3.3.3.3\n // https://promisesaplus.com/#point-59\n // Ignore double-resolution attempts\n\n if (depth < maxDepth) {\n return;\n }\n\n returned = handler.apply(that, args); // Support: Promises/A+ section 2.3.1\n // https://promisesaplus.com/#point-48\n\n if (returned === deferred.promise()) {\n throw new TypeError(\"Thenable self-resolution\");\n } // Support: Promises/A+ sections 2.3.3.1, 3.5\n // https://promisesaplus.com/#point-54\n // https://promisesaplus.com/#point-75\n // Retrieve `then` only once\n\n\n then = returned && (_typeof(returned) === \"object\" || typeof returned === \"function\") && returned.then; // Handle a returned thenable\n\n if (isFunction(then)) {\n // Special processors (notify) just wait for resolution\n if (special) {\n then.call(returned, resolve(maxDepth, deferred, Identity, special), resolve(maxDepth, deferred, Thrower, special)); // Normal processors (resolve) also hook into progress\n } else {\n // ...and disregard older resolution values\n maxDepth++;\n then.call(returned, resolve(maxDepth, deferred, Identity, special), resolve(maxDepth, deferred, Thrower, special), resolve(maxDepth, deferred, Identity, deferred.notifyWith));\n } // Handle all other returned values\n\n } else {\n // Only substitute handlers pass on context\n // and multiple values (non-spec behavior)\n if (handler !== Identity) {\n that = undefined;\n args = [returned];\n } // Process the value(s)\n // Default process is resolve\n\n\n (special || deferred.resolveWith)(that, args);\n }\n },\n // Only normal processors (resolve) catch and reject exceptions\n process = special ? mightThrow : function () {\n try {\n mightThrow();\n } catch (e) {\n if (jQuery.Deferred.exceptionHook) {\n jQuery.Deferred.exceptionHook(e, process.stackTrace);\n } // Support: Promises/A+ section 2.3.3.3.4.1\n // https://promisesaplus.com/#point-61\n // Ignore post-resolution exceptions\n\n\n if (depth + 1 >= maxDepth) {\n // Only substitute handlers pass on context\n // and multiple values (non-spec behavior)\n if (handler !== Thrower) {\n that = undefined;\n args = [e];\n }\n\n deferred.rejectWith(that, args);\n }\n }\n }; // Support: Promises/A+ section 2.3.3.3.1\n // https://promisesaplus.com/#point-57\n // Re-resolve promises immediately to dodge false rejection from\n // subsequent errors\n\n\n if (depth) {\n process();\n } else {\n // Call an optional hook to record the stack, in case of exception\n // since it's otherwise lost when execution goes async\n if (jQuery.Deferred.getStackHook) {\n process.stackTrace = jQuery.Deferred.getStackHook();\n }\n\n window.setTimeout(process);\n }\n };\n }\n\n return jQuery.Deferred(function (newDefer) {\n // progress_handlers.add( ... )\n tuples[0][3].add(resolve(0, newDefer, isFunction(onProgress) ? onProgress : Identity, newDefer.notifyWith)); // fulfilled_handlers.add( ... )\n\n tuples[1][3].add(resolve(0, newDefer, isFunction(onFulfilled) ? onFulfilled : Identity)); // rejected_handlers.add( ... )\n\n tuples[2][3].add(resolve(0, newDefer, isFunction(onRejected) ? onRejected : Thrower));\n }).promise();\n },\n // Get a promise for this deferred\n // If obj is provided, the promise aspect is added to the object\n promise: function promise(obj) {\n return obj != null ? jQuery.extend(obj, _promise) : _promise;\n }\n },\n deferred = {}; // Add list-specific methods\n\n jQuery.each(tuples, function (i, tuple) {\n var list = tuple[2],\n stateString = tuple[5]; // promise.progress = list.add\n // promise.done = list.add\n // promise.fail = list.add\n\n _promise[tuple[1]] = list.add; // Handle state\n\n if (stateString) {\n list.add(function () {\n // state = \"resolved\" (i.e., fulfilled)\n // state = \"rejected\"\n _state = stateString;\n }, // rejected_callbacks.disable\n // fulfilled_callbacks.disable\n tuples[3 - i][2].disable, // rejected_handlers.disable\n // fulfilled_handlers.disable\n tuples[3 - i][3].disable, // progress_callbacks.lock\n tuples[0][2].lock, // progress_handlers.lock\n tuples[0][3].lock);\n } // progress_handlers.fire\n // fulfilled_handlers.fire\n // rejected_handlers.fire\n\n\n list.add(tuple[3].fire); // deferred.notify = function() { deferred.notifyWith(...) }\n // deferred.resolve = function() { deferred.resolveWith(...) }\n // deferred.reject = function() { deferred.rejectWith(...) }\n\n deferred[tuple[0]] = function () {\n deferred[tuple[0] + \"With\"](this === deferred ? undefined : this, arguments);\n return this;\n }; // deferred.notifyWith = list.fireWith\n // deferred.resolveWith = list.fireWith\n // deferred.rejectWith = list.fireWith\n\n\n deferred[tuple[0] + \"With\"] = list.fireWith;\n }); // Make the deferred a promise\n\n _promise.promise(deferred); // Call given func if any\n\n\n if (func) {\n func.call(deferred, deferred);\n } // All done!\n\n\n return deferred;\n },\n // Deferred helper\n when: function when(singleValue) {\n var // count of uncompleted subordinates\n remaining = arguments.length,\n // count of unprocessed arguments\n i = remaining,\n // subordinate fulfillment data\n resolveContexts = Array(i),\n resolveValues = slice.call(arguments),\n // the primary Deferred\n primary = jQuery.Deferred(),\n // subordinate callback factory\n updateFunc = function updateFunc(i) {\n return function (value) {\n resolveContexts[i] = this;\n resolveValues[i] = arguments.length > 1 ? slice.call(arguments) : value;\n\n if (! --remaining) {\n primary.resolveWith(resolveContexts, resolveValues);\n }\n };\n }; // Single- and empty arguments are adopted like Promise.resolve\n\n\n if (remaining <= 1) {\n adoptValue(singleValue, primary.done(updateFunc(i)).resolve, primary.reject, !remaining); // Use .then() to unwrap secondary thenables (cf. gh-3000)\n\n if (primary.state() === \"pending\" || isFunction(resolveValues[i] && resolveValues[i].then)) {\n return primary.then();\n }\n } // Multiple arguments are aggregated like Promise.all array elements\n\n\n while (i--) {\n adoptValue(resolveValues[i], updateFunc(i), primary.reject);\n }\n\n return primary.promise();\n }\n });\n return jQuery;\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\ndefine([\"./core\", \"./var/document\", \"./var/documentElement\", \"./var/isFunction\", \"./var/rnothtmlwhite\", \"./var/rcheckableType\", \"./var/slice\", \"./data/var/acceptData\", \"./data/var/dataPriv\", \"./core/nodeName\", \"./core/init\", \"./selector\"], function (jQuery, document, documentElement, isFunction, rnothtmlwhite, rcheckableType, slice, acceptData, dataPriv, nodeName) {\n \"use strict\";\n\n var rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\n function returnTrue() {\n return true;\n }\n\n function returnFalse() {\n return false;\n } // Support: IE <=9 - 11+\n // focus() and blur() are asynchronous, except when they are no-op.\n // So expect focus to be synchronous when the element is already active,\n // and blur to be synchronous when the element is not already active.\n // (focus and blur are always synchronous in other supported browsers,\n // this just defines when we can count on it).\n\n\n function expectSync(elem, type) {\n return elem === safeActiveElement() === (type === \"focus\");\n } // Support: IE <=9 only\n // Accessing document.activeElement can throw unexpectedly\n // https://bugs.jquery.com/ticket/13393\n\n\n function safeActiveElement() {\n try {\n return document.activeElement;\n } catch (err) {}\n }\n\n function _on(elem, types, selector, data, fn, one) {\n var origFn, type; // Types can be a map of types/handlers\n\n if (_typeof(types) === \"object\") {\n // ( types-Object, selector, data )\n if (typeof selector !== \"string\") {\n // ( types-Object, data )\n data = data || selector;\n selector = undefined;\n }\n\n for (type in types) {\n _on(elem, type, selector, data, types[type], one);\n }\n\n return elem;\n }\n\n if (data == null && fn == null) {\n // ( types, fn )\n fn = selector;\n data = selector = undefined;\n } else if (fn == null) {\n if (typeof selector === \"string\") {\n // ( types, selector, fn )\n fn = data;\n data = undefined;\n } else {\n // ( types, data, fn )\n fn = data;\n data = selector;\n selector = undefined;\n }\n }\n\n if (fn === false) {\n fn = returnFalse;\n } else if (!fn) {\n return elem;\n }\n\n if (one === 1) {\n origFn = fn;\n\n fn = function fn(event) {\n // Can use an empty set, since event contains the info\n jQuery().off(event);\n return origFn.apply(this, arguments);\n }; // Use same guid so caller can remove using origFn\n\n\n fn.guid = origFn.guid || (origFn.guid = jQuery.guid++);\n }\n\n return elem.each(function () {\n jQuery.event.add(this, types, fn, data, selector);\n });\n }\n /*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\n\n\n jQuery.event = {\n global: {},\n add: function add(elem, types, handler, data, selector) {\n var handleObjIn,\n eventHandle,\n tmp,\n events,\n t,\n handleObj,\n special,\n handlers,\n type,\n namespaces,\n origType,\n elemData = dataPriv.get(elem); // Only attach events to objects that accept data\n\n if (!acceptData(elem)) {\n return;\n } // Caller can pass in an object of custom data in lieu of the handler\n\n\n if (handler.handler) {\n handleObjIn = handler;\n handler = handleObjIn.handler;\n selector = handleObjIn.selector;\n } // Ensure that invalid selectors throw exceptions at attach time\n // Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\n\n if (selector) {\n jQuery.find.matchesSelector(documentElement, selector);\n } // Make sure that the handler has a unique ID, used to find/remove it later\n\n\n if (!handler.guid) {\n handler.guid = jQuery.guid++;\n } // Init the element's event structure and main handler, if this is the first\n\n\n if (!(events = elemData.events)) {\n events = elemData.events = Object.create(null);\n }\n\n if (!(eventHandle = elemData.handle)) {\n eventHandle = elemData.handle = function (e) {\n // Discard the second event of a jQuery.event.trigger() and\n // when an event is called after a page has unloaded\n return typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ? jQuery.event.dispatch.apply(elem, arguments) : undefined;\n };\n } // Handle multiple events separated by a space\n\n\n types = (types || \"\").match(rnothtmlwhite) || [\"\"];\n t = types.length;\n\n while (t--) {\n tmp = rtypenamespace.exec(types[t]) || [];\n type = origType = tmp[1];\n namespaces = (tmp[2] || \"\").split(\".\").sort(); // There *must* be a type, no attaching namespace-only handlers\n\n if (!type) {\n continue;\n } // If event changes its type, use the special event handlers for the changed type\n\n\n special = jQuery.event.special[type] || {}; // If selector defined, determine special event api type, otherwise given type\n\n type = (selector ? special.delegateType : special.bindType) || type; // Update special based on newly reset type\n\n special = jQuery.event.special[type] || {}; // handleObj is passed to all event handlers\n\n handleObj = jQuery.extend({\n type: type,\n origType: origType,\n data: data,\n handler: handler,\n guid: handler.guid,\n selector: selector,\n needsContext: selector && jQuery.expr.match.needsContext.test(selector),\n namespace: namespaces.join(\".\")\n }, handleObjIn); // Init the event handler queue if we're the first\n\n if (!(handlers = events[type])) {\n handlers = events[type] = [];\n handlers.delegateCount = 0; // Only use addEventListener if the special events handler returns false\n\n if (!special.setup || special.setup.call(elem, data, namespaces, eventHandle) === false) {\n if (elem.addEventListener) {\n elem.addEventListener(type, eventHandle);\n }\n }\n }\n\n if (special.add) {\n special.add.call(elem, handleObj);\n\n if (!handleObj.handler.guid) {\n handleObj.handler.guid = handler.guid;\n }\n } // Add to the element's handler list, delegates in front\n\n\n if (selector) {\n handlers.splice(handlers.delegateCount++, 0, handleObj);\n } else {\n handlers.push(handleObj);\n } // Keep track of which events have ever been used, for event optimization\n\n\n jQuery.event.global[type] = true;\n }\n },\n // Detach an event or set of events from an element\n remove: function remove(elem, types, handler, selector, mappedTypes) {\n var j,\n origCount,\n tmp,\n events,\n t,\n handleObj,\n special,\n handlers,\n type,\n namespaces,\n origType,\n elemData = dataPriv.hasData(elem) && dataPriv.get(elem);\n\n if (!elemData || !(events = elemData.events)) {\n return;\n } // Once for each type.namespace in types; type may be omitted\n\n\n types = (types || \"\").match(rnothtmlwhite) || [\"\"];\n t = types.length;\n\n while (t--) {\n tmp = rtypenamespace.exec(types[t]) || [];\n type = origType = tmp[1];\n namespaces = (tmp[2] || \"\").split(\".\").sort(); // Unbind all events (on this namespace, if provided) for the element\n\n if (!type) {\n for (type in events) {\n jQuery.event.remove(elem, type + types[t], handler, selector, true);\n }\n\n continue;\n }\n\n special = jQuery.event.special[type] || {};\n type = (selector ? special.delegateType : special.bindType) || type;\n handlers = events[type] || [];\n tmp = tmp[2] && new RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\"); // Remove matching events\n\n origCount = j = handlers.length;\n\n while (j--) {\n handleObj = handlers[j];\n\n if ((mappedTypes || origType === handleObj.origType) && (!handler || handler.guid === handleObj.guid) && (!tmp || tmp.test(handleObj.namespace)) && (!selector || selector === handleObj.selector || selector === \"**\" && handleObj.selector)) {\n handlers.splice(j, 1);\n\n if (handleObj.selector) {\n handlers.delegateCount--;\n }\n\n if (special.remove) {\n special.remove.call(elem, handleObj);\n }\n }\n } // Remove generic event handler if we removed something and no more handlers exist\n // (avoids potential for endless recursion during removal of special event handlers)\n\n\n if (origCount && !handlers.length) {\n if (!special.teardown || special.teardown.call(elem, namespaces, elemData.handle) === false) {\n jQuery.removeEvent(elem, type, elemData.handle);\n }\n\n delete events[type];\n }\n } // Remove data and the expando if it's no longer used\n\n\n if (jQuery.isEmptyObject(events)) {\n dataPriv.remove(elem, \"handle events\");\n }\n },\n dispatch: function dispatch(nativeEvent) {\n var i,\n j,\n ret,\n matched,\n handleObj,\n handlerQueue,\n args = new Array(arguments.length),\n // Make a writable jQuery.Event from the native event object\n event = jQuery.event.fix(nativeEvent),\n handlers = (dataPriv.get(this, \"events\") || Object.create(null))[event.type] || [],\n special = jQuery.event.special[event.type] || {}; // Use the fix-ed jQuery.Event rather than the (read-only) native event\n\n args[0] = event;\n\n for (i = 1; i < arguments.length; i++) {\n args[i] = arguments[i];\n }\n\n event.delegateTarget = this; // Call the preDispatch hook for the mapped type, and let it bail if desired\n\n if (special.preDispatch && special.preDispatch.call(this, event) === false) {\n return;\n } // Determine handlers\n\n\n handlerQueue = jQuery.event.handlers.call(this, event, handlers); // Run delegates first; they may want to stop propagation beneath us\n\n i = 0;\n\n while ((matched = handlerQueue[i++]) && !event.isPropagationStopped()) {\n event.currentTarget = matched.elem;\n j = 0;\n\n while ((handleObj = matched.handlers[j++]) && !event.isImmediatePropagationStopped()) {\n // If the event is namespaced, then each handler is only invoked if it is\n // specially universal or its namespaces are a superset of the event's.\n if (!event.rnamespace || handleObj.namespace === false || event.rnamespace.test(handleObj.namespace)) {\n event.handleObj = handleObj;\n event.data = handleObj.data;\n ret = ((jQuery.event.special[handleObj.origType] || {}).handle || handleObj.handler).apply(matched.elem, args);\n\n if (ret !== undefined) {\n if ((event.result = ret) === false) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n }\n }\n } // Call the postDispatch hook for the mapped type\n\n\n if (special.postDispatch) {\n special.postDispatch.call(this, event);\n }\n\n return event.result;\n },\n handlers: function handlers(event, _handlers) {\n var i,\n handleObj,\n sel,\n matchedHandlers,\n matchedSelectors,\n handlerQueue = [],\n delegateCount = _handlers.delegateCount,\n cur = event.target; // Find delegate handlers\n\n if (delegateCount && // Support: IE <=9\n // Black-hole SVG instance trees (trac-13180)\n cur.nodeType && // Support: Firefox <=42\n // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n // Support: IE 11 only\n // ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n !(event.type === \"click\" && event.button >= 1)) {\n for (; cur !== this; cur = cur.parentNode || this) {\n // Don't check non-elements (#13208)\n // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n if (cur.nodeType === 1 && !(event.type === \"click\" && cur.disabled === true)) {\n matchedHandlers = [];\n matchedSelectors = {};\n\n for (i = 0; i < delegateCount; i++) {\n handleObj = _handlers[i]; // Don't conflict with Object.prototype properties (#13203)\n\n sel = handleObj.selector + \" \";\n\n if (matchedSelectors[sel] === undefined) {\n matchedSelectors[sel] = handleObj.needsContext ? jQuery(sel, this).index(cur) > -1 : jQuery.find(sel, this, null, [cur]).length;\n }\n\n if (matchedSelectors[sel]) {\n matchedHandlers.push(handleObj);\n }\n }\n\n if (matchedHandlers.length) {\n handlerQueue.push({\n elem: cur,\n handlers: matchedHandlers\n });\n }\n }\n }\n } // Add the remaining (directly-bound) handlers\n\n\n cur = this;\n\n if (delegateCount < _handlers.length) {\n handlerQueue.push({\n elem: cur,\n handlers: _handlers.slice(delegateCount)\n });\n }\n\n return handlerQueue;\n },\n addProp: function addProp(name, hook) {\n Object.defineProperty(jQuery.Event.prototype, name, {\n enumerable: true,\n configurable: true,\n get: isFunction(hook) ? function () {\n if (this.originalEvent) {\n return hook(this.originalEvent);\n }\n } : function () {\n if (this.originalEvent) {\n return this.originalEvent[name];\n }\n },\n set: function set(value) {\n Object.defineProperty(this, name, {\n enumerable: true,\n configurable: true,\n writable: true,\n value: value\n });\n }\n });\n },\n fix: function fix(originalEvent) {\n return originalEvent[jQuery.expando] ? originalEvent : new jQuery.Event(originalEvent);\n },\n special: {\n load: {\n // Prevent triggered image.load events from bubbling to window.load\n noBubble: true\n },\n click: {\n // Utilize native event to ensure correct state for checkable inputs\n setup: function setup(data) {\n // For mutual compressibility with _default, replace `this` access with a local var.\n // `|| data` is dead code meant only to preserve the variable through minification.\n var el = this || data; // Claim the first handler\n\n if (rcheckableType.test(el.type) && el.click && nodeName(el, \"input\")) {\n // dataPriv.set( el, \"click\", ... )\n leverageNative(el, \"click\", returnTrue);\n } // Return false to allow normal processing in the caller\n\n\n return false;\n },\n trigger: function trigger(data) {\n // For mutual compressibility with _default, replace `this` access with a local var.\n // `|| data` is dead code meant only to preserve the variable through minification.\n var el = this || data; // Force setup before triggering a click\n\n if (rcheckableType.test(el.type) && el.click && nodeName(el, \"input\")) {\n leverageNative(el, \"click\");\n } // Return non-false to allow normal event-path propagation\n\n\n return true;\n },\n // For cross-browser consistency, suppress native .click() on links\n // Also prevent it if we're currently inside a leveraged native-event stack\n _default: function _default(event) {\n var target = event.target;\n return rcheckableType.test(target.type) && target.click && nodeName(target, \"input\") && dataPriv.get(target, \"click\") || nodeName(target, \"a\");\n }\n },\n beforeunload: {\n postDispatch: function postDispatch(event) {\n // Support: Firefox 20+\n // Firefox doesn't alert if the returnValue field is not set.\n if (event.result !== undefined && event.originalEvent) {\n event.originalEvent.returnValue = event.result;\n }\n }\n }\n }\n }; // Ensure the presence of an event listener that handles manually-triggered\n // synthetic events by interrupting progress until reinvoked in response to\n // *native* events that it fires directly, ensuring that state changes have\n // already occurred before other listeners are invoked.\n\n function leverageNative(el, type, expectSync) {\n // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add\n if (!expectSync) {\n if (dataPriv.get(el, type) === undefined) {\n jQuery.event.add(el, type, returnTrue);\n }\n\n return;\n } // Register the controller as a special universal handler for all event namespaces\n\n\n dataPriv.set(el, type, false);\n jQuery.event.add(el, type, {\n namespace: false,\n handler: function handler(event) {\n var notAsync,\n result,\n saved = dataPriv.get(this, type);\n\n if (event.isTrigger & 1 && this[type]) {\n // Interrupt processing of the outer synthetic .trigger()ed event\n // Saved data should be false in such cases, but might be a leftover capture object\n // from an async native handler (gh-4350)\n if (!saved.length) {\n // Store arguments for use when handling the inner native event\n // There will always be at least one argument (an event object), so this array\n // will not be confused with a leftover capture object.\n saved = slice.call(arguments);\n dataPriv.set(this, type, saved); // Trigger the native event and capture its result\n // Support: IE <=9 - 11+\n // focus() and blur() are asynchronous\n\n notAsync = expectSync(this, type);\n this[type]();\n result = dataPriv.get(this, type);\n\n if (saved !== result || notAsync) {\n dataPriv.set(this, type, false);\n } else {\n result = {};\n }\n\n if (saved !== result) {\n // Cancel the outer synthetic event\n event.stopImmediatePropagation();\n event.preventDefault(); // Support: Chrome 86+\n // In Chrome, if an element having a focusout handler is blurred by\n // clicking outside of it, it invokes the handler synchronously. If\n // that handler calls `.remove()` on the element, the data is cleared,\n // leaving `result` undefined. We need to guard against this.\n\n return result && result.value;\n } // If this is an inner synthetic event for an event with a bubbling surrogate\n // (focus or blur), assume that the surrogate already propagated from triggering the\n // native event and prevent that from happening again here.\n // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n // bubbling surrogate propagates *after* the non-bubbling base), but that seems\n // less bad than duplication.\n\n } else if ((jQuery.event.special[type] || {}).delegateType) {\n event.stopPropagation();\n } // If this is a native event triggered above, everything is now in order\n // Fire an inner synthetic event with the original arguments\n\n } else if (saved.length) {\n // ...and capture the result\n dataPriv.set(this, type, {\n value: jQuery.event.trigger( // Support: IE <=9 - 11+\n // Extend with the prototype to reset the above stopImmediatePropagation()\n jQuery.extend(saved[0], jQuery.Event.prototype), saved.slice(1), this)\n }); // Abort handling of the native event\n\n event.stopImmediatePropagation();\n }\n }\n });\n }\n\n jQuery.removeEvent = function (elem, type, handle) {\n // This \"if\" is needed for plain objects\n if (elem.removeEventListener) {\n elem.removeEventListener(type, handle);\n }\n };\n\n jQuery.Event = function (src, props) {\n // Allow instantiation without the 'new' keyword\n if (!(this instanceof jQuery.Event)) {\n return new jQuery.Event(src, props);\n } // Event object\n\n\n if (src && src.type) {\n this.originalEvent = src;\n this.type = src.type; // Events bubbling up the document may have been marked as prevented\n // by a handler lower down the tree; reflect the correct value.\n\n this.isDefaultPrevented = src.defaultPrevented || src.defaultPrevented === undefined && // Support: Android <=2.3 only\n src.returnValue === false ? returnTrue : returnFalse; // Create target properties\n // Support: Safari <=6 - 7 only\n // Target should not be a text node (#504, #13143)\n\n this.target = src.target && src.target.nodeType === 3 ? src.target.parentNode : src.target;\n this.currentTarget = src.currentTarget;\n this.relatedTarget = src.relatedTarget; // Event type\n } else {\n this.type = src;\n } // Put explicitly provided properties onto the event object\n\n\n if (props) {\n jQuery.extend(this, props);\n } // Create a timestamp if incoming event doesn't have one\n\n\n this.timeStamp = src && src.timeStamp || Date.now(); // Mark it as fixed\n\n this[jQuery.expando] = true;\n }; // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n // https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\n\n\n jQuery.Event.prototype = {\n constructor: jQuery.Event,\n isDefaultPrevented: returnFalse,\n isPropagationStopped: returnFalse,\n isImmediatePropagationStopped: returnFalse,\n isSimulated: false,\n preventDefault: function preventDefault() {\n var e = this.originalEvent;\n this.isDefaultPrevented = returnTrue;\n\n if (e && !this.isSimulated) {\n e.preventDefault();\n }\n },\n stopPropagation: function stopPropagation() {\n var e = this.originalEvent;\n this.isPropagationStopped = returnTrue;\n\n if (e && !this.isSimulated) {\n e.stopPropagation();\n }\n },\n stopImmediatePropagation: function stopImmediatePropagation() {\n var e = this.originalEvent;\n this.isImmediatePropagationStopped = returnTrue;\n\n if (e && !this.isSimulated) {\n e.stopImmediatePropagation();\n }\n\n this.stopPropagation();\n }\n }; // Includes all common event props including KeyEvent and MouseEvent specific props\n\n jQuery.each({\n altKey: true,\n bubbles: true,\n cancelable: true,\n changedTouches: true,\n ctrlKey: true,\n detail: true,\n eventPhase: true,\n metaKey: true,\n pageX: true,\n pageY: true,\n shiftKey: true,\n view: true,\n \"char\": true,\n code: true,\n charCode: true,\n key: true,\n keyCode: true,\n button: true,\n buttons: true,\n clientX: true,\n clientY: true,\n offsetX: true,\n offsetY: true,\n pointerId: true,\n pointerType: true,\n screenX: true,\n screenY: true,\n targetTouches: true,\n toElement: true,\n touches: true,\n which: true\n }, jQuery.event.addProp);\n jQuery.each({\n focus: \"focusin\",\n blur: \"focusout\"\n }, function (type, delegateType) {\n jQuery.event.special[type] = {\n // Utilize native event if possible so blur/focus sequence is correct\n setup: function setup() {\n // Claim the first handler\n // dataPriv.set( this, \"focus\", ... )\n // dataPriv.set( this, \"blur\", ... )\n leverageNative(this, type, expectSync); // Return false to allow normal processing in the caller\n\n return false;\n },\n trigger: function trigger() {\n // Force setup before trigger\n leverageNative(this, type); // Return non-false to allow normal event-path propagation\n\n return true;\n },\n // Suppress native focus or blur as it's already being fired\n // in leverageNative.\n _default: function _default() {\n return true;\n },\n delegateType: delegateType\n };\n }); // Create mouseenter/leave events using mouseover/out and event-time checks\n // so that event delegation works in jQuery.\n // Do the same for pointerenter/pointerleave and pointerover/pointerout\n //\n // Support: Safari 7 only\n // Safari sends mouseenter too often; see:\n // https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n // for the description of the bug (it existed in older Chrome versions as well).\n\n jQuery.each({\n mouseenter: \"mouseover\",\n mouseleave: \"mouseout\",\n pointerenter: \"pointerover\",\n pointerleave: \"pointerout\"\n }, function (orig, fix) {\n jQuery.event.special[orig] = {\n delegateType: fix,\n bindType: fix,\n handle: function handle(event) {\n var ret,\n target = this,\n related = event.relatedTarget,\n handleObj = event.handleObj; // For mouseenter/leave call the handler if related is outside the target.\n // NB: No relatedTarget if the mouse left/entered the browser window\n\n if (!related || related !== target && !jQuery.contains(target, related)) {\n event.type = handleObj.origType;\n ret = handleObj.handler.apply(this, arguments);\n event.type = fix;\n }\n\n return ret;\n }\n };\n });\n jQuery.fn.extend({\n on: function on(types, selector, data, fn) {\n return _on(this, types, selector, data, fn);\n },\n one: function one(types, selector, data, fn) {\n return _on(this, types, selector, data, fn, 1);\n },\n off: function off(types, selector, fn) {\n var handleObj, type;\n\n if (types && types.preventDefault && types.handleObj) {\n // ( event ) dispatched jQuery.Event\n handleObj = types.handleObj;\n jQuery(types.delegateTarget).off(handleObj.namespace ? handleObj.origType + \".\" + handleObj.namespace : handleObj.origType, handleObj.selector, handleObj.handler);\n return this;\n }\n\n if (_typeof(types) === \"object\") {\n // ( types-object [, selector] )\n for (type in types) {\n this.off(type, selector, types[type]);\n }\n\n return this;\n }\n\n if (selector === false || typeof selector === \"function\") {\n // ( types [, fn] )\n fn = selector;\n selector = undefined;\n }\n\n if (fn === false) {\n fn = returnFalse;\n }\n\n return this.each(function () {\n jQuery.event.remove(this, types, fn, selector);\n });\n }\n });\n return jQuery;\n});","define([\"./core\", \"./selector\", \"./traversing\", \"./callbacks\", \"./deferred\", \"./deferred/exceptionHook\", \"./core/ready\", \"./data\", \"./queue\", \"./queue/delay\", \"./attributes\", \"./event\", \"./event/focusin\", \"./manipulation\", \"./manipulation/_evalUrl\", \"./wrap\", \"./css\", \"./css/hiddenVisibleSelectors\", \"./serialize\", \"./ajax\", \"./ajax/xhr\", \"./ajax/script\", \"./ajax/jsonp\", \"./ajax/load\", \"./core/parseXML\", \"./core/parseHTML\", \"./effects\", \"./effects/animatedSelector\", \"./offset\", \"./dimensions\", \"./deprecated\", \"./exports/amd\", \"./exports/global\"], function (jQuery) {\n \"use strict\";\n\n return jQuery;\n});","define(function () {\n \"use strict\";\n\n return [];\n});","define(function () {\n \"use strict\";\n\n return function isWindow(obj) {\n return obj != null && obj === obj.window;\n };\n});","define([], function () {\n \"use strict\"; // Matches dashed string for camelizing\n\n var rmsPrefix = /^-ms-/,\n rdashAlpha = /-([a-z])/g; // Used by camelCase as callback to replace()\n\n function fcamelCase(_all, letter) {\n return letter.toUpperCase();\n } // Convert dashed to camelCase; used by the css and data modules\n // Support: IE <=9 - 11, Edge 12 - 15\n // Microsoft forgot to hump their vendor prefix (#9572)\n\n\n function camelCase(string) {\n return string.replace(rmsPrefix, \"ms-\").replace(rdashAlpha, fcamelCase);\n }\n\n return camelCase;\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\ndefine([\"./core\", \"./core/access\", \"./core/camelCase\", \"./core/nodeName\", \"./var/rcssNum\", \"./css/var/rnumnonpx\", \"./css/var/cssExpand\", \"./css/var/getStyles\", \"./css/var/swap\", \"./css/curCSS\", \"./css/adjustCSS\", \"./css/addGetHookIf\", \"./css/support\", \"./css/finalPropName\", \"./core/init\", \"./core/ready\", \"./selector\" // contains\n], function (jQuery, access, camelCase, nodeName, rcssNum, rnumnonpx, cssExpand, getStyles, swap, curCSS, adjustCSS, addGetHookIf, support, finalPropName) {\n \"use strict\";\n\n var // Swappable if display is none or starts with table\n // except \"table\", \"table-cell\", or \"table-caption\"\n // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n rdisplayswap = /^(none|table(?!-c[ea]).+)/,\n rcustomProp = /^--/,\n cssShow = {\n position: \"absolute\",\n visibility: \"hidden\",\n display: \"block\"\n },\n cssNormalTransform = {\n letterSpacing: \"0\",\n fontWeight: \"400\"\n };\n\n function setPositiveNumber(_elem, value, subtract) {\n // Any relative (+/-) values have already been\n // normalized at this point\n var matches = rcssNum.exec(value);\n return matches ? // Guard against undefined \"subtract\", e.g., when used as in cssHooks\n Math.max(0, matches[2] - (subtract || 0)) + (matches[3] || \"px\") : value;\n }\n\n function boxModelAdjustment(elem, dimension, box, isBorderBox, styles, computedVal) {\n var i = dimension === \"width\" ? 1 : 0,\n extra = 0,\n delta = 0; // Adjustment may not be necessary\n\n if (box === (isBorderBox ? \"border\" : \"content\")) {\n return 0;\n }\n\n for (; i < 4; i += 2) {\n // Both box models exclude margin\n if (box === \"margin\") {\n delta += jQuery.css(elem, box + cssExpand[i], true, styles);\n } // If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\n\n if (!isBorderBox) {\n // Add padding\n delta += jQuery.css(elem, \"padding\" + cssExpand[i], true, styles); // For \"border\" or \"margin\", add border\n\n if (box !== \"padding\") {\n delta += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles); // But still keep track of it otherwise\n } else {\n extra += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n } // If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n // \"padding\" or \"margin\"\n\n } else {\n // For \"content\", subtract padding\n if (box === \"content\") {\n delta -= jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n } // For \"content\" or \"padding\", subtract border\n\n\n if (box !== \"margin\") {\n delta -= jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n }\n }\n } // Account for positive content-box scroll gutter when requested by providing computedVal\n\n\n if (!isBorderBox && computedVal >= 0) {\n // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n // Assuming integer scroll gutter, subtract the rest and round down\n delta += Math.max(0, Math.ceil(elem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] - computedVal - delta - extra - 0.5 // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n // Use an explicit zero to avoid NaN (gh-3964)\n )) || 0;\n }\n\n return delta;\n }\n\n function getWidthOrHeight(elem, dimension, extra) {\n // Start with computed style\n var styles = getStyles(elem),\n // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n // Fake content-box until we know it's needed to know the true value.\n boxSizingNeeded = !support.boxSizingReliable() || extra,\n isBorderBox = boxSizingNeeded && jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n valueIsBorderBox = isBorderBox,\n val = curCSS(elem, dimension, styles),\n offsetProp = \"offset\" + dimension[0].toUpperCase() + dimension.slice(1); // Support: Firefox <=54\n // Return a confounding non-pixel value or feign ignorance, as appropriate.\n\n if (rnumnonpx.test(val)) {\n if (!extra) {\n return val;\n }\n\n val = \"auto\";\n } // Support: IE 9 - 11 only\n // Use offsetWidth/offsetHeight for when box sizing is unreliable.\n // In those cases, the computed value can be trusted to be border-box.\n\n\n if ((!support.boxSizingReliable() && isBorderBox || // Support: IE 10 - 11+, Edge 15 - 18+\n // IE/Edge misreport `getComputedStyle` of table rows with width/height\n // set in CSS while `offset*` properties report correct values.\n // Interestingly, in some cases IE 9 doesn't suffer from this issue.\n !support.reliableTrDimensions() && nodeName(elem, \"tr\") || // Fall back to offsetWidth/offsetHeight when value is \"auto\"\n // This happens for inline elements with no explicit setting (gh-3571)\n val === \"auto\" || // Support: Android <=4.1 - 4.3 only\n // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n !parseFloat(val) && jQuery.css(elem, \"display\", false, styles) === \"inline\") && // Make sure the element is visible & connected\n elem.getClientRects().length) {\n isBorderBox = jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\"; // Where available, offsetWidth/offsetHeight approximate border box dimensions.\n // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n // retrieved value as a content box dimension.\n\n valueIsBorderBox = offsetProp in elem;\n\n if (valueIsBorderBox) {\n val = elem[offsetProp];\n }\n } // Normalize \"\" and auto\n\n\n val = parseFloat(val) || 0; // Adjust for the element's box model\n\n return val + boxModelAdjustment(elem, dimension, extra || (isBorderBox ? \"border\" : \"content\"), valueIsBorderBox, styles, // Provide the current computed size to request scroll gutter calculation (gh-3589)\n val) + \"px\";\n }\n\n jQuery.extend({\n // Add in style property hooks for overriding the default\n // behavior of getting and setting a style property\n cssHooks: {\n opacity: {\n get: function get(elem, computed) {\n if (computed) {\n // We should always get a number back from opacity\n var ret = curCSS(elem, \"opacity\");\n return ret === \"\" ? \"1\" : ret;\n }\n }\n }\n },\n // Don't automatically add \"px\" to these possibly-unitless properties\n cssNumber: {\n \"animationIterationCount\": true,\n \"columnCount\": true,\n \"fillOpacity\": true,\n \"flexGrow\": true,\n \"flexShrink\": true,\n \"fontWeight\": true,\n \"gridArea\": true,\n \"gridColumn\": true,\n \"gridColumnEnd\": true,\n \"gridColumnStart\": true,\n \"gridRow\": true,\n \"gridRowEnd\": true,\n \"gridRowStart\": true,\n \"lineHeight\": true,\n \"opacity\": true,\n \"order\": true,\n \"orphans\": true,\n \"widows\": true,\n \"zIndex\": true,\n \"zoom\": true\n },\n // Add in properties whose names you wish to fix before\n // setting or getting the value\n cssProps: {},\n // Get and set the style property on a DOM Node\n style: function style(elem, name, value, extra) {\n // Don't set styles on text and comment nodes\n if (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) {\n return;\n } // Make sure that we're working with the right name\n\n\n var ret,\n type,\n hooks,\n origName = camelCase(name),\n isCustomProp = rcustomProp.test(name),\n style = elem.style; // Make sure that we're working with the right name. We don't\n // want to query the value if it is a CSS custom property\n // since they are user-defined.\n\n if (!isCustomProp) {\n name = finalPropName(origName);\n } // Gets hook for the prefixed version, then unprefixed version\n\n\n hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName]; // Check if we're setting a value\n\n if (value !== undefined) {\n type = _typeof(value); // Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\n if (type === \"string\" && (ret = rcssNum.exec(value)) && ret[1]) {\n value = adjustCSS(elem, name, ret); // Fixes bug #9237\n\n type = \"number\";\n } // Make sure that null and NaN values aren't set (#7116)\n\n\n if (value == null || value !== value) {\n return;\n } // If a number was passed in, add the unit (except for certain CSS properties)\n // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n // \"px\" to a few hardcoded values.\n\n\n if (type === \"number\" && !isCustomProp) {\n value += ret && ret[3] || (jQuery.cssNumber[origName] ? \"\" : \"px\");\n } // background-* props affect original clone's values\n\n\n if (!support.clearCloneStyle && value === \"\" && name.indexOf(\"background\") === 0) {\n style[name] = \"inherit\";\n } // If a hook was provided, use that value, otherwise just set the specified value\n\n\n if (!hooks || !(\"set\" in hooks) || (value = hooks.set(elem, value, extra)) !== undefined) {\n if (isCustomProp) {\n style.setProperty(name, value);\n } else {\n style[name] = value;\n }\n }\n } else {\n // If a hook was provided get the non-computed value from there\n if (hooks && \"get\" in hooks && (ret = hooks.get(elem, false, extra)) !== undefined) {\n return ret;\n } // Otherwise just get the value from the style object\n\n\n return style[name];\n }\n },\n css: function css(elem, name, extra, styles) {\n var val,\n num,\n hooks,\n origName = camelCase(name),\n isCustomProp = rcustomProp.test(name); // Make sure that we're working with the right name. We don't\n // want to modify the value if it is a CSS custom property\n // since they are user-defined.\n\n if (!isCustomProp) {\n name = finalPropName(origName);\n } // Try prefixed name followed by the unprefixed name\n\n\n hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName]; // If a hook was provided get the computed value from there\n\n if (hooks && \"get\" in hooks) {\n val = hooks.get(elem, true, extra);\n } // Otherwise, if a way to get the computed value exists, use that\n\n\n if (val === undefined) {\n val = curCSS(elem, name, styles);\n } // Convert \"normal\" to computed value\n\n\n if (val === \"normal\" && name in cssNormalTransform) {\n val = cssNormalTransform[name];\n } // Make numeric if forced or a qualifier was provided and val looks numeric\n\n\n if (extra === \"\" || extra) {\n num = parseFloat(val);\n return extra === true || isFinite(num) ? num || 0 : val;\n }\n\n return val;\n }\n });\n jQuery.each([\"height\", \"width\"], function (_i, dimension) {\n jQuery.cssHooks[dimension] = {\n get: function get(elem, computed, extra) {\n if (computed) {\n // Certain elements can have dimension info if we invisibly show them\n // but it must have a current display style that would benefit\n return rdisplayswap.test(jQuery.css(elem, \"display\")) && (!elem.getClientRects().length || !elem.getBoundingClientRect().width) ? swap(elem, cssShow, function () {\n return getWidthOrHeight(elem, dimension, extra);\n }) : getWidthOrHeight(elem, dimension, extra);\n }\n },\n set: function set(elem, value, extra) {\n var matches,\n styles = getStyles(elem),\n // Only read styles.position if the test has a chance to fail\n // to avoid forcing a reflow.\n scrollboxSizeBuggy = !support.scrollboxSize() && styles.position === \"absolute\",\n // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n boxSizingNeeded = scrollboxSizeBuggy || extra,\n isBorderBox = boxSizingNeeded && jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n subtract = extra ? boxModelAdjustment(elem, dimension, extra, isBorderBox, styles) : 0; // Account for unreliable border-box dimensions by comparing offset* to computed and\n // faking a content-box to get border and padding (gh-3699)\n\n if (isBorderBox && scrollboxSizeBuggy) {\n subtract -= Math.ceil(elem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] - parseFloat(styles[dimension]) - boxModelAdjustment(elem, dimension, \"border\", false, styles) - 0.5);\n } // Convert to pixels if value adjustment is needed\n\n\n if (subtract && (matches = rcssNum.exec(value)) && (matches[3] || \"px\") !== \"px\") {\n elem.style[dimension] = value;\n value = jQuery.css(elem, dimension);\n }\n\n return setPositiveNumber(elem, value, subtract);\n }\n };\n });\n jQuery.cssHooks.marginLeft = addGetHookIf(support.reliableMarginLeft, function (elem, computed) {\n if (computed) {\n return (parseFloat(curCSS(elem, \"marginLeft\")) || elem.getBoundingClientRect().left - swap(elem, {\n marginLeft: 0\n }, function () {\n return elem.getBoundingClientRect().left;\n })) + \"px\";\n }\n }); // These hooks are used by animate to expand properties\n\n jQuery.each({\n margin: \"\",\n padding: \"\",\n border: \"Width\"\n }, function (prefix, suffix) {\n jQuery.cssHooks[prefix + suffix] = {\n expand: function expand(value) {\n var i = 0,\n expanded = {},\n // Assumes a single number if not a string\n parts = typeof value === \"string\" ? value.split(\" \") : [value];\n\n for (; i < 4; i++) {\n expanded[prefix + cssExpand[i] + suffix] = parts[i] || parts[i - 2] || parts[0];\n }\n\n return expanded;\n }\n };\n\n if (prefix !== \"margin\") {\n jQuery.cssHooks[prefix + suffix].set = setPositiveNumber;\n }\n });\n jQuery.fn.extend({\n css: function css(name, value) {\n return access(this, function (elem, name, value) {\n var styles,\n len,\n map = {},\n i = 0;\n\n if (Array.isArray(name)) {\n styles = getStyles(elem);\n len = name.length;\n\n for (; i < len; i++) {\n map[name[i]] = jQuery.css(elem, name[i], false, styles);\n }\n\n return map;\n }\n\n return value !== undefined ? jQuery.style(elem, name, value) : jQuery.css(elem, name);\n }, name, value, arguments.length > 1);\n }\n });\n return jQuery;\n});","define([\"./arr\"], function (arr) {\n \"use strict\";\n\n return arr.slice;\n});","define(function () {\n \"use strict\"; // [[Class]] -> type pairs\n\n return {};\n});","define(function () {\n \"use strict\";\n /**\n * Determines whether an object can have data\n */\n\n return function (owner) {\n // Accepts only:\n // - Node\n // - Node.ELEMENT_NODE\n // - Node.DOCUMENT_NODE\n // - Object\n // - Any\n return owner.nodeType === 1 || owner.nodeType === 9 || !+owner.nodeType;\n };\n});","define([\"../core\", \"../var/documentElement\", \"../selector\" // jQuery.contains\n], function (jQuery, documentElement) {\n \"use strict\";\n\n var isAttached = function isAttached(elem) {\n return jQuery.contains(elem.ownerDocument, elem);\n },\n composed = {\n composed: true\n }; // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n // Check attachment across shadow DOM boundaries when possible (gh-3504)\n // Support: iOS 10.0-10.2 only\n // Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n // leading to errors. We need to check for `getRootNode`.\n\n\n if (documentElement.getRootNode) {\n isAttached = function isAttached(elem) {\n return jQuery.contains(elem.ownerDocument, elem) || elem.getRootNode(composed) === elem.ownerDocument;\n };\n }\n\n return isAttached;\n});","define([\"./document\"], function (document) {\n \"use strict\";\n\n return document.documentElement;\n});","define([\"./core\", \"./core/isAttached\", \"./var/flat\", \"./var/isFunction\", \"./var/push\", \"./var/rcheckableType\", \"./core/access\", \"./manipulation/var/rtagName\", \"./manipulation/var/rscriptType\", \"./manipulation/wrapMap\", \"./manipulation/getAll\", \"./manipulation/setGlobalEval\", \"./manipulation/buildFragment\", \"./manipulation/support\", \"./data/var/dataPriv\", \"./data/var/dataUser\", \"./data/var/acceptData\", \"./core/DOMEval\", \"./core/nodeName\", \"./core/init\", \"./traversing\", \"./selector\", \"./event\"], function (jQuery, isAttached, flat, isFunction, push, rcheckableType, access, rtagName, rscriptType, wrapMap, getAll, setGlobalEval, buildFragment, support, dataPriv, dataUser, acceptData, DOMEval, nodeName) {\n \"use strict\";\n\n var // Support: IE <=10 - 11, Edge 12 - 13 only\n // In IE/Edge using regex groups here causes severe slowdowns.\n // See https://connect.microsoft.com/IE/feedback/details/1736512/\n rnoInnerhtml = /\\s*$/g; // Prefer a tbody over its parent table for containing new rows\n\n function manipulationTarget(elem, content) {\n if (nodeName(elem, \"table\") && nodeName(content.nodeType !== 11 ? content : content.firstChild, \"tr\")) {\n return jQuery(elem).children(\"tbody\")[0] || elem;\n }\n\n return elem;\n } // Replace/restore the type attribute of script elements for safe DOM manipulation\n\n\n function disableScript(elem) {\n elem.type = (elem.getAttribute(\"type\") !== null) + \"/\" + elem.type;\n return elem;\n }\n\n function restoreScript(elem) {\n if ((elem.type || \"\").slice(0, 5) === \"true/\") {\n elem.type = elem.type.slice(5);\n } else {\n elem.removeAttribute(\"type\");\n }\n\n return elem;\n }\n\n function cloneCopyEvent(src, dest) {\n var i, l, type, pdataOld, udataOld, udataCur, events;\n\n if (dest.nodeType !== 1) {\n return;\n } // 1. Copy private data: events, handlers, etc.\n\n\n if (dataPriv.hasData(src)) {\n pdataOld = dataPriv.get(src);\n events = pdataOld.events;\n\n if (events) {\n dataPriv.remove(dest, \"handle events\");\n\n for (type in events) {\n for (i = 0, l = events[type].length; i < l; i++) {\n jQuery.event.add(dest, type, events[type][i]);\n }\n }\n }\n } // 2. Copy user data\n\n\n if (dataUser.hasData(src)) {\n udataOld = dataUser.access(src);\n udataCur = jQuery.extend({}, udataOld);\n dataUser.set(dest, udataCur);\n }\n } // Fix IE bugs, see support tests\n\n\n function fixInput(src, dest) {\n var nodeName = dest.nodeName.toLowerCase(); // Fails to persist the checked state of a cloned checkbox or radio button.\n\n if (nodeName === \"input\" && rcheckableType.test(src.type)) {\n dest.checked = src.checked; // Fails to return the selected option to the default selected state when cloning options\n } else if (nodeName === \"input\" || nodeName === \"textarea\") {\n dest.defaultValue = src.defaultValue;\n }\n }\n\n function domManip(collection, args, callback, ignored) {\n // Flatten any nested arrays\n args = flat(args);\n var fragment,\n first,\n scripts,\n hasScripts,\n node,\n doc,\n i = 0,\n l = collection.length,\n iNoClone = l - 1,\n value = args[0],\n valueIsFunction = isFunction(value); // We can't cloneNode fragments that contain checked, in WebKit\n\n if (valueIsFunction || l > 1 && typeof value === \"string\" && !support.checkClone && rchecked.test(value)) {\n return collection.each(function (index) {\n var self = collection.eq(index);\n\n if (valueIsFunction) {\n args[0] = value.call(this, index, self.html());\n }\n\n domManip(self, args, callback, ignored);\n });\n }\n\n if (l) {\n fragment = buildFragment(args, collection[0].ownerDocument, false, collection, ignored);\n first = fragment.firstChild;\n\n if (fragment.childNodes.length === 1) {\n fragment = first;\n } // Require either new content or an interest in ignored elements to invoke the callback\n\n\n if (first || ignored) {\n scripts = jQuery.map(getAll(fragment, \"script\"), disableScript);\n hasScripts = scripts.length; // Use the original fragment for the last item\n // instead of the first because it can end up\n // being emptied incorrectly in certain situations (#8070).\n\n for (; i < l; i++) {\n node = fragment;\n\n if (i !== iNoClone) {\n node = jQuery.clone(node, true, true); // Keep references to cloned scripts for later restoration\n\n if (hasScripts) {\n // Support: Android <=4.0 only, PhantomJS 1 only\n // push.apply(_, arraylike) throws on ancient WebKit\n jQuery.merge(scripts, getAll(node, \"script\"));\n }\n }\n\n callback.call(collection[i], node, i);\n }\n\n if (hasScripts) {\n doc = scripts[scripts.length - 1].ownerDocument; // Reenable scripts\n\n jQuery.map(scripts, restoreScript); // Evaluate executable scripts on first document insertion\n\n for (i = 0; i < hasScripts; i++) {\n node = scripts[i];\n\n if (rscriptType.test(node.type || \"\") && !dataPriv.access(node, \"globalEval\") && jQuery.contains(doc, node)) {\n if (node.src && (node.type || \"\").toLowerCase() !== \"module\") {\n // Optional AJAX dependency, but won't run scripts if not present\n if (jQuery._evalUrl && !node.noModule) {\n jQuery._evalUrl(node.src, {\n nonce: node.nonce || node.getAttribute(\"nonce\")\n }, doc);\n }\n } else {\n DOMEval(node.textContent.replace(rcleanScript, \"\"), node, doc);\n }\n }\n }\n }\n }\n }\n\n return collection;\n }\n\n function _remove(elem, selector, keepData) {\n var node,\n nodes = selector ? jQuery.filter(selector, elem) : elem,\n i = 0;\n\n for (; (node = nodes[i]) != null; i++) {\n if (!keepData && node.nodeType === 1) {\n jQuery.cleanData(getAll(node));\n }\n\n if (node.parentNode) {\n if (keepData && isAttached(node)) {\n setGlobalEval(getAll(node, \"script\"));\n }\n\n node.parentNode.removeChild(node);\n }\n }\n\n return elem;\n }\n\n jQuery.extend({\n htmlPrefilter: function htmlPrefilter(html) {\n return html;\n },\n clone: function clone(elem, dataAndEvents, deepDataAndEvents) {\n var i,\n l,\n srcElements,\n destElements,\n clone = elem.cloneNode(true),\n inPage = isAttached(elem); // Fix IE cloning issues\n\n if (!support.noCloneChecked && (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem)) {\n // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n destElements = getAll(clone);\n srcElements = getAll(elem);\n\n for (i = 0, l = srcElements.length; i < l; i++) {\n fixInput(srcElements[i], destElements[i]);\n }\n } // Copy the events from the original to the clone\n\n\n if (dataAndEvents) {\n if (deepDataAndEvents) {\n srcElements = srcElements || getAll(elem);\n destElements = destElements || getAll(clone);\n\n for (i = 0, l = srcElements.length; i < l; i++) {\n cloneCopyEvent(srcElements[i], destElements[i]);\n }\n } else {\n cloneCopyEvent(elem, clone);\n }\n } // Preserve script evaluation history\n\n\n destElements = getAll(clone, \"script\");\n\n if (destElements.length > 0) {\n setGlobalEval(destElements, !inPage && getAll(elem, \"script\"));\n } // Return the cloned set\n\n\n return clone;\n },\n cleanData: function cleanData(elems) {\n var data,\n elem,\n type,\n special = jQuery.event.special,\n i = 0;\n\n for (; (elem = elems[i]) !== undefined; i++) {\n if (acceptData(elem)) {\n if (data = elem[dataPriv.expando]) {\n if (data.events) {\n for (type in data.events) {\n if (special[type]) {\n jQuery.event.remove(elem, type); // This is a shortcut to avoid jQuery.event.remove's overhead\n } else {\n jQuery.removeEvent(elem, type, data.handle);\n }\n }\n } // Support: Chrome <=35 - 45+\n // Assign undefined instead of using delete, see Data#remove\n\n\n elem[dataPriv.expando] = undefined;\n }\n\n if (elem[dataUser.expando]) {\n // Support: Chrome <=35 - 45+\n // Assign undefined instead of using delete, see Data#remove\n elem[dataUser.expando] = undefined;\n }\n }\n }\n }\n });\n jQuery.fn.extend({\n detach: function detach(selector) {\n return _remove(this, selector, true);\n },\n remove: function remove(selector) {\n return _remove(this, selector);\n },\n text: function text(value) {\n return access(this, function (value) {\n return value === undefined ? jQuery.text(this) : this.empty().each(function () {\n if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n this.textContent = value;\n }\n });\n }, null, value, arguments.length);\n },\n append: function append() {\n return domManip(this, arguments, function (elem) {\n if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n var target = manipulationTarget(this, elem);\n target.appendChild(elem);\n }\n });\n },\n prepend: function prepend() {\n return domManip(this, arguments, function (elem) {\n if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n var target = manipulationTarget(this, elem);\n target.insertBefore(elem, target.firstChild);\n }\n });\n },\n before: function before() {\n return domManip(this, arguments, function (elem) {\n if (this.parentNode) {\n this.parentNode.insertBefore(elem, this);\n }\n });\n },\n after: function after() {\n return domManip(this, arguments, function (elem) {\n if (this.parentNode) {\n this.parentNode.insertBefore(elem, this.nextSibling);\n }\n });\n },\n empty: function empty() {\n var elem,\n i = 0;\n\n for (; (elem = this[i]) != null; i++) {\n if (elem.nodeType === 1) {\n // Prevent memory leaks\n jQuery.cleanData(getAll(elem, false)); // Remove any remaining nodes\n\n elem.textContent = \"\";\n }\n }\n\n return this;\n },\n clone: function clone(dataAndEvents, deepDataAndEvents) {\n dataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n return this.map(function () {\n return jQuery.clone(this, dataAndEvents, deepDataAndEvents);\n });\n },\n html: function html(value) {\n return access(this, function (value) {\n var elem = this[0] || {},\n i = 0,\n l = this.length;\n\n if (value === undefined && elem.nodeType === 1) {\n return elem.innerHTML;\n } // See if we can take a shortcut and just use innerHTML\n\n\n if (typeof value === \"string\" && !rnoInnerhtml.test(value) && !wrapMap[(rtagName.exec(value) || [\"\", \"\"])[1].toLowerCase()]) {\n value = jQuery.htmlPrefilter(value);\n\n try {\n for (; i < l; i++) {\n elem = this[i] || {}; // Remove element nodes and prevent memory leaks\n\n if (elem.nodeType === 1) {\n jQuery.cleanData(getAll(elem, false));\n elem.innerHTML = value;\n }\n }\n\n elem = 0; // If using innerHTML throws an exception, use the fallback method\n } catch (e) {}\n }\n\n if (elem) {\n this.empty().append(value);\n }\n }, null, value, arguments.length);\n },\n replaceWith: function replaceWith() {\n var ignored = []; // Make the changes, replacing each non-ignored context element with the new content\n\n return domManip(this, arguments, function (elem) {\n var parent = this.parentNode;\n\n if (jQuery.inArray(this, ignored) < 0) {\n jQuery.cleanData(getAll(this));\n\n if (parent) {\n parent.replaceChild(elem, this);\n }\n } // Force callback invocation\n\n }, ignored);\n }\n });\n jQuery.each({\n appendTo: \"append\",\n prependTo: \"prepend\",\n insertBefore: \"before\",\n insertAfter: \"after\",\n replaceAll: \"replaceWith\"\n }, function (name, original) {\n jQuery.fn[name] = function (selector) {\n var elems,\n ret = [],\n insert = jQuery(selector),\n last = insert.length - 1,\n i = 0;\n\n for (; i <= last; i++) {\n elems = i === last ? this : this.clone(true);\n jQuery(insert[i])[original](elems); // Support: Android <=4.0 only, PhantomJS 1 only\n // .get() because push.apply(_, arraylike) throws on ancient WebKit\n\n push.apply(ret, elems.get());\n }\n\n return this.pushStack(ret);\n };\n });\n return jQuery;\n});","define([\"./arr\"], function (arr) {\n \"use strict\";\n\n return arr.indexOf;\n});","define([\"./class2type\"], function (class2type) {\n \"use strict\";\n\n return class2type.hasOwnProperty;\n});","define([\"./core\", \"./core/toType\", \"./var/isFunction\", \"./var/rnothtmlwhite\"], function (jQuery, toType, isFunction, rnothtmlwhite) {\n \"use strict\"; // Convert String-formatted options into Object-formatted ones\n\n function createOptions(options) {\n var object = {};\n jQuery.each(options.match(rnothtmlwhite) || [], function (_, flag) {\n object[flag] = true;\n });\n return object;\n }\n /*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\n\n\n jQuery.Callbacks = function (options) {\n // Convert options from String-formatted to Object-formatted if needed\n // (we check in cache first)\n options = typeof options === \"string\" ? createOptions(options) : jQuery.extend({}, options);\n\n var // Flag to know if list is currently firing\n firing,\n // Last fire value for non-forgettable lists\n memory,\n // Flag to know if list was already fired\n _fired,\n // Flag to prevent firing\n _locked,\n // Actual callback list\n list = [],\n // Queue of execution data for repeatable lists\n queue = [],\n // Index of currently firing callback (modified by add/remove as needed)\n firingIndex = -1,\n // Fire callbacks\n fire = function fire() {\n // Enforce single-firing\n _locked = _locked || options.once; // Execute callbacks for all pending executions,\n // respecting firingIndex overrides and runtime changes\n\n _fired = firing = true;\n\n for (; queue.length; firingIndex = -1) {\n memory = queue.shift();\n\n while (++firingIndex < list.length) {\n // Run callback and check for early termination\n if (list[firingIndex].apply(memory[0], memory[1]) === false && options.stopOnFalse) {\n // Jump to end and forget the data so .add doesn't re-fire\n firingIndex = list.length;\n memory = false;\n }\n }\n } // Forget the data if we're done with it\n\n\n if (!options.memory) {\n memory = false;\n }\n\n firing = false; // Clean up if we're done firing for good\n\n if (_locked) {\n // Keep an empty list if we have data for future add calls\n if (memory) {\n list = []; // Otherwise, this object is spent\n } else {\n list = \"\";\n }\n }\n },\n // Actual Callbacks object\n self = {\n // Add a callback or a collection of callbacks to the list\n add: function add() {\n if (list) {\n // If we have memory from a past run, we should fire after adding\n if (memory && !firing) {\n firingIndex = list.length - 1;\n queue.push(memory);\n }\n\n (function add(args) {\n jQuery.each(args, function (_, arg) {\n if (isFunction(arg)) {\n if (!options.unique || !self.has(arg)) {\n list.push(arg);\n }\n } else if (arg && arg.length && toType(arg) !== \"string\") {\n // Inspect recursively\n add(arg);\n }\n });\n })(arguments);\n\n if (memory && !firing) {\n fire();\n }\n }\n\n return this;\n },\n // Remove a callback from the list\n remove: function remove() {\n jQuery.each(arguments, function (_, arg) {\n var index;\n\n while ((index = jQuery.inArray(arg, list, index)) > -1) {\n list.splice(index, 1); // Handle firing indexes\n\n if (index <= firingIndex) {\n firingIndex--;\n }\n }\n });\n return this;\n },\n // Check if a given callback is in the list.\n // If no argument is given, return whether or not list has callbacks attached.\n has: function has(fn) {\n return fn ? jQuery.inArray(fn, list) > -1 : list.length > 0;\n },\n // Remove all callbacks from the list\n empty: function empty() {\n if (list) {\n list = [];\n }\n\n return this;\n },\n // Disable .fire and .add\n // Abort any current/pending executions\n // Clear all callbacks and values\n disable: function disable() {\n _locked = queue = [];\n list = memory = \"\";\n return this;\n },\n disabled: function disabled() {\n return !list;\n },\n // Disable .fire\n // Also disable .add unless we have memory (since it would have no effect)\n // Abort any pending executions\n lock: function lock() {\n _locked = queue = [];\n\n if (!memory && !firing) {\n list = memory = \"\";\n }\n\n return this;\n },\n locked: function locked() {\n return !!_locked;\n },\n // Call all callbacks with the given context and arguments\n fireWith: function fireWith(context, args) {\n if (!_locked) {\n args = args || [];\n args = [context, args.slice ? args.slice() : args];\n queue.push(args);\n\n if (!firing) {\n fire();\n }\n }\n\n return this;\n },\n // Call all the callbacks with the given arguments\n fire: function fire() {\n self.fireWith(this, arguments);\n return this;\n },\n // To know if the callbacks have already been called at least once\n fired: function fired() {\n return !!_fired;\n }\n };\n\n return self;\n };\n\n return jQuery;\n});","define([\"./core\", \"./data/var/dataPriv\", \"./deferred\", \"./callbacks\"], function (jQuery, dataPriv) {\n \"use strict\";\n\n jQuery.extend({\n queue: function queue(elem, type, data) {\n var queue;\n\n if (elem) {\n type = (type || \"fx\") + \"queue\";\n queue = dataPriv.get(elem, type); // Speed up dequeue by getting out quickly if this is just a lookup\n\n if (data) {\n if (!queue || Array.isArray(data)) {\n queue = dataPriv.access(elem, type, jQuery.makeArray(data));\n } else {\n queue.push(data);\n }\n }\n\n return queue || [];\n }\n },\n dequeue: function dequeue(elem, type) {\n type = type || \"fx\";\n\n var queue = jQuery.queue(elem, type),\n startLength = queue.length,\n fn = queue.shift(),\n hooks = jQuery._queueHooks(elem, type),\n next = function next() {\n jQuery.dequeue(elem, type);\n }; // If the fx queue is dequeued, always remove the progress sentinel\n\n\n if (fn === \"inprogress\") {\n fn = queue.shift();\n startLength--;\n }\n\n if (fn) {\n // Add a progress sentinel to prevent the fx queue from being\n // automatically dequeued\n if (type === \"fx\") {\n queue.unshift(\"inprogress\");\n } // Clear up the last queue stop function\n\n\n delete hooks.stop;\n fn.call(elem, next, hooks);\n }\n\n if (!startLength && hooks) {\n hooks.empty.fire();\n }\n },\n // Not public - generate a queueHooks object, or return the current one\n _queueHooks: function _queueHooks(elem, type) {\n var key = type + \"queueHooks\";\n return dataPriv.get(elem, key) || dataPriv.access(elem, key, {\n empty: jQuery.Callbacks(\"once memory\").add(function () {\n dataPriv.remove(elem, [type + \"queue\", key]);\n })\n });\n }\n });\n jQuery.fn.extend({\n queue: function queue(type, data) {\n var setter = 2;\n\n if (typeof type !== \"string\") {\n data = type;\n type = \"fx\";\n setter--;\n }\n\n if (arguments.length < setter) {\n return jQuery.queue(this[0], type);\n }\n\n return data === undefined ? this : this.each(function () {\n var queue = jQuery.queue(this, type, data); // Ensure a hooks for this queue\n\n jQuery._queueHooks(this, type);\n\n if (type === \"fx\" && queue[0] !== \"inprogress\") {\n jQuery.dequeue(this, type);\n }\n });\n },\n dequeue: function dequeue(type) {\n return this.each(function () {\n jQuery.dequeue(this, type);\n });\n },\n clearQueue: function clearQueue(type) {\n return this.queue(type || \"fx\", []);\n },\n // Get a promise resolved when queues of a certain type\n // are emptied (fx is the type by default)\n promise: function promise(type, obj) {\n var tmp,\n count = 1,\n defer = jQuery.Deferred(),\n elements = this,\n i = this.length,\n resolve = function resolve() {\n if (! --count) {\n defer.resolveWith(elements, [elements]);\n }\n };\n\n if (typeof type !== \"string\") {\n obj = type;\n type = undefined;\n }\n\n type = type || \"fx\";\n\n while (i--) {\n tmp = dataPriv.get(elements[i], type + \"queueHooks\");\n\n if (tmp && tmp.empty) {\n count++;\n tmp.empty.add(resolve);\n }\n }\n\n resolve();\n return defer.promise(obj);\n }\n });\n return jQuery;\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\ndefine([\"./core\", \"./core/camelCase\", \"./var/document\", \"./var/isFunction\", \"./var/rcssNum\", \"./var/rnothtmlwhite\", \"./css/var/cssExpand\", \"./css/var/isHiddenWithinTree\", \"./css/adjustCSS\", \"./data/var/dataPriv\", \"./css/showHide\", \"./core/init\", \"./queue\", \"./deferred\", \"./traversing\", \"./manipulation\", \"./css\", \"./effects/Tween\"], function (jQuery, camelCase, document, isFunction, rcssNum, rnothtmlwhite, cssExpand, isHiddenWithinTree, adjustCSS, dataPriv, showHide) {\n \"use strict\";\n\n var fxNow,\n inProgress,\n rfxtypes = /^(?:toggle|show|hide)$/,\n rrun = /queueHooks$/;\n\n function schedule() {\n if (inProgress) {\n if (document.hidden === false && window.requestAnimationFrame) {\n window.requestAnimationFrame(schedule);\n } else {\n window.setTimeout(schedule, jQuery.fx.interval);\n }\n\n jQuery.fx.tick();\n }\n } // Animations created synchronously will run synchronously\n\n\n function createFxNow() {\n window.setTimeout(function () {\n fxNow = undefined;\n });\n return fxNow = Date.now();\n } // Generate parameters to create a standard animation\n\n\n function genFx(type, includeWidth) {\n var which,\n i = 0,\n attrs = {\n height: type\n }; // If we include width, step value is 1 to do all cssExpand values,\n // otherwise step value is 2 to skip over Left and Right\n\n includeWidth = includeWidth ? 1 : 0;\n\n for (; i < 4; i += 2 - includeWidth) {\n which = cssExpand[i];\n attrs[\"margin\" + which] = attrs[\"padding\" + which] = type;\n }\n\n if (includeWidth) {\n attrs.opacity = attrs.width = type;\n }\n\n return attrs;\n }\n\n function createTween(value, prop, animation) {\n var tween,\n collection = (Animation.tweeners[prop] || []).concat(Animation.tweeners[\"*\"]),\n index = 0,\n length = collection.length;\n\n for (; index < length; index++) {\n if (tween = collection[index].call(animation, prop, value)) {\n // We're done with this property\n return tween;\n }\n }\n }\n\n function defaultPrefilter(elem, props, opts) {\n var prop,\n value,\n toggle,\n hooks,\n oldfire,\n propTween,\n restoreDisplay,\n display,\n isBox = \"width\" in props || \"height\" in props,\n anim = this,\n orig = {},\n style = elem.style,\n hidden = elem.nodeType && isHiddenWithinTree(elem),\n dataShow = dataPriv.get(elem, \"fxshow\"); // Queue-skipping animations hijack the fx hooks\n\n if (!opts.queue) {\n hooks = jQuery._queueHooks(elem, \"fx\");\n\n if (hooks.unqueued == null) {\n hooks.unqueued = 0;\n oldfire = hooks.empty.fire;\n\n hooks.empty.fire = function () {\n if (!hooks.unqueued) {\n oldfire();\n }\n };\n }\n\n hooks.unqueued++;\n anim.always(function () {\n // Ensure the complete handler is called before this completes\n anim.always(function () {\n hooks.unqueued--;\n\n if (!jQuery.queue(elem, \"fx\").length) {\n hooks.empty.fire();\n }\n });\n });\n } // Detect show/hide animations\n\n\n for (prop in props) {\n value = props[prop];\n\n if (rfxtypes.test(value)) {\n delete props[prop];\n toggle = toggle || value === \"toggle\";\n\n if (value === (hidden ? \"hide\" : \"show\")) {\n // Pretend to be hidden if this is a \"show\" and\n // there is still data from a stopped show/hide\n if (value === \"show\" && dataShow && dataShow[prop] !== undefined) {\n hidden = true; // Ignore all other no-op show/hide data\n } else {\n continue;\n }\n }\n\n orig[prop] = dataShow && dataShow[prop] || jQuery.style(elem, prop);\n }\n } // Bail out if this is a no-op like .hide().hide()\n\n\n propTween = !jQuery.isEmptyObject(props);\n\n if (!propTween && jQuery.isEmptyObject(orig)) {\n return;\n } // Restrict \"overflow\" and \"display\" styles during box animations\n\n\n if (isBox && elem.nodeType === 1) {\n // Support: IE <=9 - 11, Edge 12 - 15\n // Record all 3 overflow attributes because IE does not infer the shorthand\n // from identically-valued overflowX and overflowY and Edge just mirrors\n // the overflowX value there.\n opts.overflow = [style.overflow, style.overflowX, style.overflowY]; // Identify a display type, preferring old show/hide data over the CSS cascade\n\n restoreDisplay = dataShow && dataShow.display;\n\n if (restoreDisplay == null) {\n restoreDisplay = dataPriv.get(elem, \"display\");\n }\n\n display = jQuery.css(elem, \"display\");\n\n if (display === \"none\") {\n if (restoreDisplay) {\n display = restoreDisplay;\n } else {\n // Get nonempty value(s) by temporarily forcing visibility\n showHide([elem], true);\n restoreDisplay = elem.style.display || restoreDisplay;\n display = jQuery.css(elem, \"display\");\n showHide([elem]);\n }\n } // Animate inline elements as inline-block\n\n\n if (display === \"inline\" || display === \"inline-block\" && restoreDisplay != null) {\n if (jQuery.css(elem, \"float\") === \"none\") {\n // Restore the original display value at the end of pure show/hide animations\n if (!propTween) {\n anim.done(function () {\n style.display = restoreDisplay;\n });\n\n if (restoreDisplay == null) {\n display = style.display;\n restoreDisplay = display === \"none\" ? \"\" : display;\n }\n }\n\n style.display = \"inline-block\";\n }\n }\n }\n\n if (opts.overflow) {\n style.overflow = \"hidden\";\n anim.always(function () {\n style.overflow = opts.overflow[0];\n style.overflowX = opts.overflow[1];\n style.overflowY = opts.overflow[2];\n });\n } // Implement show/hide animations\n\n\n propTween = false;\n\n for (prop in orig) {\n // General show/hide setup for this element animation\n if (!propTween) {\n if (dataShow) {\n if (\"hidden\" in dataShow) {\n hidden = dataShow.hidden;\n }\n } else {\n dataShow = dataPriv.access(elem, \"fxshow\", {\n display: restoreDisplay\n });\n } // Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\n\n if (toggle) {\n dataShow.hidden = !hidden;\n } // Show elements before animating them\n\n\n if (hidden) {\n showHide([elem], true);\n }\n /* eslint-disable no-loop-func */\n\n\n anim.done(function () {\n /* eslint-enable no-loop-func */\n // The final step of a \"hide\" animation is actually hiding the element\n if (!hidden) {\n showHide([elem]);\n }\n\n dataPriv.remove(elem, \"fxshow\");\n\n for (prop in orig) {\n jQuery.style(elem, prop, orig[prop]);\n }\n });\n } // Per-property setup\n\n\n propTween = createTween(hidden ? dataShow[prop] : 0, prop, anim);\n\n if (!(prop in dataShow)) {\n dataShow[prop] = propTween.start;\n\n if (hidden) {\n propTween.end = propTween.start;\n propTween.start = 0;\n }\n }\n }\n }\n\n function propFilter(props, specialEasing) {\n var index, name, easing, value, hooks; // camelCase, specialEasing and expand cssHook pass\n\n for (index in props) {\n name = camelCase(index);\n easing = specialEasing[name];\n value = props[index];\n\n if (Array.isArray(value)) {\n easing = value[1];\n value = props[index] = value[0];\n }\n\n if (index !== name) {\n props[name] = value;\n delete props[index];\n }\n\n hooks = jQuery.cssHooks[name];\n\n if (hooks && \"expand\" in hooks) {\n value = hooks.expand(value);\n delete props[name]; // Not quite $.extend, this won't overwrite existing keys.\n // Reusing 'index' because we have the correct \"name\"\n\n for (index in value) {\n if (!(index in props)) {\n props[index] = value[index];\n specialEasing[index] = easing;\n }\n }\n } else {\n specialEasing[name] = easing;\n }\n }\n }\n\n function Animation(elem, properties, options) {\n var result,\n stopped,\n index = 0,\n length = Animation.prefilters.length,\n deferred = jQuery.Deferred().always(function () {\n // Don't match elem in the :animated selector\n delete tick.elem;\n }),\n tick = function tick() {\n if (stopped) {\n return false;\n }\n\n var currentTime = fxNow || createFxNow(),\n remaining = Math.max(0, animation.startTime + animation.duration - currentTime),\n // Support: Android 2.3 only\n // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n temp = remaining / animation.duration || 0,\n percent = 1 - temp,\n index = 0,\n length = animation.tweens.length;\n\n for (; index < length; index++) {\n animation.tweens[index].run(percent);\n }\n\n deferred.notifyWith(elem, [animation, percent, remaining]); // If there's more to do, yield\n\n if (percent < 1 && length) {\n return remaining;\n } // If this was an empty animation, synthesize a final progress notification\n\n\n if (!length) {\n deferred.notifyWith(elem, [animation, 1, 0]);\n } // Resolve the animation and report its conclusion\n\n\n deferred.resolveWith(elem, [animation]);\n return false;\n },\n animation = deferred.promise({\n elem: elem,\n props: jQuery.extend({}, properties),\n opts: jQuery.extend(true, {\n specialEasing: {},\n easing: jQuery.easing._default\n }, options),\n originalProperties: properties,\n originalOptions: options,\n startTime: fxNow || createFxNow(),\n duration: options.duration,\n tweens: [],\n createTween: function createTween(prop, end) {\n var tween = jQuery.Tween(elem, animation.opts, prop, end, animation.opts.specialEasing[prop] || animation.opts.easing);\n animation.tweens.push(tween);\n return tween;\n },\n stop: function stop(gotoEnd) {\n var index = 0,\n // If we are going to the end, we want to run all the tweens\n // otherwise we skip this part\n length = gotoEnd ? animation.tweens.length : 0;\n\n if (stopped) {\n return this;\n }\n\n stopped = true;\n\n for (; index < length; index++) {\n animation.tweens[index].run(1);\n } // Resolve when we played the last frame; otherwise, reject\n\n\n if (gotoEnd) {\n deferred.notifyWith(elem, [animation, 1, 0]);\n deferred.resolveWith(elem, [animation, gotoEnd]);\n } else {\n deferred.rejectWith(elem, [animation, gotoEnd]);\n }\n\n return this;\n }\n }),\n props = animation.props;\n\n propFilter(props, animation.opts.specialEasing);\n\n for (; index < length; index++) {\n result = Animation.prefilters[index].call(animation, elem, props, animation.opts);\n\n if (result) {\n if (isFunction(result.stop)) {\n jQuery._queueHooks(animation.elem, animation.opts.queue).stop = result.stop.bind(result);\n }\n\n return result;\n }\n }\n\n jQuery.map(props, createTween, animation);\n\n if (isFunction(animation.opts.start)) {\n animation.opts.start.call(elem, animation);\n } // Attach callbacks from options\n\n\n animation.progress(animation.opts.progress).done(animation.opts.done, animation.opts.complete).fail(animation.opts.fail).always(animation.opts.always);\n jQuery.fx.timer(jQuery.extend(tick, {\n elem: elem,\n anim: animation,\n queue: animation.opts.queue\n }));\n return animation;\n }\n\n jQuery.Animation = jQuery.extend(Animation, {\n tweeners: {\n \"*\": [function (prop, value) {\n var tween = this.createTween(prop, value);\n adjustCSS(tween.elem, prop, rcssNum.exec(value), tween);\n return tween;\n }]\n },\n tweener: function tweener(props, callback) {\n if (isFunction(props)) {\n callback = props;\n props = [\"*\"];\n } else {\n props = props.match(rnothtmlwhite);\n }\n\n var prop,\n index = 0,\n length = props.length;\n\n for (; index < length; index++) {\n prop = props[index];\n Animation.tweeners[prop] = Animation.tweeners[prop] || [];\n Animation.tweeners[prop].unshift(callback);\n }\n },\n prefilters: [defaultPrefilter],\n prefilter: function prefilter(callback, prepend) {\n if (prepend) {\n Animation.prefilters.unshift(callback);\n } else {\n Animation.prefilters.push(callback);\n }\n }\n });\n\n jQuery.speed = function (speed, easing, fn) {\n var opt = speed && _typeof(speed) === \"object\" ? jQuery.extend({}, speed) : {\n complete: fn || !fn && easing || isFunction(speed) && speed,\n duration: speed,\n easing: fn && easing || easing && !isFunction(easing) && easing\n }; // Go to the end state if fx are off\n\n if (jQuery.fx.off) {\n opt.duration = 0;\n } else {\n if (typeof opt.duration !== \"number\") {\n if (opt.duration in jQuery.fx.speeds) {\n opt.duration = jQuery.fx.speeds[opt.duration];\n } else {\n opt.duration = jQuery.fx.speeds._default;\n }\n }\n } // Normalize opt.queue - true/undefined/null -> \"fx\"\n\n\n if (opt.queue == null || opt.queue === true) {\n opt.queue = \"fx\";\n } // Queueing\n\n\n opt.old = opt.complete;\n\n opt.complete = function () {\n if (isFunction(opt.old)) {\n opt.old.call(this);\n }\n\n if (opt.queue) {\n jQuery.dequeue(this, opt.queue);\n }\n };\n\n return opt;\n };\n\n jQuery.fn.extend({\n fadeTo: function fadeTo(speed, to, easing, callback) {\n // Show any hidden elements after setting opacity to 0\n return this.filter(isHiddenWithinTree).css(\"opacity\", 0).show() // Animate to the value specified\n .end().animate({\n opacity: to\n }, speed, easing, callback);\n },\n animate: function animate(prop, speed, easing, callback) {\n var empty = jQuery.isEmptyObject(prop),\n optall = jQuery.speed(speed, easing, callback),\n doAnimation = function doAnimation() {\n // Operate on a copy of prop so per-property easing won't be lost\n var anim = Animation(this, jQuery.extend({}, prop), optall); // Empty animations, or finishing resolves immediately\n\n if (empty || dataPriv.get(this, \"finish\")) {\n anim.stop(true);\n }\n };\n\n doAnimation.finish = doAnimation;\n return empty || optall.queue === false ? this.each(doAnimation) : this.queue(optall.queue, doAnimation);\n },\n stop: function stop(type, clearQueue, gotoEnd) {\n var stopQueue = function stopQueue(hooks) {\n var stop = hooks.stop;\n delete hooks.stop;\n stop(gotoEnd);\n };\n\n if (typeof type !== \"string\") {\n gotoEnd = clearQueue;\n clearQueue = type;\n type = undefined;\n }\n\n if (clearQueue) {\n this.queue(type || \"fx\", []);\n }\n\n return this.each(function () {\n var dequeue = true,\n index = type != null && type + \"queueHooks\",\n timers = jQuery.timers,\n data = dataPriv.get(this);\n\n if (index) {\n if (data[index] && data[index].stop) {\n stopQueue(data[index]);\n }\n } else {\n for (index in data) {\n if (data[index] && data[index].stop && rrun.test(index)) {\n stopQueue(data[index]);\n }\n }\n }\n\n for (index = timers.length; index--;) {\n if (timers[index].elem === this && (type == null || timers[index].queue === type)) {\n timers[index].anim.stop(gotoEnd);\n dequeue = false;\n timers.splice(index, 1);\n }\n } // Start the next in the queue if the last step wasn't forced.\n // Timers currently will call their complete callbacks, which\n // will dequeue but only if they were gotoEnd.\n\n\n if (dequeue || !gotoEnd) {\n jQuery.dequeue(this, type);\n }\n });\n },\n finish: function finish(type) {\n if (type !== false) {\n type = type || \"fx\";\n }\n\n return this.each(function () {\n var index,\n data = dataPriv.get(this),\n queue = data[type + \"queue\"],\n hooks = data[type + \"queueHooks\"],\n timers = jQuery.timers,\n length = queue ? queue.length : 0; // Enable finishing flag on private data\n\n data.finish = true; // Empty the queue first\n\n jQuery.queue(this, type, []);\n\n if (hooks && hooks.stop) {\n hooks.stop.call(this, true);\n } // Look for any active animations, and finish them\n\n\n for (index = timers.length; index--;) {\n if (timers[index].elem === this && timers[index].queue === type) {\n timers[index].anim.stop(true);\n timers.splice(index, 1);\n }\n } // Look for any animations in the old queue and finish them\n\n\n for (index = 0; index < length; index++) {\n if (queue[index] && queue[index].finish) {\n queue[index].finish.call(this);\n }\n } // Turn off finishing flag\n\n\n delete data.finish;\n });\n }\n });\n jQuery.each([\"toggle\", \"show\", \"hide\"], function (_i, name) {\n var cssFn = jQuery.fn[name];\n\n jQuery.fn[name] = function (speed, easing, callback) {\n return speed == null || typeof speed === \"boolean\" ? cssFn.apply(this, arguments) : this.animate(genFx(name, true), speed, easing, callback);\n };\n }); // Generate shortcuts for custom animations\n\n jQuery.each({\n slideDown: genFx(\"show\"),\n slideUp: genFx(\"hide\"),\n slideToggle: genFx(\"toggle\"),\n fadeIn: {\n opacity: \"show\"\n },\n fadeOut: {\n opacity: \"hide\"\n },\n fadeToggle: {\n opacity: \"toggle\"\n }\n }, function (name, props) {\n jQuery.fn[name] = function (speed, easing, callback) {\n return this.animate(props, speed, easing, callback);\n };\n });\n jQuery.timers = [];\n\n jQuery.fx.tick = function () {\n var timer,\n i = 0,\n timers = jQuery.timers;\n fxNow = Date.now();\n\n for (; i < timers.length; i++) {\n timer = timers[i]; // Run the timer and safely remove it when done (allowing for external removal)\n\n if (!timer() && timers[i] === timer) {\n timers.splice(i--, 1);\n }\n }\n\n if (!timers.length) {\n jQuery.fx.stop();\n }\n\n fxNow = undefined;\n };\n\n jQuery.fx.timer = function (timer) {\n jQuery.timers.push(timer);\n jQuery.fx.start();\n };\n\n jQuery.fx.interval = 13;\n\n jQuery.fx.start = function () {\n if (inProgress) {\n return;\n }\n\n inProgress = true;\n schedule();\n };\n\n jQuery.fx.stop = function () {\n inProgress = null;\n };\n\n jQuery.fx.speeds = {\n slow: 600,\n fast: 200,\n // Default speed\n _default: 400\n };\n return jQuery;\n});","define([\"../var/pnum\"], function (pnum) {\n \"use strict\";\n\n return new RegExp(\"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\");\n});","define(function () {\n \"use strict\";\n\n return [\"Top\", \"Right\", \"Bottom\", \"Left\"];\n});","define(function () {\n \"use strict\";\n\n return /^(?:checkbox|radio)$/i;\n});","define([\"../../var/pnum\"], function (pnum) {\n \"use strict\";\n\n return new RegExp(\"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\");\n});","define([\"../core\", \"../var/document\", \"../var/documentElement\", \"../var/support\"], function (jQuery, document, documentElement, support) {\n \"use strict\";\n\n (function () {\n // Executing both pixelPosition & boxSizingReliable tests require only one layout\n // so they're executed at the same time to save the second computation.\n function computeStyleTests() {\n // This is a singleton, we need to execute it only once\n if (!div) {\n return;\n }\n\n container.style.cssText = \"position:absolute;left:-11111px;width:60px;\" + \"margin-top:1px;padding:0;border:0\";\n div.style.cssText = \"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" + \"margin:auto;border:1px;padding:1px;\" + \"width:60%;top:1%\";\n documentElement.appendChild(container).appendChild(div);\n var divStyle = window.getComputedStyle(div);\n pixelPositionVal = divStyle.top !== \"1%\"; // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\n reliableMarginLeftVal = roundPixelMeasures(divStyle.marginLeft) === 12; // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n // Some styles come back with percentage values, even though they shouldn't\n\n div.style.right = \"60%\";\n pixelBoxStylesVal = roundPixelMeasures(divStyle.right) === 36; // Support: IE 9 - 11 only\n // Detect misreporting of content dimensions for box-sizing:border-box elements\n\n boxSizingReliableVal = roundPixelMeasures(divStyle.width) === 36; // Support: IE 9 only\n // Detect overflow:scroll screwiness (gh-3699)\n // Support: Chrome <=64\n // Don't get tricked when zoom affects offsetWidth (gh-4029)\n\n div.style.position = \"absolute\";\n scrollboxSizeVal = roundPixelMeasures(div.offsetWidth / 3) === 12;\n documentElement.removeChild(container); // Nullify the div so it wouldn't be stored in the memory and\n // it will also be a sign that checks already performed\n\n div = null;\n }\n\n function roundPixelMeasures(measure) {\n return Math.round(parseFloat(measure));\n }\n\n var pixelPositionVal,\n boxSizingReliableVal,\n scrollboxSizeVal,\n pixelBoxStylesVal,\n reliableTrDimensionsVal,\n reliableMarginLeftVal,\n container = document.createElement(\"div\"),\n div = document.createElement(\"div\"); // Finish early in limited (non-browser) environments\n\n if (!div.style) {\n return;\n } // Support: IE <=9 - 11 only\n // Style of cloned element affects source element cloned (#8908)\n\n\n div.style.backgroundClip = \"content-box\";\n div.cloneNode(true).style.backgroundClip = \"\";\n support.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n jQuery.extend(support, {\n boxSizingReliable: function boxSizingReliable() {\n computeStyleTests();\n return boxSizingReliableVal;\n },\n pixelBoxStyles: function pixelBoxStyles() {\n computeStyleTests();\n return pixelBoxStylesVal;\n },\n pixelPosition: function pixelPosition() {\n computeStyleTests();\n return pixelPositionVal;\n },\n reliableMarginLeft: function reliableMarginLeft() {\n computeStyleTests();\n return reliableMarginLeftVal;\n },\n scrollboxSize: function scrollboxSize() {\n computeStyleTests();\n return scrollboxSizeVal;\n },\n // Support: IE 9 - 11+, Edge 15 - 18+\n // IE/Edge misreport `getComputedStyle` of table rows with width/height\n // set in CSS while `offset*` properties report correct values.\n // Behavior in IE 9 is more subtle than in newer versions & it passes\n // some versions of this test; make sure not to make it pass there!\n //\n // Support: Firefox 70+\n // Only Firefox includes border widths\n // in computed dimensions. (gh-4529)\n reliableTrDimensions: function reliableTrDimensions() {\n var table, tr, trChild, trStyle;\n\n if (reliableTrDimensionsVal == null) {\n table = document.createElement(\"table\");\n tr = document.createElement(\"tr\");\n trChild = document.createElement(\"div\");\n table.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n tr.style.cssText = \"border:1px solid\"; // Support: Chrome 86+\n // Height set through cssText does not get applied.\n // Computed height then comes back as 0.\n\n tr.style.height = \"1px\";\n trChild.style.height = \"9px\"; // Support: Android 8 Chrome 86+\n // In our bodyBackground.html iframe,\n // display for all div elements is set to \"inline\",\n // which causes a problem only in Android 8 Chrome 86.\n // Ensuring the div is display: block\n // gets around this issue.\n\n trChild.style.display = \"block\";\n documentElement.appendChild(table).appendChild(tr).appendChild(trChild);\n trStyle = window.getComputedStyle(tr);\n reliableTrDimensionsVal = parseInt(trStyle.height, 10) + parseInt(trStyle.borderTopWidth, 10) + parseInt(trStyle.borderBottomWidth, 10) === tr.offsetHeight;\n documentElement.removeChild(table);\n }\n\n return reliableTrDimensionsVal;\n }\n });\n })();\n\n return support;\n});","define([\"../var/document\", \"../var/support\"], function (document, support) {\n \"use strict\";\n\n (function () {\n var input = document.createElement(\"input\"),\n select = document.createElement(\"select\"),\n opt = select.appendChild(document.createElement(\"option\"));\n input.type = \"checkbox\"; // Support: Android <=4.3 only\n // Default value for a checkbox should be \"on\"\n\n support.checkOn = input.value !== \"\"; // Support: IE <=11 only\n // Must access selectedIndex to make default options select\n\n support.optSelected = opt.selected; // Support: IE <=11 only\n // An input loses its value after becoming a radio\n\n input = document.createElement(\"input\");\n input.value = \"t\";\n input.type = \"radio\";\n support.radioValue = input.value === \"t\";\n })();\n\n return support;\n});","define([\"../var/rnothtmlwhite\"], function (rnothtmlwhite) {\n \"use strict\"; // Strip and collapse whitespace according to HTML spec\n // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\n function stripAndCollapse(value) {\n var tokens = value.match(rnothtmlwhite) || [];\n return tokens.join(\" \");\n }\n\n return stripAndCollapse;\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\ndefine([\"../core\", \"../var/document\", \"../data/var/dataPriv\", \"../data/var/acceptData\", \"../var/hasOwn\", \"../var/isFunction\", \"../var/isWindow\", \"../event\"], function (jQuery, document, dataPriv, acceptData, hasOwn, isFunction, isWindow) {\n \"use strict\";\n\n var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n stopPropagationCallback = function stopPropagationCallback(e) {\n e.stopPropagation();\n };\n\n jQuery.extend(jQuery.event, {\n trigger: function trigger(event, data, elem, onlyHandlers) {\n var i,\n cur,\n tmp,\n bubbleType,\n ontype,\n handle,\n special,\n lastElement,\n eventPath = [elem || document],\n type = hasOwn.call(event, \"type\") ? event.type : event,\n namespaces = hasOwn.call(event, \"namespace\") ? event.namespace.split(\".\") : [];\n cur = lastElement = tmp = elem = elem || document; // Don't do events on text and comment nodes\n\n if (elem.nodeType === 3 || elem.nodeType === 8) {\n return;\n } // focus/blur morphs to focusin/out; ensure we're not firing them right now\n\n\n if (rfocusMorph.test(type + jQuery.event.triggered)) {\n return;\n }\n\n if (type.indexOf(\".\") > -1) {\n // Namespaced trigger; create a regexp to match event type in handle()\n namespaces = type.split(\".\");\n type = namespaces.shift();\n namespaces.sort();\n }\n\n ontype = type.indexOf(\":\") < 0 && \"on\" + type; // Caller can pass in a jQuery.Event object, Object, or just an event type string\n\n event = event[jQuery.expando] ? event : new jQuery.Event(type, _typeof(event) === \"object\" && event); // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\n event.isTrigger = onlyHandlers ? 2 : 3;\n event.namespace = namespaces.join(\".\");\n event.rnamespace = event.namespace ? new RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\") : null; // Clean up the event in case it is being reused\n\n event.result = undefined;\n\n if (!event.target) {\n event.target = elem;\n } // Clone any incoming data and prepend the event, creating the handler arg list\n\n\n data = data == null ? [event] : jQuery.makeArray(data, [event]); // Allow special events to draw outside the lines\n\n special = jQuery.event.special[type] || {};\n\n if (!onlyHandlers && special.trigger && special.trigger.apply(elem, data) === false) {\n return;\n } // Determine event propagation path in advance, per W3C events spec (#9951)\n // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\n\n if (!onlyHandlers && !special.noBubble && !isWindow(elem)) {\n bubbleType = special.delegateType || type;\n\n if (!rfocusMorph.test(bubbleType + type)) {\n cur = cur.parentNode;\n }\n\n for (; cur; cur = cur.parentNode) {\n eventPath.push(cur);\n tmp = cur;\n } // Only add window if we got to document (e.g., not plain obj or detached DOM)\n\n\n if (tmp === (elem.ownerDocument || document)) {\n eventPath.push(tmp.defaultView || tmp.parentWindow || window);\n }\n } // Fire handlers on the event path\n\n\n i = 0;\n\n while ((cur = eventPath[i++]) && !event.isPropagationStopped()) {\n lastElement = cur;\n event.type = i > 1 ? bubbleType : special.bindType || type; // jQuery handler\n\n handle = (dataPriv.get(cur, \"events\") || Object.create(null))[event.type] && dataPriv.get(cur, \"handle\");\n\n if (handle) {\n handle.apply(cur, data);\n } // Native handler\n\n\n handle = ontype && cur[ontype];\n\n if (handle && handle.apply && acceptData(cur)) {\n event.result = handle.apply(cur, data);\n\n if (event.result === false) {\n event.preventDefault();\n }\n }\n }\n\n event.type = type; // If nobody prevented the default action, do it now\n\n if (!onlyHandlers && !event.isDefaultPrevented()) {\n if ((!special._default || special._default.apply(eventPath.pop(), data) === false) && acceptData(elem)) {\n // Call a native DOM method on the target with the same name as the event.\n // Don't do default actions on window, that's where global variables be (#6170)\n if (ontype && isFunction(elem[type]) && !isWindow(elem)) {\n // Don't re-trigger an onFOO event when we call its FOO() method\n tmp = elem[ontype];\n\n if (tmp) {\n elem[ontype] = null;\n } // Prevent re-triggering of the same event, since we already bubbled it above\n\n\n jQuery.event.triggered = type;\n\n if (event.isPropagationStopped()) {\n lastElement.addEventListener(type, stopPropagationCallback);\n }\n\n elem[type]();\n\n if (event.isPropagationStopped()) {\n lastElement.removeEventListener(type, stopPropagationCallback);\n }\n\n jQuery.event.triggered = undefined;\n\n if (tmp) {\n elem[ontype] = tmp;\n }\n }\n }\n }\n\n return event.result;\n },\n // Piggyback on a donor event to simulate a different one\n // Used only for `focus(in | out)` events\n simulate: function simulate(type, elem, event) {\n var e = jQuery.extend(new jQuery.Event(), event, {\n type: type,\n isSimulated: true\n });\n jQuery.event.trigger(e, null, elem);\n }\n });\n jQuery.fn.extend({\n trigger: function trigger(type, data) {\n return this.each(function () {\n jQuery.event.trigger(type, data, this);\n });\n },\n triggerHandler: function triggerHandler(type, data) {\n var elem = this[0];\n\n if (elem) {\n return jQuery.event.trigger(type, data, elem, true);\n }\n }\n });\n return jQuery;\n});","define(function () {\n \"use strict\";\n\n return Object.getPrototypeOf;\n});","define([\"./arr\"], function (arr) {\n \"use strict\"; // Support: IE 9 - 11+, Edge 18+, Android Browser 4.0 - 4.3 only, iOS 7 - 11 only, Safari 11 only,\n // Firefox <= 61 only\n // Provide fallback for browsers without Array#flat.\n\n return arr.flat ? function (array) {\n return arr.flat.call(array);\n } : function (array) {\n return arr.concat.apply([], array);\n };\n});","define([\"./arr\"], function (arr) {\n \"use strict\";\n\n return arr.push;\n});","define([\"./class2type\"], function (class2type) {\n \"use strict\";\n\n return class2type.toString;\n});","define([\"./hasOwn\"], function (hasOwn) {\n \"use strict\";\n\n return hasOwn.toString;\n});","define([\"../var/document\"], function (document) {\n \"use strict\";\n\n var preservedScriptAttributes = {\n type: true,\n src: true,\n nonce: true,\n noModule: true\n };\n\n function DOMEval(code, node, doc) {\n doc = doc || document;\n var i,\n val,\n script = doc.createElement(\"script\");\n script.text = code;\n\n if (node) {\n for (i in preservedScriptAttributes) {\n // Support: Firefox 64+, Edge 18+\n // Some browsers don't support the \"nonce\" property on scripts.\n // On the other hand, just using `getAttribute` is not enough as\n // the `nonce` attribute is reset to an empty string whenever it\n // becomes browsing-context connected.\n // See https://github.com/whatwg/html/issues/2369\n // See https://html.spec.whatwg.org/#nonce-attributes\n // The `node.getAttribute` check was added for the sake of\n // `jQuery.globalEval` so that it can fake a nonce-containing node\n // via an object.\n val = node[i] || node.getAttribute && node.getAttribute(i);\n\n if (val) {\n script.setAttribute(i, val);\n }\n }\n }\n\n doc.head.appendChild(script).parentNode.removeChild(script);\n }\n\n return DOMEval;\n});","define([\"../../core\", \"../../selector\"], function (jQuery) {\n \"use strict\";\n\n return jQuery.expr.match.needsContext;\n});","define(function () {\n \"use strict\"; // rsingleTag matches a string consisting of a single HTML element with no attributes\n // and captures the element's name\n\n return /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;\n});","define([\"../core\", \"../var/indexOf\", \"../var/isFunction\", \"./var/rneedsContext\", \"../selector\"], function (jQuery, indexOf, isFunction, rneedsContext) {\n \"use strict\"; // Implement the identical functionality for filter and not\n\n function winnow(elements, qualifier, not) {\n if (isFunction(qualifier)) {\n return jQuery.grep(elements, function (elem, i) {\n return !!qualifier.call(elem, i, elem) !== not;\n });\n } // Single element\n\n\n if (qualifier.nodeType) {\n return jQuery.grep(elements, function (elem) {\n return elem === qualifier !== not;\n });\n } // Arraylike of elements (jQuery, arguments, Array)\n\n\n if (typeof qualifier !== \"string\") {\n return jQuery.grep(elements, function (elem) {\n return indexOf.call(qualifier, elem) > -1 !== not;\n });\n } // Filtered directly for both simple and complex selectors\n\n\n return jQuery.filter(qualifier, elements, not);\n }\n\n jQuery.filter = function (expr, elems, not) {\n var elem = elems[0];\n\n if (not) {\n expr = \":not(\" + expr + \")\";\n }\n\n if (elems.length === 1 && elem.nodeType === 1) {\n return jQuery.find.matchesSelector(elem, expr) ? [elem] : [];\n }\n\n return jQuery.find.matches(expr, jQuery.grep(elems, function (elem) {\n return elem.nodeType === 1;\n }));\n };\n\n jQuery.fn.extend({\n find: function find(selector) {\n var i,\n ret,\n len = this.length,\n self = this;\n\n if (typeof selector !== \"string\") {\n return this.pushStack(jQuery(selector).filter(function () {\n for (i = 0; i < len; i++) {\n if (jQuery.contains(self[i], this)) {\n return true;\n }\n }\n }));\n }\n\n ret = this.pushStack([]);\n\n for (i = 0; i < len; i++) {\n jQuery.find(selector, self[i], ret);\n }\n\n return len > 1 ? jQuery.uniqueSort(ret) : ret;\n },\n filter: function filter(selector) {\n return this.pushStack(winnow(this, selector || [], false));\n },\n not: function not(selector) {\n return this.pushStack(winnow(this, selector || [], true));\n },\n is: function is(selector) {\n return !!winnow(this, // If this is a positional/relative selector, check membership in the returned set\n // so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n typeof selector === \"string\" && rneedsContext.test(selector) ? jQuery(selector) : selector || [], false).length;\n }\n });\n});","define([\"../core\", \"../var/document\", \"../core/readyException\", \"../deferred\"], function (jQuery, document) {\n \"use strict\"; // The deferred used on DOM ready\n\n var readyList = jQuery.Deferred();\n\n jQuery.fn.ready = function (fn) {\n readyList.then(fn) // Wrap jQuery.readyException in a function so that the lookup\n // happens at the time of error handling instead of callback\n // registration.\n .catch(function (error) {\n jQuery.readyException(error);\n });\n return this;\n };\n\n jQuery.extend({\n // Is the DOM ready to be used? Set to true once it occurs.\n isReady: false,\n // A counter to track how many items to wait for before\n // the ready event fires. See #6781\n readyWait: 1,\n // Handle when the DOM is ready\n ready: function ready(wait) {\n // Abort if there are pending holds or we're already ready\n if (wait === true ? --jQuery.readyWait : jQuery.isReady) {\n return;\n } // Remember that the DOM is ready\n\n\n jQuery.isReady = true; // If a normal DOM Ready event fired, decrement, and wait if need be\n\n if (wait !== true && --jQuery.readyWait > 0) {\n return;\n } // If there are functions bound, to execute\n\n\n readyList.resolveWith(document, [jQuery]);\n }\n });\n jQuery.ready.then = readyList.then; // The ready event handler and self cleanup method\n\n function completed() {\n document.removeEventListener(\"DOMContentLoaded\", completed);\n window.removeEventListener(\"load\", completed);\n jQuery.ready();\n } // Catch cases where $(document).ready() is called\n // after the browser event has already occurred.\n // Support: IE <=9 - 10 only\n // Older IE sometimes signals \"interactive\" too soon\n\n\n if (document.readyState === \"complete\" || document.readyState !== \"loading\" && !document.documentElement.doScroll) {\n // Handle it asynchronously to allow scripts the opportunity to delay ready\n window.setTimeout(jQuery.ready);\n } else {\n // Use the handy event callback\n document.addEventListener(\"DOMContentLoaded\", completed); // A fallback to window.onload, that will always work\n\n window.addEventListener(\"load\", completed);\n }\n});","define([\"../core\", \"../core/camelCase\", \"../var/rnothtmlwhite\", \"./var/acceptData\"], function (jQuery, camelCase, rnothtmlwhite, acceptData) {\n \"use strict\";\n\n function Data() {\n this.expando = jQuery.expando + Data.uid++;\n }\n\n Data.uid = 1;\n Data.prototype = {\n cache: function cache(owner) {\n // Check if the owner object already has a cache\n var value = owner[this.expando]; // If not, create one\n\n if (!value) {\n value = {}; // We can accept data for non-element nodes in modern browsers,\n // but we should not, see #8335.\n // Always return an empty object.\n\n if (acceptData(owner)) {\n // If it is a node unlikely to be stringify-ed or looped over\n // use plain assignment\n if (owner.nodeType) {\n owner[this.expando] = value; // Otherwise secure it in a non-enumerable property\n // configurable must be true to allow the property to be\n // deleted when data is removed\n } else {\n Object.defineProperty(owner, this.expando, {\n value: value,\n configurable: true\n });\n }\n }\n }\n\n return value;\n },\n set: function set(owner, data, value) {\n var prop,\n cache = this.cache(owner); // Handle: [ owner, key, value ] args\n // Always use camelCase key (gh-2257)\n\n if (typeof data === \"string\") {\n cache[camelCase(data)] = value; // Handle: [ owner, { properties } ] args\n } else {\n // Copy the properties one-by-one to the cache object\n for (prop in data) {\n cache[camelCase(prop)] = data[prop];\n }\n }\n\n return cache;\n },\n get: function get(owner, key) {\n return key === undefined ? this.cache(owner) : // Always use camelCase key (gh-2257)\n owner[this.expando] && owner[this.expando][camelCase(key)];\n },\n access: function access(owner, key, value) {\n // In cases where either:\n //\n // 1. No key was specified\n // 2. A string key was specified, but no value provided\n //\n // Take the \"read\" path and allow the get method to determine\n // which value to return, respectively either:\n //\n // 1. The entire cache object\n // 2. The data stored at the key\n //\n if (key === undefined || key && typeof key === \"string\" && value === undefined) {\n return this.get(owner, key);\n } // When the key is not a string, or both a key and value\n // are specified, set or extend (existing objects) with either:\n //\n // 1. An object of properties\n // 2. A key and value\n //\n\n\n this.set(owner, key, value); // Since the \"set\" path can have two possible entry points\n // return the expected data based on which path was taken[*]\n\n return value !== undefined ? value : key;\n },\n remove: function remove(owner, key) {\n var i,\n cache = owner[this.expando];\n\n if (cache === undefined) {\n return;\n }\n\n if (key !== undefined) {\n // Support array or space separated string of keys\n if (Array.isArray(key)) {\n // If key is an array of keys...\n // We always set camelCase keys, so remove that.\n key = key.map(camelCase);\n } else {\n key = camelCase(key); // If a key with the spaces exists, use it.\n // Otherwise, create an array by matching non-whitespace\n\n key = key in cache ? [key] : key.match(rnothtmlwhite) || [];\n }\n\n i = key.length;\n\n while (i--) {\n delete cache[key[i]];\n }\n } // Remove the expando if there's no more data\n\n\n if (key === undefined || jQuery.isEmptyObject(cache)) {\n // Support: Chrome <=35 - 45\n // Webkit & Blink performance suffers when deleting properties\n // from DOM nodes, so set to undefined instead\n // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n if (owner.nodeType) {\n owner[this.expando] = undefined;\n } else {\n delete owner[this.expando];\n }\n }\n },\n hasData: function hasData(owner) {\n var cache = owner[this.expando];\n return cache !== undefined && !jQuery.isEmptyObject(cache);\n }\n };\n return Data;\n});","define([\"../Data\"], function (Data) {\n \"use strict\";\n\n return new Data();\n});","define(function () {\n \"use strict\";\n\n return /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\n});","define([\"../../core\", \"../../core/isAttached\" // css is assumed\n], function (jQuery, isAttached) {\n \"use strict\"; // isHiddenWithinTree reports if an element has a non-\"none\" display style (inline and/or\n // through the CSS cascade), which is useful in deciding whether or not to make it visible.\n // It differs from the :hidden selector (jQuery.expr.pseudos.hidden) in two important ways:\n // * A hidden ancestor does not force an element to be classified as hidden.\n // * Being disconnected from the document does not force an element to be classified as hidden.\n // These differences improve the behavior of .toggle() et al. when applied to elements that are\n // detached or contained within hidden ancestors (gh-2404, gh-2863).\n\n return function (elem, el) {\n // isHiddenWithinTree might be called from jQuery#filter function;\n // in that case, element will be second argument\n elem = el || elem; // Inline style trumps all\n\n return elem.style.display === \"none\" || elem.style.display === \"\" && // Otherwise, check computed style\n // Support: Firefox <=43 - 45\n // Disconnected elements can have computed display: none, so first confirm that elem is\n // in the document.\n isAttached(elem) && jQuery.css(elem, \"display\") === \"none\";\n };\n});","define([\"../core\", \"../var/rcssNum\"], function (jQuery, rcssNum) {\n \"use strict\";\n\n function adjustCSS(elem, prop, valueParts, tween) {\n var adjusted,\n scale,\n maxIterations = 20,\n currentValue = tween ? function () {\n return tween.cur();\n } : function () {\n return jQuery.css(elem, prop, \"\");\n },\n initial = currentValue(),\n unit = valueParts && valueParts[3] || (jQuery.cssNumber[prop] ? \"\" : \"px\"),\n // Starting value computation is required for potential unit mismatches\n initialInUnit = elem.nodeType && (jQuery.cssNumber[prop] || unit !== \"px\" && +initial) && rcssNum.exec(jQuery.css(elem, prop));\n\n if (initialInUnit && initialInUnit[3] !== unit) {\n // Support: Firefox <=54\n // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n initial = initial / 2; // Trust units reported by jQuery.css\n\n unit = unit || initialInUnit[3]; // Iteratively approximate from a nonzero starting point\n\n initialInUnit = +initial || 1;\n\n while (maxIterations--) {\n // Evaluate and update our best guess (doubling guesses that zero out).\n // Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n jQuery.style(elem, prop, initialInUnit + unit);\n\n if ((1 - scale) * (1 - (scale = currentValue() / initial || 0.5)) <= 0) {\n maxIterations = 0;\n }\n\n initialInUnit = initialInUnit / scale;\n }\n\n initialInUnit = initialInUnit * 2;\n jQuery.style(elem, prop, initialInUnit + unit); // Make sure we update the tween properties later on\n\n valueParts = valueParts || [];\n }\n\n if (valueParts) {\n initialInUnit = +initialInUnit || +initial || 0; // Apply relative offset (+=/-=) if specified\n\n adjusted = valueParts[1] ? initialInUnit + (valueParts[1] + 1) * valueParts[2] : +valueParts[2];\n\n if (tween) {\n tween.unit = unit;\n tween.start = initialInUnit;\n tween.end = adjusted;\n }\n }\n\n return adjusted;\n }\n\n return adjustCSS;\n});","define(function () {\n \"use strict\"; // rtagName captures the name from the first start tag in a string of HTML\n // https://html.spec.whatwg.org/multipage/syntax.html#tag-open-state\n // https://html.spec.whatwg.org/multipage/syntax.html#tag-name-state\n\n return /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i;\n});","define(function () {\n \"use strict\";\n\n return /^$|^module$|\\/(?:java|ecma)script/i;\n});","define([\"./support\"], function (support) {\n \"use strict\"; // We have to close these tags to support XHTML (#13200)\n\n var wrapMap = {\n // XHTML parsers do not magically insert elements in the\n // same way that tag soup parsers do. So we cannot shorten\n // this by omitting or other required elements.\n thead: [1, \"\", \"
\"],\n col: [2, \"\", \"
\"],\n tr: [2, \"\", \"
\"],\n td: [3, \"\", \"
\"],\n _default: [0, \"\", \"\"]\n };\n wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\n wrapMap.th = wrapMap.td; // Support: IE <=9 only\n\n if (!support.option) {\n wrapMap.optgroup = wrapMap.option = [1, \"\"];\n }\n\n return wrapMap;\n});","define([\"../var/document\", \"../var/support\"], function (document, support) {\n \"use strict\";\n\n (function () {\n var fragment = document.createDocumentFragment(),\n div = fragment.appendChild(document.createElement(\"div\")),\n input = document.createElement(\"input\"); // Support: Android 4.0 - 4.3 only\n // Check state lost if the name is set (#11217)\n // Support: Windows Web Apps (WWA)\n // `name` and `type` must use .setAttribute for WWA (#14901)\n\n input.setAttribute(\"type\", \"radio\");\n input.setAttribute(\"checked\", \"checked\");\n input.setAttribute(\"name\", \"t\");\n div.appendChild(input); // Support: Android <=4.1 only\n // Older WebKit doesn't clone checked state correctly in fragments\n\n support.checkClone = div.cloneNode(true).cloneNode(true).lastChild.checked; // Support: IE <=11 only\n // Make sure textarea (and checkbox) defaultValue is properly cloned\n\n div.innerHTML = \"\";\n support.noCloneChecked = !!div.cloneNode(true).lastChild.defaultValue; // Support: IE <=9 only\n // IE <=9 replaces \";\n support.option = !!div.lastChild;\n })();\n\n return support;\n});","define([\"../core\", \"../core/nodeName\"], function (jQuery, nodeName) {\n \"use strict\";\n\n function getAll(context, tag) {\n // Support: IE <=9 - 11 only\n // Use typeof to avoid zero-argument method invocation on host objects (#15151)\n var ret;\n\n if (typeof context.getElementsByTagName !== \"undefined\") {\n ret = context.getElementsByTagName(tag || \"*\");\n } else if (typeof context.querySelectorAll !== \"undefined\") {\n ret = context.querySelectorAll(tag || \"*\");\n } else {\n ret = [];\n }\n\n if (tag === undefined || tag && nodeName(context, tag)) {\n return jQuery.merge([context], ret);\n }\n\n return ret;\n }\n\n return getAll;\n});","define([\"../data/var/dataPriv\"], function (dataPriv) {\n \"use strict\"; // Mark scripts as having already been evaluated\n\n function setGlobalEval(elems, refElements) {\n var i = 0,\n l = elems.length;\n\n for (; i < l; i++) {\n dataPriv.set(elems[i], \"globalEval\", !refElements || dataPriv.get(refElements[i], \"globalEval\"));\n }\n }\n\n return setGlobalEval;\n});","define([\"../core\", \"../core/toType\", \"../core/isAttached\", \"./var/rtagName\", \"./var/rscriptType\", \"./wrapMap\", \"./getAll\", \"./setGlobalEval\"], function (jQuery, toType, isAttached, rtagName, rscriptType, wrapMap, getAll, setGlobalEval) {\n \"use strict\";\n\n var rhtml = /<|&#?\\w+;/;\n\n function buildFragment(elems, context, scripts, selection, ignored) {\n var elem,\n tmp,\n tag,\n wrap,\n attached,\n j,\n fragment = context.createDocumentFragment(),\n nodes = [],\n i = 0,\n l = elems.length;\n\n for (; i < l; i++) {\n elem = elems[i];\n\n if (elem || elem === 0) {\n // Add nodes directly\n if (toType(elem) === \"object\") {\n // Support: Android <=4.0 only, PhantomJS 1 only\n // push.apply(_, arraylike) throws on ancient WebKit\n jQuery.merge(nodes, elem.nodeType ? [elem] : elem); // Convert non-html into a text node\n } else if (!rhtml.test(elem)) {\n nodes.push(context.createTextNode(elem)); // Convert html into DOM nodes\n } else {\n tmp = tmp || fragment.appendChild(context.createElement(\"div\")); // Deserialize a standard representation\n\n tag = (rtagName.exec(elem) || [\"\", \"\"])[1].toLowerCase();\n wrap = wrapMap[tag] || wrapMap._default;\n tmp.innerHTML = wrap[1] + jQuery.htmlPrefilter(elem) + wrap[2]; // Descend through wrappers to the right content\n\n j = wrap[0];\n\n while (j--) {\n tmp = tmp.lastChild;\n } // Support: Android <=4.0 only, PhantomJS 1 only\n // push.apply(_, arraylike) throws on ancient WebKit\n\n\n jQuery.merge(nodes, tmp.childNodes); // Remember the top-level container\n\n tmp = fragment.firstChild; // Ensure the created nodes are orphaned (#12392)\n\n tmp.textContent = \"\";\n }\n }\n } // Remove wrapper from fragment\n\n\n fragment.textContent = \"\";\n i = 0;\n\n while (elem = nodes[i++]) {\n // Skip elements already in the context collection (trac-4087)\n if (selection && jQuery.inArray(elem, selection) > -1) {\n if (ignored) {\n ignored.push(elem);\n }\n\n continue;\n }\n\n attached = isAttached(elem); // Append to fragment\n\n tmp = getAll(fragment.appendChild(elem), \"script\"); // Preserve script evaluation history\n\n if (attached) {\n setGlobalEval(tmp);\n } // Capture executables\n\n\n if (scripts) {\n j = 0;\n\n while (elem = tmp[j++]) {\n if (rscriptType.test(elem.type || \"\")) {\n scripts.push(elem);\n }\n }\n }\n }\n\n return fragment;\n }\n\n return buildFragment;\n});","define(function () {\n \"use strict\";\n\n return function (elem) {\n // Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n // IE throws on elements created in popups\n // FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n var view = elem.ownerDocument.defaultView;\n\n if (!view || !view.opener) {\n view = window;\n }\n\n return view.getComputedStyle(elem);\n };\n});","define([\"../core\", \"../core/isAttached\", \"./var/rboxStyle\", \"./var/rnumnonpx\", \"./var/getStyles\", \"./support\"], function (jQuery, isAttached, rboxStyle, rnumnonpx, getStyles, support) {\n \"use strict\";\n\n function curCSS(elem, name, computed) {\n var width,\n minWidth,\n maxWidth,\n ret,\n // Support: Firefox 51+\n // Retrieving style before computed somehow\n // fixes an issue with getting wrong values\n // on detached elements\n style = elem.style;\n computed = computed || getStyles(elem); // getPropertyValue is needed for:\n // .css('filter') (IE 9 only, #12537)\n // .css('--customProperty) (#3144)\n\n if (computed) {\n ret = computed.getPropertyValue(name) || computed[name];\n\n if (ret === \"\" && !isAttached(elem)) {\n ret = jQuery.style(elem, name);\n } // A tribute to the \"awesome hack by Dean Edwards\"\n // Android Browser returns percentage for some values,\n // but width seems to be reliably pixels.\n // This is against the CSSOM draft spec:\n // https://drafts.csswg.org/cssom/#resolved-values\n\n\n if (!support.pixelBoxStyles() && rnumnonpx.test(ret) && rboxStyle.test(name)) {\n // Remember the original values\n width = style.width;\n minWidth = style.minWidth;\n maxWidth = style.maxWidth; // Put in the new values to get a computed value out\n\n style.minWidth = style.maxWidth = style.width = ret;\n ret = computed.width; // Revert the changed values\n\n style.width = width;\n style.minWidth = minWidth;\n style.maxWidth = maxWidth;\n }\n }\n\n return ret !== undefined ? // Support: IE <=9 - 11 only\n // IE returns zIndex value as an integer.\n ret + \"\" : ret;\n }\n\n return curCSS;\n});","define(function () {\n \"use strict\";\n\n function addGetHookIf(conditionFn, hookFn) {\n // Define the hook, we'll check on the first run if it's really needed.\n return {\n get: function get() {\n if (conditionFn()) {\n // Hook not needed (or it's not possible to use it due\n // to missing dependency), remove it.\n delete this.get;\n return;\n } // Hook needed; redefine it so that the support test is not executed again.\n\n\n return (this.get = hookFn).apply(this, arguments);\n }\n };\n }\n\n return addGetHookIf;\n});","define([\"../var/document\", \"../core\"], function (document, jQuery) {\n \"use strict\";\n\n var cssPrefixes = [\"Webkit\", \"Moz\", \"ms\"],\n emptyStyle = document.createElement(\"div\").style,\n vendorProps = {}; // Return a vendor-prefixed property or undefined\n\n function vendorPropName(name) {\n // Check for vendor prefixed names\n var capName = name[0].toUpperCase() + name.slice(1),\n i = cssPrefixes.length;\n\n while (i--) {\n name = cssPrefixes[i] + capName;\n\n if (name in emptyStyle) {\n return name;\n }\n }\n } // Return a potentially-mapped jQuery.cssProps or vendor prefixed property\n\n\n function finalPropName(name) {\n var final = jQuery.cssProps[name] || vendorProps[name];\n\n if (final) {\n return final;\n }\n\n if (name in emptyStyle) {\n return name;\n }\n\n return vendorProps[name] = vendorPropName(name) || name;\n }\n\n return finalPropName;\n});","define([\"../core\", \"../core/access\", \"./support\", \"../selector\"], function (jQuery, access, support) {\n \"use strict\";\n\n var rfocusable = /^(?:input|select|textarea|button)$/i,\n rclickable = /^(?:a|area)$/i;\n jQuery.fn.extend({\n prop: function prop(name, value) {\n return access(this, jQuery.prop, name, value, arguments.length > 1);\n },\n removeProp: function removeProp(name) {\n return this.each(function () {\n delete this[jQuery.propFix[name] || name];\n });\n }\n });\n jQuery.extend({\n prop: function prop(elem, name, value) {\n var ret,\n hooks,\n nType = elem.nodeType; // Don't get/set properties on text, comment and attribute nodes\n\n if (nType === 3 || nType === 8 || nType === 2) {\n return;\n }\n\n if (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n // Fix name and attach hooks\n name = jQuery.propFix[name] || name;\n hooks = jQuery.propHooks[name];\n }\n\n if (value !== undefined) {\n if (hooks && \"set\" in hooks && (ret = hooks.set(elem, value, name)) !== undefined) {\n return ret;\n }\n\n return elem[name] = value;\n }\n\n if (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n return ret;\n }\n\n return elem[name];\n },\n propHooks: {\n tabIndex: {\n get: function get(elem) {\n // Support: IE <=9 - 11 only\n // elem.tabIndex doesn't always return the\n // correct value when it hasn't been explicitly set\n // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n // Use proper attribute retrieval(#12072)\n var tabindex = jQuery.find.attr(elem, \"tabindex\");\n\n if (tabindex) {\n return parseInt(tabindex, 10);\n }\n\n if (rfocusable.test(elem.nodeName) || rclickable.test(elem.nodeName) && elem.href) {\n return 0;\n }\n\n return -1;\n }\n }\n },\n propFix: {\n \"for\": \"htmlFor\",\n \"class\": \"className\"\n }\n }); // Support: IE <=11 only\n // Accessing the selectedIndex property\n // forces the browser to respect setting selected\n // on the option\n // The getter ensures a default option is selected\n // when in an optgroup\n // eslint rule \"no-unused-expressions\" is disabled for this code\n // since it considers such accessions noop\n\n if (!support.optSelected) {\n jQuery.propHooks.selected = {\n get: function get(elem) {\n /* eslint no-unused-expressions: \"off\" */\n var parent = elem.parentNode;\n\n if (parent && parent.parentNode) {\n parent.parentNode.selectedIndex;\n }\n\n return null;\n },\n set: function set(elem) {\n /* eslint no-unused-expressions: \"off\" */\n var parent = elem.parentNode;\n\n if (parent) {\n parent.selectedIndex;\n\n if (parent.parentNode) {\n parent.parentNode.selectedIndex;\n }\n }\n }\n };\n }\n\n jQuery.each([\"tabIndex\", \"readOnly\", \"maxLength\", \"cellSpacing\", \"cellPadding\", \"rowSpan\", \"colSpan\", \"useMap\", \"frameBorder\", \"contentEditable\"], function () {\n jQuery.propFix[this.toLowerCase()] = this;\n });\n});","define(function () {\n \"use strict\";\n\n return {\n guid: Date.now()\n };\n});","define(function () {\n \"use strict\";\n\n return /\\?/;\n});","define([\"../core\"], function (jQuery) {\n \"use strict\"; // Cross-browser xml parsing\n\n jQuery.parseXML = function (data) {\n var xml, parserErrorElem;\n\n if (!data || typeof data !== \"string\") {\n return null;\n } // Support: IE 9 - 11 only\n // IE throws on parseFromString with invalid input.\n\n\n try {\n xml = new window.DOMParser().parseFromString(data, \"text/xml\");\n } catch (e) {}\n\n parserErrorElem = xml && xml.getElementsByTagName(\"parsererror\")[0];\n\n if (!xml || parserErrorElem) {\n jQuery.error(\"Invalid XML: \" + (parserErrorElem ? jQuery.map(parserErrorElem.childNodes, function (el) {\n return el.textContent;\n }).join(\"\\n\") : data));\n }\n\n return xml;\n };\n\n return jQuery.parseXML;\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\ndefine([\"./core\", \"./core/toType\", \"./var/rcheckableType\", \"./var/isFunction\", \"./core/init\", \"./traversing\", // filter\n\"./attributes/prop\"], function (jQuery, toType, rcheckableType, isFunction) {\n \"use strict\";\n\n var rbracket = /\\[\\]$/,\n rCRLF = /\\r?\\n/g,\n rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n rsubmittable = /^(?:input|select|textarea|keygen)/i;\n\n function buildParams(prefix, obj, traditional, add) {\n var name;\n\n if (Array.isArray(obj)) {\n // Serialize array item.\n jQuery.each(obj, function (i, v) {\n if (traditional || rbracket.test(prefix)) {\n // Treat each array item as a scalar.\n add(prefix, v);\n } else {\n // Item is non-scalar (array or object), encode its numeric index.\n buildParams(prefix + \"[\" + (_typeof(v) === \"object\" && v != null ? i : \"\") + \"]\", v, traditional, add);\n }\n });\n } else if (!traditional && toType(obj) === \"object\") {\n // Serialize object item.\n for (name in obj) {\n buildParams(prefix + \"[\" + name + \"]\", obj[name], traditional, add);\n }\n } else {\n // Serialize scalar item.\n add(prefix, obj);\n }\n } // Serialize an array of form elements or a set of\n // key/values into a query string\n\n\n jQuery.param = function (a, traditional) {\n var prefix,\n s = [],\n add = function add(key, valueOrFunction) {\n // If value is a function, invoke it and use its return value\n var value = isFunction(valueOrFunction) ? valueOrFunction() : valueOrFunction;\n s[s.length] = encodeURIComponent(key) + \"=\" + encodeURIComponent(value == null ? \"\" : value);\n };\n\n if (a == null) {\n return \"\";\n } // If an array was passed in, assume that it is an array of form elements.\n\n\n if (Array.isArray(a) || a.jquery && !jQuery.isPlainObject(a)) {\n // Serialize the form elements\n jQuery.each(a, function () {\n add(this.name, this.value);\n });\n } else {\n // If traditional, encode the \"old\" way (the way 1.3.2 or older\n // did it), otherwise encode params recursively.\n for (prefix in a) {\n buildParams(prefix, a[prefix], traditional, add);\n }\n } // Return the resulting serialization\n\n\n return s.join(\"&\");\n };\n\n jQuery.fn.extend({\n serialize: function serialize() {\n return jQuery.param(this.serializeArray());\n },\n serializeArray: function serializeArray() {\n return this.map(function () {\n // Can add propHook for \"elements\" to filter or add form elements\n var elements = jQuery.prop(this, \"elements\");\n return elements ? jQuery.makeArray(elements) : this;\n }).filter(function () {\n var type = this.type; // Use .is( \":disabled\" ) so that fieldset[disabled] works\n\n return this.name && !jQuery(this).is(\":disabled\") && rsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) && (this.checked || !rcheckableType.test(type));\n }).map(function (_i, elem) {\n var val = jQuery(this).val();\n\n if (val == null) {\n return null;\n }\n\n if (Array.isArray(val)) {\n return jQuery.map(val, function (val) {\n return {\n name: elem.name,\n value: val.replace(rCRLF, \"\\r\\n\")\n };\n });\n }\n\n return {\n name: elem.name,\n value: val.replace(rCRLF, \"\\r\\n\")\n };\n }).get();\n }\n });\n return jQuery;\n});","define([\"../core\", \"../var/document\", \"./var/rsingleTag\", \"../manipulation/buildFragment\", // This is the only module that needs core/support\n\"./support\"], function (jQuery, document, rsingleTag, buildFragment, support) {\n \"use strict\"; // Argument \"data\" should be string of html\n // context (optional): If specified, the fragment will be created in this context,\n // defaults to document\n // keepScripts (optional): If true, will include scripts passed in the html string\n\n jQuery.parseHTML = function (data, context, keepScripts) {\n if (typeof data !== \"string\") {\n return [];\n }\n\n if (typeof context === \"boolean\") {\n keepScripts = context;\n context = false;\n }\n\n var base, parsed, scripts;\n\n if (!context) {\n // Stop scripts or inline event handlers from being executed immediately\n // by using document.implementation\n if (support.createHTMLDocument) {\n context = document.implementation.createHTMLDocument(\"\"); // Set the base href for the created document\n // so any parsed elements with URLs\n // are based on the document's URL (gh-2965)\n\n base = context.createElement(\"base\");\n base.href = document.location.href;\n context.head.appendChild(base);\n } else {\n context = document;\n }\n }\n\n parsed = rsingleTag.exec(data);\n scripts = !keepScripts && []; // Single tag\n\n if (parsed) {\n return [context.createElement(parsed[1])];\n }\n\n parsed = buildFragment([data], context, scripts);\n\n if (scripts && scripts.length) {\n jQuery(scripts).remove();\n }\n\n return jQuery.merge([], parsed.childNodes);\n };\n\n return jQuery.parseHTML;\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n(function (mod) {\n if ((typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) == \"object\" && (typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"), require(\"../xml/xml\"), require(\"../meta\"));else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\", \"../xml/xml\", \"../meta\"], mod);else // Plain browser env\n mod(CodeMirror);\n})(function (CodeMirror) {\n \"use strict\";\n\n CodeMirror.defineMode(\"markdown\", function (cmCfg, modeCfg) {\n var htmlMode = CodeMirror.getMode(cmCfg, \"text/html\");\n var htmlModeMissing = htmlMode.name == \"null\";\n\n function getMode(name) {\n if (CodeMirror.findModeByName) {\n var found = CodeMirror.findModeByName(name);\n if (found) name = found.mime || found.mimes[0];\n }\n\n var mode = CodeMirror.getMode(cmCfg, name);\n return mode.name == \"null\" ? null : mode;\n } // Should characters that affect highlighting be highlighted separate?\n // Does not include characters that will be output (such as `1.` and `-` for lists)\n\n\n if (modeCfg.highlightFormatting === undefined) modeCfg.highlightFormatting = false; // Maximum number of nested blockquotes. Set to 0 for infinite nesting.\n // Excess `>` will emit `error` token.\n\n if (modeCfg.maxBlockquoteDepth === undefined) modeCfg.maxBlockquoteDepth = 0; // Turn on task lists? (\"- [ ] \" and \"- [x] \")\n\n if (modeCfg.taskLists === undefined) modeCfg.taskLists = false; // Turn on strikethrough syntax\n\n if (modeCfg.strikethrough === undefined) modeCfg.strikethrough = false;\n if (modeCfg.emoji === undefined) modeCfg.emoji = false;\n if (modeCfg.fencedCodeBlockHighlighting === undefined) modeCfg.fencedCodeBlockHighlighting = true;\n if (modeCfg.fencedCodeBlockDefaultMode === undefined) modeCfg.fencedCodeBlockDefaultMode = 'text/plain';\n if (modeCfg.xml === undefined) modeCfg.xml = true; // Allow token types to be overridden by user-provided token types.\n\n if (modeCfg.tokenTypeOverrides === undefined) modeCfg.tokenTypeOverrides = {};\n var tokenTypes = {\n header: \"header\",\n code: \"comment\",\n quote: \"quote\",\n list1: \"variable-2\",\n list2: \"variable-3\",\n list3: \"keyword\",\n hr: \"hr\",\n image: \"image\",\n imageAltText: \"image-alt-text\",\n imageMarker: \"image-marker\",\n formatting: \"formatting\",\n linkInline: \"link\",\n linkEmail: \"link\",\n linkText: \"link\",\n linkHref: \"string\",\n em: \"em\",\n strong: \"strong\",\n strikethrough: \"strikethrough\",\n emoji: \"builtin\"\n };\n\n for (var tokenType in tokenTypes) {\n if (tokenTypes.hasOwnProperty(tokenType) && modeCfg.tokenTypeOverrides[tokenType]) {\n tokenTypes[tokenType] = modeCfg.tokenTypeOverrides[tokenType];\n }\n }\n\n var hrRE = /^([*\\-_])(?:\\s*\\1){2,}\\s*$/,\n listRE = /^(?:[*\\-+]|^[0-9]+([.)]))\\s+/,\n taskListRE = /^\\[(x| )\\](?=\\s)/i // Must follow listRE\n ,\n atxHeaderRE = modeCfg.allowAtxHeaderWithoutSpace ? /^(#+)/ : /^(#+)(?: |$)/,\n setextHeaderRE = /^ {0,3}(?:\\={1,}|-{2,})\\s*$/,\n textRE = /^[^#!\\[\\]*_\\\\<>` \"'(~:]+/,\n fencedCodeRE = /^(~~~+|```+)[ \\t]*([\\w\\/+#-]*)[^\\n`]*$/,\n linkDefRE = /^\\s*\\[[^\\]]+?\\]:.*$/ // naive link-definition\n ,\n punctuation = /[!\"#$%&'()*+,\\-.\\/:;<=>?@\\[\\\\\\]^_`{|}~\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0AF0\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E42\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC9\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDF3C-\\uDF3E]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]/,\n expandedTab = \" \"; // CommonMark specifies tab as 4 spaces\n\n function switchInline(stream, state, f) {\n state.f = state.inline = f;\n return f(stream, state);\n }\n\n function switchBlock(stream, state, f) {\n state.f = state.block = f;\n return f(stream, state);\n }\n\n function lineIsEmpty(line) {\n return !line || !/\\S/.test(line.string);\n } // Blocks\n\n\n function blankLine(state) {\n // Reset linkTitle state\n state.linkTitle = false;\n state.linkHref = false;\n state.linkText = false; // Reset EM state\n\n state.em = false; // Reset STRONG state\n\n state.strong = false; // Reset strikethrough state\n\n state.strikethrough = false; // Reset state.quote\n\n state.quote = 0; // Reset state.indentedCode\n\n state.indentedCode = false;\n\n if (state.f == htmlBlock) {\n var exit = htmlModeMissing;\n\n if (!exit) {\n var inner = CodeMirror.innerMode(htmlMode, state.htmlState);\n exit = inner.mode.name == \"xml\" && inner.state.tagStart === null && !inner.state.context && inner.state.tokenize.isInText;\n }\n\n if (exit) {\n state.f = inlineNormal;\n state.block = blockNormal;\n state.htmlState = null;\n }\n } // Reset state.trailingSpace\n\n\n state.trailingSpace = 0;\n state.trailingSpaceNewLine = false; // Mark this line as blank\n\n state.prevLine = state.thisLine;\n state.thisLine = {\n stream: null\n };\n return null;\n }\n\n function blockNormal(stream, state) {\n var firstTokenOnLine = stream.column() === state.indentation;\n var prevLineLineIsEmpty = lineIsEmpty(state.prevLine.stream);\n var prevLineIsIndentedCode = state.indentedCode;\n var prevLineIsHr = state.prevLine.hr;\n var prevLineIsList = state.list !== false;\n var maxNonCodeIndentation = (state.listStack[state.listStack.length - 1] || 0) + 3;\n state.indentedCode = false;\n var lineIndentation = state.indentation; // compute once per line (on first token)\n\n if (state.indentationDiff === null) {\n state.indentationDiff = state.indentation;\n\n if (prevLineIsList) {\n state.list = null; // While this list item's marker's indentation is less than the deepest\n // list item's content's indentation,pop the deepest list item\n // indentation off the stack, and update block indentation state\n\n while (lineIndentation < state.listStack[state.listStack.length - 1]) {\n state.listStack.pop();\n\n if (state.listStack.length) {\n state.indentation = state.listStack[state.listStack.length - 1]; // less than the first list's indent -> the line is no longer a list\n } else {\n state.list = false;\n }\n }\n\n if (state.list !== false) {\n state.indentationDiff = lineIndentation - state.listStack[state.listStack.length - 1];\n }\n }\n } // not comprehensive (currently only for setext detection purposes)\n\n\n var allowsInlineContinuation = !prevLineLineIsEmpty && !prevLineIsHr && !state.prevLine.header && (!prevLineIsList || !prevLineIsIndentedCode) && !state.prevLine.fencedCodeEnd;\n var isHr = (state.list === false || prevLineIsHr || prevLineLineIsEmpty) && state.indentation <= maxNonCodeIndentation && stream.match(hrRE);\n var match = null;\n\n if (state.indentationDiff >= 4 && (prevLineIsIndentedCode || state.prevLine.fencedCodeEnd || state.prevLine.header || prevLineLineIsEmpty)) {\n stream.skipToEnd();\n state.indentedCode = true;\n return tokenTypes.code;\n } else if (stream.eatSpace()) {\n return null;\n } else if (firstTokenOnLine && state.indentation <= maxNonCodeIndentation && (match = stream.match(atxHeaderRE)) && match[1].length <= 6) {\n state.quote = 0;\n state.header = match[1].length;\n state.thisLine.header = true;\n if (modeCfg.highlightFormatting) state.formatting = \"header\";\n state.f = state.inline;\n return getType(state);\n } else if (state.indentation <= maxNonCodeIndentation && stream.eat('>')) {\n state.quote = firstTokenOnLine ? 1 : state.quote + 1;\n if (modeCfg.highlightFormatting) state.formatting = \"quote\";\n stream.eatSpace();\n return getType(state);\n } else if (!isHr && !state.setext && firstTokenOnLine && state.indentation <= maxNonCodeIndentation && (match = stream.match(listRE))) {\n var listType = match[1] ? \"ol\" : \"ul\";\n state.indentation = lineIndentation + stream.current().length;\n state.list = true;\n state.quote = 0; // Add this list item's content's indentation to the stack\n\n state.listStack.push(state.indentation); // Reset inline styles which shouldn't propagate across list items\n\n state.em = false;\n state.strong = false;\n state.code = false;\n state.strikethrough = false;\n\n if (modeCfg.taskLists && stream.match(taskListRE, false)) {\n state.taskList = true;\n }\n\n state.f = state.inline;\n if (modeCfg.highlightFormatting) state.formatting = [\"list\", \"list-\" + listType];\n return getType(state);\n } else if (firstTokenOnLine && state.indentation <= maxNonCodeIndentation && (match = stream.match(fencedCodeRE, true))) {\n state.quote = 0;\n state.fencedEndRE = new RegExp(match[1] + \"+ *$\"); // try switching mode\n\n state.localMode = modeCfg.fencedCodeBlockHighlighting && getMode(match[2] || modeCfg.fencedCodeBlockDefaultMode);\n if (state.localMode) state.localState = CodeMirror.startState(state.localMode);\n state.f = state.block = local;\n if (modeCfg.highlightFormatting) state.formatting = \"code-block\";\n state.code = -1;\n return getType(state); // SETEXT has lowest block-scope precedence after HR, so check it after\n // the others (code, blockquote, list...)\n } else if ( // if setext set, indicates line after ---/===\n state.setext || // line before ---/===\n (!allowsInlineContinuation || !prevLineIsList) && !state.quote && state.list === false && !state.code && !isHr && !linkDefRE.test(stream.string) && (match = stream.lookAhead(1)) && (match = match.match(setextHeaderRE))) {\n if (!state.setext) {\n state.header = match[0].charAt(0) == '=' ? 1 : 2;\n state.setext = state.header;\n } else {\n state.header = state.setext; // has no effect on type so we can reset it now\n\n state.setext = 0;\n stream.skipToEnd();\n if (modeCfg.highlightFormatting) state.formatting = \"header\";\n }\n\n state.thisLine.header = true;\n state.f = state.inline;\n return getType(state);\n } else if (isHr) {\n stream.skipToEnd();\n state.hr = true;\n state.thisLine.hr = true;\n return tokenTypes.hr;\n } else if (stream.peek() === '[') {\n return switchInline(stream, state, footnoteLink);\n }\n\n return switchInline(stream, state, state.inline);\n }\n\n function htmlBlock(stream, state) {\n var style = htmlMode.token(stream, state.htmlState);\n\n if (!htmlModeMissing) {\n var inner = CodeMirror.innerMode(htmlMode, state.htmlState);\n\n if (inner.mode.name == \"xml\" && inner.state.tagStart === null && !inner.state.context && inner.state.tokenize.isInText || state.md_inside && stream.current().indexOf(\">\") > -1) {\n state.f = inlineNormal;\n state.block = blockNormal;\n state.htmlState = null;\n }\n }\n\n return style;\n }\n\n function local(stream, state) {\n var currListInd = state.listStack[state.listStack.length - 1] || 0;\n var hasExitedList = state.indentation < currListInd;\n var maxFencedEndInd = currListInd + 3;\n\n if (state.fencedEndRE && state.indentation <= maxFencedEndInd && (hasExitedList || stream.match(state.fencedEndRE))) {\n if (modeCfg.highlightFormatting) state.formatting = \"code-block\";\n var returnType;\n if (!hasExitedList) returnType = getType(state);\n state.localMode = state.localState = null;\n state.block = blockNormal;\n state.f = inlineNormal;\n state.fencedEndRE = null;\n state.code = 0;\n state.thisLine.fencedCodeEnd = true;\n if (hasExitedList) return switchBlock(stream, state, state.block);\n return returnType;\n } else if (state.localMode) {\n return state.localMode.token(stream, state.localState);\n } else {\n stream.skipToEnd();\n return tokenTypes.code;\n }\n } // Inline\n\n\n function getType(state) {\n var styles = [];\n\n if (state.formatting) {\n styles.push(tokenTypes.formatting);\n if (typeof state.formatting === \"string\") state.formatting = [state.formatting];\n\n for (var i = 0; i < state.formatting.length; i++) {\n styles.push(tokenTypes.formatting + \"-\" + state.formatting[i]);\n\n if (state.formatting[i] === \"header\") {\n styles.push(tokenTypes.formatting + \"-\" + state.formatting[i] + \"-\" + state.header);\n } // Add `formatting-quote` and `formatting-quote-#` for blockquotes\n // Add `error` instead if the maximum blockquote nesting depth is passed\n\n\n if (state.formatting[i] === \"quote\") {\n if (!modeCfg.maxBlockquoteDepth || modeCfg.maxBlockquoteDepth >= state.quote) {\n styles.push(tokenTypes.formatting + \"-\" + state.formatting[i] + \"-\" + state.quote);\n } else {\n styles.push(\"error\");\n }\n }\n }\n }\n\n if (state.taskOpen) {\n styles.push(\"meta\");\n return styles.length ? styles.join(' ') : null;\n }\n\n if (state.taskClosed) {\n styles.push(\"property\");\n return styles.length ? styles.join(' ') : null;\n }\n\n if (state.linkHref) {\n styles.push(tokenTypes.linkHref, \"url\");\n } else {\n // Only apply inline styles to non-url text\n if (state.strong) {\n styles.push(tokenTypes.strong);\n }\n\n if (state.em) {\n styles.push(tokenTypes.em);\n }\n\n if (state.strikethrough) {\n styles.push(tokenTypes.strikethrough);\n }\n\n if (state.emoji) {\n styles.push(tokenTypes.emoji);\n }\n\n if (state.linkText) {\n styles.push(tokenTypes.linkText);\n }\n\n if (state.code) {\n styles.push(tokenTypes.code);\n }\n\n if (state.image) {\n styles.push(tokenTypes.image);\n }\n\n if (state.imageAltText) {\n styles.push(tokenTypes.imageAltText, \"link\");\n }\n\n if (state.imageMarker) {\n styles.push(tokenTypes.imageMarker);\n }\n }\n\n if (state.header) {\n styles.push(tokenTypes.header, tokenTypes.header + \"-\" + state.header);\n }\n\n if (state.quote) {\n styles.push(tokenTypes.quote); // Add `quote-#` where the maximum for `#` is modeCfg.maxBlockquoteDepth\n\n if (!modeCfg.maxBlockquoteDepth || modeCfg.maxBlockquoteDepth >= state.quote) {\n styles.push(tokenTypes.quote + \"-\" + state.quote);\n } else {\n styles.push(tokenTypes.quote + \"-\" + modeCfg.maxBlockquoteDepth);\n }\n }\n\n if (state.list !== false) {\n var listMod = (state.listStack.length - 1) % 3;\n\n if (!listMod) {\n styles.push(tokenTypes.list1);\n } else if (listMod === 1) {\n styles.push(tokenTypes.list2);\n } else {\n styles.push(tokenTypes.list3);\n }\n }\n\n if (state.trailingSpaceNewLine) {\n styles.push(\"trailing-space-new-line\");\n } else if (state.trailingSpace) {\n styles.push(\"trailing-space-\" + (state.trailingSpace % 2 ? \"a\" : \"b\"));\n }\n\n return styles.length ? styles.join(' ') : null;\n }\n\n function handleText(stream, state) {\n if (stream.match(textRE, true)) {\n return getType(state);\n }\n\n return undefined;\n }\n\n function inlineNormal(stream, state) {\n var style = state.text(stream, state);\n if (typeof style !== 'undefined') return style;\n\n if (state.list) {\n // List marker (*, +, -, 1., etc)\n state.list = null;\n return getType(state);\n }\n\n if (state.taskList) {\n var taskOpen = stream.match(taskListRE, true)[1] === \" \";\n if (taskOpen) state.taskOpen = true;else state.taskClosed = true;\n if (modeCfg.highlightFormatting) state.formatting = \"task\";\n state.taskList = false;\n return getType(state);\n }\n\n state.taskOpen = false;\n state.taskClosed = false;\n\n if (state.header && stream.match(/^#+$/, true)) {\n if (modeCfg.highlightFormatting) state.formatting = \"header\";\n return getType(state);\n }\n\n var ch = stream.next(); // Matches link titles present on next line\n\n if (state.linkTitle) {\n state.linkTitle = false;\n var matchCh = ch;\n\n if (ch === '(') {\n matchCh = ')';\n }\n\n matchCh = (matchCh + '').replace(/([.?*+^\\[\\]\\\\(){}|-])/g, \"\\\\$1\");\n var regex = '^\\\\s*(?:[^' + matchCh + '\\\\\\\\]+|\\\\\\\\\\\\\\\\|\\\\\\\\.)' + matchCh;\n\n if (stream.match(new RegExp(regex), true)) {\n return tokenTypes.linkHref;\n }\n } // If this block is changed, it may need to be updated in GFM mode\n\n\n if (ch === '`') {\n var previousFormatting = state.formatting;\n if (modeCfg.highlightFormatting) state.formatting = \"code\";\n stream.eatWhile('`');\n var count = stream.current().length;\n\n if (state.code == 0 && (!state.quote || count == 1)) {\n state.code = count;\n return getType(state);\n } else if (count == state.code) {\n // Must be exact\n var t = getType(state);\n state.code = 0;\n return t;\n } else {\n state.formatting = previousFormatting;\n return getType(state);\n }\n } else if (state.code) {\n return getType(state);\n }\n\n if (ch === '\\\\') {\n stream.next();\n\n if (modeCfg.highlightFormatting) {\n var type = getType(state);\n var formattingEscape = tokenTypes.formatting + \"-escape\";\n return type ? type + \" \" + formattingEscape : formattingEscape;\n }\n }\n\n if (ch === '!' && stream.match(/\\[[^\\]]*\\] ?(?:\\(|\\[)/, false)) {\n state.imageMarker = true;\n state.image = true;\n if (modeCfg.highlightFormatting) state.formatting = \"image\";\n return getType(state);\n }\n\n if (ch === '[' && state.imageMarker && stream.match(/[^\\]]*\\](\\(.*?\\)| ?\\[.*?\\])/, false)) {\n state.imageMarker = false;\n state.imageAltText = true;\n if (modeCfg.highlightFormatting) state.formatting = \"image\";\n return getType(state);\n }\n\n if (ch === ']' && state.imageAltText) {\n if (modeCfg.highlightFormatting) state.formatting = \"image\";\n var type = getType(state);\n state.imageAltText = false;\n state.image = false;\n state.inline = state.f = linkHref;\n return type;\n }\n\n if (ch === '[' && !state.image) {\n if (state.linkText && stream.match(/^.*?\\]/)) return getType(state);\n state.linkText = true;\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n return getType(state);\n }\n\n if (ch === ']' && state.linkText) {\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n var type = getType(state);\n state.linkText = false;\n state.inline = state.f = stream.match(/\\(.*?\\)| ?\\[.*?\\]/, false) ? linkHref : inlineNormal;\n return type;\n }\n\n if (ch === '<' && stream.match(/^(https?|ftps?):\\/\\/(?:[^\\\\>]|\\\\.)+>/, false)) {\n state.f = state.inline = linkInline;\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n var type = getType(state);\n\n if (type) {\n type += \" \";\n } else {\n type = \"\";\n }\n\n return type + tokenTypes.linkInline;\n }\n\n if (ch === '<' && stream.match(/^[^> \\\\]+@(?:[^\\\\>]|\\\\.)+>/, false)) {\n state.f = state.inline = linkInline;\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n var type = getType(state);\n\n if (type) {\n type += \" \";\n } else {\n type = \"\";\n }\n\n return type + tokenTypes.linkEmail;\n }\n\n if (modeCfg.xml && ch === '<' && stream.match(/^(!--|\\?|!\\[CDATA\\[|[a-z][a-z0-9-]*(?:\\s+[a-z_:.\\-]+(?:\\s*=\\s*[^>]+)?)*\\s*(?:>|$))/i, false)) {\n var end = stream.string.indexOf(\">\", stream.pos);\n\n if (end != -1) {\n var atts = stream.string.substring(stream.start, end);\n if (/markdown\\s*=\\s*('|\"){0,1}1('|\"){0,1}/.test(atts)) state.md_inside = true;\n }\n\n stream.backUp(1);\n state.htmlState = CodeMirror.startState(htmlMode);\n return switchBlock(stream, state, htmlBlock);\n }\n\n if (modeCfg.xml && ch === '<' && stream.match(/^\\/\\w*?>/)) {\n state.md_inside = false;\n return \"tag\";\n } else if (ch === \"*\" || ch === \"_\") {\n var len = 1,\n before = stream.pos == 1 ? \" \" : stream.string.charAt(stream.pos - 2);\n\n while (len < 3 && stream.eat(ch)) {\n len++;\n }\n\n var after = stream.peek() || \" \"; // See http://spec.commonmark.org/0.27/#emphasis-and-strong-emphasis\n\n var leftFlanking = !/\\s/.test(after) && (!punctuation.test(after) || /\\s/.test(before) || punctuation.test(before));\n var rightFlanking = !/\\s/.test(before) && (!punctuation.test(before) || /\\s/.test(after) || punctuation.test(after));\n var setEm = null,\n setStrong = null;\n\n if (len % 2) {\n // Em\n if (!state.em && leftFlanking && (ch === \"*\" || !rightFlanking || punctuation.test(before))) setEm = true;else if (state.em == ch && rightFlanking && (ch === \"*\" || !leftFlanking || punctuation.test(after))) setEm = false;\n }\n\n if (len > 1) {\n // Strong\n if (!state.strong && leftFlanking && (ch === \"*\" || !rightFlanking || punctuation.test(before))) setStrong = true;else if (state.strong == ch && rightFlanking && (ch === \"*\" || !leftFlanking || punctuation.test(after))) setStrong = false;\n }\n\n if (setStrong != null || setEm != null) {\n if (modeCfg.highlightFormatting) state.formatting = setEm == null ? \"strong\" : setStrong == null ? \"em\" : \"strong em\";\n if (setEm === true) state.em = ch;\n if (setStrong === true) state.strong = ch;\n var t = getType(state);\n if (setEm === false) state.em = false;\n if (setStrong === false) state.strong = false;\n return t;\n }\n } else if (ch === ' ') {\n if (stream.eat('*') || stream.eat('_')) {\n // Probably surrounded by spaces\n if (stream.peek() === ' ') {\n // Surrounded by spaces, ignore\n return getType(state);\n } else {\n // Not surrounded by spaces, back up pointer\n stream.backUp(1);\n }\n }\n }\n\n if (modeCfg.strikethrough) {\n if (ch === '~' && stream.eatWhile(ch)) {\n if (state.strikethrough) {\n // Remove strikethrough\n if (modeCfg.highlightFormatting) state.formatting = \"strikethrough\";\n var t = getType(state);\n state.strikethrough = false;\n return t;\n } else if (stream.match(/^[^\\s]/, false)) {\n // Add strikethrough\n state.strikethrough = true;\n if (modeCfg.highlightFormatting) state.formatting = \"strikethrough\";\n return getType(state);\n }\n } else if (ch === ' ') {\n if (stream.match('~~', true)) {\n // Probably surrounded by space\n if (stream.peek() === ' ') {\n // Surrounded by spaces, ignore\n return getType(state);\n } else {\n // Not surrounded by spaces, back up pointer\n stream.backUp(2);\n }\n }\n }\n }\n\n if (modeCfg.emoji && ch === \":\" && stream.match(/^(?:[a-z_\\d+][a-z_\\d+-]*|\\-[a-z_\\d+][a-z_\\d+-]*):/)) {\n state.emoji = true;\n if (modeCfg.highlightFormatting) state.formatting = \"emoji\";\n var retType = getType(state);\n state.emoji = false;\n return retType;\n }\n\n if (ch === ' ') {\n if (stream.match(/^ +$/, false)) {\n state.trailingSpace++;\n } else if (state.trailingSpace) {\n state.trailingSpaceNewLine = true;\n }\n }\n\n return getType(state);\n }\n\n function linkInline(stream, state) {\n var ch = stream.next();\n\n if (ch === \">\") {\n state.f = state.inline = inlineNormal;\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n var type = getType(state);\n\n if (type) {\n type += \" \";\n } else {\n type = \"\";\n }\n\n return type + tokenTypes.linkInline;\n }\n\n stream.match(/^[^>]+/, true);\n return tokenTypes.linkInline;\n }\n\n function linkHref(stream, state) {\n // Check if space, and return NULL if so (to avoid marking the space)\n if (stream.eatSpace()) {\n return null;\n }\n\n var ch = stream.next();\n\n if (ch === '(' || ch === '[') {\n state.f = state.inline = getLinkHrefInside(ch === \"(\" ? \")\" : \"]\");\n if (modeCfg.highlightFormatting) state.formatting = \"link-string\";\n state.linkHref = true;\n return getType(state);\n }\n\n return 'error';\n }\n\n var linkRE = {\n \")\": /^(?:[^\\\\\\(\\)]|\\\\.|\\((?:[^\\\\\\(\\)]|\\\\.)*\\))*?(?=\\))/,\n \"]\": /^(?:[^\\\\\\[\\]]|\\\\.|\\[(?:[^\\\\\\[\\]]|\\\\.)*\\])*?(?=\\])/\n };\n\n function getLinkHrefInside(endChar) {\n return function (stream, state) {\n var ch = stream.next();\n\n if (ch === endChar) {\n state.f = state.inline = inlineNormal;\n if (modeCfg.highlightFormatting) state.formatting = \"link-string\";\n var returnState = getType(state);\n state.linkHref = false;\n return returnState;\n }\n\n stream.match(linkRE[endChar]);\n state.linkHref = true;\n return getType(state);\n };\n }\n\n function footnoteLink(stream, state) {\n if (stream.match(/^([^\\]\\\\]|\\\\.)*\\]:/, false)) {\n state.f = footnoteLinkInside;\n stream.next(); // Consume [\n\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n state.linkText = true;\n return getType(state);\n }\n\n return switchInline(stream, state, inlineNormal);\n }\n\n function footnoteLinkInside(stream, state) {\n if (stream.match(']:', true)) {\n state.f = state.inline = footnoteUrl;\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n var returnType = getType(state);\n state.linkText = false;\n return returnType;\n }\n\n stream.match(/^([^\\]\\\\]|\\\\.)+/, true);\n return tokenTypes.linkText;\n }\n\n function footnoteUrl(stream, state) {\n // Check if space, and return NULL if so (to avoid marking the space)\n if (stream.eatSpace()) {\n return null;\n } // Match URL\n\n\n stream.match(/^[^\\s]+/, true); // Check for link title\n\n if (stream.peek() === undefined) {\n // End of line, set flag to check next line\n state.linkTitle = true;\n } else {\n // More content on line, check if link title\n stream.match(/^(?:\\s+(?:\"(?:[^\"\\\\]|\\\\.)+\"|'(?:[^'\\\\]|\\\\.)+'|\\((?:[^)\\\\]|\\\\.)+\\)))?/, true);\n }\n\n state.f = state.inline = inlineNormal;\n return tokenTypes.linkHref + \" url\";\n }\n\n var mode = {\n startState: function startState() {\n return {\n f: blockNormal,\n prevLine: {\n stream: null\n },\n thisLine: {\n stream: null\n },\n block: blockNormal,\n htmlState: null,\n indentation: 0,\n inline: inlineNormal,\n text: handleText,\n formatting: false,\n linkText: false,\n linkHref: false,\n linkTitle: false,\n code: 0,\n em: false,\n strong: false,\n header: 0,\n setext: 0,\n hr: false,\n taskList: false,\n list: false,\n listStack: [],\n quote: 0,\n trailingSpace: 0,\n trailingSpaceNewLine: false,\n strikethrough: false,\n emoji: false,\n fencedEndRE: null\n };\n },\n copyState: function copyState(s) {\n return {\n f: s.f,\n prevLine: s.prevLine,\n thisLine: s.thisLine,\n block: s.block,\n htmlState: s.htmlState && CodeMirror.copyState(htmlMode, s.htmlState),\n indentation: s.indentation,\n localMode: s.localMode,\n localState: s.localMode ? CodeMirror.copyState(s.localMode, s.localState) : null,\n inline: s.inline,\n text: s.text,\n formatting: false,\n linkText: s.linkText,\n linkTitle: s.linkTitle,\n linkHref: s.linkHref,\n code: s.code,\n em: s.em,\n strong: s.strong,\n strikethrough: s.strikethrough,\n emoji: s.emoji,\n header: s.header,\n setext: s.setext,\n hr: s.hr,\n taskList: s.taskList,\n list: s.list,\n listStack: s.listStack.slice(0),\n quote: s.quote,\n indentedCode: s.indentedCode,\n trailingSpace: s.trailingSpace,\n trailingSpaceNewLine: s.trailingSpaceNewLine,\n md_inside: s.md_inside,\n fencedEndRE: s.fencedEndRE\n };\n },\n token: function token(stream, state) {\n // Reset state.formatting\n state.formatting = false;\n\n if (stream != state.thisLine.stream) {\n state.header = 0;\n state.hr = false;\n\n if (stream.match(/^\\s*$/, true)) {\n blankLine(state);\n return null;\n }\n\n state.prevLine = state.thisLine;\n state.thisLine = {\n stream: stream\n }; // Reset state.taskList\n\n state.taskList = false; // Reset state.trailingSpace\n\n state.trailingSpace = 0;\n state.trailingSpaceNewLine = false;\n\n if (!state.localState) {\n state.f = state.block;\n\n if (state.f != htmlBlock) {\n var indentation = stream.match(/^\\s*/, true)[0].replace(/\\t/g, expandedTab).length;\n state.indentation = indentation;\n state.indentationDiff = null;\n if (indentation > 0) return null;\n }\n }\n }\n\n return state.f(stream, state);\n },\n innerMode: function innerMode(state) {\n if (state.block == htmlBlock) return {\n state: state.htmlState,\n mode: htmlMode\n };\n if (state.localState) return {\n state: state.localState,\n mode: state.localMode\n };\n return {\n state: state,\n mode: mode\n };\n },\n indent: function indent(state, textAfter, line) {\n if (state.block == htmlBlock && htmlMode.indent) return htmlMode.indent(state.htmlState, textAfter, line);\n if (state.localState && state.localMode.indent) return state.localMode.indent(state.localState, textAfter, line);\n return CodeMirror.Pass;\n },\n blankLine: blankLine,\n getType: getType,\n blockCommentStart: \"\",\n closeBrackets: \"()[]{}''\\\"\\\"``\",\n fold: \"markdown\"\n };\n return mode;\n }, \"xml\");\n CodeMirror.defineMIME(\"text/markdown\", \"markdown\");\n CodeMirror.defineMIME(\"text/x-markdown\", \"markdown\");\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n(function (mod) {\n if ((typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) == \"object\" && (typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);else // Plain browser env\n mod(CodeMirror);\n})(function (CodeMirror) {\n \"use strict\";\n\n var htmlConfig = {\n autoSelfClosers: {\n 'area': true,\n 'base': true,\n 'br': true,\n 'col': true,\n 'command': true,\n 'embed': true,\n 'frame': true,\n 'hr': true,\n 'img': true,\n 'input': true,\n 'keygen': true,\n 'link': true,\n 'meta': true,\n 'param': true,\n 'source': true,\n 'track': true,\n 'wbr': true,\n 'menuitem': true\n },\n implicitlyClosed: {\n 'dd': true,\n 'li': true,\n 'optgroup': true,\n 'option': true,\n 'p': true,\n 'rp': true,\n 'rt': true,\n 'tbody': true,\n 'td': true,\n 'tfoot': true,\n 'th': true,\n 'tr': true\n },\n contextGrabbers: {\n 'dd': {\n 'dd': true,\n 'dt': true\n },\n 'dt': {\n 'dd': true,\n 'dt': true\n },\n 'li': {\n 'li': true\n },\n 'option': {\n 'option': true,\n 'optgroup': true\n },\n 'optgroup': {\n 'optgroup': true\n },\n 'p': {\n 'address': true,\n 'article': true,\n 'aside': true,\n 'blockquote': true,\n 'dir': true,\n 'div': true,\n 'dl': true,\n 'fieldset': true,\n 'footer': true,\n 'form': true,\n 'h1': true,\n 'h2': true,\n 'h3': true,\n 'h4': true,\n 'h5': true,\n 'h6': true,\n 'header': true,\n 'hgroup': true,\n 'hr': true,\n 'menu': true,\n 'nav': true,\n 'ol': true,\n 'p': true,\n 'pre': true,\n 'section': true,\n 'table': true,\n 'ul': true\n },\n 'rp': {\n 'rp': true,\n 'rt': true\n },\n 'rt': {\n 'rp': true,\n 'rt': true\n },\n 'tbody': {\n 'tbody': true,\n 'tfoot': true\n },\n 'td': {\n 'td': true,\n 'th': true\n },\n 'tfoot': {\n 'tbody': true\n },\n 'th': {\n 'td': true,\n 'th': true\n },\n 'thead': {\n 'tbody': true,\n 'tfoot': true\n },\n 'tr': {\n 'tr': true\n }\n },\n doNotIndent: {\n \"pre\": true\n },\n allowUnquoted: true,\n allowMissing: true,\n caseFold: true\n };\n var xmlConfig = {\n autoSelfClosers: {},\n implicitlyClosed: {},\n contextGrabbers: {},\n doNotIndent: {},\n allowUnquoted: false,\n allowMissing: false,\n allowMissingTagName: false,\n caseFold: false\n };\n CodeMirror.defineMode(\"xml\", function (editorConf, config_) {\n var indentUnit = editorConf.indentUnit;\n var config = {};\n var defaults = config_.htmlMode ? htmlConfig : xmlConfig;\n\n for (var prop in defaults) {\n config[prop] = defaults[prop];\n }\n\n for (var prop in config_) {\n config[prop] = config_[prop];\n } // Return variables for tokenizers\n\n\n var type, setStyle;\n\n function inText(stream, state) {\n function chain(parser) {\n state.tokenize = parser;\n return parser(stream, state);\n }\n\n var ch = stream.next();\n\n if (ch == \"<\") {\n if (stream.eat(\"!\")) {\n if (stream.eat(\"[\")) {\n if (stream.match(\"CDATA[\")) return chain(inBlock(\"atom\", \"]]>\"));else return null;\n } else if (stream.match(\"--\")) {\n return chain(inBlock(\"comment\", \"-->\"));\n } else if (stream.match(\"DOCTYPE\", true, true)) {\n stream.eatWhile(/[\\w\\._\\-]/);\n return chain(doctype(1));\n } else {\n return null;\n }\n } else if (stream.eat(\"?\")) {\n stream.eatWhile(/[\\w\\._\\-]/);\n state.tokenize = inBlock(\"meta\", \"?>\");\n return \"meta\";\n } else {\n type = stream.eat(\"/\") ? \"closeTag\" : \"openTag\";\n state.tokenize = inTag;\n return \"tag bracket\";\n }\n } else if (ch == \"&\") {\n var ok;\n\n if (stream.eat(\"#\")) {\n if (stream.eat(\"x\")) {\n ok = stream.eatWhile(/[a-fA-F\\d]/) && stream.eat(\";\");\n } else {\n ok = stream.eatWhile(/[\\d]/) && stream.eat(\";\");\n }\n } else {\n ok = stream.eatWhile(/[\\w\\.\\-:]/) && stream.eat(\";\");\n }\n\n return ok ? \"atom\" : \"error\";\n } else {\n stream.eatWhile(/[^&<]/);\n return null;\n }\n }\n\n inText.isInText = true;\n\n function inTag(stream, state) {\n var ch = stream.next();\n\n if (ch == \">\" || ch == \"/\" && stream.eat(\">\")) {\n state.tokenize = inText;\n type = ch == \">\" ? \"endTag\" : \"selfcloseTag\";\n return \"tag bracket\";\n } else if (ch == \"=\") {\n type = \"equals\";\n return null;\n } else if (ch == \"<\") {\n state.tokenize = inText;\n state.state = baseState;\n state.tagName = state.tagStart = null;\n var next = state.tokenize(stream, state);\n return next ? next + \" tag error\" : \"tag error\";\n } else if (/[\\'\\\"]/.test(ch)) {\n state.tokenize = inAttribute(ch);\n state.stringStartCol = stream.column();\n return state.tokenize(stream, state);\n } else {\n stream.match(/^[^\\s\\u00a0=<>\\\"\\']*[^\\s\\u00a0=<>\\\"\\'\\/]/);\n return \"word\";\n }\n }\n\n function inAttribute(quote) {\n var closure = function closure(stream, state) {\n while (!stream.eol()) {\n if (stream.next() == quote) {\n state.tokenize = inTag;\n break;\n }\n }\n\n return \"string\";\n };\n\n closure.isInAttribute = true;\n return closure;\n }\n\n function inBlock(style, terminator) {\n return function (stream, state) {\n while (!stream.eol()) {\n if (stream.match(terminator)) {\n state.tokenize = inText;\n break;\n }\n\n stream.next();\n }\n\n return style;\n };\n }\n\n function doctype(depth) {\n return function (stream, state) {\n var ch;\n\n while ((ch = stream.next()) != null) {\n if (ch == \"<\") {\n state.tokenize = doctype(depth + 1);\n return state.tokenize(stream, state);\n } else if (ch == \">\") {\n if (depth == 1) {\n state.tokenize = inText;\n break;\n } else {\n state.tokenize = doctype(depth - 1);\n return state.tokenize(stream, state);\n }\n }\n }\n\n return \"meta\";\n };\n }\n\n function Context(state, tagName, startOfLine) {\n this.prev = state.context;\n this.tagName = tagName || \"\";\n this.indent = state.indented;\n this.startOfLine = startOfLine;\n if (config.doNotIndent.hasOwnProperty(tagName) || state.context && state.context.noIndent) this.noIndent = true;\n }\n\n function popContext(state) {\n if (state.context) state.context = state.context.prev;\n }\n\n function maybePopContext(state, nextTagName) {\n var parentTagName;\n\n while (true) {\n if (!state.context) {\n return;\n }\n\n parentTagName = state.context.tagName;\n\n if (!config.contextGrabbers.hasOwnProperty(parentTagName) || !config.contextGrabbers[parentTagName].hasOwnProperty(nextTagName)) {\n return;\n }\n\n popContext(state);\n }\n }\n\n function baseState(type, stream, state) {\n if (type == \"openTag\") {\n state.tagStart = stream.column();\n return tagNameState;\n } else if (type == \"closeTag\") {\n return closeTagNameState;\n } else {\n return baseState;\n }\n }\n\n function tagNameState(type, stream, state) {\n if (type == \"word\") {\n state.tagName = stream.current();\n setStyle = \"tag\";\n return attrState;\n } else if (config.allowMissingTagName && type == \"endTag\") {\n setStyle = \"tag bracket\";\n return attrState(type, stream, state);\n } else {\n setStyle = \"error\";\n return tagNameState;\n }\n }\n\n function closeTagNameState(type, stream, state) {\n if (type == \"word\") {\n var tagName = stream.current();\n if (state.context && state.context.tagName != tagName && config.implicitlyClosed.hasOwnProperty(state.context.tagName)) popContext(state);\n\n if (state.context && state.context.tagName == tagName || config.matchClosing === false) {\n setStyle = \"tag\";\n return closeState;\n } else {\n setStyle = \"tag error\";\n return closeStateErr;\n }\n } else if (config.allowMissingTagName && type == \"endTag\") {\n setStyle = \"tag bracket\";\n return closeState(type, stream, state);\n } else {\n setStyle = \"error\";\n return closeStateErr;\n }\n }\n\n function closeState(type, _stream, state) {\n if (type != \"endTag\") {\n setStyle = \"error\";\n return closeState;\n }\n\n popContext(state);\n return baseState;\n }\n\n function closeStateErr(type, stream, state) {\n setStyle = \"error\";\n return closeState(type, stream, state);\n }\n\n function attrState(type, _stream, state) {\n if (type == \"word\") {\n setStyle = \"attribute\";\n return attrEqState;\n } else if (type == \"endTag\" || type == \"selfcloseTag\") {\n var tagName = state.tagName,\n tagStart = state.tagStart;\n state.tagName = state.tagStart = null;\n\n if (type == \"selfcloseTag\" || config.autoSelfClosers.hasOwnProperty(tagName)) {\n maybePopContext(state, tagName);\n } else {\n maybePopContext(state, tagName);\n state.context = new Context(state, tagName, tagStart == state.indented);\n }\n\n return baseState;\n }\n\n setStyle = \"error\";\n return attrState;\n }\n\n function attrEqState(type, stream, state) {\n if (type == \"equals\") return attrValueState;\n if (!config.allowMissing) setStyle = \"error\";\n return attrState(type, stream, state);\n }\n\n function attrValueState(type, stream, state) {\n if (type == \"string\") return attrContinuedState;\n\n if (type == \"word\" && config.allowUnquoted) {\n setStyle = \"string\";\n return attrState;\n }\n\n setStyle = \"error\";\n return attrState(type, stream, state);\n }\n\n function attrContinuedState(type, stream, state) {\n if (type == \"string\") return attrContinuedState;\n return attrState(type, stream, state);\n }\n\n return {\n startState: function startState(baseIndent) {\n var state = {\n tokenize: inText,\n state: baseState,\n indented: baseIndent || 0,\n tagName: null,\n tagStart: null,\n context: null\n };\n if (baseIndent != null) state.baseIndent = baseIndent;\n return state;\n },\n token: function token(stream, state) {\n if (!state.tagName && stream.sol()) state.indented = stream.indentation();\n if (stream.eatSpace()) return null;\n type = null;\n var style = state.tokenize(stream, state);\n\n if ((style || type) && style != \"comment\") {\n setStyle = null;\n state.state = state.state(type || style, stream, state);\n if (setStyle) style = setStyle == \"error\" ? style + \" error\" : setStyle;\n }\n\n return style;\n },\n indent: function indent(state, textAfter, fullLine) {\n var context = state.context; // Indent multi-line strings (e.g. css).\n\n if (state.tokenize.isInAttribute) {\n if (state.tagStart == state.indented) return state.stringStartCol + 1;else return state.indented + indentUnit;\n }\n\n if (context && context.noIndent) return CodeMirror.Pass;\n if (state.tokenize != inTag && state.tokenize != inText) return fullLine ? fullLine.match(/^(\\s*)/)[0].length : 0; // Indent the starts of attribute names.\n\n if (state.tagName) {\n if (config.multilineTagIndentPastTag !== false) return state.tagStart + state.tagName.length + 2;else return state.tagStart + indentUnit * (config.multilineTagIndentFactor || 1);\n }\n\n if (config.alignCDATA && /$/,\n blockCommentStart: \"\",\n configuration: config.htmlMode ? \"html\" : \"xml\",\n helperType: config.htmlMode ? \"html\" : \"xml\",\n skipAttribute: function skipAttribute(state) {\n if (state.state == attrValueState) state.state = attrState;\n },\n xmlCurrentTag: function xmlCurrentTag(state) {\n return state.tagName ? {\n name: state.tagName,\n close: state.type == \"closeTag\"\n } : null;\n },\n xmlCurrentContext: function xmlCurrentContext(state) {\n var context = [];\n\n for (var cx = state.context; cx; cx = cx.prev) {\n context.push(cx.tagName);\n }\n\n return context.reverse();\n }\n };\n });\n CodeMirror.defineMIME(\"text/xml\", \"xml\");\n CodeMirror.defineMIME(\"application/xml\", \"xml\");\n if (!CodeMirror.mimeModes.hasOwnProperty(\"text/html\")) CodeMirror.defineMIME(\"text/html\", {\n name: \"xml\",\n htmlMode: true\n });\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n(function (mod) {\n if ((typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) == \"object\" && (typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) == \"object\") // CommonJS\n mod(require(\"../lib/codemirror\"));else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../lib/codemirror\"], mod);else // Plain browser env\n mod(CodeMirror);\n})(function (CodeMirror) {\n \"use strict\";\n\n CodeMirror.modeInfo = [{\n name: \"APL\",\n mime: \"text/apl\",\n mode: \"apl\",\n ext: [\"dyalog\", \"apl\"]\n }, {\n name: \"PGP\",\n mimes: [\"application/pgp\", \"application/pgp-encrypted\", \"application/pgp-keys\", \"application/pgp-signature\"],\n mode: \"asciiarmor\",\n ext: [\"asc\", \"pgp\", \"sig\"]\n }, {\n name: \"ASN.1\",\n mime: \"text/x-ttcn-asn\",\n mode: \"asn.1\",\n ext: [\"asn\", \"asn1\"]\n }, {\n name: \"Asterisk\",\n mime: \"text/x-asterisk\",\n mode: \"asterisk\",\n file: /^extensions\\.conf$/i\n }, {\n name: \"Brainfuck\",\n mime: \"text/x-brainfuck\",\n mode: \"brainfuck\",\n ext: [\"b\", \"bf\"]\n }, {\n name: \"C\",\n mime: \"text/x-csrc\",\n mode: \"clike\",\n ext: [\"c\", \"h\", \"ino\"]\n }, {\n name: \"C++\",\n mime: \"text/x-c++src\",\n mode: \"clike\",\n ext: [\"cpp\", \"c++\", \"cc\", \"cxx\", \"hpp\", \"h++\", \"hh\", \"hxx\"],\n alias: [\"cpp\"]\n }, {\n name: \"Cobol\",\n mime: \"text/x-cobol\",\n mode: \"cobol\",\n ext: [\"cob\", \"cpy\", \"cbl\"]\n }, {\n name: \"C#\",\n mime: \"text/x-csharp\",\n mode: \"clike\",\n ext: [\"cs\"],\n alias: [\"csharp\", \"cs\"]\n }, {\n name: \"Clojure\",\n mime: \"text/x-clojure\",\n mode: \"clojure\",\n ext: [\"clj\", \"cljc\", \"cljx\"]\n }, {\n name: \"ClojureScript\",\n mime: \"text/x-clojurescript\",\n mode: \"clojure\",\n ext: [\"cljs\"]\n }, {\n name: \"Closure Stylesheets (GSS)\",\n mime: \"text/x-gss\",\n mode: \"css\",\n ext: [\"gss\"]\n }, {\n name: \"CMake\",\n mime: \"text/x-cmake\",\n mode: \"cmake\",\n ext: [\"cmake\", \"cmake.in\"],\n file: /^CMakeLists\\.txt$/\n }, {\n name: \"CoffeeScript\",\n mimes: [\"application/vnd.coffeescript\", \"text/coffeescript\", \"text/x-coffeescript\"],\n mode: \"coffeescript\",\n ext: [\"coffee\"],\n alias: [\"coffee\", \"coffee-script\"]\n }, {\n name: \"Common Lisp\",\n mime: \"text/x-common-lisp\",\n mode: \"commonlisp\",\n ext: [\"cl\", \"lisp\", \"el\"],\n alias: [\"lisp\"]\n }, {\n name: \"Cypher\",\n mime: \"application/x-cypher-query\",\n mode: \"cypher\",\n ext: [\"cyp\", \"cypher\"]\n }, {\n name: \"Cython\",\n mime: \"text/x-cython\",\n mode: \"python\",\n ext: [\"pyx\", \"pxd\", \"pxi\"]\n }, {\n name: \"Crystal\",\n mime: \"text/x-crystal\",\n mode: \"crystal\",\n ext: [\"cr\"]\n }, {\n name: \"CSS\",\n mime: \"text/css\",\n mode: \"css\",\n ext: [\"css\"]\n }, {\n name: \"CQL\",\n mime: \"text/x-cassandra\",\n mode: \"sql\",\n ext: [\"cql\"]\n }, {\n name: \"D\",\n mime: \"text/x-d\",\n mode: \"d\",\n ext: [\"d\"]\n }, {\n name: \"Dart\",\n mimes: [\"application/dart\", \"text/x-dart\"],\n mode: \"dart\",\n ext: [\"dart\"]\n }, {\n name: \"diff\",\n mime: \"text/x-diff\",\n mode: \"diff\",\n ext: [\"diff\", \"patch\"]\n }, {\n name: \"Django\",\n mime: \"text/x-django\",\n mode: \"django\"\n }, {\n name: \"Dockerfile\",\n mime: \"text/x-dockerfile\",\n mode: \"dockerfile\",\n file: /^Dockerfile$/\n }, {\n name: \"DTD\",\n mime: \"application/xml-dtd\",\n mode: \"dtd\",\n ext: [\"dtd\"]\n }, {\n name: \"Dylan\",\n mime: \"text/x-dylan\",\n mode: \"dylan\",\n ext: [\"dylan\", \"dyl\", \"intr\"]\n }, {\n name: \"EBNF\",\n mime: \"text/x-ebnf\",\n mode: \"ebnf\"\n }, {\n name: \"ECL\",\n mime: \"text/x-ecl\",\n mode: \"ecl\",\n ext: [\"ecl\"]\n }, {\n name: \"edn\",\n mime: \"application/edn\",\n mode: \"clojure\",\n ext: [\"edn\"]\n }, {\n name: \"Eiffel\",\n mime: \"text/x-eiffel\",\n mode: \"eiffel\",\n ext: [\"e\"]\n }, {\n name: \"Elm\",\n mime: \"text/x-elm\",\n mode: \"elm\",\n ext: [\"elm\"]\n }, {\n name: \"Embedded JavaScript\",\n mime: \"application/x-ejs\",\n mode: \"htmlembedded\",\n ext: [\"ejs\"]\n }, {\n name: \"Embedded Ruby\",\n mime: \"application/x-erb\",\n mode: \"htmlembedded\",\n ext: [\"erb\"]\n }, {\n name: \"Erlang\",\n mime: \"text/x-erlang\",\n mode: \"erlang\",\n ext: [\"erl\"]\n }, {\n name: \"Esper\",\n mime: \"text/x-esper\",\n mode: \"sql\"\n }, {\n name: \"Factor\",\n mime: \"text/x-factor\",\n mode: \"factor\",\n ext: [\"factor\"]\n }, {\n name: \"FCL\",\n mime: \"text/x-fcl\",\n mode: \"fcl\"\n }, {\n name: \"Forth\",\n mime: \"text/x-forth\",\n mode: \"forth\",\n ext: [\"forth\", \"fth\", \"4th\"]\n }, {\n name: \"Fortran\",\n mime: \"text/x-fortran\",\n mode: \"fortran\",\n ext: [\"f\", \"for\", \"f77\", \"f90\", \"f95\"]\n }, {\n name: \"F#\",\n mime: \"text/x-fsharp\",\n mode: \"mllike\",\n ext: [\"fs\"],\n alias: [\"fsharp\"]\n }, {\n name: \"Gas\",\n mime: \"text/x-gas\",\n mode: \"gas\",\n ext: [\"s\"]\n }, {\n name: \"Gherkin\",\n mime: \"text/x-feature\",\n mode: \"gherkin\",\n ext: [\"feature\"]\n }, {\n name: \"GitHub Flavored Markdown\",\n mime: \"text/x-gfm\",\n mode: \"gfm\",\n file: /^(readme|contributing|history)\\.md$/i\n }, {\n name: \"Go\",\n mime: \"text/x-go\",\n mode: \"go\",\n ext: [\"go\"]\n }, {\n name: \"Groovy\",\n mime: \"text/x-groovy\",\n mode: \"groovy\",\n ext: [\"groovy\", \"gradle\"],\n file: /^Jenkinsfile$/\n }, {\n name: \"HAML\",\n mime: \"text/x-haml\",\n mode: \"haml\",\n ext: [\"haml\"]\n }, {\n name: \"Haskell\",\n mime: \"text/x-haskell\",\n mode: \"haskell\",\n ext: [\"hs\"]\n }, {\n name: \"Haskell (Literate)\",\n mime: \"text/x-literate-haskell\",\n mode: \"haskell-literate\",\n ext: [\"lhs\"]\n }, {\n name: \"Haxe\",\n mime: \"text/x-haxe\",\n mode: \"haxe\",\n ext: [\"hx\"]\n }, {\n name: \"HXML\",\n mime: \"text/x-hxml\",\n mode: \"haxe\",\n ext: [\"hxml\"]\n }, {\n name: \"ASP.NET\",\n mime: \"application/x-aspx\",\n mode: \"htmlembedded\",\n ext: [\"aspx\"],\n alias: [\"asp\", \"aspx\"]\n }, {\n name: \"HTML\",\n mime: \"text/html\",\n mode: \"htmlmixed\",\n ext: [\"html\", \"htm\", \"handlebars\", \"hbs\"],\n alias: [\"xhtml\"]\n }, {\n name: \"HTTP\",\n mime: \"message/http\",\n mode: \"http\"\n }, {\n name: \"IDL\",\n mime: \"text/x-idl\",\n mode: \"idl\",\n ext: [\"pro\"]\n }, {\n name: \"Pug\",\n mime: \"text/x-pug\",\n mode: \"pug\",\n ext: [\"jade\", \"pug\"],\n alias: [\"jade\"]\n }, {\n name: \"Java\",\n mime: \"text/x-java\",\n mode: \"clike\",\n ext: [\"java\"]\n }, {\n name: \"Java Server Pages\",\n mime: \"application/x-jsp\",\n mode: \"htmlembedded\",\n ext: [\"jsp\"],\n alias: [\"jsp\"]\n }, {\n name: \"JavaScript\",\n mimes: [\"text/javascript\", \"text/ecmascript\", \"application/javascript\", \"application/x-javascript\", \"application/ecmascript\"],\n mode: \"javascript\",\n ext: [\"js\"],\n alias: [\"ecmascript\", \"js\", \"node\"]\n }, {\n name: \"JSON\",\n mimes: [\"application/json\", \"application/x-json\"],\n mode: \"javascript\",\n ext: [\"json\", \"map\"],\n alias: [\"json5\"]\n }, {\n name: \"JSON-LD\",\n mime: \"application/ld+json\",\n mode: \"javascript\",\n ext: [\"jsonld\"],\n alias: [\"jsonld\"]\n }, {\n name: \"JSX\",\n mime: \"text/jsx\",\n mode: \"jsx\",\n ext: [\"jsx\"]\n }, {\n name: \"Jinja2\",\n mime: \"text/jinja2\",\n mode: \"jinja2\",\n ext: [\"j2\", \"jinja\", \"jinja2\"]\n }, {\n name: \"Julia\",\n mime: \"text/x-julia\",\n mode: \"julia\",\n ext: [\"jl\"],\n alias: [\"jl\"]\n }, {\n name: \"Kotlin\",\n mime: \"text/x-kotlin\",\n mode: \"clike\",\n ext: [\"kt\"]\n }, {\n name: \"LESS\",\n mime: \"text/x-less\",\n mode: \"css\",\n ext: [\"less\"]\n }, {\n name: \"LiveScript\",\n mime: \"text/x-livescript\",\n mode: \"livescript\",\n ext: [\"ls\"],\n alias: [\"ls\"]\n }, {\n name: \"Lua\",\n mime: \"text/x-lua\",\n mode: \"lua\",\n ext: [\"lua\"]\n }, {\n name: \"Markdown\",\n mime: \"text/x-markdown\",\n mode: \"markdown\",\n ext: [\"markdown\", \"md\", \"mkd\"]\n }, {\n name: \"mIRC\",\n mime: \"text/mirc\",\n mode: \"mirc\"\n }, {\n name: \"MariaDB SQL\",\n mime: \"text/x-mariadb\",\n mode: \"sql\"\n }, {\n name: \"Mathematica\",\n mime: \"text/x-mathematica\",\n mode: \"mathematica\",\n ext: [\"m\", \"nb\", \"wl\", \"wls\"]\n }, {\n name: \"Modelica\",\n mime: \"text/x-modelica\",\n mode: \"modelica\",\n ext: [\"mo\"]\n }, {\n name: \"MUMPS\",\n mime: \"text/x-mumps\",\n mode: \"mumps\",\n ext: [\"mps\"]\n }, {\n name: \"MS SQL\",\n mime: \"text/x-mssql\",\n mode: \"sql\"\n }, {\n name: \"mbox\",\n mime: \"application/mbox\",\n mode: \"mbox\",\n ext: [\"mbox\"]\n }, {\n name: \"MySQL\",\n mime: \"text/x-mysql\",\n mode: \"sql\"\n }, {\n name: \"Nginx\",\n mime: \"text/x-nginx-conf\",\n mode: \"nginx\",\n file: /nginx.*\\.conf$/i\n }, {\n name: \"NSIS\",\n mime: \"text/x-nsis\",\n mode: \"nsis\",\n ext: [\"nsh\", \"nsi\"]\n }, {\n name: \"NTriples\",\n mimes: [\"application/n-triples\", \"application/n-quads\", \"text/n-triples\"],\n mode: \"ntriples\",\n ext: [\"nt\", \"nq\"]\n }, {\n name: \"Objective-C\",\n mime: \"text/x-objectivec\",\n mode: \"clike\",\n ext: [\"m\"],\n alias: [\"objective-c\", \"objc\"]\n }, {\n name: \"Objective-C++\",\n mime: \"text/x-objectivec++\",\n mode: \"clike\",\n ext: [\"mm\"],\n alias: [\"objective-c++\", \"objc++\"]\n }, {\n name: \"OCaml\",\n mime: \"text/x-ocaml\",\n mode: \"mllike\",\n ext: [\"ml\", \"mli\", \"mll\", \"mly\"]\n }, {\n name: \"Octave\",\n mime: \"text/x-octave\",\n mode: \"octave\",\n ext: [\"m\"]\n }, {\n name: \"Oz\",\n mime: \"text/x-oz\",\n mode: \"oz\",\n ext: [\"oz\"]\n }, {\n name: \"Pascal\",\n mime: \"text/x-pascal\",\n mode: \"pascal\",\n ext: [\"p\", \"pas\"]\n }, {\n name: \"PEG.js\",\n mime: \"null\",\n mode: \"pegjs\",\n ext: [\"jsonld\"]\n }, {\n name: \"Perl\",\n mime: \"text/x-perl\",\n mode: \"perl\",\n ext: [\"pl\", \"pm\"]\n }, {\n name: \"PHP\",\n mimes: [\"text/x-php\", \"application/x-httpd-php\", \"application/x-httpd-php-open\"],\n mode: \"php\",\n ext: [\"php\", \"php3\", \"php4\", \"php5\", \"php7\", \"phtml\"]\n }, {\n name: \"Pig\",\n mime: \"text/x-pig\",\n mode: \"pig\",\n ext: [\"pig\"]\n }, {\n name: \"Plain Text\",\n mime: \"text/plain\",\n mode: \"null\",\n ext: [\"txt\", \"text\", \"conf\", \"def\", \"list\", \"log\"]\n }, {\n name: \"PLSQL\",\n mime: \"text/x-plsql\",\n mode: \"sql\",\n ext: [\"pls\"]\n }, {\n name: \"PostgreSQL\",\n mime: \"text/x-pgsql\",\n mode: \"sql\"\n }, {\n name: \"PowerShell\",\n mime: \"application/x-powershell\",\n mode: \"powershell\",\n ext: [\"ps1\", \"psd1\", \"psm1\"]\n }, {\n name: \"Properties files\",\n mime: \"text/x-properties\",\n mode: \"properties\",\n ext: [\"properties\", \"ini\", \"in\"],\n alias: [\"ini\", \"properties\"]\n }, {\n name: \"ProtoBuf\",\n mime: \"text/x-protobuf\",\n mode: \"protobuf\",\n ext: [\"proto\"]\n }, {\n name: \"Python\",\n mime: \"text/x-python\",\n mode: \"python\",\n ext: [\"BUILD\", \"bzl\", \"py\", \"pyw\"],\n file: /^(BUCK|BUILD)$/\n }, {\n name: \"Puppet\",\n mime: \"text/x-puppet\",\n mode: \"puppet\",\n ext: [\"pp\"]\n }, {\n name: \"Q\",\n mime: \"text/x-q\",\n mode: \"q\",\n ext: [\"q\"]\n }, {\n name: \"R\",\n mime: \"text/x-rsrc\",\n mode: \"r\",\n ext: [\"r\", \"R\"],\n alias: [\"rscript\"]\n }, {\n name: \"reStructuredText\",\n mime: \"text/x-rst\",\n mode: \"rst\",\n ext: [\"rst\"],\n alias: [\"rst\"]\n }, {\n name: \"RPM Changes\",\n mime: \"text/x-rpm-changes\",\n mode: \"rpm\"\n }, {\n name: \"RPM Spec\",\n mime: \"text/x-rpm-spec\",\n mode: \"rpm\",\n ext: [\"spec\"]\n }, {\n name: \"Ruby\",\n mime: \"text/x-ruby\",\n mode: \"ruby\",\n ext: [\"rb\"],\n alias: [\"jruby\", \"macruby\", \"rake\", \"rb\", \"rbx\"]\n }, {\n name: \"Rust\",\n mime: \"text/x-rustsrc\",\n mode: \"rust\",\n ext: [\"rs\"]\n }, {\n name: \"SAS\",\n mime: \"text/x-sas\",\n mode: \"sas\",\n ext: [\"sas\"]\n }, {\n name: \"Sass\",\n mime: \"text/x-sass\",\n mode: \"sass\",\n ext: [\"sass\"]\n }, {\n name: \"Scala\",\n mime: \"text/x-scala\",\n mode: \"clike\",\n ext: [\"scala\"]\n }, {\n name: \"Scheme\",\n mime: \"text/x-scheme\",\n mode: \"scheme\",\n ext: [\"scm\", \"ss\"]\n }, {\n name: \"SCSS\",\n mime: \"text/x-scss\",\n mode: \"css\",\n ext: [\"scss\"]\n }, {\n name: \"Shell\",\n mimes: [\"text/x-sh\", \"application/x-sh\"],\n mode: \"shell\",\n ext: [\"sh\", \"ksh\", \"bash\"],\n alias: [\"bash\", \"sh\", \"zsh\"],\n file: /^PKGBUILD$/\n }, {\n name: \"Sieve\",\n mime: \"application/sieve\",\n mode: \"sieve\",\n ext: [\"siv\", \"sieve\"]\n }, {\n name: \"Slim\",\n mimes: [\"text/x-slim\", \"application/x-slim\"],\n mode: \"slim\",\n ext: [\"slim\"]\n }, {\n name: \"Smalltalk\",\n mime: \"text/x-stsrc\",\n mode: \"smalltalk\",\n ext: [\"st\"]\n }, {\n name: \"Smarty\",\n mime: \"text/x-smarty\",\n mode: \"smarty\",\n ext: [\"tpl\"]\n }, {\n name: \"Solr\",\n mime: \"text/x-solr\",\n mode: \"solr\"\n }, {\n name: \"SML\",\n mime: \"text/x-sml\",\n mode: \"mllike\",\n ext: [\"sml\", \"sig\", \"fun\", \"smackspec\"]\n }, {\n name: \"Soy\",\n mime: \"text/x-soy\",\n mode: \"soy\",\n ext: [\"soy\"],\n alias: [\"closure template\"]\n }, {\n name: \"SPARQL\",\n mime: \"application/sparql-query\",\n mode: \"sparql\",\n ext: [\"rq\", \"sparql\"],\n alias: [\"sparul\"]\n }, {\n name: \"Spreadsheet\",\n mime: \"text/x-spreadsheet\",\n mode: \"spreadsheet\",\n alias: [\"excel\", \"formula\"]\n }, {\n name: \"SQL\",\n mime: \"text/x-sql\",\n mode: \"sql\",\n ext: [\"sql\"]\n }, {\n name: \"SQLite\",\n mime: \"text/x-sqlite\",\n mode: \"sql\"\n }, {\n name: \"Squirrel\",\n mime: \"text/x-squirrel\",\n mode: \"clike\",\n ext: [\"nut\"]\n }, {\n name: \"Stylus\",\n mime: \"text/x-styl\",\n mode: \"stylus\",\n ext: [\"styl\"]\n }, {\n name: \"Swift\",\n mime: \"text/x-swift\",\n mode: \"swift\",\n ext: [\"swift\"]\n }, {\n name: \"sTeX\",\n mime: \"text/x-stex\",\n mode: \"stex\"\n }, {\n name: \"LaTeX\",\n mime: \"text/x-latex\",\n mode: \"stex\",\n ext: [\"text\", \"ltx\", \"tex\"],\n alias: [\"tex\"]\n }, {\n name: \"SystemVerilog\",\n mime: \"text/x-systemverilog\",\n mode: \"verilog\",\n ext: [\"v\", \"sv\", \"svh\"]\n }, {\n name: \"Tcl\",\n mime: \"text/x-tcl\",\n mode: \"tcl\",\n ext: [\"tcl\"]\n }, {\n name: \"Textile\",\n mime: \"text/x-textile\",\n mode: \"textile\",\n ext: [\"textile\"]\n }, {\n name: \"TiddlyWiki\",\n mime: \"text/x-tiddlywiki\",\n mode: \"tiddlywiki\"\n }, {\n name: \"Tiki wiki\",\n mime: \"text/tiki\",\n mode: \"tiki\"\n }, {\n name: \"TOML\",\n mime: \"text/x-toml\",\n mode: \"toml\",\n ext: [\"toml\"]\n }, {\n name: \"Tornado\",\n mime: \"text/x-tornado\",\n mode: \"tornado\"\n }, {\n name: \"troff\",\n mime: \"text/troff\",\n mode: \"troff\",\n ext: [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"]\n }, {\n name: \"TTCN\",\n mime: \"text/x-ttcn\",\n mode: \"ttcn\",\n ext: [\"ttcn\", \"ttcn3\", \"ttcnpp\"]\n }, {\n name: \"TTCN_CFG\",\n mime: \"text/x-ttcn-cfg\",\n mode: \"ttcn-cfg\",\n ext: [\"cfg\"]\n }, {\n name: \"Turtle\",\n mime: \"text/turtle\",\n mode: \"turtle\",\n ext: [\"ttl\"]\n }, {\n name: \"TypeScript\",\n mime: \"application/typescript\",\n mode: \"javascript\",\n ext: [\"ts\"],\n alias: [\"ts\"]\n }, {\n name: \"TypeScript-JSX\",\n mime: \"text/typescript-jsx\",\n mode: \"jsx\",\n ext: [\"tsx\"],\n alias: [\"tsx\"]\n }, {\n name: \"Twig\",\n mime: \"text/x-twig\",\n mode: \"twig\"\n }, {\n name: \"Web IDL\",\n mime: \"text/x-webidl\",\n mode: \"webidl\",\n ext: [\"webidl\"]\n }, {\n name: \"VB.NET\",\n mime: \"text/x-vb\",\n mode: \"vb\",\n ext: [\"vb\"]\n }, {\n name: \"VBScript\",\n mime: \"text/vbscript\",\n mode: \"vbscript\",\n ext: [\"vbs\"]\n }, {\n name: \"Velocity\",\n mime: \"text/velocity\",\n mode: \"velocity\",\n ext: [\"vtl\"]\n }, {\n name: \"Verilog\",\n mime: \"text/x-verilog\",\n mode: \"verilog\",\n ext: [\"v\"]\n }, {\n name: \"VHDL\",\n mime: \"text/x-vhdl\",\n mode: \"vhdl\",\n ext: [\"vhd\", \"vhdl\"]\n }, {\n name: \"Vue.js Component\",\n mimes: [\"script/x-vue\", \"text/x-vue\"],\n mode: \"vue\",\n ext: [\"vue\"]\n }, {\n name: \"XML\",\n mimes: [\"application/xml\", \"text/xml\"],\n mode: \"xml\",\n ext: [\"xml\", \"xsl\", \"xsd\", \"svg\"],\n alias: [\"rss\", \"wsdl\", \"xsd\"]\n }, {\n name: \"XQuery\",\n mime: \"application/xquery\",\n mode: \"xquery\",\n ext: [\"xy\", \"xquery\"]\n }, {\n name: \"Yacas\",\n mime: \"text/x-yacas\",\n mode: \"yacas\",\n ext: [\"ys\"]\n }, {\n name: \"YAML\",\n mimes: [\"text/x-yaml\", \"text/yaml\"],\n mode: \"yaml\",\n ext: [\"yaml\", \"yml\"],\n alias: [\"yml\"]\n }, {\n name: \"Z80\",\n mime: \"text/x-z80\",\n mode: \"z80\",\n ext: [\"z80\"]\n }, {\n name: \"mscgen\",\n mime: \"text/x-mscgen\",\n mode: \"mscgen\",\n ext: [\"mscgen\", \"mscin\", \"msc\"]\n }, {\n name: \"xu\",\n mime: \"text/x-xu\",\n mode: \"mscgen\",\n ext: [\"xu\"]\n }, {\n name: \"msgenny\",\n mime: \"text/x-msgenny\",\n mode: \"mscgen\",\n ext: [\"msgenny\"]\n }, {\n name: \"WebAssembly\",\n mime: \"text/webassembly\",\n mode: \"wast\",\n ext: [\"wat\", \"wast\"]\n }]; // Ensure all modes have a mime property for backwards compatibility\n\n for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n var info = CodeMirror.modeInfo[i];\n if (info.mimes) info.mime = info.mimes[0];\n }\n\n CodeMirror.findModeByMIME = function (mime) {\n mime = mime.toLowerCase();\n\n for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n var info = CodeMirror.modeInfo[i];\n if (info.mime == mime) return info;\n if (info.mimes) for (var j = 0; j < info.mimes.length; j++) {\n if (info.mimes[j] == mime) return info;\n }\n }\n\n if (/\\+xml$/.test(mime)) return CodeMirror.findModeByMIME(\"application/xml\");\n if (/\\+json$/.test(mime)) return CodeMirror.findModeByMIME(\"application/json\");\n };\n\n CodeMirror.findModeByExtension = function (ext) {\n ext = ext.toLowerCase();\n\n for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n var info = CodeMirror.modeInfo[i];\n if (info.ext) for (var j = 0; j < info.ext.length; j++) {\n if (info.ext[j] == ext) return info;\n }\n }\n };\n\n CodeMirror.findModeByFileName = function (filename) {\n for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n var info = CodeMirror.modeInfo[i];\n if (info.file && info.file.test(filename)) return info;\n }\n\n var dot = filename.lastIndexOf(\".\");\n var ext = dot > -1 && filename.substring(dot + 1, filename.length);\n if (ext) return CodeMirror.findModeByExtension(ext);\n };\n\n CodeMirror.findModeByName = function (name) {\n name = name.toLowerCase();\n\n for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n var info = CodeMirror.modeInfo[i];\n if (info.name.toLowerCase() == name) return info;\n if (info.alias) for (var j = 0; j < info.alias.length; j++) {\n if (info.alias[j].toLowerCase() == name) return info;\n }\n }\n };\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n// Utility function that allows modes to be combined. The mode given\n// as the base argument takes care of most of the normal mode\n// functionality, but a second (typically simple) mode is used, which\n// can override the style of text. Both modes get to parse all of the\n// text, but when both assign a non-null style to a piece of code, the\n// overlay wins, unless the combine argument was true and not overridden,\n// or state.overlay.combineTokens was true, in which case the styles are\n// combined.\n(function (mod) {\n if ((typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) == \"object\" && (typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);else // Plain browser env\n mod(CodeMirror);\n})(function (CodeMirror) {\n \"use strict\";\n\n CodeMirror.overlayMode = function (base, overlay, combine) {\n return {\n startState: function startState() {\n return {\n base: CodeMirror.startState(base),\n overlay: CodeMirror.startState(overlay),\n basePos: 0,\n baseCur: null,\n overlayPos: 0,\n overlayCur: null,\n streamSeen: null\n };\n },\n copyState: function copyState(state) {\n return {\n base: CodeMirror.copyState(base, state.base),\n overlay: CodeMirror.copyState(overlay, state.overlay),\n basePos: state.basePos,\n baseCur: null,\n overlayPos: state.overlayPos,\n overlayCur: null\n };\n },\n token: function token(stream, state) {\n if (stream != state.streamSeen || Math.min(state.basePos, state.overlayPos) < stream.start) {\n state.streamSeen = stream;\n state.basePos = state.overlayPos = stream.start;\n }\n\n if (stream.start == state.basePos) {\n state.baseCur = base.token(stream, state.base);\n state.basePos = stream.pos;\n }\n\n if (stream.start == state.overlayPos) {\n stream.pos = stream.start;\n state.overlayCur = overlay.token(stream, state.overlay);\n state.overlayPos = stream.pos;\n }\n\n stream.pos = Math.min(state.basePos, state.overlayPos); // state.overlay.combineTokens always takes precedence over combine,\n // unless set to null\n\n if (state.overlayCur == null) return state.baseCur;else if (state.baseCur != null && state.overlay.combineTokens || combine && state.overlay.combineTokens == null) return state.baseCur + \" \" + state.overlayCur;else return state.overlayCur;\n },\n indent: base.indent && function (state, textAfter, line) {\n return base.indent(state.base, textAfter, line);\n },\n electricChars: base.electricChars,\n innerMode: function innerMode(state) {\n return {\n state: state.base,\n mode: base\n };\n },\n blankLine: function blankLine(state) {\n var baseToken, overlayToken;\n if (base.blankLine) baseToken = base.blankLine(state.base);\n if (overlay.blankLine) overlayToken = overlay.blankLine(state.overlay);\n return overlayToken == null ? baseToken : combine && baseToken != null ? baseToken + \" \" + overlayToken : overlayToken;\n }\n };\n };\n});","import { Application } from \"stimulus\";\nimport { definitionsFromContext } from \"stimulus/webpack-helpers\";\n\nconst application = Application.start();\nconst context = require.context(\".\", true, /\\.js$/);\napplication.load(definitionsFromContext(context));\n","export function definitionsFromContext(context) {\n return context.keys().map(function (key) {\n return definitionForModuleWithContextAndKey(context, key);\n }).filter(function (value) {\n return value;\n });\n}\n\nfunction definitionForModuleWithContextAndKey(context, key) {\n var identifier = identifierForContextKey(key);\n\n if (identifier) {\n return definitionForModuleAndIdentifier(context(key), identifier);\n }\n}\n\nfunction definitionForModuleAndIdentifier(module, identifier) {\n var controllerConstructor = module.default;\n\n if (typeof controllerConstructor == \"function\") {\n return {\n identifier: identifier,\n controllerConstructor: controllerConstructor\n };\n }\n}\n\nexport function identifierForContextKey(key) {\n var logicalName = (key.match(/^(?:\\.\\/)?(.+)(?:[_-]controller\\..+?)$/) || [])[1];\n\n if (logicalName) {\n return logicalName.replace(/_/g, \"-\").replace(/\\//g, \"--\");\n }\n}","// This file is automatically compiled by Webpack, along with any other files\n// present in this directory. You're encouraged to place your actual application logic in\n// a relevant structure within app/javascript and only use these pack files to reference\n// that code so it'll be compiled.\nrequire(\"@rails/ujs\").start();\nrequire(\"turbolinks\").start();\nrequire(\"@rails/activestorage\").start();\nrequire(\"channels\");\nrequire(\"jquery\");\n\nimport \"../src/application.scss\";\nimport \"../src/themes/winnow.scss\";\nimport \"../src/controllers\";\n\n// Uncomment to copy all static images under ../images to the output folder and reference\n// them with the image_pack_tag helper in views (e.g <%= image_pack_tag 'rails.png' %>)\n// or the `imagePath` JavaScript helper below.\n//\n// const images = require.context('../images', true)\n// const imagePath = (name) => images(name, true)\n","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*\nUnobtrusive JavaScript\nhttps://github.com/rails/rails/blob/master/actionview/app/assets/javascripts\nReleased under the MIT license\n */\n;\n(function () {\n var context = this;\n (function () {\n (function () {\n this.Rails = {\n linkClickSelector: 'a[data-confirm], a[data-method], a[data-remote]:not([disabled]), a[data-disable-with], a[data-disable]',\n buttonClickSelector: {\n selector: 'button[data-remote]:not([form]), button[data-confirm]:not([form])',\n exclude: 'form button'\n },\n inputChangeSelector: 'select[data-remote], input[data-remote], textarea[data-remote]',\n formSubmitSelector: 'form',\n formInputClickSelector: 'form input[type=submit], form input[type=image], form button[type=submit], form button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])',\n formDisableSelector: 'input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled',\n formEnableSelector: 'input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled',\n fileInputSelector: 'input[name][type=file]:not([disabled])',\n linkDisableSelector: 'a[data-disable-with], a[data-disable]',\n buttonDisableSelector: 'button[data-remote][data-disable-with], button[data-remote][data-disable]'\n };\n }).call(this);\n }).call(context);\n var Rails = context.Rails;\n (function () {\n (function () {\n var nonce;\n nonce = null;\n\n Rails.loadCSPNonce = function () {\n var ref;\n return nonce = (ref = document.querySelector(\"meta[name=csp-nonce]\")) != null ? ref.content : void 0;\n };\n\n Rails.cspNonce = function () {\n return nonce != null ? nonce : Rails.loadCSPNonce();\n };\n }).call(this);\n (function () {\n var expando, m;\n m = Element.prototype.matches || Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector;\n\n Rails.matches = function (element, selector) {\n if (selector.exclude != null) {\n return m.call(element, selector.selector) && !m.call(element, selector.exclude);\n } else {\n return m.call(element, selector);\n }\n };\n\n expando = '_ujsData';\n\n Rails.getData = function (element, key) {\n var ref;\n return (ref = element[expando]) != null ? ref[key] : void 0;\n };\n\n Rails.setData = function (element, key, value) {\n if (element[expando] == null) {\n element[expando] = {};\n }\n\n return element[expando][key] = value;\n };\n\n Rails.$ = function (selector) {\n return Array.prototype.slice.call(document.querySelectorAll(selector));\n };\n }).call(this);\n (function () {\n var $, csrfParam, csrfToken;\n $ = Rails.$;\n\n csrfToken = Rails.csrfToken = function () {\n var meta;\n meta = document.querySelector('meta[name=csrf-token]');\n return meta && meta.content;\n };\n\n csrfParam = Rails.csrfParam = function () {\n var meta;\n meta = document.querySelector('meta[name=csrf-param]');\n return meta && meta.content;\n };\n\n Rails.CSRFProtection = function (xhr) {\n var token;\n token = csrfToken();\n\n if (token != null) {\n return xhr.setRequestHeader('X-CSRF-Token', token);\n }\n };\n\n Rails.refreshCSRFTokens = function () {\n var param, token;\n token = csrfToken();\n param = csrfParam();\n\n if (token != null && param != null) {\n return $('form input[name=\"' + param + '\"]').forEach(function (input) {\n return input.value = token;\n });\n }\n };\n }).call(this);\n (function () {\n var CustomEvent, fire, matches, preventDefault;\n matches = Rails.matches;\n CustomEvent = window.CustomEvent;\n\n if (typeof CustomEvent !== 'function') {\n CustomEvent = function CustomEvent(event, params) {\n var evt;\n evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n preventDefault = CustomEvent.prototype.preventDefault;\n\n CustomEvent.prototype.preventDefault = function () {\n var result;\n result = preventDefault.call(this);\n\n if (this.cancelable && !this.defaultPrevented) {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function get() {\n return true;\n }\n });\n }\n\n return result;\n };\n }\n\n fire = Rails.fire = function (obj, name, data) {\n var event;\n event = new CustomEvent(name, {\n bubbles: true,\n cancelable: true,\n detail: data\n });\n obj.dispatchEvent(event);\n return !event.defaultPrevented;\n };\n\n Rails.stopEverything = function (e) {\n fire(e.target, 'ujs:everythingStopped');\n e.preventDefault();\n e.stopPropagation();\n return e.stopImmediatePropagation();\n };\n\n Rails.delegate = function (element, selector, eventType, handler) {\n return element.addEventListener(eventType, function (e) {\n var target;\n target = e.target;\n\n while (!(!(target instanceof Element) || matches(target, selector))) {\n target = target.parentNode;\n }\n\n if (target instanceof Element && handler.call(target, e) === false) {\n e.preventDefault();\n return e.stopPropagation();\n }\n });\n };\n }).call(this);\n (function () {\n var AcceptHeaders, CSRFProtection, createXHR, cspNonce, fire, prepareOptions, processResponse;\n cspNonce = Rails.cspNonce, CSRFProtection = Rails.CSRFProtection, fire = Rails.fire;\n AcceptHeaders = {\n '*': '*/*',\n text: 'text/plain',\n html: 'text/html',\n xml: 'application/xml, text/xml',\n json: 'application/json, text/javascript',\n script: 'text/javascript, application/javascript, application/ecmascript, application/x-ecmascript'\n };\n\n Rails.ajax = function (options) {\n var xhr;\n options = prepareOptions(options);\n xhr = createXHR(options, function () {\n var ref, response;\n response = processResponse((ref = xhr.response) != null ? ref : xhr.responseText, xhr.getResponseHeader('Content-Type'));\n\n if (Math.floor(xhr.status / 100) === 2) {\n if (typeof options.success === \"function\") {\n options.success(response, xhr.statusText, xhr);\n }\n } else {\n if (typeof options.error === \"function\") {\n options.error(response, xhr.statusText, xhr);\n }\n }\n\n return typeof options.complete === \"function\" ? options.complete(xhr, xhr.statusText) : void 0;\n });\n\n if (options.beforeSend != null && !options.beforeSend(xhr, options)) {\n return false;\n }\n\n if (xhr.readyState === XMLHttpRequest.OPENED) {\n return xhr.send(options.data);\n }\n };\n\n prepareOptions = function prepareOptions(options) {\n options.url = options.url || location.href;\n options.type = options.type.toUpperCase();\n\n if (options.type === 'GET' && options.data) {\n if (options.url.indexOf('?') < 0) {\n options.url += '?' + options.data;\n } else {\n options.url += '&' + options.data;\n }\n }\n\n if (AcceptHeaders[options.dataType] == null) {\n options.dataType = '*';\n }\n\n options.accept = AcceptHeaders[options.dataType];\n\n if (options.dataType !== '*') {\n options.accept += ', */*; q=0.01';\n }\n\n return options;\n };\n\n createXHR = function createXHR(options, done) {\n var xhr;\n xhr = new XMLHttpRequest();\n xhr.open(options.type, options.url, true);\n xhr.setRequestHeader('Accept', options.accept);\n\n if (typeof options.data === 'string') {\n xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');\n }\n\n if (!options.crossDomain) {\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n }\n\n CSRFProtection(xhr);\n xhr.withCredentials = !!options.withCredentials;\n\n xhr.onreadystatechange = function () {\n if (xhr.readyState === XMLHttpRequest.DONE) {\n return done(xhr);\n }\n };\n\n return xhr;\n };\n\n processResponse = function processResponse(response, type) {\n var parser, script;\n\n if (typeof response === 'string' && typeof type === 'string') {\n if (type.match(/\\bjson\\b/)) {\n try {\n response = JSON.parse(response);\n } catch (error) {}\n } else if (type.match(/\\b(?:java|ecma)script\\b/)) {\n script = document.createElement('script');\n script.setAttribute('nonce', cspNonce());\n script.text = response;\n document.head.appendChild(script).parentNode.removeChild(script);\n } else if (type.match(/\\b(xml|html|svg)\\b/)) {\n parser = new DOMParser();\n type = type.replace(/;.+/, '');\n\n try {\n response = parser.parseFromString(response, type);\n } catch (error) {}\n }\n }\n\n return response;\n };\n\n Rails.href = function (element) {\n return element.href;\n };\n\n Rails.isCrossDomain = function (url) {\n var e, originAnchor, urlAnchor;\n originAnchor = document.createElement('a');\n originAnchor.href = location.href;\n urlAnchor = document.createElement('a');\n\n try {\n urlAnchor.href = url;\n return !((!urlAnchor.protocol || urlAnchor.protocol === ':') && !urlAnchor.host || originAnchor.protocol + '//' + originAnchor.host === urlAnchor.protocol + '//' + urlAnchor.host);\n } catch (error) {\n e = error;\n return true;\n }\n };\n }).call(this);\n (function () {\n var matches, toArray;\n matches = Rails.matches;\n\n toArray = function toArray(e) {\n return Array.prototype.slice.call(e);\n };\n\n Rails.serializeElement = function (element, additionalParam) {\n var inputs, params;\n inputs = [element];\n\n if (matches(element, 'form')) {\n inputs = toArray(element.elements);\n }\n\n params = [];\n inputs.forEach(function (input) {\n if (!input.name || input.disabled) {\n return;\n }\n\n if (matches(input, 'fieldset[disabled] *')) {\n return;\n }\n\n if (matches(input, 'select')) {\n return toArray(input.options).forEach(function (option) {\n if (option.selected) {\n return params.push({\n name: input.name,\n value: option.value\n });\n }\n });\n } else if (input.checked || ['radio', 'checkbox', 'submit'].indexOf(input.type) === -1) {\n return params.push({\n name: input.name,\n value: input.value\n });\n }\n });\n\n if (additionalParam) {\n params.push(additionalParam);\n }\n\n return params.map(function (param) {\n if (param.name != null) {\n return encodeURIComponent(param.name) + \"=\" + encodeURIComponent(param.value);\n } else {\n return param;\n }\n }).join('&');\n };\n\n Rails.formElements = function (form, selector) {\n if (matches(form, 'form')) {\n return toArray(form.elements).filter(function (el) {\n return matches(el, selector);\n });\n } else {\n return toArray(form.querySelectorAll(selector));\n }\n };\n }).call(this);\n (function () {\n var allowAction, fire, stopEverything;\n fire = Rails.fire, stopEverything = Rails.stopEverything;\n\n Rails.handleConfirm = function (e) {\n if (!allowAction(this)) {\n return stopEverything(e);\n }\n };\n\n Rails.confirm = function (message, element) {\n return confirm(message);\n };\n\n allowAction = function allowAction(element) {\n var answer, callback, message;\n message = element.getAttribute('data-confirm');\n\n if (!message) {\n return true;\n }\n\n answer = false;\n\n if (fire(element, 'confirm')) {\n try {\n answer = Rails.confirm(message, element);\n } catch (error) {}\n\n callback = fire(element, 'confirm:complete', [answer]);\n }\n\n return answer && callback;\n };\n }).call(this);\n (function () {\n var disableFormElement, disableFormElements, disableLinkElement, enableFormElement, enableFormElements, enableLinkElement, formElements, getData, isXhrRedirect, matches, setData, stopEverything;\n matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, stopEverything = Rails.stopEverything, formElements = Rails.formElements;\n\n Rails.handleDisabledElement = function (e) {\n var element;\n element = this;\n\n if (element.disabled) {\n return stopEverything(e);\n }\n };\n\n Rails.enableElement = function (e) {\n var element;\n\n if (e instanceof Event) {\n if (isXhrRedirect(e)) {\n return;\n }\n\n element = e.target;\n } else {\n element = e;\n }\n\n if (matches(element, Rails.linkDisableSelector)) {\n return enableLinkElement(element);\n } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formEnableSelector)) {\n return enableFormElement(element);\n } else if (matches(element, Rails.formSubmitSelector)) {\n return enableFormElements(element);\n }\n };\n\n Rails.disableElement = function (e) {\n var element;\n element = e instanceof Event ? e.target : e;\n\n if (matches(element, Rails.linkDisableSelector)) {\n return disableLinkElement(element);\n } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formDisableSelector)) {\n return disableFormElement(element);\n } else if (matches(element, Rails.formSubmitSelector)) {\n return disableFormElements(element);\n }\n };\n\n disableLinkElement = function disableLinkElement(element) {\n var replacement;\n\n if (getData(element, 'ujs:disabled')) {\n return;\n }\n\n replacement = element.getAttribute('data-disable-with');\n\n if (replacement != null) {\n setData(element, 'ujs:enable-with', element.innerHTML);\n element.innerHTML = replacement;\n }\n\n element.addEventListener('click', stopEverything);\n return setData(element, 'ujs:disabled', true);\n };\n\n enableLinkElement = function enableLinkElement(element) {\n var originalText;\n originalText = getData(element, 'ujs:enable-with');\n\n if (originalText != null) {\n element.innerHTML = originalText;\n setData(element, 'ujs:enable-with', null);\n }\n\n element.removeEventListener('click', stopEverything);\n return setData(element, 'ujs:disabled', null);\n };\n\n disableFormElements = function disableFormElements(form) {\n return formElements(form, Rails.formDisableSelector).forEach(disableFormElement);\n };\n\n disableFormElement = function disableFormElement(element) {\n var replacement;\n\n if (getData(element, 'ujs:disabled')) {\n return;\n }\n\n replacement = element.getAttribute('data-disable-with');\n\n if (replacement != null) {\n if (matches(element, 'button')) {\n setData(element, 'ujs:enable-with', element.innerHTML);\n element.innerHTML = replacement;\n } else {\n setData(element, 'ujs:enable-with', element.value);\n element.value = replacement;\n }\n }\n\n element.disabled = true;\n return setData(element, 'ujs:disabled', true);\n };\n\n enableFormElements = function enableFormElements(form) {\n return formElements(form, Rails.formEnableSelector).forEach(enableFormElement);\n };\n\n enableFormElement = function enableFormElement(element) {\n var originalText;\n originalText = getData(element, 'ujs:enable-with');\n\n if (originalText != null) {\n if (matches(element, 'button')) {\n element.innerHTML = originalText;\n } else {\n element.value = originalText;\n }\n\n setData(element, 'ujs:enable-with', null);\n }\n\n element.disabled = false;\n return setData(element, 'ujs:disabled', null);\n };\n\n isXhrRedirect = function isXhrRedirect(event) {\n var ref, xhr;\n xhr = (ref = event.detail) != null ? ref[0] : void 0;\n return (xhr != null ? xhr.getResponseHeader(\"X-Xhr-Redirect\") : void 0) != null;\n };\n }).call(this);\n (function () {\n var stopEverything;\n stopEverything = Rails.stopEverything;\n\n Rails.handleMethod = function (e) {\n var csrfParam, csrfToken, form, formContent, href, link, method;\n link = this;\n method = link.getAttribute('data-method');\n\n if (!method) {\n return;\n }\n\n href = Rails.href(link);\n csrfToken = Rails.csrfToken();\n csrfParam = Rails.csrfParam();\n form = document.createElement('form');\n formContent = \"\";\n\n if (csrfParam != null && csrfToken != null && !Rails.isCrossDomain(href)) {\n formContent += \"\";\n }\n\n formContent += '';\n form.method = 'post';\n form.action = href;\n form.target = link.target;\n form.innerHTML = formContent;\n form.style.display = 'none';\n document.body.appendChild(form);\n form.querySelector('[type=\"submit\"]').click();\n return stopEverything(e);\n };\n }).call(this);\n (function () {\n var ajax,\n fire,\n getData,\n isCrossDomain,\n isRemote,\n matches,\n serializeElement,\n setData,\n stopEverything,\n slice = [].slice;\n matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, fire = Rails.fire, stopEverything = Rails.stopEverything, ajax = Rails.ajax, isCrossDomain = Rails.isCrossDomain, serializeElement = Rails.serializeElement;\n\n isRemote = function isRemote(element) {\n var value;\n value = element.getAttribute('data-remote');\n return value != null && value !== 'false';\n };\n\n Rails.handleRemote = function (e) {\n var button, data, dataType, element, method, url, withCredentials;\n element = this;\n\n if (!isRemote(element)) {\n return true;\n }\n\n if (!fire(element, 'ajax:before')) {\n fire(element, 'ajax:stopped');\n return false;\n }\n\n withCredentials = element.getAttribute('data-with-credentials');\n dataType = element.getAttribute('data-type') || 'script';\n\n if (matches(element, Rails.formSubmitSelector)) {\n button = getData(element, 'ujs:submit-button');\n method = getData(element, 'ujs:submit-button-formmethod') || element.method;\n url = getData(element, 'ujs:submit-button-formaction') || element.getAttribute('action') || location.href;\n\n if (method.toUpperCase() === 'GET') {\n url = url.replace(/\\?.*$/, '');\n }\n\n if (element.enctype === 'multipart/form-data') {\n data = new FormData(element);\n\n if (button != null) {\n data.append(button.name, button.value);\n }\n } else {\n data = serializeElement(element, button);\n }\n\n setData(element, 'ujs:submit-button', null);\n setData(element, 'ujs:submit-button-formmethod', null);\n setData(element, 'ujs:submit-button-formaction', null);\n } else if (matches(element, Rails.buttonClickSelector) || matches(element, Rails.inputChangeSelector)) {\n method = element.getAttribute('data-method');\n url = element.getAttribute('data-url');\n data = serializeElement(element, element.getAttribute('data-params'));\n } else {\n method = element.getAttribute('data-method');\n url = Rails.href(element);\n data = element.getAttribute('data-params');\n }\n\n ajax({\n type: method || 'GET',\n url: url,\n data: data,\n dataType: dataType,\n beforeSend: function beforeSend(xhr, options) {\n if (fire(element, 'ajax:beforeSend', [xhr, options])) {\n return fire(element, 'ajax:send', [xhr]);\n } else {\n fire(element, 'ajax:stopped');\n return false;\n }\n },\n success: function success() {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:success', args);\n },\n error: function error() {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:error', args);\n },\n complete: function complete() {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:complete', args);\n },\n crossDomain: isCrossDomain(url),\n withCredentials: withCredentials != null && withCredentials !== 'false'\n });\n return stopEverything(e);\n };\n\n Rails.formSubmitButtonClick = function (e) {\n var button, form;\n button = this;\n form = button.form;\n\n if (!form) {\n return;\n }\n\n if (button.name) {\n setData(form, 'ujs:submit-button', {\n name: button.name,\n value: button.value\n });\n }\n\n setData(form, 'ujs:formnovalidate-button', button.formNoValidate);\n setData(form, 'ujs:submit-button-formaction', button.getAttribute('formaction'));\n return setData(form, 'ujs:submit-button-formmethod', button.getAttribute('formmethod'));\n };\n\n Rails.preventInsignificantClick = function (e) {\n var data, insignificantMetaClick, link, metaClick, method, nonPrimaryMouseClick;\n link = this;\n method = (link.getAttribute('data-method') || 'GET').toUpperCase();\n data = link.getAttribute('data-params');\n metaClick = e.metaKey || e.ctrlKey;\n insignificantMetaClick = metaClick && method === 'GET' && !data;\n nonPrimaryMouseClick = e.button != null && e.button !== 0;\n\n if (nonPrimaryMouseClick || insignificantMetaClick) {\n return e.stopImmediatePropagation();\n }\n };\n }).call(this);\n (function () {\n var $, CSRFProtection, delegate, disableElement, enableElement, fire, formSubmitButtonClick, getData, handleConfirm, handleDisabledElement, handleMethod, handleRemote, loadCSPNonce, preventInsignificantClick, refreshCSRFTokens;\n fire = Rails.fire, delegate = Rails.delegate, getData = Rails.getData, $ = Rails.$, refreshCSRFTokens = Rails.refreshCSRFTokens, CSRFProtection = Rails.CSRFProtection, loadCSPNonce = Rails.loadCSPNonce, enableElement = Rails.enableElement, disableElement = Rails.disableElement, handleDisabledElement = Rails.handleDisabledElement, handleConfirm = Rails.handleConfirm, preventInsignificantClick = Rails.preventInsignificantClick, handleRemote = Rails.handleRemote, formSubmitButtonClick = Rails.formSubmitButtonClick, handleMethod = Rails.handleMethod;\n\n if (typeof jQuery !== \"undefined\" && jQuery !== null && jQuery.ajax != null) {\n if (jQuery.rails) {\n throw new Error('If you load both jquery_ujs and rails-ujs, use rails-ujs only.');\n }\n\n jQuery.rails = Rails;\n jQuery.ajaxPrefilter(function (options, originalOptions, xhr) {\n if (!options.crossDomain) {\n return CSRFProtection(xhr);\n }\n });\n }\n\n Rails.start = function () {\n if (window._rails_loaded) {\n throw new Error('rails-ujs has already been loaded!');\n }\n\n window.addEventListener('pageshow', function () {\n $(Rails.formEnableSelector).forEach(function (el) {\n if (getData(el, 'ujs:disabled')) {\n return enableElement(el);\n }\n });\n return $(Rails.linkDisableSelector).forEach(function (el) {\n if (getData(el, 'ujs:disabled')) {\n return enableElement(el);\n }\n });\n });\n delegate(document, Rails.linkDisableSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.linkDisableSelector, 'ajax:stopped', enableElement);\n delegate(document, Rails.buttonDisableSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.buttonDisableSelector, 'ajax:stopped', enableElement);\n delegate(document, Rails.linkClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.linkClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.linkClickSelector, 'click', handleConfirm);\n delegate(document, Rails.linkClickSelector, 'click', disableElement);\n delegate(document, Rails.linkClickSelector, 'click', handleRemote);\n delegate(document, Rails.linkClickSelector, 'click', handleMethod);\n delegate(document, Rails.buttonClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.buttonClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.buttonClickSelector, 'click', handleConfirm);\n delegate(document, Rails.buttonClickSelector, 'click', disableElement);\n delegate(document, Rails.buttonClickSelector, 'click', handleRemote);\n delegate(document, Rails.inputChangeSelector, 'change', handleDisabledElement);\n delegate(document, Rails.inputChangeSelector, 'change', handleConfirm);\n delegate(document, Rails.inputChangeSelector, 'change', handleRemote);\n delegate(document, Rails.formSubmitSelector, 'submit', handleDisabledElement);\n delegate(document, Rails.formSubmitSelector, 'submit', handleConfirm);\n delegate(document, Rails.formSubmitSelector, 'submit', handleRemote);\n delegate(document, Rails.formSubmitSelector, 'submit', function (e) {\n return setTimeout(function () {\n return disableElement(e);\n }, 13);\n });\n delegate(document, Rails.formSubmitSelector, 'ajax:send', disableElement);\n delegate(document, Rails.formSubmitSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.formInputClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.formInputClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.formInputClickSelector, 'click', handleConfirm);\n delegate(document, Rails.formInputClickSelector, 'click', formSubmitButtonClick);\n document.addEventListener('DOMContentLoaded', refreshCSRFTokens);\n document.addEventListener('DOMContentLoaded', loadCSPNonce);\n return window._rails_loaded = true;\n };\n\n if (window.Rails === Rails && fire(document, 'rails:attachBindings')) {\n Rails.start();\n }\n }).call(this);\n }).call(this);\n\n if ((typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) === \"object\" && module.exports) {\n module.exports = Rails;\n } else if (typeof define === \"function\" && define.amd) {\n define(Rails);\n }\n}).call(this);","define([\"./fnToString\"], function (fnToString) {\n \"use strict\";\n\n return fnToString.call(Object);\n});","define([\"./core\", \"../external/sizzle/dist/sizzle\"], function (jQuery, Sizzle) {\n \"use strict\";\n\n jQuery.find = Sizzle;\n jQuery.expr = Sizzle.selectors; // Deprecated\n\n jQuery.expr[\":\"] = jQuery.expr.pseudos;\n jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\n jQuery.text = Sizzle.getText;\n jQuery.isXMLDoc = Sizzle.isXML;\n jQuery.contains = Sizzle.contains;\n jQuery.escapeSelector = Sizzle.escape;\n});","/*!\n * Sizzle CSS Selector Engine v2.3.6\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://js.foundation/\n *\n * Date: 2021-02-16\n */\n(function (window) {\n var i,\n support,\n Expr,\n getText,\n isXML,\n tokenize,\n compile,\n select,\n outermostContext,\n sortInput,\n hasDuplicate,\n // Local document vars\n setDocument,\n document,\n docElem,\n documentIsHTML,\n rbuggyQSA,\n rbuggyMatches,\n matches,\n contains,\n // Instance-specific data\n expando = \"sizzle\" + 1 * new Date(),\n preferredDoc = window.document,\n dirruns = 0,\n done = 0,\n classCache = createCache(),\n tokenCache = createCache(),\n compilerCache = createCache(),\n nonnativeSelectorCache = createCache(),\n sortOrder = function sortOrder(a, b) {\n if (a === b) {\n hasDuplicate = true;\n }\n\n return 0;\n },\n // Instance methods\n hasOwn = {}.hasOwnProperty,\n arr = [],\n pop = arr.pop,\n pushNative = arr.push,\n push = arr.push,\n slice = arr.slice,\n // Use a stripped-down indexOf as it's faster than native\n // https://jsperf.com/thor-indexof-vs-for/5\n indexOf = function indexOf(list, elem) {\n var i = 0,\n len = list.length;\n\n for (; i < len; i++) {\n if (list[i] === elem) {\n return i;\n }\n }\n\n return -1;\n },\n booleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|\" + \"ismap|loop|multiple|open|readonly|required|scoped\",\n // Regular expressions\n // http://www.w3.org/TR/css3-selectors/#whitespace\n whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n identifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace + \"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n attributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace + // Operator (capture 2)\n \"*([*^$|!~]?=)\" + whitespace + // \"Attribute values must be CSS identifiers [capture 5]\n // or strings [capture 3 or capture 4]\"\n \"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace + \"*\\\\]\",\n pseudos = \":(\" + identifier + \")(?:\\\\((\" + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n // 1. quoted (capture 3; capture 4 or capture 5)\n \"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" + // 2. simple (capture 6)\n \"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" + // 3. anything else (capture 2)\n \".*\" + \")\\\\)|)\",\n // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n rwhitespace = new RegExp(whitespace + \"+\", \"g\"),\n rtrim = new RegExp(\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\"),\n rcomma = new RegExp(\"^\" + whitespace + \"*,\" + whitespace + \"*\"),\n rcombinators = new RegExp(\"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\"),\n rdescend = new RegExp(whitespace + \"|>\"),\n rpseudo = new RegExp(pseudos),\n ridentifier = new RegExp(\"^\" + identifier + \"$\"),\n matchExpr = {\n \"ID\": new RegExp(\"^#(\" + identifier + \")\"),\n \"CLASS\": new RegExp(\"^\\\\.(\" + identifier + \")\"),\n \"TAG\": new RegExp(\"^(\" + identifier + \"|[*])\"),\n \"ATTR\": new RegExp(\"^\" + attributes),\n \"PSEUDO\": new RegExp(\"^\" + pseudos),\n \"CHILD\": new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\"),\n \"bool\": new RegExp(\"^(?:\" + booleans + \")$\", \"i\"),\n // For use in libraries implementing .is()\n // We use this for POS matching in `select`\n \"needsContext\": new RegExp(\"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\")\n },\n rhtml = /HTML$/i,\n rinputs = /^(?:input|select|textarea|button)$/i,\n rheader = /^h\\d$/i,\n rnative = /^[^{]+\\{\\s*\\[native \\w/,\n // Easily-parseable/retrievable ID or TAG or CLASS selectors\n rquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n rsibling = /[+~]/,\n // CSS escapes\n // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n runescape = new RegExp(\"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace + \"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\"),\n funescape = function funescape(escape, nonHex) {\n var high = \"0x\" + escape.slice(1) - 0x10000;\n return nonHex ? // Strip the backslash prefix from a non-hex escape sequence\n nonHex : // Replace a hexadecimal escape sequence with the encoded Unicode code point\n // Support: IE <=11+\n // For values outside the Basic Multilingual Plane (BMP), manually construct a\n // surrogate pair\n high < 0 ? String.fromCharCode(high + 0x10000) : String.fromCharCode(high >> 10 | 0xD800, high & 0x3FF | 0xDC00);\n },\n // CSS string/identifier serialization\n // https://drafts.csswg.org/cssom/#common-serializing-idioms\n rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n fcssescape = function fcssescape(ch, asCodePoint) {\n if (asCodePoint) {\n // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n if (ch === \"\\0\") {\n return \"\\uFFFD\";\n } // Control characters and (dependent upon position) numbers get escaped as code points\n\n\n return ch.slice(0, -1) + \"\\\\\" + ch.charCodeAt(ch.length - 1).toString(16) + \" \";\n } // Other potentially-special ASCII characters get backslash-escaped\n\n\n return \"\\\\\" + ch;\n },\n // Used for iframes\n // See setDocument()\n // Removing the function wrapper causes a \"Permission Denied\"\n // error in IE\n unloadHandler = function unloadHandler() {\n setDocument();\n },\n inDisabledFieldset = addCombinator(function (elem) {\n return elem.disabled === true && elem.nodeName.toLowerCase() === \"fieldset\";\n }, {\n dir: \"parentNode\",\n next: \"legend\"\n }); // Optimize for push.apply( _, NodeList )\n\n\n try {\n push.apply(arr = slice.call(preferredDoc.childNodes), preferredDoc.childNodes); // Support: Android<4.0\n // Detect silently failing push.apply\n // eslint-disable-next-line no-unused-expressions\n\n arr[preferredDoc.childNodes.length].nodeType;\n } catch (e) {\n push = {\n apply: arr.length ? // Leverage slice if possible\n function (target, els) {\n pushNative.apply(target, slice.call(els));\n } : // Support: IE<9\n // Otherwise append directly\n function (target, els) {\n var j = target.length,\n i = 0; // Can't trust NodeList.length\n\n while (target[j++] = els[i++]) {}\n\n target.length = j - 1;\n }\n };\n }\n\n function Sizzle(selector, context, results, seed) {\n var m,\n i,\n elem,\n nid,\n match,\n groups,\n newSelector,\n newContext = context && context.ownerDocument,\n // nodeType defaults to 9, since context defaults to document\n nodeType = context ? context.nodeType : 9;\n results = results || []; // Return early from calls with invalid selector or context\n\n if (typeof selector !== \"string\" || !selector || nodeType !== 1 && nodeType !== 9 && nodeType !== 11) {\n return results;\n } // Try to shortcut find operations (as opposed to filters) in HTML documents\n\n\n if (!seed) {\n setDocument(context);\n context = context || document;\n\n if (documentIsHTML) {\n // If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n // (excepting DocumentFragment context, where the methods don't exist)\n if (nodeType !== 11 && (match = rquickExpr.exec(selector))) {\n // ID selector\n if (m = match[1]) {\n // Document context\n if (nodeType === 9) {\n if (elem = context.getElementById(m)) {\n // Support: IE, Opera, Webkit\n // TODO: identify versions\n // getElementById can match elements by name instead of ID\n if (elem.id === m) {\n results.push(elem);\n return results;\n }\n } else {\n return results;\n } // Element context\n\n } else {\n // Support: IE, Opera, Webkit\n // TODO: identify versions\n // getElementById can match elements by name instead of ID\n if (newContext && (elem = newContext.getElementById(m)) && contains(context, elem) && elem.id === m) {\n results.push(elem);\n return results;\n }\n } // Type selector\n\n } else if (match[2]) {\n push.apply(results, context.getElementsByTagName(selector));\n return results; // Class selector\n } else if ((m = match[3]) && support.getElementsByClassName && context.getElementsByClassName) {\n push.apply(results, context.getElementsByClassName(m));\n return results;\n }\n } // Take advantage of querySelectorAll\n\n\n if (support.qsa && !nonnativeSelectorCache[selector + \" \"] && (!rbuggyQSA || !rbuggyQSA.test(selector)) && (nodeType !== 1 || context.nodeName.toLowerCase() !== \"object\")) {\n newSelector = selector;\n newContext = context; // qSA considers elements outside a scoping root when evaluating child or\n // descendant combinators, which is not what we want.\n // In such cases, we work around the behavior by prefixing every selector in the\n // list with an ID selector referencing the scope context.\n // The technique has to be used as well when a leading combinator is used\n // as such selectors are not recognized by querySelectorAll.\n // Thanks to Andrew Dupont for this technique.\n\n if (nodeType === 1 && (rdescend.test(selector) || rcombinators.test(selector))) {\n // Expand context for sibling selectors\n newContext = rsibling.test(selector) && testContext(context.parentNode) || context; // We can use :scope instead of the ID hack if the browser\n // supports it & if we're not changing the context.\n\n if (newContext !== context || !support.scope) {\n // Capture the context ID, setting it first if necessary\n if (nid = context.getAttribute(\"id\")) {\n nid = nid.replace(rcssescape, fcssescape);\n } else {\n context.setAttribute(\"id\", nid = expando);\n }\n } // Prefix every selector in the list\n\n\n groups = tokenize(selector);\n i = groups.length;\n\n while (i--) {\n groups[i] = (nid ? \"#\" + nid : \":scope\") + \" \" + toSelector(groups[i]);\n }\n\n newSelector = groups.join(\",\");\n }\n\n try {\n push.apply(results, newContext.querySelectorAll(newSelector));\n return results;\n } catch (qsaError) {\n nonnativeSelectorCache(selector, true);\n } finally {\n if (nid === expando) {\n context.removeAttribute(\"id\");\n }\n }\n }\n }\n } // All others\n\n\n return select(selector.replace(rtrim, \"$1\"), context, results, seed);\n }\n /**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\n\n\n function createCache() {\n var keys = [];\n\n function cache(key, value) {\n // Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n if (keys.push(key + \" \") > Expr.cacheLength) {\n // Only keep the most recent entries\n delete cache[keys.shift()];\n }\n\n return cache[key + \" \"] = value;\n }\n\n return cache;\n }\n /**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\n\n\n function markFunction(fn) {\n fn[expando] = true;\n return fn;\n }\n /**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\n\n\n function assert(fn) {\n var el = document.createElement(\"fieldset\");\n\n try {\n return !!fn(el);\n } catch (e) {\n return false;\n } finally {\n // Remove from its parent by default\n if (el.parentNode) {\n el.parentNode.removeChild(el);\n } // release memory in IE\n\n\n el = null;\n }\n }\n /**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\n\n\n function addHandle(attrs, handler) {\n var arr = attrs.split(\"|\"),\n i = arr.length;\n\n while (i--) {\n Expr.attrHandle[arr[i]] = handler;\n }\n }\n /**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\n\n\n function siblingCheck(a, b) {\n var cur = b && a,\n diff = cur && a.nodeType === 1 && b.nodeType === 1 && a.sourceIndex - b.sourceIndex; // Use IE sourceIndex if available on both nodes\n\n if (diff) {\n return diff;\n } // Check if b follows a\n\n\n if (cur) {\n while (cur = cur.nextSibling) {\n if (cur === b) {\n return -1;\n }\n }\n }\n\n return a ? 1 : -1;\n }\n /**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\n\n\n function createInputPseudo(type) {\n return function (elem) {\n var name = elem.nodeName.toLowerCase();\n return name === \"input\" && elem.type === type;\n };\n }\n /**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\n\n\n function createButtonPseudo(type) {\n return function (elem) {\n var name = elem.nodeName.toLowerCase();\n return (name === \"input\" || name === \"button\") && elem.type === type;\n };\n }\n /**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\n\n\n function createDisabledPseudo(disabled) {\n // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n return function (elem) {\n // Only certain elements can match :enabled or :disabled\n // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n if (\"form\" in elem) {\n // Check for inherited disabledness on relevant non-disabled elements:\n // * listed form-associated elements in a disabled fieldset\n // https://html.spec.whatwg.org/multipage/forms.html#category-listed\n // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n // * option elements in a disabled optgroup\n // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n // All such elements have a \"form\" property.\n if (elem.parentNode && elem.disabled === false) {\n // Option elements defer to a parent optgroup if present\n if (\"label\" in elem) {\n if (\"label\" in elem.parentNode) {\n return elem.parentNode.disabled === disabled;\n } else {\n return elem.disabled === disabled;\n }\n } // Support: IE 6 - 11\n // Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\n\n return elem.isDisabled === disabled || // Where there is no isDisabled, check manually\n\n /* jshint -W018 */\n elem.isDisabled !== !disabled && inDisabledFieldset(elem) === disabled;\n }\n\n return elem.disabled === disabled; // Try to winnow out elements that can't be disabled before trusting the disabled property.\n // Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n // even exist on them, let alone have a boolean value.\n } else if (\"label\" in elem) {\n return elem.disabled === disabled;\n } // Remaining elements are neither :enabled nor :disabled\n\n\n return false;\n };\n }\n /**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\n\n\n function createPositionalPseudo(fn) {\n return markFunction(function (argument) {\n argument = +argument;\n return markFunction(function (seed, matches) {\n var j,\n matchIndexes = fn([], seed.length, argument),\n i = matchIndexes.length; // Match elements found at the specified indexes\n\n while (i--) {\n if (seed[j = matchIndexes[i]]) {\n seed[j] = !(matches[j] = seed[j]);\n }\n }\n });\n });\n }\n /**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\n\n\n function testContext(context) {\n return context && typeof context.getElementsByTagName !== \"undefined\" && context;\n } // Expose support vars for convenience\n\n\n support = Sizzle.support = {};\n /**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\n\n isXML = Sizzle.isXML = function (elem) {\n var namespace = elem && elem.namespaceURI,\n docElem = elem && (elem.ownerDocument || elem).documentElement; // Support: IE <=8\n // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes\n // https://bugs.jquery.com/ticket/4833\n\n return !rhtml.test(namespace || docElem && docElem.nodeName || \"HTML\");\n };\n /**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\n\n\n setDocument = Sizzle.setDocument = function (node) {\n var hasCompare,\n subWindow,\n doc = node ? node.ownerDocument || node : preferredDoc; // Return early if doc is invalid or already selected\n // Support: IE 11+, Edge 17 - 18+\n // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n // two documents; shallow comparisons work.\n // eslint-disable-next-line eqeqeq\n\n if (doc == document || doc.nodeType !== 9 || !doc.documentElement) {\n return document;\n } // Update global variables\n\n\n document = doc;\n docElem = document.documentElement;\n documentIsHTML = !isXML(document); // Support: IE 9 - 11+, Edge 12 - 18+\n // Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n // Support: IE 11+, Edge 17 - 18+\n // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n // two documents; shallow comparisons work.\n // eslint-disable-next-line eqeqeq\n\n if (preferredDoc != document && (subWindow = document.defaultView) && subWindow.top !== subWindow) {\n // Support: IE 11, Edge\n if (subWindow.addEventListener) {\n subWindow.addEventListener(\"unload\", unloadHandler, false); // Support: IE 9 - 10 only\n } else if (subWindow.attachEvent) {\n subWindow.attachEvent(\"onunload\", unloadHandler);\n }\n } // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,\n // Safari 4 - 5 only, Opera <=11.6 - 12.x only\n // IE/Edge & older browsers don't support the :scope pseudo-class.\n // Support: Safari 6.0 only\n // Safari 6.0 supports :scope but it's an alias of :root there.\n\n\n support.scope = assert(function (el) {\n docElem.appendChild(el).appendChild(document.createElement(\"div\"));\n return typeof el.querySelectorAll !== \"undefined\" && !el.querySelectorAll(\":scope fieldset div\").length;\n });\n /* Attributes\n ---------------------------------------------------------------------- */\n // Support: IE<8\n // Verify that getAttribute really returns attributes and not properties\n // (excepting IE8 booleans)\n\n support.attributes = assert(function (el) {\n el.className = \"i\";\n return !el.getAttribute(\"className\");\n });\n /* getElement(s)By*\n ---------------------------------------------------------------------- */\n // Check if getElementsByTagName(\"*\") returns only elements\n\n support.getElementsByTagName = assert(function (el) {\n el.appendChild(document.createComment(\"\"));\n return !el.getElementsByTagName(\"*\").length;\n }); // Support: IE<9\n\n support.getElementsByClassName = rnative.test(document.getElementsByClassName); // Support: IE<10\n // Check if getElementById returns elements by name\n // The broken getElementById methods don't pick up programmatically-set names,\n // so use a roundabout getElementsByName test\n\n support.getById = assert(function (el) {\n docElem.appendChild(el).id = expando;\n return !document.getElementsByName || !document.getElementsByName(expando).length;\n }); // ID filter and find\n\n if (support.getById) {\n Expr.filter[\"ID\"] = function (id) {\n var attrId = id.replace(runescape, funescape);\n return function (elem) {\n return elem.getAttribute(\"id\") === attrId;\n };\n };\n\n Expr.find[\"ID\"] = function (id, context) {\n if (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n var elem = context.getElementById(id);\n return elem ? [elem] : [];\n }\n };\n } else {\n Expr.filter[\"ID\"] = function (id) {\n var attrId = id.replace(runescape, funescape);\n return function (elem) {\n var node = typeof elem.getAttributeNode !== \"undefined\" && elem.getAttributeNode(\"id\");\n return node && node.value === attrId;\n };\n }; // Support: IE 6 - 7 only\n // getElementById is not reliable as a find shortcut\n\n\n Expr.find[\"ID\"] = function (id, context) {\n if (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n var node,\n i,\n elems,\n elem = context.getElementById(id);\n\n if (elem) {\n // Verify the id attribute\n node = elem.getAttributeNode(\"id\");\n\n if (node && node.value === id) {\n return [elem];\n } // Fall back on getElementsByName\n\n\n elems = context.getElementsByName(id);\n i = 0;\n\n while (elem = elems[i++]) {\n node = elem.getAttributeNode(\"id\");\n\n if (node && node.value === id) {\n return [elem];\n }\n }\n }\n\n return [];\n }\n };\n } // Tag\n\n\n Expr.find[\"TAG\"] = support.getElementsByTagName ? function (tag, context) {\n if (typeof context.getElementsByTagName !== \"undefined\") {\n return context.getElementsByTagName(tag); // DocumentFragment nodes don't have gEBTN\n } else if (support.qsa) {\n return context.querySelectorAll(tag);\n }\n } : function (tag, context) {\n var elem,\n tmp = [],\n i = 0,\n // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n results = context.getElementsByTagName(tag); // Filter out possible comments\n\n if (tag === \"*\") {\n while (elem = results[i++]) {\n if (elem.nodeType === 1) {\n tmp.push(elem);\n }\n }\n\n return tmp;\n }\n\n return results;\n }; // Class\n\n Expr.find[\"CLASS\"] = support.getElementsByClassName && function (className, context) {\n if (typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML) {\n return context.getElementsByClassName(className);\n }\n };\n /* QSA/matchesSelector\n ---------------------------------------------------------------------- */\n // QSA and matchesSelector support\n // matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\n\n rbuggyMatches = []; // qSa(:focus) reports false when true (Chrome 21)\n // We allow this because of a bug in IE8/9 that throws an error\n // whenever `document.activeElement` is accessed on an iframe\n // So, we allow :focus to pass through QSA all the time to avoid the IE error\n // See https://bugs.jquery.com/ticket/13378\n\n rbuggyQSA = [];\n\n if (support.qsa = rnative.test(document.querySelectorAll)) {\n // Build QSA regex\n // Regex strategy adopted from Diego Perini\n assert(function (el) {\n var input; // Select is set to empty string on purpose\n // This is to test IE's treatment of not explicitly\n // setting a boolean content attribute,\n // since its presence should be enough\n // https://bugs.jquery.com/ticket/12359\n\n docElem.appendChild(el).innerHTML = \"\" + \"\"; // Support: IE8, Opera 11-12.16\n // Nothing should be selected when empty strings follow ^= or $= or *=\n // The test attribute must be unknown in Opera but \"safe\" for WinRT\n // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\n if (el.querySelectorAll(\"[msallowcapture^='']\").length) {\n rbuggyQSA.push(\"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\");\n } // Support: IE8\n // Boolean attributes and \"value\" are not treated correctly\n\n\n if (!el.querySelectorAll(\"[selected]\").length) {\n rbuggyQSA.push(\"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\");\n } // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\n\n if (!el.querySelectorAll(\"[id~=\" + expando + \"-]\").length) {\n rbuggyQSA.push(\"~=\");\n } // Support: IE 11+, Edge 15 - 18+\n // IE 11/Edge don't find elements on a `[name='']` query in some cases.\n // Adding a temporary attribute to the document before the selection works\n // around the issue.\n // Interestingly, IE 10 & older don't seem to have the issue.\n\n\n input = document.createElement(\"input\");\n input.setAttribute(\"name\", \"\");\n el.appendChild(input);\n\n if (!el.querySelectorAll(\"[name='']\").length) {\n rbuggyQSA.push(\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" + whitespace + \"*(?:''|\\\"\\\")\");\n } // Webkit/Opera - :checked should return selected option elements\n // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n // IE8 throws error here and will not see later tests\n\n\n if (!el.querySelectorAll(\":checked\").length) {\n rbuggyQSA.push(\":checked\");\n } // Support: Safari 8+, iOS 8+\n // https://bugs.webkit.org/show_bug.cgi?id=136851\n // In-page `selector#id sibling-combinator selector` fails\n\n\n if (!el.querySelectorAll(\"a#\" + expando + \"+*\").length) {\n rbuggyQSA.push(\".#.+[+~]\");\n } // Support: Firefox <=3.6 - 5 only\n // Old Firefox doesn't throw on a badly-escaped identifier.\n\n\n el.querySelectorAll(\"\\\\\\f\");\n rbuggyQSA.push(\"[\\\\r\\\\n\\\\f]\");\n });\n assert(function (el) {\n el.innerHTML = \"\" + \"\"; // Support: Windows 8 Native Apps\n // The type and name attributes are restricted during .innerHTML assignment\n\n var input = document.createElement(\"input\");\n input.setAttribute(\"type\", \"hidden\");\n el.appendChild(input).setAttribute(\"name\", \"D\"); // Support: IE8\n // Enforce case-sensitivity of name attribute\n\n if (el.querySelectorAll(\"[name=d]\").length) {\n rbuggyQSA.push(\"name\" + whitespace + \"*[*^$|!~]?=\");\n } // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n // IE8 throws error here and will not see later tests\n\n\n if (el.querySelectorAll(\":enabled\").length !== 2) {\n rbuggyQSA.push(\":enabled\", \":disabled\");\n } // Support: IE9-11+\n // IE's :disabled selector does not pick up the children of disabled fieldsets\n\n\n docElem.appendChild(el).disabled = true;\n\n if (el.querySelectorAll(\":disabled\").length !== 2) {\n rbuggyQSA.push(\":enabled\", \":disabled\");\n } // Support: Opera 10 - 11 only\n // Opera 10-11 does not throw on post-comma invalid pseudos\n\n\n el.querySelectorAll(\"*,:x\");\n rbuggyQSA.push(\",.*:\");\n });\n }\n\n if (support.matchesSelector = rnative.test(matches = docElem.matches || docElem.webkitMatchesSelector || docElem.mozMatchesSelector || docElem.oMatchesSelector || docElem.msMatchesSelector)) {\n assert(function (el) {\n // Check to see if it's possible to do matchesSelector\n // on a disconnected node (IE 9)\n support.disconnectedMatch = matches.call(el, \"*\"); // This should fail with an exception\n // Gecko does not error, returns false instead\n\n matches.call(el, \"[s!='']:x\");\n rbuggyMatches.push(\"!=\", pseudos);\n });\n }\n\n rbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join(\"|\"));\n rbuggyMatches = rbuggyMatches.length && new RegExp(rbuggyMatches.join(\"|\"));\n /* Contains\n ---------------------------------------------------------------------- */\n\n hasCompare = rnative.test(docElem.compareDocumentPosition); // Element contains another\n // Purposefully self-exclusive\n // As in, an element does not contain itself\n\n contains = hasCompare || rnative.test(docElem.contains) ? function (a, b) {\n var adown = a.nodeType === 9 ? a.documentElement : a,\n bup = b && b.parentNode;\n return a === bup || !!(bup && bup.nodeType === 1 && (adown.contains ? adown.contains(bup) : a.compareDocumentPosition && a.compareDocumentPosition(bup) & 16));\n } : function (a, b) {\n if (b) {\n while (b = b.parentNode) {\n if (b === a) {\n return true;\n }\n }\n }\n\n return false;\n };\n /* Sorting\n ---------------------------------------------------------------------- */\n // Document order sorting\n\n sortOrder = hasCompare ? function (a, b) {\n // Flag for duplicate removal\n if (a === b) {\n hasDuplicate = true;\n return 0;\n } // Sort on method existence if only one input has compareDocumentPosition\n\n\n var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\n if (compare) {\n return compare;\n } // Calculate position if both inputs belong to the same document\n // Support: IE 11+, Edge 17 - 18+\n // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n // two documents; shallow comparisons work.\n // eslint-disable-next-line eqeqeq\n\n\n compare = (a.ownerDocument || a) == (b.ownerDocument || b) ? a.compareDocumentPosition(b) : // Otherwise we know they are disconnected\n 1; // Disconnected nodes\n\n if (compare & 1 || !support.sortDetached && b.compareDocumentPosition(a) === compare) {\n // Choose the first element that is related to our preferred document\n // Support: IE 11+, Edge 17 - 18+\n // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n // two documents; shallow comparisons work.\n // eslint-disable-next-line eqeqeq\n if (a == document || a.ownerDocument == preferredDoc && contains(preferredDoc, a)) {\n return -1;\n } // Support: IE 11+, Edge 17 - 18+\n // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n // two documents; shallow comparisons work.\n // eslint-disable-next-line eqeqeq\n\n\n if (b == document || b.ownerDocument == preferredDoc && contains(preferredDoc, b)) {\n return 1;\n } // Maintain original order\n\n\n return sortInput ? indexOf(sortInput, a) - indexOf(sortInput, b) : 0;\n }\n\n return compare & 4 ? -1 : 1;\n } : function (a, b) {\n // Exit early if the nodes are identical\n if (a === b) {\n hasDuplicate = true;\n return 0;\n }\n\n var cur,\n i = 0,\n aup = a.parentNode,\n bup = b.parentNode,\n ap = [a],\n bp = [b]; // Parentless nodes are either documents or disconnected\n\n if (!aup || !bup) {\n // Support: IE 11+, Edge 17 - 18+\n // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n // two documents; shallow comparisons work.\n\n /* eslint-disable eqeqeq */\n return a == document ? -1 : b == document ? 1 :\n /* eslint-enable eqeqeq */\n aup ? -1 : bup ? 1 : sortInput ? indexOf(sortInput, a) - indexOf(sortInput, b) : 0; // If the nodes are siblings, we can do a quick check\n } else if (aup === bup) {\n return siblingCheck(a, b);\n } // Otherwise we need full lists of their ancestors for comparison\n\n\n cur = a;\n\n while (cur = cur.parentNode) {\n ap.unshift(cur);\n }\n\n cur = b;\n\n while (cur = cur.parentNode) {\n bp.unshift(cur);\n } // Walk down the tree looking for a discrepancy\n\n\n while (ap[i] === bp[i]) {\n i++;\n }\n\n return i ? // Do a sibling check if the nodes have a common ancestor\n siblingCheck(ap[i], bp[i]) : // Otherwise nodes in our document sort first\n // Support: IE 11+, Edge 17 - 18+\n // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n // two documents; shallow comparisons work.\n\n /* eslint-disable eqeqeq */\n ap[i] == preferredDoc ? -1 : bp[i] == preferredDoc ? 1 :\n /* eslint-enable eqeqeq */\n 0;\n };\n return document;\n };\n\n Sizzle.matches = function (expr, elements) {\n return Sizzle(expr, null, null, elements);\n };\n\n Sizzle.matchesSelector = function (elem, expr) {\n setDocument(elem);\n\n if (support.matchesSelector && documentIsHTML && !nonnativeSelectorCache[expr + \" \"] && (!rbuggyMatches || !rbuggyMatches.test(expr)) && (!rbuggyQSA || !rbuggyQSA.test(expr))) {\n try {\n var ret = matches.call(elem, expr); // IE 9's matchesSelector returns false on disconnected nodes\n\n if (ret || support.disconnectedMatch || // As well, disconnected nodes are said to be in a document\n // fragment in IE 9\n elem.document && elem.document.nodeType !== 11) {\n return ret;\n }\n } catch (e) {\n nonnativeSelectorCache(expr, true);\n }\n }\n\n return Sizzle(expr, document, null, [elem]).length > 0;\n };\n\n Sizzle.contains = function (context, elem) {\n // Set document vars if needed\n // Support: IE 11+, Edge 17 - 18+\n // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n // two documents; shallow comparisons work.\n // eslint-disable-next-line eqeqeq\n if ((context.ownerDocument || context) != document) {\n setDocument(context);\n }\n\n return contains(context, elem);\n };\n\n Sizzle.attr = function (elem, name) {\n // Set document vars if needed\n // Support: IE 11+, Edge 17 - 18+\n // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n // two documents; shallow comparisons work.\n // eslint-disable-next-line eqeqeq\n if ((elem.ownerDocument || elem) != document) {\n setDocument(elem);\n }\n\n var fn = Expr.attrHandle[name.toLowerCase()],\n // Don't get fooled by Object.prototype properties (jQuery #13807)\n val = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ? fn(elem, name, !documentIsHTML) : undefined;\n return val !== undefined ? val : support.attributes || !documentIsHTML ? elem.getAttribute(name) : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null;\n };\n\n Sizzle.escape = function (sel) {\n return (sel + \"\").replace(rcssescape, fcssescape);\n };\n\n Sizzle.error = function (msg) {\n throw new Error(\"Syntax error, unrecognized expression: \" + msg);\n };\n /**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\n\n\n Sizzle.uniqueSort = function (results) {\n var elem,\n duplicates = [],\n j = 0,\n i = 0; // Unless we *know* we can detect duplicates, assume their presence\n\n hasDuplicate = !support.detectDuplicates;\n sortInput = !support.sortStable && results.slice(0);\n results.sort(sortOrder);\n\n if (hasDuplicate) {\n while (elem = results[i++]) {\n if (elem === results[i]) {\n j = duplicates.push(i);\n }\n }\n\n while (j--) {\n results.splice(duplicates[j], 1);\n }\n } // Clear input after sorting to release objects\n // See https://github.com/jquery/sizzle/pull/225\n\n\n sortInput = null;\n return results;\n };\n /**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\n\n\n getText = Sizzle.getText = function (elem) {\n var node,\n ret = \"\",\n i = 0,\n nodeType = elem.nodeType;\n\n if (!nodeType) {\n // If no nodeType, this is expected to be an array\n while (node = elem[i++]) {\n // Do not traverse comment nodes\n ret += getText(node);\n }\n } else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {\n // Use textContent for elements\n // innerText usage removed for consistency of new lines (jQuery #11153)\n if (typeof elem.textContent === \"string\") {\n return elem.textContent;\n } else {\n // Traverse its children\n for (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n ret += getText(elem);\n }\n }\n } else if (nodeType === 3 || nodeType === 4) {\n return elem.nodeValue;\n } // Do not include comment or processing instruction nodes\n\n\n return ret;\n };\n\n Expr = Sizzle.selectors = {\n // Can be adjusted by the user\n cacheLength: 50,\n createPseudo: markFunction,\n match: matchExpr,\n attrHandle: {},\n find: {},\n relative: {\n \">\": {\n dir: \"parentNode\",\n first: true\n },\n \" \": {\n dir: \"parentNode\"\n },\n \"+\": {\n dir: \"previousSibling\",\n first: true\n },\n \"~\": {\n dir: \"previousSibling\"\n }\n },\n preFilter: {\n \"ATTR\": function ATTR(match) {\n match[1] = match[1].replace(runescape, funescape); // Move the given value to match[3] whether quoted or unquoted\n\n match[3] = (match[3] || match[4] || match[5] || \"\").replace(runescape, funescape);\n\n if (match[2] === \"~=\") {\n match[3] = \" \" + match[3] + \" \";\n }\n\n return match.slice(0, 4);\n },\n \"CHILD\": function CHILD(match) {\n /* matches from matchExpr[\"CHILD\"]\n \t1 type (only|nth|...)\n \t2 what (child|of-type)\n \t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n \t4 xn-component of xn+y argument ([+-]?\\d*n|)\n \t5 sign of xn-component\n \t6 x of xn-component\n \t7 sign of y-component\n \t8 y of y-component\n */\n match[1] = match[1].toLowerCase();\n\n if (match[1].slice(0, 3) === \"nth\") {\n // nth-* requires argument\n if (!match[3]) {\n Sizzle.error(match[0]);\n } // numeric x and y parameters for Expr.filter.CHILD\n // remember that false/true cast respectively to 0/1\n\n\n match[4] = +(match[4] ? match[5] + (match[6] || 1) : 2 * (match[3] === \"even\" || match[3] === \"odd\"));\n match[5] = +(match[7] + match[8] || match[3] === \"odd\"); // other types prohibit arguments\n } else if (match[3]) {\n Sizzle.error(match[0]);\n }\n\n return match;\n },\n \"PSEUDO\": function PSEUDO(match) {\n var excess,\n unquoted = !match[6] && match[2];\n\n if (matchExpr[\"CHILD\"].test(match[0])) {\n return null;\n } // Accept quoted arguments as-is\n\n\n if (match[3]) {\n match[2] = match[4] || match[5] || \"\"; // Strip excess characters from unquoted arguments\n } else if (unquoted && rpseudo.test(unquoted) && (excess = tokenize(unquoted, true)) && (excess = unquoted.indexOf(\")\", unquoted.length - excess) - unquoted.length)) {\n // excess is a negative index\n match[0] = match[0].slice(0, excess);\n match[2] = unquoted.slice(0, excess);\n } // Return only captures needed by the pseudo filter method (type and argument)\n\n\n return match.slice(0, 3);\n }\n },\n filter: {\n \"TAG\": function TAG(nodeNameSelector) {\n var nodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();\n return nodeNameSelector === \"*\" ? function () {\n return true;\n } : function (elem) {\n return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n };\n },\n \"CLASS\": function CLASS(className) {\n var pattern = classCache[className + \" \"];\n return pattern || (pattern = new RegExp(\"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\")) && classCache(className, function (elem) {\n return pattern.test(typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\");\n });\n },\n \"ATTR\": function ATTR(name, operator, check) {\n return function (elem) {\n var result = Sizzle.attr(elem, name);\n\n if (result == null) {\n return operator === \"!=\";\n }\n\n if (!operator) {\n return true;\n }\n\n result += \"\";\n /* eslint-disable max-len */\n\n return operator === \"=\" ? result === check : operator === \"!=\" ? result !== check : operator === \"^=\" ? check && result.indexOf(check) === 0 : operator === \"*=\" ? check && result.indexOf(check) > -1 : operator === \"$=\" ? check && result.slice(-check.length) === check : operator === \"~=\" ? (\" \" + result.replace(rwhitespace, \" \") + \" \").indexOf(check) > -1 : operator === \"|=\" ? result === check || result.slice(0, check.length + 1) === check + \"-\" : false;\n /* eslint-enable max-len */\n };\n },\n \"CHILD\": function CHILD(type, what, _argument, first, last) {\n var simple = type.slice(0, 3) !== \"nth\",\n forward = type.slice(-4) !== \"last\",\n ofType = what === \"of-type\";\n return first === 1 && last === 0 ? // Shortcut for :nth-*(n)\n function (elem) {\n return !!elem.parentNode;\n } : function (elem, _context, xml) {\n var cache,\n uniqueCache,\n outerCache,\n node,\n nodeIndex,\n start,\n dir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n parent = elem.parentNode,\n name = ofType && elem.nodeName.toLowerCase(),\n useCache = !xml && !ofType,\n diff = false;\n\n if (parent) {\n // :(first|last|only)-(child|of-type)\n if (simple) {\n while (dir) {\n node = elem;\n\n while (node = node[dir]) {\n if (ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) {\n return false;\n }\n } // Reverse direction for :only-* (if we haven't yet done so)\n\n\n start = dir = type === \"only\" && !start && \"nextSibling\";\n }\n\n return true;\n }\n\n start = [forward ? parent.firstChild : parent.lastChild]; // non-xml :nth-child(...) stores cache data on `parent`\n\n if (forward && useCache) {\n // Seek `elem` from a previously-cached index\n // ...in a gzip-friendly way\n node = parent;\n outerCache = node[expando] || (node[expando] = {}); // Support: IE <9 only\n // Defend against cloned attroperties (jQuery gh-1709)\n\n uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});\n cache = uniqueCache[type] || [];\n nodeIndex = cache[0] === dirruns && cache[1];\n diff = nodeIndex && cache[2];\n node = nodeIndex && parent.childNodes[nodeIndex];\n\n while (node = ++nodeIndex && node && node[dir] || (diff = nodeIndex = 0) || start.pop()) {\n // When found, cache indexes on `parent` and break\n if (node.nodeType === 1 && ++diff && node === elem) {\n uniqueCache[type] = [dirruns, nodeIndex, diff];\n break;\n }\n }\n } else {\n // Use previously-cached element index if available\n if (useCache) {\n // ...in a gzip-friendly way\n node = elem;\n outerCache = node[expando] || (node[expando] = {}); // Support: IE <9 only\n // Defend against cloned attroperties (jQuery gh-1709)\n\n uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});\n cache = uniqueCache[type] || [];\n nodeIndex = cache[0] === dirruns && cache[1];\n diff = nodeIndex;\n } // xml :nth-child(...)\n // or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\n\n if (diff === false) {\n // Use the same loop as above to seek `elem` from the start\n while (node = ++nodeIndex && node && node[dir] || (diff = nodeIndex = 0) || start.pop()) {\n if ((ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) && ++diff) {\n // Cache the index of each encountered element\n if (useCache) {\n outerCache = node[expando] || (node[expando] = {}); // Support: IE <9 only\n // Defend against cloned attroperties (jQuery gh-1709)\n\n uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});\n uniqueCache[type] = [dirruns, diff];\n }\n\n if (node === elem) {\n break;\n }\n }\n }\n }\n } // Incorporate the offset, then check against cycle size\n\n\n diff -= last;\n return diff === first || diff % first === 0 && diff / first >= 0;\n }\n };\n },\n \"PSEUDO\": function PSEUDO(pseudo, argument) {\n // pseudo-class names are case-insensitive\n // http://www.w3.org/TR/selectors/#pseudo-classes\n // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n // Remember that setFilters inherits from pseudos\n var args,\n fn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] || Sizzle.error(\"unsupported pseudo: \" + pseudo); // The user may use createPseudo to indicate that\n // arguments are needed to create the filter function\n // just as Sizzle does\n\n if (fn[expando]) {\n return fn(argument);\n } // But maintain support for old signatures\n\n\n if (fn.length > 1) {\n args = [pseudo, pseudo, \"\", argument];\n return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ? markFunction(function (seed, matches) {\n var idx,\n matched = fn(seed, argument),\n i = matched.length;\n\n while (i--) {\n idx = indexOf(seed, matched[i]);\n seed[idx] = !(matches[idx] = matched[i]);\n }\n }) : function (elem) {\n return fn(elem, 0, args);\n };\n }\n\n return fn;\n }\n },\n pseudos: {\n // Potentially complex pseudos\n \"not\": markFunction(function (selector) {\n // Trim the selector passed to compile\n // to avoid treating leading and trailing\n // spaces as combinators\n var input = [],\n results = [],\n matcher = compile(selector.replace(rtrim, \"$1\"));\n return matcher[expando] ? markFunction(function (seed, matches, _context, xml) {\n var elem,\n unmatched = matcher(seed, null, xml, []),\n i = seed.length; // Match elements unmatched by `matcher`\n\n while (i--) {\n if (elem = unmatched[i]) {\n seed[i] = !(matches[i] = elem);\n }\n }\n }) : function (elem, _context, xml) {\n input[0] = elem;\n matcher(input, null, xml, results); // Don't keep the element (issue #299)\n\n input[0] = null;\n return !results.pop();\n };\n }),\n \"has\": markFunction(function (selector) {\n return function (elem) {\n return Sizzle(selector, elem).length > 0;\n };\n }),\n \"contains\": markFunction(function (text) {\n text = text.replace(runescape, funescape);\n return function (elem) {\n return (elem.textContent || getText(elem)).indexOf(text) > -1;\n };\n }),\n // \"Whether an element is represented by a :lang() selector\n // is based solely on the element's language value\n // being equal to the identifier C,\n // or beginning with the identifier C immediately followed by \"-\".\n // The matching of C against the element's language value is performed case-insensitively.\n // The identifier C does not have to be a valid language name.\"\n // http://www.w3.org/TR/selectors/#lang-pseudo\n \"lang\": markFunction(function (lang) {\n // lang value must be a valid identifier\n if (!ridentifier.test(lang || \"\")) {\n Sizzle.error(\"unsupported lang: \" + lang);\n }\n\n lang = lang.replace(runescape, funescape).toLowerCase();\n return function (elem) {\n var elemLang;\n\n do {\n if (elemLang = documentIsHTML ? elem.lang : elem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) {\n elemLang = elemLang.toLowerCase();\n return elemLang === lang || elemLang.indexOf(lang + \"-\") === 0;\n }\n } while ((elem = elem.parentNode) && elem.nodeType === 1);\n\n return false;\n };\n }),\n // Miscellaneous\n \"target\": function target(elem) {\n var hash = window.location && window.location.hash;\n return hash && hash.slice(1) === elem.id;\n },\n \"root\": function root(elem) {\n return elem === docElem;\n },\n \"focus\": function focus(elem) {\n return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n },\n // Boolean properties\n \"enabled\": createDisabledPseudo(false),\n \"disabled\": createDisabledPseudo(true),\n \"checked\": function checked(elem) {\n // In CSS3, :checked should return both checked and selected elements\n // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n var nodeName = elem.nodeName.toLowerCase();\n return nodeName === \"input\" && !!elem.checked || nodeName === \"option\" && !!elem.selected;\n },\n \"selected\": function selected(elem) {\n // Accessing this property makes selected-by-default\n // options in Safari work properly\n if (elem.parentNode) {\n // eslint-disable-next-line no-unused-expressions\n elem.parentNode.selectedIndex;\n }\n\n return elem.selected === true;\n },\n // Contents\n \"empty\": function empty(elem) {\n // http://www.w3.org/TR/selectors/#empty-pseudo\n // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n // but not by others (comment: 8; processing instruction: 7; etc.)\n // nodeType < 6 works because attributes (2) do not appear as children\n for (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n if (elem.nodeType < 6) {\n return false;\n }\n }\n\n return true;\n },\n \"parent\": function parent(elem) {\n return !Expr.pseudos[\"empty\"](elem);\n },\n // Element/input types\n \"header\": function header(elem) {\n return rheader.test(elem.nodeName);\n },\n \"input\": function input(elem) {\n return rinputs.test(elem.nodeName);\n },\n \"button\": function button(elem) {\n var name = elem.nodeName.toLowerCase();\n return name === \"input\" && elem.type === \"button\" || name === \"button\";\n },\n \"text\": function text(elem) {\n var attr;\n return elem.nodeName.toLowerCase() === \"input\" && elem.type === \"text\" && ((attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\");\n },\n // Position-in-collection\n \"first\": createPositionalPseudo(function () {\n return [0];\n }),\n \"last\": createPositionalPseudo(function (_matchIndexes, length) {\n return [length - 1];\n }),\n \"eq\": createPositionalPseudo(function (_matchIndexes, length, argument) {\n return [argument < 0 ? argument + length : argument];\n }),\n \"even\": createPositionalPseudo(function (matchIndexes, length) {\n var i = 0;\n\n for (; i < length; i += 2) {\n matchIndexes.push(i);\n }\n\n return matchIndexes;\n }),\n \"odd\": createPositionalPseudo(function (matchIndexes, length) {\n var i = 1;\n\n for (; i < length; i += 2) {\n matchIndexes.push(i);\n }\n\n return matchIndexes;\n }),\n \"lt\": createPositionalPseudo(function (matchIndexes, length, argument) {\n var i = argument < 0 ? argument + length : argument > length ? length : argument;\n\n for (; --i >= 0;) {\n matchIndexes.push(i);\n }\n\n return matchIndexes;\n }),\n \"gt\": createPositionalPseudo(function (matchIndexes, length, argument) {\n var i = argument < 0 ? argument + length : argument;\n\n for (; ++i < length;) {\n matchIndexes.push(i);\n }\n\n return matchIndexes;\n })\n }\n };\n Expr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"]; // Add button/input type pseudos\n\n for (i in {\n radio: true,\n checkbox: true,\n file: true,\n password: true,\n image: true\n }) {\n Expr.pseudos[i] = createInputPseudo(i);\n }\n\n for (i in {\n submit: true,\n reset: true\n }) {\n Expr.pseudos[i] = createButtonPseudo(i);\n } // Easy API for creating new setFilters\n\n\n function setFilters() {}\n\n setFilters.prototype = Expr.filters = Expr.pseudos;\n Expr.setFilters = new setFilters();\n\n tokenize = Sizzle.tokenize = function (selector, parseOnly) {\n var matched,\n match,\n tokens,\n type,\n soFar,\n groups,\n preFilters,\n cached = tokenCache[selector + \" \"];\n\n if (cached) {\n return parseOnly ? 0 : cached.slice(0);\n }\n\n soFar = selector;\n groups = [];\n preFilters = Expr.preFilter;\n\n while (soFar) {\n // Comma and first run\n if (!matched || (match = rcomma.exec(soFar))) {\n if (match) {\n // Don't consume trailing commas as valid\n soFar = soFar.slice(match[0].length) || soFar;\n }\n\n groups.push(tokens = []);\n }\n\n matched = false; // Combinators\n\n if (match = rcombinators.exec(soFar)) {\n matched = match.shift();\n tokens.push({\n value: matched,\n // Cast descendant combinators to space\n type: match[0].replace(rtrim, \" \")\n });\n soFar = soFar.slice(matched.length);\n } // Filters\n\n\n for (type in Expr.filter) {\n if ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] || (match = preFilters[type](match)))) {\n matched = match.shift();\n tokens.push({\n value: matched,\n type: type,\n matches: match\n });\n soFar = soFar.slice(matched.length);\n }\n }\n\n if (!matched) {\n break;\n }\n } // Return the length of the invalid excess\n // if we're just parsing\n // Otherwise, throw an error or return tokens\n\n\n return parseOnly ? soFar.length : soFar ? Sizzle.error(selector) : // Cache the tokens\n tokenCache(selector, groups).slice(0);\n };\n\n function toSelector(tokens) {\n var i = 0,\n len = tokens.length,\n selector = \"\";\n\n for (; i < len; i++) {\n selector += tokens[i].value;\n }\n\n return selector;\n }\n\n function addCombinator(matcher, combinator, base) {\n var dir = combinator.dir,\n skip = combinator.next,\n key = skip || dir,\n checkNonElements = base && key === \"parentNode\",\n doneName = done++;\n return combinator.first ? // Check against closest ancestor/preceding element\n function (elem, context, xml) {\n while (elem = elem[dir]) {\n if (elem.nodeType === 1 || checkNonElements) {\n return matcher(elem, context, xml);\n }\n }\n\n return false;\n } : // Check against all ancestor/preceding elements\n function (elem, context, xml) {\n var oldCache,\n uniqueCache,\n outerCache,\n newCache = [dirruns, doneName]; // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\n if (xml) {\n while (elem = elem[dir]) {\n if (elem.nodeType === 1 || checkNonElements) {\n if (matcher(elem, context, xml)) {\n return true;\n }\n }\n }\n } else {\n while (elem = elem[dir]) {\n if (elem.nodeType === 1 || checkNonElements) {\n outerCache = elem[expando] || (elem[expando] = {}); // Support: IE <9 only\n // Defend against cloned attroperties (jQuery gh-1709)\n\n uniqueCache = outerCache[elem.uniqueID] || (outerCache[elem.uniqueID] = {});\n\n if (skip && skip === elem.nodeName.toLowerCase()) {\n elem = elem[dir] || elem;\n } else if ((oldCache = uniqueCache[key]) && oldCache[0] === dirruns && oldCache[1] === doneName) {\n // Assign to newCache so results back-propagate to previous elements\n return newCache[2] = oldCache[2];\n } else {\n // Reuse newcache so results back-propagate to previous elements\n uniqueCache[key] = newCache; // A match means we're done; a fail means we have to keep checking\n\n if (newCache[2] = matcher(elem, context, xml)) {\n return true;\n }\n }\n }\n }\n }\n\n return false;\n };\n }\n\n function elementMatcher(matchers) {\n return matchers.length > 1 ? function (elem, context, xml) {\n var i = matchers.length;\n\n while (i--) {\n if (!matchers[i](elem, context, xml)) {\n return false;\n }\n }\n\n return true;\n } : matchers[0];\n }\n\n function multipleContexts(selector, contexts, results) {\n var i = 0,\n len = contexts.length;\n\n for (; i < len; i++) {\n Sizzle(selector, contexts[i], results);\n }\n\n return results;\n }\n\n function condense(unmatched, map, filter, context, xml) {\n var elem,\n newUnmatched = [],\n i = 0,\n len = unmatched.length,\n mapped = map != null;\n\n for (; i < len; i++) {\n if (elem = unmatched[i]) {\n if (!filter || filter(elem, context, xml)) {\n newUnmatched.push(elem);\n\n if (mapped) {\n map.push(i);\n }\n }\n }\n }\n\n return newUnmatched;\n }\n\n function setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {\n if (postFilter && !postFilter[expando]) {\n postFilter = setMatcher(postFilter);\n }\n\n if (postFinder && !postFinder[expando]) {\n postFinder = setMatcher(postFinder, postSelector);\n }\n\n return markFunction(function (seed, results, context, xml) {\n var temp,\n i,\n elem,\n preMap = [],\n postMap = [],\n preexisting = results.length,\n // Get initial elements from seed or context\n elems = seed || multipleContexts(selector || \"*\", context.nodeType ? [context] : context, []),\n // Prefilter to get matcher input, preserving a map for seed-results synchronization\n matcherIn = preFilter && (seed || !selector) ? condense(elems, preMap, preFilter, context, xml) : elems,\n matcherOut = matcher ? // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n postFinder || (seed ? preFilter : preexisting || postFilter) ? // ...intermediate processing is necessary\n [] : // ...otherwise use results directly\n results : matcherIn; // Find primary matches\n\n if (matcher) {\n matcher(matcherIn, matcherOut, context, xml);\n } // Apply postFilter\n\n\n if (postFilter) {\n temp = condense(matcherOut, postMap);\n postFilter(temp, [], context, xml); // Un-match failing elements by moving them back to matcherIn\n\n i = temp.length;\n\n while (i--) {\n if (elem = temp[i]) {\n matcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);\n }\n }\n }\n\n if (seed) {\n if (postFinder || preFilter) {\n if (postFinder) {\n // Get the final matcherOut by condensing this intermediate into postFinder contexts\n temp = [];\n i = matcherOut.length;\n\n while (i--) {\n if (elem = matcherOut[i]) {\n // Restore matcherIn since elem is not yet a final match\n temp.push(matcherIn[i] = elem);\n }\n }\n\n postFinder(null, matcherOut = [], temp, xml);\n } // Move matched elements from seed to results to keep them synchronized\n\n\n i = matcherOut.length;\n\n while (i--) {\n if ((elem = matcherOut[i]) && (temp = postFinder ? indexOf(seed, elem) : preMap[i]) > -1) {\n seed[temp] = !(results[temp] = elem);\n }\n }\n } // Add elements to results, through postFinder if defined\n\n } else {\n matcherOut = condense(matcherOut === results ? matcherOut.splice(preexisting, matcherOut.length) : matcherOut);\n\n if (postFinder) {\n postFinder(null, results, matcherOut, xml);\n } else {\n push.apply(results, matcherOut);\n }\n }\n });\n }\n\n function matcherFromTokens(tokens) {\n var checkContext,\n matcher,\n j,\n len = tokens.length,\n leadingRelative = Expr.relative[tokens[0].type],\n implicitRelative = leadingRelative || Expr.relative[\" \"],\n i = leadingRelative ? 1 : 0,\n // The foundational matcher ensures that elements are reachable from top-level context(s)\n matchContext = addCombinator(function (elem) {\n return elem === checkContext;\n }, implicitRelative, true),\n matchAnyContext = addCombinator(function (elem) {\n return indexOf(checkContext, elem) > -1;\n }, implicitRelative, true),\n matchers = [function (elem, context, xml) {\n var ret = !leadingRelative && (xml || context !== outermostContext) || ((checkContext = context).nodeType ? matchContext(elem, context, xml) : matchAnyContext(elem, context, xml)); // Avoid hanging onto element (issue #299)\n\n checkContext = null;\n return ret;\n }];\n\n for (; i < len; i++) {\n if (matcher = Expr.relative[tokens[i].type]) {\n matchers = [addCombinator(elementMatcher(matchers), matcher)];\n } else {\n matcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches); // Return special upon seeing a positional matcher\n\n if (matcher[expando]) {\n // Find the next relative operator (if any) for proper handling\n j = ++i;\n\n for (; j < len; j++) {\n if (Expr.relative[tokens[j].type]) {\n break;\n }\n }\n\n return setMatcher(i > 1 && elementMatcher(matchers), i > 1 && toSelector( // If the preceding token was a descendant combinator, insert an implicit any-element `*`\n tokens.slice(0, i - 1).concat({\n value: tokens[i - 2].type === \" \" ? \"*\" : \"\"\n })).replace(rtrim, \"$1\"), matcher, i < j && matcherFromTokens(tokens.slice(i, j)), j < len && matcherFromTokens(tokens = tokens.slice(j)), j < len && toSelector(tokens));\n }\n\n matchers.push(matcher);\n }\n }\n\n return elementMatcher(matchers);\n }\n\n function matcherFromGroupMatchers(elementMatchers, setMatchers) {\n var bySet = setMatchers.length > 0,\n byElement = elementMatchers.length > 0,\n superMatcher = function superMatcher(seed, context, xml, results, outermost) {\n var elem,\n j,\n matcher,\n matchedCount = 0,\n i = \"0\",\n unmatched = seed && [],\n setMatched = [],\n contextBackup = outermostContext,\n // We must always have either seed elements or outermost context\n elems = seed || byElement && Expr.find[\"TAG\"](\"*\", outermost),\n // Use integer dirruns iff this is the outermost matcher\n dirrunsUnique = dirruns += contextBackup == null ? 1 : Math.random() || 0.1,\n len = elems.length;\n\n if (outermost) {\n // Support: IE 11+, Edge 17 - 18+\n // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n // two documents; shallow comparisons work.\n // eslint-disable-next-line eqeqeq\n outermostContext = context == document || context || outermost;\n } // Add elements passing elementMatchers directly to results\n // Support: IE<9, Safari\n // Tolerate NodeList properties (IE: \"length\"; Safari: ) matching elements by id\n\n\n for (; i !== len && (elem = elems[i]) != null; i++) {\n if (byElement && elem) {\n j = 0; // Support: IE 11+, Edge 17 - 18+\n // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n // two documents; shallow comparisons work.\n // eslint-disable-next-line eqeqeq\n\n if (!context && elem.ownerDocument != document) {\n setDocument(elem);\n xml = !documentIsHTML;\n }\n\n while (matcher = elementMatchers[j++]) {\n if (matcher(elem, context || document, xml)) {\n results.push(elem);\n break;\n }\n }\n\n if (outermost) {\n dirruns = dirrunsUnique;\n }\n } // Track unmatched elements for set filters\n\n\n if (bySet) {\n // They will have gone through all possible matchers\n if (elem = !matcher && elem) {\n matchedCount--;\n } // Lengthen the array for every element, matched or not\n\n\n if (seed) {\n unmatched.push(elem);\n }\n }\n } // `i` is now the count of elements visited above, and adding it to `matchedCount`\n // makes the latter nonnegative.\n\n\n matchedCount += i; // Apply set filters to unmatched elements\n // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n // equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n // no element matchers and no seed.\n // Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n // case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n // numerically zero.\n\n if (bySet && i !== matchedCount) {\n j = 0;\n\n while (matcher = setMatchers[j++]) {\n matcher(unmatched, setMatched, context, xml);\n }\n\n if (seed) {\n // Reintegrate element matches to eliminate the need for sorting\n if (matchedCount > 0) {\n while (i--) {\n if (!(unmatched[i] || setMatched[i])) {\n setMatched[i] = pop.call(results);\n }\n }\n } // Discard index placeholder values to get only actual matches\n\n\n setMatched = condense(setMatched);\n } // Add matches to results\n\n\n push.apply(results, setMatched); // Seedless set matches succeeding multiple successful matchers stipulate sorting\n\n if (outermost && !seed && setMatched.length > 0 && matchedCount + setMatchers.length > 1) {\n Sizzle.uniqueSort(results);\n }\n } // Override manipulation of globals by nested matchers\n\n\n if (outermost) {\n dirruns = dirrunsUnique;\n outermostContext = contextBackup;\n }\n\n return unmatched;\n };\n\n return bySet ? markFunction(superMatcher) : superMatcher;\n }\n\n compile = Sizzle.compile = function (selector, match\n /* Internal Use Only */\n ) {\n var i,\n setMatchers = [],\n elementMatchers = [],\n cached = compilerCache[selector + \" \"];\n\n if (!cached) {\n // Generate a function of recursive functions that can be used to check each element\n if (!match) {\n match = tokenize(selector);\n }\n\n i = match.length;\n\n while (i--) {\n cached = matcherFromTokens(match[i]);\n\n if (cached[expando]) {\n setMatchers.push(cached);\n } else {\n elementMatchers.push(cached);\n }\n } // Cache the compiled function\n\n\n cached = compilerCache(selector, matcherFromGroupMatchers(elementMatchers, setMatchers)); // Save selector and tokenization\n\n cached.selector = selector;\n }\n\n return cached;\n };\n /**\n * A low-level selection function that works with Sizzle's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\n\n\n select = Sizzle.select = function (selector, context, results, seed) {\n var i,\n tokens,\n token,\n type,\n find,\n compiled = typeof selector === \"function\" && selector,\n match = !seed && tokenize(selector = compiled.selector || selector);\n results = results || []; // Try to minimize operations if there is only one selector in the list and no seed\n // (the latter of which guarantees us context)\n\n if (match.length === 1) {\n // Reduce context if the leading compound selector is an ID\n tokens = match[0] = match[0].slice(0);\n\n if (tokens.length > 2 && (token = tokens[0]).type === \"ID\" && context.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {\n context = (Expr.find[\"ID\"](token.matches[0].replace(runescape, funescape), context) || [])[0];\n\n if (!context) {\n return results; // Precompiled matchers will still verify ancestry, so step up a level\n } else if (compiled) {\n context = context.parentNode;\n }\n\n selector = selector.slice(tokens.shift().value.length);\n } // Fetch a seed set for right-to-left matching\n\n\n i = matchExpr[\"needsContext\"].test(selector) ? 0 : tokens.length;\n\n while (i--) {\n token = tokens[i]; // Abort if we hit a combinator\n\n if (Expr.relative[type = token.type]) {\n break;\n }\n\n if (find = Expr.find[type]) {\n // Search, expanding context for leading sibling combinators\n if (seed = find(token.matches[0].replace(runescape, funescape), rsibling.test(tokens[0].type) && testContext(context.parentNode) || context)) {\n // If seed is empty or no tokens remain, we can return early\n tokens.splice(i, 1);\n selector = seed.length && toSelector(tokens);\n\n if (!selector) {\n push.apply(results, seed);\n return results;\n }\n\n break;\n }\n }\n }\n } // Compile and execute a filtering function if one is not provided\n // Provide `match` to avoid retokenization if we modified the selector above\n\n\n (compiled || compile(selector, match))(seed, context, !documentIsHTML, results, !context || rsibling.test(selector) && testContext(context.parentNode) || context);\n return results;\n }; // One-time assignments\n // Sort stability\n\n\n support.sortStable = expando.split(\"\").sort(sortOrder).join(\"\") === expando; // Support: Chrome 14-35+\n // Always assume duplicates if they aren't passed to the comparison function\n\n support.detectDuplicates = !!hasDuplicate; // Initialize against the default document\n\n setDocument(); // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n // Detached nodes confoundingly follow *each other*\n\n support.sortDetached = assert(function (el) {\n // Should return 1, but returns 4 (following)\n return el.compareDocumentPosition(document.createElement(\"fieldset\")) & 1;\n }); // Support: IE<8\n // Prevent attribute/property \"interpolation\"\n // https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\n\n if (!assert(function (el) {\n el.innerHTML = \"\";\n return el.firstChild.getAttribute(\"href\") === \"#\";\n })) {\n addHandle(\"type|href|height|width\", function (elem, name, isXML) {\n if (!isXML) {\n return elem.getAttribute(name, name.toLowerCase() === \"type\" ? 1 : 2);\n }\n });\n } // Support: IE<9\n // Use defaultValue in place of getAttribute(\"value\")\n\n\n if (!support.attributes || !assert(function (el) {\n el.innerHTML = \"\";\n el.firstChild.setAttribute(\"value\", \"\");\n return el.firstChild.getAttribute(\"value\") === \"\";\n })) {\n addHandle(\"value\", function (elem, _name, isXML) {\n if (!isXML && elem.nodeName.toLowerCase() === \"input\") {\n return elem.defaultValue;\n }\n });\n } // Support: IE<9\n // Use getAttributeNode to fetch booleans when getAttribute lies\n\n\n if (!assert(function (el) {\n return el.getAttribute(\"disabled\") == null;\n })) {\n addHandle(booleans, function (elem, name, isXML) {\n var val;\n\n if (!isXML) {\n return elem[name] === true ? name.toLowerCase() : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null;\n }\n });\n } // EXPOSE\n\n\n var _sizzle = window.Sizzle;\n\n Sizzle.noConflict = function () {\n if (window.Sizzle === Sizzle) {\n window.Sizzle = _sizzle;\n }\n\n return Sizzle;\n };\n\n if (typeof define === \"function\" && define.amd) {\n define(function () {\n return Sizzle;\n }); // Sizzle requires that there be a global window in Common-JS like environments\n } else if (typeof module !== \"undefined\" && module.exports) {\n module.exports = Sizzle;\n } else {\n window.Sizzle = Sizzle;\n } // EXPOSE\n\n})(window);","define([\"../../core\"], function (jQuery) {\n \"use strict\";\n\n return function (elem, dir, until) {\n var matched = [],\n truncate = until !== undefined;\n\n while ((elem = elem[dir]) && elem.nodeType !== 9) {\n if (elem.nodeType === 1) {\n if (truncate && jQuery(elem).is(until)) {\n break;\n }\n\n matched.push(elem);\n }\n }\n\n return matched;\n };\n});","define(function () {\n \"use strict\";\n\n return function (n, elem) {\n var matched = [];\n\n for (; n; n = n.nextSibling) {\n if (n.nodeType === 1 && n !== elem) {\n matched.push(n);\n }\n }\n\n return matched;\n };\n});","define([\"../core\", \"../deferred\"], function (jQuery) {\n \"use strict\"; // These usually indicate a programmer mistake during development,\n // warn about them ASAP rather than swallowing them by default.\n\n var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n jQuery.Deferred.exceptionHook = function (error, stack) {\n // Support: IE 8 - 9 only\n // Console exists when dev tools are open, which can happen at any time\n if (window.console && window.console.warn && error && rerrorNames.test(error.name)) {\n window.console.warn(\"jQuery.Deferred exception: \" + error.message, error.stack, stack);\n }\n };\n});","define([\"../core\"], function (jQuery) {\n \"use strict\";\n\n jQuery.readyException = function (error) {\n window.setTimeout(function () {\n throw error;\n });\n };\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\ndefine([\"./core\", \"./core/access\", \"./core/camelCase\", \"./data/var/dataPriv\", \"./data/var/dataUser\"], function (jQuery, access, camelCase, dataPriv, dataUser) {\n \"use strict\"; //\tImplementation Summary\n //\n //\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n //\t2. Improve the module's maintainability by reducing the storage\n //\t\tpaths to a single mechanism.\n //\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n //\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n //\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n //\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\n var rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n rmultiDash = /[A-Z]/g;\n\n function getData(data) {\n if (data === \"true\") {\n return true;\n }\n\n if (data === \"false\") {\n return false;\n }\n\n if (data === \"null\") {\n return null;\n } // Only convert to a number if it doesn't change the string\n\n\n if (data === +data + \"\") {\n return +data;\n }\n\n if (rbrace.test(data)) {\n return JSON.parse(data);\n }\n\n return data;\n }\n\n function dataAttr(elem, key, data) {\n var name; // If nothing was found internally, try to fetch any\n // data from the HTML5 data-* attribute\n\n if (data === undefined && elem.nodeType === 1) {\n name = \"data-\" + key.replace(rmultiDash, \"-$&\").toLowerCase();\n data = elem.getAttribute(name);\n\n if (typeof data === \"string\") {\n try {\n data = getData(data);\n } catch (e) {} // Make sure we set the data so it isn't changed later\n\n\n dataUser.set(elem, key, data);\n } else {\n data = undefined;\n }\n }\n\n return data;\n }\n\n jQuery.extend({\n hasData: function hasData(elem) {\n return dataUser.hasData(elem) || dataPriv.hasData(elem);\n },\n data: function data(elem, name, _data) {\n return dataUser.access(elem, name, _data);\n },\n removeData: function removeData(elem, name) {\n dataUser.remove(elem, name);\n },\n // TODO: Now that all calls to _data and _removeData have been replaced\n // with direct calls to dataPriv methods, these can be deprecated.\n _data: function _data(elem, name, data) {\n return dataPriv.access(elem, name, data);\n },\n _removeData: function _removeData(elem, name) {\n dataPriv.remove(elem, name);\n }\n });\n jQuery.fn.extend({\n data: function data(key, value) {\n var i,\n name,\n data,\n elem = this[0],\n attrs = elem && elem.attributes; // Gets all values\n\n if (key === undefined) {\n if (this.length) {\n data = dataUser.get(elem);\n\n if (elem.nodeType === 1 && !dataPriv.get(elem, \"hasDataAttrs\")) {\n i = attrs.length;\n\n while (i--) {\n // Support: IE 11 only\n // The attrs elements can be null (#14894)\n if (attrs[i]) {\n name = attrs[i].name;\n\n if (name.indexOf(\"data-\") === 0) {\n name = camelCase(name.slice(5));\n dataAttr(elem, name, data[name]);\n }\n }\n }\n\n dataPriv.set(elem, \"hasDataAttrs\", true);\n }\n }\n\n return data;\n } // Sets multiple values\n\n\n if (_typeof(key) === \"object\") {\n return this.each(function () {\n dataUser.set(this, key);\n });\n }\n\n return access(this, function (value) {\n var data; // The calling jQuery object (element matches) is not empty\n // (and therefore has an element appears at this[ 0 ]) and the\n // `value` parameter was not undefined. An empty jQuery object\n // will result in `undefined` for elem = this[ 0 ] which will\n // throw an exception if an attempt to read a data cache is made.\n\n if (elem && value === undefined) {\n // Attempt to get data from the cache\n // The key will always be camelCased in Data\n data = dataUser.get(elem, key);\n\n if (data !== undefined) {\n return data;\n } // Attempt to \"discover\" the data in\n // HTML5 custom data-* attrs\n\n\n data = dataAttr(elem, key);\n\n if (data !== undefined) {\n return data;\n } // We tried really hard, but the data doesn't exist.\n\n\n return;\n } // Set the data...\n\n\n this.each(function () {\n // We always store the camelCased key\n dataUser.set(this, key, value);\n });\n }, null, value, arguments.length > 1, null, true);\n },\n removeData: function removeData(key) {\n return this.each(function () {\n dataUser.remove(this, key);\n });\n }\n });\n return jQuery;\n});","define([\"../core\", \"../queue\", \"../effects\" // Delay is optional because of this dependency\n], function (jQuery) {\n \"use strict\"; // Based off of the plugin by Clint Helfers, with permission.\n // https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\n\n jQuery.fn.delay = function (time, type) {\n time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;\n type = type || \"fx\";\n return this.queue(type, function (next, hooks) {\n var timeout = window.setTimeout(next, time);\n\n hooks.stop = function () {\n window.clearTimeout(timeout);\n };\n });\n };\n\n return jQuery.fn.delay;\n});","define([\"../core\", \"../data/var/dataPriv\", \"../css/var/isHiddenWithinTree\"], function (jQuery, dataPriv, isHiddenWithinTree) {\n \"use strict\";\n\n var defaultDisplayMap = {};\n\n function getDefaultDisplay(elem) {\n var temp,\n doc = elem.ownerDocument,\n nodeName = elem.nodeName,\n display = defaultDisplayMap[nodeName];\n\n if (display) {\n return display;\n }\n\n temp = doc.body.appendChild(doc.createElement(nodeName));\n display = jQuery.css(temp, \"display\");\n temp.parentNode.removeChild(temp);\n\n if (display === \"none\") {\n display = \"block\";\n }\n\n defaultDisplayMap[nodeName] = display;\n return display;\n }\n\n function showHide(elements, show) {\n var display,\n elem,\n values = [],\n index = 0,\n length = elements.length; // Determine new display value for elements that need to change\n\n for (; index < length; index++) {\n elem = elements[index];\n\n if (!elem.style) {\n continue;\n }\n\n display = elem.style.display;\n\n if (show) {\n // Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n // check is required in this first loop unless we have a nonempty display value (either\n // inline or about-to-be-restored)\n if (display === \"none\") {\n values[index] = dataPriv.get(elem, \"display\") || null;\n\n if (!values[index]) {\n elem.style.display = \"\";\n }\n }\n\n if (elem.style.display === \"\" && isHiddenWithinTree(elem)) {\n values[index] = getDefaultDisplay(elem);\n }\n } else {\n if (display !== \"none\") {\n values[index] = \"none\"; // Remember what we're overwriting\n\n dataPriv.set(elem, \"display\", display);\n }\n }\n } // Set the display of the elements in a second loop to avoid constant reflow\n\n\n for (index = 0; index < length; index++) {\n if (values[index] != null) {\n elements[index].style.display = values[index];\n }\n }\n\n return elements;\n }\n\n jQuery.fn.extend({\n show: function show() {\n return showHide(this, true);\n },\n hide: function hide() {\n return showHide(this);\n },\n toggle: function toggle(state) {\n if (typeof state === \"boolean\") {\n return state ? this.show() : this.hide();\n }\n\n return this.each(function () {\n if (isHiddenWithinTree(this)) {\n jQuery(this).show();\n } else {\n jQuery(this).hide();\n }\n });\n }\n });\n return showHide;\n});","define(function () {\n \"use strict\"; // A method for quickly swapping in/out CSS properties to get correct calculations.\n\n return function (elem, options, callback) {\n var ret,\n name,\n old = {}; // Remember the old values, and insert the new ones\n\n for (name in options) {\n old[name] = elem.style[name];\n elem.style[name] = options[name];\n }\n\n ret = callback.call(elem); // Revert the old values\n\n for (name in options) {\n elem.style[name] = old[name];\n }\n\n return ret;\n };\n});","define([\"./cssExpand\"], function (cssExpand) {\n \"use strict\";\n\n return new RegExp(cssExpand.join(\"|\"), \"i\");\n});","define([\"../core\", \"../css/finalPropName\", \"../css\"], function (jQuery, finalPropName) {\n \"use strict\";\n\n function Tween(elem, options, prop, end, easing) {\n return new Tween.prototype.init(elem, options, prop, end, easing);\n }\n\n jQuery.Tween = Tween;\n Tween.prototype = {\n constructor: Tween,\n init: function init(elem, options, prop, end, easing, unit) {\n this.elem = elem;\n this.prop = prop;\n this.easing = easing || jQuery.easing._default;\n this.options = options;\n this.start = this.now = this.cur();\n this.end = end;\n this.unit = unit || (jQuery.cssNumber[prop] ? \"\" : \"px\");\n },\n cur: function cur() {\n var hooks = Tween.propHooks[this.prop];\n return hooks && hooks.get ? hooks.get(this) : Tween.propHooks._default.get(this);\n },\n run: function run(percent) {\n var eased,\n hooks = Tween.propHooks[this.prop];\n\n if (this.options.duration) {\n this.pos = eased = jQuery.easing[this.easing](percent, this.options.duration * percent, 0, 1, this.options.duration);\n } else {\n this.pos = eased = percent;\n }\n\n this.now = (this.end - this.start) * eased + this.start;\n\n if (this.options.step) {\n this.options.step.call(this.elem, this.now, this);\n }\n\n if (hooks && hooks.set) {\n hooks.set(this);\n } else {\n Tween.propHooks._default.set(this);\n }\n\n return this;\n }\n };\n Tween.prototype.init.prototype = Tween.prototype;\n Tween.propHooks = {\n _default: {\n get: function get(tween) {\n var result; // Use a property on the element directly when it is not a DOM element,\n // or when there is no matching style property that exists.\n\n if (tween.elem.nodeType !== 1 || tween.elem[tween.prop] != null && tween.elem.style[tween.prop] == null) {\n return tween.elem[tween.prop];\n } // Passing an empty string as a 3rd parameter to .css will automatically\n // attempt a parseFloat and fallback to a string if the parse fails.\n // Simple values such as \"10px\" are parsed to Float;\n // complex values such as \"rotate(1rad)\" are returned as-is.\n\n\n result = jQuery.css(tween.elem, tween.prop, \"\"); // Empty strings, null, undefined and \"auto\" are converted to 0.\n\n return !result || result === \"auto\" ? 0 : result;\n },\n set: function set(tween) {\n // Use step hook for back compat.\n // Use cssHook if its there.\n // Use .style if available and use plain properties where available.\n if (jQuery.fx.step[tween.prop]) {\n jQuery.fx.step[tween.prop](tween);\n } else if (tween.elem.nodeType === 1 && (jQuery.cssHooks[tween.prop] || tween.elem.style[finalPropName(tween.prop)] != null)) {\n jQuery.style(tween.elem, tween.prop, tween.now + tween.unit);\n } else {\n tween.elem[tween.prop] = tween.now;\n }\n }\n }\n }; // Support: IE <=9 only\n // Panic based approach to setting things on disconnected nodes\n\n Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n set: function set(tween) {\n if (tween.elem.nodeType && tween.elem.parentNode) {\n tween.elem[tween.prop] = tween.now;\n }\n }\n };\n jQuery.easing = {\n linear: function linear(p) {\n return p;\n },\n swing: function swing(p) {\n return 0.5 - Math.cos(p * Math.PI) / 2;\n },\n _default: \"swing\"\n };\n jQuery.fx = Tween.prototype.init; // Back compat <1.8 extension point\n\n jQuery.fx.step = {};\n});","define([\"./core\", \"./attributes/attr\", \"./attributes/prop\", \"./attributes/classes\", \"./attributes/val\"], function (jQuery) {\n \"use strict\"; // Return jQuery for attributes-only inclusion\n\n return jQuery;\n});","define([\"../core\", \"../core/access\", \"../core/nodeName\", \"./support\", \"../var/rnothtmlwhite\", \"../selector\"], function (jQuery, access, nodeName, support, rnothtmlwhite) {\n \"use strict\";\n\n var boolHook,\n attrHandle = jQuery.expr.attrHandle;\n jQuery.fn.extend({\n attr: function attr(name, value) {\n return access(this, jQuery.attr, name, value, arguments.length > 1);\n },\n removeAttr: function removeAttr(name) {\n return this.each(function () {\n jQuery.removeAttr(this, name);\n });\n }\n });\n jQuery.extend({\n attr: function attr(elem, name, value) {\n var ret,\n hooks,\n nType = elem.nodeType; // Don't get/set attributes on text, comment and attribute nodes\n\n if (nType === 3 || nType === 8 || nType === 2) {\n return;\n } // Fallback to prop when attributes are not supported\n\n\n if (typeof elem.getAttribute === \"undefined\") {\n return jQuery.prop(elem, name, value);\n } // Attribute hooks are determined by the lowercase version\n // Grab necessary hook if one is defined\n\n\n if (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n hooks = jQuery.attrHooks[name.toLowerCase()] || (jQuery.expr.match.bool.test(name) ? boolHook : undefined);\n }\n\n if (value !== undefined) {\n if (value === null) {\n jQuery.removeAttr(elem, name);\n return;\n }\n\n if (hooks && \"set\" in hooks && (ret = hooks.set(elem, value, name)) !== undefined) {\n return ret;\n }\n\n elem.setAttribute(name, value + \"\");\n return value;\n }\n\n if (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n return ret;\n }\n\n ret = jQuery.find.attr(elem, name); // Non-existent attributes return null, we normalize to undefined\n\n return ret == null ? undefined : ret;\n },\n attrHooks: {\n type: {\n set: function set(elem, value) {\n if (!support.radioValue && value === \"radio\" && nodeName(elem, \"input\")) {\n var val = elem.value;\n elem.setAttribute(\"type\", value);\n\n if (val) {\n elem.value = val;\n }\n\n return value;\n }\n }\n }\n },\n removeAttr: function removeAttr(elem, value) {\n var name,\n i = 0,\n // Attribute names can contain non-HTML whitespace characters\n // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n attrNames = value && value.match(rnothtmlwhite);\n\n if (attrNames && elem.nodeType === 1) {\n while (name = attrNames[i++]) {\n elem.removeAttribute(name);\n }\n }\n }\n }); // Hooks for boolean attributes\n\n boolHook = {\n set: function set(elem, value, name) {\n if (value === false) {\n // Remove boolean attributes when set to false\n jQuery.removeAttr(elem, name);\n } else {\n elem.setAttribute(name, name);\n }\n\n return name;\n }\n };\n jQuery.each(jQuery.expr.match.bool.source.match(/\\w+/g), function (_i, name) {\n var getter = attrHandle[name] || jQuery.find.attr;\n\n attrHandle[name] = function (elem, name, isXML) {\n var ret,\n handle,\n lowercaseName = name.toLowerCase();\n\n if (!isXML) {\n // Avoid an infinite loop by temporarily removing this function from the getter\n handle = attrHandle[lowercaseName];\n attrHandle[lowercaseName] = ret;\n ret = getter(elem, name, isXML) != null ? lowercaseName : null;\n attrHandle[lowercaseName] = handle;\n }\n\n return ret;\n };\n });\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\ndefine([\"../core\", \"../core/stripAndCollapse\", \"../var/isFunction\", \"../var/rnothtmlwhite\", \"../data/var/dataPriv\", \"../core/init\"], function (jQuery, stripAndCollapse, isFunction, rnothtmlwhite, dataPriv) {\n \"use strict\";\n\n function getClass(elem) {\n return elem.getAttribute && elem.getAttribute(\"class\") || \"\";\n }\n\n function classesToArray(value) {\n if (Array.isArray(value)) {\n return value;\n }\n\n if (typeof value === \"string\") {\n return value.match(rnothtmlwhite) || [];\n }\n\n return [];\n }\n\n jQuery.fn.extend({\n addClass: function addClass(value) {\n var classes,\n elem,\n cur,\n curValue,\n clazz,\n j,\n finalValue,\n i = 0;\n\n if (isFunction(value)) {\n return this.each(function (j) {\n jQuery(this).addClass(value.call(this, j, getClass(this)));\n });\n }\n\n classes = classesToArray(value);\n\n if (classes.length) {\n while (elem = this[i++]) {\n curValue = getClass(elem);\n cur = elem.nodeType === 1 && \" \" + stripAndCollapse(curValue) + \" \";\n\n if (cur) {\n j = 0;\n\n while (clazz = classes[j++]) {\n if (cur.indexOf(\" \" + clazz + \" \") < 0) {\n cur += clazz + \" \";\n }\n } // Only assign if different to avoid unneeded rendering.\n\n\n finalValue = stripAndCollapse(cur);\n\n if (curValue !== finalValue) {\n elem.setAttribute(\"class\", finalValue);\n }\n }\n }\n }\n\n return this;\n },\n removeClass: function removeClass(value) {\n var classes,\n elem,\n cur,\n curValue,\n clazz,\n j,\n finalValue,\n i = 0;\n\n if (isFunction(value)) {\n return this.each(function (j) {\n jQuery(this).removeClass(value.call(this, j, getClass(this)));\n });\n }\n\n if (!arguments.length) {\n return this.attr(\"class\", \"\");\n }\n\n classes = classesToArray(value);\n\n if (classes.length) {\n while (elem = this[i++]) {\n curValue = getClass(elem); // This expression is here for better compressibility (see addClass)\n\n cur = elem.nodeType === 1 && \" \" + stripAndCollapse(curValue) + \" \";\n\n if (cur) {\n j = 0;\n\n while (clazz = classes[j++]) {\n // Remove *all* instances\n while (cur.indexOf(\" \" + clazz + \" \") > -1) {\n cur = cur.replace(\" \" + clazz + \" \", \" \");\n }\n } // Only assign if different to avoid unneeded rendering.\n\n\n finalValue = stripAndCollapse(cur);\n\n if (curValue !== finalValue) {\n elem.setAttribute(\"class\", finalValue);\n }\n }\n }\n }\n\n return this;\n },\n toggleClass: function toggleClass(value, stateVal) {\n var type = _typeof(value),\n isValidValue = type === \"string\" || Array.isArray(value);\n\n if (typeof stateVal === \"boolean\" && isValidValue) {\n return stateVal ? this.addClass(value) : this.removeClass(value);\n }\n\n if (isFunction(value)) {\n return this.each(function (i) {\n jQuery(this).toggleClass(value.call(this, i, getClass(this), stateVal), stateVal);\n });\n }\n\n return this.each(function () {\n var className, i, self, classNames;\n\n if (isValidValue) {\n // Toggle individual class names\n i = 0;\n self = jQuery(this);\n classNames = classesToArray(value);\n\n while (className = classNames[i++]) {\n // Check each className given, space separated list\n if (self.hasClass(className)) {\n self.removeClass(className);\n } else {\n self.addClass(className);\n }\n } // Toggle whole class name\n\n } else if (value === undefined || type === \"boolean\") {\n className = getClass(this);\n\n if (className) {\n // Store className if set\n dataPriv.set(this, \"__className__\", className);\n } // If the element has a class name or if we're passed `false`,\n // then remove the whole classname (if there was one, the above saved it).\n // Otherwise bring back whatever was previously saved (if anything),\n // falling back to the empty string if nothing was stored.\n\n\n if (this.setAttribute) {\n this.setAttribute(\"class\", className || value === false ? \"\" : dataPriv.get(this, \"__className__\") || \"\");\n }\n }\n });\n },\n hasClass: function hasClass(selector) {\n var className,\n elem,\n i = 0;\n className = \" \" + selector + \" \";\n\n while (elem = this[i++]) {\n if (elem.nodeType === 1 && (\" \" + stripAndCollapse(getClass(elem)) + \" \").indexOf(className) > -1) {\n return true;\n }\n }\n\n return false;\n }\n });\n});","define([\"../core\", \"../core/stripAndCollapse\", \"./support\", \"../core/nodeName\", \"../var/isFunction\", \"../core/init\"], function (jQuery, stripAndCollapse, support, nodeName, isFunction) {\n \"use strict\";\n\n var rreturn = /\\r/g;\n jQuery.fn.extend({\n val: function val(value) {\n var hooks,\n ret,\n valueIsFunction,\n elem = this[0];\n\n if (!arguments.length) {\n if (elem) {\n hooks = jQuery.valHooks[elem.type] || jQuery.valHooks[elem.nodeName.toLowerCase()];\n\n if (hooks && \"get\" in hooks && (ret = hooks.get(elem, \"value\")) !== undefined) {\n return ret;\n }\n\n ret = elem.value; // Handle most common string cases\n\n if (typeof ret === \"string\") {\n return ret.replace(rreturn, \"\");\n } // Handle cases where value is null/undef or number\n\n\n return ret == null ? \"\" : ret;\n }\n\n return;\n }\n\n valueIsFunction = isFunction(value);\n return this.each(function (i) {\n var val;\n\n if (this.nodeType !== 1) {\n return;\n }\n\n if (valueIsFunction) {\n val = value.call(this, i, jQuery(this).val());\n } else {\n val = value;\n } // Treat null/undefined as \"\"; convert numbers to string\n\n\n if (val == null) {\n val = \"\";\n } else if (typeof val === \"number\") {\n val += \"\";\n } else if (Array.isArray(val)) {\n val = jQuery.map(val, function (value) {\n return value == null ? \"\" : value + \"\";\n });\n }\n\n hooks = jQuery.valHooks[this.type] || jQuery.valHooks[this.nodeName.toLowerCase()]; // If set returns undefined, fall back to normal setting\n\n if (!hooks || !(\"set\" in hooks) || hooks.set(this, val, \"value\") === undefined) {\n this.value = val;\n }\n });\n }\n });\n jQuery.extend({\n valHooks: {\n option: {\n get: function get(elem) {\n var val = jQuery.find.attr(elem, \"value\");\n return val != null ? val : // Support: IE <=10 - 11 only\n // option.text throws exceptions (#14686, #14858)\n // Strip and collapse whitespace\n // https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n stripAndCollapse(jQuery.text(elem));\n }\n },\n select: {\n get: function get(elem) {\n var value,\n option,\n i,\n options = elem.options,\n index = elem.selectedIndex,\n one = elem.type === \"select-one\",\n values = one ? null : [],\n max = one ? index + 1 : options.length;\n\n if (index < 0) {\n i = max;\n } else {\n i = one ? index : 0;\n } // Loop through all the selected options\n\n\n for (; i < max; i++) {\n option = options[i]; // Support: IE <=9 only\n // IE8-9 doesn't update selected after form reset (#2551)\n\n if ((option.selected || i === index) && // Don't return options that are disabled or in a disabled optgroup\n !option.disabled && (!option.parentNode.disabled || !nodeName(option.parentNode, \"optgroup\"))) {\n // Get the specific value for the option\n value = jQuery(option).val(); // We don't need an array for one selects\n\n if (one) {\n return value;\n } // Multi-Selects return an array\n\n\n values.push(value);\n }\n }\n\n return values;\n },\n set: function set(elem, value) {\n var optionSet,\n option,\n options = elem.options,\n values = jQuery.makeArray(value),\n i = options.length;\n\n while (i--) {\n option = options[i];\n /* eslint-disable no-cond-assign */\n\n if (option.selected = jQuery.inArray(jQuery.valHooks.option.get(option), values) > -1) {\n optionSet = true;\n }\n /* eslint-enable no-cond-assign */\n\n } // Force browsers to behave consistently when non-matching value is set\n\n\n if (!optionSet) {\n elem.selectedIndex = -1;\n }\n\n return values;\n }\n }\n }\n }); // Radios and checkboxes getter/setter\n\n jQuery.each([\"radio\", \"checkbox\"], function () {\n jQuery.valHooks[this] = {\n set: function set(elem, value) {\n if (Array.isArray(value)) {\n return elem.checked = jQuery.inArray(jQuery(elem).val(), value) > -1;\n }\n }\n };\n\n if (!support.checkOn) {\n jQuery.valHooks[this].get = function (elem) {\n return elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n };\n }\n });\n});","define([\"../core\", \"../data/var/dataPriv\", \"./support\", \"../event\", \"./trigger\"], function (jQuery, dataPriv, support) {\n \"use strict\"; // Support: Firefox <=44\n // Firefox doesn't have focus(in | out) events\n // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n //\n // Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n // focus(in | out) events fire after focus & blur events,\n // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n // Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\n\n if (!support.focusin) {\n jQuery.each({\n focus: \"focusin\",\n blur: \"focusout\"\n }, function (orig, fix) {\n // Attach a single capturing handler on the document while someone wants focusin/focusout\n var handler = function handler(event) {\n jQuery.event.simulate(fix, event.target, jQuery.event.fix(event));\n };\n\n jQuery.event.special[fix] = {\n setup: function setup() {\n // Handle: regular nodes (via `this.ownerDocument`), window\n // (via `this.document`) & document (via `this`).\n var doc = this.ownerDocument || this.document || this,\n attaches = dataPriv.access(doc, fix);\n\n if (!attaches) {\n doc.addEventListener(orig, handler, true);\n }\n\n dataPriv.access(doc, fix, (attaches || 0) + 1);\n },\n teardown: function teardown() {\n var doc = this.ownerDocument || this.document || this,\n attaches = dataPriv.access(doc, fix) - 1;\n\n if (!attaches) {\n doc.removeEventListener(orig, handler, true);\n dataPriv.remove(doc, fix);\n } else {\n dataPriv.access(doc, fix, attaches);\n }\n }\n };\n });\n }\n\n return jQuery;\n});","define([\"../var/support\"], function (support) {\n \"use strict\";\n\n support.focusin = \"onfocusin\" in window;\n return support;\n});","define([\"../ajax\"], function (jQuery) {\n \"use strict\";\n\n jQuery._evalUrl = function (url, options, doc) {\n return jQuery.ajax({\n url: url,\n // Make this explicit, since user can override this through ajaxSetup (#11264)\n type: \"GET\",\n dataType: \"script\",\n cache: true,\n async: false,\n global: false,\n // Only evaluate the response if it is successful (gh-4126)\n // dataFilter is not invoked for failure responses, so using it instead\n // of the default converter is kludgy but it works.\n converters: {\n \"text script\": function textScript() {}\n },\n dataFilter: function dataFilter(response) {\n jQuery.globalEval(response, options, doc);\n }\n });\n };\n\n return jQuery._evalUrl;\n});","define(function () {\n \"use strict\";\n\n return window.location;\n});","define([\"./core\", \"./var/isFunction\", \"./core/init\", \"./manipulation\", // clone\n\"./traversing\" // parent, contents\n], function (jQuery, isFunction) {\n \"use strict\";\n\n jQuery.fn.extend({\n wrapAll: function wrapAll(html) {\n var wrap;\n\n if (this[0]) {\n if (isFunction(html)) {\n html = html.call(this[0]);\n } // The elements to wrap the target around\n\n\n wrap = jQuery(html, this[0].ownerDocument).eq(0).clone(true);\n\n if (this[0].parentNode) {\n wrap.insertBefore(this[0]);\n }\n\n wrap.map(function () {\n var elem = this;\n\n while (elem.firstElementChild) {\n elem = elem.firstElementChild;\n }\n\n return elem;\n }).append(this);\n }\n\n return this;\n },\n wrapInner: function wrapInner(html) {\n if (isFunction(html)) {\n return this.each(function (i) {\n jQuery(this).wrapInner(html.call(this, i));\n });\n }\n\n return this.each(function () {\n var self = jQuery(this),\n contents = self.contents();\n\n if (contents.length) {\n contents.wrapAll(html);\n } else {\n self.append(html);\n }\n });\n },\n wrap: function wrap(html) {\n var htmlIsFunction = isFunction(html);\n return this.each(function (i) {\n jQuery(this).wrapAll(htmlIsFunction ? html.call(this, i) : html);\n });\n },\n unwrap: function unwrap(selector) {\n this.parent(selector).not(\"body\").each(function () {\n jQuery(this).replaceWith(this.childNodes);\n });\n return this;\n }\n });\n return jQuery;\n});","define([\"../core\", \"../selector\"], function (jQuery) {\n \"use strict\";\n\n jQuery.expr.pseudos.hidden = function (elem) {\n return !jQuery.expr.pseudos.visible(elem);\n };\n\n jQuery.expr.pseudos.visible = function (elem) {\n return !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);\n };\n});","define([\"../core\", \"../var/support\", \"../ajax\"], function (jQuery, support) {\n \"use strict\";\n\n jQuery.ajaxSettings.xhr = function () {\n try {\n return new window.XMLHttpRequest();\n } catch (e) {}\n };\n\n var xhrSuccessStatus = {\n // File protocol always yields status code 0, assume 200\n 0: 200,\n // Support: IE <=9 only\n // #1450: sometimes IE returns 1223 when it should be 204\n 1223: 204\n },\n xhrSupported = jQuery.ajaxSettings.xhr();\n support.cors = !!xhrSupported && \"withCredentials\" in xhrSupported;\n support.ajax = xhrSupported = !!xhrSupported;\n jQuery.ajaxTransport(function (options) {\n var _callback, errorCallback; // Cross domain only allowed if supported through XMLHttpRequest\n\n\n if (support.cors || xhrSupported && !options.crossDomain) {\n return {\n send: function send(headers, complete) {\n var i,\n xhr = options.xhr();\n xhr.open(options.type, options.url, options.async, options.username, options.password); // Apply custom fields if provided\n\n if (options.xhrFields) {\n for (i in options.xhrFields) {\n xhr[i] = options.xhrFields[i];\n }\n } // Override mime type if needed\n\n\n if (options.mimeType && xhr.overrideMimeType) {\n xhr.overrideMimeType(options.mimeType);\n } // X-Requested-With header\n // For cross-domain requests, seeing as conditions for a preflight are\n // akin to a jigsaw puzzle, we simply never set it to be sure.\n // (it can always be set on a per-request basis or even using ajaxSetup)\n // For same-domain requests, won't change header if already provided.\n\n\n if (!options.crossDomain && !headers[\"X-Requested-With\"]) {\n headers[\"X-Requested-With\"] = \"XMLHttpRequest\";\n } // Set headers\n\n\n for (i in headers) {\n xhr.setRequestHeader(i, headers[i]);\n } // Callback\n\n\n _callback = function callback(type) {\n return function () {\n if (_callback) {\n _callback = errorCallback = xhr.onload = xhr.onerror = xhr.onabort = xhr.ontimeout = xhr.onreadystatechange = null;\n\n if (type === \"abort\") {\n xhr.abort();\n } else if (type === \"error\") {\n // Support: IE <=9 only\n // On a manual native abort, IE9 throws\n // errors on any property access that is not readyState\n if (typeof xhr.status !== \"number\") {\n complete(0, \"error\");\n } else {\n complete( // File: protocol always yields status 0; see #8605, #14207\n xhr.status, xhr.statusText);\n }\n } else {\n complete(xhrSuccessStatus[xhr.status] || xhr.status, xhr.statusText, // Support: IE <=9 only\n // IE9 has no XHR2 but throws on binary (trac-11426)\n // For XHR2 non-text, let the caller handle it (gh-2498)\n (xhr.responseType || \"text\") !== \"text\" || typeof xhr.responseText !== \"string\" ? {\n binary: xhr.response\n } : {\n text: xhr.responseText\n }, xhr.getAllResponseHeaders());\n }\n }\n };\n }; // Listen to events\n\n\n xhr.onload = _callback();\n errorCallback = xhr.onerror = xhr.ontimeout = _callback(\"error\"); // Support: IE 9 only\n // Use onreadystatechange to replace onabort\n // to handle uncaught aborts\n\n if (xhr.onabort !== undefined) {\n xhr.onabort = errorCallback;\n } else {\n xhr.onreadystatechange = function () {\n // Check readyState before timeout as it changes\n if (xhr.readyState === 4) {\n // Allow onerror to be called first,\n // but that will not handle a native abort\n // Also, save errorCallback to a variable\n // as xhr.onerror cannot be accessed\n window.setTimeout(function () {\n if (_callback) {\n errorCallback();\n }\n });\n }\n };\n } // Create the abort callback\n\n\n _callback = _callback(\"abort\");\n\n try {\n // Do send the request (this may raise an exception)\n xhr.send(options.hasContent && options.data || null);\n } catch (e) {\n // #14683: Only rethrow if this hasn't been notified as an error yet\n if (_callback) {\n throw e;\n }\n }\n },\n abort: function abort() {\n if (_callback) {\n _callback();\n }\n }\n };\n }\n });\n});","define([\"../core\", \"../var/document\", \"../ajax\"], function (jQuery, document) {\n \"use strict\"; // Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\n\n jQuery.ajaxPrefilter(function (s) {\n if (s.crossDomain) {\n s.contents.script = false;\n }\n }); // Install script dataType\n\n jQuery.ajaxSetup({\n accepts: {\n script: \"text/javascript, application/javascript, \" + \"application/ecmascript, application/x-ecmascript\"\n },\n contents: {\n script: /\\b(?:java|ecma)script\\b/\n },\n converters: {\n \"text script\": function textScript(text) {\n jQuery.globalEval(text);\n return text;\n }\n }\n }); // Handle cache's special case and crossDomain\n\n jQuery.ajaxPrefilter(\"script\", function (s) {\n if (s.cache === undefined) {\n s.cache = false;\n }\n\n if (s.crossDomain) {\n s.type = \"GET\";\n }\n }); // Bind script tag hack transport\n\n jQuery.ajaxTransport(\"script\", function (s) {\n // This transport only deals with cross domain or forced-by-attrs requests\n if (s.crossDomain || s.scriptAttrs) {\n var script, _callback;\n\n return {\n send: function send(_, complete) {\n script = jQuery(\"