{"version":3,"sources":["webpack:///./node_modules/core-js/internals/to-string-tag-support.js","webpack:///./node_modules/core-js/internals/function-bind-context.js","webpack:///./node_modules/core-js/internals/object-get-own-property-names-external.js","webpack:///./node_modules/core-js/internals/object-get-own-property-descriptor.js","webpack:///./node_modules/core-js/internals/array-species-constructor.js","webpack:///./node_modules/core-js/internals/ie8-dom-define.js","webpack:///./node_modules/core-js/modules/web.dom-collections.for-each.js","webpack:///./node_modules/core-js/internals/array-for-each.js","webpack:///./node_modules/core-js/internals/an-instance.js","webpack:///./node_modules/core-js/internals/html.js","webpack:///./node_modules/core-js/internals/a-function.js","webpack:///./node_modules/core-js/internals/check-correctness-of-iteration.js","webpack:///./node_modules/core-js/internals/engine-is-ios.js","webpack:///./node_modules/core-js/internals/require-object-coercible.js","webpack:///./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","webpack:///./node_modules/core-js/internals/array-method-has-species-support.js","webpack:///./node_modules/core-js/internals/iterate.js","webpack:///./node_modules/core-js/internals/to-absolute-index.js","webpack:///./node_modules/codemirror/addon/search/match-highlighter.js","webpack:///./node_modules/core-js/internals/export.js","webpack:///./node_modules/core-js/internals/object-get-own-property-names.js","webpack:///./node_modules/core-js/internals/set-species.js","webpack:///./node_modules/core-js/internals/iterator-close.js","webpack:///./node_modules/core-js/internals/task.js","webpack:///./node_modules/core-js/internals/engine-v8-version.js","webpack:///./node_modules/codemirror/addon/selection/active-line.js","webpack:///./node_modules/core-js/internals/engine-user-agent.js","webpack:///./node_modules/core-js/internals/get-iterator-method.js","webpack:///./node_modules/core-js/internals/object-define-properties.js","webpack:///./node_modules/core-js/internals/a-possible-prototype.js","webpack:///./node_modules/core-js/internals/iterators.js","webpack:///./node_modules/core-js/internals/path.js","webpack:///./node_modules/core-js/internals/indexed-object.js","webpack:///./node_modules/core-js/internals/add-to-unscopables.js","webpack:///./node_modules/core-js/internals/host-report-errors.js","webpack:///./node_modules/core-js/internals/species-constructor.js","webpack:///./node_modules/core-js/internals/ordinary-to-primitive.js","webpack:///./node_modules/core-js/internals/native-symbol.js","webpack:///./node_modules/core-js/internals/array-includes.js","webpack:///./node_modules/core-js/modules/es.array.filter.js","webpack:///./node_modules/codemirror/mode/go/go.js","webpack:///./node_modules/core-js/internals/to-length.js","webpack:///./node_modules/core-js/internals/has.js","webpack:///./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack:///./node_modules/@babel/runtime/helpers/esm/objectSpread2.js","webpack:///./node_modules/core-js/internals/shared.js","webpack:///./node_modules/codemirror/lib/codemirror.js","webpack:///./node_modules/core-js/internals/own-keys.js","webpack:///./node_modules/core-js/internals/to-string.js","webpack:///./node_modules/core-js/internals/create-property-descriptor.js","webpack:///./node_modules/core-js/internals/engine-is-node.js","webpack:///./node_modules/core-js/internals/engine-is-browser.js","webpack:///./node_modules/core-js/internals/object-assign.js","webpack:///./node_modules/core-js/internals/array-species-create.js","webpack:///./node_modules/core-js/internals/internal-state.js","webpack:///./node_modules/core-js/internals/redefine.js","webpack:///./node_modules/codemirror/addon/search/matchesonscrollbar.js","webpack:///./node_modules/core-js/internals/object-get-own-property-symbols.js","webpack:///./node_modules/core-js/internals/define-well-known-symbol.js","webpack:///./node_modules/core-js/internals/enum-bug-keys.js","webpack:///./node_modules/@vue/reactivity/dist/reactivity.esm-bundler.js","webpack:///./node_modules/@vue/runtime-core/dist/runtime-core.esm-bundler.js","webpack:///./node_modules/@vue/runtime-dom/dist/runtime-dom.esm-bundler.js","webpack:///./node_modules/core-js/internals/to-object.js","webpack:///./node_modules/core-js/internals/object-create.js","webpack:///./node_modules/core-js/internals/define-iterator.js","webpack:///./node_modules/core-js/internals/native-weak-map.js","webpack:///./node_modules/core-js/internals/an-object.js","webpack:///./node_modules/core-js/internals/descriptors.js","webpack:///./node_modules/core-js/internals/create-property.js","webpack:///./node_modules/core-js/internals/is-object.js","webpack:///./node_modules/core-js/internals/inspect-source.js","webpack:///./node_modules/codemirror/addon/edit/matchbrackets.js","webpack:///./node_modules/core-js/internals/uid.js","webpack:///./node_modules/core-js/internals/create-non-enumerable-property.js","webpack:///./node_modules/core-js/internals/is-forced.js","webpack:///./node_modules/regenerator-runtime/runtime.js","webpack:///./node_modules/codemirror/addon/selection/mark-selection.js","webpack:///./node_modules/core-js/internals/get-iterator.js","webpack:///./node_modules/core-js/internals/object-define-property.js","webpack:///./node_modules/codemirror/addon/scroll/annotatescrollbar.js","webpack:///./node_modules/core-js/internals/create-iterator-constructor.js","webpack:///./node_modules/@vue/shared/dist/shared.esm-bundler.js","webpack:///./node_modules/core-js/internals/to-property-key.js","webpack:///./node_modules/core-js/internals/engine-is-webos-webkit.js","webpack:///./node_modules/core-js/modules/es.symbol.js","webpack:///./node_modules/core-js/internals/array-method-is-strict.js","webpack:///./node_modules/core-js/internals/to-integer.js","webpack:///./node_modules/core-js/modules/es.promise.finally.js","webpack:///./node_modules/core-js/internals/iterators-core.js","webpack:///./node_modules/core-js/internals/object-to-string.js","webpack:///./node_modules/core-js/internals/microtask.js","webpack:///./node_modules/core-js/internals/well-known-symbol.js","webpack:///./node_modules/core-js/modules/es.object.keys.js","webpack:///./node_modules/core-js/internals/array-iteration.js","webpack:///./node_modules/codemirror/addon/search/searchcursor.js","webpack:///./node_modules/core-js/internals/to-primitive.js","webpack:///./node_modules/core-js/internals/is-pure.js","webpack:///./node_modules/core-js/internals/classof-raw.js","webpack:///./node_modules/core-js/internals/shared-store.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/core-js/internals/object-keys-internal.js","webpack:///./node_modules/core-js/internals/document-create-element.js","webpack:///./node_modules/core-js/modules/es.object.assign.js","webpack:///./node_modules/core-js/internals/promise-resolve.js","webpack:///./node_modules/core-js/internals/set-global.js","webpack:///./node_modules/core-js/internals/hidden-keys.js","webpack:///./node_modules/core-js/internals/fails.js","webpack:///./node_modules/core-js/internals/get-built-in.js","webpack:///./node_modules/core-js/internals/object-property-is-enumerable.js","webpack:///./node_modules/core-js/internals/object-set-prototype-of.js","webpack:///./node_modules/core-js/modules/es.object.to-string.js","webpack:///./node_modules/core-js/internals/set-to-string-tag.js","webpack:///./node_modules/core-js/internals/engine-is-ios-pebble.js","webpack:///./node_modules/codemirror/addon/display/placeholder.js","webpack:///./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js","webpack:///./node_modules/core-js/internals/is-symbol.js","webpack:///./node_modules/core-js/internals/global.js","webpack:///./node_modules/core-js/modules/es.object.get-own-property-descriptors.js","webpack:///./node_modules/core-js/internals/object-keys.js","webpack:///./node_modules/core-js/internals/object-get-prototype-of.js","webpack:///./node_modules/core-js/internals/correct-prototype-getter.js","webpack:///./node_modules/core-js/modules/es.array.iterator.js","webpack:///./node_modules/core-js/internals/redefine-all.js","webpack:///./node_modules/core-js/modules/es.object.get-own-property-descriptor.js","webpack:///./node_modules/core-js/internals/well-known-symbol-wrapped.js","webpack:///./node_modules/core-js/internals/perform.js","webpack:///./node_modules/core-js/modules/es.promise.js","webpack:///./node_modules/core-js/internals/copy-constructor-properties.js","webpack:///./node_modules/core-js/internals/is-array.js","webpack:///./node_modules/core-js/internals/is-array-iterator-method.js","webpack:///./node_modules/codemirror/mode/meta.js","webpack:///./node_modules/core-js/internals/new-promise-capability.js","webpack:///./node_modules/codemirror/addon/display/autorefresh.js","webpack:///./node_modules/core-js/internals/classof.js","webpack:///./node_modules/core-js/internals/shared-key.js","webpack:///./node_modules/core-js/internals/to-indexed-object.js","webpack:///./node_modules/core-js/internals/dom-iterables.js","webpack:///./node_modules/core-js/internals/use-symbol-as-uid.js","webpack:///./node_modules/core-js/internals/native-promise-constructor.js"],"names":["wellKnownSymbol","TO_STRING_TAG","test","module","exports","String","aFunction","fn","that","length","undefined","call","a","b","c","apply","arguments","toIndexedObject","$getOwnPropertyNames","f","toString","windowNames","window","Object","getOwnPropertyNames","getWindowNames","it","error","slice","DESCRIPTORS","propertyIsEnumerableModule","createPropertyDescriptor","toPropertyKey","has","IE8_DOM_DEFINE","$getOwnPropertyDescriptor","getOwnPropertyDescriptor","O","P","isObject","isArray","SPECIES","originalArray","C","constructor","Array","prototype","fails","createElement","defineProperty","get","global","DOMIterables","forEach","createNonEnumerableProperty","COLLECTION_NAME","Collection","CollectionPrototype","$forEach","arrayMethodIsStrict","STRICT_METHOD","callbackfn","this","Constructor","name","TypeError","getBuiltIn","ITERATOR","SAFE_CLOSING","called","iteratorWithReturn","next","done","from","exec","SKIP_CLOSING","ITERATION_SUPPORT","object","userAgent","asyncGeneratorStep","gen","resolve","reject","_next","_throw","key","arg","info","value","Promise","then","_asyncToGenerator","self","args","err","V8_VERSION","METHOD_NAME","array","foo","Boolean","anObject","isArrayIteratorMethod","toLength","bind","getIterator","getIteratorMethod","iteratorClose","Result","stopped","result","iterable","unboundFunction","options","iterator","iterFn","index","step","AS_ENTRIES","IS_ITERATOR","INTERRUPTED","stop","condition","callFn","toInteger","max","Math","min","integer","mod","CodeMirror","defaults","style","minChars","delay","wordsOnly","annotateScrollbar","showToken","trim","State","hasOwnProperty","overlay","timeout","matchesonscroll","active","cursorActivity","cm","state","matchHighlighter","hasFocus","scheduleHighlight","onFocus","clearTimeout","setTimeout","highlightMatches","addOverlay","query","hasBoundary","makeOverlay","showMatchesOnScrollbar","searchFor","RegExp","charAt","replace","className","removeOverlay","clear","operation","somethingSelected","getCursor","to","line","isWord","selection","getRange","re","cur","getLine","start","ch","end","str","match","pos","chr","boundariesAround","stream","string","token","skipTo","skipToEnd","defineOption","val","old","Init","off","on","redefine","setGlobal","copyConstructorProperties","isForced","source","FORCED","target","targetProperty","sourceProperty","descriptor","TARGET","GLOBAL","STATIC","stat","noTargetGet","forced","sham","internalObjectKeys","enumBugKeys","hiddenKeys","concat","definePropertyModule","CONSTRUCTOR_NAME","configurable","kind","innerResult","innerError","location","defer","channel","port","html","IS_IOS","IS_NODE","set","setImmediate","clearImmediate","process","MessageChannel","Dispatch","counter","queue","ONREADYSTATECHANGE","run","id","runner","listener","event","data","post","postMessage","protocol","host","argumentsLength","i","push","Function","nextTick","now","port2","port1","onmessage","addEventListener","importScripts","appendChild","removeChild","version","Deno","versions","v8","split","WRAP_CLASS","BACK_CLASS","GUTT_CLASS","clearActiveLines","activeLines","removeLineClass","sameArray","updateActiveLines","ranges","range","option","getOption","nonEmpty","anchor","head","empty","getLineHandleVisualStart","addLineClass","selectionChange","sel","prev","listSelections","classof","Iterators","objectKeys","defineProperties","Properties","keys","propertyIsEnumerable","create","UNSCOPABLES","ArrayPrototype","console","defaultConstructor","S","input","pref","valueOf","getOwnPropertySymbols","symbol","Symbol","toAbsoluteIndex","createMethod","IS_INCLUDES","$this","el","fromIndex","includes","indexOf","$","$filter","filter","arrayMethodHasSpeciesSupport","HAS_SPECIES_SUPPORT","proto","defineMode","config","curPunc","indentUnit","keywords","atoms","isOperatorChar","tokenBase","tokenize","tokenString","eat","tokenComment","eatWhile","current","quote","escaped","maybeEnd","Context","indented","column","type","align","pushContext","col","context","popContext","t","startState","basecolumn","startOfLine","ctx","sol","indentation","eatSpace","indent","textAfter","Pass","firstChar","closing","electricChars","closeBrackets","fold","blockCommentStart","blockCommentEnd","lineComment","defineMIME","argument","toObject","hasOwn","_defineProperty","obj","enumerable","writable","ownKeys","enumerableOnly","symbols","sym","_objectSpread2","getOwnPropertyDescriptors","IS_PURE","store","mode","copyright","factory","navigator","platform","gecko","ie_upto10","ie_11up","edge","ie","ie_version","document","documentMode","webkit","qtwebkit","chrome","presto","safari","vendor","mac_geMountainLion","phantom","ios","maxTouchPoints","android","mobile","mac","chromeOS","windows","presto_version","Number","flipCtrlCmd","captureRightClick","classTest","cls","rmClass","node","after","removeChildren","e","count","childNodes","firstChild","removeChildrenAndAdd","parent","elt","tag","content","cssText","createTextNode","eltP","setAttribute","contains","child","nodeType","parentNode","activeElt","activeElement","body","shadowRoot","addClass","joinClasses","as","createRange","endNode","r","setEnd","setStart","createTextRange","moveToElementText","collapse","moveEnd","moveStart","selectInput","select","copyObj","overwrite","prop","countColumn","tabSize","startIndex","startValue","search","n","nextTab","selectionStart","selectionEnd","_e","Delayed","time","handler","onTimeout","Date","ms","scrollerGap","sel_dontScroll","scroll","sel_mouse","origin","sel_move","findColumn","goal","skipped","spaceStrs","spaceStr","lst","arr","map","out","insertSorted","score","priority","splice","nothing","createObj","base","props","inst","nonASCIISingleCaseWordChar","isWordCharBasic","toUpperCase","toLowerCase","isWordChar","helper","isEmpty","extendingChars","isExtendingChar","charCodeAt","skipExtendingChars","dir","findFirst","pred","midF","mid","ceil","floor","iterateBidiSections","order","found","part","level","bidiOther","getBidiPartAt","sticky","bidiOrdering","lowTypes","arabicTypes","charType","code","bidiRE","isNeutral","isStrong","countsAsLeft","countsAsNum","BidiSpan","direction","outerType","len","types","i$1","i$2","type$1","i$3","prev$1","type$2","i$4","type$3","j","i$5","cur$1","type$4","i$6","end$1","before","replace$1","j$1","m","i$7","at","isRTL","j$2","nstart","unshift","reverse","getOrder","text","noHandlers","emitter","attachEvent","_handlers","getHandlers","removeEventListener","detachEvent","signal","handlers","signalDOMEvent","override","preventDefault","defaultPrevented","e_defaultPrevented","codemirrorIgnore","signalCursorActivity","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","l","nl","rt","hasSelection","getSelection","te","ownerDocument","parentElement","compareEndPoints","hasCopyEvent","oncopy","badZoomedRects","hasBadZoomedRects","normal","fromRange","abs","modes","mimeModes","dependencies","mime","spec","resolveMode","getMode","mfactory","modeObj","modeExtensions","exts","helperType","modeProps","prop$1","extendMode","properties","copyState","nstate","innerMode","a1","a2","StringStream","lineOracle","lastColumnPos","lastColumnValue","lineStart","doc","first","size","Error","chunk","lines","children","sz","chunkSize","getBetween","iter","getLines","updateLineHeight","height","diff","lineNo","no","lineAtHeight","h","outer","lh","isLine","lineNumberFor","lineNumberFormatter","firstLineNumber","Pos","cmp","equalCursorPos","copyPos","x","maxPos","minPos","clipLine","clipPos","last","clipToLen","linelen","clipPosArray","eol","peek","ok","backUp","pattern","consume","caseInsensitive","cased","substr","hideFirstChars","inner","lookAhead","oracle","baseToken","SavedContext","maxLookAhead","baseTokens","baseTokenPos","highlightLine","forceToEnd","st","modeGen","lineClasses","runMode","loop","o","overlays","i_end","opaque","styles","classes","bgClass","textClass","getLineStyles","updateFrontier","getContextBefore","resetState","maxHighlightLength","stateAfter","save","styleClasses","highlightFrontier","modeFrontier","precise","display","findStartLine","saved","fromSaved","processLine","viewFrom","viewTo","nextLine","startAt","callBlankLine","readToken","blankLine","copy","Token","takeToken","asArray","tokens","extractLineClasses","output","lineClass","flattenSpans","curStart","curStyle","addModeClass","mName","minindent","minline","lim","retreatFrontier","sawReadOnlySpans","sawCollapsedSpans","seeReadOnlySpans","seeCollapsedSpans","MarkedSpan","marker","getMarkedSpanFor","spans","span","removeMarkedSpan","addMarkedSpan","op","inThisOp","WeakSet","markedSpans","add","attachLine","markedSpansBefore","startCh","isInsert","nw","startsBefore","inclusiveLeft","insertLeft","endsAfter","inclusiveRight","markedSpansAfter","endCh","stretchSpansOverChange","change","full","oldFirst","oldLast","sameLine","offset","span$1","found$1","clearEmptySpans","newMarkers","gapMarkers","gap","clearWhenEmpty","removeReadOnlyRanges","markers","mark","readOnly","parts","mk","find","p","newParts","dfrom","dto","detachMarkedSpans","detachLine","attachMarkedSpans","extraLeft","extraRight","compareCollapsedMarkers","lenDiff","aPos","bPos","fromCmp","toCmp","collapsedSpanAtSide","sps","sp","collapsed","collapsedSpanAtStart","collapsedSpanAtEnd","collapsedSpanAround","conflictingCollapsedRange","visualLine","merged","visualLineEnd","visualLineContinued","visualLineNo","lineN","vis","visualLineEndNo","lastLine","lineIsHidden","widgetNode","lineIsHiddenInner","heightAtLine","lineObj","lineLength","findMaxLine","d","maxLine","maxLineLength","maxLineChanged","Line","estimateHeight","updateLine","estHeight","cleanUpLine","styleToClassCache","styleToClassCacheWithMode","interpretTokenStyle","cache","buildLineContent","lineView","builder","pre","trailingSpace","splitSpaces","rest","addToken","buildToken","buildTokenBadBidi","allowFrontierUpdate","externalMeasured","insertLineContent","maps","caches","lastChild","querySelector","defaultSpecialCharPlaceholder","title","startStyle","endStyle","css","attributes","displayText","special","specialChars","mustWrap","createDocumentFragment","lastIndex","txt$1","tabWidth","specialCharPlaceholder","fullStyle","attr","trailingBefore","spaceBefore","buildCollapsedSpan","ignoreWidget","widget","needsContentAttribute","setUneditable","allText","spanStyle","spanEndStyle","spanStartStyle","nextChange","Infinity","foundBookmarks","endStyles","upto","tokenText","LineView","hidden","buildViewArray","nextPos","view","operationGroup","pushOperation","ops","ownsGroup","delayedCallbacks","fireCallbacksForOps","group","callbacks","cursorActivityCalled","finishOperation","endCb","orphanDelayedCallbacks","signalLater","list","fireOrphanDelayed","delayed","updateLineForChanges","dims","changes","updateLineText","updateLineGutter","updateLineClasses","updateLineWidgets","ensureLineWrapped","replaceChild","zIndex","updateLineBackground","background","wrap","insertBefore","getLineContent","ext","built","wrapClass","gutter","gutterBackground","gutterClass","fixedGutter","fixedPos","gutterTotalWidth","gutterMarkers","lineNumbers","wrap$1","gutterWrap","lineNumber","gutterLeft","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","parseInt","paddingRight","isNaN","scrollGap","nativeBarWidth","displayWidth","scroller","barWidth","displayHeight","clientHeight","barHeight","ensureLineHeights","rect","wrapping","lineWrapping","curWidth","heights","rects","getClientRects","bottom","top","mapFromLineView","updateExternalMeasurement","lineMeasure","measureChar","bias","measureCharPrepared","prepareMeasureForLine","findViewForLine","findViewIndex","getDimensions","forceUpdate","hasHeights","prepared","varHeight","measureCharInner","bogus","rtop","rbottom","measureText","nullRect","nodeAndOffsetInLineMap","mStart","mEnd","coverStart","coverEnd","getUsefulRect","place","maybeUpdateRectForZooming","rSpan","charWidth","rbot","bot","singleCursorHeightPerLine","screen","logicalXDPI","deviceXDPI","scaleX","scaleY","logicalYDPI","deviceYDPI","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","invert","other","estimateCoords","PosWithInfo","outside","xRel","coordsChar","y","coordsCharInner","rangeEnd","wrappedLineExtent","begin","wrappedLineExtentChar","targetTop","boxIsAfter","box","ltr","coordsBidiPartWrapped","coordsBidiPart","baseX","chAround","boxAround","atLeft","atStart","_lineNo","ref","closestDist","endX","dist","textHeight","clientLeft","offsetLeft","compensateForHScroll","th","perLine","widgetsHeight","estimateLineHeights","est","posFromMouse","liberal","forRect","space","clientX","clientY","e$1","colDiff","round","regChange","lendiff","updateLineNumbers","viewChanged","resetView","cut","viewCuttingPoint","cut$1","cutTop","cutBot","regLineChange","oldN","newN","adjustView","countDirtyView","dirty","updateSelection","showSelection","prepareSelection","primary","curFragment","cursors","selFragment","primIndex","showCursorWhenSelecting","drawSelectionCursor","drawSelectionRange","cursor","cursorHeight","getWrapperElement","charPos","otherCursor","cmpCoords","fragment","padding","leftSide","rightSide","sizerWidth","docLTR","drawForLine","fromArg","toArg","lineLen","wrapX","side","extent","fromPos","toPos","openStart","openEnd","openLeft","openRight","topLeft","topRight","botLeft","botRight","sFrom","sTo","fromLine","toLine","singleVLine","leftEnd","rightStart","restartBlink","focused","clearInterval","blinker","cursorDiv","visibility","cursorBlinkRate","setInterval","onBlur","ensureFocus","focus","delayBlurEvent","delayingBlurEvent","draggingText","selForContextMenu","reset","receivedFocus","shift","updateHeightsInViewport","prevBottom","lineDiv","viewTop","oldHeight","mustScroll","updateWidgetHeight","chWidth","w","visibleLines","viewport","ensure","ensureFrom","ensureTo","maybeScrollWindow","doScroll","innerHeight","scrollNode","scrollIntoView","scrollPosIntoView","margin","limit","changed","endCoords","scrollPos","calculateScrollPos","startTop","startLeft","updateScrollTop","setScrollLeft","snapMargin","screentop","docBottom","atTop","atBottom","newTop","gutterSpace","screenleft","screenw","tooWide","addToScrollTop","resolveScrollToPos","ensureCursorVisible","scrollToPos","cursorScrollMargin","scrollToCoords","scrollToRange","scrollToCoordsRange","sPos","updateDisplaySimple","setScrollTop","startWorker","forceScroll","scrollHeight","scrollbars","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","maybeDisable","elementFromPoint","NullScrollbars","updateScrollbars","startWidth","startHeight","updateScrollbarsInner","sizes","paddingBottom","heightForcer","borderBottom","scrollbarFiller","coverGutterNextToScrollbar","gutterFiller","scrollbarModel","initScrollbars","scrollbarStyle","axis","nextOpId","startOperation","updateInput","typing","changeObjs","selectionChanged","updateMaxLine","markArrays","endOperation","endOperations","endOperation_R1","endOperation_W1","endOperation_R2","endOperation_W2","endOperation_finish","maybeClipScrollbars","mustUpdate","DisplayUpdate","updatedDisplay","updateDisplayIfNeeded","barMeasure","adjustWidthTo","maxScrollLeft","preparedSelection","takeFocus","setDocumentHeight","postUpdateDisplay","wheelStartX","wheelStartY","maybeHiddenMarkers","unhidden","maybeUnhiddenMarkers","finish","runInOp","methodOp","docMethodOp","highlight","highlightWorker","workTime","changedLines","oldStyles","highlighted","oldCls","newCls","ischange","workDelay","force","visible","editorIsHidden","wrapperHeight","oldDisplayWidth","events","scrollbarsClipped","marginBottom","borderRightWidth","selectionSnapshot","anchorNode","extend","anchorOffset","focusNode","focusOffset","restoreSelection","snapshot","nodeName","removeAllRanges","addRange","renderedView","maybeUpdateLineNumberWidth","viewportMargin","different","lastWrapHeight","lastWrapWidth","toUpdate","selSnapshot","patchDisplay","selectionDiv","reportedViewFrom","reportedViewTo","updateNumbersFrom","container","rm","currentWheelTarget","updateNumber","updateGutterSpace","alignWidgets","comp","innerW","lineGutter","lineNumInnerWidth","lineNumWidth","getGutters","sawLineNumbers","renderGutters","specs","gElt","updateGutters","Display","draggable","wheelDX","wheelDY","activeTouch","init","wheelSamples","wheelPixelsPerUnit","wheelEventDelta","dx","wheelDeltaX","dy","wheelDeltaY","detail","HORIZONTAL_AXIS","VERTICAL_AXIS","wheelDelta","wheelEventPixels","delta","onScrollWheel","pixelsPerUnit","deltaMode","deltaX","deltaY","canScrollX","canScrollY","pixels","movedX","movedY","sample","Selection","equals","here","there","deepCopy","Range","normalizeSelection","mayTouch","selectionsMayTouch","prim","sort","inv","simpleSelection","changeEnd","adjustForChange","computeSelAfterChange","offsetPos","computeReplacedSel","hint","oldPrev","newPrev","loadMode","modeOption","resetModeState","isWholeLineUpdate","wholeLineUpdateBefore","updateDoc","spansFor","linesFor","firstLine","lastText","lastSpans","nlines","insert","remove","added","added$1","added$2","linkedDocs","sharedHistOnly","propagate","skip","sharedHist","linked","rel","shared","attachDoc","setDirectionClass","directionChanged","History","undone","undoDepth","lastModTime","lastSelTime","lastOp","lastSelOp","lastOrigin","lastSelOrigin","generation","maxGeneration","historyChangeFromChange","histChange","attachLocalSpans","clearSelectionEvents","pop","lastChangeEvent","hist","addChangeToHistory","selAfter","opId","history","historyEventDelay","pushSelectionToHistory","selectionEventCanBeMerged","addSelectionToHistory","clearRedo","dest","existing","removeClearedSpans","explicitlyCleared","getOldSpans","mergeOldSpans","stretched","oldCur","stretchCur","copyHistoryArray","newGroup","instantiateSel","newChanges","extendRange","posBefore","extendSelection","setSelection","extendSelections","heads","newSel","replaceOneSelection","setSimpleSelection","filterSelectionChange","setSelectionReplaceHistory","setSelectionNoUndo","NaN","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","makeChangeInner","makeChangeSingleDoc","rebased","rebaseHist","makeChangeFromHistory","allowSelectionOnly","suppress","antiChanges","returned","v","shiftDoc","distance","removed","makeChangeSingleDocInEditor","recomputeMaxLength","checkWidthStart","changesHandler","changeHandler","replaceRange","assign","splitLines","rebaseHistSelSingle","rebaseHistArray","sub","copied","changeLine","handle","changeType","LeafChunk","BranchChunk","removeInner","insertInner","iterN","remaining","leaf","maybeSpill","me","spilled","sibling","myIndex","used","LineWidget","opt","adjustScrollWhenAboveVisible","addLineWidget","insertAt","aboveVisible","this$1","oldH","nextMarkerId","TextMarker","markText","markTextShared","replacedWith","addToHistory","curLine","clearOnEnter","clearHistory","withOp","visual","dHeight","SharedTextMarker","cloneNode","isParent","findSharedMarkers","findMarks","copySharedMarkers","mFrom","mTo","subMark","detachSharedMarkers","subMarker","nextDocId","Doc","lineSep","cleanGeneration","getValue","join","lineSeparator","setValue","getLineHandle","getLineNumber","lineCount","setCursor","extendSelectionsBy","setSelections","addSelection","getSelections","replaceSelection","dup","replaceSelections","undo","redo","undoSelection","redoSelection","setExtending","getExtending","historySize","markClean","changeGeneration","forceSplit","isClean","getHistory","setHistory","histData","setGutterMarker","gutterID","clearGutter","lineInfo","where","removeLineWidget","setBookmark","realOpts","findMarksAt","getAllMarks","posFromIndex","sepSize","indexFromPos","copyHistory","linkedDoc","unlinkDoc","link","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","onDragStart","setData","effectAllowed","setDragImage","img","src","_top","onDragOver","frag","dragCursor","forEachCodeMirror","getElementsByClassName","byClass","editors","globalsRegistered","ensureGlobalHandlers","registerGlobalHandlers","resizeTimer","onResize","setSize","keyNames","3","8","9","13","16","17","18","19","20","27","32","33","34","35","36","37","38","39","40","44","45","46","59","61","91","92","93","106","107","109","110","111","145","173","186","187","188","189","190","191","192","219","220","221","222","224","63232","63233","63234","63235","63272","63273","63275","63276","63277","63302","fromCharCode","keyMap","normalizeKeyName","alt","ctrl","cmd","normalizeKeyMap","keymap","keyname","lookupKey","getKeyMap","fallthrough","isModifierKey","keyCode","addModifierNames","noShift","altKey","metaKey","shiftKey","keyName","altGraphKey","deleteNearSelection","compute","kill","toKill","replaced","moveCharLogically","moveLogically","endOfLine","visually","moveInStorageOrder","prep","moveVisually","bidi","mv","getWrappedLineExtent","searchInVisualLine","getRes","res","nextCh","basic","pcDefault","emacsy","macDefault","commands","singleSelection","killLine","deleteLine","delLineLeft","delWrappedLineLeft","leftPos","delWrappedLineRight","rightPos","goDocStart","goDocEnd","goLineStart","goLineStartSmart","lineStartSmart","goLineEnd","lineEnd","goLineRight","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","lookupKeyForEditor","keyMaps","extraKeys","stopSeq","dispatchKey","seq","keySeq","dispatchKeyInner","handleKeyBinding","motion","handleCharBinding","lastStoppedKey","onKeyDown","getField","handled","showCrossHair","up","onKeyUp","onKeyPress","charCode","lastClick","lastDoubleClick","DOUBLECLICK_DELAY","PastClick","clickRepeat","compare","onMouseDown","supportsTouch","clickInGutter","repeat","selectingText","handleMappedButton","leftButtonDown","onContextMenu","configureMouse","unit","addNew","moveOnDrag","contained","behavior","dragDrop","leftButtonStartDrag","leftButtonSelect","moved","dragEnd","mouseMove","dragStart","preventScroll","e2","rangeForUnit","findWordAt","ourRange","ourIndex","startSel","lastPos","extendTo","startCol","posCol","oldRange","ranges$1","bidiSimplify","editorSize","curCount","move","buttons","anchorLine","boundary","headIndex","usePart","gutterEvent","prevent","mX","mY","touches","lineBox","g","contextMenuInGutter","themeChanged","theme","optionHandlers","defineOptions","deflt","notOnInit","newBreaks","refresh","getInputField","spellcheck","autocorrect","autocapitalize","detach","attach","wrappingChanged","blur","readOnlyChanged","screenReaderLabelChanged","dragDropChanged","resetPosition","wasOn","funcs","dragFunctions","toggle","enter","over","leave","drop","inputStyles","inputStyle","pasteIncoming","cutIncoming","autofocus","registerEventHandlers","finishInit","initHooks","textRendering","word","touchFinished","prevTouch","finishTouch","isMouseLikeTouchEvent","touch","radiusX","radiusY","farAway","pageX","pageY","inp","how","aggressive","curSpace","curSpaceString","indentString","indentWithTabs","pos$1","defineInitHook","lastCopied","setLastCopied","newLastCopied","applyTextInput","inserted","deleted","recent","paste","textLines","multiPaste","pasteLinesPerSelection","lineWise","changeEvent","triggerElectric","handlePaste","pasted","clipboardData","disableInput","smartIndent","getModeAt","electricInput","copyableRanges","lineRange","disableBrowserMagic","field","hiddenTextarea","border","addEditorMethods","helpers","setOption","getDoc","addKeyMap","removeKeyMap","modeSpec","newRanges","getTokenAt","getLineTokens","getTokenTypeAt","getHelper","getHelpers","help","_global","getStateAfter","defaultTextHeight","defaultCharWidth","getViewport","addWidget","vspace","hspace","triggerOnKeyDown","triggerOnKeyPress","triggerOnKeyUp","triggerOnMouseDown","findPosH","amount","hitSide","rtlMoveVisually","findPosV","goalColumn","goals","headPos","startChar","check","scrollTo","getScrollInfo","interpret","swapDoc","phrase","phraseText","phrases","getScrollerElement","getGutterElement","registerHelper","registerGlobalHelper","predicate","origDir","lineDir","findNextLine","moveOnce","boundToLine","astral","sawType","pageSize","moveAmount","ContentEditableInput","lastAnchorNode","lastAnchorOffset","lastFocusNode","lastFocusOffset","polling","composing","gracePeriod","readDOMTimeout","posToDOM","isInGutter","scan","badPos","bad","domTextBetween","extraLinebreak","recognizeMarker","close","addText","walk","cmText","markerID","isBlock","textContent","nodeValue","domToPos","lineNode","locateNodeInLineView","textNode","topNode","curNode","previousSibling","dist$1","belongsToInput","onCopyCut","lineWiseCopyCut","clearData","kludge","hadFocus","showPrimarySelection","contentEditable","updateFromDOM","readFromDOMSoon","forceCompositionEnd","label","removeAttribute","showMultipleSelections","curAnchor","curFocus","rng","rangeCount","getRangeAt","startGracePeriod","rememberSelection","selectionInEditor","commonAncestorContainer","poll","pollSelection","pollInterval","pollContent","fromNode","toNode","toIndex","newText","oldText","cutFront","cutEnd","oldTop","maxCutFront","newBot","oldBot","maxCutEnd","chFrom","chTo","TextareaInput","prevInput","pollingFast","fromTextArea","textarea","tabindex","placeholder","realSubmit","form","leaveSubmitMethodAlone","submit","wrappedSubmit","getTextArea","toTextArea","addLegacyProps","cmpPos","createField","prepareCopyCut","fastPoll","dispatchEvent","Event","_display","moveInputWithCursor","wrapOff","lineOff","teTop","teLeft","drawn","contextMenuPending","slowPoll","missed","same","resetSelectionOnContextMenu","oldScrollY","oldCSS","oldWrapperCSS","wrapperBox","offsetParent","scrollY","rehide","detectingSelectAll","prepareSelectAllHack","mouseup","extval","disabled","dontDelegate","method","defineExtension","func","defineDocExtension","getOwnPropertyNamesModule","getOwnPropertySymbolsModule","isSymbol","bitmap","IndexedObject","$assign","A","B","alphabet","T","arraySpeciesConstructor","NATIVE_WEAK_MAP","objectHas","sharedKey","OBJECT_ALREADY_INITIALIZED","WeakMap","enforce","getterFor","TYPE","wmget","wmhas","wmset","metadata","facade","STATE","inspectSource","InternalStateModule","getInternalState","enforceInternalState","TEMPLATE","unsafe","simple","SearchAnnotation","caseFold","annotateOptions","listenForChanges","annotation","matches","findMatches","_cm","onChange","MAX_MATCHES","offsetLine","changeStart","sizeChange","getSearchCursor","multiline","maxMatches","findNext","startLine","endLine","newFrom","newTo","updateAfterChange","path","wrappedWellKnownSymbolModule","NAME","activeEffectScope","effectScopeStack","EffectScope","detached","effects","cleanups","scopes","fromParent","cleanup","recordEffectScope","effect","scope","createDep","dep","Set","wasTracked","trackOpBit","newTracked","initDepMarkers","deps","finalizeDepMarkers","ptr","delete","targetMap","effectTrackDepth","maxMarkerBits","effectStack","activeEffect","ITERATE_KEY","MAP_KEY_ITERATE_KEY","ReactiveEffect","scheduler","enableTracking","cleanupEffect","resetTracking","onStop","shouldTrack","trackStack","pauseTracking","track","isTracking","depsMap","Map","eventInfo","trackEffects","debuggerEventExtraInfo","trigger","newValue","oldValue","oldTarget","values","triggerEffects","allowRecurse","isNonTrackableKeys","builtInSymbols","createGetter","shallowGet","readonlyGet","arrayInstrumentations","createArrayInstrumentations","instrumentations","toRaw","isReadonly","shallow","receiver","shallowReadonlyMap","readonlyMap","shallowReactiveMap","reactiveMap","targetIsArray","Reflect","isRef","shouldUnwrap","readonly","reactive","createSetter","shallowSet","hadKey","deleteProperty","mutableHandlers","readonlyHandlers","shallowReactiveHandlers","toReactive","toReadonly","toShallow","getProto","getPrototypeOf","get$1","isShallow","rawTarget","rawKey","has$1","set$1","deleteEntry","hadItems","createForEach","callback","thisArg","observed","createIterableMethod","targetIsMap","isPair","isKeyOnly","innerIterator","createReadonlyMethod","createInstrumentations","mutableInstrumentations","shallowInstrumentations","readonlyInstrumentations","shallowReadonlyInstrumentations","iteratorMethods","createInstrumentationGetter","mutableCollectionHandlers","shallowCollectionHandlers","readonlyCollectionHandlers","targetTypeMap","rawType","getTargetType","isExtensible","createReactiveObject","shallowReactive","baseHandlers","collectionHandlers","proxyMap","existingProxy","targetType","proxy","Proxy","isReactive","isProxy","raw","markRaw","trackRefValue","triggerRefValue","newVal","convert","__v_isRef","createRef","_shallow","_rawValue","_value","rawValue","unref","shallowUnwrapHandlers","proxyRefs","objectWithRefs","ComputedRefImpl","getter","_setter","_dirty","getterOrOptions","debugOptions","setter","cRef","instance","rawArgs","vnode","isModelListener","startsWith","modelArg","modifiersKey","number","handlerName","callWithAsyncErrorHandling","onceHandler","emitted","normalizeEmitsOptions","appContext","asMixin","emitsCache","cached","emits","normalized","hasExtends","extendEmits","normalizedFromExtend","mixins","extends","isEmitListener","currentRenderingInstance","currentScopeId","setCurrentRenderingInstance","__scopeId","pushScopeId","popScopeId","withCtx","isNonScopedSlot","_n","renderFnWithContext","_d","setBlockTracking","prevInstance","_c","renderComponentRoot","Component","withProxy","propsOptions","slots","attrs","emit","render","renderCache","setupState","inheritAttrs","fallthroughAttrs","shapeFlag","proxyToUse","normalizeVNode","getFunctionalFallthrough","root","some","filterModelListeners","cloneVNode","dirs","transition","blockStack","handleError","createVNode","Comment","shouldUpdateComponent","prevVNode","nextVNode","optimized","prevProps","prevChildren","component","nextProps","nextChildren","patchFlag","emitsOptions","$stable","hasPropsChanged","dynamicProps","nextKeys","updateHOCHostEl","subTree","isSuspense","__isSuspense","queueEffectWithSuspense","suspense","pendingBranch","queuePostFlushCb","provide","currentInstance","provides","parentProvides","inject","defaultValue","treatDefaultAsFactory","useTransitionState","isMounted","isLeaving","isUnmounting","leavingVNodes","onMounted","onBeforeUnmount","TransitionHookValidator","BaseTransitionImpl","appear","persisted","onBeforeEnter","onEnter","onAfterEnter","onEnterCancelled","onBeforeLeave","onLeave","onAfterLeave","onLeaveCancelled","onBeforeAppear","onAppear","onAfterAppear","onAppearCancelled","getCurrentInstance","prevTransitionKey","default","getTransitionRawChildren","rawProps","emptyPlaceholder","innerChild","getKeepAliveChild","enterHooks","resolveTransitionHooks","setTransitionHooks","oldChild","oldInnerChild","transitionKeyChanged","getTransitionKey","isSameVNodeType","leavingHooks","afterLeave","delayLeave","earlyRemove","delayedLeave","leavingVNodesCache","getLeavingNodesForType","_leaveCb","BaseTransition","callHook","hook","hooks","leavingVNode","afterHook","cancelHook","_enterCb","cancelled","isKeepAlive","ssContent","clone","ssFallback","keepComment","ret","keyedFragmentCount","Fragment","defineComponent","setup","isAsyncWrapper","__asyncLoader","__isKeepAlive","onActivated","registerKeepAliveHook","onDeactivated","wrappedHook","__wdc","isDeactivated","injectHook","injectToKeepAliveRoot","keepAliveRoot","injected","onUnmounted","resetShapeFlag","getInnerChild","prepend","__weh","isUnmounted","setCurrentInstance","unsetCurrentInstance","createHook","lifecycle","isInSSRComponentSetup","onBeforeMount","onBeforeUpdate","onUpdated","onServerPrefetch","onRenderTriggered","onRenderTracked","onErrorCaptured","shouldCacheAccess","applyOptions","resolveMergedOptions","publicThis","beforeCreate","dataOptions","computed","computedOptions","methods","watch","watchOptions","provideOptions","injectOptions","created","beforeMount","mounted","beforeUpdate","updated","activated","deactivated","beforeDestroy","beforeUnmount","destroyed","unmounted","renderTracked","renderTriggered","errorCaptured","serverPrefetch","expose","components","directives","filters","checkDuplicateProperties","resolveInjections","unwrapInjectedRef","methodHandler","createWatcher","registerLifecycleHook","register","_hook","exposed","unwrapRef","normalizeInject","createPathGetter","extendsOptions","globalMixins","optionsCache","optionMergeStrategies","resolved","mergeOptions","strats","strat","internalOptionMergeStrats","mergeDataFn","mergeObjectOptions","mergeAsArray","mergeWatchOptions","mergeInject","initProps","isStateful","isSSR","InternalObjectKey","propsDefaults","setFullProps","updateProps","rawPrevProps","rawCurrentProps","hasAttrsChanged","kebabKey","resolvePropValue","propsToUpdate","camelizedKey","needCastKeys","rawCastValues","camelKey","castValues","isAbsent","hasDefault","normalizePropsOptions","propsCache","extendProps","normalizedKey","validatePropName","booleanIndex","getTypeIndex","stringIndex","getType","isSameType","expectedTypes","findIndex","isInternalKey","normalizeSlotValue","normalizeSlot","rawSlot","normalizeObjectSlots","rawSlots","_ctx","normalizeVNodeSlots","initSlots","_","updateSlots","needDeletionCheck","deletionComparisonTarget","invokeDirectiveHook","bindings","oldBindings","binding","createAppContext","app","isNativeTag","performance","globalProperties","errorHandler","warnHandler","compilerOptions","uid","createAppAPI","hydrate","rootComponent","rootProps","installedPlugins","_uid","_component","_props","_container","_context","_instance","plugin","install","mixin","directive","rootContainer","isHydrate","isSVG","__vue_app__","initFeatureFlags","queuePostRenderEffect","createRenderer","baseCreateRenderer","createHydrationFns","hostInsert","hostRemove","patchProp","hostPatchProp","hostCreateElement","createText","hostCreateText","createComment","hostCreateComment","setText","hostSetText","setElementText","hostSetElementText","hostParentNode","hostNextSibling","setScopeId","hostSetScopeId","hostCloneNode","insertStaticContent","hostInsertStaticContent","patch","n1","n2","parentComponent","parentSuspense","slotScopeIds","dynamicChildren","getNextHostNode","unmount","Text","processText","processCommentNode","Static","mountStaticNode","processFragment","processElement","processComponent","internals","setRef","moveStaticNode","removeStaticNode","mountElement","patchElement","vnodeHook","is","mountChildren","unmountChildren","onVnodeBeforeMount","invokeVNodeHook","scopeId","needCallTransitionHooks","beforeEnter","onVnodeMounted","parentVNode","cloneIfMounted","oldProps","newProps","onVnodeBeforeUpdate","areChildrenSVG","patchBlockChildren","patchChildren","patchProps","class","onVnodeUpdated","oldChildren","newChildren","fallbackContainer","oldVNode","newVNode","fragmentStartAnchor","fragmentEndAnchor","fragmentSlotScopeIds","traverseStaticChildren","activate","mountComponent","updateComponent","initialVNode","createComponentInstance","renderer","setupComponent","asyncDep","registerDep","setupRenderEffect","asyncResolved","updateComponentPreRender","invalidateJob","componentUpdateFn","bu","u","originNext","nextTree","prevTree","bm","isAsyncWrapperVNode","hydrateNode","hydrateSubTree","scopedInitialVNode","queueJob","flushPreFlushCbs","c1","prevShapeFlag","c2","patchKeyedChildren","patchUnkeyedChildren","oldLength","newLength","commonLength","nextChild","parentAnchor","l2","e1","s1","s2","keyToNewIndexMap","patched","toBePatched","maxNewIndexSoFar","newIndexToOldIndexMap","prevChild","newIndex","increasingNewIndexSequence","getSequence","nextIndex","moveType","needTransition","performLeave","doRemove","deactivate","shouldInvokeDirs","shouldInvokeVnodeHook","onVnodeBeforeUnmount","unmountComponent","onVnodeUnmounted","removeFragment","performRemove","bum","um","suspenseId","pendingId","_vnode","flushPostFlushCbs","mt","mc","pc","pbc","createApp","rawRef","oldRawRef","isUnmount","refValue","getExposeProxy","owner","oldRef","refs","doSet","callWithErrorHandling","ch1","ch2","arrI","isTeleport","__isTeleport","COMPONENTS","resolveComponent","maybeSelfReference","resolveAsset","NULL_DYNAMIC_COMPONENT","warnMissing","selfName","getComponentName","registry","currentBlock","openBlock","disableTracking","closeBlock","isBlockTreeEnabled","setupBlock","createElementBlock","createBaseVNode","createBlock","isVNode","__v_isVNode","normalizeKey","normalizeRef","isBlockNode","needFullChildrenNormalization","__v_skip","targetAnchor","staticCount","normalizeChildren","normalize","_createVNode","cloned","isClassComponent","__vccOpts","guardReactiveProps","klass","extraProps","mergeRef","mergedProps","mergeProps","createTextVNode","flag","memo","slot","slotFlag","toMerge","incoming","getPublicInstance","isStatefulComponent","publicPropertiesMap","$el","$data","$props","$attrs","$slots","$refs","$parent","$root","$emit","$options","$forceUpdate","$nextTick","$watch","instanceWatch","PublicInstanceProxyHandlers","accessCache","normalizedProps","publicGetter","cssModule","__cssModules","emptyAppContext","uid$1","exposeProxy","setupContext","bc","da","rtg","rtc","ec","ce","compile","installWithProxy","setupResult","setupStatefulComponent","createSetupContext","resolvedResult","handleSetupResult","catch","finishComponentSetup","skipOptions","template","isCustomElement","delimiters","componentCompilerOptions","finalCompilerOptions","createAttrsProxy","displayName","throwInDev","contextVNode","exposedInstance","errorInfo","errorCapturedHooks","appErrorHandler","logError","isFlushing","isFlushPending","flushIndex","pendingPreFlushCbs","activePreFlushCbs","preFlushIndex","pendingPostFlushCbs","activePostFlushCbs","postFlushIndex","resolvedPromise","currentFlushPromise","currentPreFlushParentJob","findInsertionIndex","middle","middleJobId","getId","job","queueFlush","flushJobs","queueCb","cb","activeQueue","pendingQueue","queuePreFlushCb","seen","parentJob","deduped","INITIAL_WATCHER_VALUE","doWatch","immediate","deep","flush","onTrack","onTrigger","forceTrigger","isMultiSource","s","traverse","onInvalidate","baseGetter","segments","propsOrChildren","svgNS","staticTemplateCache","nodeOps","createElementNS","multiple","selector","innerHTML","patchClass","transitionClasses","_vtc","patchStyle","setStyle","importantRE","setProperty","prefixed","autoPrefix","prefixes","prefixCache","rawName","xlinkNS","patchAttr","removeAttributeNS","setAttributeNS","isBoolean","patchDOMProp","tagName","_a","_getNow","skipTimestampCheck","createEvent","timeStamp","ffMatch","cachedNow","getNow","patchEvent","prevValue","nextValue","invokers","_vei","existingInvoker","parseName","invoker","createInvoker","optionsModifierRE","initialValue","attached","patchStopImmediatePropagation","originalStop","stopImmediatePropagation","_stopped","nativeOnRE","shouldSetAsProp","_trueValue","_falseValue","HTMLElement","TRANSITION","ANIMATION","Transition","resolveTransitionProps","DOMTransitionPropsValidators","duration","enterFromClass","enterActiveClass","enterToClass","appearFromClass","appearActiveClass","appearToClass","leaveFromClass","leaveActiveClass","leaveToClass","hasExplicitCallback","baseProps","durations","normalizeDuration","enterDuration","leaveDuration","finishEnter","isAppear","removeTransitionClass","finishLeave","makeEnterHook","nextFrame","addTransitionClass","whenTransitionEnds","forceReflow","NumberOf","classList","requestAnimationFrame","endId","expectedType","explicitTimeout","_endId","resolveIfNotStale","propCount","getTransitionInfo","endEvent","ended","onEnd","getStyleProperties","transitionDelays","transitionDurations","transitionTimeout","getTimeout","animationDelays","animationDurations","animationTimeout","hasTransform","delays","toMs","rendererOptions","ensureRenderer","mount","containerOrSelector","normalizeContainer","SVGElement","Element","requireObjectCoercible","activeXDocument","documentCreateElement","GT","LT","PROTOTYPE","SCRIPT","IE_PROTO","EmptyConstructor","scriptTag","NullProtoObjectViaActiveX","write","temp","parentWindow","NullProtoObjectViaIFrame","iframeDocument","iframe","JS","contentWindow","open","F","NullProtoObject","ActiveXObject","domain","createIteratorConstructor","setPrototypeOf","setToStringTag","IteratorsCore","IteratorPrototype","BUGGY_SAFARI_ITERATORS","KEYS","VALUES","ENTRIES","returnThis","Iterable","IteratorConstructor","DEFAULT","IS_SET","CurrentIteratorPrototype","KEY","getIterationMethod","KIND","defaultIterator","IterablePrototype","INCORRECT_VALUES_NAME","nativeIterator","anyNativeIterator","entries","propertyKey","functionToString","ie_lt8","matching","bracketRegex","findMatchingBracket","afterCursor","strict","scanForBracket","forward","maxScanLen","maxScanLineLength","maxScanLines","stack","matchBrackets","autoclear","maxHighlightLen","maxHighlightLineLength","highlightNonMatching","marks","doMatchBrackets","currentlyHighlighted","clearHighlighted","oldConfig","postfix","random","replacement","feature","detection","POLYFILL","NATIVE","runtime","Op","$Symbol","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","_invoke","makeInvokeMethod","tryCatch","GenStateSuspendedStart","GenStateSuspendedYield","GenStateExecuting","GenStateCompleted","ContinueSentinel","GeneratorFunction","GeneratorFunctionPrototype","NativeIteratorPrototype","Gp","defineIteratorMethods","AsyncIterator","PromiseImpl","invoke","record","__await","unwrapped","previousPromise","enqueue","callInvokeWithMethodAndArg","doneResult","delegate","delegateResult","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","resultName","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","iteratorMethod","isGeneratorFunction","genFun","__proto__","awrap","async","skipTempReset","rootEntry","rootRecord","rval","exception","loc","caught","hasCatch","hasFinally","finallyEntry","complete","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","globalThis","onCursorActivity","markedSelection","markedSelectionStyle","CHUNK_SIZE","coverRange","addAt","atEnd","usingIterator","$defineProperty","Attributes","Annotation","scheduleRedraw","doRedraw","redraw","buttonHeight","scrollButtonHeight","annotations","doUpdate","computeScale","resizeHandler","hScale","anns","singleLineH","curLineObj","getY","topY","nextTop","ann","makeMap","expectsLowerCase","GLOBALS_WHITE_LISTED","isGloballyWhitelisted","specialBooleanAttrs","isSpecialBooleanAttr","includeBooleanAttr","normalizeStyle","item","isString","parseStringStyle","listDelimiterRE","propertyDelimiterRE","tmp","normalizeClass","HTML_TAGS","SVG_TAGS","isHTMLTag","isSVGTag","looseCompareArrays","equal","looseEqual","aValidType","isDate","bValidType","getTime","aKeysCount","bKeysCount","aHasKey","bHasKey","looseIndexOf","toDisplayString","objectToString","isFunction","JSON","stringify","replacer","_key","isMap","reduce","isSet","isPlainObject","EMPTY_OBJ","EMPTY_ARR","NOOP","NO","onRE","isOn","toTypeString","isPromise","toRawType","isIntegerKey","isReservedProp","cacheStringFunction","hit","camelizeRE","camelize","hyphenateRE","hyphenate","capitalize","toHandlerKey","hasChanged","invokeArrayFns","fns","def","toNumber","parseFloat","toPrimitive","NATIVE_SYMBOL","$toString","nativeObjectCreate","getOwnPropertyNamesExternal","getOwnPropertyDescriptorModule","defineWellKnownSymbol","HIDDEN","SYMBOL","TO_PRIMITIVE","setInternalState","ObjectPrototype","$stringify","nativeGetOwnPropertyDescriptor","nativeDefineProperty","nativeGetOwnPropertyNames","nativePropertyIsEnumerable","AllSymbols","ObjectPrototypeSymbols","StringToSymbolRegistry","SymbolToStringRegistry","WellKnownSymbolsStore","QObject","USE_SETTER","findChild","setSymbolDescriptor","ObjectPrototypeDescriptor","description","$defineProperties","$getOwnPropertySymbols","$propertyIsEnumerable","$create","V","names","IS_OBJECT_PROTOTYPE","keyFor","useSetter","useSimple","FORCED_JSON_STRINGIFY","$replacer","NativePromise","speciesConstructor","promiseResolve","NON_GENERIC","real","onFinally","PrototypeOfArrayIteratorPrototype","arrayIterator","NEW_ITERATOR_PROTOTYPE","TO_STRING_TAG_SUPPORT","notify","promise","macrotask","IS_IOS_PEBBLE","IS_WEBOS_WEBKIT","MutationObserver","WebKitMutationObserver","queueMicrotaskDescriptor","queueMicrotask","exit","observe","characterData","task","USE_SYMBOL_AS_UID","createWellKnownSymbol","withoutSetter","nativeKeys","FAILS_ON_PRIMITIVES","arraySpeciesCreate","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","IS_FILTER_REJECT","NO_HOLES","specificCreate","boundFunction","every","filterReject","doFold","noFold","regexpFlags","regexp","flags","ignoreCase","ensureFlags","maybeMultiline","searchRegexpForward","searchRegexpForwardMultiline","inside","lastMatchIn","endMargin","newMatch","searchRegexpBackward","searchRegexpBackwardMultiline","adjustPos","orig","folded","foldFunc","searchStringForward","cutFrom","endString","searchStringBackward","lastIndexOf","topString","SearchCursor","atOccurrence","afterEmptyMatch","findPrevious","ordinaryToPrimitive","exoticToPrim","SHARED","EXISTS","newPromiseCapability","promiseCapability","variable","namespace","NASHORN_BUG","1","aPossiblePrototype","CORRECT_SETTER","TAG","Pebble","clearPlaceholder","setPlaceholder","placeHolder","onComposition","placeholderCompose","sfc","createProperty","CORRECT_PROTOTYPE_GETTER","addToUnscopables","defineIterator","ARRAY_ITERATOR","iterated","Arguments","Internal","OwnPromiseCapability","PromiseWrapper","nativeThen","redefineAll","setSpecies","anInstance","iterate","checkCorrectnessOfIteration","microtask","hostReportErrors","newPromiseCapabilityModule","perform","IS_BROWSER","PROMISE","getInternalPromiseState","NativePromisePrototype","PromiseConstructor","PromiseConstructorPrototype","newGenericPromiseCapability","DISPATCH_EVENT","NATIVE_REJECTION_EVENT","PromiseRejectionEvent","UNHANDLED_REJECTION","REJECTION_HANDLED","PENDING","FULFILLED","REJECTED","HANDLED","UNHANDLED","SUBCLASSING","PROMISE_CONSTRUCTOR_SOURCE","GLOBAL_CORE_JS_PROMISE","FakePromise","INCORRECT_ITERATION","all","isThenable","isReject","notified","chain","reactions","exited","reaction","fail","rejection","onHandleUnhandled","onUnhandled","reason","initEvent","IS_UNHANDLED","isUnhandled","unwrap","internalReject","internalResolve","executor","onFulfilled","onRejected","capability","$promiseResolve","alreadyCalled","race","modeInfo","mimes","alias","findModeByMIME","findModeByExtension","findModeByFileName","filename","dot","substring","findModeByName","PromiseCapability","$$resolve","$$reject","startListening","stopListening","hurry","autoRefresh","classofRaw","CORRECT_ARGUMENTS","tryGet","callee","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList"],"mappings":"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","file":"js/chunk-vendors.1beece6f.js","sourcesContent":["var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","var aFunction = require('../internals/a-function');\n\n// optional / simple context binding\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 0: return function () {\n return fn.call(that);\n };\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","/* eslint-disable es/no-object-getownpropertynames -- safe */\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar $getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\n\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return $getOwnPropertyNames(it);\n } catch (error) {\n return windowNames.slice();\n }\n};\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]'\n ? getWindowNames(it)\n : $getOwnPropertyNames(toIndexedObject(it));\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar has = require('../internals/has');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPropertyKey(P);\n if (IE8_DOM_DEFINE) try {\n return $getOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]);\n};\n","var isObject = require('../internals/is-object');\nvar isArray = require('../internals/is-array');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\n\n// a part of `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray) {\n var C;\n if (isArray(originalArray)) {\n C = originalArray.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n else if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- requied for testing\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a != 7;\n});\n","var global = require('../internals/global');\nvar DOMIterables = require('../internals/dom-iterables');\nvar forEach = require('../internals/array-for-each');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nfor (var COLLECTION_NAME in DOMIterables) {\n var Collection = global[COLLECTION_NAME];\n var CollectionPrototype = Collection && Collection.prototype;\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype && CollectionPrototype.forEach !== forEach) try {\n createNonEnumerableProperty(CollectionPrototype, 'forEach', forEach);\n } catch (error) {\n CollectionPrototype.forEach = forEach;\n }\n}\n","'use strict';\nvar $forEach = require('../internals/array-iteration').forEach;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar STRICT_METHOD = arrayMethodIsStrict('forEach');\n\n// `Array.prototype.forEach` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.foreach\nmodule.exports = !STRICT_METHOD ? function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n// eslint-disable-next-line es/no-array-prototype-foreach -- safe\n} : [].forEach;\n","module.exports = function (it, Constructor, name) {\n if (!(it instanceof Constructor)) {\n throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation');\n } return it;\n};\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n","module.exports = function (it) {\n if (typeof it != 'function') {\n throw TypeError(String(it) + ' is not a function');\n } return it;\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var called = 0;\n var iteratorWithReturn = {\n next: function () {\n return { done: !!called++ };\n },\n 'return': function () {\n SAFE_CLOSING = true;\n }\n };\n iteratorWithReturn[ITERATOR] = function () {\n return this;\n };\n // eslint-disable-next-line es/no-array-from, no-throw-literal -- required for testing\n Array.from(iteratorWithReturn, function () { throw 2; });\n} catch (error) { /* empty */ }\n\nmodule.exports = function (exec, SKIP_CLOSING) {\n if (!SKIP_CLOSING && !SAFE_CLOSING) return false;\n var ITERATION_SUPPORT = false;\n try {\n var object = {};\n object[ITERATOR] = function () {\n return {\n next: function () {\n return { done: ITERATION_SUPPORT = true };\n }\n };\n };\n exec(object);\n } catch (error) { /* empty */ }\n return ITERATION_SUPPORT;\n};\n","var userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /(?:ipad|iphone|ipod).*applewebkit/i.test(userAgent);\n","// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nexport default function _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}","var fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (METHOD_NAME) {\n // We can't use this feature detection in V8 since it causes\n // deoptimization and serious performance degradation\n // https://github.com/zloirock/core-js/issues/677\n return V8_VERSION >= 51 || !fails(function () {\n var array = [];\n var constructor = array.constructor = {};\n constructor[SPECIES] = function () {\n return { foo: 1 };\n };\n return array[METHOD_NAME](Boolean).foo !== 1;\n });\n};\n","var anObject = require('../internals/an-object');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar toLength = require('../internals/to-length');\nvar bind = require('../internals/function-bind-context');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar iteratorClose = require('../internals/iterator-close');\n\nvar Result = function (stopped, result) {\n this.stopped = stopped;\n this.result = result;\n};\n\nmodule.exports = function (iterable, unboundFunction, options) {\n var that = options && options.that;\n var AS_ENTRIES = !!(options && options.AS_ENTRIES);\n var IS_ITERATOR = !!(options && options.IS_ITERATOR);\n var INTERRUPTED = !!(options && options.INTERRUPTED);\n var fn = bind(unboundFunction, that, 1 + AS_ENTRIES + INTERRUPTED);\n var iterator, iterFn, index, length, result, next, step;\n\n var stop = function (condition) {\n if (iterator) iteratorClose(iterator, 'normal', condition);\n return new Result(true, condition);\n };\n\n var callFn = function (value) {\n if (AS_ENTRIES) {\n anObject(value);\n return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);\n } return INTERRUPTED ? fn(value, stop) : fn(value);\n };\n\n if (IS_ITERATOR) {\n iterator = iterable;\n } else {\n iterFn = getIteratorMethod(iterable);\n if (typeof iterFn != 'function') throw TypeError('Target is not iterable');\n // optimisation for array iterators\n if (isArrayIteratorMethod(iterFn)) {\n for (index = 0, length = toLength(iterable.length); length > index; index++) {\n result = callFn(iterable[index]);\n if (result && result instanceof Result) return result;\n } return new Result(false);\n }\n iterator = getIterator(iterable, iterFn);\n }\n\n next = iterator.next;\n while (!(step = next.call(iterator)).done) {\n try {\n result = callFn(step.value);\n } catch (error) {\n iteratorClose(iterator, 'throw', error);\n }\n if (typeof result == 'object' && result && result instanceof Result) return result;\n } return new Result(false);\n};\n","var toInteger = require('../internals/to-integer');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toInteger(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n// Highlighting text that matches the selection\n//\n// Defines an option highlightSelectionMatches, which, when enabled,\n// will style strings that match the selection throughout the\n// document.\n//\n// The option can be set to true to simply enable it, or to a\n// {minChars, style, wordsOnly, showToken, delay} object to explicitly\n// configure it. minChars is the minimum amount of characters that should be\n// selected for the behavior to occur, and style is the token style to\n// apply to the matches. This will be prefixed by \"cm-\" to create an\n// actual CSS class name. If wordsOnly is enabled, the matches will be\n// highlighted only if the selected text is a word. showToken, when enabled,\n// will cause the current token to be highlighted when nothing is selected.\n// delay is used to specify how much time to wait, in milliseconds, before\n// highlighting the matches. If annotateScrollbar is enabled, the occurrences\n// will be highlighted on the scrollbar via the matchesonscrollbar addon.\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"), require(\"./matchesonscrollbar\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\", \"./matchesonscrollbar\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n \"use strict\";\n\n var defaults = {\n style: \"matchhighlight\",\n minChars: 2,\n delay: 100,\n wordsOnly: false,\n annotateScrollbar: false,\n showToken: false,\n trim: true\n }\n\n function State(options) {\n this.options = {}\n for (var name in defaults)\n this.options[name] = (options && options.hasOwnProperty(name) ? options : defaults)[name]\n this.overlay = this.timeout = null;\n this.matchesonscroll = null;\n this.active = false;\n }\n\n CodeMirror.defineOption(\"highlightSelectionMatches\", false, function(cm, val, old) {\n if (old && old != CodeMirror.Init) {\n removeOverlay(cm);\n clearTimeout(cm.state.matchHighlighter.timeout);\n cm.state.matchHighlighter = null;\n cm.off(\"cursorActivity\", cursorActivity);\n cm.off(\"focus\", onFocus)\n }\n if (val) {\n var state = cm.state.matchHighlighter = new State(val);\n if (cm.hasFocus()) {\n state.active = true\n highlightMatches(cm)\n } else {\n cm.on(\"focus\", onFocus)\n }\n cm.on(\"cursorActivity\", cursorActivity);\n }\n });\n\n function cursorActivity(cm) {\n var state = cm.state.matchHighlighter;\n if (state.active || cm.hasFocus()) scheduleHighlight(cm, state)\n }\n\n function onFocus(cm) {\n var state = cm.state.matchHighlighter\n if (!state.active) {\n state.active = true\n scheduleHighlight(cm, state)\n }\n }\n\n function scheduleHighlight(cm, state) {\n clearTimeout(state.timeout);\n state.timeout = setTimeout(function() {highlightMatches(cm);}, state.options.delay);\n }\n\n function addOverlay(cm, query, hasBoundary, style) {\n var state = cm.state.matchHighlighter;\n cm.addOverlay(state.overlay = makeOverlay(query, hasBoundary, style));\n if (state.options.annotateScrollbar && cm.showMatchesOnScrollbar) {\n var searchFor = hasBoundary ? new RegExp((/\\w/.test(query.charAt(0)) ? \"\\\\b\" : \"\") +\n query.replace(/[\\\\\\[.+*?(){|^$]/g, \"\\\\$&\") +\n (/\\w/.test(query.charAt(query.length - 1)) ? \"\\\\b\" : \"\")) : query;\n state.matchesonscroll = cm.showMatchesOnScrollbar(searchFor, false,\n {className: \"CodeMirror-selection-highlight-scrollbar\"});\n }\n }\n\n function removeOverlay(cm) {\n var state = cm.state.matchHighlighter;\n if (state.overlay) {\n cm.removeOverlay(state.overlay);\n state.overlay = null;\n if (state.matchesonscroll) {\n state.matchesonscroll.clear();\n state.matchesonscroll = null;\n }\n }\n }\n\n function highlightMatches(cm) {\n cm.operation(function() {\n var state = cm.state.matchHighlighter;\n removeOverlay(cm);\n if (!cm.somethingSelected() && state.options.showToken) {\n var re = state.options.showToken === true ? /[\\w$]/ : state.options.showToken;\n var cur = cm.getCursor(), line = cm.getLine(cur.line), start = cur.ch, end = start;\n while (start && re.test(line.charAt(start - 1))) --start;\n while (end < line.length && re.test(line.charAt(end))) ++end;\n if (start < end)\n addOverlay(cm, line.slice(start, end), re, state.options.style);\n return;\n }\n var from = cm.getCursor(\"from\"), to = cm.getCursor(\"to\");\n if (from.line != to.line) return;\n if (state.options.wordsOnly && !isWord(cm, from, to)) return;\n var selection = cm.getRange(from, to)\n if (state.options.trim) selection = selection.replace(/^\\s+|\\s+$/g, \"\")\n if (selection.length >= state.options.minChars)\n addOverlay(cm, selection, false, state.options.style);\n });\n }\n\n function isWord(cm, from, to) {\n var str = cm.getRange(from, to);\n if (str.match(/^\\w+$/) !== null) {\n if (from.ch > 0) {\n var pos = {line: from.line, ch: from.ch - 1};\n var chr = cm.getRange(pos, from);\n if (chr.match(/\\W/) === null) return false;\n }\n if (to.ch < cm.getLine(from.line).length) {\n var pos = {line: to.line, ch: to.ch + 1};\n var chr = cm.getRange(to, pos);\n if (chr.match(/\\W/) === null) return false;\n }\n return true;\n } else return false;\n }\n\n function boundariesAround(stream, re) {\n return (!stream.start || !re.test(stream.string.charAt(stream.start - 1))) &&\n (stream.pos == stream.string.length || !re.test(stream.string.charAt(stream.pos)));\n }\n\n function makeOverlay(query, hasBoundary, style) {\n return {token: function(stream) {\n if (stream.match(query) &&\n (!hasBoundary || boundariesAround(stream, hasBoundary)))\n return style;\n stream.next();\n stream.skipTo(query.charAt(0)) || stream.skipToEnd();\n }};\n }\n});\n","var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar setGlobal = require('../internals/set-global');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.noTargetGet - prevent calling a getter on target\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n if (GLOBAL) {\n target = global;\n } else if (STATIC) {\n target = global[TARGET] || setGlobal(TARGET, {});\n } else {\n target = (global[TARGET] || {}).prototype;\n }\n if (target) for (key in source) {\n sourceProperty = source[key];\n if (options.noTargetGet) {\n descriptor = getOwnPropertyDescriptor(target, key);\n targetProperty = descriptor && descriptor.value;\n } else targetProperty = target[key];\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contained in target\n if (!FORCED && targetProperty !== undefined) {\n if (typeof sourceProperty === typeof targetProperty) continue;\n copyConstructorProperties(sourceProperty, targetProperty);\n }\n // add a flag to not completely full polyfills\n if (options.sham || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(sourceProperty, 'sham', true);\n }\n // extend global\n redefine(target, key, sourceProperty, options);\n }\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar definePropertyModule = require('../internals/object-define-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (CONSTRUCTOR_NAME) {\n var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\n var defineProperty = definePropertyModule.f;\n\n if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\n defineProperty(Constructor, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n }\n};\n","var anObject = require('../internals/an-object');\n\nmodule.exports = function (iterator, kind, value) {\n var innerResult, innerError;\n anObject(iterator);\n try {\n innerResult = iterator['return'];\n if (innerResult === undefined) {\n if (kind === 'throw') throw value;\n return value;\n }\n innerResult = innerResult.call(iterator);\n } catch (error) {\n innerError = true;\n innerResult = error;\n }\n if (kind === 'throw') throw value;\n if (innerError) throw innerResult;\n anObject(innerResult);\n return value;\n};\n","var global = require('../internals/global');\nvar fails = require('../internals/fails');\nvar bind = require('../internals/function-bind-context');\nvar html = require('../internals/html');\nvar createElement = require('../internals/document-create-element');\nvar IS_IOS = require('../internals/engine-is-ios');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar set = global.setImmediate;\nvar clear = global.clearImmediate;\nvar process = global.process;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar location, defer, channel, port;\n\ntry {\n // Deno throws a ReferenceError on `location` access without `--location` flag\n location = global.location;\n} catch (error) { /* empty */ }\n\nvar run = function (id) {\n // eslint-disable-next-line no-prototype-builtins -- safe\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\n\nvar runner = function (id) {\n return function () {\n run(id);\n };\n};\n\nvar listener = function (event) {\n run(event.data);\n};\n\nvar post = function (id) {\n // old engines have not location.origin\n global.postMessage(String(id), location.protocol + '//' + location.host);\n};\n\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!set || !clear) {\n set = function setImmediate(fn) {\n var args = [];\n var argumentsLength = arguments.length;\n var i = 1;\n while (argumentsLength > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func -- spec requirement\n (typeof fn == 'function' ? fn : Function(fn)).apply(undefined, args);\n };\n defer(counter);\n return counter;\n };\n clear = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (IS_NODE) {\n defer = function (id) {\n process.nextTick(runner(id));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(runner(id));\n };\n // Browsers with MessageChannel, includes WebWorkers\n // except iOS - https://github.com/zloirock/core-js/issues/624\n } else if (MessageChannel && !IS_IOS) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = bind(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (\n global.addEventListener &&\n typeof postMessage == 'function' &&\n !global.importScripts &&\n location && location.protocol !== 'file:' &&\n !fails(post)\n ) {\n defer = post;\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in createElement('script')) {\n defer = function (id) {\n html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(runner(id), 0);\n };\n }\n}\n\nmodule.exports = {\n set: set,\n clear: clear\n};\n","var global = require('../internals/global');\nvar userAgent = require('../internals/engine-user-agent');\n\nvar process = global.process;\nvar Deno = global.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n version = match[0] < 4 ? 1 : match[0] + match[1];\n} else if (userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = match[1];\n }\n}\n\nmodule.exports = version && +version;\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n \"use strict\";\n var WRAP_CLASS = \"CodeMirror-activeline\";\n var BACK_CLASS = \"CodeMirror-activeline-background\";\n var GUTT_CLASS = \"CodeMirror-activeline-gutter\";\n\n CodeMirror.defineOption(\"styleActiveLine\", false, function(cm, val, old) {\n var prev = old == CodeMirror.Init ? false : old;\n if (val == prev) return\n if (prev) {\n cm.off(\"beforeSelectionChange\", selectionChange);\n clearActiveLines(cm);\n delete cm.state.activeLines;\n }\n if (val) {\n cm.state.activeLines = [];\n updateActiveLines(cm, cm.listSelections());\n cm.on(\"beforeSelectionChange\", selectionChange);\n }\n });\n\n function clearActiveLines(cm) {\n for (var i = 0; i < cm.state.activeLines.length; i++) {\n cm.removeLineClass(cm.state.activeLines[i], \"wrap\", WRAP_CLASS);\n cm.removeLineClass(cm.state.activeLines[i], \"background\", BACK_CLASS);\n cm.removeLineClass(cm.state.activeLines[i], \"gutter\", GUTT_CLASS);\n }\n }\n\n function sameArray(a, b) {\n if (a.length != b.length) return false;\n for (var i = 0; i < a.length; i++)\n if (a[i] != b[i]) return false;\n return true;\n }\n\n function updateActiveLines(cm, ranges) {\n var active = [];\n for (var i = 0; i < ranges.length; i++) {\n var range = ranges[i];\n var option = cm.getOption(\"styleActiveLine\");\n if (typeof option == \"object\" && option.nonEmpty ? range.anchor.line != range.head.line : !range.empty())\n continue\n var line = cm.getLineHandleVisualStart(range.head.line);\n if (active[active.length - 1] != line) active.push(line);\n }\n if (sameArray(cm.state.activeLines, active)) return;\n cm.operation(function() {\n clearActiveLines(cm);\n for (var i = 0; i < active.length; i++) {\n cm.addLineClass(active[i], \"wrap\", WRAP_CLASS);\n cm.addLineClass(active[i], \"background\", BACK_CLASS);\n cm.addLineClass(active[i], \"gutter\", GUTT_CLASS);\n }\n cm.state.activeLines = active;\n });\n }\n\n function selectionChange(cm, sel) {\n updateActiveLines(cm, sel.ranges);\n }\n});\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n","var classof = require('../internals/classof');\nvar Iterators = require('../internals/iterators');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar objectKeys = require('../internals/object-keys');\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\n// eslint-disable-next-line es/no-object-defineproperties -- safe\nmodule.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = objectKeys(Properties);\n var length = keys.length;\n var index = 0;\n var key;\n while (length > index) definePropertyModule.f(O, key = keys[index++], Properties[key]);\n return O;\n};\n","var isObject = require('../internals/is-object');\n\nmodule.exports = function (it) {\n if (!isObject(it) && it !== null) {\n throw TypeError(\"Can't set \" + String(it) + ' as a prototype');\n } return it;\n};\n","module.exports = {};\n","var global = require('../internals/global');\n\nmodule.exports = global;\n","var fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar split = ''.split;\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins -- safe\n return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) == 'String' ? split.call(it, '') : Object(it);\n} : Object;\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar create = require('../internals/object-create');\nvar definePropertyModule = require('../internals/object-define-property');\n\nvar UNSCOPABLES = wellKnownSymbol('unscopables');\nvar ArrayPrototype = Array.prototype;\n\n// Array.prototype[@@unscopables]\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\nif (ArrayPrototype[UNSCOPABLES] == undefined) {\n definePropertyModule.f(ArrayPrototype, UNSCOPABLES, {\n configurable: true,\n value: create(null)\n });\n}\n\n// add a key to Array.prototype[@@unscopables]\nmodule.exports = function (key) {\n ArrayPrototype[UNSCOPABLES][key] = true;\n};\n","var global = require('../internals/global');\n\nmodule.exports = function (a, b) {\n var console = global.console;\n if (console && console.error) {\n arguments.length === 1 ? console.error(a) : console.error(a, b);\n }\n};\n","var anObject = require('../internals/an-object');\nvar aFunction = require('../internals/a-function');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `SpeciesConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-speciesconstructor\nmodule.exports = function (O, defaultConstructor) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aFunction(S);\n};\n","var isObject = require('../internals/is-object');\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n var fn, val;\n if (pref === 'string' && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val;\n if (pref !== 'string' && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/engine-v8-version');\nvar fails = require('../internals/fails');\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n var symbol = Symbol();\n // Chrome 38 Symbol has incorrect toString conversion\n // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n return !String(symbol) || !(Object(symbol) instanceof Symbol) ||\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n","var toIndexedObject = require('../internals/to-indexed-object');\nvar toLength = require('../internals/to-length');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIndexedObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare -- NaN check\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare -- NaN check\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) {\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.includes` method\n // https://tc39.es/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.es/ecma262/#sec-array.prototype.indexof\n indexOf: createMethod(false)\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $filter = require('../internals/array-iteration').filter;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter');\n\n// `Array.prototype.filter` method\n// https://tc39.es/ecma262/#sec-array.prototype.filter\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.defineMode(\"go\", function(config) {\n var indentUnit = config.indentUnit;\n\n var keywords = {\n \"break\":true, \"case\":true, \"chan\":true, \"const\":true, \"continue\":true,\n \"default\":true, \"defer\":true, \"else\":true, \"fallthrough\":true, \"for\":true,\n \"func\":true, \"go\":true, \"goto\":true, \"if\":true, \"import\":true,\n \"interface\":true, \"map\":true, \"package\":true, \"range\":true, \"return\":true,\n \"select\":true, \"struct\":true, \"switch\":true, \"type\":true, \"var\":true,\n \"bool\":true, \"byte\":true, \"complex64\":true, \"complex128\":true,\n \"float32\":true, \"float64\":true, \"int8\":true, \"int16\":true, \"int32\":true,\n \"int64\":true, \"string\":true, \"uint8\":true, \"uint16\":true, \"uint32\":true,\n \"uint64\":true, \"int\":true, \"uint\":true, \"uintptr\":true, \"error\": true,\n \"rune\":true\n };\n\n var atoms = {\n \"true\":true, \"false\":true, \"iota\":true, \"nil\":true, \"append\":true,\n \"cap\":true, \"close\":true, \"complex\":true, \"copy\":true, \"delete\":true, \"imag\":true,\n \"len\":true, \"make\":true, \"new\":true, \"panic\":true, \"print\":true,\n \"println\":true, \"real\":true, \"recover\":true\n };\n\n var isOperatorChar = /[+\\-*&^%:=<>!|\\/]/;\n\n var curPunc;\n\n function tokenBase(stream, state) {\n var ch = stream.next();\n if (ch == '\"' || ch == \"'\" || ch == \"`\") {\n state.tokenize = tokenString(ch);\n return state.tokenize(stream, state);\n }\n if (/[\\d\\.]/.test(ch)) {\n if (ch == \".\") {\n stream.match(/^[0-9]+([eE][\\-+]?[0-9]+)?/);\n } else if (ch == \"0\") {\n stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/);\n } else {\n stream.match(/^[0-9]*\\.?[0-9]*([eE][\\-+]?[0-9]+)?/);\n }\n return \"number\";\n }\n if (/[\\[\\]{}\\(\\),;\\:\\.]/.test(ch)) {\n curPunc = ch;\n return null;\n }\n if (ch == \"/\") {\n if (stream.eat(\"*\")) {\n state.tokenize = tokenComment;\n return tokenComment(stream, state);\n }\n if (stream.eat(\"/\")) {\n stream.skipToEnd();\n return \"comment\";\n }\n }\n if (isOperatorChar.test(ch)) {\n stream.eatWhile(isOperatorChar);\n return \"operator\";\n }\n stream.eatWhile(/[\\w\\$_\\xa1-\\uffff]/);\n var cur = stream.current();\n if (keywords.propertyIsEnumerable(cur)) {\n if (cur == \"case\" || cur == \"default\") curPunc = \"case\";\n return \"keyword\";\n }\n if (atoms.propertyIsEnumerable(cur)) return \"atom\";\n return \"variable\";\n }\n\n function tokenString(quote) {\n return function(stream, state) {\n var escaped = false, next, end = false;\n while ((next = stream.next()) != null) {\n if (next == quote && !escaped) {end = true; break;}\n escaped = !escaped && quote != \"`\" && next == \"\\\\\";\n }\n if (end || !(escaped || quote == \"`\"))\n state.tokenize = tokenBase;\n return \"string\";\n };\n }\n\n function tokenComment(stream, state) {\n var maybeEnd = false, ch;\n while (ch = stream.next()) {\n if (ch == \"/\" && maybeEnd) {\n state.tokenize = tokenBase;\n break;\n }\n maybeEnd = (ch == \"*\");\n }\n return \"comment\";\n }\n\n function Context(indented, column, type, align, prev) {\n this.indented = indented;\n this.column = column;\n this.type = type;\n this.align = align;\n this.prev = prev;\n }\n function pushContext(state, col, type) {\n return state.context = new Context(state.indented, col, type, null, state.context);\n }\n function popContext(state) {\n if (!state.context.prev) return;\n var t = state.context.type;\n if (t == \")\" || t == \"]\" || t == \"}\")\n state.indented = state.context.indented;\n return state.context = state.context.prev;\n }\n\n // Interface\n\n return {\n startState: function(basecolumn) {\n return {\n tokenize: null,\n context: new Context((basecolumn || 0) - indentUnit, 0, \"top\", false),\n indented: 0,\n startOfLine: true\n };\n },\n\n token: function(stream, state) {\n var ctx = state.context;\n if (stream.sol()) {\n if (ctx.align == null) ctx.align = false;\n state.indented = stream.indentation();\n state.startOfLine = true;\n if (ctx.type == \"case\") ctx.type = \"}\";\n }\n if (stream.eatSpace()) return null;\n curPunc = null;\n var style = (state.tokenize || tokenBase)(stream, state);\n if (style == \"comment\") return style;\n if (ctx.align == null) ctx.align = true;\n\n if (curPunc == \"{\") pushContext(state, stream.column(), \"}\");\n else if (curPunc == \"[\") pushContext(state, stream.column(), \"]\");\n else if (curPunc == \"(\") pushContext(state, stream.column(), \")\");\n else if (curPunc == \"case\") ctx.type = \"case\";\n else if (curPunc == \"}\" && ctx.type == \"}\") popContext(state);\n else if (curPunc == ctx.type) popContext(state);\n state.startOfLine = false;\n return style;\n },\n\n indent: function(state, textAfter) {\n if (state.tokenize != tokenBase && state.tokenize != null) return CodeMirror.Pass;\n var ctx = state.context, firstChar = textAfter && textAfter.charAt(0);\n if (ctx.type == \"case\" && /^(?:case|default)\\b/.test(textAfter)) {\n state.context.type = \"}\";\n return ctx.indented;\n }\n var closing = firstChar == ctx.type;\n if (ctx.align) return ctx.column + (closing ? 0 : 1);\n else return ctx.indented + (closing ? 0 : indentUnit);\n },\n\n electricChars: \"{}):\",\n closeBrackets: \"()[]{}''\\\"\\\"``\",\n fold: \"brace\",\n blockCommentStart: \"/*\",\n blockCommentEnd: \"*/\",\n lineComment: \"//\"\n };\n});\n\nCodeMirror.defineMIME(\"text/x-go\", \"go\");\n\n});\n","var toInteger = require('../internals/to-integer');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","var toObject = require('../internals/to-object');\n\nvar hasOwnProperty = {}.hasOwnProperty;\n\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n return hasOwnProperty.call(toObject(it), key);\n};\n","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","import defineProperty from \"./defineProperty.js\";\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nexport default function _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}","var IS_PURE = require('../internals/is-pure');\nvar store = require('../internals/shared-store');\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: '3.17.2',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2021 Denis Pushkarev (zloirock.ru)'\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\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\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = global || self, global.CodeMirror = factory());\n}(this, (function () { 'use strict';\n\n // Kludges for bugs and behavior differences that can't be feature\n // detected are enabled based on userAgent etc sniffing.\n var userAgent = navigator.userAgent;\n var platform = navigator.platform;\n\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\n var ios = safari && (/Mobile\\/\\w+/.test(userAgent) || navigator.maxTouchPoints > 2);\n var android = /Android/.test(userAgent);\n // This is woefully incomplete. Suggestions for alternative methods welcome.\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\n var presto_version = presto && userAgent.match(/Version\\/(\\d*\\.\\d*)/);\n if (presto_version) { presto_version = Number(presto_version[1]); }\n if (presto_version && presto_version >= 15) { presto = false; webkit = true; }\n // Some browsers use the wrong event properties to signal cmd/ctrl on OS X\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) { return new RegExp(\"(^|\\\\s)\" + cls + \"(?:$|\\\\s)\\\\s*\") }\n\n var rmClass = function(node, cls) {\n var current = node.className;\n var match = classTest(cls).exec(current);\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 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 if (className) { e.className = className; }\n if (style) { e.style.cssText = style; }\n if (typeof content == \"string\") { e.appendChild(document.createTextNode(content)); }\n else if (content) { for (var i = 0; i < content.length; ++i) { e.appendChild(content[i]); } }\n return e\n }\n // wrapper for elt, which removes the elt from the accessibility tree\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 if (document.createRange) { range = function(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 { range = function(node, start, end) {\n var r = document.body.createTextRange();\n try { r.moveToElementText(node.parentNode); }\n catch(e) { return r }\n r.collapse(true);\n r.moveEnd(\"character\", end);\n r.moveStart(\"character\", start);\n return r\n }; }\n\n function contains(parent, child) {\n if (child.nodeType == 3) // Android browser always returns false when child is a textnode\n { child = child.parentNode; }\n if (parent.contains)\n { return parent.contains(child) }\n do {\n if (child.nodeType == 11) { child = child.host; }\n if (child == parent) { return true }\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 try {\n activeElement = document.activeElement;\n } catch(e) {\n activeElement = document.body || null;\n }\n while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement)\n { activeElement = activeElement.shadowRoot.activeElement; }\n return activeElement\n }\n\n function addClass(node, cls) {\n var current = node.className;\n if (!classTest(cls).test(current)) { node.className += (current ? \" \" : \"\") + cls; }\n }\n function joinClasses(a, b) {\n var as = a.split(\" \");\n for (var i = 0; i < as.length; i++)\n { if (as[i] && !classTest(as[i]).test(b)) { b += \" \" + as[i]; } }\n return b\n }\n\n var selectInput = function(node) { node.select(); };\n if (ios) // Mobile Safari apparently has a bug where select() is broken.\n { selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length; }; }\n else if (ie) // Suppress mysterious IE10 errors\n { selectInput = function(node) { try { node.select(); } catch(_e) {} }; }\n\n function bind(f) {\n var args = Array.prototype.slice.call(arguments, 1);\n return function(){return f.apply(null, args)}\n }\n\n function copyObj(obj, target, overwrite) {\n if (!target) { target = {}; }\n for (var prop in obj)\n { if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop)))\n { target[prop] = obj[prop]; } }\n return target\n }\n\n // Counts the column offset in a string, taking tabs into account.\n // Used mostly to find indentation.\n function countColumn(string, end, tabSize, startIndex, startValue) {\n if (end == null) {\n end = string.search(/[^\\s\\u00a0]/);\n if (end == -1) { end = string.length; }\n }\n for (var i = startIndex || 0, n = startValue || 0;;) {\n var nextTab = string.indexOf(\"\\t\", i);\n if (nextTab < 0 || nextTab >= end)\n { return n + (end - i) }\n n += nextTab - i;\n n += tabSize - (n % tabSize);\n i = nextTab + 1;\n }\n }\n\n var Delayed = function() {\n this.id = null;\n this.f = null;\n this.time = 0;\n this.handler = bind(this.onTimeout, this);\n };\n Delayed.prototype.onTimeout = function (self) {\n self.id = 0;\n if (self.time <= +new Date) {\n self.f();\n } else {\n setTimeout(self.handler, self.time - +new Date);\n }\n };\n Delayed.prototype.set = function (ms, f) {\n this.f = f;\n var time = +new Date + ms;\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) { return i } }\n return -1\n }\n\n // Number of pixels added to scroller and sizer to hide scrollbar\n var scrollerGap = 50;\n\n // Returned or thrown by various protocols to signal 'I'm not\n // handling this'.\n var Pass = {toString: function(){return \"CodeMirror.Pass\"}};\n\n // Reused option objects for setSelection & friends\n var sel_dontScroll = {scroll: false}, sel_mouse = {origin: \"*mouse\"}, sel_move = {origin: \"+move\"};\n\n // The inverse of countColumn -- find the offset that corresponds to\n // a particular column.\n function findColumn(string, goal, tabSize) {\n for (var pos = 0, col = 0;;) {\n var nextTab = string.indexOf(\"\\t\", pos);\n if (nextTab == -1) { nextTab = string.length; }\n var skipped = nextTab - pos;\n if (nextTab == string.length || col + skipped >= goal)\n { return pos + Math.min(skipped, goal - col) }\n col += nextTab - pos;\n col += tabSize - (col % tabSize);\n pos = nextTab + 1;\n if (col >= goal) { return pos }\n }\n }\n\n var spaceStrs = [\"\"];\n function spaceStr(n) {\n while (spaceStrs.length <= n)\n { spaceStrs.push(lst(spaceStrs) + \" \"); }\n return spaceStrs[n]\n }\n\n function lst(arr) { return arr[arr.length-1] }\n\n function map(array, f) {\n var out = [];\n for (var i = 0; i < array.length; i++) { out[i] = f(array[i], i); }\n return out\n }\n\n function insertSorted(array, value, score) {\n var pos = 0, priority = score(value);\n while (pos < array.length && score(array[pos]) <= priority) { pos++; }\n array.splice(pos, 0, value);\n }\n\n function nothing() {}\n\n function createObj(base, props) {\n var inst;\n if (Object.create) {\n inst = Object.create(base);\n } else {\n nothing.prototype = base;\n inst = new nothing();\n }\n if (props) { copyObj(props, inst); }\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 function isWordCharBasic(ch) {\n return /\\w/.test(ch) || ch > \"\\x80\" &&\n (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch))\n }\n function isWordChar(ch, helper) {\n if (!helper) { return isWordCharBasic(ch) }\n if (helper.source.indexOf(\"\\\\w\") > -1 && isWordCharBasic(ch)) { return true }\n return helper.test(ch)\n }\n\n function isEmpty(obj) {\n for (var n in obj) { if (obj.hasOwnProperty(n) && obj[n]) { return false } }\n return true\n }\n\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 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 function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch) }\n\n // Returns a number from the range [`0`; `str.length`] unless `pos` is outside that range.\n function skipExtendingChars(str, pos, dir) {\n while ((dir < 0 ? pos > 0 : pos < str.length) && isExtendingChar(str.charAt(pos))) { pos += dir; }\n return pos\n }\n\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 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 for (;;) {\n if (from == to) { return from }\n var midF = (from + to) / 2, mid = dir < 0 ? Math.ceil(midF) : Math.floor(midF);\n if (mid == from) { return pred(mid) ? from : to }\n if (pred(mid)) { to = mid; }\n else { from = mid + dir; }\n }\n }\n\n // BIDI HELPERS\n\n function iterateBidiSections(order, from, to, f) {\n if (!order) { return f(from, to, \"ltr\", 0) }\n var found = false;\n for (var i = 0; i < order.length; ++i) {\n var part = order[i];\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 if (!found) { f(from, to, \"ltr\"); }\n }\n\n var bidiOther = null;\n function getBidiPartAt(order, ch, sticky) {\n var found;\n bidiOther = null;\n for (var i = 0; i < order.length; ++i) {\n var cur = order[i];\n if (cur.from < ch && cur.to > ch) { return i }\n if (cur.to == ch) {\n if (cur.from != cur.to && sticky == \"before\") { found = i; }\n else { bidiOther = i; }\n }\n if (cur.from == ch) {\n if (cur.from != cur.to && sticky != \"before\") { found = i; }\n else { bidiOther = i; }\n }\n }\n return found != null ? found : bidiOther\n }\n\n // Bidirectional ordering algorithm\n // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm\n // that this (partially) implements.\n\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\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 var bidiOrdering = (function() {\n // Character types for codepoints 0 to 0xff\n var lowTypes = \"bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN\";\n // Character types for codepoints 0x600 to 0x6f9\n var arabicTypes = \"nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111\";\n function charType(code) {\n if (code <= 0xf7) { return lowTypes.charAt(code) }\n else if (0x590 <= code && code <= 0x5f4) { return \"R\" }\n else if (0x600 <= code && code <= 0x6f9) { return arabicTypes.charAt(code - 0x600) }\n else if (0x6ee <= code && code <= 0x8ac) { return \"r\" }\n else if (0x2000 <= code && code <= 0x200b) { return \"w\" }\n else if (code == 0x200c) { return \"b\" }\n else { return \"L\" }\n }\n\n var bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/;\n var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/;\n\n function BidiSpan(level, from, to) {\n this.level = level;\n this.from = from; 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)) { return false }\n var len = str.length, types = [];\n for (var i = 0; i < len; ++i)\n { types.push(charType(str.charCodeAt(i))); }\n\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 for (var i$1 = 0, prev = outerType; i$1 < len; ++i$1) {\n var type = types[i$1];\n if (type == \"m\") { types[i$1] = prev; }\n else { prev = type; }\n }\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 for (var i$2 = 0, cur = outerType; i$2 < len; ++i$2) {\n var type$1 = types[i$2];\n if (type$1 == \"1\" && cur == \"r\") { types[i$2] = \"n\"; }\n else if (isStrong.test(type$1)) { cur = type$1; if (type$1 == \"r\") { 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 for (var i$3 = 1, prev$1 = types[0]; i$3 < len - 1; ++i$3) {\n var type$2 = types[i$3];\n if (type$2 == \"+\" && prev$1 == \"1\" && types[i$3+1] == \"1\") { types[i$3] = \"1\"; }\n else if (type$2 == \",\" && prev$1 == types[i$3+1] &&\n (prev$1 == \"1\" || prev$1 == \"n\")) { types[i$3] = prev$1; }\n prev$1 = type$2;\n }\n\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 for (var i$4 = 0; i$4 < len; ++i$4) {\n var type$3 = types[i$4];\n if (type$3 == \",\") { types[i$4] = \"N\"; }\n else if (type$3 == \"%\") {\n var end = (void 0);\n for (end = i$4 + 1; end < len && types[end] == \"%\"; ++end) {}\n var replace = (i$4 && types[i$4-1] == \"!\") || (end < len && types[end] == \"1\") ? \"1\" : \"N\";\n for (var j = i$4; j < end; ++j) { types[j] = replace; }\n i$4 = end - 1;\n }\n }\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 for (var i$5 = 0, cur$1 = outerType; i$5 < len; ++i$5) {\n var type$4 = types[i$5];\n if (cur$1 == \"L\" && type$4 == \"1\") { types[i$5] = \"L\"; }\n else if (isStrong.test(type$4)) { cur$1 = type$4; }\n }\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 for (var i$6 = 0; i$6 < len; ++i$6) {\n if (isNeutral.test(types[i$6])) {\n var end$1 = (void 0);\n for (end$1 = i$6 + 1; end$1 < len && isNeutral.test(types[end$1]); ++end$1) {}\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 for (var j$1 = i$6; j$1 < end$1; ++j$1) { types[j$1] = replace$1; }\n i$6 = end$1 - 1;\n }\n }\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 var order = [], m;\n for (var i$7 = 0; i$7 < len;) {\n if (countsAsLeft.test(types[i$7])) {\n var start = i$7;\n for (++i$7; i$7 < len && countsAsLeft.test(types[i$7]); ++i$7) {}\n order.push(new BidiSpan(0, start, i$7));\n } else {\n var pos = i$7, at = order.length, isRTL = direction == \"rtl\" ? 1 : 0;\n for (++i$7; i$7 < len && types[i$7] != \"L\"; ++i$7) {}\n for (var j$2 = pos; j$2 < i$7;) {\n if (countsAsNum.test(types[j$2])) {\n if (pos < j$2) { order.splice(at, 0, new BidiSpan(1, pos, j$2)); at += isRTL; }\n var nstart = j$2;\n for (++j$2; j$2 < i$7 && countsAsNum.test(types[j$2]); ++j$2) {}\n order.splice(at, 0, new BidiSpan(2, nstart, j$2));\n at += isRTL;\n pos = j$2;\n } else { ++j$2; }\n }\n if (pos < i$7) { order.splice(at, 0, new BidiSpan(1, pos, i$7)); }\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 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 })();\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 function getOrder(line, direction) {\n var order = line.order;\n if (order == null) { order = line.order = bidiOrdering(line.text, direction); }\n return order\n }\n\n // EVENT HANDLING\n\n // Lightweight event framework. on/off also work on DOM nodes,\n // registering native DOM handlers.\n\n var noHandlers = [];\n\n var on = function(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, arr = map && map[type];\n if (arr) {\n var index = indexOf(arr, f);\n if (index > -1)\n { map[type] = arr.slice(0, index).concat(arr.slice(index + 1)); }\n }\n }\n }\n\n function signal(emitter, type /*, values...*/) {\n var handlers = getHandlers(emitter, type);\n if (!handlers.length) { return }\n var args = Array.prototype.slice.call(arguments, 2);\n for (var i = 0; i < handlers.length; ++i) { handlers[i].apply(null, args); }\n }\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 function signalDOMEvent(cm, e, override) {\n if (typeof e == \"string\")\n { e = {type: e, preventDefault: function() { this.defaultPrevented = true; }}; }\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 if (!arr) { return }\n var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []);\n for (var i = 0; i < arr.length; ++i) { if (indexOf(set, arr[i]) == -1)\n { set.push(arr[i]); } }\n }\n\n function hasHandler(emitter, type) {\n return getHandlers(emitter, type).length > 0\n }\n\n // Add on and off methods to a constructor's prototype, to make\n // registering events on such objects more convenient.\n function eventMixin(ctor) {\n ctor.prototype.on = function(type, f) {on(this, type, f);};\n ctor.prototype.off = function(type, f) {off(this, type, f);};\n }\n\n // Due to the fact that we still support jurassic IE versions, some\n // compatibility wrappers are needed.\n\n function e_preventDefault(e) {\n if (e.preventDefault) { e.preventDefault(); }\n else { e.returnValue = false; }\n }\n function e_stopPropagation(e) {\n if (e.stopPropagation) { e.stopPropagation(); }\n else { e.cancelBubble = true; }\n }\n function e_defaultPrevented(e) {\n return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false\n }\n function e_stop(e) {e_preventDefault(e); e_stopPropagation(e);}\n\n function e_target(e) {return e.target || e.srcElement}\n function e_button(e) {\n var b = e.which;\n if (b == null) {\n if (e.button & 1) { b = 1; }\n else if (e.button & 2) { b = 3; }\n else if (e.button & 4) { b = 2; }\n }\n if (mac && e.ctrlKey && b == 1) { b = 3; }\n return b\n }\n\n // Detect drag-and-drop\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) { return false }\n var div = elt('div');\n return \"draggable\" in div || \"dragDrop\" in div\n }();\n\n var zwspSupported;\n function zeroWidthElement(measure) {\n if (zwspSupported == null) {\n var test = elt(\"span\", \"\\u200b\");\n removeChildrenAndAdd(measure, elt(\"span\", [test, document.createTextNode(\"x\")]));\n if (measure.firstChild.offsetHeight != 0)\n { zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8); }\n }\n var node = zwspSupported ? elt(\"span\", \"\\u200b\") :\n elt(\"span\", \"\\u00a0\", null, \"display: inline-block; width: 1px; margin-right: -1px\");\n node.setAttribute(\"cm-text\", \"\");\n return node\n }\n\n // Feature-detect IE's crummy client rect reporting for bidi text\n var badBidiRects;\n function hasBadBidiRects(measure) {\n if (badBidiRects != null) { return badBidiRects }\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 if (!r0 || r0.left == r0.right) { return false } // Safari returns null in some cases (#2780)\n return badBidiRects = (r1.right - r0.right < 3)\n }\n\n // See if \"\".split is the broken IE version, if so, provide an\n // alternative way to split lines.\n var splitLinesAuto = \"\\n\\nb\".split(/\\n/).length != 3 ? function (string) {\n var pos = 0, result = [], l = string.length;\n while (pos <= l) {\n var nl = string.indexOf(\"\\n\", pos);\n if (nl == -1) { nl = string.length; }\n var line = string.slice(pos, string.charAt(nl - 1) == \"\\r\" ? nl - 1 : nl);\n var rt = line.indexOf(\"\\r\");\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 return result\n } : function (string) { return string.split(/\\r\\n?|\\n/); };\n\n var hasSelection = window.getSelection ? function (te) {\n try { return te.selectionStart != te.selectionEnd }\n catch(e) { return false }\n } : function (te) {\n var range;\n try {range = te.ownerDocument.selection.createRange();}\n catch(e) {}\n if (!range || range.parentElement() != te) { return false }\n return range.compareEndPoints(\"StartToEnd\", range) != 0\n };\n\n var hasCopyEvent = (function () {\n var e = elt(\"div\");\n if (\"oncopy\" in e) { return true }\n e.setAttribute(\"oncopy\", \"return;\");\n return typeof e.oncopy == \"function\"\n })();\n\n var badZoomedRects = null;\n function hasBadZoomedRects(measure) {\n if (badZoomedRects != null) { return badZoomedRects }\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 }\n\n // Known modes, by name and by MIME\n var modes = {}, mimeModes = {};\n\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 function defineMode(name, mode) {\n if (arguments.length > 2)\n { mode.dependencies = Array.prototype.slice.call(arguments, 2); }\n modes[name] = mode;\n }\n\n function defineMIME(mime, spec) {\n mimeModes[mime] = spec;\n }\n\n // Given a MIME type, a {name, ...options} config object, or a name\n // string, return a mode config object.\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 if (typeof found == \"string\") { found = {name: found}; }\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 if (typeof spec == \"string\") { return {name: spec} }\n else { return spec || {name: \"null\"} }\n }\n\n // Given a mode spec (anything that resolveMode accepts), find and\n // initialize an actual mode object.\n function getMode(options, spec) {\n spec = resolveMode(spec);\n var mfactory = modes[spec.name];\n if (!mfactory) { return getMode(options, \"text/plain\") }\n var modeObj = mfactory(options, spec);\n if (modeExtensions.hasOwnProperty(spec.name)) {\n var exts = modeExtensions[spec.name];\n for (var prop in exts) {\n if (!exts.hasOwnProperty(prop)) { continue }\n if (modeObj.hasOwnProperty(prop)) { modeObj[\"_\" + prop] = modeObj[prop]; }\n modeObj[prop] = exts[prop];\n }\n }\n modeObj.name = spec.name;\n if (spec.helperType) { modeObj.helperType = spec.helperType; }\n if (spec.modeProps) { for (var prop$1 in spec.modeProps)\n { modeObj[prop$1] = spec.modeProps[prop$1]; } }\n\n return modeObj\n }\n\n // This can be used to attach properties to mode objects from\n // outside the actual mode definition.\n var modeExtensions = {};\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) { return state }\n if (mode.copyState) { return mode.copyState(state) }\n var nstate = {};\n for (var n in state) {\n var val = state[n];\n if (val instanceof Array) { val = val.concat([]); }\n nstate[n] = val;\n }\n return nstate\n }\n\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 function innerMode(mode, state) {\n var info;\n while (mode.innerMode) {\n info = mode.innerMode(state);\n if (!info || info.mode == mode) { break }\n state = info.state;\n mode = info.mode;\n }\n return info || {mode: mode, state: state}\n }\n\n function startState(mode, a1, a2) {\n return mode.startState ? mode.startState(a1, a2) : true\n }\n\n // STRING STREAM\n\n // Fed to the mode parsers, provides helper functions to make\n // parsers more succinct.\n\n var StringStream = function(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 () {return this.pos >= this.string.length};\n StringStream.prototype.sol = function () {return this.pos == this.lineStart};\n StringStream.prototype.peek = function () {return this.string.charAt(this.pos) || undefined};\n StringStream.prototype.next = function () {\n if (this.pos < this.string.length)\n { return this.string.charAt(this.pos++) }\n };\n StringStream.prototype.eat = function (match) {\n var ch = this.string.charAt(this.pos);\n var ok;\n if (typeof match == \"string\") { ok = ch == match; }\n else { ok = ch && (match.test ? match.test(ch) : match(ch)); }\n if (ok) {++this.pos; return ch}\n };\n StringStream.prototype.eatWhile = function (match) {\n var start = this.pos;\n while (this.eat(match)){}\n return this.pos > start\n };\n StringStream.prototype.eatSpace = function () {\n var start = this.pos;\n while (/[\\s\\u00a0]/.test(this.string.charAt(this.pos))) { ++this.pos; }\n return this.pos > start\n };\n StringStream.prototype.skipToEnd = function () {this.pos = this.string.length;};\n StringStream.prototype.skipTo = function (ch) {\n var found = this.string.indexOf(ch, this.pos);\n if (found > -1) {this.pos = found; return true}\n };\n StringStream.prototype.backUp = function (n) {this.pos -= 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 return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)\n };\n StringStream.prototype.indentation = function () {\n return countColumn(this.string, null, this.tabSize) -\n (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)\n };\n StringStream.prototype.match = function (pattern, consume, caseInsensitive) {\n if (typeof pattern == \"string\") {\n var cased = function (str) { return caseInsensitive ? str.toLowerCase() : str; };\n var substr = this.string.substr(this.pos, pattern.length);\n if (cased(substr) == cased(pattern)) {\n if (consume !== false) { this.pos += pattern.length; }\n return true\n }\n } else {\n var match = this.string.slice(this.pos).match(pattern);\n if (match && match.index > 0) { return null }\n if (match && consume !== false) { this.pos += match[0].length; }\n return match\n }\n };\n StringStream.prototype.current = function (){return this.string.slice(this.start, this.pos)};\n StringStream.prototype.hideFirstChars = function (n, inner) {\n this.lineStart += n;\n try { return inner() }\n finally { this.lineStart -= n; }\n };\n StringStream.prototype.lookAhead = function (n) {\n var oracle = this.lineOracle;\n return oracle && oracle.lookAhead(n)\n };\n StringStream.prototype.baseToken = function () {\n var oracle = this.lineOracle;\n return oracle && oracle.baseToken(this.pos)\n };\n\n // Find the line object corresponding to the given line number.\n function getLine(doc, n) {\n n -= doc.first;\n if (n < 0 || n >= doc.size) { throw new Error(\"There is no line \" + (n + doc.first) + \" in the document.\") }\n var chunk = doc;\n while (!chunk.lines) {\n for (var i = 0;; ++i) {\n var child = chunk.children[i], sz = child.chunkSize();\n if (n < sz) { chunk = child; break }\n n -= sz;\n }\n }\n return chunk.lines[n]\n }\n\n // Get the part of a document between two positions, as an array of\n // strings.\n function getBetween(doc, start, end) {\n var out = [], n = start.line;\n doc.iter(start.line, end.line + 1, function (line) {\n var text = line.text;\n if (n == end.line) { text = text.slice(0, end.ch); }\n if (n == start.line) { text = text.slice(start.ch); }\n out.push(text);\n ++n;\n });\n return out\n }\n // Get the lines between from and to, as array of strings.\n function getLines(doc, from, to) {\n var out = [];\n doc.iter(from, to, function (line) { out.push(line.text); }); // iter aborts when callback returns truthy value\n return out\n }\n\n // Update the height of a line, propagating the height change\n // upwards to parent nodes.\n function updateLineHeight(line, height) {\n var diff = height - line.height;\n if (diff) { for (var n = line; n; n = n.parent) { n.height += diff; } }\n }\n\n // Given a line object, find its line number by walking up through\n // its parent links.\n function lineNo(line) {\n if (line.parent == null) { return null }\n var cur = line.parent, no = indexOf(cur.lines, line);\n for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) {\n for (var i = 0;; ++i) {\n if (chunk.children[i] == cur) { break }\n no += chunk.children[i].chunkSize();\n }\n }\n return no + cur.first\n }\n\n // Find the line at the given vertical position, using the height\n // information in the document tree.\n function lineAtHeight(chunk, h) {\n var n = chunk.first;\n outer: do {\n for (var i$1 = 0; i$1 < chunk.children.length; ++i$1) {\n var child = chunk.children[i$1], ch = child.height;\n if (h < ch) { chunk = child; continue outer }\n h -= ch;\n n += child.chunkSize();\n }\n return n\n } while (!chunk.lines)\n var i = 0;\n for (; i < chunk.lines.length; ++i) {\n var line = chunk.lines[i], lh = line.height;\n if (h < lh) { break }\n h -= lh;\n }\n return n + i\n }\n\n function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size}\n\n function lineNumberFor(options, i) {\n return String(options.lineNumberFormatter(i + options.firstLineNumber))\n }\n\n // A Pos instance represents a position within the text.\n function Pos(line, ch, sticky) {\n if ( sticky === void 0 ) sticky = null;\n\n if (!(this instanceof Pos)) { return new Pos(line, ch, sticky) }\n this.line = line;\n this.ch = ch;\n this.sticky = sticky;\n }\n\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 function cmp(a, b) { return a.line - b.line || a.ch - b.ch }\n\n function equalCursorPos(a, b) { return a.sticky == b.sticky && cmp(a, b) == 0 }\n\n function copyPos(x) {return Pos(x.line, x.ch)}\n function maxPos(a, b) { return cmp(a, b) < 0 ? b : a }\n function minPos(a, b) { return cmp(a, b) < 0 ? a : b }\n\n // Most of the external API clips given positions to make sure they\n // actually exist within the document.\n function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1))}\n function clipPos(doc, pos) {\n if (pos.line < doc.first) { return Pos(doc.first, 0) }\n var last = doc.first + doc.size - 1;\n if (pos.line > last) { return Pos(last, getLine(doc, last).text.length) }\n return clipToLen(pos, getLine(doc, pos.line).text.length)\n }\n function clipToLen(pos, linelen) {\n var ch = pos.ch;\n if (ch == null || ch > linelen) { return Pos(pos.line, linelen) }\n else if (ch < 0) { return Pos(pos.line, 0) }\n else { return pos }\n }\n function clipPosArray(doc, array) {\n var out = [];\n for (var i = 0; i < array.length; i++) { out[i] = clipPos(doc, array[i]); }\n return out\n }\n\n var SavedContext = function(state, lookAhead) {\n this.state = state;\n this.lookAhead = lookAhead;\n };\n\n var Context = function(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 if (line != null && n > this.maxLookAhead) { this.maxLookAhead = n; }\n return line\n };\n\n Context.prototype.baseToken = function (n) {\n if (!this.baseTokens) { return null }\n while (this.baseTokens[this.baseTokenPos] <= n)\n { this.baseTokenPos += 2; }\n var type = this.baseTokens[this.baseTokenPos + 1];\n return {type: type && type.replace(/( |^)overlay .*/, \"\"),\n size: this.baseTokens[this.baseTokenPos] - n}\n };\n\n Context.prototype.nextLine = function () {\n this.line++;\n if (this.maxLookAhead > 0) { this.maxLookAhead--; }\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 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 };\n\n\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 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], lineClasses = {};\n // Compute the base array of styles\n runMode(cm, line.text, cm.doc.mode, context, function (end, style) { return st.push(end, style); },\n lineClasses, forceToEnd);\n var state = context.state;\n\n // Run overlays, adjust style array.\n var loop = function ( o ) {\n context.baseTokens = st;\n var overlay = cm.state.overlays[o], i = 1, at = 0;\n context.state = true;\n runMode(cm, line.text, overlay.mode, context, function (end, style) {\n var start = i;\n // Ensure there's a token end at the current position, and that i points at it\n while (at < end) {\n var i_end = st[i];\n if (i_end > end)\n { st.splice(i, 1, end, st[i+1], i_end); }\n i += 2;\n at = Math.min(end, i_end);\n }\n if (!style) { return }\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) loop( o );\n\n return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null}\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 if (resetState) { context.state = resetState; }\n line.stateAfter = context.save(!resetState);\n line.styles = result.styles;\n if (result.classes) { line.styleClasses = result.classes; }\n else if (line.styleClasses) { line.styleClasses = null; }\n if (updateFrontier === cm.doc.highlightFrontier)\n { cm.doc.modeFrontier = Math.max(cm.doc.modeFrontier, ++cm.doc.highlightFrontier); }\n }\n return line.styles\n }\n\n function getContextBefore(cm, n, precise) {\n var doc = cm.doc, display = cm.display;\n if (!doc.mode.startState) { return new Context(doc, true, 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\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 if (precise) { doc.modeFrontier = context.line; }\n return context\n }\n\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 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 if (text == \"\") { callBlankLine(mode, context.state); }\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) { return mode.blankLine(state) }\n if (!mode.innerMode) { return }\n var inner = innerMode(mode, state);\n if (inner.mode.blankLine) { return inner.mode.blankLine(inner.state) }\n }\n\n function readToken(mode, stream, state, inner) {\n for (var i = 0; i < 10; i++) {\n if (inner) { inner[0] = innerMode(mode, state).mode; }\n var style = mode.token(stream, state);\n if (stream.pos > stream.start) { return style }\n }\n throw new Error(\"Mode \" + mode.name + \" failed to advance stream.\")\n }\n\n var Token = function(stream, type, state) {\n this.start = stream.start; this.end = stream.pos;\n this.string = stream.current();\n this.type = type || null;\n this.state = state;\n };\n\n // Utility for getTokenAt and getLineTokens\n function takeToken(cm, pos, precise, asArray) {\n var doc = cm.doc, mode = doc.mode, style;\n pos = clipPos(doc, pos);\n var line = getLine(doc, pos.line), context = getContextBefore(cm, pos.line, precise);\n var stream = new StringStream(line.text, cm.options.tabSize, context), tokens;\n if (asArray) { tokens = []; }\n while ((asArray || stream.pos < pos.ch) && !stream.eol()) {\n stream.start = stream.pos;\n style = readToken(mode, stream, context.state);\n if (asArray) { tokens.push(new Token(stream, style, copyState(doc.mode, context.state))); }\n }\n return asArray ? tokens : new Token(stream, style, context.state)\n }\n\n function extractLineClasses(type, output) {\n if (type) { for (;;) {\n var lineClass = type.match(/(?:^|\\s+)line-(background-)?(\\S+)/);\n if (!lineClass) { break }\n type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length);\n var prop = lineClass[1] ? \"bgClass\" : \"textClass\";\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 return type\n }\n\n // Run the given mode's parser over a line, calling f for each token.\n function runMode(cm, text, mode, context, f, lineClasses, forceToEnd) {\n var flattenSpans = mode.flattenSpans;\n if (flattenSpans == null) { flattenSpans = cm.options.flattenSpans; }\n var curStart = 0, curStyle = null;\n var stream = new StringStream(text, cm.options.tabSize, context), style;\n var inner = cm.options.addModeClass && [null];\n if (text == \"\") { extractLineClasses(callBlankLine(mode, context.state), lineClasses); }\n while (!stream.eol()) {\n if (stream.pos > cm.options.maxHighlightLength) {\n flattenSpans = false;\n if (forceToEnd) { processLine(cm, text, context, stream.pos); }\n stream.pos = text.length;\n style = null;\n } else {\n style = extractLineClasses(readToken(mode, stream, context.state, inner), lineClasses);\n }\n if (inner) {\n var mName = inner[0].name;\n if (mName) { style = \"m-\" + (style ? mName + \" \" + style : mName); }\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 curStyle = style;\n }\n stream.start = stream.pos;\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 }\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 function findStartLine(cm, n, precise) {\n var minindent, minline, doc = cm.doc;\n var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100);\n for (var search = n; search > lim; --search) {\n if (search <= doc.first) { return doc.first }\n var line = getLine(doc, search - 1), after = line.stateAfter;\n if (after && (!precise || search + (after instanceof SavedContext ? after.lookAhead : 0) <= doc.modeFrontier))\n { return search }\n var indented = countColumn(line.text, null, cm.options.tabSize);\n if (minline == null || minindent > indented) {\n minline = search - 1;\n minindent = indented;\n }\n }\n return minline\n }\n\n function retreatFrontier(doc, n) {\n doc.modeFrontier = Math.min(doc.modeFrontier, n);\n if (doc.highlightFrontier < n - 10) { return }\n var start = doc.first;\n for (var line = n - 1; line > start; line--) {\n var saved = getLine(doc, line).stateAfter;\n // change is on 3\n // state on line 1 looked ahead 2 -- so saw 3\n // test 1 + 2 < 3 should cover this\n if (saved && (!(saved instanceof SavedContext) || line + saved.lookAhead < n)) {\n start = line + 1;\n break\n }\n }\n doc.highlightFrontier = Math.min(doc.highlightFrontier, start);\n }\n\n // Optimize some code when these features are not used.\n var sawReadOnlySpans = false, sawCollapsedSpans = false;\n\n function seeReadOnlySpans() {\n sawReadOnlySpans = true;\n }\n\n function seeCollapsedSpans() {\n sawCollapsedSpans = true;\n }\n\n // TEXTMARKER SPANS\n\n function MarkedSpan(marker, from, to) {\n this.marker = marker;\n this.from = from; this.to = to;\n }\n\n // Search an array of spans for a span matching the given marker.\n function getMarkedSpanFor(spans, marker) {\n if (spans) { for (var i = 0; i < spans.length; ++i) {\n var span = spans[i];\n if (span.marker == marker) { 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 function removeMarkedSpan(spans, span) {\n var r;\n for (var i = 0; i < spans.length; ++i)\n { if (spans[i] != span) { (r || (r = [])).push(spans[i]); } }\n return r\n }\n\n // Add a span to a line.\n function addMarkedSpan(line, span, op) {\n var inThisOp = op && window.WeakSet && (op.markedSpans || (op.markedSpans = new WeakSet));\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 if (inThisOp) { inThisOp.add(line.markedSpans); }\n }\n span.marker.attachLine(line);\n }\n\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 function markedSpansBefore(old, startCh, isInsert) {\n var nw;\n if (old) { for (var i = 0; i < old.length; ++i) {\n var span = old[i], marker = span.marker;\n var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh);\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 return nw\n }\n function markedSpansAfter(old, endCh, isInsert) {\n var nw;\n if (old) { for (var i = 0; i < old.length; ++i) {\n var span = old[i], marker = span.marker;\n var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh);\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,\n span.to == null ? null : span.to - endCh));\n }\n } }\n return nw\n }\n\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 function stretchSpansOverChange(doc, change) {\n if (change.full) { return null }\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 if (!oldFirst && !oldLast) { return null }\n\n var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0;\n // Get the spans that 'stick out' on both sides\n var first = markedSpansBefore(oldFirst, startCh, isInsert);\n var last = markedSpansAfter(oldLast, endCh, isInsert);\n\n // Next, merge those two ends\n var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0);\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 if (span.to == null) {\n var found = getMarkedSpanFor(last, span.marker);\n if (!found) { span.to = startCh; }\n else if (sameLine) { span.to = found.to == null ? null : found.to + offset; }\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 if (span$1.to != null) { span$1.to += offset; }\n if (span$1.from == null) {\n var found$1 = getMarkedSpanFor(first, span$1.marker);\n if (!found$1) {\n span$1.from = offset;\n if (sameLine) { (first || (first = [])).push(span$1); }\n }\n } else {\n span$1.from += offset;\n if (sameLine) { (first || (first = [])).push(span$1); }\n }\n }\n }\n // Make sure we didn't create any zero-length spans\n if (first) { first = clearEmptySpans(first); }\n if (last && last != first) { last = clearEmptySpans(last); }\n\n var newMarkers = [first];\n if (!sameLine) {\n // Fill gap with whole-line-spans\n var gap = change.text.length - 2, gapMarkers;\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 for (var i$3 = 0; i$3 < gap; ++i$3)\n { newMarkers.push(gapMarkers); }\n newMarkers.push(last);\n }\n return newMarkers\n }\n\n // Remove spans that are empty and don't have a clearWhenEmpty\n // option of false.\n function clearEmptySpans(spans) {\n for (var i = 0; i < spans.length; ++i) {\n var span = spans[i];\n if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false)\n { spans.splice(i--, 1); }\n }\n if (!spans.length) { return null }\n return spans\n }\n\n // Used to 'clip' out readOnly ranges when making a change.\n function removeReadOnlyRanges(doc, from, to) {\n var markers = null;\n doc.iter(from.line, to.line + 1, function (line) {\n if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {\n var mark = line.markedSpans[i].marker;\n if (mark.readOnly && (!markers || indexOf(markers, mark) == -1))\n { (markers || (markers = [])).push(mark); }\n } }\n });\n if (!markers) { return null }\n var parts = [{from: from, to: to}];\n for (var i = 0; i < markers.length; ++i) {\n var mk = markers[i], m = mk.find(0);\n for (var j = 0; j < parts.length; ++j) {\n var p = parts[j];\n if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) { continue }\n var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to);\n if (dfrom < 0 || !mk.inclusiveLeft && !dfrom)\n { newParts.push({from: p.from, to: m.from}); }\n if (dto > 0 || !mk.inclusiveRight && !dto)\n { newParts.push({from: m.to, to: p.to}); }\n parts.splice.apply(parts, newParts);\n j += newParts.length - 3;\n }\n }\n return parts\n }\n\n // Connect or disconnect spans from a line.\n function detachMarkedSpans(line) {\n var spans = line.markedSpans;\n if (!spans) { return }\n for (var i = 0; i < spans.length; ++i)\n { spans[i].marker.detachLine(line); }\n line.markedSpans = null;\n }\n function attachMarkedSpans(line, spans) {\n if (!spans) { return }\n for (var i = 0; i < spans.length; ++i)\n { spans[i].marker.attachLine(line); }\n line.markedSpans = spans;\n }\n\n // Helpers used when computing which overlapping collapsed span\n // counts as the larger one.\n function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0 }\n function extraRight(marker) { return marker.inclusiveRight ? 1 : 0 }\n\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 function compareCollapsedMarkers(a, b) {\n var lenDiff = a.lines.length - b.lines.length;\n if (lenDiff != 0) { return lenDiff }\n var aPos = a.find(), bPos = b.find();\n var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b);\n if (fromCmp) { return -fromCmp }\n var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b);\n if (toCmp) { return toCmp }\n return b.id - a.id\n }\n\n // Find out whether a line ends or starts in a collapsed span. If\n // so, return the marker for that span.\n function collapsedSpanAtSide(line, start) {\n var sps = sawCollapsedSpans && line.markedSpans, found;\n if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {\n sp = sps[i];\n if (sp.marker.collapsed && (start ? sp.from : sp.to) == null &&\n (!found || compareCollapsedMarkers(found, sp.marker) < 0))\n { found = sp.marker; }\n } }\n return found\n }\n function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true) }\n function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false) }\n\n function collapsedSpanAround(line, ch) {\n var sps = sawCollapsedSpans && line.markedSpans, found;\n if (sps) { for (var i = 0; i < sps.length; ++i) {\n var sp = sps[i];\n if (sp.marker.collapsed && (sp.from == null || sp.from < ch) && (sp.to == null || sp.to > ch) &&\n (!found || compareCollapsedMarkers(found, sp.marker) < 0)) { found = sp.marker; }\n } }\n return found\n }\n\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 function conflictingCollapsedRange(doc, lineNo, from, to, marker) {\n var line = getLine(doc, lineNo);\n var sps = sawCollapsedSpans && line.markedSpans;\n if (sps) { for (var i = 0; i < sps.length; ++i) {\n var sp = sps[i];\n if (!sp.marker.collapsed) { continue }\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 if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) { continue }\n if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) ||\n 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 function visualLine(line) {\n var merged;\n while (merged = collapsedSpanAtStart(line))\n { line = merged.find(-1, true).line; }\n return line\n }\n\n function visualLineEnd(line) {\n var merged;\n while (merged = collapsedSpanAtEnd(line))\n { line = merged.find(1, true).line; }\n return line\n }\n\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 function visualLineContinued(line) {\n var merged, lines;\n while (merged = collapsedSpanAtEnd(line)) {\n line = merged.find(1, true).line\n ;(lines || (lines = [])).push(line);\n }\n return lines\n }\n\n // Get the line number of the start of the visual line that the\n // given line number is part of.\n function visualLineNo(doc, lineN) {\n var line = getLine(doc, lineN), vis = visualLine(line);\n if (line == vis) { return lineN }\n return lineNo(vis)\n }\n\n // Get the line number of the start of the next visual line after\n // the given line.\n function visualLineEndNo(doc, lineN) {\n if (lineN > doc.lastLine()) { return lineN }\n var line = getLine(doc, lineN), merged;\n if (!lineIsHidden(doc, line)) { return lineN }\n while (merged = collapsedSpanAtEnd(line))\n { line = merged.find(1, true).line; }\n return lineNo(line) + 1\n }\n\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 function lineIsHidden(doc, line) {\n var sps = sawCollapsedSpans && line.markedSpans;\n if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {\n sp = sps[i];\n if (!sp.marker.collapsed) { continue }\n if (sp.from == null) { return true }\n if (sp.marker.widgetNode) { continue }\n if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp))\n { return true }\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 if (span.marker.inclusiveRight && span.to == line.text.length)\n { return true }\n for (var sp = (void 0), i = 0; i < line.markedSpans.length; ++i) {\n sp = line.markedSpans[i];\n if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to &&\n (sp.to == null || sp.to != span.from) &&\n (sp.marker.inclusiveLeft || span.marker.inclusiveRight) &&\n lineIsHiddenInner(doc, line, sp)) { return true }\n }\n }\n\n // Find the height above the given line.\n function heightAtLine(lineObj) {\n lineObj = visualLine(lineObj);\n\n var h = 0, chunk = lineObj.parent;\n for (var i = 0; i < chunk.lines.length; ++i) {\n var line = chunk.lines[i];\n if (line == lineObj) { break }\n else { h += line.height; }\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 if (cur == chunk) { break }\n else { h += cur.height; }\n }\n }\n return h\n }\n\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 function lineLength(line) {\n if (line.height == 0) { return 0 }\n var len = line.text.length, merged, cur = line;\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 cur = line;\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 return len\n }\n\n // Find the longest line in the document.\n function findMaxLine(cm) {\n var d = cm.display, 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 if (len > d.maxLineLength) {\n d.maxLineLength = len;\n d.maxLine = line;\n }\n });\n }\n\n // LINE DATA STRUCTURE\n\n // Line objects. These hold state related to a line, including\n // highlighting info (the styles array).\n var Line = function(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 () { return lineNo(this) };\n eventMixin(Line);\n\n // Change the content (text, markers) of a line. Automatically\n // invalidates cached information and tries to re-estimate the\n // line's height.\n function updateLine(line, text, markedSpans, estimateHeight) {\n line.text = text;\n if (line.stateAfter) { line.stateAfter = null; }\n if (line.styles) { line.styles = null; }\n if (line.order != null) { line.order = null; }\n detachMarkedSpans(line);\n attachMarkedSpans(line, markedSpans);\n var estHeight = estimateHeight ? estimateHeight(line) : 1;\n if (estHeight != line.height) { updateLineHeight(line, estHeight); }\n }\n\n // Detach a line from the document tree and its markers.\n function cleanUpLine(line) {\n line.parent = null;\n detachMarkedSpans(line);\n }\n\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 var styleToClassCache = {}, styleToClassCacheWithMode = {};\n function interpretTokenStyle(style, options) {\n if (!style || /^\\s*$/.test(style)) { return null }\n var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache;\n return cache[style] ||\n (cache[style] = style.replace(/\\S+/g, \"cm-$&\"))\n }\n\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 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 = {pre: eltP(\"pre\", [content], \"CodeMirror-line\"), content: content,\n col: 0, pos: 0, cm: cm,\n trailingSpace: false,\n splitSpaces: cm.getOption(\"lineWrapping\")};\n lineView.measure = {};\n\n // Iterate over the logical lines that make up this visual line.\n for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) {\n var line = i ? lineView.rest[i - 1] : lineView.line, order = (void 0);\n builder.pos = 0;\n builder.addToken = buildToken;\n // Optionally wire in some hacks into the token-rendering\n // algorithm, to deal with browser quirks.\n if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line, cm.doc.direction)))\n { builder.addToken = buildTokenBadBidi(builder.addToken, order); }\n builder.map = [];\n var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line);\n insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate));\n if (line.styleClasses) {\n if (line.styleClasses.bgClass)\n { builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || \"\"); }\n if (line.styleClasses.textClass)\n { builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || \"\"); }\n }\n\n // Ensure at least a single node is present, for measuring.\n if (builder.map.length == 0)\n { builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))); }\n\n // Store the map and a cache object for the current logical line\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 }\n\n // See issue #2901\n if (webkit) {\n var last = builder.content.lastChild;\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 signal(cm, \"renderLine\", cm, lineView.line, builder.pre);\n if (builder.pre.className)\n { builder.textClass = joinClasses(builder.pre.className, builder.textClass || \"\"); }\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 }\n\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 function buildToken(builder, text, style, startStyle, endStyle, css, attributes) {\n if (!text) { return }\n var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text;\n var special = builder.cm.state.specialChars, mustWrap = false;\n var content;\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 if (ie && ie_version < 9) { mustWrap = true; }\n builder.pos += text.length;\n } else {\n content = document.createDocumentFragment();\n var pos = 0;\n while (true) {\n special.lastIndex = pos;\n var m = special.exec(text);\n var skipped = m ? m.index - pos : text.length - pos;\n if (skipped) {\n var txt = document.createTextNode(displayText.slice(pos, pos + skipped));\n if (ie && ie_version < 9) { content.appendChild(elt(\"span\", [txt])); }\n else { content.appendChild(txt); }\n builder.map.push(builder.pos, builder.pos + skipped, txt);\n builder.col += skipped;\n builder.pos += skipped;\n }\n if (!m) { break }\n pos += skipped + 1;\n var txt$1 = (void 0);\n if (m[0] == \"\\t\") {\n var tabSize = builder.cm.options.tabSize, 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 if (ie && ie_version < 9) { content.appendChild(elt(\"span\", [txt$1])); }\n else { content.appendChild(txt$1); }\n builder.col += 1;\n }\n builder.map.push(builder.pos, builder.pos + 1, txt$1);\n builder.pos++;\n }\n }\n builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32;\n if (style || startStyle || endStyle || mustWrap || css || attributes) {\n var fullStyle = style || \"\";\n if (startStyle) { fullStyle += startStyle; }\n if (endStyle) { fullStyle += endStyle; }\n var token = elt(\"span\", [content], fullStyle, css);\n if (attributes) {\n for (var attr in attributes) { if (attributes.hasOwnProperty(attr) && attr != \"style\" && attr != \"class\")\n { token.setAttribute(attr, attributes[attr]); } }\n }\n return builder.content.appendChild(token)\n }\n builder.content.appendChild(content);\n }\n\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 function splitSpaces(text, trailingBefore) {\n if (text.length > 1 && !/ /.test(text)) { return text }\n var spaceBefore = trailingBefore, result = \"\";\n for (var i = 0; i < text.length; i++) {\n var ch = text.charAt(i);\n if (ch == \" \" && spaceBefore && (i == text.length - 1 || text.charCodeAt(i + 1) == 32))\n { ch = \"\\u00a0\"; }\n result += ch;\n spaceBefore = ch == \" \";\n }\n return result\n }\n\n // Work around nonsense dimensions being reported for stretches of\n // right-to-left text.\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, end = start + text.length;\n for (;;) {\n // Find the part that overlaps with the start of this text\n var part = (void 0);\n for (var i = 0; i < order.length; i++) {\n part = order[i];\n if (part.to > start && part.from <= start) { break }\n }\n if (part.to >= end) { return inner(builder, text, style, startStyle, endStyle, css, attributes) }\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 if (widget) { builder.map.push(builder.pos, builder.pos + size, widget); }\n if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) {\n if (!widget)\n { widget = builder.content.appendChild(document.createElement(\"span\")); }\n widget.setAttribute(\"cm-marker\", marker.id);\n }\n if (widget) {\n builder.cm.display.input.setUneditable(widget);\n builder.content.appendChild(widget);\n }\n builder.pos += size;\n builder.trailingSpace = false;\n }\n\n // Outputs a number of spans to make up a line, taking highlighting\n // and marked text into account.\n function insertLineContent(line, builder, styles) {\n var spans = line.markedSpans, allText = line.text, at = 0;\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 return\n }\n\n var len = allText.length, pos = 0, i = 1, text = \"\", style, css;\n var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, collapsed, attributes;\n for (;;) {\n if (nextChange == pos) { // Update current marker set\n spanStyle = spanEndStyle = spanStartStyle = css = \"\";\n attributes = null;\n collapsed = null; nextChange = Infinity;\n var foundBookmarks = [], endStyles = (void 0);\n for (var j = 0; j < spans.length; ++j) {\n var sp = spans[j], m = sp.marker;\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 if (m.className) { spanStyle += \" \" + m.className; }\n if (m.css) { css = (css ? css + \";\" : \"\") + m.css; }\n if (m.startStyle && sp.from == pos) { spanStartStyle += \" \" + m.startStyle; }\n if (m.endStyle && sp.to == nextChange) { (endStyles || (endStyles = [])).push(m.endStyle, sp.to); }\n // support for the old title property\n // https://github.com/codemirror/CodeMirror/pull/5673\n if (m.title) { (attributes || (attributes = {})).title = m.title; }\n if (m.attributes) {\n for (var attr in m.attributes)\n { (attributes || (attributes = {}))[attr] = m.attributes[attr]; }\n }\n if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0))\n { collapsed = sp; }\n } else if (sp.from > pos && nextChange > sp.from) {\n nextChange = sp.from;\n }\n }\n if (endStyles) { for (var j$1 = 0; j$1 < endStyles.length; j$1 += 2)\n { if (endStyles[j$1 + 1] == nextChange) { spanEndStyle += \" \" + endStyles[j$1]; } } }\n\n if (!collapsed || collapsed.from == pos) { for (var j$2 = 0; j$2 < foundBookmarks.length; ++j$2)\n { buildCollapsedSpan(builder, 0, foundBookmarks[j$2]); } }\n if (collapsed && (collapsed.from || 0) == pos) {\n buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos,\n collapsed.marker, collapsed.from == null);\n if (collapsed.to == null) { return }\n if (collapsed.to == pos) { collapsed = false; }\n }\n }\n if (pos >= len) { break }\n\n var upto = Math.min(len, nextChange);\n while (true) {\n if (text) {\n var end = pos + text.length;\n if (!collapsed) {\n var tokenText = end > upto ? text.slice(0, upto - pos) : text;\n builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle,\n spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : \"\", css, attributes);\n }\n if (end >= upto) {text = text.slice(upto - pos); pos = upto; break}\n pos = end;\n spanStartStyle = \"\";\n }\n text = allText.slice(at, at = styles[i++]);\n style = interpretTokenStyle(styles[i++], builder.cm.options);\n }\n }\n }\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 function LineView(doc, line, lineN) {\n // The starting line\n this.line = line;\n // Continuing lines, if any\n this.rest = visualLineContinued(line);\n // Number of logical lines in this visual line\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 }\n\n // Create a range of LineView objects for the given lines.\n function buildViewArray(cm, from, to) {\n var array = [], nextPos;\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 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, i = 0;\n do {\n for (; i < callbacks.length; i++)\n { callbacks[i].call(null); }\n for (var j = 0; j < group.ops.length; j++) {\n var op = group.ops[j];\n if (op.cursorActivityHandlers)\n { while (op.cursorActivityCalled < op.cursorActivityHandlers.length)\n { op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm); } }\n }\n } while (i < callbacks.length)\n }\n\n function finishOperation(op, endCb) {\n var group = op.ownsGroup;\n if (!group) { return }\n\n try { fireCallbacksForOps(group); }\n finally {\n operationGroup = null;\n endCb(group);\n }\n }\n\n var orphanDelayedCallbacks = null;\n\n // 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 function signalLater(emitter, type /*, values...*/) {\n var arr = getHandlers(emitter, type);\n if (!arr.length) { return }\n var args = Array.prototype.slice.call(arguments, 2), list;\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 var loop = function ( i ) {\n list.push(function () { return arr[i].apply(null, args); });\n };\n\n for (var i = 0; i < arr.length; ++i)\n loop( i );\n }\n\n function fireOrphanDelayed() {\n var delayed = orphanDelayedCallbacks;\n orphanDelayedCallbacks = null;\n for (var i = 0; i < delayed.length; ++i) { delayed[i](); }\n }\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 function updateLineForChanges(cm, lineView, lineN, dims) {\n for (var j = 0; j < lineView.changes.length; j++) {\n var type = lineView.changes[j];\n if (type == \"text\") { updateLineText(cm, lineView); }\n else if (type == \"gutter\") { updateLineGutter(cm, lineView, lineN, dims); }\n else if (type == \"class\") { updateLineClasses(cm, lineView); }\n else if (type == \"widget\") { updateLineWidgets(cm, lineView, dims); }\n }\n lineView.changes = null;\n }\n\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 function ensureLineWrapped(lineView) {\n if (lineView.node == lineView.text) {\n lineView.node = elt(\"div\", null, null, \"position: relative\");\n if (lineView.text.parentNode)\n { lineView.text.parentNode.replaceChild(lineView.node, lineView.text); }\n lineView.node.appendChild(lineView.text);\n if (ie && ie_version < 8) { lineView.node.style.zIndex = 2; }\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 if (cls) { cls += \" CodeMirror-linebackground\"; }\n if (lineView.background) {\n if (cls) { lineView.background.className = cls; }\n else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null; }\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 }\n\n // Wrapper around buildLineContent which will reuse the structure\n // in display.externalMeasured when possible.\n function getLineContent(cm, lineView) {\n var ext = cm.display.externalMeasured;\n if (ext && ext.line == lineView.line) {\n cm.display.externalMeasured = null;\n lineView.measure = ext.measure;\n return ext.built\n }\n return buildLineContent(cm, lineView)\n }\n\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 function updateLineText(cm, lineView) {\n var cls = lineView.text.className;\n var built = getLineContent(cm, lineView);\n if (lineView.text == lineView.node) { lineView.node = built.pre; }\n lineView.text.parentNode.replaceChild(built.pre, lineView.text);\n lineView.text = built.pre;\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 if (lineView.line.wrapClass)\n { ensureLineWrapped(lineView).className = lineView.line.wrapClass; }\n else if (lineView.node != lineView.text)\n { lineView.node.className = \"\"; }\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 if (lineView.gutterBackground) {\n lineView.node.removeChild(lineView.gutterBackground);\n lineView.gutterBackground = null;\n }\n if (lineView.line.gutterClass) {\n var wrap = ensureLineWrapped(lineView);\n lineView.gutterBackground = elt(\"div\", null, \"CodeMirror-gutter-background \" + lineView.line.gutterClass,\n (\"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 var markers = lineView.line.gutterMarkers;\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 if (lineView.line.gutterClass)\n { gutterWrap.className += \" \" + lineView.line.gutterClass; }\n if (cm.options.lineNumbers && (!markers || !markers[\"CodeMirror-linenumbers\"]))\n { lineView.lineNumber = gutterWrap.appendChild(\n elt(\"div\", lineNumberFor(cm.options, lineN),\n \"CodeMirror-linenumber CodeMirror-gutter-elt\",\n (\"left: \" + (dims.gutterLeft[\"CodeMirror-linenumbers\"]) + \"px; width: \" + (cm.display.lineNumInnerWidth) + \"px\"))); }\n if (markers) { for (var k = 0; k < cm.display.gutterSpecs.length; ++k) {\n var id = cm.display.gutterSpecs[k].className, found = markers.hasOwnProperty(id) && markers[id];\n if (found)\n { gutterWrap.appendChild(elt(\"div\", [found], \"CodeMirror-gutter-elt\",\n (\"left: \" + (dims.gutterLeft[id]) + \"px; width: \" + (dims.gutterWidth[id]) + \"px\"))); }\n } }\n }\n }\n\n function updateLineWidgets(cm, lineView, dims) {\n if (lineView.alignable) { lineView.alignable = null; }\n var isWidget = classTest(\"CodeMirror-linewidget\");\n for (var node = lineView.node.firstChild, next = (void 0); node; node = next) {\n next = node.nextSibling;\n if (isWidget.test(node.className)) { lineView.node.removeChild(node); }\n }\n insertLineWidgets(cm, lineView, dims);\n }\n\n // Build a line's DOM representation from scratch\n function buildLineElement(cm, lineView, lineN, dims) {\n var built = getLineContent(cm, lineView);\n lineView.text = lineView.node = built.pre;\n if (built.bgClass) { lineView.bgClass = built.bgClass; }\n if (built.textClass) { lineView.textClass = built.textClass; }\n\n updateLineClasses(cm, lineView);\n updateLineGutter(cm, lineView, lineN, dims);\n insertLineWidgets(cm, lineView, dims);\n return lineView.node\n }\n\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 function insertLineWidgets(cm, lineView, dims) {\n insertLineWidgetsFor(cm, lineView.line, lineView, dims, true);\n if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)\n { insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false); } }\n }\n\n function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) {\n if (!line.widgets) { return }\n var wrap = ensureLineWrapped(lineView);\n for (var i = 0, ws = line.widgets; i < ws.length; ++i) {\n var widget = ws[i], node = elt(\"div\", [widget.node], \"CodeMirror-linewidget\" + (widget.className ? \" \" + widget.className : \"\"));\n if (!widget.handleMouseEvents) { node.setAttribute(\"cm-ignore-events\", \"true\"); }\n positionLineWidget(widget, node, lineView, dims);\n cm.display.input.setUneditable(node);\n if (allowAbove && widget.above)\n { wrap.insertBefore(node, lineView.gutter || lineView.text); }\n else\n { wrap.appendChild(node); }\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 if (!widget.coverGutter) {\n width -= dims.gutterTotalWidth;\n node.style.paddingLeft = dims.gutterTotalWidth + \"px\";\n }\n node.style.width = width + \"px\";\n }\n if (widget.coverGutter) {\n node.style.zIndex = 5;\n node.style.position = \"relative\";\n if (!widget.noHScroll) { node.style.marginLeft = -dims.gutterTotalWidth + \"px\"; }\n }\n }\n\n function widgetHeight(widget) {\n if (widget.height != null) { return widget.height }\n var cm = widget.doc.cm;\n if (!cm) { return 0 }\n if (!contains(document.body, widget.node)) {\n var parentStyle = \"position: relative;\";\n if (widget.coverGutter)\n { parentStyle += \"margin-left: -\" + cm.display.gutters.offsetWidth + \"px;\"; }\n if (widget.noHScroll)\n { parentStyle += \"width: \" + cm.display.wrapper.clientWidth + \"px;\"; }\n removeChildrenAndAdd(cm.display.measure, elt(\"div\", [widget.node], null, parentStyle));\n }\n return widget.height = widget.node.parentNode.offsetHeight\n }\n\n // Return true when the given mouse event happened in a widget\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 (n.parentNode == display.sizer && n != display.mover))\n { return true }\n }\n }\n\n // POSITION MEASUREMENT\n\n function paddingTop(display) {return display.lineSpace.offsetTop}\n function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight}\n function paddingH(display) {\n if (display.cachedPaddingH) { return display.cachedPaddingH }\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 = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)};\n if (!isNaN(data.left) && !isNaN(data.right)) { display.cachedPaddingH = data; }\n return data\n }\n\n function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth }\n function displayWidth(cm) {\n return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth\n }\n function displayHeight(cm) {\n return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight\n }\n\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 function ensureLineHeights(cm, lineView, rect) {\n var wrapping = cm.options.lineWrapping;\n var curWidth = wrapping && displayWidth(cm);\n if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) {\n var heights = lineView.measure.heights = [];\n if (wrapping) {\n lineView.measure.width = curWidth;\n var rects = lineView.text.firstChild.getClientRects();\n for (var i = 0; i < rects.length - 1; i++) {\n var cur = rects[i], next = rects[i + 1];\n if (Math.abs(cur.bottom - next.bottom) > 2)\n { heights.push((cur.bottom + next.top) / 2 - rect.top); }\n }\n }\n heights.push(rect.bottom - rect.top);\n }\n }\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 function mapFromLineView(lineView, line, lineN) {\n if (lineView.line == line)\n { return {map: lineView.measure.map, cache: lineView.measure.cache} }\n for (var i = 0; i < lineView.rest.length; i++)\n { if (lineView.rest[i] == line)\n { return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]} } }\n for (var i$1 = 0; i$1 < lineView.rest.length; i$1++)\n { if (lineNo(lineView.rest[i$1]) > lineN)\n { return {map: lineView.measure.maps[i$1], cache: lineView.measure.caches[i$1], before: true} } }\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 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 }\n\n // Get a {top, bottom, left, right} box (in line-local coordinates)\n // for a given character.\n function measureChar(cm, line, ch, bias) {\n return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias)\n }\n\n // Find a line view that corresponds to the given line number.\n function findViewForLine(cm, lineN) {\n if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo)\n { return cm.display.view[findViewIndex(cm, lineN)] }\n var ext = cm.display.externalMeasured;\n if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size)\n { return ext }\n }\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 function prepareMeasureForLine(cm, line) {\n var lineN = lineNo(line);\n var view = findViewForLine(cm, lineN);\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 if (!view)\n { view = updateExternalMeasurement(cm, line); }\n\n var info = mapFromLineView(view, line, lineN);\n return {\n line: line, view: view, rect: null,\n map: info.map, cache: info.cache, before: info.before,\n hasHeights: false\n }\n }\n\n // Given a prepared measurement object, measures the position of an\n // actual character (or fetches it from the cache).\n function measureCharPrepared(cm, prepared, ch, bias, varHeight) {\n if (prepared.before) { ch = -1; }\n var key = ch + (bias || \"\"), found;\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 if (!prepared.hasHeights) {\n ensureLineHeights(cm, prepared.view, prepared.rect);\n prepared.hasHeights = true;\n }\n found = measureCharInner(cm, prepared, ch, bias);\n if (!found.bogus) { prepared.cache[key] = found; }\n }\n return {left: found.left, right: found.right,\n top: varHeight ? found.rtop : found.top,\n bottom: varHeight ? found.rbottom : found.bottom}\n }\n\n var nullRect = {left: 0, right: 0, top: 0, bottom: 0};\n\n function nodeAndOffsetInLineMap(map, ch, bias) {\n var node, start, end, collapse, mStart, mEnd;\n // First, search the line map for the text node corresponding to,\n // or closest to, the target character.\n for (var i = 0; i < map.length; i += 3) {\n mStart = map[i];\n mEnd = map[i + 1];\n if (ch < mStart) {\n start = 0; 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 if (ch >= mEnd) { collapse = \"right\"; }\n }\n if (start != null) {\n node = map[i + 2];\n if (mStart == mEnd && bias == (node.insertLeft ? \"left\" : \"right\"))\n { collapse = bias; }\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 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 break\n }\n }\n return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd}\n }\n\n function getUsefulRect(rects, bias) {\n var rect = nullRect;\n if (bias == \"left\") { for (var i = 0; i < rects.length; i++) {\n if ((rect = rects[i]).left != rect.right) { break }\n } } else { for (var i$1 = rects.length - 1; i$1 >= 0; i$1--) {\n if ((rect = rects[i$1]).left != rect.right) { break }\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, start = place.start, end = place.end, collapse = place.collapse;\n\n var rect;\n if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates.\n for (var i$1 = 0; i$1 < 4; i$1++) { // Retry a maximum of 4 times when nonsense rectangles are returned\n while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) { --start; }\n while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) { ++end; }\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 if (rect.left || rect.right || start == 0) { break }\n end = start;\n start = start - 1;\n collapse = \"right\";\n }\n if (ie && ie_version < 11) { rect = maybeUpdateRectForZooming(cm.display.measure, rect); }\n } else { // If it is a widget, simply get the box for the whole widget.\n if (start > 0) { collapse = bias = \"right\"; }\n var rects;\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 if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) {\n var rSpan = node.parentNode.getClientRects()[0];\n if (rSpan)\n { rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom}; }\n else\n { rect = nullRect; }\n }\n\n var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top;\n var mid = (rtop + rbot) / 2;\n var heights = prepared.view.measure.heights;\n var i = 0;\n for (; i < heights.length - 1; i++)\n { if (mid < heights[i]) { break } }\n var top = i ? heights[i - 1] : 0, bot = heights[i];\n var result = {left: (collapse == \"right\" ? rect.right : rect.left) - prepared.rect.left,\n right: (collapse == \"left\" ? rect.left : rect.right) - prepared.rect.left,\n top: top, bottom: bot};\n if (!rect.left && !rect.right) { result.bogus = true; }\n if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot; }\n\n return result\n }\n\n // Work around problem with bounding client rects on ranges being\n // returned incorrectly when zoomed on IE10 and below.\n function maybeUpdateRectForZooming(measure, rect) {\n if (!window.screen || screen.logicalXDPI == null ||\n screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure))\n { return rect }\n var scaleX = screen.logicalXDPI / screen.deviceXDPI;\n var scaleY = screen.logicalYDPI / screen.deviceYDPI;\n return {left: rect.left * scaleX, right: rect.right * scaleX,\n top: rect.top * scaleY, bottom: rect.bottom * scaleY}\n }\n\n function clearLineMeasurementCacheFor(lineView) {\n if (lineView.measure) {\n lineView.measure.cache = {};\n lineView.measure.heights = null;\n if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)\n { lineView.measure.caches[i] = {}; } }\n }\n }\n\n function clearLineMeasurementCache(cm) {\n cm.display.externalMeasure = null;\n removeChildren(cm.display.lineMeasure);\n for (var i = 0; i < cm.display.view.length; i++)\n { clearLineMeasurementCacheFor(cm.display.view[i]); }\n }\n\n function clearCaches(cm) {\n clearLineMeasurementCache(cm);\n cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null;\n if (!cm.options.lineWrapping) { cm.display.maxLineChanged = true; }\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) { return -(document.body.getBoundingClientRect().left - parseInt(getComputedStyle(document.body).marginLeft)) }\n return window.pageXOffset || (document.documentElement || document.body).scrollLeft\n }\n function pageScrollY() {\n if (chrome && android) { return -(document.body.getBoundingClientRect().top - parseInt(getComputedStyle(document.body).marginTop)) }\n return window.pageYOffset || (document.documentElement || document.body).scrollTop\n }\n\n function widgetTopHeight(lineObj) {\n var height = 0;\n if (lineObj.widgets) { for (var i = 0; i < lineObj.widgets.length; ++i) { if (lineObj.widgets[i].above)\n { height += widgetHeight(lineObj.widgets[i]); } } }\n return height\n }\n\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 function intoCoordSystem(cm, lineObj, rect, context, includeWidgets) {\n if (!includeWidgets) {\n var height = widgetTopHeight(lineObj);\n rect.top += height; rect.bottom += height;\n }\n if (context == \"line\") { return rect }\n if (!context) { context = \"local\"; }\n var yOff = heightAtLine(lineObj);\n if (context == \"local\") { yOff += paddingTop(cm.display); }\n else { yOff -= cm.display.viewOffset; }\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; rect.right += xOff;\n }\n rect.top += yOff; rect.bottom += yOff;\n return rect\n }\n\n // Coverts a box from \"div\" coords to another coordinate system.\n // Context may be \"window\", \"page\", \"div\", or \"local\"./null.\n function fromCoordSystem(cm, coords, context) {\n if (context == \"div\") { return coords }\n var left = coords.left, top = coords.top;\n // First move into \"page\" coordinate system\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 {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top}\n }\n\n function charCoords(cm, pos, context, lineObj, bias) {\n if (!lineObj) { lineObj = getLine(cm.doc, pos.line); }\n return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context)\n }\n\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 function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) {\n lineObj = lineObj || getLine(cm.doc, pos.line);\n if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); }\n function get(ch, right) {\n var m = measureCharPrepared(cm, preparedMeasure, ch, right ? \"right\" : \"left\", varHeight);\n if (right) { m.left = m.right; } else { m.right = m.left; }\n return intoCoordSystem(cm, lineObj, m, context)\n }\n var order = getOrder(lineObj, cm.doc.direction), ch = pos.ch, sticky = pos.sticky;\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 if (!order) { return get(sticky == \"before\" ? ch - 1 : ch, sticky == \"before\") }\n\n function getBidi(ch, partPos, invert) {\n var part = order[partPos], right = part.level == 1;\n return get(invert ? ch - 1 : ch, right != invert)\n }\n var partPos = getBidiPartAt(order, ch, sticky);\n var other = bidiOther;\n var val = getBidi(ch, partPos, sticky == \"before\");\n if (other != null) { val.other = getBidi(ch, other, sticky != \"before\"); }\n return val\n }\n\n // Used to cheaply estimate the coordinates for a position. Used for\n // intermediate scroll updates.\n function estimateCoords(cm, pos) {\n var left = 0;\n pos = clipPos(cm.doc, pos);\n if (!cm.options.lineWrapping) { left = charWidth(cm.display) * pos.ch; }\n var lineObj = getLine(cm.doc, pos.line);\n var top = heightAtLine(lineObj) + paddingTop(cm.display);\n return {left: left, right: left, top: top, bottom: top + lineObj.height}\n }\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 function PosWithInfo(line, ch, sticky, outside, xRel) {\n var pos = Pos(line, ch, sticky);\n pos.xRel = xRel;\n if (outside) { pos.outside = outside; }\n return pos\n }\n\n // Compute the character position closest to the given coordinates.\n // Input must be lineSpace-local (\"div\" coordinate system).\n function coordsChar(cm, x, y) {\n var doc = cm.doc;\n y += cm.display.viewOffset;\n if (y < 0) { return PosWithInfo(doc.first, 0, null, -1, -1) }\n var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1;\n if (lineN > last)\n { return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, null, 1, 1) }\n if (x < 0) { x = 0; }\n\n var lineObj = getLine(doc, lineN);\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 if (!collapsed) { return found }\n var rangeEnd = collapsed.find(1);\n if (rangeEnd.line == lineN) { return rangeEnd }\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) { return measureCharPrepared(cm, preparedMeasure, ch - 1).bottom <= y; }, end, 0);\n end = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch).top > y; }, begin, end);\n return {begin: begin, end: end}\n }\n\n function wrappedLineExtentChar(cm, lineObj, preparedMeasure, target) {\n if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); }\n var targetTop = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, target), \"line\").top;\n return wrappedLineExtent(cm, lineObj, preparedMeasure, targetTop)\n }\n\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 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);\n // When directly calling `measureCharPrepared`, we have to adjust\n // for the widgets at this line.\n var widgetHeight = widgetTopHeight(lineObj);\n var begin = 0, end = lineObj.text.length, ltr = true;\n\n var order = getOrder(lineObj, cm.doc.direction);\n // If the line isn't plain left-to-right text, first figure out\n // which bidi section the coordinates fall into.\n if (order) {\n var part = (cm.options.lineWrapping ? coordsBidiPartWrapped : coordsBidiPart)\n (cm, lineObj, lineNo, preparedMeasure, order, x, y);\n ltr = part.level != 1;\n // 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 begin = ltr ? part.from : part.to - 1;\n end = ltr ? part.to : part.from - 1;\n }\n\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 var chAround = null, boxAround = null;\n var ch = findFirst(function (ch) {\n var box = measureCharPrepared(cm, preparedMeasure, ch);\n box.top += widgetHeight; box.bottom += widgetHeight;\n if (!boxIsAfter(box, x, y, false)) { return false }\n if (box.top <= y && box.left <= x) {\n chAround = ch;\n boxAround = box;\n }\n return true\n }, begin, end);\n\n var baseX, sticky, outside = false;\n // If a box around the coordinates was found, use that\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, 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)) { 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 sticky = ch == 0 ? \"after\" : ch == lineObj.text.length ? \"before\" :\n (measureCharPrepared(cm, preparedMeasure, ch - (ltr ? 1 : 0)).bottom + widgetHeight <= y) == ltr ?\n \"after\" : \"before\";\n // Now get accurate coordinates for this place, in order to get a\n // base X position\n var coords = cursorCoords(cm, Pos(lineNo, ch, sticky), \"line\", lineObj, preparedMeasure);\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], ltr = part.level != 1;\n return boxIsAfter(cursorCoords(cm, Pos(lineNo, ltr ? part.to : part.from, ltr ? \"before\" : \"after\"),\n \"line\", lineObj, preparedMeasure), x, y, true)\n }, 0, order.length - 1);\n var part = order[index];\n // 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 if (index > 0) {\n var ltr = part.level != 1;\n var start = cursorCoords(cm, Pos(lineNo, ltr ? part.from : part.to, ltr ? \"after\" : \"before\"),\n \"line\", lineObj, preparedMeasure);\n if (boxIsAfter(start, x, y, true) && start.top > y)\n { part = order[index - 1]; }\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 if (/\\s/.test(lineObj.text.charAt(end - 1))) { end--; }\n var part = null, closestDist = null;\n for (var i = 0; i < order.length; i++) {\n var p = order[i];\n if (p.from >= end || p.to <= begin) { continue }\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;\n // Weigh against spans ending before this, so that they are only\n // picked if nothing ends after\n var dist = endX < x ? x - endX + 1e9 : endX - x;\n if (!part || closestDist > dist) {\n part = p;\n closestDist = dist;\n }\n }\n if (!part) { part = order[order.length - 1]; }\n // Clip the part to the wrapped line.\n if (part.from < begin) { part = {from: begin, to: part.to, level: part.level}; }\n if (part.to > end) { part = {from: part.from, to: end, level: part.level}; }\n return part\n }\n\n var measureText;\n // Compute the default text height.\n function textHeight(display) {\n if (display.cachedTextHeight != null) { return display.cachedTextHeight }\n if (measureText == null) {\n measureText = elt(\"pre\", null, \"CodeMirror-line-like\");\n // Measure a bunch of lines, for browsers that compute\n // fractional heights.\n for (var i = 0; i < 49; ++i) {\n measureText.appendChild(document.createTextNode(\"x\"));\n measureText.appendChild(elt(\"br\"));\n }\n measureText.appendChild(document.createTextNode(\"x\"));\n }\n removeChildrenAndAdd(display.measure, measureText);\n var height = measureText.offsetHeight / 50;\n if (height > 3) { display.cachedTextHeight = height; }\n removeChildren(display.measure);\n return height || 1\n }\n\n // Compute the default character width.\n function charWidth(display) {\n if (display.cachedCharWidth != null) { return display.cachedCharWidth }\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(), width = (rect.right - rect.left) / 10;\n if (width > 2) { display.cachedCharWidth = width; }\n return width || 10\n }\n\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 function getDimensions(cm) {\n var d = cm.display, left = {}, width = {};\n var gutterLeft = d.gutters.clientLeft;\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 return {fixedPos: compensateForHScroll(d),\n gutterTotalWidth: d.gutters.offsetWidth,\n gutterLeft: left,\n gutterWidth: width,\n wrapperWidth: d.wrapper.clientWidth}\n }\n\n // Computes display.scroller.scrollLeft + display.gutters.offsetWidth,\n // but using getBoundingClientRect to get a sub-pixel-accurate\n // result.\n function compensateForHScroll(display) {\n return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left\n }\n\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 function estimateHeight(cm) {\n var th = textHeight(cm.display), 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)) { return 0 }\n\n var widgetsHeight = 0;\n if (line.widgets) { for (var i = 0; i < line.widgets.length; i++) {\n if (line.widgets[i].height) { widgetsHeight += line.widgets[i].height; }\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 function estimateLineHeights(cm) {\n var doc = cm.doc, est = estimateHeight(cm);\n doc.iter(function (line) {\n var estHeight = est(line);\n if (estHeight != line.height) { updateLineHeight(line, estHeight); }\n });\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 function posFromMouse(cm, e, liberal, forRect) {\n var display = cm.display;\n if (!liberal && e_target(e).getAttribute(\"cm-not-content\") == \"true\") { return null }\n\n var x, y, space = display.lineSpace.getBoundingClientRect();\n // Fails unpredictably on IE[67] when mouse is dragged around quickly.\n try { x = e.clientX - space.left; y = e.clientY - space.top; }\n catch (e$1) { return null }\n var coords = coordsChar(cm, x, y), line;\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 return coords\n }\n\n // Find the view element corresponding to a given line. Return null\n // when the line isn't visible.\n function findViewIndex(cm, n) {\n if (n >= cm.display.viewTo) { return null }\n n -= cm.display.viewFrom;\n if (n < 0) { return null }\n var view = cm.display.view;\n for (var i = 0; i < view.length; i++) {\n n -= view[i].size;\n if (n < 0) { return i }\n }\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 function regChange(cm, from, to, lendiff) {\n if (from == null) { from = cm.doc.first; }\n if (to == null) { to = cm.doc.first + cm.doc.size; }\n if (!lendiff) { lendiff = 0; }\n\n var display = cm.display;\n if (lendiff && to < display.viewTo &&\n (display.updateLineNumbers == null || display.updateLineNumbers > from))\n { display.updateLineNumbers = from; }\n\n cm.curOp.viewChanged = true;\n\n if (from >= display.viewTo) { // Change after\n if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo)\n { resetView(cm); }\n } else if (to <= display.viewFrom) { // 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) { // Full overlap\n resetView(cm);\n } else if (from <= display.viewFrom) { // Top overlap\n var cut = viewCuttingPoint(cm, to, to + lendiff, 1);\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) { // Bottom overlap\n var cut$1 = viewCuttingPoint(cm, from, from, -1);\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 { // Gap in the middle\n var cutTop = viewCuttingPoint(cm, from, from, -1);\n var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1);\n if (cutTop && cutBot) {\n display.view = display.view.slice(0, cutTop.index)\n .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN))\n .concat(display.view.slice(cutBot.index));\n display.viewTo += lendiff;\n } else {\n resetView(cm);\n }\n }\n\n var ext = display.externalMeasured;\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\n // Register a change to a single line. Type must be one of \"text\",\n // \"gutter\", \"class\", \"widget\"\n function regLineChange(cm, line, type) {\n cm.curOp.viewChanged = true;\n var display = cm.display, ext = cm.display.externalMeasured;\n if (ext && line >= ext.lineN && line < ext.lineN + ext.size)\n { display.externalMeasured = null; }\n\n if (line < display.viewFrom || line >= display.viewTo) { return }\n var lineView = display.view[findViewIndex(cm, line)];\n if (lineView.node == null) { return }\n var arr = lineView.changes || (lineView.changes = []);\n if (indexOf(arr, type) == -1) { arr.push(type); }\n }\n\n // Clear the view.\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), diff, view = cm.display.view;\n if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size)\n { return {index: index, lineN: newN} }\n var n = cm.display.viewFrom;\n for (var i = 0; i < index; i++)\n { n += view[i].size; }\n if (n != oldN) {\n if (dir > 0) {\n if (index == view.length - 1) { return null }\n diff = (n + view[index].size) - oldN;\n index++;\n } else {\n diff = n - oldN;\n }\n oldN += diff; newN += diff;\n }\n while (visualLineNo(cm.doc, newN) != newN) {\n if (index == (dir < 0 ? 0 : view.length - 1)) { return null }\n newN += dir * view[index - (dir < 0 ? 1 : 0)].size;\n index += dir;\n }\n return {index: index, lineN: newN}\n }\n\n // Force the view to cover a given range, adding empty view element\n // or clipping off existing ones as needed.\n function adjustView(cm, from, to) {\n var display = cm.display, view = display.view;\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 display.viewFrom = from;\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 display.viewTo = to;\n }\n\n // Count the number of lines in the view whose DOM representation is\n // out of date (or nonexistent).\n function countDirtyView(cm) {\n var view = cm.display.view, dirty = 0;\n for (var i = 0; i < view.length; i++) {\n var lineView = view[i];\n if (!lineView.hidden && (!lineView.node || lineView.changes)) { ++dirty; }\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\n var doc = cm.doc, 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) { continue }\n var range = doc.sel.ranges[i];\n if (range.from().line >= cm.display.viewTo || range.to().line < cm.display.viewFrom) { continue }\n var collapsed = range.empty();\n if (collapsed || cm.options.showCursorWhenSelecting)\n { drawSelectionCursor(cm, range.head, curFragment); }\n if (!collapsed)\n { drawSelectionRange(cm, range, selFragment); }\n }\n return result\n }\n\n // Draws a cursor for the given range\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\", \"\\u00a0\", \"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 if (charPos.right - charPos.left > 0) {\n cursor.style.width = (charPos.right - charPos.left) + \"px\";\n }\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\", \"\\u00a0\", \"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) { return a.top - b.top || a.left - b.left }\n\n // Draws the given range as a highlighted selection\n function drawSelectionRange(cm, range, output) {\n var display = cm.display, doc = cm.doc;\n var fragment = document.createDocumentFragment();\n var padding = paddingH(cm.display), 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) { top = 0; }\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 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\n var openStart = fromArg == null && from == 0, openEnd = toArg == null && to == lineLen;\n var first = i == 0, last = !order || i == order.length - 1;\n if (toPos.top - fromPos.top <= 3) { // 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 { // Multiple lines\n var topLeft, topRight, botLeft, botRight;\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 add(topLeft, fromPos.top, topRight - topLeft, fromPos.bottom);\n if (fromPos.bottom < toPos.top) { add(leftSide, fromPos.bottom, null, toPos.top); }\n add(botLeft, toPos.top, botRight - botLeft, toPos.bottom);\n }\n\n if (!start || cmpCoords(fromPos, start) < 0) { start = fromPos; }\n if (cmpCoords(toPos, start) < 0) { start = toPos; }\n if (!end || cmpCoords(fromPos, end) < 0) { end = fromPos; }\n if (cmpCoords(toPos, end) < 0) { end = toPos; }\n });\n return {start: start, end: end}\n }\n\n var sFrom = range.from(), sTo = range.to();\n if (sFrom.line == sTo.line) {\n drawForLine(sFrom.line, sFrom.ch, sTo.ch);\n } else {\n var fromLine = getLine(doc, sFrom.line), 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 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 if (leftEnd.bottom < rightStart.top)\n { add(leftSide, leftEnd.bottom, null, rightStart.top); }\n }\n\n output.appendChild(fragment);\n }\n\n // Cursor-blinking\n function restartBlink(cm) {\n if (!cm.state.focused) { return }\n var display = cm.display;\n clearInterval(display.blinker);\n var on = true;\n display.cursorDiv.style.visibility = \"\";\n if (cm.options.cursorBlinkRate > 0)\n { display.blinker = setInterval(function () {\n if (!cm.hasFocus()) { onBlur(cm); }\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 function ensureFocus(cm) {\n if (!cm.hasFocus()) {\n cm.display.input.focus();\n if (!cm.state.focused) { onFocus(cm); }\n }\n }\n\n function delayBlurEvent(cm) {\n cm.state.delayingBlurEvent = true;\n setTimeout(function () { if (cm.state.delayingBlurEvent) {\n cm.state.delayingBlurEvent = false;\n if (cm.state.focused) { onBlur(cm); }\n } }, 100);\n }\n\n function onFocus(cm, e) {\n if (cm.state.delayingBlurEvent && !cm.state.draggingText) { cm.state.delayingBlurEvent = false; }\n\n if (cm.options.readOnly == \"nocursor\") { return }\n if (!cm.state.focused) {\n signal(cm, \"focus\", cm, e);\n cm.state.focused = true;\n addClass(cm.display.wrapper, \"CodeMirror-focused\");\n // 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 if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) {\n cm.display.input.reset();\n if (webkit) { setTimeout(function () { return cm.display.input.reset(true); }, 20); } // Issue #1730\n }\n cm.display.input.receivedFocus();\n }\n restartBlink(cm);\n }\n function onBlur(cm, e) {\n if (cm.state.delayingBlurEvent) { return }\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 clearInterval(cm.display.blinker);\n setTimeout(function () { if (!cm.state.focused) { cm.display.shift = false; } }, 150);\n }\n\n // Read the actual heights of the rendered lines, and update their\n // stored heights to match.\n function updateHeightsInViewport(cm) {\n var display = cm.display;\n var prevBottom = display.lineDiv.offsetTop;\n var viewTop = Math.max(0, display.scroller.getBoundingClientRect().top);\n var oldHeight = display.lineDiv.getBoundingClientRect().top;\n var mustScroll = 0;\n for (var i = 0; i < display.view.length; i++) {\n var cur = display.view[i], wrapping = cm.options.lineWrapping;\n var height = (void 0), width = 0;\n if (cur.hidden) { continue }\n oldHeight += cur.line.height;\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;\n // Check that lines don't extend past the right of the current\n // editor width\n if (!wrapping && cur.text.firstChild)\n { width = cur.text.firstChild.getBoundingClientRect().right - box.left - 1; }\n }\n var diff = cur.line.height - height;\n if (diff > .005 || diff < -.005) {\n if (oldHeight < viewTop) { mustScroll -= diff; }\n updateLineHeight(cur.line, height);\n updateWidgetHeight(cur.line);\n if (cur.rest) { for (var j = 0; j < cur.rest.length; j++)\n { updateWidgetHeight(cur.rest[j]); } }\n }\n if (width > cm.display.sizerWidth) {\n var chWidth = Math.ceil(width / charWidth(cm.display));\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 if (Math.abs(mustScroll) > 2) { display.scroller.scrollTop += mustScroll; }\n }\n\n // Read and store the height of line widgets associated with the\n // given line.\n function updateWidgetHeight(line) {\n if (line.widgets) { for (var i = 0; i < line.widgets.length; ++i) {\n var w = line.widgets[i], parent = w.node.parentNode;\n if (parent) { 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 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), to = lineAtHeight(doc, bottom);\n // Ensure is a {from: {line, ch}, to: {line, ch}} object, and\n // forces those lines into the viewport (if possible).\n if (viewport && viewport.ensure) {\n var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line;\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 return {from: from, to: Math.max(to, from + 1)}\n }\n\n // SCROLLING THINGS INTO VIEW\n\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 function maybeScrollWindow(cm, rect) {\n if (signalDOMEvent(cm, \"scrollCursorIntoView\")) { return }\n\n var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null;\n if (rect.top + box.top < 0) { doScroll = true; }\n else if (rect.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) { doScroll = false; }\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 }\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 function scrollPosIntoView(cm, pos, end, margin) {\n if (margin == null) { margin = 0; }\n var rect;\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 for (var limit = 0; limit < 5; limit++) {\n var changed = false;\n var coords = cursorCoords(cm, pos);\n var endCoords = !end || end == pos ? coords : cursorCoords(cm, end);\n rect = {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 var scrollPos = calculateScrollPos(cm, rect);\n var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft;\n if (scrollPos.scrollTop != null) {\n updateScrollTop(cm, scrollPos.scrollTop);\n if (Math.abs(cm.doc.scrollTop - startTop) > 1) { changed = true; }\n }\n if (scrollPos.scrollLeft != null) {\n setScrollLeft(cm, scrollPos.scrollLeft);\n if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) { changed = true; }\n }\n if (!changed) { break }\n }\n return rect\n }\n\n // Scroll a given set of coordinates into view (immediately).\n function scrollIntoView(cm, rect) {\n var scrollPos = calculateScrollPos(cm, rect);\n if (scrollPos.scrollTop != null) { updateScrollTop(cm, scrollPos.scrollTop); }\n if (scrollPos.scrollLeft != null) { setScrollLeft(cm, scrollPos.scrollLeft); }\n }\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 function calculateScrollPos(cm, rect) {\n var display = cm.display, snapMargin = textHeight(cm.display);\n if (rect.top < 0) { rect.top = 0; }\n var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop;\n var screen = displayHeight(cm), result = {};\n if (rect.bottom - rect.top > screen) { rect.bottom = rect.top + screen; }\n var docBottom = cm.doc.height + paddingVert(display);\n var atTop = rect.top < snapMargin, atBottom = rect.bottom > docBottom - snapMargin;\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 if (newTop != screentop) { result.scrollTop = newTop; }\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 if (tooWide) { rect.right = rect.left + screenw; }\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 return result\n }\n\n // Store a relative adjustment to the scroll position in the current\n // operation (to be applied when the operation finishes).\n function addToScrollTop(cm, top) {\n if (top == null) { return }\n resolveScrollToPos(cm);\n cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top;\n }\n\n // Make sure that at the end of the operation the current cursor is\n // shown.\n function ensureCursorVisible(cm) {\n resolveScrollToPos(cm);\n var cur = cm.getCursor();\n cm.curOp.scrollToPos = {from: cur, to: cur, margin: cm.options.cursorScrollMargin};\n }\n\n function scrollToCoords(cm, x, y) {\n if (x != null || y != null) { resolveScrollToPos(cm); }\n if (x != null) { cm.curOp.scrollLeft = x; }\n if (y != null) { cm.curOp.scrollTop = y; }\n }\n\n function scrollToRange(cm, range) {\n resolveScrollToPos(cm);\n cm.curOp.scrollToPos = range;\n }\n\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 function resolveScrollToPos(cm) {\n var range = cm.curOp.scrollToPos;\n if (range) {\n cm.curOp.scrollToPos = null;\n var from = estimateCoords(cm, range.from), 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 }\n\n // Sync the scrollable area and scrollbars, ensure the viewport\n // covers the visible area.\n function updateScrollTop(cm, val) {\n if (Math.abs(cm.doc.scrollTop - val) < 2) { return }\n if (!gecko) { updateDisplaySimple(cm, {top: val}); }\n setScrollTop(cm, val, true);\n if (gecko) { updateDisplaySimple(cm); }\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 if (cm.display.scroller.scrollTop == val && !forceScroll) { return }\n cm.doc.scrollTop = val;\n cm.display.scrollbars.setScrollTop(val);\n if (cm.display.scroller.scrollTop != val) { cm.display.scroller.scrollTop = val; }\n }\n\n // Sync scroller and scrollbar, ensure the gutter elements are\n // aligned.\n function setScrollLeft(cm, val, isScroller, forceScroll) {\n val = Math.max(0, Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth));\n if ((isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) && !forceScroll) { return }\n cm.doc.scrollLeft = val;\n alignHorizontally(cm);\n if (cm.display.scroller.scrollLeft != val) { cm.display.scroller.scrollLeft = val; }\n cm.display.scrollbars.setScrollLeft(val);\n }\n\n // SCROLLBARS\n\n // Prepare DOM reads needed to update the scrollbars. Done in one\n // shot to minimize update/measure roundtrips.\n function measureForScrollbars(cm) {\n var d = cm.display, 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, 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(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); place(horiz);\n\n on(vert, \"scroll\", function () {\n if (vert.clientHeight) { scroll(vert.scrollTop, \"vertical\"); }\n });\n on(horiz, \"scroll\", function () {\n if (horiz.clientWidth) { scroll(horiz.scrollLeft, \"horizontal\"); }\n });\n\n this.checkedZeroWidth = false;\n // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8).\n if (ie && ie_version < 8) { this.horiz.style.minHeight = this.vert.style.minWidth = \"18px\"; }\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);\n // A bug in IE8 can cause this value to be negative, so guard it.\n this.vert.firstChild.style.height =\n 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 =\n 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) { this.zeroWidthHack(); }\n this.checkedZeroWidth = true;\n }\n\n return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0}\n };\n\n NativeScrollbars.prototype.setScrollLeft = function (pos) {\n if (this.horiz.scrollLeft != pos) { this.horiz.scrollLeft = pos; }\n if (this.disableHoriz) { this.enableZeroWidthBar(this.horiz, this.disableHoriz, \"horiz\"); }\n };\n\n NativeScrollbars.prototype.setScrollTop = function (pos) {\n if (this.vert.scrollTop != pos) { this.vert.scrollTop = pos; }\n if (this.disableVert) { this.enableZeroWidthBar(this.vert, this.disableVert, \"vert\"); }\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 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)\n : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1);\n if (elt != bar) { bar.style.pointerEvents = \"none\"; }\n else { delay.set(1000, maybeDisable); }\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 () {};\n\n NullScrollbars.prototype.update = function () { return {bottom: 0, right: 0} };\n NullScrollbars.prototype.setScrollLeft = function () {};\n NullScrollbars.prototype.setScrollTop = function () {};\n NullScrollbars.prototype.clear = function () {};\n\n function updateScrollbars(cm, measure) {\n if (!measure) { measure = measureForScrollbars(cm); }\n var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight;\n updateScrollbarsInner(cm, measure);\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 updateScrollbarsInner(cm, measureForScrollbars(cm));\n startWidth = cm.display.barWidth; startHeight = cm.display.barHeight;\n }\n }\n\n // Re-synchronize the fake scrollbars with the actual size of the\n // content.\n function updateScrollbarsInner(cm, measure) {\n var d = cm.display;\n var sizes = d.scrollbars.update(measure);\n\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 { d.scrollbarFiller.style.display = \"\"; }\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 { d.gutterFiller.style.display = \"\"; }\n }\n\n var scrollbarModel = {\"native\": NativeScrollbars, \"null\": NullScrollbars};\n\n function initScrollbars(cm) {\n if (cm.display.scrollbars) {\n cm.display.scrollbars.clear();\n if (cm.display.scrollbars.addClass)\n { rmClass(cm.display.wrapper, cm.display.scrollbars.addClass); }\n }\n\n cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](function (node) {\n cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller);\n // Prevent clicks in the scrollbars from killing focus\n on(node, \"mousedown\", function () {\n if (cm.state.focused) { setTimeout(function () { return cm.display.input.focus(); }, 0); }\n });\n node.setAttribute(\"cm-not-content\", \"true\");\n }, function (pos, axis) {\n if (axis == \"horizontal\") { setScrollLeft(cm, pos); }\n else { updateScrollTop(cm, pos); }\n }, cm);\n if (cm.display.scrollbars.addClass)\n { addClass(cm.display.wrapper, cm.display.scrollbars.addClass); }\n }\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 var nextOpId = 0;\n // Start a new operation.\n function startOperation(cm) {\n cm.curOp = {\n cm: cm,\n viewChanged: false, // Flag that indicates that lines might need to be redrawn\n startHeight: cm.doc.height, // Used to detect need to update scrollbar\n forceUpdate: false, // Used to force a redraw\n updateInput: 0, // Whether to reset the input textarea\n typing: false, // Whether this reset should be careful to leave existing text (for compositing)\n changeObjs: null, // Accumulated changes, for firing change events\n cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on\n cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already\n selectionChanged: false, // Whether the selection needs to be redrawn\n updateMaxLine: false, // Set when the widest line needs to be determined anew\n scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet\n scrollToPos: null, // Used to scroll to a specific position\n focus: false,\n id: ++nextOpId, // Unique ID\n markArrays: null // Used by addMarkedSpan\n };\n pushOperation(cm.curOp);\n }\n\n // Finish an operation, updating the display and signalling delayed events\n function endOperation(cm) {\n var op = cm.curOp;\n if (op) { finishOperation(op, function (group) {\n for (var i = 0; i < group.ops.length; i++)\n { group.ops[i].cm.curOp = null; }\n endOperations(group);\n }); }\n }\n\n // The DOM updates done when an operation finishes are batched so\n // that the minimum number of relayouts are required.\n function endOperations(group) {\n var ops = group.ops;\n for (var i = 0; i < ops.length; i++) // Read DOM\n { endOperation_R1(ops[i]); }\n for (var i$1 = 0; i$1 < ops.length; i$1++) // Write DOM (maybe)\n { endOperation_W1(ops[i$1]); }\n for (var i$2 = 0; i$2 < ops.length; i$2++) // Read DOM\n { endOperation_R2(ops[i$2]); }\n for (var i$3 = 0; i$3 < ops.length; i$3++) // Write DOM (maybe)\n { endOperation_W2(ops[i$3]); }\n for (var i$4 = 0; i$4 < ops.length; i$4++) // Read DOM\n { endOperation_finish(ops[i$4]); }\n }\n\n function endOperation_R1(op) {\n var cm = op.cm, display = cm.display;\n maybeClipScrollbars(cm);\n if (op.updateMaxLine) { findMaxLine(cm); }\n\n op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null ||\n op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom ||\n op.scrollToPos.to.line >= display.viewTo) ||\n display.maxLineChanged && cm.options.lineWrapping;\n op.update = op.mustUpdate &&\n new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, 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, display = cm.display;\n if (op.updatedDisplay) { updateHeightsInViewport(cm); }\n\n op.barMeasure = measureForScrollbars(cm);\n\n // 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 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 =\n 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 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 if (op.maxScrollLeft < cm.doc.scrollLeft)\n { setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true); }\n cm.display.maxLineChanged = false;\n }\n\n var takeFocus = op.focus && op.focus == activeElt();\n if (op.preparedSelection)\n { cm.display.input.showSelection(op.preparedSelection, takeFocus); }\n if (op.updatedDisplay || op.startHeight != cm.doc.height)\n { updateScrollbars(cm, op.barMeasure); }\n if (op.updatedDisplay)\n { setDocumentHeight(cm, op.barMeasure); }\n\n if (op.selectionChanged) { restartBlink(cm); }\n\n if (cm.state.focused && op.updateInput)\n { cm.display.input.reset(op.typing); }\n if (takeFocus) { ensureFocus(op.cm); }\n }\n\n function endOperation_finish(op) {\n var cm = op.cm, display = cm.display, doc = cm.doc;\n\n if (op.updatedDisplay) { postUpdateDisplay(cm, op.update); }\n\n // Abort mouse wheel delta measurement, when scrolling explicitly\n if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos))\n { display.wheelStartX = display.wheelStartY = null; }\n\n // Propagate the scroll position to the actual DOM scroller\n if (op.scrollTop != null) { setScrollTop(cm, op.scrollTop, op.forceScroll); }\n\n if (op.scrollLeft != null) { setScrollLeft(cm, op.scrollLeft, true, true); }\n // If we need to scroll a specific position into view, do so.\n if (op.scrollToPos) {\n var rect = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from),\n clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin);\n maybeScrollWindow(cm, rect);\n }\n\n // Fire events for markers that are hidden/unidden by editing or\n // undoing\n var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers;\n if (hidden) { for (var i = 0; i < hidden.length; ++i)\n { if (!hidden[i].lines.length) { signal(hidden[i], \"hide\"); } } }\n if (unhidden) { for (var i$1 = 0; i$1 < unhidden.length; ++i$1)\n { if (unhidden[i$1].lines.length) { signal(unhidden[i$1], \"unhide\"); } } }\n\n if (display.wrapper.offsetHeight)\n { doc.scrollTop = cm.display.scroller.scrollTop; }\n\n // Fire change events, and delayed event handlers\n if (op.changeObjs)\n { signal(cm, \"changes\", cm, op.changeObjs); }\n if (op.update)\n { op.update.finish(); }\n }\n\n // Run the given function in an operation\n function runInOp(cm, f) {\n if (cm.curOp) { return f() }\n startOperation(cm);\n try { return f() }\n finally { endOperation(cm); }\n }\n // Wraps a function in an operation. Returns the wrapped function.\n function operation(cm, f) {\n return function() {\n if (cm.curOp) { return f.apply(cm, arguments) }\n startOperation(cm);\n try { return f.apply(cm, arguments) }\n finally { endOperation(cm); }\n }\n }\n // Used to add methods to editor and doc instances, wrapping them in\n // operations.\n function methodOp(f) {\n return function() {\n if (this.curOp) { return f.apply(this, arguments) }\n startOperation(this);\n try { return f.apply(this, arguments) }\n finally { endOperation(this); }\n }\n }\n function docMethodOp(f) {\n return function() {\n var cm = this.cm;\n if (!cm || cm.curOp) { return f.apply(this, arguments) }\n startOperation(cm);\n try { return f.apply(this, arguments) }\n finally { endOperation(cm); }\n }\n }\n\n // HIGHLIGHT WORKER\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 function highlightWorker(cm) {\n var doc = cm.doc;\n if (doc.highlightFrontier >= cm.display.viewTo) { return }\n var end = +new Date + cm.options.workTime;\n var context = getContextBefore(cm, doc.highlightFrontier);\n var changedLines = [];\n\n doc.iter(context.line, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function (line) {\n if (context.line >= cm.display.viewFrom) { // 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 if (resetState) { context.state = resetState; }\n line.styles = highlighted.styles;\n var oldCls = line.styleClasses, newCls = highlighted.classes;\n if (newCls) { line.styleClasses = newCls; }\n else if (oldCls) { line.styleClasses = null; }\n var ischange = !oldStyles || oldStyles.length != line.styles.length ||\n oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass);\n for (var i = 0; !ischange && i < oldStyles.length; ++i) { ischange = oldStyles[i] != line.styles[i]; }\n if (ischange) { changedLines.push(context.line); }\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 line.stateAfter = context.line % 5 == 0 ? context.save() : null;\n context.nextLine();\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 if (changedLines.length) { 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 var DisplayUpdate = function(cm, viewport, force) {\n var display = cm.display;\n\n this.viewport = viewport;\n // Store some values that we'll need later (but don't want to force a relayout for)\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 DisplayUpdate.prototype.finish = function () {\n for (var i = 0; i < this.events.length; i++)\n { signal.apply(null, this.events[i]); }\n };\n\n function maybeClipScrollbars(cm) {\n var display = cm.display;\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()) { return null }\n var active = activeElt();\n if (!active || !contains(cm.display.lineDiv, active)) { return null }\n var result = {activeElt: active};\n if (window.getSelection) {\n var sel = window.getSelection();\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 return result\n }\n\n function restoreSelection(snapshot) {\n if (!snapshot || !snapshot.activeElt || snapshot.activeElt == activeElt()) { return }\n snapshot.activeElt.focus();\n if (!/^(INPUT|TEXTAREA)$/.test(snapshot.activeElt.nodeName) &&\n snapshot.anchorNode && contains(document.body, snapshot.anchorNode) && contains(document.body, snapshot.focusNode)) {\n var sel = window.getSelection(), 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 }\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 function updateDisplayIfNeeded(cm, update) {\n var display = cm.display, doc = cm.doc;\n\n if (update.editorIsHidden) {\n resetView(cm);\n return false\n }\n\n // Bail out if the visible area is already rendered and nothing changed.\n if (!update.force &&\n update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo &&\n (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) &&\n display.renderedView == display.view && countDirtyView(cm) == 0)\n { return false }\n\n if (maybeUpdateLineNumberWidth(cm)) {\n resetView(cm);\n update.dims = getDimensions(cm);\n }\n\n // Compute a suitable new viewport (from & to)\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 if (display.viewFrom < from && from - display.viewFrom < 20) { from = Math.max(doc.first, display.viewFrom); }\n if (display.viewTo > to && display.viewTo - to < 20) { to = Math.min(end, display.viewTo); }\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 ||\n display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth;\n adjustView(cm, from, to);\n\n display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom));\n // Position the mover div to align with the current scroll position\n cm.display.mover.style.top = display.viewOffset + \"px\";\n\n var toUpdate = countDirtyView(cm);\n if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view &&\n (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo))\n { return false }\n\n // For big changes, we hide the enclosing element during the\n // update, since that speeds up the operations on most browsers.\n var selSnapshot = selectionSnapshot(cm);\n if (toUpdate > 4) { display.lineDiv.style.display = \"none\"; }\n patchDisplay(cm, display.updateLineNumbers, update.dims);\n if (toUpdate > 4) { display.lineDiv.style.display = \"\"; }\n display.renderedView = display.view;\n // There might have been a widget with a focused element that got\n // hidden or updated, if so re-focus it.\n restoreSelection(selSnapshot);\n\n // Prevent selection and cursors from interfering with the scroll\n // width and height.\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\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 = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)}; }\n // Updated line heights might result in the drawn area not\n // actually covering the viewport. Keep looping until it does.\n update.visible = visibleLines(cm.display, cm.doc, viewport);\n if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo)\n { break }\n } else if (first) {\n update.visible = visibleLines(cm.display, cm.doc, viewport);\n }\n if (!updateDisplayIfNeeded(cm, update)) { break }\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 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; cm.display.reportedViewTo = cm.display.viewTo;\n }\n }\n\n function updateDisplaySimple(cm, viewport) {\n var update = new DisplayUpdate(cm, viewport);\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 }\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 function patchDisplay(cm, updateNumbersFrom, dims) {\n var display = cm.display, lineNumbers = cm.options.lineNumbers;\n var container = display.lineDiv, cur = container.firstChild;\n\n function rm(node) {\n var next = node.nextSibling;\n // Works around a throw-scroll bug in OS X Webkit\n if (webkit && mac && cm.display.currentWheelTarget == node)\n { node.style.display = \"none\"; }\n else\n { node.parentNode.removeChild(node); }\n return next\n }\n\n var view = display.view, lineN = display.viewFrom;\n // Loop over the elements in the view, syncing cur (the DOM nodes\n // in display.lineDiv) with the view as we go.\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) { // Not drawn yet\n var node = buildLineElement(cm, lineView, lineN, dims);\n container.insertBefore(node, cur);\n } else { // Already drawn\n while (cur != lineView.node) { cur = rm(cur); }\n var updateNumber = lineNumbers && updateNumbersFrom != null &&\n updateNumbersFrom <= lineN && lineView.lineNumber;\n if (lineView.changes) {\n if (indexOf(lineView.changes, \"gutter\") > -1) { updateNumber = false; }\n updateLineForChanges(cm, lineView, lineN, dims);\n }\n if (updateNumber) {\n removeChildren(lineView.lineNumber);\n lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN)));\n }\n cur = lineView.node.nextSibling;\n }\n lineN += lineView.size;\n }\n while (cur) { cur = rm(cur); }\n }\n\n function updateGutterSpace(display) {\n var width = display.gutters.offsetWidth;\n display.sizer.style.marginLeft = width + \"px\";\n // Send an event to consumers responding to changes in gutter width.\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 }\n\n // Re-align line numbers and gutter marks to compensate for\n // horizontal scrolling.\n function alignHorizontally(cm) {\n var display = cm.display, view = display.view;\n if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) { return }\n var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft;\n var gutterW = display.gutters.offsetWidth, left = comp + \"px\";\n for (var i = 0; i < view.length; i++) { if (!view[i].hidden) {\n if (cm.options.fixedGutter) {\n if (view[i].gutter)\n { view[i].gutter.style.left = left; }\n if (view[i].gutterBackground)\n { view[i].gutterBackground.style.left = left; }\n }\n var align = view[i].alignable;\n if (align) { for (var j = 0; j < align.length; j++)\n { align[j].style.left = left; } }\n } }\n if (cm.options.fixedGutter)\n { display.gutters.style.left = (comp + gutterW) + \"px\"; }\n }\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 function maybeUpdateLineNumberWidth(cm) {\n if (!cm.options.lineNumbers) { return false }\n var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display;\n if (last.length != display.lineNumChars) {\n var test = display.measure.appendChild(elt(\"div\", [elt(\"div\", last)],\n \"CodeMirror-linenumber CodeMirror-gutter-elt\"));\n var innerW = test.firstChild.offsetWidth, 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 return false\n }\n\n function getGutters(gutters, lineNumbers) {\n var result = [], sawLineNumbers = false;\n for (var i = 0; i < gutters.length; i++) {\n var name = gutters[i], style = null;\n if (typeof name != \"string\") { style = name.style; name = name.className; }\n if (name == \"CodeMirror-linenumbers\") {\n if (!lineNumbers) { continue }\n else { sawLineNumbers = true; }\n }\n result.push({className: name, style: style});\n }\n if (lineNumbers && !sawLineNumbers) { result.push({className: \"CodeMirror-linenumbers\", style: null}); }\n return result\n }\n\n // Rebuild the gutter elements, ensure the margin to the left of the\n // code matches their width.\n function renderGutters(display) {\n var gutters = display.gutters, specs = display.gutterSpecs;\n removeChildren(gutters);\n display.lineGutter = null;\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 if (style) { gElt.style.cssText = style; }\n if (className == \"CodeMirror-linenumbers\") {\n display.lineGutter = gElt;\n gElt.style.width = (display.lineNumWidth || 1) + \"px\";\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 }\n\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 function Display(place, doc, input, options) {\n var d = this;\n this.input = input;\n\n // Covers bottom-right square when both scrollbars are present.\n d.scrollbarFiller = elt(\"div\", null, \"CodeMirror-scrollbar-filler\");\n d.scrollbarFiller.setAttribute(\"cm-not-content\", \"true\");\n // Covers bottom of gutter when coverGutterNextToScrollbar is on\n // and h scrollbar is present.\n d.gutterFiller = elt(\"div\", null, \"CodeMirror-gutter-filler\");\n d.gutterFiller.setAttribute(\"cm-not-content\", \"true\");\n // Will contain the actual code, positioned to cover the viewport.\n d.lineDiv = eltP(\"div\", null, \"CodeMirror-code\");\n // Elements are added to these to represent selection and cursors.\n d.selectionDiv = elt(\"div\", null, null, \"position: relative; z-index: 1\");\n d.cursorDiv = elt(\"div\", null, \"CodeMirror-cursors\");\n // A visibility: hidden element used to find the size of things.\n d.measure = elt(\"div\", null, \"CodeMirror-measure\");\n // When lines outside of the viewport are measured, they are drawn in this.\n d.lineMeasure = elt(\"div\", null, \"CodeMirror-measure\");\n // Wraps everything that needs to exist inside the vertically-padded coordinate system\n d.lineSpace = eltP(\"div\", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv],\n null, \"position: relative; outline: none\");\n var lines = eltP(\"div\", [d.lineSpace], \"CodeMirror-lines\");\n // Moved around its parent to cover visible view.\n d.mover = elt(\"div\", [lines], null, \"position: relative\");\n // Set to the height of the document, allowing scrolling.\n d.sizer = elt(\"div\", [d.mover], \"CodeMirror-sizer\");\n d.sizerWidth = null;\n // 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 d.heightForcer = elt(\"div\", null, null, \"position: absolute; height: \" + scrollerGap + \"px; width: 1px;\");\n // Will contain the gutters, if any.\n d.gutters = elt(\"div\", null, \"CodeMirror-gutters\");\n d.lineGutter = null;\n // Actual scrollable element.\n d.scroller = elt(\"div\", [d.sizer, d.heightForcer, d.gutters], \"CodeMirror-scroll\");\n d.scroller.setAttribute(\"tabIndex\", \"-1\");\n // The element in which the editor lives.\n d.wrapper = elt(\"div\", [d.scrollbarFiller, d.gutterFiller, d.scroller], \"CodeMirror\");\n\n // 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 d.wrapper.setAttribute('translate', 'no');\n\n // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported)\n if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; }\n if (!webkit && !(gecko && mobile)) { d.scroller.draggable = true; }\n\n if (place) {\n if (place.appendChild) { place.appendChild(d.wrapper); }\n else { place(d.wrapper); }\n }\n\n // Current rendered range (may be bigger than the view window).\n d.viewFrom = d.viewTo = doc.first;\n d.reportedViewFrom = d.reportedViewTo = doc.first;\n // Information about the rendered lines.\n d.view = [];\n d.renderedView = null;\n // Holds info about a single rendered line when it was rendered\n // for measurement, while not in view.\n d.externalMeasured = null;\n // Empty space (in pixels) above the view\n d.viewOffset = 0;\n d.lastWrapHeight = d.lastWrapWidth = 0;\n d.updateLineNumbers = null;\n\n d.nativeBarWidth = d.barHeight = d.barWidth = 0;\n d.scrollbarsClipped = false;\n\n // 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 d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null;\n // 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 d.alignWidgets = false;\n\n d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;\n\n // Tracks the maximum line length so that the horizontal scrollbar\n // can be kept static when scrolling.\n d.maxLine = null;\n d.maxLineLength = 0;\n d.maxLineChanged = false;\n\n // Used for measuring wheel scrolling granularity\n d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null;\n\n // True when shift is held down.\n d.shift = false;\n\n // Used to track whether anything happened since the context menu\n // was opened.\n d.selForContextMenu = null;\n\n d.activeTouch = null;\n\n d.gutterSpecs = getGutters(options.gutters, options.lineNumbers);\n renderGutters(d);\n\n input.init(d);\n }\n\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 var wheelSamples = 0, wheelPixelsPerUnit = null;\n // 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 if (ie) { wheelPixelsPerUnit = -.53; }\n else if (gecko) { wheelPixelsPerUnit = 15; }\n else if (chrome) { wheelPixelsPerUnit = -.7; }\n else if (safari) { wheelPixelsPerUnit = -1/3; }\n\n function wheelEventDelta(e) {\n var dx = e.wheelDeltaX, dy = e.wheelDeltaY;\n if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) { dx = e.detail; }\n if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) { dy = e.detail; }\n else if (dy == null) { dy = e.wheelDelta; }\n return {x: dx, y: dy}\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), dx = delta.x, dy = delta.y;\n var pixelsPerUnit = wheelPixelsPerUnit;\n if (e.deltaMode === 0) {\n dx = e.deltaX;\n dy = e.deltaY;\n pixelsPerUnit = 1;\n }\n\n var display = cm.display, scroll = display.scroller;\n // Quit if there's nothing to scroll here\n var canScrollX = scroll.scrollWidth > scroll.clientWidth;\n var canScrollY = scroll.scrollHeight > scroll.clientHeight;\n if (!(dx && canScrollX || dy && canScrollY)) { return }\n\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 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 }\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 if (dx && !gecko && !presto && pixelsPerUnit != null) {\n if (dy && canScrollY)\n { updateScrollTop(cm, Math.max(0, scroll.scrollTop + dy * pixelsPerUnit)); }\n setScrollLeft(cm, Math.max(0, scroll.scrollLeft + dx * pixelsPerUnit));\n // 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 if (!dy || (dy && canScrollY))\n { e_preventDefault(e); }\n display.wheelStartX = null; // Abort measurement, if in progress\n return\n }\n\n // 'Project' the visible viewport to cover the area that is being\n // scrolled into view (if we know enough to estimate it).\n if (dy && pixelsPerUnit != null) {\n var pixels = dy * pixelsPerUnit;\n var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight;\n if (pixels < 0) { top = Math.max(0, top + pixels - 50); }\n else { bot = Math.min(cm.doc.height, bot + pixels + 50); }\n updateDisplaySimple(cm, {top: top, bottom: bot});\n }\n\n if (wheelSamples < 20 && e.deltaMode !== 0) {\n if (display.wheelStartX == null) {\n display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop;\n display.wheelDX = dx; display.wheelDY = dy;\n setTimeout(function () {\n if (display.wheelStartX == null) { return }\n var movedX = scroll.scrollLeft - display.wheelStartX;\n var movedY = scroll.scrollTop - display.wheelStartY;\n var sample = (movedY && display.wheelDY && movedY / display.wheelDY) ||\n (movedX && display.wheelDX && movedX / display.wheelDX);\n display.wheelStartX = display.wheelStartY = null;\n if (!sample) { return }\n wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1);\n ++wheelSamples;\n }, 200);\n } else {\n display.wheelDX += dx; display.wheelDY += dy;\n }\n }\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 var Selection = function(ranges, primIndex) {\n this.ranges = ranges;\n this.primIndex = primIndex;\n };\n\n Selection.prototype.primary = function () { return this.ranges[this.primIndex] };\n\n Selection.prototype.equals = function (other) {\n if (other == this) { return true }\n if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) { return false }\n for (var i = 0; i < this.ranges.length; i++) {\n var here = this.ranges[i], there = other.ranges[i];\n if (!equalCursorPos(here.anchor, there.anchor) || !equalCursorPos(here.head, there.head)) { return false }\n }\n return true\n };\n\n Selection.prototype.deepCopy = function () {\n var out = [];\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 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()) { return true } }\n return false\n };\n\n Selection.prototype.contains = function (pos, end) {\n if (!end) { end = pos; }\n for (var i = 0; i < this.ranges.length; i++) {\n var range = this.ranges[i];\n if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0)\n { return i }\n }\n return -1\n };\n\n var Range = function(anchor, head) {\n this.anchor = anchor; this.head = head;\n };\n\n Range.prototype.from = function () { return minPos(this.anchor, this.head) };\n Range.prototype.to = function () { return maxPos(this.anchor, this.head) };\n Range.prototype.empty = function () { return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch };\n\n // Take an unsorted, potentially overlapping set of ranges, and\n // build a selection out of it. 'Consumes' ranges array (modifying\n // it).\n function normalizeSelection(cm, ranges, primIndex) {\n var mayTouch = cm && cm.options.selectionsMayTouch;\n var prim = ranges[primIndex];\n ranges.sort(function (a, b) { return cmp(a.from(), b.from()); });\n primIndex = indexOf(ranges, prim);\n for (var i = 1; i < ranges.length; i++) {\n var cur = ranges[i], prev = ranges[i - 1];\n var diff = cmp(prev.to(), cur.from());\n if (mayTouch && !cur.empty() ? diff > 0 : diff >= 0) {\n var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to());\n var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head;\n if (i <= primIndex) { --primIndex; }\n ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to));\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 }\n\n // Compute the position of the end of a change (its 'to' property\n // refers to the pre-change end).\n function changeEnd(change) {\n if (!change.text) { return change.to }\n return Pos(change.from.line + change.text.length - 1,\n lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0))\n }\n\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 function adjustForChange(pos, change) {\n if (cmp(pos, change.from) < 0) { return pos }\n if (cmp(pos, change.to) <= 0) { return changeEnd(change) }\n\n var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch;\n if (pos.line == change.to.line) { ch += changeEnd(change).ch - change.to.ch; }\n return Pos(line, ch)\n }\n\n function computeSelAfterChange(doc, change) {\n var out = [];\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),\n adjustForChange(range.head, change)));\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\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 function computeReplacedSel(doc, changes, hint) {\n var out = [];\n var oldPrev = Pos(doc.first, 0), newPrev = oldPrev;\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 if (hint == \"around\") {\n var range = doc.sel.ranges[i], 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 return new Selection(out, doc.sel.primIndex)\n }\n\n // Used to get the editor into a consistent state again when options change.\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) { line.stateAfter = null; }\n if (line.styles) { line.styles = null; }\n });\n cm.doc.modeFrontier = cm.doc.highlightFrontier = cm.doc.first;\n startWorker(cm, 100);\n cm.state.modeGen++;\n if (cm.curOp) { regChange(cm); }\n }\n\n // DOCUMENT DATA STRUCTURE\n\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 function isWholeLineUpdate(doc, change) {\n return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == \"\" &&\n (!doc.cm || doc.cm.options.wholeLineUpdateBefore)\n }\n\n // Perform a change on the document data structure.\n function updateDoc(doc, change, markedSpans, estimateHeight) {\n function spansFor(n) {return markedSpans ? markedSpans[n] : null}\n function update(line, text, spans) {\n updateLine(line, text, spans, estimateHeight);\n signalLater(line, \"change\", line, change);\n }\n function linesFor(start, end) {\n var result = [];\n for (var i = start; i < end; ++i)\n { result.push(new Line(text[i], spansFor(i), estimateHeight)); }\n return result\n }\n\n var from = change.from, to = change.to, text = change.text;\n var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line);\n var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line;\n\n // Adjust the line structure\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 if (nlines) { doc.remove(from.line, nlines); }\n if (added.length) { doc.insert(from.line, added); }\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 if (nlines > 1) { doc.remove(from.line + 1, nlines - 1); }\n doc.insert(from.line + 1, added$2);\n }\n\n signalLater(doc, \"change\", doc, change);\n }\n\n // Call f for all linked documents.\n function linkedDocs(doc, f, sharedHistOnly) {\n function propagate(doc, skip, sharedHist) {\n if (doc.linked) { for (var i = 0; i < doc.linked.length; ++i) {\n var rel = doc.linked[i];\n if (rel.doc == skip) { continue }\n var shared = sharedHist && rel.sharedHist;\n if (sharedHistOnly && !shared) { continue }\n f(rel.doc, shared);\n propagate(rel.doc, doc, shared);\n } }\n }\n propagate(doc, null, true);\n }\n\n // Attach a document to an editor.\n function attachDoc(cm, doc) {\n if (doc.cm) { throw new Error(\"This document is already in use.\") }\n cm.doc = doc;\n doc.cm = cm;\n estimateLineHeights(cm);\n loadMode(cm);\n setDirectionClass(cm);\n cm.options.direction = doc.direction;\n if (!cm.options.lineWrapping) { findMaxLine(cm); }\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 = []; this.undone = [];\n this.undoDepth = prev ? prev.undoDepth : Infinity;\n // Used to track when changes can be merged into a single undo\n // event\n this.lastModTime = this.lastSelTime = 0;\n this.lastOp = this.lastSelOp = null;\n this.lastOrigin = this.lastSelOrigin = null;\n // Used by the isClean() method\n this.generation = this.maxGeneration = prev ? prev.maxGeneration : 1;\n }\n\n // Create a history change event from an updateDoc-style change\n // object.\n function historyChangeFromChange(doc, change) {\n var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)};\n attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);\n linkedDocs(doc, function (doc) { return attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); }, true);\n return histChange\n }\n\n // Pop all selection events off the end of a history array. Stop at\n // a change event.\n function clearSelectionEvents(array) {\n while (array.length) {\n var last = lst(array);\n if (last.ranges) { array.pop(); }\n else { break }\n }\n }\n\n // Find the top change event in the history. Pop off selection\n // events that are in the way.\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 }\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 function addChangeToHistory(doc, change, selAfter, opId) {\n var hist = doc.history;\n hist.undone.length = 0;\n var time = +new Date, cur;\n var last;\n\n if ((hist.lastOp == opId ||\n hist.lastOrigin == change.origin && change.origin &&\n ((change.origin.charAt(0) == \"+\" && hist.lastModTime > time - (doc.cm ? doc.cm.options.historyEventDelay : 500)) ||\n change.origin.charAt(0) == \"*\")) &&\n (cur = lastChangeEvent(hist, hist.lastOp == opId))) {\n // Merge this change into the last event\n last = lst(cur.changes);\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 if (!before || !before.ranges)\n { pushSelectionToHistory(doc.sel, hist.done); }\n cur = {changes: [historyChangeFromChange(doc, change)],\n generation: hist.generation};\n hist.done.push(cur);\n while (hist.done.length > hist.undoDepth) {\n hist.done.shift();\n if (!hist.done[0].ranges) { hist.done.shift(); }\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) { signal(doc, \"historyAdded\"); }\n }\n\n function selectionEventCanBeMerged(doc, origin, prev, sel) {\n var ch = origin.charAt(0);\n return ch == \"*\" ||\n ch == \"+\" &&\n prev.ranges.length == sel.ranges.length &&\n prev.somethingSelected() == sel.somethingSelected() &&\n new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500)\n }\n\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 function addSelectionToHistory(doc, sel, opId, options) {\n var hist = doc.history, origin = options && options.origin;\n\n // 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 if (opId == hist.lastSelOp ||\n (origin && hist.lastSelOrigin == origin &&\n (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin ||\n selectionEventCanBeMerged(doc, origin, lst(hist.done), sel))))\n { hist.done[hist.done.length - 1] = sel; }\n else\n { pushSelectionToHistory(sel, hist.done); }\n\n hist.lastSelTime = +new Date;\n hist.lastSelOrigin = origin;\n hist.lastSelOp = opId;\n if (options && options.clearRedo !== false)\n { clearSelectionEvents(hist.undone); }\n }\n\n function pushSelectionToHistory(sel, dest) {\n var top = lst(dest);\n if (!(top && top.ranges && top.equals(sel)))\n { dest.push(sel); }\n }\n\n // Used to store marked span information in the history.\n function attachLocalSpans(doc, change, from, to) {\n var existing = change[\"spans_\" + doc.id], 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 function removeClearedSpans(spans) {\n if (!spans) { return null }\n var out;\n for (var i = 0; i < spans.length; ++i) {\n if (spans[i].marker.explicitlyCleared) { if (!out) { out = spans.slice(0, i); } }\n else if (out) { out.push(spans[i]); }\n }\n return !out ? spans : out.length ? out : null\n }\n\n // Retrieve and filter the old marked spans stored in a change event.\n function getOldSpans(doc, change) {\n var found = change[\"spans_\" + doc.id];\n if (!found) { return null }\n var nw = [];\n for (var i = 0; i < change.text.length; ++i)\n { nw.push(removeClearedSpans(found[i])); }\n return nw\n }\n\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 function mergeOldSpans(doc, change) {\n var old = getOldSpans(doc, change);\n var stretched = stretchSpansOverChange(doc, change);\n if (!old) { return stretched }\n if (!stretched) { return old }\n\n for (var i = 0; i < old.length; ++i) {\n var oldCur = old[i], stretchCur = stretched[i];\n if (oldCur && stretchCur) {\n spans: for (var j = 0; j < stretchCur.length; ++j) {\n var span = stretchCur[j];\n for (var k = 0; k < oldCur.length; ++k)\n { if (oldCur[k].marker == span.marker) { continue spans } }\n oldCur.push(span);\n }\n } else if (stretchCur) {\n old[i] = stretchCur;\n }\n }\n return old\n }\n\n // Used both to provide a JSON-safe object in .getHistory, and, when\n // detaching a document, to split the history in two\n function copyHistoryArray(events, newGroup, instantiateSel) {\n var copy = [];\n for (var i = 0; i < events.length; ++i) {\n var event = events[i];\n if (event.ranges) {\n copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event);\n continue\n }\n var changes = event.changes, newChanges = [];\n copy.push({changes: newChanges});\n for (var j = 0; j < changes.length; ++j) {\n var change = changes[j], m = (void 0);\n newChanges.push({from: change.from, to: change.to, text: change.text});\n if (newGroup) { for (var prop in change) { 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 return copy\n }\n\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\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 function extendRange(range, head, other, extend) {\n if (extend) {\n var anchor = range.anchor;\n if (other) {\n var posBefore = cmp(head, anchor) < 0;\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 return new Range(anchor, head)\n } else {\n return new Range(other || head, head)\n }\n }\n\n // Extend the primary selection range, discard the rest.\n function extendSelection(doc, head, other, options, extend) {\n if (extend == null) { extend = doc.cm && (doc.cm.display.shift || doc.extend); }\n setSelection(doc, new Selection([extendRange(doc.sel.primary(), head, other, extend)], 0), options);\n }\n\n // Extend all selections (pos is an array of selections with length\n // equal the number of selections)\n function extendSelections(doc, heads, options) {\n var out = [];\n var extend = doc.cm && (doc.cm.display.shift || doc.extend);\n for (var i = 0; i < doc.sel.ranges.length; i++)\n { out[i] = extendRange(doc.sel.ranges[i], heads[i], null, extend); }\n var newSel = normalizeSelection(doc.cm, out, doc.sel.primIndex);\n setSelection(doc, newSel, options);\n }\n\n // Updates a single range in the selection.\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 }\n\n // Reset the selection to a single range.\n function setSimpleSelection(doc, anchor, head, options) {\n setSelection(doc, simpleSelection(anchor, head), options);\n }\n\n // Give beforeSelectionChange handlers a change to influence a\n // selection update.\n function filterSelectionChange(doc, sel, options) {\n var obj = {\n ranges: sel.ranges,\n update: function(ranges) {\n this.ranges = [];\n for (var i = 0; i < ranges.length; i++)\n { this.ranges[i] = new Range(clipPos(doc, ranges[i].anchor),\n clipPos(doc, ranges[i].head)); }\n },\n origin: options && options.origin\n };\n signal(doc, \"beforeSelectionChange\", doc, obj);\n if (doc.cm) { signal(doc.cm, \"beforeSelectionChange\", doc.cm, obj); }\n if (obj.ranges != sel.ranges) { return normalizeSelection(doc.cm, obj.ranges, obj.ranges.length - 1) }\n else { return sel }\n }\n\n function setSelectionReplaceHistory(doc, sel, options) {\n var done = doc.history.done, last = lst(done);\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 }\n\n // Set a new selection.\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 var bias = options && options.bias ||\n (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 function setSelectionInner(doc, sel) {\n if (sel.equals(doc.sel)) { return }\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 signalLater(doc, \"cursorActivity\", doc);\n }\n\n // Verify that the selection does not partially select any atomic\n // marked ranges.\n function reCheckSelection(doc) {\n setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false));\n }\n\n // Return a selection that does not partially select any atomic\n // ranges.\n function skipAtomicInSelection(doc, sel, bias, mayClear) {\n var out;\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 if (out || newAnchor != range.anchor || newHead != range.head) {\n if (!out) { out = sel.ranges.slice(0, i); }\n out[i] = new Range(newAnchor, newHead);\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 if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {\n var sp = line.markedSpans[i], m = sp.marker;\n\n // 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 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)) &&\n (sp.to == null || (preventCursorRight ? sp.to >= pos.ch : sp.to > pos.ch))) {\n if (mayClear) {\n signal(m, \"beforeCursorEnter\");\n if (m.explicitlyCleared) {\n if (!line.markedSpans) { break }\n else {--i; continue}\n }\n }\n if (!m.atomic) { continue }\n\n if (oldPos) {\n var near = m.find(dir < 0 ? 1 : -1), diff = (void 0);\n if (dir < 0 ? preventCursorRight : preventCursorLeft)\n { near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null); }\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 var far = m.find(dir < 0 ? -1 : 1);\n if (dir < 0 ? preventCursorLeft : preventCursorRight)\n { far = movePos(doc, far, dir, far.line == pos.line ? line : null); }\n return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null\n }\n } }\n return pos\n }\n\n // Ensure a given position is not inside an atomic range.\n function skipAtomic(doc, pos, oldPos, bias, mayClear) {\n var dir = bias || 1;\n var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) ||\n (!mayClear && skipAtomicInner(doc, pos, oldPos, dir, true)) ||\n skipAtomicInner(doc, pos, oldPos, -dir, mayClear) ||\n (!mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true));\n if (!found) {\n doc.cantEdit = true;\n return Pos(doc.first, 0)\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) { return clipPos(doc, Pos(pos.line - 1)) }\n else { return null }\n } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) {\n if (pos.line < doc.first + doc.size - 1) { return Pos(pos.line + 1, 0) }\n else { return null }\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 }\n\n // UPDATING\n\n // Allow \"beforeChange\" event handlers to influence a change\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 () { return obj.canceled = true; }\n };\n if (update) { obj.update = function (from, to, text, origin) {\n if (from) { obj.from = clipPos(doc, from); }\n if (to) { obj.to = clipPos(doc, to); }\n if (text) { obj.text = text; }\n if (origin !== undefined) { obj.origin = origin; }\n }; }\n signal(doc, \"beforeChange\", doc, obj);\n if (doc.cm) { signal(doc.cm, \"beforeChange\", doc.cm, obj); }\n\n if (obj.canceled) {\n if (doc.cm) { doc.cm.curOp.updateInput = 2; }\n return null\n }\n return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin}\n }\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 function makeChange(doc, change, ignoreReadOnly) {\n if (doc.cm) {\n if (!doc.cm.curOp) { return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly) }\n if (doc.cm.state.suppressEdits) { return }\n }\n\n if (hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\")) {\n change = filterChange(doc, change, true);\n if (!change) { return }\n }\n\n // Possibly split or suppress the update based on the presence\n // of read-only spans in its range.\n var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to);\n if (split) {\n for (var i = split.length - 1; i >= 0; --i)\n { makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [\"\"] : change.text, origin: change.origin}); }\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) { return }\n var selAfter = computeSelAfterChange(doc, change);\n addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN);\n\n makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change));\n var rebased = [];\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 makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change));\n });\n }\n\n // Revert a change stored in a document's history.\n function makeChangeFromHistory(doc, type, allowSelectionOnly) {\n var suppress = doc.cm && doc.cm.state.suppressEdits;\n if (suppress && !allowSelectionOnly) { return }\n\n var hist = doc.history, event, selAfter = doc.sel;\n var source = type == \"undo\" ? hist.done : hist.undone, dest = type == \"undo\" ? hist.undone : hist.done;\n\n // Verify that there is a useable event (so that ctrl-z won't\n // needlessly clear selection events)\n var i = 0;\n for (; i < source.length; i++) {\n event = source[i];\n if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges)\n { break }\n }\n if (i == source.length) { return }\n hist.lastOrigin = hist.lastSelOrigin = null;\n\n for (;;) {\n event = source.pop();\n if (event.ranges) {\n pushSelectionToHistory(event, dest);\n if (allowSelectionOnly && !event.equals(doc.sel)) {\n setSelection(doc, event, {clearRedo: false});\n return\n }\n selAfter = event;\n } else if (suppress) {\n source.push(event);\n return\n } else { break }\n }\n\n // Build up a reverse change object to add to the opposite history\n // stack (redo when undoing, and vice versa).\n var antiChanges = [];\n pushSelectionToHistory(selAfter, dest);\n dest.push({changes: antiChanges, generation: hist.generation});\n hist.generation = event.generation || ++hist.maxGeneration;\n\n var filter = hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\");\n\n var loop = function ( i ) {\n var change = event.changes[i];\n change.origin = type;\n if (filter && !filterChange(doc, change, false)) {\n source.length = 0;\n return {}\n }\n\n antiChanges.push(historyChangeFromChange(doc, change));\n\n var after = i ? computeSelAfterChange(doc, change) : lst(source);\n makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change));\n if (!i && doc.cm) { doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)}); }\n var rebased = [];\n\n // Propagate to the linked documents\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 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\n if ( returned ) return returned.v;\n }\n }\n\n // Sub-views need their line numbers shifted when text is added\n // above or below them in the parent document.\n function shiftDoc(doc, distance) {\n if (distance == 0) { return }\n doc.first += distance;\n doc.sel = new Selection(map(doc.sel.ranges, function (range) { return new Range(\n Pos(range.anchor.line + distance, range.anchor.ch),\n Pos(range.head.line + distance, range.head.ch)\n ); }), doc.sel.primIndex);\n if (doc.cm) {\n regChange(doc.cm, doc.first, doc.first - distance, distance);\n for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++)\n { regLineChange(doc.cm, l, \"gutter\"); }\n }\n }\n\n // More lower-level change function, handling only a single document\n // (not linked ones).\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 if (change.to.line < doc.first) {\n shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line));\n return\n }\n if (change.from.line > doc.lastLine()) { return }\n\n // Clip the change to the size of this doc\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 = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch),\n text: [lst(change.text)], origin: change.origin};\n }\n var last = doc.lastLine();\n if (change.to.line > last) {\n change = {from: change.from, to: Pos(last, getLine(doc, last).text.length),\n text: [change.text[0]], origin: change.origin};\n }\n\n change.removed = getBetween(doc, change.from, change.to);\n\n if (!selAfter) { selAfter = computeSelAfterChange(doc, change); }\n if (doc.cm) { makeChangeSingleDocInEditor(doc.cm, change, spans); }\n else { updateDoc(doc, change, spans); }\n setSelectionNoUndo(doc, selAfter, sel_dontScroll);\n\n if (doc.cantEdit && skipAtomic(doc, Pos(doc.firstLine(), 0)))\n { doc.cantEdit = false; }\n }\n\n // Handle the interaction of a change to a document with the editor\n // that this document is part of.\n function makeChangeSingleDocInEditor(cm, change, spans) {\n var doc = cm.doc, display = cm.display, from = change.from, to = change.to;\n\n var recomputeMaxLength = false, checkWidthStart = from.line;\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 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 if (len > display.maxLineLength) {\n display.maxLine = line;\n display.maxLineLength = len;\n display.maxLineChanged = true;\n recomputeMaxLength = false;\n }\n });\n if (recomputeMaxLength) { cm.curOp.updateMaxLine = true; }\n }\n\n retreatFrontier(doc, from.line);\n startWorker(cm, 400);\n\n var lendiff = change.text.length - (to.line - from.line) - 1;\n // Remember that these lines changed, for updating the display\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 var changesHandler = hasHandler(cm, \"changes\"), changeHandler = hasHandler(cm, \"change\");\n if (changeHandler || changesHandler) {\n var obj = {\n from: from, to: to,\n text: change.text,\n removed: change.removed,\n origin: change.origin\n };\n if (changeHandler) { signalLater(cm, \"change\", cm, obj); }\n if (changesHandler) { (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj); }\n }\n cm.display.selForContextMenu = null;\n }\n\n function replaceRange(doc, code, from, to, origin) {\n var assign;\n\n if (!to) { to = from; }\n if (cmp(to, from) < 0) { (assign = [to, from], from = assign[0], to = assign[1]); }\n if (typeof code == \"string\") { code = doc.splitLines(code); }\n makeChange(doc, {from: from, to: to, text: code, origin: origin});\n }\n\n // Rebasing/resetting history to deal with externally-sourced changes\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 }\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 function rebaseHistArray(array, from, to, diff) {\n for (var i = 0; i < array.length; ++i) {\n var sub = array[i], ok = true;\n if (sub.ranges) {\n if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true; }\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 continue\n }\n for (var j$1 = 0; j$1 < sub.changes.length; ++j$1) {\n var cur = sub.changes[j$1];\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 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, to = change.to.line, diff = change.text.length - (to - from) - 1;\n rebaseHistArray(hist.done, from, to, diff);\n rebaseHistArray(hist.undone, from, to, diff);\n }\n\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 function changeLine(doc, handle, changeType, op) {\n var no = handle, line = handle;\n if (typeof handle == \"number\") { line = getLine(doc, clipLine(doc, handle)); }\n else { no = lineNo(handle); }\n if (no == null) { return null }\n if (op(line, no) && doc.cm) { regLineChange(doc.cm, no, changeType); }\n return line\n }\n\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 function LeafChunk(lines) {\n this.lines = lines;\n this.parent = null;\n var height = 0;\n for (var i = 0; i < lines.length; ++i) {\n lines[i].parent = this;\n height += lines[i].height;\n }\n this.height = height;\n }\n\n LeafChunk.prototype = {\n chunkSize: function() { return this.lines.length },\n\n // Remove the n lines at offset 'at'.\n removeInner: function(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 this.lines.splice(at, n);\n },\n\n // Helper used to collapse a small branch into a single leaf.\n collapse: function(lines) {\n lines.push.apply(lines, this.lines);\n },\n\n // Insert the given array of lines at offset 'at', count them as\n // having the given height.\n insertInner: function(at, lines, height) {\n this.height += height;\n this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at));\n for (var i = 0; i < lines.length; ++i) { lines[i].parent = this; }\n },\n\n // Used to iterate over a part of the tree.\n iterN: function(at, n, op) {\n for (var e = at + n; at < e; ++at)\n { if (op(this.lines[at])) { return true } }\n }\n };\n\n function BranchChunk(children) {\n this.children = children;\n var size = 0, height = 0;\n for (var i = 0; i < children.length; ++i) {\n var ch = children[i];\n size += ch.chunkSize(); height += ch.height;\n ch.parent = this;\n }\n this.size = size;\n this.height = height;\n this.parent = null;\n }\n\n BranchChunk.prototype = {\n chunkSize: function() { return this.size },\n\n removeInner: function(at, n) {\n this.size -= n;\n for (var i = 0; i < this.children.length; ++i) {\n var child = this.children[i], sz = child.chunkSize();\n if (at < sz) {\n var rm = Math.min(n, sz - at), oldHeight = child.height;\n child.removeInner(at, rm);\n this.height -= oldHeight - child.height;\n if (sz == rm) { this.children.splice(i--, 1); child.parent = null; }\n if ((n -= rm) == 0) { break }\n at = 0;\n } else { at -= sz; }\n }\n // If the result is smaller than 25 lines, ensure that it is a\n // single leaf node.\n if (this.size - n < 25 &&\n (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\n collapse: function(lines) {\n for (var i = 0; i < this.children.length; ++i) { this.children[i].collapse(lines); }\n },\n\n insertInner: function(at, lines, height) {\n this.size += lines.length;\n this.height += height;\n for (var i = 0; i < this.children.length; ++i) {\n var child = this.children[i], sz = child.chunkSize();\n if (at <= sz) {\n child.insertInner(at, lines, height);\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 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 child.lines = child.lines.slice(0, remaining);\n this.maybeSpill();\n }\n break\n }\n at -= sz;\n }\n },\n\n // When a node has grown, check whether it should be split.\n maybeSpill: function() {\n if (this.children.length <= 10) { return }\n var me = this;\n do {\n var spilled = me.children.splice(me.children.length - 5, 5);\n var sibling = new BranchChunk(spilled);\n if (!me.parent) { // 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 sibling.parent = me.parent;\n } while (me.children.length > 10)\n me.parent.maybeSpill();\n },\n\n iterN: function(at, n, op) {\n for (var i = 0; i < this.children.length; ++i) {\n var child = this.children[i], sz = child.chunkSize();\n if (at < sz) {\n var used = Math.min(n, sz - at);\n if (child.iterN(at, used, op)) { return true }\n if ((n -= used) == 0) { break }\n at = 0;\n } else { at -= sz; }\n }\n }\n };\n\n // Line widgets are block elements displayed above or below a line.\n\n var LineWidget = function(doc, node, options) {\n if (options) { for (var opt in options) { if (options.hasOwnProperty(opt))\n { this[opt] = options[opt]; } } }\n this.doc = doc;\n this.node = node;\n };\n\n LineWidget.prototype.clear = function () {\n var cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line);\n if (no == null || !ws) { return }\n for (var i = 0; i < ws.length; ++i) { if (ws[i] == this) { ws.splice(i--, 1); } }\n if (!ws.length) { line.widgets = null; }\n var height = widgetHeight(this);\n updateLineHeight(line, Math.max(0, line.height - height));\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\n var oldH = this.height, cm = this.doc.cm, line = this.line;\n this.height = null;\n var diff = widgetHeight(this) - oldH;\n if (!diff) { return }\n if (!lineIsHidden(this.doc, line)) { updateLineHeight(line, line.height + diff); }\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 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 function addLineWidget(doc, handle, node, options) {\n var widget = new LineWidget(doc, node, options);\n var cm = doc.cm;\n if (cm && widget.noHScroll) { cm.display.alignWidgets = true; }\n changeLine(doc, handle, \"widget\", function (line) {\n var widgets = line.widgets || (line.widgets = []);\n if (widget.insertAt == null) { widgets.push(widget); }\n else { widgets.splice(Math.min(widgets.length, Math.max(0, widget.insertAt)), 0, widget); }\n widget.line = line;\n if (cm && !lineIsHidden(doc, line)) {\n var aboveVisible = heightAtLine(line) < doc.scrollTop;\n updateLineHeight(line, line.height + widgetHeight(widget));\n if (aboveVisible) { addToScrollTop(cm, widget.height); }\n cm.curOp.forceUpdate = true;\n }\n return true\n });\n if (cm) { signalLater(cm, \"lineWidgetAdded\", cm, widget, typeof handle == \"number\" ? handle : lineNo(handle)); }\n return widget\n }\n\n // TEXTMARKERS\n\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\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 var nextMarkerId = 0;\n\n var TextMarker = function(doc, type) {\n this.lines = [];\n this.type = type;\n this.doc = doc;\n this.id = ++nextMarkerId;\n };\n\n // Clear the marker.\n TextMarker.prototype.clear = function () {\n if (this.explicitlyCleared) { return }\n var cm = this.doc.cm, withOp = cm && !cm.curOp;\n if (withOp) { startOperation(cm); }\n if (hasHandler(this, \"clear\")) {\n var found = this.find();\n if (found) { signalLater(this, \"clear\", found.from, found.to); }\n }\n var min = null, max = null;\n for (var i = 0; i < this.lines.length; ++i) {\n var line = this.lines[i];\n var span = getMarkedSpanFor(line.markedSpans, this);\n if (cm && !this.collapsed) { regLineChange(cm, lineNo(line), \"text\"); }\n else if (cm) {\n if (span.to != null) { max = lineNo(line); }\n if (span.from != null) { min = lineNo(line); }\n }\n line.markedSpans = removeMarkedSpan(line.markedSpans, span);\n if (span.from == null && this.collapsed && !lineIsHidden(this.doc, line) && cm)\n { updateLineHeight(line, textHeight(cm.display)); }\n }\n if (cm && this.collapsed && !cm.options.lineWrapping) { for (var i$1 = 0; i$1 < this.lines.length; ++i$1) {\n var visual = visualLine(this.lines[i$1]), len = lineLength(visual);\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 if (min != null && cm && this.collapsed) { regChange(cm, min, max + 1); }\n this.lines.length = 0;\n this.explicitlyCleared = true;\n if (this.atomic && this.doc.cantEdit) {\n this.doc.cantEdit = false;\n if (cm) { reCheckSelection(cm.doc); }\n }\n if (cm) { signalLater(cm, \"markerCleared\", cm, this, min, max); }\n if (withOp) { endOperation(cm); }\n if (this.parent) { this.parent.clear(); }\n };\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 TextMarker.prototype.find = function (side, lineObj) {\n if (side == null && this.type == \"bookmark\") { side = 1; }\n var from, to;\n for (var i = 0; i < this.lines.length; ++i) {\n var line = this.lines[i];\n var span = getMarkedSpanFor(line.markedSpans, this);\n if (span.from != null) {\n from = Pos(lineObj ? line : lineNo(line), span.from);\n if (side == -1) { return from }\n }\n if (span.to != null) {\n to = Pos(lineObj ? line : lineNo(line), span.to);\n if (side == 1) { return to }\n }\n }\n return from && {from: from, to: to}\n };\n\n // Signals that the marker's widget changed, and surrounding layout\n // should be recomputed.\n TextMarker.prototype.changed = function () {\n var this$1 = this;\n\n var pos = this.find(-1, true), widget = this, cm = this.doc.cm;\n if (!pos || !cm) { return }\n runInOp(cm, function () {\n var line = pos.line, lineN = lineNo(pos.line);\n var view = findViewForLine(cm, lineN);\n if (view) {\n clearLineMeasurementCacheFor(view);\n cm.curOp.selectionChanged = cm.curOp.forceUpdate = true;\n }\n cm.curOp.updateMaxLine = true;\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 if (dHeight)\n { updateLineHeight(line, line.height + dHeight); }\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 if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1)\n { (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); }\n }\n this.lines.push(line);\n };\n\n TextMarker.prototype.detachLine = function (line) {\n this.lines.splice(indexOf(this.lines, line), 1);\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 eventMixin(TextMarker);\n\n // Create a marker, wire it up to the right lines, and\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) { return markTextShared(doc, from, to, options, type) }\n // Ensure we are in an operation.\n if (doc.cm && !doc.cm.curOp) { return operation(doc.cm, markText)(doc, from, to, options, type) }\n\n var marker = new TextMarker(doc, type), diff = cmp(from, to);\n if (options) { copyObj(options, marker, false); }\n // Don't connect empty markers unless clearWhenEmpty is false\n if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false)\n { return marker }\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 if (!options.handleMouseEvents) { marker.widgetNode.setAttribute(\"cm-ignore-events\", \"true\"); }\n if (options.insertLeft) { marker.widgetNode.insertLeft = true; }\n }\n if (marker.collapsed) {\n if (conflictingCollapsedRange(doc, from.line, from, to, marker) ||\n from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker))\n { throw new Error(\"Inserting collapsed marker partially overlapping an existing one\") }\n seeCollapsedSpans();\n }\n\n if (marker.addToHistory)\n { addChangeToHistory(doc, {from: from, to: to, origin: \"markText\"}, doc.sel, NaN); }\n\n var curLine = from.line, cm = doc.cm, 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 if (marker.collapsed && curLine != from.line) { updateLineHeight(line, 0); }\n addMarkedSpan(line, new MarkedSpan(marker,\n curLine == from.line ? from.ch : null,\n curLine == to.line ? to.ch : null), doc.cm && doc.cm.curOp);\n ++curLine;\n });\n // lineIsHidden depends on the presence of the spans, so needs a second pass\n if (marker.collapsed) { doc.iter(from.line, to.line + 1, function (line) {\n if (lineIsHidden(doc, line)) { updateLineHeight(line, 0); }\n }); }\n\n if (marker.clearOnEnter) { on(marker, \"beforeCursorEnter\", function () { return marker.clear(); }); }\n\n if (marker.readOnly) {\n seeReadOnlySpans();\n if (doc.history.done.length || doc.history.undone.length)\n { doc.clearHistory(); }\n }\n if (marker.collapsed) {\n marker.id = ++nextMarkerId;\n marker.atomic = true;\n }\n if (cm) {\n // Sync editor state\n if (updateMaxLine) { cm.curOp.updateMaxLine = true; }\n if (marker.collapsed)\n { regChange(cm, from.line, to.line + 1); }\n else if (marker.className || marker.startStyle || marker.endStyle || marker.css ||\n marker.attributes || marker.title)\n { for (var i = from.line; i <= to.line; i++) { regLineChange(cm, i, \"text\"); } }\n if (marker.atomic) { reCheckSelection(cm.doc); }\n signalLater(cm, \"markerAdded\", cm, marker);\n }\n return marker\n }\n\n // SHARED TEXTMARKERS\n\n // A shared marker spans multiple linked documents. It is\n // implemented as a meta-marker-object controlling multiple normal\n // markers.\n var SharedTextMarker = function(markers, primary) {\n this.markers = markers;\n this.primary = primary;\n for (var i = 0; i < markers.length; ++i)\n { markers[i].parent = this; }\n };\n\n SharedTextMarker.prototype.clear = function () {\n if (this.explicitlyCleared) { return }\n this.explicitlyCleared = true;\n for (var i = 0; i < this.markers.length; ++i)\n { this.markers[i].clear(); }\n signalLater(this, \"clear\");\n };\n\n SharedTextMarker.prototype.find = function (side, lineObj) {\n return this.primary.find(side, lineObj)\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)], primary = markers[0];\n var widget = options.widgetNode;\n linkedDocs(doc, function (doc) {\n if (widget) { options.widgetNode = widget.cloneNode(true); }\n markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type));\n for (var i = 0; i < doc.linked.length; ++i)\n { if (doc.linked[i].isParent) { return } }\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) { return m.parent; })\n }\n\n function copySharedMarkers(doc, markers) {\n for (var i = 0; i < markers.length; i++) {\n var marker = markers[i], pos = marker.find();\n var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to);\n if (cmp(mFrom, mTo)) {\n var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type);\n marker.markers.push(subMark);\n subMark.parent = marker;\n }\n }\n }\n\n function detachSharedMarkers(markers) {\n var loop = function ( i ) {\n var marker = markers[i], linked = [marker.primary.doc];\n linkedDocs(marker.primary.doc, function (d) { return linked.push(d); });\n for (var j = 0; j < marker.markers.length; j++) {\n var subMarker = marker.markers[j];\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++) loop( i );\n }\n\n var nextDocId = 0;\n var Doc = function(text, mode, firstLine, lineSep, direction) {\n if (!(this instanceof Doc)) { return new Doc(text, mode, firstLine, lineSep, direction) }\n if (firstLine == null) { firstLine = 0; }\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\") { text = this.splitLines(text); }\n updateDoc(this, {from: start, to: start, text: text});\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(from, to, op) {\n if (op) { this.iterN(from - this.first, to - from, op); }\n else { this.iterN(this.first, this.first + this.size, from); }\n },\n\n // Non-public interface for adding and removing lines.\n insert: function(at, lines) {\n var height = 0;\n for (var i = 0; i < lines.length; ++i) { height += lines[i].height; }\n this.insertInner(at - this.first, lines, height);\n },\n remove: function(at, 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\n getValue: function(lineSep) {\n var lines = getLines(this, this.first, this.first + this.size);\n if (lineSep === false) { return lines }\n return lines.join(lineSep || this.lineSeparator())\n },\n setValue: docMethodOp(function(code) {\n var top = Pos(this.first, 0), last = this.first + this.size - 1;\n makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length),\n text: this.splitLines(code), origin: \"setValue\", full: true}, true);\n if (this.cm) { scrollToCoords(this.cm, 0, 0); }\n setSelection(this, simpleSelection(top), sel_dontScroll);\n }),\n replaceRange: function(code, from, to, origin) {\n from = clipPos(this, from);\n to = to ? clipPos(this, to) : from;\n replaceRange(this, code, from, to, origin);\n },\n getRange: function(from, to, lineSep) {\n var lines = getBetween(this, clipPos(this, from), clipPos(this, to));\n if (lineSep === false) { return lines }\n if (lineSep === '') { return lines.join('') }\n return lines.join(lineSep || this.lineSeparator())\n },\n\n getLine: function(line) {var l = this.getLineHandle(line); return l && l.text},\n\n getLineHandle: function(line) {if (isLine(this, line)) { return getLine(this, line) }},\n getLineNumber: function(line) {return lineNo(line)},\n\n getLineHandleVisualStart: function(line) {\n if (typeof line == \"number\") { line = getLine(this, line); }\n return visualLine(line)\n },\n\n lineCount: function() {return this.size},\n firstLine: function() {return this.first},\n lastLine: function() {return this.first + this.size - 1},\n\n clipPos: function(pos) {return clipPos(this, pos)},\n\n getCursor: function(start) {\n var range = this.sel.primary(), pos;\n if (start == null || start == \"head\") { pos = range.head; }\n else if (start == \"anchor\") { pos = range.anchor; }\n else if (start == \"end\" || start == \"to\" || start === false) { pos = range.to(); }\n else { pos = range.from(); }\n return pos\n },\n listSelections: function() { return this.sel.ranges },\n somethingSelected: function() {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) { return }\n var out = [];\n for (var i = 0; i < ranges.length; i++)\n { out[i] = new Range(clipPos(this, ranges[i].anchor),\n clipPos(this, ranges[i].head || ranges[i].anchor)); }\n if (primary == null) { primary = Math.min(ranges.length - 1, this.sel.primIndex); }\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\n getSelection: function(lineSep) {\n var ranges = this.sel.ranges, lines;\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 if (lineSep === false) { return lines }\n else { return lines.join(lineSep || this.lineSeparator()) }\n },\n getSelections: function(lineSep) {\n var parts = [], ranges = this.sel.ranges;\n for (var i = 0; i < ranges.length; i++) {\n var sel = getBetween(this, ranges[i].from(), ranges[i].to());\n if (lineSep !== false) { sel = sel.join(lineSep || this.lineSeparator()); }\n parts[i] = sel;\n }\n return parts\n },\n replaceSelection: function(code, collapse, origin) {\n var dup = [];\n for (var i = 0; i < this.sel.ranges.length; i++)\n { dup[i] = code; }\n this.replaceSelections(dup, collapse, origin || \"+input\");\n },\n replaceSelections: docMethodOp(function(code, collapse, origin) {\n var changes = [], sel = this.sel;\n for (var i = 0; i < sel.ranges.length; i++) {\n var range = sel.ranges[i];\n changes[i] = {from: range.from(), to: range.to(), text: this.splitLines(code[i]), origin: origin};\n }\n var newSel = collapse && collapse != \"end\" && computeReplacedSel(this, changes, collapse);\n for (var i$1 = changes.length - 1; i$1 >= 0; i$1--)\n { makeChange(this, changes[i$1]); }\n if (newSel) { setSelectionReplaceHistory(this, newSel); }\n else if (this.cm) { ensureCursorVisible(this.cm); }\n }),\n undo: docMethodOp(function() {makeChangeFromHistory(this, \"undo\");}),\n redo: docMethodOp(function() {makeChangeFromHistory(this, \"redo\");}),\n undoSelection: docMethodOp(function() {makeChangeFromHistory(this, \"undo\", true);}),\n redoSelection: docMethodOp(function() {makeChangeFromHistory(this, \"redo\", true);}),\n\n setExtending: function(val) {this.extend = val;},\n getExtending: function() {return this.extend},\n\n historySize: function() {\n var hist = this.history, done = 0, undone = 0;\n for (var i = 0; i < hist.done.length; i++) { if (!hist.done[i].ranges) { ++done; } }\n for (var i$1 = 0; i$1 < hist.undone.length; i$1++) { if (!hist.undone[i$1].ranges) { ++undone; } }\n return {undo: done, redo: undone}\n },\n clearHistory: function() {\n var this$1 = this;\n\n this.history = new History(this.history);\n linkedDocs(this, function (doc) { return doc.history = this$1.history; }, true);\n },\n\n markClean: function() {\n this.cleanGeneration = this.changeGeneration(true);\n },\n changeGeneration: function(forceSplit) {\n if (forceSplit)\n { this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null; }\n return this.history.generation\n },\n isClean: function (gen) {\n return this.history.generation == (gen || this.cleanGeneration)\n },\n\n getHistory: function() {\n return {done: copyHistoryArray(this.history.done),\n undone: copyHistoryArray(this.history.undone)}\n },\n setHistory: function(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\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 if (!value && isEmpty(markers)) { line.gutterMarkers = null; }\n return true\n })\n }),\n\n clearGutter: docMethodOp(function(gutterID) {\n var this$1 = this;\n\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 if (isEmpty(line.gutterMarkers)) { line.gutterMarkers = null; }\n return true\n });\n }\n });\n }),\n\n lineInfo: function(line) {\n var n;\n if (typeof line == \"number\") {\n if (!isLine(this, line)) { return null }\n n = line;\n line = getLine(this, line);\n if (!line) { return null }\n } else {\n n = lineNo(line);\n if (n == null) { return null }\n }\n return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers,\n textClass: line.textClass, bgClass: line.bgClass, 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\"\n : where == \"background\" ? \"bgClass\"\n : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n if (!line[prop]) { line[prop] = cls; }\n else if (classTest(cls).test(line[prop])) { return false }\n else { line[prop] += \" \" + cls; }\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\"\n : where == \"background\" ? \"bgClass\"\n : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n var cur = line[prop];\n if (!cur) { return false }\n else if (cls == null) { line[prop] = null; }\n else {\n var found = cur.match(classTest(cls));\n if (!found) { return false }\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 return true\n })\n }),\n\n addLineWidget: docMethodOp(function(handle, node, options) {\n return addLineWidget(this, handle, node, options)\n }),\n removeLineWidget: function(widget) { widget.clear(); },\n\n markText: function(from, to, options) {\n return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || \"range\")\n },\n setBookmark: function(pos, options) {\n var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options),\n insertLeft: options && options.insertLeft,\n clearWhenEmpty: false, shared: options && options.shared,\n handleMouseEvents: options && options.handleMouseEvents};\n pos = clipPos(this, pos);\n return markText(this, pos, pos, realOpts, \"bookmark\")\n },\n findMarksAt: function(pos) {\n pos = clipPos(this, pos);\n var markers = [], spans = getLine(this, pos.line).markedSpans;\n if (spans) { for (var i = 0; i < spans.length; ++i) {\n var span = spans[i];\n if ((span.from == null || span.from <= pos.ch) &&\n (span.to == null || span.to >= pos.ch))\n { markers.push(span.marker.parent || span.marker); }\n } }\n return markers\n },\n findMarks: function(from, to, filter) {\n from = clipPos(this, from); to = clipPos(this, to);\n var found = [], lineNo = from.line;\n this.iter(from.line, to.line + 1, function (line) {\n var spans = line.markedSpans;\n if (spans) { for (var i = 0; i < spans.length; i++) {\n var span = spans[i];\n if (!(span.to != null && lineNo == from.line && from.ch >= span.to ||\n span.from == null && lineNo != from.line ||\n span.from != null && lineNo == to.line && span.from >= to.ch) &&\n (!filter || filter(span.marker)))\n { found.push(span.marker.parent || span.marker); }\n } }\n ++lineNo;\n });\n return found\n },\n getAllMarks: function() {\n var markers = [];\n this.iter(function (line) {\n var sps = line.markedSpans;\n if (sps) { for (var i = 0; i < sps.length; ++i)\n { if (sps[i].from != null) { markers.push(sps[i].marker); } } }\n });\n return markers\n },\n\n posFromIndex: function(off) {\n var ch, lineNo = this.first, sepSize = this.lineSeparator().length;\n this.iter(function (line) {\n var sz = line.text.length + sepSize;\n if (sz > off) { ch = off; return true }\n off -= sz;\n ++lineNo;\n });\n return clipPos(this, Pos(lineNo, ch))\n },\n indexFromPos: function (coords) {\n coords = clipPos(this, coords);\n var index = coords.ch;\n if (coords.line < this.first || coords.ch < 0) { return 0 }\n var sepSize = this.lineSeparator().length;\n this.iter(this.first, coords.line, function (line) { // iter aborts when callback returns a truthy value\n index += line.text.length + sepSize;\n });\n return index\n },\n\n copy: function(copyHistory) {\n var doc = new Doc(getLines(this, this.first, this.first + this.size),\n this.modeOption, this.first, this.lineSep, this.direction);\n doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft;\n doc.sel = this.sel;\n doc.extend = false;\n if (copyHistory) {\n doc.history.undoDepth = this.history.undoDepth;\n doc.setHistory(this.getHistory());\n }\n return doc\n },\n\n linkedDoc: function(options) {\n if (!options) { options = {}; }\n var from = this.first, to = this.first + this.size;\n if (options.from != null && options.from > from) { from = options.from; }\n if (options.to != null && options.to < to) { to = options.to; }\n var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep, this.direction);\n if (options.sharedHist) { copy.history = this.history\n ; }(this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist});\n copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}];\n copySharedMarkers(copy, findSharedMarkers(this));\n return copy\n },\n unlinkDoc: function(other) {\n if (other instanceof CodeMirror) { other = other.doc; }\n if (this.linked) { for (var i = 0; i < this.linked.length; ++i) {\n var link = this.linked[i];\n if (link.doc != other) { continue }\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 if (other.history == this.history) {\n var splitIds = [other.id];\n linkedDocs(other, function (doc) { return splitIds.push(doc.id); }, 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(f) {linkedDocs(this, f);},\n\n getMode: function() {return this.mode},\n getEditor: function() {return this.cm},\n\n splitLines: function(str) {\n if (this.lineSep) { return str.split(this.lineSep) }\n return splitLinesAuto(str)\n },\n lineSeparator: function() { return this.lineSep || \"\\n\" },\n\n setDirection: docMethodOp(function (dir) {\n if (dir != \"rtl\") { dir = \"ltr\"; }\n if (dir == this.direction) { return }\n this.direction = dir;\n this.iter(function (line) { return line.order = null; });\n if (this.cm) { directionChanged(this.cm); }\n })\n });\n\n // Public alias.\n Doc.prototype.eachLine = Doc.prototype.iter;\n\n // 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 var lastDrop = 0;\n\n function onDrop(e) {\n var cm = this;\n clearDragCursor(cm);\n if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e))\n { return }\n e_preventDefault(e);\n if (ie) { lastDrop = +new Date; }\n var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files;\n if (!pos || cm.isReadOnly()) { return }\n // Might be a file drop, in which case we simply extract the text\n // and insert it.\n if (files && files.length && window.FileReader && window.File) {\n var n = files.length, text = Array(n), read = 0;\n var markAsReadAndPasteIfAllFilesAreRead = function () {\n if (++read == n) {\n operation(cm, function () {\n pos = clipPos(cm.doc, pos);\n var change = {from: pos, to: pos,\n text: cm.doc.splitLines(\n text.filter(function (t) { return t != null; }).join(cm.doc.lineSeparator())),\n origin: \"paste\"};\n makeChange(cm.doc, change);\n setSelectionReplaceHistory(cm.doc, simpleSelection(clipPos(cm.doc, pos), clipPos(cm.doc, changeEnd(change))));\n })();\n }\n };\n var readTextFromFile = function (file, i) {\n if (cm.options.allowDropFileTypes &&\n indexOf(cm.options.allowDropFileTypes, file.type) == -1) {\n markAsReadAndPasteIfAllFilesAreRead();\n return\n }\n var reader = new FileReader;\n reader.onerror = function () { return markAsReadAndPasteIfAllFilesAreRead(); };\n reader.onload = function () {\n var content = reader.result;\n if (/[\\x00-\\x08\\x0e-\\x1f]{2}/.test(content)) {\n markAsReadAndPasteIfAllFilesAreRead();\n return\n }\n text[i] = content;\n markAsReadAndPasteIfAllFilesAreRead();\n };\n reader.readAsText(file);\n };\n for (var i = 0; i < files.length; i++) { readTextFromFile(files[i], i); }\n } else { // 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);\n // Ensure the editor is re-focused\n setTimeout(function () { return cm.display.input.focus(); }, 20);\n return\n }\n try {\n var text$1 = e.dataTransfer.getData(\"Text\");\n if (text$1) {\n var selected;\n if (cm.state.draggingText && !cm.state.draggingText.copy)\n { selected = cm.listSelections(); }\n setSelectionNoUndo(cm.doc, simpleSelection(pos, pos));\n if (selected) { 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 cm.replaceSelection(text$1, \"around\", \"paste\");\n cm.display.input.focus();\n }\n }\n catch(e$1){}\n }\n }\n\n function onDragStart(cm, e) {\n if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return }\n if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) { return }\n\n e.dataTransfer.setData(\"Text\", cm.getSelection());\n e.dataTransfer.effectAllowed = \"copyMove\";\n\n // 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 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 if (presto) {\n img.width = img.height = 1;\n cm.display.wrapper.appendChild(img);\n // Force a relayout, or Opera won't use our image for some obscure reason\n img._top = img.offsetTop;\n }\n e.dataTransfer.setDragImage(img, 0, 0);\n if (presto) { img.parentNode.removeChild(img); }\n }\n }\n\n function onDragOver(cm, e) {\n var pos = posFromMouse(cm, e);\n if (!pos) { return }\n var frag = document.createDocumentFragment();\n drawSelectionCursor(cm, pos, frag);\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 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 }\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 function forEachCodeMirror(f) {\n if (!document.getElementsByClassName) { return }\n var byClass = document.getElementsByClassName(\"CodeMirror\"), editors = [];\n for (var i = 0; i < byClass.length; i++) {\n var cm = byClass[i].CodeMirror;\n if (cm) { editors.push(cm); }\n }\n if (editors.length) { editors[0].operation(function () {\n for (var i = 0; i < editors.length; i++) { f(editors[i]); }\n }); }\n }\n\n var globalsRegistered = false;\n function ensureGlobalHandlers() {\n if (globalsRegistered) { return }\n registerGlobalHandlers();\n globalsRegistered = true;\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) { 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 on(window, \"blur\", function () { return forEachCodeMirror(onBlur); });\n }\n // Called when the window resizes\n function onResize(cm) {\n var d = cm.display;\n // Might be a text scaling operation, clear size caches.\n d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;\n d.scrollbarsClipped = false;\n cm.setSize();\n }\n\n var keyNames = {\n 3: \"Pause\", 8: \"Backspace\", 9: \"Tab\", 13: \"Enter\", 16: \"Shift\", 17: \"Ctrl\", 18: \"Alt\",\n 19: \"Pause\", 20: \"CapsLock\", 27: \"Esc\", 32: \"Space\", 33: \"PageUp\", 34: \"PageDown\", 35: \"End\",\n 36: \"Home\", 37: \"Left\", 38: \"Up\", 39: \"Right\", 40: \"Down\", 44: \"PrintScrn\", 45: \"Insert\",\n 46: \"Delete\", 59: \";\", 61: \"=\", 91: \"Mod\", 92: \"Mod\", 93: \"Mod\",\n 106: \"*\", 107: \"=\", 109: \"-\", 110: \".\", 111: \"/\", 145: \"ScrollLock\",\n 173: \"-\", 186: \";\", 187: \"=\", 188: \",\", 189: \"-\", 190: \".\", 191: \"/\", 192: \"`\", 219: \"[\", 220: \"\\\\\",\n 221: \"]\", 222: \"'\", 224: \"Mod\", 63232: \"Up\", 63233: \"Down\", 63234: \"Left\", 63235: \"Right\", 63272: \"Delete\",\n 63273: \"Home\", 63275: \"End\", 63276: \"PageUp\", 63277: \"PageDown\", 63302: \"Insert\"\n };\n\n // Number keys\n for (var i = 0; i < 10; i++) { keyNames[i + 48] = keyNames[i + 96] = String(i); }\n // Alphabetic keys\n for (var i$1 = 65; i$1 <= 90; i$1++) { keyNames[i$1] = String.fromCharCode(i$1); }\n // Function keys\n for (var i$2 = 1; i$2 <= 12; i$2++) { keyNames[i$2 + 111] = keyNames[i$2 + 63235] = \"F\" + i$2; }\n\n var keyMap = {};\n\n keyMap.basic = {\n \"Left\": \"goCharLeft\", \"Right\": \"goCharRight\", \"Up\": \"goLineUp\", \"Down\": \"goLineDown\",\n \"End\": \"goLineEnd\", \"Home\": \"goLineStartSmart\", \"PageUp\": \"goPageUp\", \"PageDown\": \"goPageDown\",\n \"Delete\": \"delCharAfter\", \"Backspace\": \"delCharBefore\", \"Shift-Backspace\": \"delCharBefore\",\n \"Tab\": \"defaultTab\", \"Shift-Tab\": \"indentAuto\",\n \"Enter\": \"newlineAndIndent\", \"Insert\": \"toggleOverwrite\",\n \"Esc\": \"singleSelection\"\n };\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 keyMap.pcDefault = {\n \"Ctrl-A\": \"selectAll\", \"Ctrl-D\": \"deleteLine\", \"Ctrl-Z\": \"undo\", \"Shift-Ctrl-Z\": \"redo\", \"Ctrl-Y\": \"redo\",\n \"Ctrl-Home\": \"goDocStart\", \"Ctrl-End\": \"goDocEnd\", \"Ctrl-Up\": \"goLineUp\", \"Ctrl-Down\": \"goLineDown\",\n \"Ctrl-Left\": \"goGroupLeft\", \"Ctrl-Right\": \"goGroupRight\", \"Alt-Left\": \"goLineStart\", \"Alt-Right\": \"goLineEnd\",\n \"Ctrl-Backspace\": \"delGroupBefore\", \"Ctrl-Delete\": \"delGroupAfter\", \"Ctrl-S\": \"save\", \"Ctrl-F\": \"find\",\n \"Ctrl-G\": \"findNext\", \"Shift-Ctrl-G\": \"findPrev\", \"Shift-Ctrl-F\": \"replace\", \"Shift-Ctrl-R\": \"replaceAll\",\n \"Ctrl-[\": \"indentLess\", \"Ctrl-]\": \"indentMore\",\n \"Ctrl-U\": \"undoSelection\", \"Shift-Ctrl-U\": \"redoSelection\", \"Alt-U\": \"redoSelection\",\n \"fallthrough\": \"basic\"\n };\n // Very basic readline/emacs-style bindings, which are standard on Mac.\n keyMap.emacsy = {\n \"Ctrl-F\": \"goCharRight\", \"Ctrl-B\": \"goCharLeft\", \"Ctrl-P\": \"goLineUp\", \"Ctrl-N\": \"goLineDown\",\n \"Ctrl-A\": \"goLineStart\", \"Ctrl-E\": \"goLineEnd\", \"Ctrl-V\": \"goPageDown\", \"Shift-Ctrl-V\": \"goPageUp\",\n \"Ctrl-D\": \"delCharAfter\", \"Ctrl-H\": \"delCharBefore\", \"Alt-Backspace\": \"delWordBefore\", \"Ctrl-K\": \"killLine\",\n \"Ctrl-T\": \"transposeChars\", \"Ctrl-O\": \"openLine\"\n };\n keyMap.macDefault = {\n \"Cmd-A\": \"selectAll\", \"Cmd-D\": \"deleteLine\", \"Cmd-Z\": \"undo\", \"Shift-Cmd-Z\": \"redo\", \"Cmd-Y\": \"redo\",\n \"Cmd-Home\": \"goDocStart\", \"Cmd-Up\": \"goDocStart\", \"Cmd-End\": \"goDocEnd\", \"Cmd-Down\": \"goDocEnd\", \"Alt-Left\": \"goGroupLeft\",\n \"Alt-Right\": \"goGroupRight\", \"Cmd-Left\": \"goLineLeft\", \"Cmd-Right\": \"goLineRight\", \"Alt-Backspace\": \"delGroupBefore\",\n \"Ctrl-Alt-Backspace\": \"delGroupAfter\", \"Alt-Delete\": \"delGroupAfter\", \"Cmd-S\": \"save\", \"Cmd-F\": \"find\",\n \"Cmd-G\": \"findNext\", \"Shift-Cmd-G\": \"findPrev\", \"Cmd-Alt-F\": \"replace\", \"Shift-Cmd-Alt-F\": \"replaceAll\",\n \"Cmd-[\": \"indentLess\", \"Cmd-]\": \"indentMore\", \"Cmd-Backspace\": \"delWrappedLineLeft\", \"Cmd-Delete\": \"delWrappedLineRight\",\n \"Cmd-U\": \"undoSelection\", \"Shift-Cmd-U\": \"redoSelection\", \"Ctrl-Up\": \"goDocStart\", \"Ctrl-Down\": \"goDocEnd\",\n \"fallthrough\": [\"basic\", \"emacsy\"]\n };\n keyMap[\"default\"] = mac ? keyMap.macDefault : keyMap.pcDefault;\n\n // 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 for (var i = 0; i < parts.length - 1; i++) {\n var mod = parts[i];\n if (/^(cmd|meta|m)$/i.test(mod)) { cmd = true; }\n else if (/^a(lt)?$/i.test(mod)) { alt = true; }\n else if (/^(c|ctrl|control)$/i.test(mod)) { ctrl = true; }\n else if (/^s(hift)?$/i.test(mod)) { shift = true; }\n else { throw new Error(\"Unrecognized modifier name: \" + mod) }\n }\n if (alt) { name = \"Alt-\" + name; }\n if (ctrl) { name = \"Ctrl-\" + name; }\n if (cmd) { name = \"Cmd-\" + name; }\n if (shift) { name = \"Shift-\" + name; }\n return name\n }\n\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 function normalizeKeyMap(keymap) {\n var copy = {};\n for (var keyname in keymap) { if (keymap.hasOwnProperty(keyname)) {\n var value = keymap[keyname];\n if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) { continue }\n if (value == \"...\") { delete keymap[keyname]; continue }\n\n var keys = map(keyname.split(\" \"), normalizeKeyName);\n for (var i = 0; i < keys.length; i++) {\n var val = (void 0), name = (void 0);\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 var prev = copy[name];\n if (!prev) { copy[name] = val; }\n else if (prev != val) { throw new Error(\"Inconsistent bindings for \" + name) }\n }\n delete keymap[keyname];\n } }\n for (var prop in copy) { keymap[prop] = copy[prop]; }\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 if (found === false) { return \"nothing\" }\n if (found === \"...\") { return \"multi\" }\n if (found != null && handle(found)) { return \"handled\" }\n\n if (map.fallthrough) {\n if (Object.prototype.toString.call(map.fallthrough) != \"[object Array]\")\n { return lookupKey(key, map.fallthrough, handle, context) }\n for (var i = 0; i < map.fallthrough.length; i++) {\n var result = lookupKey(key, map.fallthrough[i], handle, context);\n if (result) { return result }\n }\n }\n }\n\n // Modifier key presses don't count as 'real' key presses for the\n // purpose of keymap fallthrough.\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 if (event.altKey && base != \"Alt\") { name = \"Alt-\" + name; }\n if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != \"Ctrl\") { name = \"Ctrl-\" + name; }\n if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != \"Mod\") { name = \"Cmd-\" + name; }\n if (!noShift && event.shiftKey && base != \"Shift\") { name = \"Shift-\" + name; }\n return name\n }\n\n // Look up the name of a key as indicated by an event object.\n function keyName(event, noShift) {\n if (presto && event.keyCode == 34 && event[\"char\"]) { return false }\n var name = keyNames[event.keyCode];\n if (name == null || event.altGraphKey) { 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 if (event.keyCode == 3 && event.code) { name = event.code; }\n return addModifierNames(name, event, noShift)\n }\n\n function getKeyMap(val) {\n return typeof val == \"string\" ? keyMap[val] : val\n }\n\n // Helper for deleting text near the selection(s), used to implement\n // backspace, delete, and similar functionality.\n function deleteNearSelection(cm, compute) {\n var ranges = cm.doc.sel.ranges, kill = [];\n // Build up a set of ranges to kill first, merging overlapping\n // ranges.\n for (var i = 0; i < ranges.length; i++) {\n var toKill = compute(ranges[i]);\n while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) {\n var replaced = kill.pop();\n if (cmp(replaced.from, toKill.from) < 0) {\n toKill.from = replaced.from;\n break\n }\n }\n kill.push(toKill);\n }\n // Next, remove those actual ranges.\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 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\") { dir = -dir; }\n var order = getOrder(lineObj, cm.doc.direction);\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;\n // 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 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) { return measureCharPrepared(cm, prep, ch).top == targetTop; }, (dir < 0) == (part.level == 1) ? part.from : part.to - 1, ch);\n if (sticky == \"before\") { ch = moveCharLogically(lineObj, ch, 1); }\n } else { ch = dir < 0 ? part.to : part.from; }\n return new Pos(lineNo, ch, sticky)\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 if (!bidi) { return moveLogically(line, start, dir) }\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 var partPos = getBidiPartAt(bidi, start.ch, start.sticky), part = bidi[partPos];\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 (pos, dir) { return moveCharLogically(line, pos instanceof Pos ? pos.ch : pos, dir); };\n var prep;\n var getWrappedLineExtent = function (ch) {\n if (!cm.options.lineWrapping) { return {begin: 0, end: line.text.length} }\n prep = prep || prepareMeasureForLine(cm, line);\n return wrappedLineExtentChar(cm, line, prep, ch)\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 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 }\n\n // Case 3: Could not move within this bidi part in this visual line, so leave\n // the current bidi part\n\n var searchInVisualLine = function (partPos, dir, wrappedLineExtent) {\n var getRes = function (ch, moveInStorageOrder) { return moveInStorageOrder\n ? new Pos(start.line, mv(ch, 1), \"before\")\n : new Pos(start.line, ch, \"after\"); };\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 if (part.from <= ch && ch < part.to) { return getRes(ch, moveInStorageOrder) }\n ch = moveInStorageOrder ? part.from : mv(part.to, -1);\n if (wrappedLineExtent.begin <= ch && ch < wrappedLineExtent.end) { return getRes(ch, moveInStorageOrder) }\n }\n };\n\n // Case 3a: Look for other bidi parts on the same visual line\n var res = searchInVisualLine(partPos + dir, dir, wrappedLineExtent);\n if (res) { return res }\n\n // Case 3b: Look for other bidi parts on the next visual line\n var nextCh = dir > 0 ? wrappedLineExtent.end : mv(wrappedLineExtent.begin, -1);\n if (nextCh != null && !(dir > 0 && nextCh == line.text.length)) {\n res = searchInVisualLine(dir > 0 ? 0 : bidi.length - 1, dir, getWrappedLineExtent(nextCh));\n if (res) { return res }\n }\n\n // Case 4: Nowhere to move\n return null\n }\n\n // Commands are parameter-less actions that can be performed on an\n // editor, mostly used for keybindings.\n var commands = {\n selectAll: selectAll,\n singleSelection: function (cm) { return cm.setSelection(cm.getCursor(\"anchor\"), cm.getCursor(\"head\"), sel_dontScroll); },\n killLine: function (cm) { return deleteNearSelection(cm, function (range) {\n if (range.empty()) {\n var len = getLine(cm.doc, range.head.line).text.length;\n if (range.head.ch == len && range.head.line < cm.lastLine())\n { return {from: range.head, to: Pos(range.head.line + 1, 0)} }\n else\n { return {from: range.head, to: Pos(range.head.line, len)} }\n } else {\n return {from: range.from(), to: range.to()}\n }\n }); },\n deleteLine: function (cm) { return deleteNearSelection(cm, function (range) { return ({\n from: Pos(range.from().line, 0),\n to: clipPos(cm.doc, Pos(range.to().line + 1, 0))\n }); }); },\n delLineLeft: function (cm) { return deleteNearSelection(cm, function (range) { return ({\n from: Pos(range.from().line, 0), to: range.from()\n }); }); },\n delWrappedLineLeft: function (cm) { return deleteNearSelection(cm, function (range) {\n var top = cm.charCoords(range.head, \"div\").top + 5;\n var leftPos = cm.coordsChar({left: 0, top: top}, \"div\");\n return {from: leftPos, to: range.from()}\n }); },\n delWrappedLineRight: function (cm) { return deleteNearSelection(cm, function (range) {\n var top = cm.charCoords(range.head, \"div\").top + 5;\n var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, \"div\");\n return {from: range.from(), to: rightPos }\n }); },\n undo: function (cm) { return cm.undo(); },\n redo: function (cm) { return cm.redo(); },\n undoSelection: function (cm) { return cm.undoSelection(); },\n redoSelection: function (cm) { return cm.redoSelection(); },\n goDocStart: function (cm) { return cm.extendSelection(Pos(cm.firstLine(), 0)); },\n goDocEnd: function (cm) { return cm.extendSelection(Pos(cm.lastLine())); },\n goLineStart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStart(cm, range.head.line); },\n {origin: \"+move\", bias: 1}\n ); },\n goLineStartSmart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStartSmart(cm, range.head); },\n {origin: \"+move\", bias: 1}\n ); },\n goLineEnd: function (cm) { return cm.extendSelectionsBy(function (range) { return lineEnd(cm, range.head.line); },\n {origin: \"+move\", bias: -1}\n ); },\n goLineRight: function (cm) { return cm.extendSelectionsBy(function (range) {\n var top = cm.cursorCoords(range.head, \"div\").top + 5;\n return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, \"div\")\n }, sel_move); },\n goLineLeft: function (cm) { return cm.extendSelectionsBy(function (range) {\n var top = cm.cursorCoords(range.head, \"div\").top + 5;\n return cm.coordsChar({left: 0, top: top}, \"div\")\n }, sel_move); },\n goLineLeftSmart: function (cm) { return cm.extendSelectionsBy(function (range) {\n var top = cm.cursorCoords(range.head, \"div\").top + 5;\n var pos = cm.coordsChar({left: 0, top: top}, \"div\");\n if (pos.ch < cm.getLine(pos.line).search(/\\S/)) { return lineStartSmart(cm, range.head) }\n return pos\n }, sel_move); },\n goLineUp: function (cm) { return cm.moveV(-1, \"line\"); },\n goLineDown: function (cm) { return cm.moveV(1, \"line\"); },\n goPageUp: function (cm) { return cm.moveV(-1, \"page\"); },\n goPageDown: function (cm) { return cm.moveV(1, \"page\"); },\n goCharLeft: function (cm) { return cm.moveH(-1, \"char\"); },\n goCharRight: function (cm) { return cm.moveH(1, \"char\"); },\n goColumnLeft: function (cm) { return cm.moveH(-1, \"column\"); },\n goColumnRight: function (cm) { return cm.moveH(1, \"column\"); },\n goWordLeft: function (cm) { return cm.moveH(-1, \"word\"); },\n goGroupRight: function (cm) { return cm.moveH(1, \"group\"); },\n goGroupLeft: function (cm) { return cm.moveH(-1, \"group\"); },\n goWordRight: function (cm) { return cm.moveH(1, \"word\"); },\n delCharBefore: function (cm) { return cm.deleteH(-1, \"codepoint\"); },\n delCharAfter: function (cm) { return cm.deleteH(1, \"char\"); },\n delWordBefore: function (cm) { return cm.deleteH(-1, \"word\"); },\n delWordAfter: function (cm) { return cm.deleteH(1, \"word\"); },\n delGroupBefore: function (cm) { return cm.deleteH(-1, \"group\"); },\n delGroupAfter: function (cm) { return cm.deleteH(1, \"group\"); },\n indentAuto: function (cm) { return cm.indentSelection(\"smart\"); },\n indentMore: function (cm) { return cm.indentSelection(\"add\"); },\n indentLess: function (cm) { return cm.indentSelection(\"subtract\"); },\n insertTab: function (cm) { return cm.replaceSelection(\"\\t\"); },\n insertSoftTab: function (cm) {\n var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize;\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 cm.replaceSelections(spaces);\n },\n defaultTab: function (cm) {\n if (cm.somethingSelected()) { cm.indentSelection(\"add\"); }\n else { cm.execCommand(\"insertTab\"); }\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 (cm) { return runInOp(cm, function () {\n var ranges = cm.listSelections(), newSel = [];\n for (var i = 0; i < ranges.length; i++) {\n if (!ranges[i].empty()) { continue }\n var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text;\n if (line) {\n if (cur.ch == line.length) { cur = new Pos(cur.line, cur.ch - 1); }\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),\n 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 if (prev) {\n cur = new Pos(cur.line, 1);\n cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() +\n prev.charAt(prev.length - 1),\n Pos(cur.line - 1, prev.length - 1), cur, \"+transpose\");\n }\n }\n }\n newSel.push(new Range(cur, cur));\n }\n cm.setSelections(newSel);\n }); },\n newlineAndIndent: function (cm) { return runInOp(cm, function () {\n var sels = cm.listSelections();\n for (var i = sels.length - 1; i >= 0; i--)\n { cm.replaceRange(cm.doc.lineSeparator(), sels[i].anchor, sels[i].head, \"+input\"); }\n sels = cm.listSelections();\n for (var i$1 = 0; i$1 < sels.length; i$1++)\n { cm.indentLine(sels[i$1].from().line, null, true); }\n ensureCursorVisible(cm);\n }); },\n openLine: function (cm) { return cm.replaceSelection(\"\\n\", \"start\"); },\n toggleOverwrite: function (cm) { return cm.toggleOverwrite(); }\n };\n\n\n function lineStart(cm, lineN) {\n var line = getLine(cm.doc, lineN);\n var visual = visualLine(line);\n if (visual != line) { lineN = lineNo(visual); }\n return endOfLine(true, cm, visual, lineN, 1)\n }\n function lineEnd(cm, lineN) {\n var line = getLine(cm.doc, lineN);\n var visual = visualLineEnd(line);\n if (visual != line) { lineN = lineNo(visual); }\n return endOfLine(true, cm, line, lineN, -1)\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 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 return start\n }\n\n // Run a handler that was bound to a key.\n function doHandleBinding(cm, bound, dropShift) {\n if (typeof bound == \"string\") {\n bound = commands[bound];\n if (!bound) { return false }\n }\n // Ensure previous input has been read, so that the handler sees a\n // consistent view of the document\n cm.display.input.ensurePolled();\n var prevShift = cm.display.shift, done = false;\n try {\n if (cm.isReadOnly()) { cm.state.suppressEdits = true; }\n if (dropShift) { cm.display.shift = false; }\n done = bound(cm) != Pass;\n } finally {\n cm.display.shift = prevShift;\n cm.state.suppressEdits = false;\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 if (result) { return result }\n }\n return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm))\n || lookupKey(name, cm.options.keyMap, handle, cm)\n }\n\n // Note that, despite the name, this function is also used to check\n // for bound mouse clicks.\n\n var stopSeq = new Delayed;\n\n function dispatchKey(cm, name, e, handle) {\n var seq = cm.state.keySeq;\n if (seq) {\n if (isModifierKey(name)) { return \"handled\" }\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 if (dispatchKeyInner(cm, seq + \" \" + name, e, handle)) { return true }\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 if (result == \"handled\")\n { signalLater(cm, \"keyHandled\", cm, name, e); }\n\n if (result == \"handled\" || result == \"multi\") {\n e_preventDefault(e);\n restartBlink(cm);\n }\n\n return !!result\n }\n\n // Handle a key from the keydown event.\n function handleKeyBinding(cm, e) {\n var name = keyName(e, true);\n if (!name) { return false }\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) { 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 } else {\n return dispatchKey(cm, name, e, function (b) { return doHandleBinding(cm, b); })\n }\n }\n\n // Handle a key from the keypress event\n function handleCharBinding(cm, e, ch) {\n return dispatchKey(cm, \"'\" + ch + \"'\", e, function (b) { return doHandleBinding(cm, b, true); })\n }\n\n var lastStoppedKey = null;\n function onKeyDown(e) {\n var cm = this;\n if (e.target && e.target != cm.display.input.getField()) { return }\n cm.curOp.focus = activeElt();\n if (signalDOMEvent(cm, e)) { return }\n // IE does strange things with escape.\n if (ie && ie_version < 11 && e.keyCode == 27) { e.returnValue = false; }\n var code = e.keyCode;\n cm.display.shift = code == 16 || e.shiftKey;\n var handled = handleKeyBinding(cm, e);\n if (presto) {\n lastStoppedKey = handled ? code : null;\n // Opera has no cut event... we try to at least catch the key combo\n if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey))\n { cm.replaceSelection(\"\", null, \"cut\"); }\n }\n if (gecko && !mac && !handled && code == 46 && e.shiftKey && !e.ctrlKey && document.execCommand)\n { document.execCommand(\"cut\"); }\n\n // Turn mouse into crosshair when Alt is held on Mac.\n if (code == 18 && !/\\bCodeMirror-crosshair\\b/.test(cm.display.lineDiv.className))\n { showCrossHair(cm); }\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 on(document, \"keyup\", up);\n on(document, \"mouseover\", up);\n }\n\n function onKeyUp(e) {\n if (e.keyCode == 16) { this.doc.sel.shift = false; }\n signalDOMEvent(this, e);\n }\n\n function onKeyPress(e) {\n var cm = this;\n if (e.target && e.target != cm.display.input.getField()) { return }\n if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) { return }\n var keyCode = e.keyCode, charCode = e.charCode;\n if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return}\n if ((presto && (!e.which || e.which < 10)) && handleKeyBinding(cm, e)) { return }\n var ch = String.fromCharCode(charCode == null ? keyCode : charCode);\n // Some browsers fire keypress events for backspace\n if (ch == \"\\x08\") { return }\n if (handleCharBinding(cm, e, ch)) { return }\n cm.display.input.onKeyPress(e);\n }\n\n var DOUBLECLICK_DELAY = 400;\n\n var PastClick = function(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 &&\n cmp(pos, this.pos) == 0 && button == this.button\n };\n\n var lastClick, lastDoubleClick;\n function clickRepeat(pos, button) {\n var now = +new Date;\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 }\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 function onMouseDown(e) {\n var cm = this, display = cm.display;\n if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) { return }\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 () { return display.scroller.draggable = true; }, 100);\n }\n return\n }\n if (clickInGutter(cm, e)) { return }\n var pos = posFromMouse(cm, e), button = e_button(e), repeat = pos ? clickRepeat(pos, button) : \"single\";\n window.focus();\n\n // #3261: make sure, that we're not starting a second selection\n if (button == 1 && cm.state.selectingText)\n { cm.state.selectingText(e); }\n\n if (pos && handleMappedButton(cm, button, pos, repeat, e)) { return }\n\n if (button == 1) {\n if (pos) { leftButtonDown(cm, pos, repeat, e); }\n else if (e_target(e) == display.scroller) { e_preventDefault(e); }\n } else if (button == 2) {\n if (pos) { extendSelection(cm.doc, pos); }\n setTimeout(function () { return display.input.focus(); }, 20);\n } else if (button == 3) {\n if (captureRightClick) { cm.display.input.onContextMenu(e); }\n else { delayBlurEvent(cm); }\n }\n }\n\n function handleMappedButton(cm, button, pos, repeat, event) {\n var name = \"Click\";\n if (repeat == \"double\") { name = \"Double\" + name; }\n else if (repeat == \"triple\") { name = \"Triple\" + name; }\n name = (button == 1 ? \"Left\" : button == 2 ? \"Middle\" : \"Right\") + name;\n\n return dispatchKey(cm, addModifierNames(name, event), event, function (bound) {\n if (typeof bound == \"string\") { bound = commands[bound]; }\n if (!bound) { return false }\n var done = false;\n try {\n if (cm.isReadOnly()) { cm.state.suppressEdits = true; }\n done = bound(cm, pos) != Pass;\n } finally {\n cm.state.suppressEdits = false;\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 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 if (value.extend == null || cm.doc.extend) { value.extend = cm.doc.extend || event.shiftKey; }\n if (value.addNew == null) { value.addNew = mac ? event.metaKey : event.ctrlKey; }\n if (value.moveOnDrag == null) { value.moveOnDrag = !(mac ? event.altKey : event.ctrlKey); }\n return value\n }\n\n function leftButtonDown(cm, pos, repeat, event) {\n if (ie) { setTimeout(bind(ensureFocus, cm), 0); }\n else { cm.curOp.focus = activeElt(); }\n\n var behavior = configureMouse(cm, repeat, event);\n\n var sel = cm.doc.sel, contained;\n if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() &&\n repeat == \"single\" && (contained = sel.contains(pos)) > -1 &&\n (cmp((contained = sel.ranges[contained]).from(), pos) < 0 || pos.xRel > 0) &&\n (cmp(contained.to(), pos) > 0 || pos.xRel < 0))\n { leftButtonStartDrag(cm, event, pos, behavior); }\n else\n { leftButtonSelect(cm, event, pos, behavior); }\n }\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 function leftButtonStartDrag(cm, event, pos, behavior) {\n var display = cm.display, moved = false;\n var dragEnd = operation(cm, function (e) {\n if (webkit) { display.scroller.draggable = false; }\n cm.state.draggingText = false;\n if (cm.state.delayingBlurEvent) {\n if (cm.hasFocus()) { cm.state.delayingBlurEvent = false; }\n else { delayBlurEvent(cm); }\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 if (!moved) {\n e_preventDefault(e);\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 if ((webkit && !safari) || ie && ie_version == 9)\n { setTimeout(function () {display.wrapper.ownerDocument.body.focus({preventScroll: true}); display.input.focus();}, 20); }\n else\n { display.input.focus(); }\n }\n });\n var mouseMove = function(e2) {\n moved = moved || Math.abs(event.clientX - e2.clientX) + Math.abs(event.clientY - e2.clientY) >= 10;\n };\n var dragStart = function () { return moved = true; };\n // Let the drag handler handle this.\n if (webkit) { display.scroller.draggable = true; }\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\n cm.state.delayingBlurEvent = true;\n setTimeout(function () { return display.input.focus(); }, 20);\n // IE's approach to draggable\n if (display.scroller.dragDrop) { display.scroller.dragDrop(); }\n }\n\n function rangeForUnit(cm, pos, unit) {\n if (unit == \"char\") { return new Range(pos, pos) }\n if (unit == \"word\") { return cm.findWordAt(pos) }\n if (unit == \"line\") { return new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))) }\n var result = unit(cm, pos);\n return new Range(result.from, result.to)\n }\n\n // Normal selection, as opposed to text dragging.\n function leftButtonSelect(cm, event, start, behavior) {\n if (ie) { delayBlurEvent(cm); }\n var display = cm.display, doc = cm.doc;\n e_preventDefault(event);\n\n var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges;\n if (behavior.addNew && !behavior.extend) {\n ourIndex = doc.sel.contains(start);\n if (ourIndex > -1)\n { ourRange = ranges[ourIndex]; }\n else\n { ourRange = new Range(start, start); }\n } else {\n ourRange = doc.sel.primary();\n ourIndex = doc.sel.primIndex;\n }\n\n if (behavior.unit == \"rectangle\") {\n if (!behavior.addNew) { ourRange = new Range(start, start); }\n start = posFromMouse(cm, event, true, true);\n ourIndex = -1;\n } else {\n var range = rangeForUnit(cm, start, behavior.unit);\n if (behavior.extend)\n { ourRange = extendRange(ourRange, range.anchor, range.head, behavior.extend); }\n else\n { ourRange = range; }\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, origin: \"*mouse\"});\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, origin: \"*mouse\"});\n startSel = doc.sel;\n } else {\n replaceOneSelection(doc, ourIndex, ourRange, sel_mouse);\n }\n\n var lastPos = start;\n function extendTo(pos) {\n if (cmp(lastPos, pos) == 0) { return }\n lastPos = pos;\n\n if (behavior.unit == \"rectangle\") {\n var ranges = [], 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), right = Math.max(startCol, posCol);\n for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line));\n line <= end; line++) {\n var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize);\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 if (!ranges.length) { ranges.push(new Range(start, start)); }\n setSelection(doc, normalizeSelection(cm, startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex),\n {origin: \"*mouse\", scroll: false});\n cm.scrollIntoView(pos);\n } else {\n var oldRange = ourRange;\n var range = rangeForUnit(cm, pos, behavior.unit);\n var anchor = oldRange.anchor, head;\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 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();\n // 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 var counter = 0;\n\n function extend(e) {\n var curCount = ++counter;\n var cur = posFromMouse(cm, e, true, behavior.unit == \"rectangle\");\n if (!cur) { return }\n if (cmp(cur, lastPos) != 0) {\n cm.curOp.focus = activeElt();\n extendTo(cur);\n var visible = visibleLines(display, doc);\n if (cur.line >= visible.to || cur.line < visible.from)\n { setTimeout(operation(cm, function () {if (counter == curCount) { extend(e); }}), 150); }\n } else {\n var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0;\n if (outside) { setTimeout(operation(cm, function () {\n if (counter != curCount) { return }\n display.scroller.scrollTop += outside;\n extend(e);\n }), 50); }\n }\n }\n\n function done(e) {\n cm.state.selectingText = false;\n counter = Infinity;\n // 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 if (e) {\n e_preventDefault(e);\n display.input.focus();\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)) { done(e); }\n else { extend(e); }\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 }\n\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 function bidiSimplify(cm, range) {\n var anchor = range.anchor;\n var head = range.head;\n var anchorLine = getLine(cm.doc, anchor.line);\n if (cmp(anchor, head) == 0 && anchor.sticky == head.sticky) { return range }\n var order = getOrder(anchorLine);\n if (!order) { return range }\n var index = getBidiPartAt(order, anchor.ch, anchor.sticky), part = order[index];\n if (part.from != anchor.ch && part.to != anchor.ch) { return range }\n var boundary = index + ((part.from == anchor.ch) == (part.level != 1) ? 0 : 1);\n if (boundary == 0 || boundary == order.length) { return range }\n\n // Compute the relative visual position of the head compared to the\n // anchor (<0 is to the left, >0 to the right)\n var leftSide;\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 if (headIndex == boundary - 1 || headIndex == boundary)\n { leftSide = dir < 0; }\n else\n { leftSide = dir > 0; }\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, sticky = from ? \"after\" : \"before\";\n return anchor.ch == ch && anchor.sticky == sticky ? range : new Range(new Pos(anchor.line, ch, sticky), head)\n }\n\n\n // Determines whether an event happened in the gutter, and fires the\n // handlers for the corresponding event.\n function gutterEvent(cm, e, type, prevent) {\n var mX, mY;\n if (e.touches) {\n mX = e.touches[0].clientX;\n mY = e.touches[0].clientY;\n } else {\n try { mX = e.clientX; mY = e.clientY; }\n catch(e$1) { return false }\n }\n if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) { return false }\n if (prevent) { e_preventDefault(e); }\n\n var display = cm.display;\n var lineBox = display.lineDiv.getBoundingClientRect();\n\n if (mY > lineBox.bottom || !hasHandler(cm, type)) { return e_defaultPrevented(e) }\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 if (g && g.getBoundingClientRect().right >= mX) {\n var line = lineAtHeight(cm.doc, mY);\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 }\n\n // CONTEXT MENU HANDLING\n\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 function onContextMenu(cm, e) {\n if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) { return }\n if (signalDOMEvent(cm, e, \"contextmenu\")) { return }\n if (!captureRightClick) { cm.display.input.onContextMenu(e); }\n }\n\n function contextMenuInGutter(cm, e) {\n if (!hasHandler(cm, \"gutterContextMenu\")) { return false }\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, \"\") +\n cm.options.theme.replace(/(^|\\s)\\s*/g, \" cm-s-\");\n clearCaches(cm);\n }\n\n var Init = {toString: function(){return \"CodeMirror.Init\"}};\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 if (handle) { optionHandlers[name] =\n notOnInit ? function (cm, val, old) {if (old != Init) { handle(cm, val, old); }} : handle; }\n }\n\n CodeMirror.defineOption = option;\n\n // Passed to option handlers when there is no old value.\n CodeMirror.Init = Init;\n\n // These two are, on init, called from the constructor because they\n // have to be initialized before the editor can start at all.\n option(\"value\", \"\", function (cm, val) { return cm.setValue(val); }, true);\n option(\"mode\", null, function (cm, val) {\n cm.doc.modeOption = val;\n loadMode(cm);\n }, true);\n\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\n option(\"lineSeparator\", null, function (cm, val) {\n cm.doc.lineSep = val;\n if (!val) { return }\n var newBreaks = [], lineNo = cm.doc.first;\n cm.doc.iter(function (line) {\n for (var pos = 0;;) {\n var found = line.text.indexOf(val, pos);\n if (found == -1) { break }\n pos = found + val.length;\n newBreaks.push(Pos(lineNo, found));\n }\n lineNo++;\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 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 if (old != Init) { cm.refresh(); }\n });\n option(\"specialCharPlaceholder\", defaultSpecialCharPlaceholder, function (cm) { return cm.refresh(); }, 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) { return cm.getInputField().spellcheck = val; }, true);\n option(\"autocorrect\", false, function (cm, val) { return cm.getInputField().autocorrect = val; }, true);\n option(\"autocapitalize\", false, function (cm, val) { return cm.getInputField().autocapitalize = val; }, true);\n option(\"rtlMoveVisually\", !windows);\n option(\"wholeLineUpdateBefore\", true);\n\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 if (prev && prev.detach) { prev.detach(cm, next); }\n if (next.attach) { next.attach(cm, prev || null); }\n });\n option(\"extraKeys\", null);\n option(\"configureMouse\", null);\n\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) { return updateScrollbars(cm); }, 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) { return integer; }, updateGutters, true);\n option(\"showCursorWhenSelecting\", false, updateSelection, true);\n\n option(\"resetSelectionOnContextMenu\", true);\n option(\"lineWiseCopyCut\", true);\n option(\"pasteLinesPerSelection\", true);\n option(\"selectionsMayTouch\", false);\n\n option(\"readOnly\", false, function (cm, val) {\n if (val == \"nocursor\") {\n onBlur(cm);\n cm.display.input.blur();\n }\n cm.display.input.readOnlyChanged(val);\n });\n\n option(\"screenReaderLabel\", null, function (cm, val) {\n val = (val === '') ? null : val;\n cm.display.input.screenReaderLabelChanged(val);\n });\n\n option(\"disableInput\", false, function (cm, val) {if (!val) { cm.display.input.reset(); }}, true);\n option(\"dragDrop\", true, dragDropChanged);\n option(\"allowDropFileTypes\", null);\n\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) { return cm.doc.history.undoDepth = val; });\n option(\"historyEventDelay\", 1250);\n option(\"viewportMargin\", 10, function (cm) { return cm.refresh(); }, true);\n option(\"maxHighlightLength\", 10000, resetModeState, true);\n option(\"moveInputWithCursor\", true, function (cm, val) {\n if (!val) { cm.display.input.resetPosition(); }\n });\n\n option(\"tabindex\", null, function (cm, val) { return cm.display.input.getField().tabIndex = val || \"\"; });\n option(\"autofocus\", null);\n option(\"direction\", \"ltr\", function (cm, val) { return cm.doc.setDirection(val); }, true);\n option(\"phrases\", null);\n }\n\n function dragDropChanged(cm, value, old) {\n var wasOn = old && old != Init;\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 estimateLineHeights(cm);\n regChange(cm);\n clearCaches(cm);\n setTimeout(function () { return updateScrollbars(cm); }, 100);\n }\n\n // A CodeMirror instance represents an editor. This is the object\n // that user code is usually dealing with.\n\n function CodeMirror(place, options) {\n var this$1 = this;\n\n if (!(this instanceof CodeMirror)) { return new CodeMirror(place, options) }\n\n this.options = options = options ? copyObj(options) : {};\n // Determine effective options based on given values and defaults.\n copyObj(defaults, options, false);\n\n var doc = options.value;\n if (typeof doc == \"string\") { doc = new Doc(doc, options.mode, null, options.lineSeparator, options.direction); }\n else if (options.mode) { doc.modeOption = options.mode; }\n this.doc = doc;\n\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 if (options.lineWrapping)\n { this.display.wrapper.className += \" CodeMirror-wrap\"; }\n initScrollbars(this);\n\n this.state = {\n keyMaps: [], // stores maps added by addKeyMap\n overlays: [], // highlighting overlays, as added by addOverlay\n modeGen: 0, // bumped when mode/overlay changes, used to invalidate highlighting info\n overwrite: false,\n delayingBlurEvent: false,\n focused: false,\n suppressEdits: false, // used to disable editing during key handlers when in readOnly mode\n pasteIncoming: -1, cutIncoming: -1, // help recognize paste/cut edits in input.poll\n selectingText: false,\n draggingText: false,\n highlight: new Delayed(), // stores highlight worker timeout\n keySeq: null, // Unfinished key sequence\n specialChars: null\n };\n\n if (options.autofocus && !mobile) { display.input.focus(); }\n\n // Override magic textarea content restore that IE sometimes does\n // on our hidden textarea on reload\n if (ie && ie_version < 11) { setTimeout(function () { return this$1.display.input.reset(true); }, 20); }\n\n registerEventHandlers(this);\n ensureGlobalHandlers();\n\n startOperation(this);\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) { onFocus(this$1); }\n }, 20); }\n else\n { onBlur(this); }\n\n for (var opt in optionHandlers) { if (optionHandlers.hasOwnProperty(opt))\n { optionHandlers[opt](this, options[opt], Init); } }\n maybeUpdateLineNumberWidth(this);\n if (options.finishInit) { options.finishInit(this); }\n for (var i = 0; i < initHooks.length; ++i) { initHooks[i](this); }\n endOperation(this);\n // Suppress optimizelegibility in Webkit, since it breaks text\n // measuring on line wrapping boundaries.\n if (webkit && options.lineWrapping &&\n getComputedStyle(display.lineDiv).textRendering == \"optimizelegibility\")\n { display.lineDiv.style.textRendering = \"auto\"; }\n }\n\n // The default configuration options.\n CodeMirror.defaults = defaults;\n // Functions to run when options are changed.\n CodeMirror.optionHandlers = optionHandlers;\n\n // Attach the necessary event handlers when initializing the editor\n function registerEventHandlers(cm) {\n var d = cm.display;\n on(d.scroller, \"mousedown\", operation(cm, onMouseDown));\n // Older IE's will not fire a second mousedown for a double click\n if (ie && ie_version < 11)\n { on(d.scroller, \"dblclick\", operation(cm, function (e) {\n if (signalDOMEvent(cm, e)) { return }\n var pos = posFromMouse(cm, e);\n if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) { return }\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) { return signalDOMEvent(cm, e) || e_preventDefault(e); }); }\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 on(d.scroller, \"contextmenu\", function (e) { return onContextMenu(cm, e); });\n on(d.input.getField(), \"contextmenu\", function (e) {\n if (!d.scroller.contains(e.target)) { onContextMenu(cm, e); }\n });\n\n // Used to suppress mouse event handling when a touch happens\n var touchFinished, prevTouch = {end: 0};\n function finishTouch() {\n if (d.activeTouch) {\n touchFinished = setTimeout(function () { return d.activeTouch = null; }, 1000);\n prevTouch = d.activeTouch;\n prevTouch.end = +new Date;\n }\n }\n function isMouseLikeTouchEvent(e) {\n if (e.touches.length != 1) { return false }\n var touch = e.touches[0];\n return touch.radiusX <= 1 && touch.radiusY <= 1\n }\n function farAway(touch, other) {\n if (other.left == null) { return true }\n var dx = other.left - touch.left, dy = other.top - touch.top;\n return dx * dx + dy * dy > 20 * 20\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 = {start: now, moved: false,\n prev: now - prevTouch.end <= 300 ? prevTouch : null};\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) { d.activeTouch.moved = true; }\n });\n on(d.scroller, \"touchend\", function (e) {\n var touch = d.activeTouch;\n if (touch && !eventInWidget(d, e) && touch.left != null &&\n !touch.moved && new Date - touch.start < 300) {\n var pos = cm.coordsChar(d.activeTouch, \"page\"), range;\n if (!touch.prev || farAway(touch, touch.prev)) // Single tap\n { range = new Range(pos, pos); }\n else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap\n { range = cm.findWordAt(pos); }\n else // Triple tap\n { range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); }\n cm.setSelection(range.anchor, range.head);\n cm.focus();\n e_preventDefault(e);\n }\n finishTouch();\n });\n on(d.scroller, \"touchcancel\", finishTouch);\n\n // Sync scrolling between fake scrollbars and real scrollable\n // area, ensure viewport is updated when scrolling.\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 });\n\n // Listen to wheel events in order to try and update the viewport on time.\n on(d.scroller, \"mousewheel\", function (e) { return onScrollWheel(cm, e); });\n on(d.scroller, \"DOMMouseScroll\", function (e) { return onScrollWheel(cm, e); });\n\n // Prevent wrapper from ever scrolling\n on(d.wrapper, \"scroll\", function () { return d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; });\n\n d.dragFunctions = {\n enter: function (e) {if (!signalDOMEvent(cm, e)) { e_stop(e); }},\n over: function (e) {if (!signalDOMEvent(cm, e)) { onDragOver(cm, e); e_stop(e); }},\n start: function (e) { return onDragStart(cm, e); },\n drop: operation(cm, onDrop),\n leave: function (e) {if (!signalDOMEvent(cm, e)) { clearDragCursor(cm); }}\n };\n\n var inp = d.input.getField();\n on(inp, \"keyup\", function (e) { return onKeyUp.call(cm, e); });\n on(inp, \"keydown\", operation(cm, onKeyDown));\n on(inp, \"keypress\", operation(cm, onKeyPress));\n on(inp, \"focus\", function (e) { return onFocus(cm, e); });\n on(inp, \"blur\", function (e) { return onBlur(cm, e); });\n }\n\n var initHooks = [];\n CodeMirror.defineInitHook = function (f) { return initHooks.push(f); };\n\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 function indentLine(cm, n, how, aggressive) {\n var doc = cm.doc, state;\n if (how == null) { how = \"add\"; }\n if (how == \"smart\") {\n // Fall back to \"prev\" when the mode doesn't have an indentation\n // method.\n if (!doc.mode.indent) { how = \"prev\"; }\n else { state = getContextBefore(cm, n).state; }\n }\n\n var tabSize = cm.options.tabSize;\n var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize);\n if (line.stateAfter) { line.stateAfter = null; }\n var curSpaceString = line.text.match(/^\\s*/)[0], indentation;\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 if (indentation == Pass || indentation > 150) {\n if (!aggressive) { return }\n how = \"prev\";\n }\n }\n if (how == \"prev\") {\n if (n > doc.first) { indentation = countColumn(getLine(doc, n-1).text, null, tabSize); }\n else { indentation = 0; }\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 indentation = Math.max(0, indentation);\n\n var indentString = \"\", pos = 0;\n if (cm.options.indentWithTabs)\n { for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += \"\\t\";} }\n if (pos < indentation) { indentString += spaceStr(indentation - pos); }\n\n if (indentString != curSpaceString) {\n replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), \"+input\");\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 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 }\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 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 if (!sel) { sel = doc.sel; }\n\n var recent = +new Date - 200;\n var paste = origin == \"paste\" || cm.state.pasteIncoming > recent;\n var textLines = splitLinesAuto(inserted), multiPaste = null;\n // When pasting N lines into N selections, insert one line per selection\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 for (var i = 0; i < lastCopied.text.length; i++)\n { multiPaste.push(doc.splitLines(lastCopied.text[i])); }\n }\n } else if (textLines.length == sel.ranges.length && cm.options.pasteLinesPerSelection) {\n multiPaste = map(textLines, function (l) { return [l]; });\n }\n }\n\n var updateInput = cm.curOp.updateInput;\n // Normal behavior is to insert the new text into every selection\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(), to = range.to();\n if (range.empty()) {\n if (deleted && deleted > 0) // Handle deletion\n { from = Pos(from.line, from.ch - deleted); }\n else if (cm.state.overwrite && !paste) // Handle overwrite\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 var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i$1 % multiPaste.length] : textLines,\n origin: origin || (paste ? \"paste\" : cm.state.cutIncoming > recent ? \"cut\" : \"+input\")};\n makeChange(cm.doc, changeEvent);\n signalLater(cm, \"inputRead\", cm, changeEvent);\n }\n if (inserted && !paste)\n { triggerElectric(cm, inserted); }\n\n ensureCursorVisible(cm);\n if (cm.curOp.updateInput < 2) { cm.curOp.updateInput = updateInput; }\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 if (pasted) {\n e.preventDefault();\n if (!cm.isReadOnly() && !cm.options.disableInput)\n { runInOp(cm, function () { return applyTextInput(cm, pasted, 0, null, \"paste\"); }); }\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) { return }\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 if (range.head.ch > 100 || (i && sel.ranges[i - 1].head.line == range.head.line)) { continue }\n var mode = cm.getModeAt(range.head);\n var indented = false;\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 } 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 if (indented) { signalLater(cm, \"electricInput\", cm, range.head.line); }\n }\n }\n\n function copyableRanges(cm) {\n var text = [], ranges = [];\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 = {anchor: Pos(line, 0), head: Pos(line + 1, 0)};\n ranges.push(lineRange);\n text.push(cm.getRange(lineRange.anchor, lineRange.head));\n }\n return {text: text, ranges: ranges}\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; min-height: 1em; outline: none\");\n var div = elt(\"div\", [te], null, \"overflow: hidden; position: relative; width: 3px; height: 0px;\");\n // 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 if (webkit) { te.style.width = \"1000px\"; }\n else { te.setAttribute(\"wrap\", \"off\"); }\n // If border: 0; -- iOS fails to open keyboard (issue #1287)\n if (ios) { te.style.border = \"1px solid black\"; }\n disableBrowserMagic(te);\n return div\n }\n\n // The publicly visible API. Note that methodOp(f) means\n // 'wrap f in an operation, performed on its `this` parameter'.\n\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 function addEditorMethods(CodeMirror) {\n var optionHandlers = CodeMirror.optionHandlers;\n\n var helpers = CodeMirror.helpers = {};\n\n CodeMirror.prototype = {\n constructor: CodeMirror,\n focus: function(){window.focus(); this.display.input.focus();},\n\n setOption: function(option, value) {\n var options = this.options, old = options[option];\n if (options[option] == value && option != \"mode\") { return }\n options[option] = value;\n if (optionHandlers.hasOwnProperty(option))\n { operation(this, optionHandlers[option])(this, value, old); }\n signal(this, \"optionChange\", this, option);\n },\n\n getOption: function(option) {return this.options[option]},\n getDoc: function() {return this.doc},\n\n addKeyMap: function(map, bottom) {\n this.state.keyMaps[bottom ? \"push\" : \"unshift\"](getKeyMap(map));\n },\n removeKeyMap: function(map) {\n var maps = this.state.keyMaps;\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 if (mode.startState) { throw new Error(\"Overlays may not be stateful.\") }\n insertSorted(this.state.overlays,\n {mode: mode, modeSpec: spec, opaque: options && options.opaque,\n priority: (options && options.priority) || 0},\n function (overlay) { return overlay.priority; });\n this.state.modeGen++;\n regChange(this);\n }),\n removeOverlay: methodOp(function(spec) {\n var overlays = this.state.overlays;\n for (var i = 0; i < overlays.length; ++i) {\n var cur = overlays[i].modeSpec;\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\n indentLine: methodOp(function(n, dir, aggressive) {\n if (typeof dir != \"string\" && typeof dir != \"number\") {\n if (dir == null) { dir = this.options.smartIndent ? \"smart\" : \"prev\"; }\n else { dir = dir ? \"add\" : \"subtract\"; }\n }\n if (isLine(this.doc, n)) { indentLine(this, n, dir, aggressive); }\n }),\n indentSelection: methodOp(function(how) {\n var ranges = this.doc.sel.ranges, end = -1;\n for (var i = 0; i < ranges.length; i++) {\n var range = ranges[i];\n if (!range.empty()) {\n var from = range.from(), 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 for (var j = start; j < end; ++j)\n { indentLine(this, j, how); }\n var newRanges = this.doc.sel.ranges;\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 } else if (range.head.line > end) {\n indentLine(this, range.head.line, how, true);\n end = range.head.line;\n if (i == this.doc.sel.primIndex) { 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(pos, precise) {\n return takeToken(this, pos, precise)\n },\n\n getLineTokens: function(line, precise) {\n return takeToken(this, Pos(line), precise, true)\n },\n\n getTokenTypeAt: function(pos) {\n pos = clipPos(this.doc, pos);\n var styles = getLineStyles(this, getLine(this.doc, pos.line));\n var before = 0, after = (styles.length - 1) / 2, ch = pos.ch;\n var type;\n if (ch == 0) { type = styles[2]; }\n else { for (;;) {\n var mid = (before + after) >> 1;\n if ((mid ? styles[mid * 2 - 1] : 0) >= ch) { after = mid; }\n else if (styles[mid * 2 + 1] < ch) { before = mid + 1; }\n else { type = styles[mid * 2 + 2]; break }\n } }\n var cut = type ? type.indexOf(\"overlay \") : -1;\n return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1)\n },\n\n getModeAt: function(pos) {\n var mode = this.doc.mode;\n if (!mode.innerMode) { return mode }\n return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode\n },\n\n getHelper: function(pos, type) {\n return this.getHelpers(pos, type)[0]\n },\n\n getHelpers: function(pos, type) {\n var found = [];\n if (!helpers.hasOwnProperty(type)) { return found }\n var help = helpers[type], mode = this.getModeAt(pos);\n if (typeof mode[type] == \"string\") {\n if (help[mode[type]]) { found.push(help[mode[type]]); }\n } else if (mode[type]) {\n for (var i = 0; i < mode[type].length; i++) {\n var val = help[mode[type][i]];\n if (val) { found.push(val); }\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 for (var i$1 = 0; i$1 < help._global.length; i$1++) {\n var cur = help._global[i$1];\n if (cur.pred(mode, this) && indexOf(found, cur.val) == -1)\n { found.push(cur.val); }\n }\n return found\n },\n\n getStateAfter: function(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\n cursorCoords: function(start, mode) {\n var pos, range = this.doc.sel.primary();\n if (start == null) { pos = range.head; }\n else if (typeof start == \"object\") { pos = clipPos(this.doc, start); }\n else { pos = start ? range.from() : range.to(); }\n return cursorCoords(this, pos, mode || \"page\")\n },\n\n charCoords: function(pos, mode) {\n return charCoords(this, clipPos(this.doc, pos), mode || \"page\")\n },\n\n coordsChar: function(coords, mode) {\n coords = fromCoordSystem(this, coords, mode || \"page\");\n return coordsChar(this, coords.left, coords.top)\n },\n\n lineAtHeight: function(height, mode) {\n height = fromCoordSystem(this, {top: height, left: 0}, mode || \"page\").top;\n return lineAtHeight(this.doc, height + this.display.viewOffset)\n },\n heightAtLine: function(line, mode, includeWidgets) {\n var end = false, lineObj;\n if (typeof line == \"number\") {\n var last = this.doc.first + this.doc.size - 1;\n if (line < this.doc.first) { line = this.doc.first; }\n else if (line > last) { line = last; end = true; }\n lineObj = getLine(this.doc, line);\n } else {\n lineObj = line;\n }\n return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || \"page\", includeWidgets || end).top +\n (end ? this.doc.height - heightAtLine(lineObj) : 0)\n },\n\n defaultTextHeight: function() { return textHeight(this.display) },\n defaultCharWidth: function() { return charWidth(this.display) },\n\n getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo}},\n\n addWidget: function(pos, node, scroll, vert, horiz) {\n var display = this.display;\n pos = cursorCoords(this, clipPos(this.doc, pos));\n var top = pos.bottom, 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 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);\n // Default to positioning above (if specified and possible); otherwise default to positioning below\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 if (left + node.offsetWidth > hspace)\n { left = hspace - node.offsetWidth; }\n }\n node.style.top = top + \"px\";\n node.style.left = node.style.right = \"\";\n if (horiz == \"right\") {\n left = display.sizer.clientWidth - node.offsetWidth;\n node.style.right = \"0px\";\n } else {\n if (horiz == \"left\") { left = 0; }\n else if (horiz == \"middle\") { left = (display.sizer.clientWidth - node.offsetWidth) / 2; }\n node.style.left = left + \"px\";\n }\n if (scroll)\n { scrollIntoView(this, {left: left, top: top, right: left + node.offsetWidth, bottom: top + node.offsetHeight}); }\n },\n\n triggerOnKeyDown: methodOp(onKeyDown),\n triggerOnKeyPress: methodOp(onKeyPress),\n triggerOnKeyUp: onKeyUp,\n triggerOnMouseDown: methodOp(onMouseDown),\n\n execCommand: function(cmd) {\n if (commands.hasOwnProperty(cmd))\n { return commands[cmd].call(null, this) }\n },\n\n triggerElectric: methodOp(function(text) { triggerElectric(this, text); }),\n\n findPosH: function(from, amount, unit, visually) {\n var dir = 1;\n if (amount < 0) { dir = -1; amount = -amount; }\n var cur = clipPos(this.doc, from);\n for (var i = 0; i < amount; ++i) {\n cur = findPosH(this.doc, cur, dir, unit, visually);\n if (cur.hitSide) { break }\n }\n return cur\n },\n\n moveH: methodOp(function(dir, unit) {\n var this$1 = this;\n\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 }, sel_move);\n }),\n\n deleteH: methodOp(function(dir, unit) {\n var sel = this.doc.sel, doc = this.doc;\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 return dir < 0 ? {from: other, to: range.head} : {from: range.head, to: other}\n }); }\n }),\n\n findPosV: function(from, amount, unit, goalColumn) {\n var dir = 1, x = goalColumn;\n if (amount < 0) { dir = -1; amount = -amount; }\n var cur = clipPos(this.doc, from);\n for (var i = 0; i < amount; ++i) {\n var coords = cursorCoords(this, cur, \"div\");\n if (x == null) { x = coords.left; }\n else { coords.left = x; }\n cur = findPosV(this, coords, dir, unit);\n if (cur.hitSide) { break }\n }\n return cur\n },\n\n moveV: methodOp(function(dir, unit) {\n var this$1 = this;\n\n var doc = this.doc, 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 var headPos = cursorCoords(this$1, range.head, \"div\");\n if (range.goalColumn != null) { headPos.left = range.goalColumn; }\n goals.push(headPos.left);\n var pos = findPosV(this$1, headPos, dir, unit);\n if (unit == \"page\" && range == doc.sel.primary())\n { addToScrollTop(this$1, charCoords(this$1, pos, \"div\").top - headPos.top); }\n return pos\n }, sel_move);\n if (goals.length) { for (var i = 0; i < doc.sel.ranges.length; i++)\n { doc.sel.ranges[i].goalColumn = goals[i]; } }\n }),\n\n // Find the word at the given position (as returned by coordsChar).\n findWordAt: function(pos) {\n var doc = this.doc, line = getLine(doc, pos.line).text;\n var start = pos.ch, end = pos.ch;\n if (line) {\n var helper = this.getHelper(pos, \"wordChars\");\n if ((pos.sticky == \"before\" || end == line.length) && start) { --start; } else { ++end; }\n var startChar = line.charAt(start);\n var check = isWordChar(startChar, helper)\n ? function (ch) { return isWordChar(ch, helper); }\n : /\\s/.test(startChar) ? function (ch) { return /\\s/.test(ch); }\n : function (ch) { return (!/\\s/.test(ch) && !isWordChar(ch)); };\n while (start > 0 && check(line.charAt(start - 1))) { --start; }\n while (end < line.length && check(line.charAt(end))) { ++end; }\n }\n return new Range(Pos(pos.line, start), Pos(pos.line, end))\n },\n\n toggleOverwrite: function(value) {\n if (value != null && value == this.state.overwrite) { return }\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 signal(this, \"overwriteToggle\", this, this.state.overwrite);\n },\n hasFocus: function() { return this.display.input.getField() == activeElt() },\n isReadOnly: function() { return !!(this.options.readOnly || this.doc.cantEdit) },\n\n scrollTo: methodOp(function (x, y) { scrollToCoords(this, x, y); }),\n getScrollInfo: function() {\n var scroller = this.display.scroller;\n return {left: scroller.scrollLeft, 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), clientWidth: displayWidth(this)}\n },\n\n scrollIntoView: methodOp(function(range, margin) {\n if (range == null) {\n range = {from: this.doc.sel.primary().head, to: null};\n if (margin == null) { margin = this.options.cursorScrollMargin; }\n } else if (typeof range == \"number\") {\n range = {from: Pos(range, 0), to: null};\n } else if (range.from == null) {\n range = {from: range, to: null};\n }\n if (!range.to) { range.to = range.from; }\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\n setSize: methodOp(function(width, height) {\n var this$1 = this;\n\n var interpret = function (val) { return typeof val == \"number\" || /^\\d+$/.test(String(val)) ? val + \"px\" : val; };\n if (width != null) { this.display.wrapper.style.width = interpret(width); }\n if (height != null) { this.display.wrapper.style.height = interpret(height); }\n if (this.options.lineWrapping) { clearLineMeasurementCache(this); }\n var lineNo = this.display.viewFrom;\n this.doc.iter(lineNo, this.display.viewTo, function (line) {\n if (line.widgets) { for (var i = 0; i < line.widgets.length; i++)\n { if (line.widgets[i].noHScroll) { regLineChange(this$1, lineNo, \"widget\"); break } } }\n ++lineNo;\n });\n this.curOp.forceUpdate = true;\n signal(this, \"refresh\", this);\n }),\n\n operation: function(f){return runInOp(this, f)},\n startOperation: function(){return startOperation(this)},\n endOperation: function(){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 if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5 || this.options.lineWrapping)\n { estimateLineHeights(this); }\n signal(this, \"refresh\", this);\n }),\n\n swapDoc: methodOp(function(doc) {\n var old = this.doc;\n old.cm = null;\n // Cancel the current text selection if any (#5821)\n if (this.state.selectingText) { this.state.selectingText(); }\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\n phrase: function(phraseText) {\n var phrases = this.options.phrases;\n return phrases && Object.prototype.hasOwnProperty.call(phrases, phraseText) ? phrases[phraseText] : phraseText\n },\n\n getInputField: function(){return this.display.input.getField()},\n getWrapperElement: function(){return this.display.wrapper},\n getScrollerElement: function(){return this.display.scroller},\n getGutterElement: function(){return this.display.gutters}\n };\n eventMixin(CodeMirror);\n\n CodeMirror.registerHelper = function(type, name, value) {\n if (!helpers.hasOwnProperty(type)) { helpers[type] = CodeMirror[type] = {_global: []}; }\n helpers[type][name] = value;\n };\n CodeMirror.registerGlobalHelper = function(type, name, predicate, value) {\n CodeMirror.registerHelper(type, name, value);\n helpers[type]._global.push({pred: predicate, val: value});\n };\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 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 function findNextLine() {\n var l = pos.line + lineDir;\n if (l < doc.first || l >= doc.first + doc.size) { return false }\n pos = new Pos(l, pos.ch, pos.sticky);\n return lineObj = getLine(doc, l)\n }\n function moveOnce(boundToLine) {\n var next;\n if (unit == \"codepoint\") {\n var ch = lineObj.text.charCodeAt(pos.ch + (dir > 0 ? 0 : -1));\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 if (next == null) {\n if (!boundToLine && findNextLine())\n { pos = endOfLine(visually, doc.cm, lineObj, pos.line, lineDir); }\n else\n { return false }\n } else {\n pos = next;\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, group = unit == \"group\";\n var helper = doc.cm && doc.cm.getHelper(pos, \"wordChars\");\n for (var first = true;; first = false) {\n if (dir < 0 && !moveOnce(!first)) { break }\n var cur = lineObj.text.charAt(pos.ch) || \"\\n\";\n var type = isWordChar(cur, helper) ? \"w\"\n : group && cur == \"\\n\" ? \"n\"\n : !group || /\\s/.test(cur) ? null\n : \"p\";\n if (group && !first && !type) { type = \"s\"; }\n if (sawType && sawType != type) {\n if (dir < 0) {dir = 1; moveOnce(); pos.sticky = \"after\";}\n break\n }\n\n if (type) { sawType = type; }\n if (dir > 0 && !moveOnce(!first)) { break }\n }\n }\n var result = skipAtomic(doc, pos, oldPos, origDir, true);\n if (equalCursorPos(oldPos, result)) { result.hitSide = true; }\n return result\n }\n\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 function findPosV(cm, pos, dir, unit) {\n var doc = cm.doc, x = pos.left, y;\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\n } else if (unit == \"line\") {\n y = dir > 0 ? pos.bottom + 3 : pos.top - 3;\n }\n var target;\n for (;;) {\n target = coordsChar(cm, x, y);\n if (!target.outside) { break }\n if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break }\n y += dir * 5;\n }\n return target\n }\n\n // CONTENTEDITABLE INPUT STYLE\n\n var ContentEditableInput = function(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\n var input = this, 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) { return true }\n if (/\\bCodeMirror-(?:line)?widget\\b/.test(t.className)) { break }\n }\n return false\n }\n\n on(div, \"paste\", function (e) {\n if (!belongsToInput(e) || signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }\n // IE doesn't fire input events, so we schedule a read for the pasted content in this way\n if (ie_version <= 11) { setTimeout(operation(cm, function () { return this$1.updateFromDOM(); }), 20); }\n });\n\n on(div, \"compositionstart\", function (e) {\n this$1.composing = {data: e.data, done: false};\n });\n on(div, \"compositionupdate\", function (e) {\n if (!this$1.composing) { this$1.composing = {data: e.data, done: false}; }\n });\n on(div, \"compositionend\", function (e) {\n if (this$1.composing) {\n if (e.data != this$1.composing.data) { this$1.readFromDOMSoon(); }\n this$1.composing.done = true;\n }\n });\n\n on(div, \"touchstart\", function () { return input.forceCompositionEnd(); });\n\n on(div, \"input\", function () {\n if (!this$1.composing) { this$1.readFromDOMSoon(); }\n });\n\n function onCopyCut(e) {\n if (!belongsToInput(e) || signalDOMEvent(cm, e)) { return }\n if (cm.somethingSelected()) {\n setLastCopied({lineWise: false, text: cm.getSelections()});\n if (e.type == \"cut\") { cm.replaceSelection(\"\", null, \"cut\"); }\n } else if (!cm.options.lineWiseCopyCut) {\n return\n } else {\n var ranges = copyableRanges(cm);\n setLastCopied({lineWise: true, text: ranges.text});\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 if (e.clipboardData) {\n e.clipboardData.clearData();\n var content = lastCopied.text.join(\"\\n\");\n // iOS exposes the clipboard API, but seems to discard content inserted into it\n e.clipboardData.setData(\"Text\", content);\n if (e.clipboardData.getData(\"Text\") == content) {\n e.preventDefault();\n return\n }\n }\n // Old-fashioned briefly-focus-a-textarea hack\n var kludge = hiddenTextarea(), 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 if (hadFocus == div) { input.showPrimarySelection(); }\n }, 50);\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) { return }\n if (info.focus || takeFocus) { this.showPrimarySelection(); }\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(), cm = this.cm, prim = cm.doc.sel.primary();\n var from = prim.from(), 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 if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad &&\n cmp(minPos(curAnchor, curFocus), from) == 0 &&\n cmp(maxPos(curAnchor, curFocus), to) == 0)\n { return }\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], offset: 0};\n var end = to.line < cm.display.viewTo && posToDOM(cm, to);\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 = {node: map[map.length - 1], offset: map[map.length - 2] - map[map.length - 3]};\n }\n\n if (!start || !end) {\n sel.removeAllRanges();\n return\n }\n\n var old = sel.rangeCount && sel.getRangeAt(0), rng;\n try { 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 if (rng) {\n if (!gecko && cm.state.focused) {\n sel.collapse(start.node, start.offset);\n if (!rng.collapsed) {\n sel.removeAllRanges();\n sel.addRange(rng);\n }\n } else {\n sel.removeAllRanges();\n sel.addRange(rng);\n }\n if (old && sel.anchorNode == null) { sel.addRange(old); }\n else if (gecko) { this.startGracePeriod(); }\n }\n this.rememberSelection();\n };\n\n ContentEditableInput.prototype.startGracePeriod = function () {\n var this$1 = this;\n\n clearTimeout(this.gracePeriod);\n this.gracePeriod = setTimeout(function () {\n this$1.gracePeriod = false;\n if (this$1.selectionChanged())\n { this$1.cm.operation(function () { return this$1.cm.curOp.selectionChanged = true; }); }\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; this.lastAnchorOffset = sel.anchorOffset;\n this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset;\n };\n\n ContentEditableInput.prototype.selectionInEditor = function () {\n var sel = this.getSelection();\n if (!sel.rangeCount) { return false }\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 this.div.focus();\n }\n };\n ContentEditableInput.prototype.blur = function () { this.div.blur(); };\n ContentEditableInput.prototype.getField = function () { return this.div };\n\n ContentEditableInput.prototype.supportsTouch = function () { return true };\n\n ContentEditableInput.prototype.receivedFocus = function () {\n var this$1 = this;\n\n var input = this;\n if (this.selectionInEditor())\n { setTimeout(function () { return this$1.pollSelection(); }, 20); }\n else\n { runInOp(this.cm, function () { return input.cm.curOp.selectionChanged = true; }); }\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 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 ||\n sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset\n };\n\n ContentEditableInput.prototype.pollSelection = function () {\n if (this.readDOMTimeout != null || this.gracePeriod || !this.selectionChanged()) { return }\n var sel = this.getSelection(), cm = this.cm;\n // 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 if (android && chrome && this.cm.display.gutterSpecs.length && isInGutter(sel.anchorNode)) {\n this.cm.triggerOnKeyDown({type: \"keydown\", keyCode: 8, preventDefault: Math.abs});\n this.blur();\n this.focus();\n return\n }\n if (this.composing) { return }\n this.rememberSelection();\n var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);\n var head = domToPos(cm, sel.focusNode, sel.focusOffset);\n if (anchor && head) { runInOp(cm, function () {\n setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll);\n if (anchor.bad || head.bad) { cm.curOp.selectionChanged = true; }\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, display = cm.display, sel = cm.doc.sel.primary();\n var from = sel.from(), to = sel.to();\n if (from.ch == 0 && from.line > cm.firstLine())\n { from = Pos(from.line - 1, getLine(cm.doc, from.line - 1).length); }\n if (to.ch == getLine(cm.doc, to.line).text.length && to.line < cm.lastLine())\n { to = Pos(to.line + 1, 0); }\n if (from.line < display.viewFrom || to.line > display.viewTo - 1) { return false }\n\n var fromIndex, fromLine, fromNode;\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 var toIndex = findViewIndex(cm, to.line);\n var toLine, toNode;\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) { return false }\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 while (newText.length > 1 && oldText.length > 1) {\n if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine--; }\n else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++; }\n else { break }\n }\n\n var cutFront = 0, cutEnd = 0;\n var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length);\n while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront))\n { ++cutFront; }\n var newBot = lst(newText), oldBot = lst(oldText);\n var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0),\n oldBot.length - (oldText.length == 1 ? cutFront : 0));\n while (cutEnd < maxCutEnd &&\n 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 if (newText.length == 1 && oldText.length == 1 && fromLine == from.line) {\n while (cutFront && cutFront > from.ch &&\n 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\n var chFrom = Pos(fromLine, cutFront);\n var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0);\n if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) {\n replaceRange(cm.doc, newText, chFrom, chTo, \"+input\");\n return true\n }\n };\n\n ContentEditableInput.prototype.ensurePolled = function () {\n this.forceCompositionEnd();\n };\n ContentEditableInput.prototype.reset = function () {\n this.forceCompositionEnd();\n };\n ContentEditableInput.prototype.forceCompositionEnd = function () {\n if (!this.composing) { return }\n clearTimeout(this.readDOMTimeout);\n this.composing = null;\n this.updateFromDOM();\n this.div.blur();\n this.div.focus();\n };\n ContentEditableInput.prototype.readFromDOMSoon = function () {\n var this$1 = this;\n\n if (this.readDOMTimeout != null) { return }\n this.readDOMTimeout = setTimeout(function () {\n this$1.readDOMTimeout = null;\n if (this$1.composing) {\n if (this$1.composing.done) { this$1.composing = null; }\n else { return }\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 () { return regChange(this$1.cm); }); }\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) { return }\n e.preventDefault();\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 ContentEditableInput.prototype.readOnlyChanged = function (val) {\n this.div.contentEditable = String(val != \"nocursor\");\n };\n\n ContentEditableInput.prototype.onContextMenu = function () {};\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 if (!view || view.hidden) { return null }\n var line = getLine(cm.doc, pos.line);\n var info = mapFromLineView(view, line, pos.line);\n\n var order = getOrder(line, cm.doc.direction), side = \"left\";\n if (order) {\n var partPos = getBidiPartAt(order, pos.ch);\n side = partPos % 2 ? \"right\" : \"left\";\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)) { return true } }\n return false\n }\n\n function badPos(pos, bad) { if (bad) { pos.bad = true; } return pos }\n\n function domTextBetween(cm, from, to, fromLine, toLine) {\n var text = \"\", closing = false, lineSep = cm.doc.lineSeparator(), extraLinebreak = false;\n function recognizeMarker(id) { return function (marker) { return marker.id == id; } }\n function close() {\n if (closing) {\n text += lineSep;\n if (extraLinebreak) { text += lineSep; }\n closing = extraLinebreak = false;\n }\n }\n function addText(str) {\n if (str) {\n close();\n text += str;\n }\n }\n function walk(node) {\n if (node.nodeType == 1) {\n var cmText = node.getAttribute(\"cm-text\");\n if (cmText) {\n addText(cmText);\n return\n }\n var markerID = node.getAttribute(\"cm-marker\"), range;\n if (markerID) {\n var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID));\n if (found.length && (range = found[0].find(0)))\n { addText(getBetween(cm.doc, range.from, range.to).join(lineSep)); }\n return\n }\n if (node.getAttribute(\"contenteditable\") == \"false\") { return }\n var isBlock = /^(pre|div|p|li|table|br)$/i.test(node.nodeName);\n if (!/^br$/i.test(node.nodeName) && node.textContent.length == 0) { return }\n\n if (isBlock) { close(); }\n for (var i = 0; i < node.childNodes.length; i++)\n { walk(node.childNodes[i]); }\n\n if (/^(pre|p)$/i.test(node.nodeName)) { extraLinebreak = true; }\n if (isBlock) { closing = true; }\n } else if (node.nodeType == 3) {\n addText(node.nodeValue.replace(/\\u200b/g, \"\").replace(/\\u00a0/g, \" \"));\n }\n }\n for (;;) {\n walk(from);\n if (from == to) { break }\n from = from.nextSibling;\n extraLinebreak = false;\n }\n return text\n }\n\n function domToPos(cm, node, offset) {\n var lineNode;\n if (node == cm.display.lineDiv) {\n lineNode = cm.display.lineDiv.childNodes[offset];\n if (!lineNode) { return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true) }\n node = null; offset = 0;\n } else {\n for (lineNode = node;; lineNode = lineNode.parentNode) {\n if (!lineNode || lineNode == cm.display.lineDiv) { return null }\n if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) { break }\n }\n }\n for (var i = 0; i < cm.display.view.length; i++) {\n var lineView = cm.display.view[i];\n if (lineView.node == lineNode)\n { return locateNodeInLineView(lineView, node, offset) }\n }\n }\n\n function locateNodeInLineView(lineView, node, offset) {\n var wrapper = lineView.text.firstChild, bad = false;\n if (!node || !contains(wrapper, node)) { return badPos(Pos(lineNo(lineView.line), 0), true) }\n if (node == wrapper) {\n bad = true;\n node = wrapper.childNodes[offset];\n offset = 0;\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, topNode = node;\n if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) {\n textNode = node.firstChild;\n if (offset) { offset = textNode.nodeValue.length; }\n }\n while (topNode.parentNode != wrapper) { topNode = topNode.parentNode; }\n var measure = lineView.measure, 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 for (var j = 0; j < map.length; j += 3) {\n var curNode = map[j + 2];\n if (curNode == textNode || curNode == topNode) {\n var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]);\n var ch = map[j] + offset;\n if (offset < 0 || curNode != textNode) { ch = map[j + (offset ? 1 : 0)]; }\n return Pos(line, ch)\n }\n }\n }\n }\n var found = find(textNode, topNode, offset);\n if (found) { return badPos(found, bad) }\n\n // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems\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 if (found)\n { return badPos(Pos(found.line, found.ch - dist), bad) }\n else\n { dist += after.textContent.length; }\n }\n for (var before = topNode.previousSibling, dist$1 = offset; before; before = before.previousSibling) {\n found = find(before, before.firstChild, -1);\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\n // TEXTAREA INPUT STYLE\n\n var TextareaInput = function(cm) {\n this.cm = cm;\n // See input.poll and input.reset\n this.prevInput = \"\";\n\n // 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 this.pollingFast = false;\n // Self-resetting timeout for the poller\n this.polling = new Delayed();\n // Used to work around IE issue with selection being forgotten when focus moves away from textarea\n this.hasSelection = false;\n this.composing = null;\n };\n\n TextareaInput.prototype.init = function (display) {\n var this$1 = this;\n\n var input = this, cm = this.cm;\n this.createField(display);\n var te = this.textarea;\n\n display.wrapper.insertBefore(this.wrapper, display.wrapper.firstChild);\n\n // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore)\n if (ios) { te.style.width = \"0px\"; }\n\n on(te, \"input\", function () {\n if (ie && ie_version >= 9 && this$1.hasSelection) { this$1.hasSelection = null; }\n input.poll();\n });\n\n on(te, \"paste\", function (e) {\n if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }\n\n cm.state.pasteIncoming = +new Date;\n input.fastPoll();\n });\n\n function prepareCopyCut(e) {\n if (signalDOMEvent(cm, e)) { return }\n if (cm.somethingSelected()) {\n setLastCopied({lineWise: false, text: cm.getSelections()});\n } else if (!cm.options.lineWiseCopyCut) {\n return\n } else {\n var ranges = copyableRanges(cm);\n setLastCopied({lineWise: true, text: ranges.text});\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 if (e.type == \"cut\") { cm.state.cutIncoming = +new Date; }\n }\n on(te, \"cut\", prepareCopyCut);\n on(te, \"copy\", prepareCopyCut);\n\n on(display.scroller, \"paste\", function (e) {\n if (eventInWidget(display, e) || signalDOMEvent(cm, e)) { return }\n if (!te.dispatchEvent) {\n cm.state.pasteIncoming = +new Date;\n input.focus();\n return\n }\n\n // Pass the `paste` event to the textarea so it's handled by its event listener.\n var event = new Event(\"paste\");\n event.clipboardData = e.clipboardData;\n te.dispatchEvent(event);\n });\n\n // Prevent normal selection in the editor (we handle our own)\n on(display.lineSpace, \"selectstart\", function (e) {\n if (!eventInWidget(display, e)) { e_preventDefault(e); }\n });\n\n on(te, \"compositionstart\", function () {\n var start = cm.getCursor(\"from\");\n if (input.composing) { input.composing.range.clear(); }\n input.composing = {\n start: start,\n range: cm.markText(start, cm.getCursor(\"to\"), {className: \"CodeMirror-composing\"})\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();\n // The semihidden textarea that is focused when the editor is\n // focused, and receives input.\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, display = cm.display, doc = cm.doc;\n var result = prepareSelection(cm);\n\n // Move the hidden textarea near the cursor to prevent scrolling artifacts\n if (cm.options.moveInputWithCursor) {\n var headPos = cursorCoords(cm, doc.sel.primary().head, \"div\");\n var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect();\n result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10,\n headPos.top + lineOff.top - wrapOff.top));\n result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10,\n headPos.left + lineOff.left - wrapOff.left));\n }\n\n return result\n };\n\n TextareaInput.prototype.showSelection = function (drawn) {\n var cm = this.cm, display = cm.display;\n removeChildrenAndAdd(display.cursorDiv, drawn.cursors);\n removeChildrenAndAdd(display.selectionDiv, drawn.selection);\n if (drawn.teTop != null) {\n this.wrapper.style.top = drawn.teTop + \"px\";\n this.wrapper.style.left = drawn.teLeft + \"px\";\n }\n };\n\n // Reset the input to correspond to the selection (or to be empty,\n // when not typing and nothing is selected)\n TextareaInput.prototype.reset = function (typing) {\n if (this.contextMenuPending || this.composing) { return }\n var cm = this.cm;\n if (cm.somethingSelected()) {\n this.prevInput = \"\";\n var content = cm.getSelection();\n this.textarea.value = content;\n if (cm.state.focused) { selectInput(this.textarea); }\n if (ie && ie_version >= 9) { this.hasSelection = content; }\n } else if (!typing) {\n this.prevInput = this.textarea.value = \"\";\n if (ie && ie_version >= 9) { this.hasSelection = null; }\n }\n };\n\n TextareaInput.prototype.getField = function () { return this.textarea };\n\n TextareaInput.prototype.supportsTouch = function () { return false };\n\n TextareaInput.prototype.focus = function () {\n if (this.cm.options.readOnly != \"nocursor\" && (!mobile || activeElt() != this.textarea)) {\n try { this.textarea.focus(); }\n catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM\n }\n };\n\n TextareaInput.prototype.blur = function () { this.textarea.blur(); };\n\n TextareaInput.prototype.resetPosition = function () {\n this.wrapper.style.top = this.wrapper.style.left = 0;\n };\n\n TextareaInput.prototype.receivedFocus = function () { this.slowPoll(); };\n\n // Poll for input changes, using the normal rate of polling. This\n // runs as long as the editor is focused.\n TextareaInput.prototype.slowPoll = function () {\n var this$1 = this;\n\n if (this.pollingFast) { return }\n this.polling.set(this.cm.options.pollInterval, function () {\n this$1.poll();\n if (this$1.cm.state.focused) { this$1.slowPoll(); }\n });\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 TextareaInput.prototype.fastPoll = function () {\n var missed = false, input = this;\n input.pollingFast = true;\n function p() {\n var changed = input.poll();\n if (!changed && !missed) {missed = true; input.polling.set(60, p);}\n else {input.pollingFast = false; input.slowPoll();}\n }\n input.polling.set(20, p);\n };\n\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 TextareaInput.prototype.poll = function () {\n var this$1 = this;\n\n var cm = this.cm, input = this.textarea, prevInput = this.prevInput;\n // 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 if (this.contextMenuPending || !cm.state.focused ||\n (hasSelection(input) && !prevInput && !this.composing) ||\n cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq)\n { return false }\n\n var text = input.value;\n // If nothing changed, bail.\n if (text == prevInput && !cm.somethingSelected()) { 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 if (ie && ie_version >= 9 && this.hasSelection === text ||\n 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 if (first == 0x200b && !prevInput) { prevInput = \"\\u200b\"; }\n if (first == 0x21da) { this.reset(); return this.cm.execCommand(\"undo\") }\n }\n // Find the part of the input that is actually new\n var same = 0, l = Math.min(prevInput.length, text.length);\n while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) { ++same; }\n\n runInOp(cm, function () {\n applyTextInput(cm, text.slice(same), prevInput.length - same,\n null, this$1.composing ? \"*compose\" : null);\n\n // Don't leave long text in the textarea, since it makes further polling slow\n if (text.length > 1000 || text.indexOf(\"\\n\") > -1) { input.value = this$1.prevInput = \"\"; }\n else { this$1.prevInput = text; }\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 return true\n };\n\n TextareaInput.prototype.ensurePolled = function () {\n if (this.pollingFast && this.poll()) { this.pollingFast = false; }\n };\n\n TextareaInput.prototype.onKeyPress = function () {\n if (ie && ie_version >= 9) { this.hasSelection = null; }\n this.fastPoll();\n };\n\n TextareaInput.prototype.onContextMenu = function (e) {\n var input = this, cm = input.cm, display = cm.display, te = input.textarea;\n if (input.contextMenuPending) { input.contextMenuPending(); }\n var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop;\n if (!pos || presto) { return } // Opera is difficult.\n\n // Reset the current text selection only if the click is done outside of the selection\n // and 'resetSelectionOnContextMenu' option is true.\n var reset = cm.options.resetSelectionOnContextMenu;\n if (reset && cm.doc.sel.contains(pos) == -1)\n { operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll); }\n\n var oldCSS = te.style.cssText, 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 if (webkit) { oldScrollY = window.scrollY; } // Work around Chrome issue (#2712)\n display.input.focus();\n if (webkit) { window.scrollTo(null, oldScrollY); }\n display.input.reset();\n // Adds \"Select all\" to context menu in FF\n if (!cm.somethingSelected()) { te.value = input.prevInput = \" \"; }\n input.contextMenuPending = rehide;\n display.selForContextMenu = cm.doc.sel;\n clearTimeout(display.detectingSelectAll);\n\n // 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 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 te.value = extval;\n input.prevInput = selected ? \"\" : \"\\u200b\";\n te.selectionStart = 1; te.selectionEnd = extval.length;\n // Re-set this, in case some other handler touched the\n // selection in the meantime.\n display.selForContextMenu = cm.doc.sel;\n }\n }\n function rehide() {\n if (input.contextMenuPending != rehide) { return }\n input.contextMenuPending = false;\n input.wrapper.style.cssText = oldWrapperCSS;\n te.style.cssText = oldCSS;\n if (ie && ie_version < 9) { display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos); }\n\n // Try to detect the user choosing select-all\n if (te.selectionStart != null) {\n if (!ie || (ie && ie_version < 9)) { prepareSelectAllHack(); }\n var i = 0, poll = function () {\n if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 &&\n 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 display.detectingSelectAll = setTimeout(poll, 200);\n }\n }\n\n if (ie && ie_version >= 9) { prepareSelectAllHack(); }\n if (captureRightClick) {\n e_stop(e);\n var mouseup = function () {\n off(window, \"mouseup\", mouseup);\n setTimeout(rehide, 20);\n };\n on(window, \"mouseup\", mouseup);\n } else {\n setTimeout(rehide, 50);\n }\n };\n\n TextareaInput.prototype.readOnlyChanged = function (val) {\n if (!val) { this.reset(); }\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 if (!options.tabindex && textarea.tabIndex)\n { options.tabindex = textarea.tabIndex; }\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 if (options.autofocus == null) {\n var hasFocus = activeElt();\n options.autofocus = hasFocus == textarea ||\n textarea.getAttribute(\"autofocus\") != null && hasFocus == document.body;\n }\n\n function save() {textarea.value = cm.getValue();}\n\n var realSubmit;\n if (textarea.form) {\n on(textarea.form, \"submit\", save);\n // Deplorable hack to make the submit method do the right thing.\n if (!options.leaveSubmitMethodAlone) {\n var form = textarea.form;\n realSubmit = form.submit;\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 cm.getTextArea = function () { return textarea; };\n cm.toTextArea = function () {\n cm.toTextArea = isNaN; // Prevent this from being ran twice\n save();\n textarea.parentNode.removeChild(cm.getWrapperElement());\n textarea.style.display = \"\";\n if (textarea.form) {\n off(textarea.form, \"submit\", save);\n if (!options.leaveSubmitMethodAlone && typeof textarea.form.submit == \"function\")\n { textarea.form.submit = realSubmit; }\n }\n };\n };\n\n textarea.style.display = \"none\";\n var cm = CodeMirror(function (node) { 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 }\n\n // EDITOR CONSTRUCTOR\n\n defineOptions(CodeMirror);\n\n addEditorMethods(CodeMirror);\n\n // Set up methods on CodeMirror's prototype to redirect to the editor's document.\n var dontDelegate = \"iter insert remove copy getEditor constructor\".split(\" \");\n for (var prop in Doc.prototype) { if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0)\n { CodeMirror.prototype[prop] = (function(method) {\n return function() {return method.apply(this.doc, arguments)}\n })(Doc.prototype[prop]); } }\n\n eventMixin(Doc);\n CodeMirror.inputStyles = {\"textarea\": TextareaInput, \"contenteditable\": ContentEditableInput};\n\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 CodeMirror.defineMode = function(name/*, mode, …*/) {\n if (!CodeMirror.defaults.mode && name != \"null\") { CodeMirror.defaults.mode = name; }\n defineMode.apply(this, arguments);\n };\n\n CodeMirror.defineMIME = defineMIME;\n\n // Minimal default mode.\n CodeMirror.defineMode(\"null\", function () { return ({token: function (stream) { return stream.skipToEnd(); }}); });\n CodeMirror.defineMIME(\"text/plain\", \"null\");\n\n // EXTENSIONS\n\n CodeMirror.defineExtension = function (name, func) {\n CodeMirror.prototype[name] = func;\n };\n CodeMirror.defineDocExtension = function (name, func) {\n Doc.prototype[name] = func;\n };\n\n CodeMirror.fromTextArea = fromTextArea;\n\n addLegacyProps(CodeMirror);\n\n CodeMirror.version = \"5.63.3\";\n\n return CodeMirror;\n\n})));\n","var getBuiltIn = require('../internals/get-built-in');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n var keys = getOwnPropertyNamesModule.f(anObject(it));\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys;\n};\n","var isSymbol = require('../internals/is-symbol');\n\nmodule.exports = function (argument) {\n if (isSymbol(argument)) throw TypeError('Cannot convert a Symbol value to a string');\n return String(argument);\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var classof = require('../internals/classof-raw');\nvar global = require('../internals/global');\n\nmodule.exports = classof(global.process) == 'process';\n","module.exports = typeof window == 'object';\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\n\n// eslint-disable-next-line es/no-object-assign -- safe\nvar $assign = Object.assign;\n// eslint-disable-next-line es/no-object-defineproperty -- required for testing\nvar defineProperty = Object.defineProperty;\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\nmodule.exports = !$assign || fails(function () {\n // should have correct order of operations (Edge bug)\n if (DESCRIPTORS && $assign({ b: 1 }, $assign(defineProperty({}, 'a', {\n enumerable: true,\n get: function () {\n defineProperty(this, 'b', {\n value: 3,\n enumerable: false\n });\n }\n }), { b: 2 })).b !== 1) return true;\n // should work with symbols and should have deterministic property order (V8 bug)\n var A = {};\n var B = {};\n // eslint-disable-next-line es/no-symbol -- safe\n var symbol = Symbol();\n var alphabet = 'abcdefghijklmnopqrst';\n A[symbol] = 7;\n alphabet.split('').forEach(function (chr) { B[chr] = chr; });\n return $assign({}, A)[symbol] != 7 || objectKeys($assign({}, B)).join('') != alphabet;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars -- required for `.length`\n var T = toObject(target);\n var argumentsLength = arguments.length;\n var index = 1;\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n var propertyIsEnumerable = propertyIsEnumerableModule.f;\n while (argumentsLength > index) {\n var S = IndexedObject(arguments[index++]);\n var keys = getOwnPropertySymbols ? objectKeys(S).concat(getOwnPropertySymbols(S)) : objectKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || propertyIsEnumerable.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n","var arraySpeciesConstructor = require('../internals/array-species-constructor');\n\n// `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray, length) {\n return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length);\n};\n","var NATIVE_WEAK_MAP = require('../internals/native-weak-map');\nvar global = require('../internals/global');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar objectHas = require('../internals/has');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n var store = shared.state || (shared.state = new WeakMap());\n var wmget = store.get;\n var wmhas = store.has;\n var wmset = store.set;\n set = function (it, metadata) {\n if (wmhas.call(store, it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n wmset.call(store, it, metadata);\n return metadata;\n };\n get = function (it) {\n return wmget.call(store, it) || {};\n };\n has = function (it) {\n return wmhas.call(store, it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n if (objectHas(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return objectHas(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return objectHas(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n","var global = require('../internals/global');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar has = require('../internals/has');\nvar setGlobal = require('../internals/set-global');\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar getInternalState = InternalStateModule.get;\nvar enforceInternalState = InternalStateModule.enforce;\nvar TEMPLATE = String(String).split('String');\n\n(module.exports = function (O, key, value, options) {\n var unsafe = options ? !!options.unsafe : false;\n var simple = options ? !!options.enumerable : false;\n var noTargetGet = options ? !!options.noTargetGet : false;\n var state;\n if (typeof value == 'function') {\n if (typeof key == 'string' && !has(value, 'name')) {\n createNonEnumerableProperty(value, 'name', key);\n }\n state = enforceInternalState(value);\n if (!state.source) {\n state.source = TEMPLATE.join(typeof key == 'string' ? key : '');\n }\n }\n if (O === global) {\n if (simple) O[key] = value;\n else setGlobal(key, value);\n return;\n } else if (!unsafe) {\n delete O[key];\n } else if (!noTargetGet && O[key]) {\n simple = true;\n }\n if (simple) O[key] = value;\n else createNonEnumerableProperty(O, key, value);\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, 'toString', function toString() {\n return typeof this == 'function' && getInternalState(this).source || inspectSource(this);\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"), require(\"./searchcursor\"), require(\"../scroll/annotatescrollbar\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\", \"./searchcursor\", \"../scroll/annotatescrollbar\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n \"use strict\";\n\n CodeMirror.defineExtension(\"showMatchesOnScrollbar\", function(query, caseFold, options) {\n if (typeof options == \"string\") options = {className: options};\n if (!options) options = {};\n return new SearchAnnotation(this, query, caseFold, options);\n });\n\n function SearchAnnotation(cm, query, caseFold, options) {\n this.cm = cm;\n this.options = options;\n var annotateOptions = {listenForChanges: false};\n for (var prop in options) annotateOptions[prop] = options[prop];\n if (!annotateOptions.className) annotateOptions.className = \"CodeMirror-search-match\";\n this.annotation = cm.annotateScrollbar(annotateOptions);\n this.query = query;\n this.caseFold = caseFold;\n this.gap = {from: cm.firstLine(), to: cm.lastLine() + 1};\n this.matches = [];\n this.update = null;\n\n this.findMatches();\n this.annotation.update(this.matches);\n\n var self = this;\n cm.on(\"change\", this.changeHandler = function(_cm, change) { self.onChange(change); });\n }\n\n var MAX_MATCHES = 1000;\n\n SearchAnnotation.prototype.findMatches = function() {\n if (!this.gap) return;\n for (var i = 0; i < this.matches.length; i++) {\n var match = this.matches[i];\n if (match.from.line >= this.gap.to) break;\n if (match.to.line >= this.gap.from) this.matches.splice(i--, 1);\n }\n var cursor = this.cm.getSearchCursor(this.query, CodeMirror.Pos(this.gap.from, 0), {caseFold: this.caseFold, multiline: this.options.multiline});\n var maxMatches = this.options && this.options.maxMatches || MAX_MATCHES;\n while (cursor.findNext()) {\n var match = {from: cursor.from(), to: cursor.to()};\n if (match.from.line >= this.gap.to) break;\n this.matches.splice(i++, 0, match);\n if (this.matches.length > maxMatches) break;\n }\n this.gap = null;\n };\n\n function offsetLine(line, changeStart, sizeChange) {\n if (line <= changeStart) return line;\n return Math.max(changeStart, line + sizeChange);\n }\n\n SearchAnnotation.prototype.onChange = function(change) {\n var startLine = change.from.line;\n var endLine = CodeMirror.changeEnd(change).line;\n var sizeChange = endLine - change.to.line;\n if (this.gap) {\n this.gap.from = Math.min(offsetLine(this.gap.from, startLine, sizeChange), change.from.line);\n this.gap.to = Math.max(offsetLine(this.gap.to, startLine, sizeChange), change.from.line);\n } else {\n this.gap = {from: change.from.line, to: endLine + 1};\n }\n\n if (sizeChange) for (var i = 0; i < this.matches.length; i++) {\n var match = this.matches[i];\n var newFrom = offsetLine(match.from.line, startLine, sizeChange);\n if (newFrom != match.from.line) match.from = CodeMirror.Pos(newFrom, match.from.ch);\n var newTo = offsetLine(match.to.line, startLine, sizeChange);\n if (newTo != match.to.line) match.to = CodeMirror.Pos(newTo, match.to.ch);\n }\n clearTimeout(this.update);\n var self = this;\n this.update = setTimeout(function() { self.updateAfterChange(); }, 250);\n };\n\n SearchAnnotation.prototype.updateAfterChange = function() {\n this.findMatches();\n this.annotation.update(this.matches);\n };\n\n SearchAnnotation.prototype.clear = function() {\n this.cm.off(\"change\", this.changeHandler);\n this.annotation.clear();\n };\n});\n","// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n","var path = require('../internals/path');\nvar has = require('../internals/has');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineProperty = require('../internals/object-define-property').f;\n\nmodule.exports = function (NAME) {\n var Symbol = path.Symbol || (path.Symbol = {});\n if (!has(Symbol, NAME)) defineProperty(Symbol, NAME, {\n value: wrappedWellKnownSymbolModule.f(NAME)\n });\n};\n","// IE8- don't enum bug keys\nmodule.exports = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n","import { extend, isArray, isMap, isIntegerKey, isSymbol, hasOwn, isObject, hasChanged, makeMap, capitalize, toRawType, def, isFunction, NOOP } from '@vue/shared';\n\nfunction warn(msg, ...args) {\r\n console.warn(`[Vue warn] ${msg}`, ...args);\r\n}\n\nlet activeEffectScope;\r\nconst effectScopeStack = [];\r\nclass EffectScope {\r\n constructor(detached = false) {\r\n this.active = true;\r\n this.effects = [];\r\n this.cleanups = [];\r\n if (!detached && activeEffectScope) {\r\n this.parent = activeEffectScope;\r\n this.index =\r\n (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(this) - 1;\r\n }\r\n }\r\n run(fn) {\r\n if (this.active) {\r\n try {\r\n this.on();\r\n return fn();\r\n }\r\n finally {\r\n this.off();\r\n }\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n warn(`cannot run an inactive effect scope.`);\r\n }\r\n }\r\n on() {\r\n if (this.active) {\r\n effectScopeStack.push(this);\r\n activeEffectScope = this;\r\n }\r\n }\r\n off() {\r\n if (this.active) {\r\n effectScopeStack.pop();\r\n activeEffectScope = effectScopeStack[effectScopeStack.length - 1];\r\n }\r\n }\r\n stop(fromParent) {\r\n if (this.active) {\r\n this.effects.forEach(e => e.stop());\r\n this.cleanups.forEach(cleanup => cleanup());\r\n if (this.scopes) {\r\n this.scopes.forEach(e => e.stop(true));\r\n }\r\n // nested scope, dereference from parent to avoid memory leaks\r\n if (this.parent && !fromParent) {\r\n // optimized O(1) removal\r\n const last = this.parent.scopes.pop();\r\n if (last && last !== this) {\r\n this.parent.scopes[this.index] = last;\r\n last.index = this.index;\r\n }\r\n }\r\n this.active = false;\r\n }\r\n }\r\n}\r\nfunction effectScope(detached) {\r\n return new EffectScope(detached);\r\n}\r\nfunction recordEffectScope(effect, scope) {\r\n scope = scope || activeEffectScope;\r\n if (scope && scope.active) {\r\n scope.effects.push(effect);\r\n }\r\n}\r\nfunction getCurrentScope() {\r\n return activeEffectScope;\r\n}\r\nfunction onScopeDispose(fn) {\r\n if (activeEffectScope) {\r\n activeEffectScope.cleanups.push(fn);\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n warn(`onScopeDispose() is called when there is no active effect scope` +\r\n ` to be associated with.`);\r\n }\r\n}\n\nconst createDep = (effects) => {\r\n const dep = new Set(effects);\r\n dep.w = 0;\r\n dep.n = 0;\r\n return dep;\r\n};\r\nconst wasTracked = (dep) => (dep.w & trackOpBit) > 0;\r\nconst newTracked = (dep) => (dep.n & trackOpBit) > 0;\r\nconst initDepMarkers = ({ deps }) => {\r\n if (deps.length) {\r\n for (let i = 0; i < deps.length; i++) {\r\n deps[i].w |= trackOpBit; // set was tracked\r\n }\r\n }\r\n};\r\nconst finalizeDepMarkers = (effect) => {\r\n const { deps } = effect;\r\n if (deps.length) {\r\n let ptr = 0;\r\n for (let i = 0; i < deps.length; i++) {\r\n const dep = deps[i];\r\n if (wasTracked(dep) && !newTracked(dep)) {\r\n dep.delete(effect);\r\n }\r\n else {\r\n deps[ptr++] = dep;\r\n }\r\n // clear bits\r\n dep.w &= ~trackOpBit;\r\n dep.n &= ~trackOpBit;\r\n }\r\n deps.length = ptr;\r\n }\r\n};\n\nconst targetMap = new WeakMap();\r\n// The number of effects currently being tracked recursively.\r\nlet effectTrackDepth = 0;\r\nlet trackOpBit = 1;\r\n/**\r\n * The bitwise track markers support at most 30 levels op recursion.\r\n * This value is chosen to enable modern JS engines to use a SMI on all platforms.\r\n * When recursion depth is greater, fall back to using a full cleanup.\r\n */\r\nconst maxMarkerBits = 30;\r\nconst effectStack = [];\r\nlet activeEffect;\r\nconst ITERATE_KEY = Symbol((process.env.NODE_ENV !== 'production') ? 'iterate' : '');\r\nconst MAP_KEY_ITERATE_KEY = Symbol((process.env.NODE_ENV !== 'production') ? 'Map key iterate' : '');\r\nclass ReactiveEffect {\r\n constructor(fn, scheduler = null, scope) {\r\n this.fn = fn;\r\n this.scheduler = scheduler;\r\n this.active = true;\r\n this.deps = [];\r\n recordEffectScope(this, scope);\r\n }\r\n run() {\r\n if (!this.active) {\r\n return this.fn();\r\n }\r\n if (!effectStack.includes(this)) {\r\n try {\r\n effectStack.push((activeEffect = this));\r\n enableTracking();\r\n trackOpBit = 1 << ++effectTrackDepth;\r\n if (effectTrackDepth <= maxMarkerBits) {\r\n initDepMarkers(this);\r\n }\r\n else {\r\n cleanupEffect(this);\r\n }\r\n return this.fn();\r\n }\r\n finally {\r\n if (effectTrackDepth <= maxMarkerBits) {\r\n finalizeDepMarkers(this);\r\n }\r\n trackOpBit = 1 << --effectTrackDepth;\r\n resetTracking();\r\n effectStack.pop();\r\n const n = effectStack.length;\r\n activeEffect = n > 0 ? effectStack[n - 1] : undefined;\r\n }\r\n }\r\n }\r\n stop() {\r\n if (this.active) {\r\n cleanupEffect(this);\r\n if (this.onStop) {\r\n this.onStop();\r\n }\r\n this.active = false;\r\n }\r\n }\r\n}\r\nfunction cleanupEffect(effect) {\r\n const { deps } = effect;\r\n if (deps.length) {\r\n for (let i = 0; i < deps.length; i++) {\r\n deps[i].delete(effect);\r\n }\r\n deps.length = 0;\r\n }\r\n}\r\nfunction effect(fn, options) {\r\n if (fn.effect) {\r\n fn = fn.effect.fn;\r\n }\r\n const _effect = new ReactiveEffect(fn);\r\n if (options) {\r\n extend(_effect, options);\r\n if (options.scope)\r\n recordEffectScope(_effect, options.scope);\r\n }\r\n if (!options || !options.lazy) {\r\n _effect.run();\r\n }\r\n const runner = _effect.run.bind(_effect);\r\n runner.effect = _effect;\r\n return runner;\r\n}\r\nfunction stop(runner) {\r\n runner.effect.stop();\r\n}\r\nlet shouldTrack = true;\r\nconst trackStack = [];\r\nfunction pauseTracking() {\r\n trackStack.push(shouldTrack);\r\n shouldTrack = false;\r\n}\r\nfunction enableTracking() {\r\n trackStack.push(shouldTrack);\r\n shouldTrack = true;\r\n}\r\nfunction resetTracking() {\r\n const last = trackStack.pop();\r\n shouldTrack = last === undefined ? true : last;\r\n}\r\nfunction track(target, type, key) {\r\n if (!isTracking()) {\r\n return;\r\n }\r\n let depsMap = targetMap.get(target);\r\n if (!depsMap) {\r\n targetMap.set(target, (depsMap = new Map()));\r\n }\r\n let dep = depsMap.get(key);\r\n if (!dep) {\r\n depsMap.set(key, (dep = createDep()));\r\n }\r\n const eventInfo = (process.env.NODE_ENV !== 'production')\r\n ? { effect: activeEffect, target, type, key }\r\n : undefined;\r\n trackEffects(dep, eventInfo);\r\n}\r\nfunction isTracking() {\r\n return shouldTrack && activeEffect !== undefined;\r\n}\r\nfunction trackEffects(dep, debuggerEventExtraInfo) {\r\n let shouldTrack = false;\r\n if (effectTrackDepth <= maxMarkerBits) {\r\n if (!newTracked(dep)) {\r\n dep.n |= trackOpBit; // set newly tracked\r\n shouldTrack = !wasTracked(dep);\r\n }\r\n }\r\n else {\r\n // Full cleanup mode.\r\n shouldTrack = !dep.has(activeEffect);\r\n }\r\n if (shouldTrack) {\r\n dep.add(activeEffect);\r\n activeEffect.deps.push(dep);\r\n if ((process.env.NODE_ENV !== 'production') && activeEffect.onTrack) {\r\n activeEffect.onTrack(Object.assign({\r\n effect: activeEffect\r\n }, debuggerEventExtraInfo));\r\n }\r\n }\r\n}\r\nfunction trigger(target, type, key, newValue, oldValue, oldTarget) {\r\n const depsMap = targetMap.get(target);\r\n if (!depsMap) {\r\n // never been tracked\r\n return;\r\n }\r\n let deps = [];\r\n if (type === \"clear\" /* CLEAR */) {\r\n // collection being cleared\r\n // trigger all effects for target\r\n deps = [...depsMap.values()];\r\n }\r\n else if (key === 'length' && isArray(target)) {\r\n depsMap.forEach((dep, key) => {\r\n if (key === 'length' || key >= newValue) {\r\n deps.push(dep);\r\n }\r\n });\r\n }\r\n else {\r\n // schedule runs for SET | ADD | DELETE\r\n if (key !== void 0) {\r\n deps.push(depsMap.get(key));\r\n }\r\n // also run for iteration key on ADD | DELETE | Map.SET\r\n switch (type) {\r\n case \"add\" /* ADD */:\r\n if (!isArray(target)) {\r\n deps.push(depsMap.get(ITERATE_KEY));\r\n if (isMap(target)) {\r\n deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));\r\n }\r\n }\r\n else if (isIntegerKey(key)) {\r\n // new index added to array -> length changes\r\n deps.push(depsMap.get('length'));\r\n }\r\n break;\r\n case \"delete\" /* DELETE */:\r\n if (!isArray(target)) {\r\n deps.push(depsMap.get(ITERATE_KEY));\r\n if (isMap(target)) {\r\n deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));\r\n }\r\n }\r\n break;\r\n case \"set\" /* SET */:\r\n if (isMap(target)) {\r\n deps.push(depsMap.get(ITERATE_KEY));\r\n }\r\n break;\r\n }\r\n }\r\n const eventInfo = (process.env.NODE_ENV !== 'production')\r\n ? { target, type, key, newValue, oldValue, oldTarget }\r\n : undefined;\r\n if (deps.length === 1) {\r\n if (deps[0]) {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n triggerEffects(deps[0], eventInfo);\r\n }\r\n else {\r\n triggerEffects(deps[0]);\r\n }\r\n }\r\n }\r\n else {\r\n const effects = [];\r\n for (const dep of deps) {\r\n if (dep) {\r\n effects.push(...dep);\r\n }\r\n }\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n triggerEffects(createDep(effects), eventInfo);\r\n }\r\n else {\r\n triggerEffects(createDep(effects));\r\n }\r\n }\r\n}\r\nfunction triggerEffects(dep, debuggerEventExtraInfo) {\r\n // spread into array for stabilization\r\n for (const effect of isArray(dep) ? dep : [...dep]) {\r\n if (effect !== activeEffect || effect.allowRecurse) {\r\n if ((process.env.NODE_ENV !== 'production') && effect.onTrigger) {\r\n effect.onTrigger(extend({ effect }, debuggerEventExtraInfo));\r\n }\r\n if (effect.scheduler) {\r\n effect.scheduler();\r\n }\r\n else {\r\n effect.run();\r\n }\r\n }\r\n }\r\n}\n\nconst isNonTrackableKeys = /*#__PURE__*/ makeMap(`__proto__,__v_isRef,__isVue`);\r\nconst builtInSymbols = new Set(Object.getOwnPropertyNames(Symbol)\r\n .map(key => Symbol[key])\r\n .filter(isSymbol));\r\nconst get = /*#__PURE__*/ createGetter();\r\nconst shallowGet = /*#__PURE__*/ createGetter(false, true);\r\nconst readonlyGet = /*#__PURE__*/ createGetter(true);\r\nconst shallowReadonlyGet = /*#__PURE__*/ createGetter(true, true);\r\nconst arrayInstrumentations = /*#__PURE__*/ createArrayInstrumentations();\r\nfunction createArrayInstrumentations() {\r\n const instrumentations = {};\r\n ['includes', 'indexOf', 'lastIndexOf'].forEach(key => {\r\n instrumentations[key] = function (...args) {\r\n const arr = toRaw(this);\r\n for (let i = 0, l = this.length; i < l; i++) {\r\n track(arr, \"get\" /* GET */, i + '');\r\n }\r\n // we run the method using the original args first (which may be reactive)\r\n const res = arr[key](...args);\r\n if (res === -1 || res === false) {\r\n // if that didn't work, run it again using raw values.\r\n return arr[key](...args.map(toRaw));\r\n }\r\n else {\r\n return res;\r\n }\r\n };\r\n });\r\n ['push', 'pop', 'shift', 'unshift', 'splice'].forEach(key => {\r\n instrumentations[key] = function (...args) {\r\n pauseTracking();\r\n const res = toRaw(this)[key].apply(this, args);\r\n resetTracking();\r\n return res;\r\n };\r\n });\r\n return instrumentations;\r\n}\r\nfunction createGetter(isReadonly = false, shallow = false) {\r\n return function get(target, key, receiver) {\r\n if (key === \"__v_isReactive\" /* IS_REACTIVE */) {\r\n return !isReadonly;\r\n }\r\n else if (key === \"__v_isReadonly\" /* IS_READONLY */) {\r\n return isReadonly;\r\n }\r\n else if (key === \"__v_raw\" /* RAW */ &&\r\n receiver ===\r\n (isReadonly\r\n ? shallow\r\n ? shallowReadonlyMap\r\n : readonlyMap\r\n : shallow\r\n ? shallowReactiveMap\r\n : reactiveMap).get(target)) {\r\n return target;\r\n }\r\n const targetIsArray = isArray(target);\r\n if (!isReadonly && targetIsArray && hasOwn(arrayInstrumentations, key)) {\r\n return Reflect.get(arrayInstrumentations, key, receiver);\r\n }\r\n const res = Reflect.get(target, key, receiver);\r\n if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) {\r\n return res;\r\n }\r\n if (!isReadonly) {\r\n track(target, \"get\" /* GET */, key);\r\n }\r\n if (shallow) {\r\n return res;\r\n }\r\n if (isRef(res)) {\r\n // ref unwrapping - does not apply for Array + integer key.\r\n const shouldUnwrap = !targetIsArray || !isIntegerKey(key);\r\n return shouldUnwrap ? res.value : res;\r\n }\r\n if (isObject(res)) {\r\n // Convert returned value into a proxy as well. we do the isObject check\r\n // here to avoid invalid value warning. Also need to lazy access readonly\r\n // and reactive here to avoid circular dependency.\r\n return isReadonly ? readonly(res) : reactive(res);\r\n }\r\n return res;\r\n };\r\n}\r\nconst set = /*#__PURE__*/ createSetter();\r\nconst shallowSet = /*#__PURE__*/ createSetter(true);\r\nfunction createSetter(shallow = false) {\r\n return function set(target, key, value, receiver) {\r\n let oldValue = target[key];\r\n if (!shallow) {\r\n value = toRaw(value);\r\n oldValue = toRaw(oldValue);\r\n if (!isArray(target) && isRef(oldValue) && !isRef(value)) {\r\n oldValue.value = value;\r\n return true;\r\n }\r\n }\r\n const hadKey = isArray(target) && isIntegerKey(key)\r\n ? Number(key) < target.length\r\n : hasOwn(target, key);\r\n const result = Reflect.set(target, key, value, receiver);\r\n // don't trigger if target is something up in the prototype chain of original\r\n if (target === toRaw(receiver)) {\r\n if (!hadKey) {\r\n trigger(target, \"add\" /* ADD */, key, value);\r\n }\r\n else if (hasChanged(value, oldValue)) {\r\n trigger(target, \"set\" /* SET */, key, value, oldValue);\r\n }\r\n }\r\n return result;\r\n };\r\n}\r\nfunction deleteProperty(target, key) {\r\n const hadKey = hasOwn(target, key);\r\n const oldValue = target[key];\r\n const result = Reflect.deleteProperty(target, key);\r\n if (result && hadKey) {\r\n trigger(target, \"delete\" /* DELETE */, key, undefined, oldValue);\r\n }\r\n return result;\r\n}\r\nfunction has(target, key) {\r\n const result = Reflect.has(target, key);\r\n if (!isSymbol(key) || !builtInSymbols.has(key)) {\r\n track(target, \"has\" /* HAS */, key);\r\n }\r\n return result;\r\n}\r\nfunction ownKeys(target) {\r\n track(target, \"iterate\" /* ITERATE */, isArray(target) ? 'length' : ITERATE_KEY);\r\n return Reflect.ownKeys(target);\r\n}\r\nconst mutableHandlers = {\r\n get,\r\n set,\r\n deleteProperty,\r\n has,\r\n ownKeys\r\n};\r\nconst readonlyHandlers = {\r\n get: readonlyGet,\r\n set(target, key) {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n console.warn(`Set operation on key \"${String(key)}\" failed: target is readonly.`, target);\r\n }\r\n return true;\r\n },\r\n deleteProperty(target, key) {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n console.warn(`Delete operation on key \"${String(key)}\" failed: target is readonly.`, target);\r\n }\r\n return true;\r\n }\r\n};\r\nconst shallowReactiveHandlers = /*#__PURE__*/ extend({}, mutableHandlers, {\r\n get: shallowGet,\r\n set: shallowSet\r\n});\r\n// Props handlers are special in the sense that it should not unwrap top-level\r\n// refs (in order to allow refs to be explicitly passed down), but should\r\n// retain the reactivity of the normal readonly object.\r\nconst shallowReadonlyHandlers = /*#__PURE__*/ extend({}, readonlyHandlers, {\r\n get: shallowReadonlyGet\r\n});\n\nconst toReactive = (value) => isObject(value) ? reactive(value) : value;\r\nconst toReadonly = (value) => isObject(value) ? readonly(value) : value;\r\nconst toShallow = (value) => value;\r\nconst getProto = (v) => Reflect.getPrototypeOf(v);\r\nfunction get$1(target, key, isReadonly = false, isShallow = false) {\r\n // #1772: readonly(reactive(Map)) should return readonly + reactive version\r\n // of the value\r\n target = target[\"__v_raw\" /* RAW */];\r\n const rawTarget = toRaw(target);\r\n const rawKey = toRaw(key);\r\n if (key !== rawKey) {\r\n !isReadonly && track(rawTarget, \"get\" /* GET */, key);\r\n }\r\n !isReadonly && track(rawTarget, \"get\" /* GET */, rawKey);\r\n const { has } = getProto(rawTarget);\r\n const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\r\n if (has.call(rawTarget, key)) {\r\n return wrap(target.get(key));\r\n }\r\n else if (has.call(rawTarget, rawKey)) {\r\n return wrap(target.get(rawKey));\r\n }\r\n else if (target !== rawTarget) {\r\n // #3602 readonly(reactive(Map))\r\n // ensure that the nested reactive `Map` can do tracking for itself\r\n target.get(key);\r\n }\r\n}\r\nfunction has$1(key, isReadonly = false) {\r\n const target = this[\"__v_raw\" /* RAW */];\r\n const rawTarget = toRaw(target);\r\n const rawKey = toRaw(key);\r\n if (key !== rawKey) {\r\n !isReadonly && track(rawTarget, \"has\" /* HAS */, key);\r\n }\r\n !isReadonly && track(rawTarget, \"has\" /* HAS */, rawKey);\r\n return key === rawKey\r\n ? target.has(key)\r\n : target.has(key) || target.has(rawKey);\r\n}\r\nfunction size(target, isReadonly = false) {\r\n target = target[\"__v_raw\" /* RAW */];\r\n !isReadonly && track(toRaw(target), \"iterate\" /* ITERATE */, ITERATE_KEY);\r\n return Reflect.get(target, 'size', target);\r\n}\r\nfunction add(value) {\r\n value = toRaw(value);\r\n const target = toRaw(this);\r\n const proto = getProto(target);\r\n const hadKey = proto.has.call(target, value);\r\n if (!hadKey) {\r\n target.add(value);\r\n trigger(target, \"add\" /* ADD */, value, value);\r\n }\r\n return this;\r\n}\r\nfunction set$1(key, value) {\r\n value = toRaw(value);\r\n const target = toRaw(this);\r\n const { has, get } = getProto(target);\r\n let hadKey = has.call(target, key);\r\n if (!hadKey) {\r\n key = toRaw(key);\r\n hadKey = has.call(target, key);\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n checkIdentityKeys(target, has, key);\r\n }\r\n const oldValue = get.call(target, key);\r\n target.set(key, value);\r\n if (!hadKey) {\r\n trigger(target, \"add\" /* ADD */, key, value);\r\n }\r\n else if (hasChanged(value, oldValue)) {\r\n trigger(target, \"set\" /* SET */, key, value, oldValue);\r\n }\r\n return this;\r\n}\r\nfunction deleteEntry(key) {\r\n const target = toRaw(this);\r\n const { has, get } = getProto(target);\r\n let hadKey = has.call(target, key);\r\n if (!hadKey) {\r\n key = toRaw(key);\r\n hadKey = has.call(target, key);\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n checkIdentityKeys(target, has, key);\r\n }\r\n const oldValue = get ? get.call(target, key) : undefined;\r\n // forward the operation before queueing reactions\r\n const result = target.delete(key);\r\n if (hadKey) {\r\n trigger(target, \"delete\" /* DELETE */, key, undefined, oldValue);\r\n }\r\n return result;\r\n}\r\nfunction clear() {\r\n const target = toRaw(this);\r\n const hadItems = target.size !== 0;\r\n const oldTarget = (process.env.NODE_ENV !== 'production')\r\n ? isMap(target)\r\n ? new Map(target)\r\n : new Set(target)\r\n : undefined;\r\n // forward the operation before queueing reactions\r\n const result = target.clear();\r\n if (hadItems) {\r\n trigger(target, \"clear\" /* CLEAR */, undefined, undefined, oldTarget);\r\n }\r\n return result;\r\n}\r\nfunction createForEach(isReadonly, isShallow) {\r\n return function forEach(callback, thisArg) {\r\n const observed = this;\r\n const target = observed[\"__v_raw\" /* RAW */];\r\n const rawTarget = toRaw(target);\r\n const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\r\n !isReadonly && track(rawTarget, \"iterate\" /* ITERATE */, ITERATE_KEY);\r\n return target.forEach((value, key) => {\r\n // important: make sure the callback is\r\n // 1. invoked with the reactive map as `this` and 3rd arg\r\n // 2. the value received should be a corresponding reactive/readonly.\r\n return callback.call(thisArg, wrap(value), wrap(key), observed);\r\n });\r\n };\r\n}\r\nfunction createIterableMethod(method, isReadonly, isShallow) {\r\n return function (...args) {\r\n const target = this[\"__v_raw\" /* RAW */];\r\n const rawTarget = toRaw(target);\r\n const targetIsMap = isMap(rawTarget);\r\n const isPair = method === 'entries' || (method === Symbol.iterator && targetIsMap);\r\n const isKeyOnly = method === 'keys' && targetIsMap;\r\n const innerIterator = target[method](...args);\r\n const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\r\n !isReadonly &&\r\n track(rawTarget, \"iterate\" /* ITERATE */, isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY);\r\n // return a wrapped iterator which returns observed versions of the\r\n // values emitted from the real iterator\r\n return {\r\n // iterator protocol\r\n next() {\r\n const { value, done } = innerIterator.next();\r\n return done\r\n ? { value, done }\r\n : {\r\n value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value),\r\n done\r\n };\r\n },\r\n // iterable protocol\r\n [Symbol.iterator]() {\r\n return this;\r\n }\r\n };\r\n };\r\n}\r\nfunction createReadonlyMethod(type) {\r\n return function (...args) {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n const key = args[0] ? `on key \"${args[0]}\" ` : ``;\r\n console.warn(`${capitalize(type)} operation ${key}failed: target is readonly.`, toRaw(this));\r\n }\r\n return type === \"delete\" /* DELETE */ ? false : this;\r\n };\r\n}\r\nfunction createInstrumentations() {\r\n const mutableInstrumentations = {\r\n get(key) {\r\n return get$1(this, key);\r\n },\r\n get size() {\r\n return size(this);\r\n },\r\n has: has$1,\r\n add,\r\n set: set$1,\r\n delete: deleteEntry,\r\n clear,\r\n forEach: createForEach(false, false)\r\n };\r\n const shallowInstrumentations = {\r\n get(key) {\r\n return get$1(this, key, false, true);\r\n },\r\n get size() {\r\n return size(this);\r\n },\r\n has: has$1,\r\n add,\r\n set: set$1,\r\n delete: deleteEntry,\r\n clear,\r\n forEach: createForEach(false, true)\r\n };\r\n const readonlyInstrumentations = {\r\n get(key) {\r\n return get$1(this, key, true);\r\n },\r\n get size() {\r\n return size(this, true);\r\n },\r\n has(key) {\r\n return has$1.call(this, key, true);\r\n },\r\n add: createReadonlyMethod(\"add\" /* ADD */),\r\n set: createReadonlyMethod(\"set\" /* SET */),\r\n delete: createReadonlyMethod(\"delete\" /* DELETE */),\r\n clear: createReadonlyMethod(\"clear\" /* CLEAR */),\r\n forEach: createForEach(true, false)\r\n };\r\n const shallowReadonlyInstrumentations = {\r\n get(key) {\r\n return get$1(this, key, true, true);\r\n },\r\n get size() {\r\n return size(this, true);\r\n },\r\n has(key) {\r\n return has$1.call(this, key, true);\r\n },\r\n add: createReadonlyMethod(\"add\" /* ADD */),\r\n set: createReadonlyMethod(\"set\" /* SET */),\r\n delete: createReadonlyMethod(\"delete\" /* DELETE */),\r\n clear: createReadonlyMethod(\"clear\" /* CLEAR */),\r\n forEach: createForEach(true, true)\r\n };\r\n const iteratorMethods = ['keys', 'values', 'entries', Symbol.iterator];\r\n iteratorMethods.forEach(method => {\r\n mutableInstrumentations[method] = createIterableMethod(method, false, false);\r\n readonlyInstrumentations[method] = createIterableMethod(method, true, false);\r\n shallowInstrumentations[method] = createIterableMethod(method, false, true);\r\n shallowReadonlyInstrumentations[method] = createIterableMethod(method, true, true);\r\n });\r\n return [\r\n mutableInstrumentations,\r\n readonlyInstrumentations,\r\n shallowInstrumentations,\r\n shallowReadonlyInstrumentations\r\n ];\r\n}\r\nconst [mutableInstrumentations, readonlyInstrumentations, shallowInstrumentations, shallowReadonlyInstrumentations] = /* #__PURE__*/ createInstrumentations();\r\nfunction createInstrumentationGetter(isReadonly, shallow) {\r\n const instrumentations = shallow\r\n ? isReadonly\r\n ? shallowReadonlyInstrumentations\r\n : shallowInstrumentations\r\n : isReadonly\r\n ? readonlyInstrumentations\r\n : mutableInstrumentations;\r\n return (target, key, receiver) => {\r\n if (key === \"__v_isReactive\" /* IS_REACTIVE */) {\r\n return !isReadonly;\r\n }\r\n else if (key === \"__v_isReadonly\" /* IS_READONLY */) {\r\n return isReadonly;\r\n }\r\n else if (key === \"__v_raw\" /* RAW */) {\r\n return target;\r\n }\r\n return Reflect.get(hasOwn(instrumentations, key) && key in target\r\n ? instrumentations\r\n : target, key, receiver);\r\n };\r\n}\r\nconst mutableCollectionHandlers = {\r\n get: /*#__PURE__*/ createInstrumentationGetter(false, false)\r\n};\r\nconst shallowCollectionHandlers = {\r\n get: /*#__PURE__*/ createInstrumentationGetter(false, true)\r\n};\r\nconst readonlyCollectionHandlers = {\r\n get: /*#__PURE__*/ createInstrumentationGetter(true, false)\r\n};\r\nconst shallowReadonlyCollectionHandlers = {\r\n get: /*#__PURE__*/ createInstrumentationGetter(true, true)\r\n};\r\nfunction checkIdentityKeys(target, has, key) {\r\n const rawKey = toRaw(key);\r\n if (rawKey !== key && has.call(target, rawKey)) {\r\n const type = toRawType(target);\r\n console.warn(`Reactive ${type} contains both the raw and reactive ` +\r\n `versions of the same object${type === `Map` ? ` as keys` : ``}, ` +\r\n `which can lead to inconsistencies. ` +\r\n `Avoid differentiating between the raw and reactive versions ` +\r\n `of an object and only use the reactive version if possible.`);\r\n }\r\n}\n\nconst reactiveMap = new WeakMap();\r\nconst shallowReactiveMap = new WeakMap();\r\nconst readonlyMap = new WeakMap();\r\nconst shallowReadonlyMap = new WeakMap();\r\nfunction targetTypeMap(rawType) {\r\n switch (rawType) {\r\n case 'Object':\r\n case 'Array':\r\n return 1 /* COMMON */;\r\n case 'Map':\r\n case 'Set':\r\n case 'WeakMap':\r\n case 'WeakSet':\r\n return 2 /* COLLECTION */;\r\n default:\r\n return 0 /* INVALID */;\r\n }\r\n}\r\nfunction getTargetType(value) {\r\n return value[\"__v_skip\" /* SKIP */] || !Object.isExtensible(value)\r\n ? 0 /* INVALID */\r\n : targetTypeMap(toRawType(value));\r\n}\r\nfunction reactive(target) {\r\n // if trying to observe a readonly proxy, return the readonly version.\r\n if (target && target[\"__v_isReadonly\" /* IS_READONLY */]) {\r\n return target;\r\n }\r\n return createReactiveObject(target, false, mutableHandlers, mutableCollectionHandlers, reactiveMap);\r\n}\r\n/**\r\n * Return a shallowly-reactive copy of the original object, where only the root\r\n * level properties are reactive. It also does not auto-unwrap refs (even at the\r\n * root level).\r\n */\r\nfunction shallowReactive(target) {\r\n return createReactiveObject(target, false, shallowReactiveHandlers, shallowCollectionHandlers, shallowReactiveMap);\r\n}\r\n/**\r\n * Creates a readonly copy of the original object. Note the returned copy is not\r\n * made reactive, but `readonly` can be called on an already reactive object.\r\n */\r\nfunction readonly(target) {\r\n return createReactiveObject(target, true, readonlyHandlers, readonlyCollectionHandlers, readonlyMap);\r\n}\r\n/**\r\n * Returns a reactive-copy of the original object, where only the root level\r\n * properties are readonly, and does NOT unwrap refs nor recursively convert\r\n * returned properties.\r\n * This is used for creating the props proxy object for stateful components.\r\n */\r\nfunction shallowReadonly(target) {\r\n return createReactiveObject(target, true, shallowReadonlyHandlers, shallowReadonlyCollectionHandlers, shallowReadonlyMap);\r\n}\r\nfunction createReactiveObject(target, isReadonly, baseHandlers, collectionHandlers, proxyMap) {\r\n if (!isObject(target)) {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n console.warn(`value cannot be made reactive: ${String(target)}`);\r\n }\r\n return target;\r\n }\r\n // target is already a Proxy, return it.\r\n // exception: calling readonly() on a reactive object\r\n if (target[\"__v_raw\" /* RAW */] &&\r\n !(isReadonly && target[\"__v_isReactive\" /* IS_REACTIVE */])) {\r\n return target;\r\n }\r\n // target already has corresponding Proxy\r\n const existingProxy = proxyMap.get(target);\r\n if (existingProxy) {\r\n return existingProxy;\r\n }\r\n // only a whitelist of value types can be observed.\r\n const targetType = getTargetType(target);\r\n if (targetType === 0 /* INVALID */) {\r\n return target;\r\n }\r\n const proxy = new Proxy(target, targetType === 2 /* COLLECTION */ ? collectionHandlers : baseHandlers);\r\n proxyMap.set(target, proxy);\r\n return proxy;\r\n}\r\nfunction isReactive(value) {\r\n if (isReadonly(value)) {\r\n return isReactive(value[\"__v_raw\" /* RAW */]);\r\n }\r\n return !!(value && value[\"__v_isReactive\" /* IS_REACTIVE */]);\r\n}\r\nfunction isReadonly(value) {\r\n return !!(value && value[\"__v_isReadonly\" /* IS_READONLY */]);\r\n}\r\nfunction isProxy(value) {\r\n return isReactive(value) || isReadonly(value);\r\n}\r\nfunction toRaw(observed) {\r\n const raw = observed && observed[\"__v_raw\" /* RAW */];\r\n return raw ? toRaw(raw) : observed;\r\n}\r\nfunction markRaw(value) {\r\n def(value, \"__v_skip\" /* SKIP */, true);\r\n return value;\r\n}\n\nfunction trackRefValue(ref) {\r\n if (isTracking()) {\r\n ref = toRaw(ref);\r\n if (!ref.dep) {\r\n ref.dep = createDep();\r\n }\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n trackEffects(ref.dep, {\r\n target: ref,\r\n type: \"get\" /* GET */,\r\n key: 'value'\r\n });\r\n }\r\n else {\r\n trackEffects(ref.dep);\r\n }\r\n }\r\n}\r\nfunction triggerRefValue(ref, newVal) {\r\n ref = toRaw(ref);\r\n if (ref.dep) {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n triggerEffects(ref.dep, {\r\n target: ref,\r\n type: \"set\" /* SET */,\r\n key: 'value',\r\n newValue: newVal\r\n });\r\n }\r\n else {\r\n triggerEffects(ref.dep);\r\n }\r\n }\r\n}\r\nconst convert = (val) => isObject(val) ? reactive(val) : val;\r\nfunction isRef(r) {\r\n return Boolean(r && r.__v_isRef === true);\r\n}\r\nfunction ref(value) {\r\n return createRef(value, false);\r\n}\r\nfunction shallowRef(value) {\r\n return createRef(value, true);\r\n}\r\nclass RefImpl {\r\n constructor(value, _shallow) {\r\n this._shallow = _shallow;\r\n this.dep = undefined;\r\n this.__v_isRef = true;\r\n this._rawValue = _shallow ? value : toRaw(value);\r\n this._value = _shallow ? value : convert(value);\r\n }\r\n get value() {\r\n trackRefValue(this);\r\n return this._value;\r\n }\r\n set value(newVal) {\r\n newVal = this._shallow ? newVal : toRaw(newVal);\r\n if (hasChanged(newVal, this._rawValue)) {\r\n this._rawValue = newVal;\r\n this._value = this._shallow ? newVal : convert(newVal);\r\n triggerRefValue(this, newVal);\r\n }\r\n }\r\n}\r\nfunction createRef(rawValue, shallow) {\r\n if (isRef(rawValue)) {\r\n return rawValue;\r\n }\r\n return new RefImpl(rawValue, shallow);\r\n}\r\nfunction triggerRef(ref) {\r\n triggerRefValue(ref, (process.env.NODE_ENV !== 'production') ? ref.value : void 0);\r\n}\r\nfunction unref(ref) {\r\n return isRef(ref) ? ref.value : ref;\r\n}\r\nconst shallowUnwrapHandlers = {\r\n get: (target, key, receiver) => unref(Reflect.get(target, key, receiver)),\r\n set: (target, key, value, receiver) => {\r\n const oldValue = target[key];\r\n if (isRef(oldValue) && !isRef(value)) {\r\n oldValue.value = value;\r\n return true;\r\n }\r\n else {\r\n return Reflect.set(target, key, value, receiver);\r\n }\r\n }\r\n};\r\nfunction proxyRefs(objectWithRefs) {\r\n return isReactive(objectWithRefs)\r\n ? objectWithRefs\r\n : new Proxy(objectWithRefs, shallowUnwrapHandlers);\r\n}\r\nclass CustomRefImpl {\r\n constructor(factory) {\r\n this.dep = undefined;\r\n this.__v_isRef = true;\r\n const { get, set } = factory(() => trackRefValue(this), () => triggerRefValue(this));\r\n this._get = get;\r\n this._set = set;\r\n }\r\n get value() {\r\n return this._get();\r\n }\r\n set value(newVal) {\r\n this._set(newVal);\r\n }\r\n}\r\nfunction customRef(factory) {\r\n return new CustomRefImpl(factory);\r\n}\r\nfunction toRefs(object) {\r\n if ((process.env.NODE_ENV !== 'production') && !isProxy(object)) {\r\n console.warn(`toRefs() expects a reactive object but received a plain one.`);\r\n }\r\n const ret = isArray(object) ? new Array(object.length) : {};\r\n for (const key in object) {\r\n ret[key] = toRef(object, key);\r\n }\r\n return ret;\r\n}\r\nclass ObjectRefImpl {\r\n constructor(_object, _key) {\r\n this._object = _object;\r\n this._key = _key;\r\n this.__v_isRef = true;\r\n }\r\n get value() {\r\n return this._object[this._key];\r\n }\r\n set value(newVal) {\r\n this._object[this._key] = newVal;\r\n }\r\n}\r\nfunction toRef(object, key) {\r\n const val = object[key];\r\n return isRef(val) ? val : new ObjectRefImpl(object, key);\r\n}\n\nclass ComputedRefImpl {\r\n constructor(getter, _setter, isReadonly) {\r\n this._setter = _setter;\r\n this.dep = undefined;\r\n this._dirty = true;\r\n this.__v_isRef = true;\r\n this.effect = new ReactiveEffect(getter, () => {\r\n if (!this._dirty) {\r\n this._dirty = true;\r\n triggerRefValue(this);\r\n }\r\n });\r\n this[\"__v_isReadonly\" /* IS_READONLY */] = isReadonly;\r\n }\r\n get value() {\r\n // the computed ref may get wrapped by other proxies e.g. readonly() #3376\r\n const self = toRaw(this);\r\n trackRefValue(self);\r\n if (self._dirty) {\r\n self._dirty = false;\r\n self._value = self.effect.run();\r\n }\r\n return self._value;\r\n }\r\n set value(newValue) {\r\n this._setter(newValue);\r\n }\r\n}\r\nfunction computed(getterOrOptions, debugOptions) {\r\n let getter;\r\n let setter;\r\n if (isFunction(getterOrOptions)) {\r\n getter = getterOrOptions;\r\n setter = (process.env.NODE_ENV !== 'production')\r\n ? () => {\r\n console.warn('Write operation failed: computed value is readonly');\r\n }\r\n : NOOP;\r\n }\r\n else {\r\n getter = getterOrOptions.get;\r\n setter = getterOrOptions.set;\r\n }\r\n const cRef = new ComputedRefImpl(getter, setter, isFunction(getterOrOptions) || !getterOrOptions.set);\r\n if ((process.env.NODE_ENV !== 'production') && debugOptions) {\r\n cRef.effect.onTrack = debugOptions.onTrack;\r\n cRef.effect.onTrigger = debugOptions.onTrigger;\r\n }\r\n return cRef;\r\n}\n\nvar _a;\r\nconst tick = Promise.resolve();\r\nconst queue = [];\r\nlet queued = false;\r\nconst scheduler = (fn) => {\r\n queue.push(fn);\r\n if (!queued) {\r\n queued = true;\r\n tick.then(flush);\r\n }\r\n};\r\nconst flush = () => {\r\n for (let i = 0; i < queue.length; i++) {\r\n queue[i]();\r\n }\r\n queue.length = 0;\r\n queued = false;\r\n};\r\nclass DeferredComputedRefImpl {\r\n constructor(getter) {\r\n this.dep = undefined;\r\n this._dirty = true;\r\n this.__v_isRef = true;\r\n this[_a] = true;\r\n let compareTarget;\r\n let hasCompareTarget = false;\r\n let scheduled = false;\r\n this.effect = new ReactiveEffect(getter, (computedTrigger) => {\r\n if (this.dep) {\r\n if (computedTrigger) {\r\n compareTarget = this._value;\r\n hasCompareTarget = true;\r\n }\r\n else if (!scheduled) {\r\n const valueToCompare = hasCompareTarget ? compareTarget : this._value;\r\n scheduled = true;\r\n hasCompareTarget = false;\r\n scheduler(() => {\r\n if (this.effect.active && this._get() !== valueToCompare) {\r\n triggerRefValue(this);\r\n }\r\n scheduled = false;\r\n });\r\n }\r\n // chained upstream computeds are notified synchronously to ensure\r\n // value invalidation in case of sync access; normal effects are\r\n // deferred to be triggered in scheduler.\r\n for (const e of this.dep) {\r\n if (e.computed) {\r\n e.scheduler(true /* computedTrigger */);\r\n }\r\n }\r\n }\r\n this._dirty = true;\r\n });\r\n this.effect.computed = true;\r\n }\r\n _get() {\r\n if (this._dirty) {\r\n this._dirty = false;\r\n return (this._value = this.effect.run());\r\n }\r\n return this._value;\r\n }\r\n get value() {\r\n trackRefValue(this);\r\n // the computed ref may get wrapped by other proxies e.g. readonly() #3376\r\n return toRaw(this)._get();\r\n }\r\n}\r\n_a = \"__v_isReadonly\" /* IS_READONLY */;\r\nfunction deferredComputed(getter) {\r\n return new DeferredComputedRefImpl(getter);\r\n}\n\nexport { EffectScope, ITERATE_KEY, ReactiveEffect, computed, customRef, deferredComputed, effect, effectScope, enableTracking, getCurrentScope, isProxy, isReactive, isReadonly, isRef, markRaw, onScopeDispose, pauseTracking, proxyRefs, reactive, readonly, ref, resetTracking, shallowReactive, shallowReadonly, shallowRef, stop, toRaw, toRef, toRefs, track, trigger, triggerRef, unref };\n","import { toRaw, ref, pauseTracking, resetTracking, reactive, computed, isRef, shallowReactive, trigger, ReactiveEffect, isProxy, shallowReadonly, track, EffectScope, markRaw, proxyRefs, isReactive, isReadonly } from '@vue/reactivity';\nexport { EffectScope, ReactiveEffect, computed, customRef, effect, effectScope, getCurrentScope, isProxy, isReactive, isReadonly, isRef, markRaw, onScopeDispose, proxyRefs, reactive, readonly, ref, shallowReactive, shallowReadonly, shallowRef, stop, toRaw, toRef, toRefs, triggerRef, unref } from '@vue/reactivity';\nimport { extend, isFunction as isFunction$1, isArray, hasOwn, EMPTY_OBJ, toHandlerKey, toNumber, hyphenate, camelize, isOn, isModelListener, isObject as isObject$1, remove, isString, invokeArrayFns, isPromise as isPromise$1, NOOP, def, isReservedProp, EMPTY_ARR, capitalize, toRawType, makeMap, NO, getGlobalThis, normalizeClass, normalizeStyle, isGloballyWhitelisted, hasChanged, isSet, isMap, isPlainObject } from '@vue/shared';\nexport { camelize, capitalize, normalizeClass, normalizeProps, normalizeStyle, toDisplayString, toHandlerKey } from '@vue/shared';\n\n/* eslint-disable no-restricted-globals */\r\nlet isHmrUpdating = false;\r\nconst hmrDirtyComponents = new Set();\r\n// Expose the HMR runtime on the global object\r\n// This makes it entirely tree-shakable without polluting the exports and makes\r\n// it easier to be used in toolings like vue-loader\r\n// Note: for a component to be eligible for HMR it also needs the __hmrId option\r\n// to be set so that its instances can be registered / removed.\r\nif ((process.env.NODE_ENV !== 'production')) {\r\n const globalObject = typeof global !== 'undefined'\r\n ? global\r\n : typeof self !== 'undefined'\r\n ? self\r\n : typeof window !== 'undefined'\r\n ? window\r\n : {};\r\n globalObject.__VUE_HMR_RUNTIME__ = {\r\n createRecord: tryWrap(createRecord),\r\n rerender: tryWrap(rerender),\r\n reload: tryWrap(reload)\r\n };\r\n}\r\nconst map = new Map();\r\nfunction registerHMR(instance) {\r\n const id = instance.type.__hmrId;\r\n let record = map.get(id);\r\n if (!record) {\r\n createRecord(id, instance.type);\r\n record = map.get(id);\r\n }\r\n record.instances.add(instance);\r\n}\r\nfunction unregisterHMR(instance) {\r\n map.get(instance.type.__hmrId).instances.delete(instance);\r\n}\r\nfunction createRecord(id, component) {\r\n if (!component) {\r\n warn(`HMR API usage is out of date.\\n` +\r\n `Please upgrade vue-loader/vite/rollup-plugin-vue or other relevant ` +\r\n `dependency that handles Vue SFC compilation.`);\r\n component = {};\r\n }\r\n if (map.has(id)) {\r\n return false;\r\n }\r\n map.set(id, {\r\n component: isClassComponent(component) ? component.__vccOpts : component,\r\n instances: new Set()\r\n });\r\n return true;\r\n}\r\nfunction rerender(id, newRender) {\r\n const record = map.get(id);\r\n if (!record)\r\n return;\r\n if (newRender)\r\n record.component.render = newRender;\r\n // Array.from creates a snapshot which avoids the set being mutated during\r\n // updates\r\n Array.from(record.instances).forEach(instance => {\r\n if (newRender) {\r\n instance.render = newRender;\r\n }\r\n instance.renderCache = [];\r\n // this flag forces child components with slot content to update\r\n isHmrUpdating = true;\r\n instance.update();\r\n isHmrUpdating = false;\r\n });\r\n}\r\nfunction reload(id, newComp) {\r\n const record = map.get(id);\r\n if (!record)\r\n return;\r\n // Array.from creates a snapshot which avoids the set being mutated during\r\n // updates\r\n const { component, instances } = record;\r\n if (!hmrDirtyComponents.has(component)) {\r\n // 1. Update existing comp definition to match new one\r\n newComp = isClassComponent(newComp) ? newComp.__vccOpts : newComp;\r\n extend(component, newComp);\r\n for (const key in component) {\r\n if (key !== '__file' && !(key in newComp)) {\r\n delete component[key];\r\n }\r\n }\r\n // 2. Mark component dirty. This forces the renderer to replace the component\r\n // on patch.\r\n hmrDirtyComponents.add(component);\r\n // 3. Make sure to unmark the component after the reload.\r\n queuePostFlushCb(() => {\r\n hmrDirtyComponents.delete(component);\r\n });\r\n }\r\n Array.from(instances).forEach(instance => {\r\n // invalidate options resolution cache\r\n instance.appContext.optionsCache.delete(instance.type);\r\n if (instance.ceReload) {\r\n // custom element\r\n hmrDirtyComponents.add(component);\r\n instance.ceReload(newComp.styles);\r\n hmrDirtyComponents.delete(component);\r\n }\r\n else if (instance.parent) {\r\n // 4. Force the parent instance to re-render. This will cause all updated\r\n // components to be unmounted and re-mounted. Queue the update so that we\r\n // don't end up forcing the same parent to re-render multiple times.\r\n queueJob(instance.parent.update);\r\n // instance is the inner component of an async custom element\r\n // invoke to reset styles\r\n if (instance.parent.type.__asyncLoader &&\r\n instance.parent.ceReload) {\r\n instance.parent.ceReload(newComp.styles);\r\n }\r\n }\r\n else if (instance.appContext.reload) {\r\n // root instance mounted via createApp() has a reload method\r\n instance.appContext.reload();\r\n }\r\n else if (typeof window !== 'undefined') {\r\n // root instance inside tree created via raw render(). Force reload.\r\n window.location.reload();\r\n }\r\n else {\r\n console.warn('[HMR] Root or manually mounted instance modified. Full reload required.');\r\n }\r\n });\r\n}\r\nfunction tryWrap(fn) {\r\n return (id, arg) => {\r\n try {\r\n return fn(id, arg);\r\n }\r\n catch (e) {\r\n console.error(e);\r\n console.warn(`[HMR] Something went wrong during Vue component hot-reload. ` +\r\n `Full reload required.`);\r\n }\r\n };\r\n}\n\nlet devtools;\r\nfunction setDevtoolsHook(hook) {\r\n devtools = hook;\r\n}\r\nfunction devtoolsInitApp(app, version) {\r\n // TODO queue if devtools is undefined\r\n if (!devtools)\r\n return;\r\n devtools.emit(\"app:init\" /* APP_INIT */, app, version, {\r\n Fragment,\r\n Text,\r\n Comment,\r\n Static\r\n });\r\n}\r\nfunction devtoolsUnmountApp(app) {\r\n if (!devtools)\r\n return;\r\n devtools.emit(\"app:unmount\" /* APP_UNMOUNT */, app);\r\n}\r\nconst devtoolsComponentAdded = /*#__PURE__*/ createDevtoolsComponentHook(\"component:added\" /* COMPONENT_ADDED */);\r\nconst devtoolsComponentUpdated = \r\n/*#__PURE__*/ createDevtoolsComponentHook(\"component:updated\" /* COMPONENT_UPDATED */);\r\nconst devtoolsComponentRemoved = \r\n/*#__PURE__*/ createDevtoolsComponentHook(\"component:removed\" /* COMPONENT_REMOVED */);\r\nfunction createDevtoolsComponentHook(hook) {\r\n return (component) => {\r\n if (!devtools)\r\n return;\r\n devtools.emit(hook, component.appContext.app, component.uid, component.parent ? component.parent.uid : undefined, component);\r\n };\r\n}\r\nconst devtoolsPerfStart = /*#__PURE__*/ createDevtoolsPerformanceHook(\"perf:start\" /* PERFORMANCE_START */);\r\nconst devtoolsPerfEnd = /*#__PURE__*/ createDevtoolsPerformanceHook(\"perf:end\" /* PERFORMANCE_END */);\r\nfunction createDevtoolsPerformanceHook(hook) {\r\n return (component, type, time) => {\r\n if (!devtools)\r\n return;\r\n devtools.emit(hook, component.appContext.app, component.uid, component, type, time);\r\n };\r\n}\r\nfunction devtoolsComponentEmit(component, event, params) {\r\n if (!devtools)\r\n return;\r\n devtools.emit(\"component:emit\" /* COMPONENT_EMIT */, component.appContext.app, component, event, params);\r\n}\n\nconst deprecationData = {\r\n [\"GLOBAL_MOUNT\" /* GLOBAL_MOUNT */]: {\r\n message: `The global app bootstrapping API has changed: vm.$mount() and the \"el\" ` +\r\n `option have been removed. Use createApp(RootComponent).mount() instead.`,\r\n link: `https://v3.vuejs.org/guide/migration/global-api.html#mounting-app-instance`\r\n },\r\n [\"GLOBAL_MOUNT_CONTAINER\" /* GLOBAL_MOUNT_CONTAINER */]: {\r\n message: `Vue detected directives on the mount container. ` +\r\n `In Vue 3, the container is no longer considered part of the template ` +\r\n `and will not be processed/replaced.`,\r\n link: `https://v3.vuejs.org/guide/migration/mount-changes.html`\r\n },\r\n [\"GLOBAL_EXTEND\" /* GLOBAL_EXTEND */]: {\r\n message: `Vue.extend() has been removed in Vue 3. ` +\r\n `Use defineComponent() instead.`,\r\n link: `https://v3.vuejs.org/api/global-api.html#definecomponent`\r\n },\r\n [\"GLOBAL_PROTOTYPE\" /* GLOBAL_PROTOTYPE */]: {\r\n message: `Vue.prototype is no longer available in Vue 3. ` +\r\n `Use app.config.globalProperties instead.`,\r\n link: `https://v3.vuejs.org/guide/migration/global-api.html#vue-prototype-replaced-by-config-globalproperties`\r\n },\r\n [\"GLOBAL_SET\" /* GLOBAL_SET */]: {\r\n message: `Vue.set() has been removed as it is no longer needed in Vue 3. ` +\r\n `Simply use native JavaScript mutations.`\r\n },\r\n [\"GLOBAL_DELETE\" /* GLOBAL_DELETE */]: {\r\n message: `Vue.delete() has been removed as it is no longer needed in Vue 3. ` +\r\n `Simply use native JavaScript mutations.`\r\n },\r\n [\"GLOBAL_OBSERVABLE\" /* GLOBAL_OBSERVABLE */]: {\r\n message: `Vue.observable() has been removed. ` +\r\n `Use \\`import { reactive } from \"vue\"\\` from Composition API instead.`,\r\n link: `https://v3.vuejs.org/api/basic-reactivity.html`\r\n },\r\n [\"GLOBAL_PRIVATE_UTIL\" /* GLOBAL_PRIVATE_UTIL */]: {\r\n message: `Vue.util has been removed. Please refactor to avoid its usage ` +\r\n `since it was an internal API even in Vue 2.`\r\n },\r\n [\"CONFIG_SILENT\" /* CONFIG_SILENT */]: {\r\n message: `config.silent has been removed because it is not good practice to ` +\r\n `intentionally suppress warnings. You can use your browser console's ` +\r\n `filter features to focus on relevant messages.`\r\n },\r\n [\"CONFIG_DEVTOOLS\" /* CONFIG_DEVTOOLS */]: {\r\n message: `config.devtools has been removed. To enable devtools for ` +\r\n `production, configure the __VUE_PROD_DEVTOOLS__ compile-time flag.`,\r\n link: `https://github.com/vuejs/vue-next/tree/master/packages/vue#bundler-build-feature-flags`\r\n },\r\n [\"CONFIG_KEY_CODES\" /* CONFIG_KEY_CODES */]: {\r\n message: `config.keyCodes has been removed. ` +\r\n `In Vue 3, you can directly use the kebab-case key names as v-on modifiers.`,\r\n link: `https://v3.vuejs.org/guide/migration/keycode-modifiers.html`\r\n },\r\n [\"CONFIG_PRODUCTION_TIP\" /* CONFIG_PRODUCTION_TIP */]: {\r\n message: `config.productionTip has been removed.`,\r\n link: `https://v3.vuejs.org/guide/migration/global-api.html#config-productiontip-removed`\r\n },\r\n [\"CONFIG_IGNORED_ELEMENTS\" /* CONFIG_IGNORED_ELEMENTS */]: {\r\n message: () => {\r\n let msg = `config.ignoredElements has been removed.`;\r\n if (isRuntimeOnly()) {\r\n msg += ` Pass the \"isCustomElement\" option to @vue/compiler-dom instead.`;\r\n }\r\n else {\r\n msg += ` Use config.isCustomElement instead.`;\r\n }\r\n return msg;\r\n },\r\n link: `https://v3.vuejs.org/guide/migration/global-api.html#config-ignoredelements-is-now-config-iscustomelement`\r\n },\r\n [\"CONFIG_WHITESPACE\" /* CONFIG_WHITESPACE */]: {\r\n // this warning is only relevant in the full build when using runtime\r\n // compilation, so it's put in the runtime compatConfig list.\r\n message: `Vue 3 compiler's whitespace option will default to \"condense\" instead of ` +\r\n `\"preserve\". To suppress this warning, provide an explicit value for ` +\r\n `\\`config.compilerOptions.whitespace\\`.`\r\n },\r\n [\"CONFIG_OPTION_MERGE_STRATS\" /* CONFIG_OPTION_MERGE_STRATS */]: {\r\n message: `config.optionMergeStrategies no longer exposes internal strategies. ` +\r\n `Use custom merge functions instead.`\r\n },\r\n [\"INSTANCE_SET\" /* INSTANCE_SET */]: {\r\n message: `vm.$set() has been removed as it is no longer needed in Vue 3. ` +\r\n `Simply use native JavaScript mutations.`\r\n },\r\n [\"INSTANCE_DELETE\" /* INSTANCE_DELETE */]: {\r\n message: `vm.$delete() has been removed as it is no longer needed in Vue 3. ` +\r\n `Simply use native JavaScript mutations.`\r\n },\r\n [\"INSTANCE_DESTROY\" /* INSTANCE_DESTROY */]: {\r\n message: `vm.$destroy() has been removed. Use app.unmount() instead.`,\r\n link: `https://v3.vuejs.org/api/application-api.html#unmount`\r\n },\r\n [\"INSTANCE_EVENT_EMITTER\" /* INSTANCE_EVENT_EMITTER */]: {\r\n message: `vm.$on/$once/$off() have been removed. ` +\r\n `Use an external event emitter library instead.`,\r\n link: `https://v3.vuejs.org/guide/migration/events-api.html`\r\n },\r\n [\"INSTANCE_EVENT_HOOKS\" /* INSTANCE_EVENT_HOOKS */]: {\r\n message: event => `\"${event}\" lifecycle events are no longer supported. From templates, ` +\r\n `use the \"vnode\" prefix instead of \"hook:\". For example, @${event} ` +\r\n `should be changed to @vnode-${event.slice(5)}. ` +\r\n `From JavaScript, use Composition API to dynamically register lifecycle ` +\r\n `hooks.`,\r\n link: `https://v3.vuejs.org/guide/migration/vnode-lifecycle-events.html`\r\n },\r\n [\"INSTANCE_CHILDREN\" /* INSTANCE_CHILDREN */]: {\r\n message: `vm.$children has been removed. Consider refactoring your logic ` +\r\n `to avoid relying on direct access to child components.`,\r\n link: `https://v3.vuejs.org/guide/migration/children.html`\r\n },\r\n [\"INSTANCE_LISTENERS\" /* INSTANCE_LISTENERS */]: {\r\n message: `vm.$listeners has been removed. In Vue 3, parent v-on listeners are ` +\r\n `included in vm.$attrs and it is no longer necessary to separately use ` +\r\n `v-on=\"$listeners\" if you are already using v-bind=\"$attrs\". ` +\r\n `(Note: the Vue 3 behavior only applies if this compat config is disabled)`,\r\n link: `https://v3.vuejs.org/guide/migration/listeners-removed.html`\r\n },\r\n [\"INSTANCE_SCOPED_SLOTS\" /* INSTANCE_SCOPED_SLOTS */]: {\r\n message: `vm.$scopedSlots has been removed. Use vm.$slots instead.`,\r\n link: `https://v3.vuejs.org/guide/migration/slots-unification.html`\r\n },\r\n [\"INSTANCE_ATTRS_CLASS_STYLE\" /* INSTANCE_ATTRS_CLASS_STYLE */]: {\r\n message: componentName => `Component <${componentName || 'Anonymous'}> has \\`inheritAttrs: false\\` but is ` +\r\n `relying on class/style fallthrough from parent. In Vue 3, class/style ` +\r\n `are now included in $attrs and will no longer fallthrough when ` +\r\n `inheritAttrs is false. If you are already using v-bind=\"$attrs\" on ` +\r\n `component root it should render the same end result. ` +\r\n `If you are binding $attrs to a non-root element and expecting ` +\r\n `class/style to fallthrough on root, you will need to now manually bind ` +\r\n `them on root via :class=\"$attrs.class\".`,\r\n link: `https://v3.vuejs.org/guide/migration/attrs-includes-class-style.html`\r\n },\r\n [\"OPTIONS_DATA_FN\" /* OPTIONS_DATA_FN */]: {\r\n message: `The \"data\" option can no longer be a plain object. ` +\r\n `Always use a function.`,\r\n link: `https://v3.vuejs.org/guide/migration/data-option.html`\r\n },\r\n [\"OPTIONS_DATA_MERGE\" /* OPTIONS_DATA_MERGE */]: {\r\n message: (key) => `Detected conflicting key \"${key}\" when merging data option values. ` +\r\n `In Vue 3, data keys are merged shallowly and will override one another.`,\r\n link: `https://v3.vuejs.org/guide/migration/data-option.html#mixin-merge-behavior-change`\r\n },\r\n [\"OPTIONS_BEFORE_DESTROY\" /* OPTIONS_BEFORE_DESTROY */]: {\r\n message: `\\`beforeDestroy\\` has been renamed to \\`beforeUnmount\\`.`\r\n },\r\n [\"OPTIONS_DESTROYED\" /* OPTIONS_DESTROYED */]: {\r\n message: `\\`destroyed\\` has been renamed to \\`unmounted\\`.`\r\n },\r\n [\"WATCH_ARRAY\" /* WATCH_ARRAY */]: {\r\n message: `\"watch\" option or vm.$watch on an array value will no longer ` +\r\n `trigger on array mutation unless the \"deep\" option is specified. ` +\r\n `If current usage is intended, you can disable the compat behavior and ` +\r\n `suppress this warning with:` +\r\n `\\n\\n configureCompat({ ${\"WATCH_ARRAY\" /* WATCH_ARRAY */}: false })\\n`,\r\n link: `https://v3.vuejs.org/guide/migration/watch.html`\r\n },\r\n [\"PROPS_DEFAULT_THIS\" /* PROPS_DEFAULT_THIS */]: {\r\n message: (key) => `props default value function no longer has access to \"this\". The compat ` +\r\n `build only offers access to this.$options.` +\r\n `(found in prop \"${key}\")`,\r\n link: `https://v3.vuejs.org/guide/migration/props-default-this.html`\r\n },\r\n [\"CUSTOM_DIR\" /* CUSTOM_DIR */]: {\r\n message: (legacyHook, newHook) => `Custom directive hook \"${legacyHook}\" has been removed. ` +\r\n `Use \"${newHook}\" instead.`,\r\n link: `https://v3.vuejs.org/guide/migration/custom-directives.html`\r\n },\r\n [\"V_FOR_REF\" /* V_FOR_REF */]: {\r\n message: `Ref usage on v-for no longer creates array ref values in Vue 3. ` +\r\n `Consider using function refs or refactor to avoid ref usage altogether.`,\r\n link: `https://v3.vuejs.org/guide/migration/array-refs.html`\r\n },\r\n [\"V_ON_KEYCODE_MODIFIER\" /* V_ON_KEYCODE_MODIFIER */]: {\r\n message: `Using keyCode as v-on modifier is no longer supported. ` +\r\n `Use kebab-case key name modifiers instead.`,\r\n link: `https://v3.vuejs.org/guide/migration/keycode-modifiers.html`\r\n },\r\n [\"ATTR_FALSE_VALUE\" /* ATTR_FALSE_VALUE */]: {\r\n message: (name) => `Attribute \"${name}\" with v-bind value \\`false\\` will render ` +\r\n `${name}=\"false\" instead of removing it in Vue 3. To remove the attribute, ` +\r\n `use \\`null\\` or \\`undefined\\` instead. If the usage is intended, ` +\r\n `you can disable the compat behavior and suppress this warning with:` +\r\n `\\n\\n configureCompat({ ${\"ATTR_FALSE_VALUE\" /* ATTR_FALSE_VALUE */}: false })\\n`,\r\n link: `https://v3.vuejs.org/guide/migration/attribute-coercion.html`\r\n },\r\n [\"ATTR_ENUMERATED_COERCION\" /* ATTR_ENUMERATED_COERCION */]: {\r\n message: (name, value, coerced) => `Enumerated attribute \"${name}\" with v-bind value \\`${value}\\` will ` +\r\n `${value === null ? `be removed` : `render the value as-is`} instead of coercing the value to \"${coerced}\" in Vue 3. ` +\r\n `Always use explicit \"true\" or \"false\" values for enumerated attributes. ` +\r\n `If the usage is intended, ` +\r\n `you can disable the compat behavior and suppress this warning with:` +\r\n `\\n\\n configureCompat({ ${\"ATTR_ENUMERATED_COERCION\" /* ATTR_ENUMERATED_COERCION */}: false })\\n`,\r\n link: `https://v3.vuejs.org/guide/migration/attribute-coercion.html`\r\n },\r\n [\"TRANSITION_CLASSES\" /* TRANSITION_CLASSES */]: {\r\n message: `` // this feature cannot be runtime-detected\r\n },\r\n [\"TRANSITION_GROUP_ROOT\" /* TRANSITION_GROUP_ROOT */]: {\r\n message: ` no longer renders a root element by ` +\r\n `default if no \"tag\" prop is specified. If you do not rely on the span ` +\r\n `for styling, you can disable the compat behavior and suppress this ` +\r\n `warning with:` +\r\n `\\n\\n configureCompat({ ${\"TRANSITION_GROUP_ROOT\" /* TRANSITION_GROUP_ROOT */}: false })\\n`,\r\n link: `https://v3.vuejs.org/guide/migration/transition-group.html`\r\n },\r\n [\"COMPONENT_ASYNC\" /* COMPONENT_ASYNC */]: {\r\n message: (comp) => {\r\n const name = getComponentName(comp);\r\n return (`Async component${name ? ` <${name}>` : `s`} should be explicitly created via \\`defineAsyncComponent()\\` ` +\r\n `in Vue 3. Plain functions will be treated as functional components in ` +\r\n `non-compat build. If you have already migrated all async component ` +\r\n `usage and intend to use plain functions for functional components, ` +\r\n `you can disable the compat behavior and suppress this ` +\r\n `warning with:` +\r\n `\\n\\n configureCompat({ ${\"COMPONENT_ASYNC\" /* COMPONENT_ASYNC */}: false })\\n`);\r\n },\r\n link: `https://v3.vuejs.org/guide/migration/async-components.html`\r\n },\r\n [\"COMPONENT_FUNCTIONAL\" /* COMPONENT_FUNCTIONAL */]: {\r\n message: (comp) => {\r\n const name = getComponentName(comp);\r\n return (`Functional component${name ? ` <${name}>` : `s`} should be defined as a plain function in Vue 3. The \"functional\" ` +\r\n `option has been removed. NOTE: Before migrating to use plain ` +\r\n `functions for functional components, first make sure that all async ` +\r\n `components usage have been migrated and its compat behavior has ` +\r\n `been disabled.`);\r\n },\r\n link: `https://v3.vuejs.org/guide/migration/functional-components.html`\r\n },\r\n [\"COMPONENT_V_MODEL\" /* COMPONENT_V_MODEL */]: {\r\n message: (comp) => {\r\n const configMsg = `opt-in to ` +\r\n `Vue 3 behavior on a per-component basis with \\`compatConfig: { ${\"COMPONENT_V_MODEL\" /* COMPONENT_V_MODEL */}: false }\\`.`;\r\n if (comp.props &&\r\n (isArray(comp.props)\r\n ? comp.props.includes('modelValue')\r\n : hasOwn(comp.props, 'modelValue'))) {\r\n return (`Component delcares \"modelValue\" prop, which is Vue 3 usage, but ` +\r\n `is running under Vue 2 compat v-model behavior. You can ${configMsg}`);\r\n }\r\n return (`v-model usage on component has changed in Vue 3. Component that expects ` +\r\n `to work with v-model should now use the \"modelValue\" prop and emit the ` +\r\n `\"update:modelValue\" event. You can update the usage and then ${configMsg}`);\r\n },\r\n link: `https://v3.vuejs.org/guide/migration/v-model.html`\r\n },\r\n [\"RENDER_FUNCTION\" /* RENDER_FUNCTION */]: {\r\n message: `Vue 3's render function API has changed. ` +\r\n `You can opt-in to the new API with:` +\r\n `\\n\\n configureCompat({ ${\"RENDER_FUNCTION\" /* RENDER_FUNCTION */}: false })\\n` +\r\n `\\n (This can also be done per-component via the \"compatConfig\" option.)`,\r\n link: `https://v3.vuejs.org/guide/migration/render-function-api.html`\r\n },\r\n [\"FILTERS\" /* FILTERS */]: {\r\n message: `filters have been removed in Vue 3. ` +\r\n `The \"|\" symbol will be treated as native JavaScript bitwise OR operator. ` +\r\n `Use method calls or computed properties instead.`,\r\n link: `https://v3.vuejs.org/guide/migration/filters.html`\r\n },\r\n [\"PRIVATE_APIS\" /* PRIVATE_APIS */]: {\r\n message: name => `\"${name}\" is a Vue 2 private API that no longer exists in Vue 3. ` +\r\n `If you are seeing this warning only due to a dependency, you can ` +\r\n `suppress this warning via { PRIVATE_APIS: 'supress-warning' }.`\r\n }\r\n};\r\nconst instanceWarned = Object.create(null);\r\nconst warnCount = Object.create(null);\r\nfunction warnDeprecation(key, instance, ...args) {\r\n if (!(process.env.NODE_ENV !== 'production')) {\r\n return;\r\n }\r\n instance = instance || getCurrentInstance();\r\n // check user config\r\n const config = getCompatConfigForKey(key, instance);\r\n if (config === 'suppress-warning') {\r\n return;\r\n }\r\n const dupKey = key + args.join('');\r\n let compId = instance && formatComponentName(instance, instance.type);\r\n if (compId === 'Anonymous' && instance) {\r\n compId = instance.uid;\r\n }\r\n // skip if the same warning is emitted for the same component type\r\n const componentDupKey = dupKey + compId;\r\n if (componentDupKey in instanceWarned) {\r\n return;\r\n }\r\n instanceWarned[componentDupKey] = true;\r\n // same warning, but different component. skip the long message and just\r\n // log the key and count.\r\n if (dupKey in warnCount) {\r\n warn(`(deprecation ${key}) (${++warnCount[dupKey] + 1})`);\r\n return;\r\n }\r\n warnCount[dupKey] = 0;\r\n const { message, link } = deprecationData[key];\r\n warn(`(deprecation ${key}) ${typeof message === 'function' ? message(...args) : message}${link ? `\\n Details: ${link}` : ``}`);\r\n if (!isCompatEnabled(key, instance, true)) {\r\n console.error(`^ The above deprecation's compat behavior is disabled and will likely ` +\r\n `lead to runtime errors.`);\r\n }\r\n}\r\nconst globalCompatConfig = {\r\n MODE: 2\r\n};\r\nfunction getCompatConfigForKey(key, instance) {\r\n const instanceConfig = instance && instance.type.compatConfig;\r\n if (instanceConfig && key in instanceConfig) {\r\n return instanceConfig[key];\r\n }\r\n return globalCompatConfig[key];\r\n}\r\nfunction isCompatEnabled(key, instance, enableForBuiltIn = false) {\r\n // skip compat for built-in components\r\n if (!enableForBuiltIn && instance && instance.type.__isBuiltIn) {\r\n return false;\r\n }\r\n const rawMode = getCompatConfigForKey('MODE', instance) || 2;\r\n const val = getCompatConfigForKey(key, instance);\r\n const mode = isFunction$1(rawMode)\r\n ? rawMode(instance && instance.type)\r\n : rawMode;\r\n if (mode === 2) {\r\n return val !== false;\r\n }\r\n else {\r\n return val === true || val === 'suppress-warning';\r\n }\r\n}\n\nfunction emit(instance, event, ...rawArgs) {\r\n const props = instance.vnode.props || EMPTY_OBJ;\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n const { emitsOptions, propsOptions: [propsOptions] } = instance;\r\n if (emitsOptions) {\r\n if (!(event in emitsOptions) &&\r\n !(false )) {\r\n if (!propsOptions || !(toHandlerKey(event) in propsOptions)) {\r\n warn(`Component emitted event \"${event}\" but it is neither declared in ` +\r\n `the emits option nor as an \"${toHandlerKey(event)}\" prop.`);\r\n }\r\n }\r\n else {\r\n const validator = emitsOptions[event];\r\n if (isFunction$1(validator)) {\r\n const isValid = validator(...rawArgs);\r\n if (!isValid) {\r\n warn(`Invalid event arguments: event validation failed for event \"${event}\".`);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n let args = rawArgs;\r\n const isModelListener = event.startsWith('update:');\r\n // for v-model update:xxx events, apply modifiers on args\r\n const modelArg = isModelListener && event.slice(7);\r\n if (modelArg && modelArg in props) {\r\n const modifiersKey = `${modelArg === 'modelValue' ? 'model' : modelArg}Modifiers`;\r\n const { number, trim } = props[modifiersKey] || EMPTY_OBJ;\r\n if (trim) {\r\n args = rawArgs.map(a => a.trim());\r\n }\r\n else if (number) {\r\n args = rawArgs.map(toNumber);\r\n }\r\n }\r\n if ((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) {\r\n devtoolsComponentEmit(instance, event, args);\r\n }\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n const lowerCaseEvent = event.toLowerCase();\r\n if (lowerCaseEvent !== event && props[toHandlerKey(lowerCaseEvent)]) {\r\n warn(`Event \"${lowerCaseEvent}\" is emitted in component ` +\r\n `${formatComponentName(instance, instance.type)} but the handler is registered for \"${event}\". ` +\r\n `Note that HTML attributes are case-insensitive and you cannot use ` +\r\n `v-on to listen to camelCase events when using in-DOM templates. ` +\r\n `You should probably use \"${hyphenate(event)}\" instead of \"${event}\".`);\r\n }\r\n }\r\n let handlerName;\r\n let handler = props[(handlerName = toHandlerKey(event))] ||\r\n // also try camelCase event handler (#2249)\r\n props[(handlerName = toHandlerKey(camelize(event)))];\r\n // for v-model update:xxx events, also trigger kebab-case equivalent\r\n // for props passed via kebab-case\r\n if (!handler && isModelListener) {\r\n handler = props[(handlerName = toHandlerKey(hyphenate(event)))];\r\n }\r\n if (handler) {\r\n callWithAsyncErrorHandling(handler, instance, 6 /* COMPONENT_EVENT_HANDLER */, args);\r\n }\r\n const onceHandler = props[handlerName + `Once`];\r\n if (onceHandler) {\r\n if (!instance.emitted) {\r\n instance.emitted = {};\r\n }\r\n else if (instance.emitted[handlerName]) {\r\n return;\r\n }\r\n instance.emitted[handlerName] = true;\r\n callWithAsyncErrorHandling(onceHandler, instance, 6 /* COMPONENT_EVENT_HANDLER */, args);\r\n }\r\n}\r\nfunction normalizeEmitsOptions(comp, appContext, asMixin = false) {\r\n const cache = appContext.emitsCache;\r\n const cached = cache.get(comp);\r\n if (cached !== undefined) {\r\n return cached;\r\n }\r\n const raw = comp.emits;\r\n let normalized = {};\r\n // apply mixin/extends props\r\n let hasExtends = false;\r\n if (__VUE_OPTIONS_API__ && !isFunction$1(comp)) {\r\n const extendEmits = (raw) => {\r\n const normalizedFromExtend = normalizeEmitsOptions(raw, appContext, true);\r\n if (normalizedFromExtend) {\r\n hasExtends = true;\r\n extend(normalized, normalizedFromExtend);\r\n }\r\n };\r\n if (!asMixin && appContext.mixins.length) {\r\n appContext.mixins.forEach(extendEmits);\r\n }\r\n if (comp.extends) {\r\n extendEmits(comp.extends);\r\n }\r\n if (comp.mixins) {\r\n comp.mixins.forEach(extendEmits);\r\n }\r\n }\r\n if (!raw && !hasExtends) {\r\n cache.set(comp, null);\r\n return null;\r\n }\r\n if (isArray(raw)) {\r\n raw.forEach(key => (normalized[key] = null));\r\n }\r\n else {\r\n extend(normalized, raw);\r\n }\r\n cache.set(comp, normalized);\r\n return normalized;\r\n}\r\n// Check if an incoming prop key is a declared emit event listener.\r\n// e.g. With `emits: { click: null }`, props named `onClick` and `onclick` are\r\n// both considered matched listeners.\r\nfunction isEmitListener(options, key) {\r\n if (!options || !isOn(key)) {\r\n return false;\r\n }\r\n key = key.slice(2).replace(/Once$/, '');\r\n return (hasOwn(options, key[0].toLowerCase() + key.slice(1)) ||\r\n hasOwn(options, hyphenate(key)) ||\r\n hasOwn(options, key));\r\n}\n\n/**\r\n * mark the current rendering instance for asset resolution (e.g.\r\n * resolveComponent, resolveDirective) during render\r\n */\r\nlet currentRenderingInstance = null;\r\nlet currentScopeId = null;\r\n/**\r\n * Note: rendering calls maybe nested. The function returns the parent rendering\r\n * instance if present, which should be restored after the render is done:\r\n *\r\n * ```js\r\n * const prev = setCurrentRenderingInstance(i)\r\n * // ...render\r\n * setCurrentRenderingInstance(prev)\r\n * ```\r\n */\r\nfunction setCurrentRenderingInstance(instance) {\r\n const prev = currentRenderingInstance;\r\n currentRenderingInstance = instance;\r\n currentScopeId = (instance && instance.type.__scopeId) || null;\r\n return prev;\r\n}\r\n/**\r\n * Set scope id when creating hoisted vnodes.\r\n * @private compiler helper\r\n */\r\nfunction pushScopeId(id) {\r\n currentScopeId = id;\r\n}\r\n/**\r\n * Technically we no longer need this after 3.0.8 but we need to keep the same\r\n * API for backwards compat w/ code generated by compilers.\r\n * @private\r\n */\r\nfunction popScopeId() {\r\n currentScopeId = null;\r\n}\r\n/**\r\n * Only for backwards compat\r\n * @private\r\n */\r\nconst withScopeId = (_id) => withCtx;\r\n/**\r\n * Wrap a slot function to memoize current rendering instance\r\n * @private compiler helper\r\n */\r\nfunction withCtx(fn, ctx = currentRenderingInstance, isNonScopedSlot // false only\r\n) {\r\n if (!ctx)\r\n return fn;\r\n // already normalized\r\n if (fn._n) {\r\n return fn;\r\n }\r\n const renderFnWithContext = (...args) => {\r\n // If a user calls a compiled slot inside a template expression (#1745), it\r\n // can mess up block tracking, so by default we disable block tracking and\r\n // force bail out when invoking a compiled slot (indicated by the ._d flag).\r\n // This isn't necessary if rendering a compiled ``, so we flip the\r\n // ._d flag off when invoking the wrapped fn inside `renderSlot`.\r\n if (renderFnWithContext._d) {\r\n setBlockTracking(-1);\r\n }\r\n const prevInstance = setCurrentRenderingInstance(ctx);\r\n const res = fn(...args);\r\n setCurrentRenderingInstance(prevInstance);\r\n if (renderFnWithContext._d) {\r\n setBlockTracking(1);\r\n }\r\n if ((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) {\r\n devtoolsComponentUpdated(ctx);\r\n }\r\n return res;\r\n };\r\n // mark normalized to avoid duplicated wrapping\r\n renderFnWithContext._n = true;\r\n // mark this as compiled by default\r\n // this is used in vnode.ts -> normalizeChildren() to set the slot\r\n // rendering flag.\r\n renderFnWithContext._c = true;\r\n // disable block tracking by default\r\n renderFnWithContext._d = true;\r\n return renderFnWithContext;\r\n}\n\n/**\r\n * dev only flag to track whether $attrs was used during render.\r\n * If $attrs was used during render then the warning for failed attrs\r\n * fallthrough can be suppressed.\r\n */\r\nlet accessedAttrs = false;\r\nfunction markAttrsAccessed() {\r\n accessedAttrs = true;\r\n}\r\nfunction renderComponentRoot(instance) {\r\n const { type: Component, vnode, proxy, withProxy, props, propsOptions: [propsOptions], slots, attrs, emit, render, renderCache, data, setupState, ctx, inheritAttrs } = instance;\r\n let result;\r\n const prev = setCurrentRenderingInstance(instance);\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n accessedAttrs = false;\r\n }\r\n try {\r\n let fallthroughAttrs;\r\n if (vnode.shapeFlag & 4 /* STATEFUL_COMPONENT */) {\r\n // withProxy is a proxy with a different `has` trap only for\r\n // runtime-compiled render functions using `with` block.\r\n const proxyToUse = withProxy || proxy;\r\n result = normalizeVNode(render.call(proxyToUse, proxyToUse, renderCache, props, setupState, data, ctx));\r\n fallthroughAttrs = attrs;\r\n }\r\n else {\r\n // functional\r\n const render = Component;\r\n // in dev, mark attrs accessed if optional props (attrs === props)\r\n if ((process.env.NODE_ENV !== 'production') && attrs === props) {\r\n markAttrsAccessed();\r\n }\r\n result = normalizeVNode(render.length > 1\r\n ? render(props, (process.env.NODE_ENV !== 'production')\r\n ? {\r\n get attrs() {\r\n markAttrsAccessed();\r\n return attrs;\r\n },\r\n slots,\r\n emit\r\n }\r\n : { attrs, slots, emit })\r\n : render(props, null /* we know it doesn't need it */));\r\n fallthroughAttrs = Component.props\r\n ? attrs\r\n : getFunctionalFallthrough(attrs);\r\n }\r\n // attr merging\r\n // in dev mode, comments are preserved, and it's possible for a template\r\n // to have comments along side the root element which makes it a fragment\r\n let root = result;\r\n let setRoot = undefined;\r\n if ((process.env.NODE_ENV !== 'production') &&\r\n result.patchFlag > 0 &&\r\n result.patchFlag & 2048 /* DEV_ROOT_FRAGMENT */) {\r\n ;\r\n [root, setRoot] = getChildRoot(result);\r\n }\r\n if (fallthroughAttrs && inheritAttrs !== false) {\r\n const keys = Object.keys(fallthroughAttrs);\r\n const { shapeFlag } = root;\r\n if (keys.length) {\r\n if (shapeFlag & (1 /* ELEMENT */ | 6 /* COMPONENT */)) {\r\n if (propsOptions && keys.some(isModelListener)) {\r\n // If a v-model listener (onUpdate:xxx) has a corresponding declared\r\n // prop, it indicates this component expects to handle v-model and\r\n // it should not fallthrough.\r\n // related: #1543, #1643, #1989\r\n fallthroughAttrs = filterModelListeners(fallthroughAttrs, propsOptions);\r\n }\r\n root = cloneVNode(root, fallthroughAttrs);\r\n }\r\n else if ((process.env.NODE_ENV !== 'production') && !accessedAttrs && root.type !== Comment) {\r\n const allAttrs = Object.keys(attrs);\r\n const eventAttrs = [];\r\n const extraAttrs = [];\r\n for (let i = 0, l = allAttrs.length; i < l; i++) {\r\n const key = allAttrs[i];\r\n if (isOn(key)) {\r\n // ignore v-model handlers when they fail to fallthrough\r\n if (!isModelListener(key)) {\r\n // remove `on`, lowercase first letter to reflect event casing\r\n // accurately\r\n eventAttrs.push(key[2].toLowerCase() + key.slice(3));\r\n }\r\n }\r\n else {\r\n extraAttrs.push(key);\r\n }\r\n }\r\n if (extraAttrs.length) {\r\n warn(`Extraneous non-props attributes (` +\r\n `${extraAttrs.join(', ')}) ` +\r\n `were passed to component but could not be automatically inherited ` +\r\n `because component renders fragment or text root nodes.`);\r\n }\r\n if (eventAttrs.length) {\r\n warn(`Extraneous non-emits event listeners (` +\r\n `${eventAttrs.join(', ')}) ` +\r\n `were passed to component but could not be automatically inherited ` +\r\n `because component renders fragment or text root nodes. ` +\r\n `If the listener is intended to be a component custom event listener only, ` +\r\n `declare it using the \"emits\" option.`);\r\n }\r\n }\r\n }\r\n }\r\n if (false &&\r\n isCompatEnabled(\"INSTANCE_ATTRS_CLASS_STYLE\" /* INSTANCE_ATTRS_CLASS_STYLE */, instance) &&\r\n vnode.shapeFlag & 4 /* STATEFUL_COMPONENT */ &&\r\n root.shapeFlag & (1 /* ELEMENT */ | 6 /* COMPONENT */)) ;\r\n // inherit directives\r\n if (vnode.dirs) {\r\n if ((process.env.NODE_ENV !== 'production') && !isElementRoot(root)) {\r\n warn(`Runtime directive used on component with non-element root node. ` +\r\n `The directives will not function as intended.`);\r\n }\r\n root.dirs = root.dirs ? root.dirs.concat(vnode.dirs) : vnode.dirs;\r\n }\r\n // inherit transition data\r\n if (vnode.transition) {\r\n if ((process.env.NODE_ENV !== 'production') && !isElementRoot(root)) {\r\n warn(`Component inside renders non-element root node ` +\r\n `that cannot be animated.`);\r\n }\r\n root.transition = vnode.transition;\r\n }\r\n if ((process.env.NODE_ENV !== 'production') && setRoot) {\r\n setRoot(root);\r\n }\r\n else {\r\n result = root;\r\n }\r\n }\r\n catch (err) {\r\n blockStack.length = 0;\r\n handleError(err, instance, 1 /* RENDER_FUNCTION */);\r\n result = createVNode(Comment);\r\n }\r\n setCurrentRenderingInstance(prev);\r\n return result;\r\n}\r\n/**\r\n * dev only\r\n * In dev mode, template root level comments are rendered, which turns the\r\n * template into a fragment root, but we need to locate the single element\r\n * root for attrs and scope id processing.\r\n */\r\nconst getChildRoot = (vnode) => {\r\n const rawChildren = vnode.children;\r\n const dynamicChildren = vnode.dynamicChildren;\r\n const childRoot = filterSingleRoot(rawChildren);\r\n if (!childRoot) {\r\n return [vnode, undefined];\r\n }\r\n const index = rawChildren.indexOf(childRoot);\r\n const dynamicIndex = dynamicChildren ? dynamicChildren.indexOf(childRoot) : -1;\r\n const setRoot = (updatedRoot) => {\r\n rawChildren[index] = updatedRoot;\r\n if (dynamicChildren) {\r\n if (dynamicIndex > -1) {\r\n dynamicChildren[dynamicIndex] = updatedRoot;\r\n }\r\n else if (updatedRoot.patchFlag > 0) {\r\n vnode.dynamicChildren = [...dynamicChildren, updatedRoot];\r\n }\r\n }\r\n };\r\n return [normalizeVNode(childRoot), setRoot];\r\n};\r\nfunction filterSingleRoot(children) {\r\n let singleRoot;\r\n for (let i = 0; i < children.length; i++) {\r\n const child = children[i];\r\n if (isVNode(child)) {\r\n // ignore user comment\r\n if (child.type !== Comment || child.children === 'v-if') {\r\n if (singleRoot) {\r\n // has more than 1 non-comment child, return now\r\n return;\r\n }\r\n else {\r\n singleRoot = child;\r\n }\r\n }\r\n }\r\n else {\r\n return;\r\n }\r\n }\r\n return singleRoot;\r\n}\r\nconst getFunctionalFallthrough = (attrs) => {\r\n let res;\r\n for (const key in attrs) {\r\n if (key === 'class' || key === 'style' || isOn(key)) {\r\n (res || (res = {}))[key] = attrs[key];\r\n }\r\n }\r\n return res;\r\n};\r\nconst filterModelListeners = (attrs, props) => {\r\n const res = {};\r\n for (const key in attrs) {\r\n if (!isModelListener(key) || !(key.slice(9) in props)) {\r\n res[key] = attrs[key];\r\n }\r\n }\r\n return res;\r\n};\r\nconst isElementRoot = (vnode) => {\r\n return (vnode.shapeFlag & (6 /* COMPONENT */ | 1 /* ELEMENT */) ||\r\n vnode.type === Comment // potential v-if branch switch\r\n );\r\n};\r\nfunction shouldUpdateComponent(prevVNode, nextVNode, optimized) {\r\n const { props: prevProps, children: prevChildren, component } = prevVNode;\r\n const { props: nextProps, children: nextChildren, patchFlag } = nextVNode;\r\n const emits = component.emitsOptions;\r\n // Parent component's render function was hot-updated. Since this may have\r\n // caused the child component's slots content to have changed, we need to\r\n // force the child to update as well.\r\n if ((process.env.NODE_ENV !== 'production') && (prevChildren || nextChildren) && isHmrUpdating) {\r\n return true;\r\n }\r\n // force child update for runtime directive or transition on component vnode.\r\n if (nextVNode.dirs || nextVNode.transition) {\r\n return true;\r\n }\r\n if (optimized && patchFlag >= 0) {\r\n if (patchFlag & 1024 /* DYNAMIC_SLOTS */) {\r\n // slot content that references values that might have changed,\r\n // e.g. in a v-for\r\n return true;\r\n }\r\n if (patchFlag & 16 /* FULL_PROPS */) {\r\n if (!prevProps) {\r\n return !!nextProps;\r\n }\r\n // presence of this flag indicates props are always non-null\r\n return hasPropsChanged(prevProps, nextProps, emits);\r\n }\r\n else if (patchFlag & 8 /* PROPS */) {\r\n const dynamicProps = nextVNode.dynamicProps;\r\n for (let i = 0; i < dynamicProps.length; i++) {\r\n const key = dynamicProps[i];\r\n if (nextProps[key] !== prevProps[key] &&\r\n !isEmitListener(emits, key)) {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n // this path is only taken by manually written render functions\r\n // so presence of any children leads to a forced update\r\n if (prevChildren || nextChildren) {\r\n if (!nextChildren || !nextChildren.$stable) {\r\n return true;\r\n }\r\n }\r\n if (prevProps === nextProps) {\r\n return false;\r\n }\r\n if (!prevProps) {\r\n return !!nextProps;\r\n }\r\n if (!nextProps) {\r\n return true;\r\n }\r\n return hasPropsChanged(prevProps, nextProps, emits);\r\n }\r\n return false;\r\n}\r\nfunction hasPropsChanged(prevProps, nextProps, emitsOptions) {\r\n const nextKeys = Object.keys(nextProps);\r\n if (nextKeys.length !== Object.keys(prevProps).length) {\r\n return true;\r\n }\r\n for (let i = 0; i < nextKeys.length; i++) {\r\n const key = nextKeys[i];\r\n if (nextProps[key] !== prevProps[key] &&\r\n !isEmitListener(emitsOptions, key)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\nfunction updateHOCHostEl({ vnode, parent }, el // HostNode\r\n) {\r\n while (parent && parent.subTree === vnode) {\r\n (vnode = parent.vnode).el = el;\r\n parent = parent.parent;\r\n }\r\n}\n\nconst isSuspense = (type) => type.__isSuspense;\r\n// Suspense exposes a component-like API, and is treated like a component\r\n// in the compiler, but internally it's a special built-in type that hooks\r\n// directly into the renderer.\r\nconst SuspenseImpl = {\r\n name: 'Suspense',\r\n // In order to make Suspense tree-shakable, we need to avoid importing it\r\n // directly in the renderer. The renderer checks for the __isSuspense flag\r\n // on a vnode's type and calls the `process` method, passing in renderer\r\n // internals.\r\n __isSuspense: true,\r\n process(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, \r\n // platform-specific impl passed from renderer\r\n rendererInternals) {\r\n if (n1 == null) {\r\n mountSuspense(n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, rendererInternals);\r\n }\r\n else {\r\n patchSuspense(n1, n2, container, anchor, parentComponent, isSVG, slotScopeIds, optimized, rendererInternals);\r\n }\r\n },\r\n hydrate: hydrateSuspense,\r\n create: createSuspenseBoundary,\r\n normalize: normalizeSuspenseChildren\r\n};\r\n// Force-casted public typing for h and TSX props inference\r\nconst Suspense = (SuspenseImpl );\r\nfunction triggerEvent(vnode, name) {\r\n const eventListener = vnode.props && vnode.props[name];\r\n if (isFunction$1(eventListener)) {\r\n eventListener();\r\n }\r\n}\r\nfunction mountSuspense(vnode, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, rendererInternals) {\r\n const { p: patch, o: { createElement } } = rendererInternals;\r\n const hiddenContainer = createElement('div');\r\n const suspense = (vnode.suspense = createSuspenseBoundary(vnode, parentSuspense, parentComponent, container, hiddenContainer, anchor, isSVG, slotScopeIds, optimized, rendererInternals));\r\n // start mounting the content subtree in an off-dom container\r\n patch(null, (suspense.pendingBranch = vnode.ssContent), hiddenContainer, null, parentComponent, suspense, isSVG, slotScopeIds);\r\n // now check if we have encountered any async deps\r\n if (suspense.deps > 0) {\r\n // has async\r\n // invoke @fallback event\r\n triggerEvent(vnode, 'onPending');\r\n triggerEvent(vnode, 'onFallback');\r\n // mount the fallback tree\r\n patch(null, vnode.ssFallback, container, anchor, parentComponent, null, // fallback tree will not have suspense context\r\n isSVG, slotScopeIds);\r\n setActiveBranch(suspense, vnode.ssFallback);\r\n }\r\n else {\r\n // Suspense has no async deps. Just resolve.\r\n suspense.resolve();\r\n }\r\n}\r\nfunction patchSuspense(n1, n2, container, anchor, parentComponent, isSVG, slotScopeIds, optimized, { p: patch, um: unmount, o: { createElement } }) {\r\n const suspense = (n2.suspense = n1.suspense);\r\n suspense.vnode = n2;\r\n n2.el = n1.el;\r\n const newBranch = n2.ssContent;\r\n const newFallback = n2.ssFallback;\r\n const { activeBranch, pendingBranch, isInFallback, isHydrating } = suspense;\r\n if (pendingBranch) {\r\n suspense.pendingBranch = newBranch;\r\n if (isSameVNodeType(newBranch, pendingBranch)) {\r\n // same root type but content may have changed.\r\n patch(pendingBranch, newBranch, suspense.hiddenContainer, null, parentComponent, suspense, isSVG, slotScopeIds, optimized);\r\n if (suspense.deps <= 0) {\r\n suspense.resolve();\r\n }\r\n else if (isInFallback) {\r\n patch(activeBranch, newFallback, container, anchor, parentComponent, null, // fallback tree will not have suspense context\r\n isSVG, slotScopeIds, optimized);\r\n setActiveBranch(suspense, newFallback);\r\n }\r\n }\r\n else {\r\n // toggled before pending tree is resolved\r\n suspense.pendingId++;\r\n if (isHydrating) {\r\n // if toggled before hydration is finished, the current DOM tree is\r\n // no longer valid. set it as the active branch so it will be unmounted\r\n // when resolved\r\n suspense.isHydrating = false;\r\n suspense.activeBranch = pendingBranch;\r\n }\r\n else {\r\n unmount(pendingBranch, parentComponent, suspense);\r\n }\r\n // increment pending ID. this is used to invalidate async callbacks\r\n // reset suspense state\r\n suspense.deps = 0;\r\n // discard effects from pending branch\r\n suspense.effects.length = 0;\r\n // discard previous container\r\n suspense.hiddenContainer = createElement('div');\r\n if (isInFallback) {\r\n // already in fallback state\r\n patch(null, newBranch, suspense.hiddenContainer, null, parentComponent, suspense, isSVG, slotScopeIds, optimized);\r\n if (suspense.deps <= 0) {\r\n suspense.resolve();\r\n }\r\n else {\r\n patch(activeBranch, newFallback, container, anchor, parentComponent, null, // fallback tree will not have suspense context\r\n isSVG, slotScopeIds, optimized);\r\n setActiveBranch(suspense, newFallback);\r\n }\r\n }\r\n else if (activeBranch && isSameVNodeType(newBranch, activeBranch)) {\r\n // toggled \"back\" to current active branch\r\n patch(activeBranch, newBranch, container, anchor, parentComponent, suspense, isSVG, slotScopeIds, optimized);\r\n // force resolve\r\n suspense.resolve(true);\r\n }\r\n else {\r\n // switched to a 3rd branch\r\n patch(null, newBranch, suspense.hiddenContainer, null, parentComponent, suspense, isSVG, slotScopeIds, optimized);\r\n if (suspense.deps <= 0) {\r\n suspense.resolve();\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n if (activeBranch && isSameVNodeType(newBranch, activeBranch)) {\r\n // root did not change, just normal patch\r\n patch(activeBranch, newBranch, container, anchor, parentComponent, suspense, isSVG, slotScopeIds, optimized);\r\n setActiveBranch(suspense, newBranch);\r\n }\r\n else {\r\n // root node toggled\r\n // invoke @pending event\r\n triggerEvent(n2, 'onPending');\r\n // mount pending branch in off-dom container\r\n suspense.pendingBranch = newBranch;\r\n suspense.pendingId++;\r\n patch(null, newBranch, suspense.hiddenContainer, null, parentComponent, suspense, isSVG, slotScopeIds, optimized);\r\n if (suspense.deps <= 0) {\r\n // incoming branch has no async deps, resolve now.\r\n suspense.resolve();\r\n }\r\n else {\r\n const { timeout, pendingId } = suspense;\r\n if (timeout > 0) {\r\n setTimeout(() => {\r\n if (suspense.pendingId === pendingId) {\r\n suspense.fallback(newFallback);\r\n }\r\n }, timeout);\r\n }\r\n else if (timeout === 0) {\r\n suspense.fallback(newFallback);\r\n }\r\n }\r\n }\r\n }\r\n}\r\nlet hasWarned = false;\r\nfunction createSuspenseBoundary(vnode, parent, parentComponent, container, hiddenContainer, anchor, isSVG, slotScopeIds, optimized, rendererInternals, isHydrating = false) {\r\n /* istanbul ignore if */\r\n if ((process.env.NODE_ENV !== 'production') && !false && !hasWarned) {\r\n hasWarned = true;\r\n // @ts-ignore `console.info` cannot be null error\r\n console[console.info ? 'info' : 'log'](` is an experimental feature and its API will likely change.`);\r\n }\r\n const { p: patch, m: move, um: unmount, n: next, o: { parentNode, remove } } = rendererInternals;\r\n const timeout = toNumber(vnode.props && vnode.props.timeout);\r\n const suspense = {\r\n vnode,\r\n parent,\r\n parentComponent,\r\n isSVG,\r\n container,\r\n hiddenContainer,\r\n anchor,\r\n deps: 0,\r\n pendingId: 0,\r\n timeout: typeof timeout === 'number' ? timeout : -1,\r\n activeBranch: null,\r\n pendingBranch: null,\r\n isInFallback: true,\r\n isHydrating,\r\n isUnmounted: false,\r\n effects: [],\r\n resolve(resume = false) {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n if (!resume && !suspense.pendingBranch) {\r\n throw new Error(`suspense.resolve() is called without a pending branch.`);\r\n }\r\n if (suspense.isUnmounted) {\r\n throw new Error(`suspense.resolve() is called on an already unmounted suspense boundary.`);\r\n }\r\n }\r\n const { vnode, activeBranch, pendingBranch, pendingId, effects, parentComponent, container } = suspense;\r\n if (suspense.isHydrating) {\r\n suspense.isHydrating = false;\r\n }\r\n else if (!resume) {\r\n const delayEnter = activeBranch &&\r\n pendingBranch.transition &&\r\n pendingBranch.transition.mode === 'out-in';\r\n if (delayEnter) {\r\n activeBranch.transition.afterLeave = () => {\r\n if (pendingId === suspense.pendingId) {\r\n move(pendingBranch, container, anchor, 0 /* ENTER */);\r\n }\r\n };\r\n }\r\n // this is initial anchor on mount\r\n let { anchor } = suspense;\r\n // unmount current active tree\r\n if (activeBranch) {\r\n // if the fallback tree was mounted, it may have been moved\r\n // as part of a parent suspense. get the latest anchor for insertion\r\n anchor = next(activeBranch);\r\n unmount(activeBranch, parentComponent, suspense, true);\r\n }\r\n if (!delayEnter) {\r\n // move content from off-dom container to actual container\r\n move(pendingBranch, container, anchor, 0 /* ENTER */);\r\n }\r\n }\r\n setActiveBranch(suspense, pendingBranch);\r\n suspense.pendingBranch = null;\r\n suspense.isInFallback = false;\r\n // flush buffered effects\r\n // check if there is a pending parent suspense\r\n let parent = suspense.parent;\r\n let hasUnresolvedAncestor = false;\r\n while (parent) {\r\n if (parent.pendingBranch) {\r\n // found a pending parent suspense, merge buffered post jobs\r\n // into that parent\r\n parent.effects.push(...effects);\r\n hasUnresolvedAncestor = true;\r\n break;\r\n }\r\n parent = parent.parent;\r\n }\r\n // no pending parent suspense, flush all jobs\r\n if (!hasUnresolvedAncestor) {\r\n queuePostFlushCb(effects);\r\n }\r\n suspense.effects = [];\r\n // invoke @resolve event\r\n triggerEvent(vnode, 'onResolve');\r\n },\r\n fallback(fallbackVNode) {\r\n if (!suspense.pendingBranch) {\r\n return;\r\n }\r\n const { vnode, activeBranch, parentComponent, container, isSVG } = suspense;\r\n // invoke @fallback event\r\n triggerEvent(vnode, 'onFallback');\r\n const anchor = next(activeBranch);\r\n const mountFallback = () => {\r\n if (!suspense.isInFallback) {\r\n return;\r\n }\r\n // mount the fallback tree\r\n patch(null, fallbackVNode, container, anchor, parentComponent, null, // fallback tree will not have suspense context\r\n isSVG, slotScopeIds, optimized);\r\n setActiveBranch(suspense, fallbackVNode);\r\n };\r\n const delayEnter = fallbackVNode.transition && fallbackVNode.transition.mode === 'out-in';\r\n if (delayEnter) {\r\n activeBranch.transition.afterLeave = mountFallback;\r\n }\r\n suspense.isInFallback = true;\r\n // unmount current active branch\r\n unmount(activeBranch, parentComponent, null, // no suspense so unmount hooks fire now\r\n true // shouldRemove\r\n );\r\n if (!delayEnter) {\r\n mountFallback();\r\n }\r\n },\r\n move(container, anchor, type) {\r\n suspense.activeBranch &&\r\n move(suspense.activeBranch, container, anchor, type);\r\n suspense.container = container;\r\n },\r\n next() {\r\n return suspense.activeBranch && next(suspense.activeBranch);\r\n },\r\n registerDep(instance, setupRenderEffect) {\r\n const isInPendingSuspense = !!suspense.pendingBranch;\r\n if (isInPendingSuspense) {\r\n suspense.deps++;\r\n }\r\n const hydratedEl = instance.vnode.el;\r\n instance\r\n .asyncDep.catch(err => {\r\n handleError(err, instance, 0 /* SETUP_FUNCTION */);\r\n })\r\n .then(asyncSetupResult => {\r\n // retry when the setup() promise resolves.\r\n // component may have been unmounted before resolve.\r\n if (instance.isUnmounted ||\r\n suspense.isUnmounted ||\r\n suspense.pendingId !== instance.suspenseId) {\r\n return;\r\n }\r\n // retry from this component\r\n instance.asyncResolved = true;\r\n const { vnode } = instance;\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n pushWarningContext(vnode);\r\n }\r\n handleSetupResult(instance, asyncSetupResult, false);\r\n if (hydratedEl) {\r\n // vnode may have been replaced if an update happened before the\r\n // async dep is resolved.\r\n vnode.el = hydratedEl;\r\n }\r\n const placeholder = !hydratedEl && instance.subTree.el;\r\n setupRenderEffect(instance, vnode, \r\n // component may have been moved before resolve.\r\n // if this is not a hydration, instance.subTree will be the comment\r\n // placeholder.\r\n parentNode(hydratedEl || instance.subTree.el), \r\n // anchor will not be used if this is hydration, so only need to\r\n // consider the comment placeholder case.\r\n hydratedEl ? null : next(instance.subTree), suspense, isSVG, optimized);\r\n if (placeholder) {\r\n remove(placeholder);\r\n }\r\n updateHOCHostEl(instance, vnode.el);\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n popWarningContext();\r\n }\r\n // only decrease deps count if suspense is not already resolved\r\n if (isInPendingSuspense && --suspense.deps === 0) {\r\n suspense.resolve();\r\n }\r\n });\r\n },\r\n unmount(parentSuspense, doRemove) {\r\n suspense.isUnmounted = true;\r\n if (suspense.activeBranch) {\r\n unmount(suspense.activeBranch, parentComponent, parentSuspense, doRemove);\r\n }\r\n if (suspense.pendingBranch) {\r\n unmount(suspense.pendingBranch, parentComponent, parentSuspense, doRemove);\r\n }\r\n }\r\n };\r\n return suspense;\r\n}\r\nfunction hydrateSuspense(node, vnode, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, rendererInternals, hydrateNode) {\r\n /* eslint-disable no-restricted-globals */\r\n const suspense = (vnode.suspense = createSuspenseBoundary(vnode, parentSuspense, parentComponent, node.parentNode, document.createElement('div'), null, isSVG, slotScopeIds, optimized, rendererInternals, true /* hydrating */));\r\n // there are two possible scenarios for server-rendered suspense:\r\n // - success: ssr content should be fully resolved\r\n // - failure: ssr content should be the fallback branch.\r\n // however, on the client we don't really know if it has failed or not\r\n // attempt to hydrate the DOM assuming it has succeeded, but we still\r\n // need to construct a suspense boundary first\r\n const result = hydrateNode(node, (suspense.pendingBranch = vnode.ssContent), parentComponent, suspense, slotScopeIds, optimized);\r\n if (suspense.deps === 0) {\r\n suspense.resolve();\r\n }\r\n return result;\r\n /* eslint-enable no-restricted-globals */\r\n}\r\nfunction normalizeSuspenseChildren(vnode) {\r\n const { shapeFlag, children } = vnode;\r\n const isSlotChildren = shapeFlag & 32 /* SLOTS_CHILDREN */;\r\n vnode.ssContent = normalizeSuspenseSlot(isSlotChildren ? children.default : children);\r\n vnode.ssFallback = isSlotChildren\r\n ? normalizeSuspenseSlot(children.fallback)\r\n : createVNode(Comment);\r\n}\r\nfunction normalizeSuspenseSlot(s) {\r\n let block;\r\n if (isFunction$1(s)) {\r\n const isCompiledSlot = s._c;\r\n if (isCompiledSlot) {\r\n // disableTracking: false\r\n // allow block tracking for compiled slots\r\n // (see ./componentRenderContext.ts)\r\n s._d = false;\r\n openBlock();\r\n }\r\n s = s();\r\n if (isCompiledSlot) {\r\n s._d = true;\r\n block = currentBlock;\r\n closeBlock();\r\n }\r\n }\r\n if (isArray(s)) {\r\n const singleChild = filterSingleRoot(s);\r\n if ((process.env.NODE_ENV !== 'production') && !singleChild) {\r\n warn(` slots expect a single root node.`);\r\n }\r\n s = singleChild;\r\n }\r\n s = normalizeVNode(s);\r\n if (block && !s.dynamicChildren) {\r\n s.dynamicChildren = block.filter(c => c !== s);\r\n }\r\n return s;\r\n}\r\nfunction queueEffectWithSuspense(fn, suspense) {\r\n if (suspense && suspense.pendingBranch) {\r\n if (isArray(fn)) {\r\n suspense.effects.push(...fn);\r\n }\r\n else {\r\n suspense.effects.push(fn);\r\n }\r\n }\r\n else {\r\n queuePostFlushCb(fn);\r\n }\r\n}\r\nfunction setActiveBranch(suspense, branch) {\r\n suspense.activeBranch = branch;\r\n const { vnode, parentComponent } = suspense;\r\n const el = (vnode.el = branch.el);\r\n // in case suspense is the root node of a component,\r\n // recursively update the HOC el\r\n if (parentComponent && parentComponent.subTree === vnode) {\r\n parentComponent.vnode.el = el;\r\n updateHOCHostEl(parentComponent, el);\r\n }\r\n}\n\nfunction provide(key, value) {\r\n if (!currentInstance) {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n warn(`provide() can only be used inside setup().`);\r\n }\r\n }\r\n else {\r\n let provides = currentInstance.provides;\r\n // by default an instance inherits its parent's provides object\r\n // but when it needs to provide values of its own, it creates its\r\n // own provides object using parent provides object as prototype.\r\n // this way in `inject` we can simply look up injections from direct\r\n // parent and let the prototype chain do the work.\r\n const parentProvides = currentInstance.parent && currentInstance.parent.provides;\r\n if (parentProvides === provides) {\r\n provides = currentInstance.provides = Object.create(parentProvides);\r\n }\r\n // TS doesn't allow symbol as index type\r\n provides[key] = value;\r\n }\r\n}\r\nfunction inject(key, defaultValue, treatDefaultAsFactory = false) {\r\n // fallback to `currentRenderingInstance` so that this can be called in\r\n // a functional component\r\n const instance = currentInstance || currentRenderingInstance;\r\n if (instance) {\r\n // #2400\r\n // to support `app.use` plugins,\r\n // fallback to appContext's `provides` if the intance is at root\r\n const provides = instance.parent == null\r\n ? instance.vnode.appContext && instance.vnode.appContext.provides\r\n : instance.parent.provides;\r\n if (provides && key in provides) {\r\n // TS doesn't allow symbol as index type\r\n return provides[key];\r\n }\r\n else if (arguments.length > 1) {\r\n return treatDefaultAsFactory && isFunction$1(defaultValue)\r\n ? defaultValue.call(instance.proxy)\r\n : defaultValue;\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n warn(`injection \"${String(key)}\" not found.`);\r\n }\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n warn(`inject() can only be used inside setup() or functional components.`);\r\n }\r\n}\n\nfunction useTransitionState() {\r\n const state = {\r\n isMounted: false,\r\n isLeaving: false,\r\n isUnmounting: false,\r\n leavingVNodes: new Map()\r\n };\r\n onMounted(() => {\r\n state.isMounted = true;\r\n });\r\n onBeforeUnmount(() => {\r\n state.isUnmounting = true;\r\n });\r\n return state;\r\n}\r\nconst TransitionHookValidator = [Function, Array];\r\nconst BaseTransitionImpl = {\r\n name: `BaseTransition`,\r\n props: {\r\n mode: String,\r\n appear: Boolean,\r\n persisted: Boolean,\r\n // enter\r\n onBeforeEnter: TransitionHookValidator,\r\n onEnter: TransitionHookValidator,\r\n onAfterEnter: TransitionHookValidator,\r\n onEnterCancelled: TransitionHookValidator,\r\n // leave\r\n onBeforeLeave: TransitionHookValidator,\r\n onLeave: TransitionHookValidator,\r\n onAfterLeave: TransitionHookValidator,\r\n onLeaveCancelled: TransitionHookValidator,\r\n // appear\r\n onBeforeAppear: TransitionHookValidator,\r\n onAppear: TransitionHookValidator,\r\n onAfterAppear: TransitionHookValidator,\r\n onAppearCancelled: TransitionHookValidator\r\n },\r\n setup(props, { slots }) {\r\n const instance = getCurrentInstance();\r\n const state = useTransitionState();\r\n let prevTransitionKey;\r\n return () => {\r\n const children = slots.default && getTransitionRawChildren(slots.default(), true);\r\n if (!children || !children.length) {\r\n return;\r\n }\r\n // warn multiple elements\r\n if ((process.env.NODE_ENV !== 'production') && children.length > 1) {\r\n warn(' can only be used on a single element or component. Use ' +\r\n ' for lists.');\r\n }\r\n // there's no need to track reactivity for these props so use the raw\r\n // props for a bit better perf\r\n const rawProps = toRaw(props);\r\n const { mode } = rawProps;\r\n // check mode\r\n if ((process.env.NODE_ENV !== 'production') && mode && !['in-out', 'out-in', 'default'].includes(mode)) {\r\n warn(`invalid mode: ${mode}`);\r\n }\r\n // at this point children has a guaranteed length of 1.\r\n const child = children[0];\r\n if (state.isLeaving) {\r\n return emptyPlaceholder(child);\r\n }\r\n // in the case of , we need to\r\n // compare the type of the kept-alive children.\r\n const innerChild = getKeepAliveChild(child);\r\n if (!innerChild) {\r\n return emptyPlaceholder(child);\r\n }\r\n const enterHooks = resolveTransitionHooks(innerChild, rawProps, state, instance);\r\n setTransitionHooks(innerChild, enterHooks);\r\n const oldChild = instance.subTree;\r\n const oldInnerChild = oldChild && getKeepAliveChild(oldChild);\r\n let transitionKeyChanged = false;\r\n const { getTransitionKey } = innerChild.type;\r\n if (getTransitionKey) {\r\n const key = getTransitionKey();\r\n if (prevTransitionKey === undefined) {\r\n prevTransitionKey = key;\r\n }\r\n else if (key !== prevTransitionKey) {\r\n prevTransitionKey = key;\r\n transitionKeyChanged = true;\r\n }\r\n }\r\n // handle mode\r\n if (oldInnerChild &&\r\n oldInnerChild.type !== Comment &&\r\n (!isSameVNodeType(innerChild, oldInnerChild) || transitionKeyChanged)) {\r\n const leavingHooks = resolveTransitionHooks(oldInnerChild, rawProps, state, instance);\r\n // update old tree's hooks in case of dynamic transition\r\n setTransitionHooks(oldInnerChild, leavingHooks);\r\n // switching between different views\r\n if (mode === 'out-in') {\r\n state.isLeaving = true;\r\n // return placeholder node and queue update when leave finishes\r\n leavingHooks.afterLeave = () => {\r\n state.isLeaving = false;\r\n instance.update();\r\n };\r\n return emptyPlaceholder(child);\r\n }\r\n else if (mode === 'in-out' && innerChild.type !== Comment) {\r\n leavingHooks.delayLeave = (el, earlyRemove, delayedLeave) => {\r\n const leavingVNodesCache = getLeavingNodesForType(state, oldInnerChild);\r\n leavingVNodesCache[String(oldInnerChild.key)] = oldInnerChild;\r\n // early removal callback\r\n el._leaveCb = () => {\r\n earlyRemove();\r\n el._leaveCb = undefined;\r\n delete enterHooks.delayedLeave;\r\n };\r\n enterHooks.delayedLeave = delayedLeave;\r\n };\r\n }\r\n }\r\n return child;\r\n };\r\n }\r\n};\r\n// export the public type for h/tsx inference\r\n// also to avoid inline import() in generated d.ts files\r\nconst BaseTransition = BaseTransitionImpl;\r\nfunction getLeavingNodesForType(state, vnode) {\r\n const { leavingVNodes } = state;\r\n let leavingVNodesCache = leavingVNodes.get(vnode.type);\r\n if (!leavingVNodesCache) {\r\n leavingVNodesCache = Object.create(null);\r\n leavingVNodes.set(vnode.type, leavingVNodesCache);\r\n }\r\n return leavingVNodesCache;\r\n}\r\n// The transition hooks are attached to the vnode as vnode.transition\r\n// and will be called at appropriate timing in the renderer.\r\nfunction resolveTransitionHooks(vnode, props, state, instance) {\r\n const { appear, mode, persisted = false, onBeforeEnter, onEnter, onAfterEnter, onEnterCancelled, onBeforeLeave, onLeave, onAfterLeave, onLeaveCancelled, onBeforeAppear, onAppear, onAfterAppear, onAppearCancelled } = props;\r\n const key = String(vnode.key);\r\n const leavingVNodesCache = getLeavingNodesForType(state, vnode);\r\n const callHook = (hook, args) => {\r\n hook &&\r\n callWithAsyncErrorHandling(hook, instance, 9 /* TRANSITION_HOOK */, args);\r\n };\r\n const hooks = {\r\n mode,\r\n persisted,\r\n beforeEnter(el) {\r\n let hook = onBeforeEnter;\r\n if (!state.isMounted) {\r\n if (appear) {\r\n hook = onBeforeAppear || onBeforeEnter;\r\n }\r\n else {\r\n return;\r\n }\r\n }\r\n // for same element (v-show)\r\n if (el._leaveCb) {\r\n el._leaveCb(true /* cancelled */);\r\n }\r\n // for toggled element with same key (v-if)\r\n const leavingVNode = leavingVNodesCache[key];\r\n if (leavingVNode &&\r\n isSameVNodeType(vnode, leavingVNode) &&\r\n leavingVNode.el._leaveCb) {\r\n // force early removal (not cancelled)\r\n leavingVNode.el._leaveCb();\r\n }\r\n callHook(hook, [el]);\r\n },\r\n enter(el) {\r\n let hook = onEnter;\r\n let afterHook = onAfterEnter;\r\n let cancelHook = onEnterCancelled;\r\n if (!state.isMounted) {\r\n if (appear) {\r\n hook = onAppear || onEnter;\r\n afterHook = onAfterAppear || onAfterEnter;\r\n cancelHook = onAppearCancelled || onEnterCancelled;\r\n }\r\n else {\r\n return;\r\n }\r\n }\r\n let called = false;\r\n const done = (el._enterCb = (cancelled) => {\r\n if (called)\r\n return;\r\n called = true;\r\n if (cancelled) {\r\n callHook(cancelHook, [el]);\r\n }\r\n else {\r\n callHook(afterHook, [el]);\r\n }\r\n if (hooks.delayedLeave) {\r\n hooks.delayedLeave();\r\n }\r\n el._enterCb = undefined;\r\n });\r\n if (hook) {\r\n hook(el, done);\r\n if (hook.length <= 1) {\r\n done();\r\n }\r\n }\r\n else {\r\n done();\r\n }\r\n },\r\n leave(el, remove) {\r\n const key = String(vnode.key);\r\n if (el._enterCb) {\r\n el._enterCb(true /* cancelled */);\r\n }\r\n if (state.isUnmounting) {\r\n return remove();\r\n }\r\n callHook(onBeforeLeave, [el]);\r\n let called = false;\r\n const done = (el._leaveCb = (cancelled) => {\r\n if (called)\r\n return;\r\n called = true;\r\n remove();\r\n if (cancelled) {\r\n callHook(onLeaveCancelled, [el]);\r\n }\r\n else {\r\n callHook(onAfterLeave, [el]);\r\n }\r\n el._leaveCb = undefined;\r\n if (leavingVNodesCache[key] === vnode) {\r\n delete leavingVNodesCache[key];\r\n }\r\n });\r\n leavingVNodesCache[key] = vnode;\r\n if (onLeave) {\r\n onLeave(el, done);\r\n if (onLeave.length <= 1) {\r\n done();\r\n }\r\n }\r\n else {\r\n done();\r\n }\r\n },\r\n clone(vnode) {\r\n return resolveTransitionHooks(vnode, props, state, instance);\r\n }\r\n };\r\n return hooks;\r\n}\r\n// the placeholder really only handles one special case: KeepAlive\r\n// in the case of a KeepAlive in a leave phase we need to return a KeepAlive\r\n// placeholder with empty content to avoid the KeepAlive instance from being\r\n// unmounted.\r\nfunction emptyPlaceholder(vnode) {\r\n if (isKeepAlive(vnode)) {\r\n vnode = cloneVNode(vnode);\r\n vnode.children = null;\r\n return vnode;\r\n }\r\n}\r\nfunction getKeepAliveChild(vnode) {\r\n return isKeepAlive(vnode)\r\n ? vnode.children\r\n ? vnode.children[0]\r\n : undefined\r\n : vnode;\r\n}\r\nfunction setTransitionHooks(vnode, hooks) {\r\n if (vnode.shapeFlag & 6 /* COMPONENT */ && vnode.component) {\r\n setTransitionHooks(vnode.component.subTree, hooks);\r\n }\r\n else if (vnode.shapeFlag & 128 /* SUSPENSE */) {\r\n vnode.ssContent.transition = hooks.clone(vnode.ssContent);\r\n vnode.ssFallback.transition = hooks.clone(vnode.ssFallback);\r\n }\r\n else {\r\n vnode.transition = hooks;\r\n }\r\n}\r\nfunction getTransitionRawChildren(children, keepComment = false) {\r\n let ret = [];\r\n let keyedFragmentCount = 0;\r\n for (let i = 0; i < children.length; i++) {\r\n const child = children[i];\r\n // handle fragment children case, e.g. v-for\r\n if (child.type === Fragment) {\r\n if (child.patchFlag & 128 /* KEYED_FRAGMENT */)\r\n keyedFragmentCount++;\r\n ret = ret.concat(getTransitionRawChildren(child.children, keepComment));\r\n }\r\n // comment placeholders should be skipped, e.g. v-if\r\n else if (keepComment || child.type !== Comment) {\r\n ret.push(child);\r\n }\r\n }\r\n // #1126 if a transition children list contains multiple sub fragments, these\r\n // fragments will be merged into a flat children array. Since each v-for\r\n // fragment may contain different static bindings inside, we need to de-op\r\n // these children to force full diffs to ensure correct behavior.\r\n if (keyedFragmentCount > 1) {\r\n for (let i = 0; i < ret.length; i++) {\r\n ret[i].patchFlag = -2 /* BAIL */;\r\n }\r\n }\r\n return ret;\r\n}\n\n// implementation, close to no-op\r\nfunction defineComponent(options) {\r\n return isFunction$1(options) ? { setup: options, name: options.name } : options;\r\n}\n\nconst isAsyncWrapper = (i) => !!i.type.__asyncLoader;\r\nfunction defineAsyncComponent(source) {\r\n if (isFunction$1(source)) {\r\n source = { loader: source };\r\n }\r\n const { loader, loadingComponent, errorComponent, delay = 200, timeout, // undefined = never times out\r\n suspensible = true, onError: userOnError } = source;\r\n let pendingRequest = null;\r\n let resolvedComp;\r\n let retries = 0;\r\n const retry = () => {\r\n retries++;\r\n pendingRequest = null;\r\n return load();\r\n };\r\n const load = () => {\r\n let thisRequest;\r\n return (pendingRequest ||\r\n (thisRequest = pendingRequest =\r\n loader()\r\n .catch(err => {\r\n err = err instanceof Error ? err : new Error(String(err));\r\n if (userOnError) {\r\n return new Promise((resolve, reject) => {\r\n const userRetry = () => resolve(retry());\r\n const userFail = () => reject(err);\r\n userOnError(err, userRetry, userFail, retries + 1);\r\n });\r\n }\r\n else {\r\n throw err;\r\n }\r\n })\r\n .then((comp) => {\r\n if (thisRequest !== pendingRequest && pendingRequest) {\r\n return pendingRequest;\r\n }\r\n if ((process.env.NODE_ENV !== 'production') && !comp) {\r\n warn(`Async component loader resolved to undefined. ` +\r\n `If you are using retry(), make sure to return its return value.`);\r\n }\r\n // interop module default\r\n if (comp &&\r\n (comp.__esModule || comp[Symbol.toStringTag] === 'Module')) {\r\n comp = comp.default;\r\n }\r\n if ((process.env.NODE_ENV !== 'production') && comp && !isObject$1(comp) && !isFunction$1(comp)) {\r\n throw new Error(`Invalid async component load result: ${comp}`);\r\n }\r\n resolvedComp = comp;\r\n return comp;\r\n })));\r\n };\r\n return defineComponent({\r\n name: 'AsyncComponentWrapper',\r\n __asyncLoader: load,\r\n get __asyncResolved() {\r\n return resolvedComp;\r\n },\r\n setup() {\r\n const instance = currentInstance;\r\n // already resolved\r\n if (resolvedComp) {\r\n return () => createInnerComp(resolvedComp, instance);\r\n }\r\n const onError = (err) => {\r\n pendingRequest = null;\r\n handleError(err, instance, 13 /* ASYNC_COMPONENT_LOADER */, !errorComponent /* do not throw in dev if user provided error component */);\r\n };\r\n // suspense-controlled or SSR.\r\n if ((suspensible && instance.suspense) ||\r\n (false )) {\r\n return load()\r\n .then(comp => {\r\n return () => createInnerComp(comp, instance);\r\n })\r\n .catch(err => {\r\n onError(err);\r\n return () => errorComponent\r\n ? createVNode(errorComponent, {\r\n error: err\r\n })\r\n : null;\r\n });\r\n }\r\n const loaded = ref(false);\r\n const error = ref();\r\n const delayed = ref(!!delay);\r\n if (delay) {\r\n setTimeout(() => {\r\n delayed.value = false;\r\n }, delay);\r\n }\r\n if (timeout != null) {\r\n setTimeout(() => {\r\n if (!loaded.value && !error.value) {\r\n const err = new Error(`Async component timed out after ${timeout}ms.`);\r\n onError(err);\r\n error.value = err;\r\n }\r\n }, timeout);\r\n }\r\n load()\r\n .then(() => {\r\n loaded.value = true;\r\n if (instance.parent && isKeepAlive(instance.parent.vnode)) {\r\n // parent is keep-alive, force update so the loaded component's\r\n // name is taken into account\r\n queueJob(instance.parent.update);\r\n }\r\n })\r\n .catch(err => {\r\n onError(err);\r\n error.value = err;\r\n });\r\n return () => {\r\n if (loaded.value && resolvedComp) {\r\n return createInnerComp(resolvedComp, instance);\r\n }\r\n else if (error.value && errorComponent) {\r\n return createVNode(errorComponent, {\r\n error: error.value\r\n });\r\n }\r\n else if (loadingComponent && !delayed.value) {\r\n return createVNode(loadingComponent);\r\n }\r\n };\r\n }\r\n });\r\n}\r\nfunction createInnerComp(comp, { vnode: { ref, props, children } }) {\r\n const vnode = createVNode(comp, props, children);\r\n // ensure inner component inherits the async wrapper's ref owner\r\n vnode.ref = ref;\r\n return vnode;\r\n}\n\nconst isKeepAlive = (vnode) => vnode.type.__isKeepAlive;\r\nconst KeepAliveImpl = {\r\n name: `KeepAlive`,\r\n // Marker for special handling inside the renderer. We are not using a ===\r\n // check directly on KeepAlive in the renderer, because importing it directly\r\n // would prevent it from being tree-shaken.\r\n __isKeepAlive: true,\r\n props: {\r\n include: [String, RegExp, Array],\r\n exclude: [String, RegExp, Array],\r\n max: [String, Number]\r\n },\r\n setup(props, { slots }) {\r\n const instance = getCurrentInstance();\r\n // KeepAlive communicates with the instantiated renderer via the\r\n // ctx where the renderer passes in its internals,\r\n // and the KeepAlive instance exposes activate/deactivate implementations.\r\n // The whole point of this is to avoid importing KeepAlive directly in the\r\n // renderer to facilitate tree-shaking.\r\n const sharedContext = instance.ctx;\r\n // if the internal renderer is not registered, it indicates that this is server-side rendering,\r\n // for KeepAlive, we just need to render its children\r\n if (!sharedContext.renderer) {\r\n return slots.default;\r\n }\r\n const cache = new Map();\r\n const keys = new Set();\r\n let current = null;\r\n if ((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) {\r\n instance.__v_cache = cache;\r\n }\r\n const parentSuspense = instance.suspense;\r\n const { renderer: { p: patch, m: move, um: _unmount, o: { createElement } } } = sharedContext;\r\n const storageContainer = createElement('div');\r\n sharedContext.activate = (vnode, container, anchor, isSVG, optimized) => {\r\n const instance = vnode.component;\r\n move(vnode, container, anchor, 0 /* ENTER */, parentSuspense);\r\n // in case props have changed\r\n patch(instance.vnode, vnode, container, anchor, instance, parentSuspense, isSVG, vnode.slotScopeIds, optimized);\r\n queuePostRenderEffect(() => {\r\n instance.isDeactivated = false;\r\n if (instance.a) {\r\n invokeArrayFns(instance.a);\r\n }\r\n const vnodeHook = vnode.props && vnode.props.onVnodeMounted;\r\n if (vnodeHook) {\r\n invokeVNodeHook(vnodeHook, instance.parent, vnode);\r\n }\r\n }, parentSuspense);\r\n if ((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) {\r\n // Update components tree\r\n devtoolsComponentAdded(instance);\r\n }\r\n };\r\n sharedContext.deactivate = (vnode) => {\r\n const instance = vnode.component;\r\n move(vnode, storageContainer, null, 1 /* LEAVE */, parentSuspense);\r\n queuePostRenderEffect(() => {\r\n if (instance.da) {\r\n invokeArrayFns(instance.da);\r\n }\r\n const vnodeHook = vnode.props && vnode.props.onVnodeUnmounted;\r\n if (vnodeHook) {\r\n invokeVNodeHook(vnodeHook, instance.parent, vnode);\r\n }\r\n instance.isDeactivated = true;\r\n }, parentSuspense);\r\n if ((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) {\r\n // Update components tree\r\n devtoolsComponentAdded(instance);\r\n }\r\n };\r\n function unmount(vnode) {\r\n // reset the shapeFlag so it can be properly unmounted\r\n resetShapeFlag(vnode);\r\n _unmount(vnode, instance, parentSuspense);\r\n }\r\n function pruneCache(filter) {\r\n cache.forEach((vnode, key) => {\r\n const name = getComponentName(vnode.type);\r\n if (name && (!filter || !filter(name))) {\r\n pruneCacheEntry(key);\r\n }\r\n });\r\n }\r\n function pruneCacheEntry(key) {\r\n const cached = cache.get(key);\r\n if (!current || cached.type !== current.type) {\r\n unmount(cached);\r\n }\r\n else if (current) {\r\n // current active instance should no longer be kept-alive.\r\n // we can't unmount it now but it might be later, so reset its flag now.\r\n resetShapeFlag(current);\r\n }\r\n cache.delete(key);\r\n keys.delete(key);\r\n }\r\n // prune cache on include/exclude prop change\r\n watch(() => [props.include, props.exclude], ([include, exclude]) => {\r\n include && pruneCache(name => matches(include, name));\r\n exclude && pruneCache(name => !matches(exclude, name));\r\n }, \r\n // prune post-render after `current` has been updated\r\n { flush: 'post', deep: true });\r\n // cache sub tree after render\r\n let pendingCacheKey = null;\r\n const cacheSubtree = () => {\r\n // fix #1621, the pendingCacheKey could be 0\r\n if (pendingCacheKey != null) {\r\n cache.set(pendingCacheKey, getInnerChild(instance.subTree));\r\n }\r\n };\r\n onMounted(cacheSubtree);\r\n onUpdated(cacheSubtree);\r\n onBeforeUnmount(() => {\r\n cache.forEach(cached => {\r\n const { subTree, suspense } = instance;\r\n const vnode = getInnerChild(subTree);\r\n if (cached.type === vnode.type) {\r\n // current instance will be unmounted as part of keep-alive's unmount\r\n resetShapeFlag(vnode);\r\n // but invoke its deactivated hook here\r\n const da = vnode.component.da;\r\n da && queuePostRenderEffect(da, suspense);\r\n return;\r\n }\r\n unmount(cached);\r\n });\r\n });\r\n return () => {\r\n pendingCacheKey = null;\r\n if (!slots.default) {\r\n return null;\r\n }\r\n const children = slots.default();\r\n const rawVNode = children[0];\r\n if (children.length > 1) {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n warn(`KeepAlive should contain exactly one component child.`);\r\n }\r\n current = null;\r\n return children;\r\n }\r\n else if (!isVNode(rawVNode) ||\r\n (!(rawVNode.shapeFlag & 4 /* STATEFUL_COMPONENT */) &&\r\n !(rawVNode.shapeFlag & 128 /* SUSPENSE */))) {\r\n current = null;\r\n return rawVNode;\r\n }\r\n let vnode = getInnerChild(rawVNode);\r\n const comp = vnode.type;\r\n // for async components, name check should be based in its loaded\r\n // inner component if available\r\n const name = getComponentName(isAsyncWrapper(vnode)\r\n ? vnode.type.__asyncResolved || {}\r\n : comp);\r\n const { include, exclude, max } = props;\r\n if ((include && (!name || !matches(include, name))) ||\r\n (exclude && name && matches(exclude, name))) {\r\n current = vnode;\r\n return rawVNode;\r\n }\r\n const key = vnode.key == null ? comp : vnode.key;\r\n const cachedVNode = cache.get(key);\r\n // clone vnode if it's reused because we are going to mutate it\r\n if (vnode.el) {\r\n vnode = cloneVNode(vnode);\r\n if (rawVNode.shapeFlag & 128 /* SUSPENSE */) {\r\n rawVNode.ssContent = vnode;\r\n }\r\n }\r\n // #1513 it's possible for the returned vnode to be cloned due to attr\r\n // fallthrough or scopeId, so the vnode here may not be the final vnode\r\n // that is mounted. Instead of caching it directly, we store the pending\r\n // key and cache `instance.subTree` (the normalized vnode) in\r\n // beforeMount/beforeUpdate hooks.\r\n pendingCacheKey = key;\r\n if (cachedVNode) {\r\n // copy over mounted state\r\n vnode.el = cachedVNode.el;\r\n vnode.component = cachedVNode.component;\r\n if (vnode.transition) {\r\n // recursively update transition hooks on subTree\r\n setTransitionHooks(vnode, vnode.transition);\r\n }\r\n // avoid vnode being mounted as fresh\r\n vnode.shapeFlag |= 512 /* COMPONENT_KEPT_ALIVE */;\r\n // make this key the freshest\r\n keys.delete(key);\r\n keys.add(key);\r\n }\r\n else {\r\n keys.add(key);\r\n // prune oldest entry\r\n if (max && keys.size > parseInt(max, 10)) {\r\n pruneCacheEntry(keys.values().next().value);\r\n }\r\n }\r\n // avoid vnode being unmounted\r\n vnode.shapeFlag |= 256 /* COMPONENT_SHOULD_KEEP_ALIVE */;\r\n current = vnode;\r\n return rawVNode;\r\n };\r\n }\r\n};\r\n// export the public type for h/tsx inference\r\n// also to avoid inline import() in generated d.ts files\r\nconst KeepAlive = KeepAliveImpl;\r\nfunction matches(pattern, name) {\r\n if (isArray(pattern)) {\r\n return pattern.some((p) => matches(p, name));\r\n }\r\n else if (isString(pattern)) {\r\n return pattern.split(',').indexOf(name) > -1;\r\n }\r\n else if (pattern.test) {\r\n return pattern.test(name);\r\n }\r\n /* istanbul ignore next */\r\n return false;\r\n}\r\nfunction onActivated(hook, target) {\r\n registerKeepAliveHook(hook, \"a\" /* ACTIVATED */, target);\r\n}\r\nfunction onDeactivated(hook, target) {\r\n registerKeepAliveHook(hook, \"da\" /* DEACTIVATED */, target);\r\n}\r\nfunction registerKeepAliveHook(hook, type, target = currentInstance) {\r\n // cache the deactivate branch check wrapper for injected hooks so the same\r\n // hook can be properly deduped by the scheduler. \"__wdc\" stands for \"with\r\n // deactivation check\".\r\n const wrappedHook = hook.__wdc ||\r\n (hook.__wdc = () => {\r\n // only fire the hook if the target instance is NOT in a deactivated branch.\r\n let current = target;\r\n while (current) {\r\n if (current.isDeactivated) {\r\n return;\r\n }\r\n current = current.parent;\r\n }\r\n hook();\r\n });\r\n injectHook(type, wrappedHook, target);\r\n // In addition to registering it on the target instance, we walk up the parent\r\n // chain and register it on all ancestor instances that are keep-alive roots.\r\n // This avoids the need to walk the entire component tree when invoking these\r\n // hooks, and more importantly, avoids the need to track child components in\r\n // arrays.\r\n if (target) {\r\n let current = target.parent;\r\n while (current && current.parent) {\r\n if (isKeepAlive(current.parent.vnode)) {\r\n injectToKeepAliveRoot(wrappedHook, type, target, current);\r\n }\r\n current = current.parent;\r\n }\r\n }\r\n}\r\nfunction injectToKeepAliveRoot(hook, type, target, keepAliveRoot) {\r\n // injectHook wraps the original for error handling, so make sure to remove\r\n // the wrapped version.\r\n const injected = injectHook(type, hook, keepAliveRoot, true /* prepend */);\r\n onUnmounted(() => {\r\n remove(keepAliveRoot[type], injected);\r\n }, target);\r\n}\r\nfunction resetShapeFlag(vnode) {\r\n let shapeFlag = vnode.shapeFlag;\r\n if (shapeFlag & 256 /* COMPONENT_SHOULD_KEEP_ALIVE */) {\r\n shapeFlag -= 256 /* COMPONENT_SHOULD_KEEP_ALIVE */;\r\n }\r\n if (shapeFlag & 512 /* COMPONENT_KEPT_ALIVE */) {\r\n shapeFlag -= 512 /* COMPONENT_KEPT_ALIVE */;\r\n }\r\n vnode.shapeFlag = shapeFlag;\r\n}\r\nfunction getInnerChild(vnode) {\r\n return vnode.shapeFlag & 128 /* SUSPENSE */ ? vnode.ssContent : vnode;\r\n}\n\nfunction injectHook(type, hook, target = currentInstance, prepend = false) {\r\n if (target) {\r\n const hooks = target[type] || (target[type] = []);\r\n // cache the error handling wrapper for injected hooks so the same hook\r\n // can be properly deduped by the scheduler. \"__weh\" stands for \"with error\r\n // handling\".\r\n const wrappedHook = hook.__weh ||\r\n (hook.__weh = (...args) => {\r\n if (target.isUnmounted) {\r\n return;\r\n }\r\n // disable tracking inside all lifecycle hooks\r\n // since they can potentially be called inside effects.\r\n pauseTracking();\r\n // Set currentInstance during hook invocation.\r\n // This assumes the hook does not synchronously trigger other hooks, which\r\n // can only be false when the user does something really funky.\r\n setCurrentInstance(target);\r\n const res = callWithAsyncErrorHandling(hook, target, type, args);\r\n unsetCurrentInstance();\r\n resetTracking();\r\n return res;\r\n });\r\n if (prepend) {\r\n hooks.unshift(wrappedHook);\r\n }\r\n else {\r\n hooks.push(wrappedHook);\r\n }\r\n return wrappedHook;\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n const apiName = toHandlerKey(ErrorTypeStrings[type].replace(/ hook$/, ''));\r\n warn(`${apiName} is called when there is no active component instance to be ` +\r\n `associated with. ` +\r\n `Lifecycle injection APIs can only be used during execution of setup().` +\r\n (` If you are using async setup(), make sure to register lifecycle ` +\r\n `hooks before the first await statement.`\r\n ));\r\n }\r\n}\r\nconst createHook = (lifecycle) => (hook, target = currentInstance) => \r\n// post-create lifecycle registrations are noops during SSR (except for serverPrefetch)\r\n(!isInSSRComponentSetup || lifecycle === \"sp\" /* SERVER_PREFETCH */) &&\r\n injectHook(lifecycle, hook, target);\r\nconst onBeforeMount = createHook(\"bm\" /* BEFORE_MOUNT */);\r\nconst onMounted = createHook(\"m\" /* MOUNTED */);\r\nconst onBeforeUpdate = createHook(\"bu\" /* BEFORE_UPDATE */);\r\nconst onUpdated = createHook(\"u\" /* UPDATED */);\r\nconst onBeforeUnmount = createHook(\"bum\" /* BEFORE_UNMOUNT */);\r\nconst onUnmounted = createHook(\"um\" /* UNMOUNTED */);\r\nconst onServerPrefetch = createHook(\"sp\" /* SERVER_PREFETCH */);\r\nconst onRenderTriggered = createHook(\"rtg\" /* RENDER_TRIGGERED */);\r\nconst onRenderTracked = createHook(\"rtc\" /* RENDER_TRACKED */);\r\nfunction onErrorCaptured(hook, target = currentInstance) {\r\n injectHook(\"ec\" /* ERROR_CAPTURED */, hook, target);\r\n}\n\nfunction createDuplicateChecker() {\r\n const cache = Object.create(null);\r\n return (type, key) => {\r\n if (cache[key]) {\r\n warn(`${type} property \"${key}\" is already defined in ${cache[key]}.`);\r\n }\r\n else {\r\n cache[key] = type;\r\n }\r\n };\r\n}\r\nlet shouldCacheAccess = true;\r\nfunction applyOptions(instance) {\r\n const options = resolveMergedOptions(instance);\r\n const publicThis = instance.proxy;\r\n const ctx = instance.ctx;\r\n // do not cache property access on public proxy during state initialization\r\n shouldCacheAccess = false;\r\n // call beforeCreate first before accessing other options since\r\n // the hook may mutate resolved options (#2791)\r\n if (options.beforeCreate) {\r\n callHook(options.beforeCreate, instance, \"bc\" /* BEFORE_CREATE */);\r\n }\r\n const { \r\n // state\r\n data: dataOptions, computed: computedOptions, methods, watch: watchOptions, provide: provideOptions, inject: injectOptions, \r\n // lifecycle\r\n created, beforeMount, mounted, beforeUpdate, updated, activated, deactivated, beforeDestroy, beforeUnmount, destroyed, unmounted, render, renderTracked, renderTriggered, errorCaptured, serverPrefetch, \r\n // public API\r\n expose, inheritAttrs, \r\n // assets\r\n components, directives, filters } = options;\r\n const checkDuplicateProperties = (process.env.NODE_ENV !== 'production') ? createDuplicateChecker() : null;\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n const [propsOptions] = instance.propsOptions;\r\n if (propsOptions) {\r\n for (const key in propsOptions) {\r\n checkDuplicateProperties(\"Props\" /* PROPS */, key);\r\n }\r\n }\r\n }\r\n // options initialization order (to be consistent with Vue 2):\r\n // - props (already done outside of this function)\r\n // - inject\r\n // - methods\r\n // - data (deferred since it relies on `this` access)\r\n // - computed\r\n // - watch (deferred since it relies on `this` access)\r\n if (injectOptions) {\r\n resolveInjections(injectOptions, ctx, checkDuplicateProperties, instance.appContext.config.unwrapInjectedRef);\r\n }\r\n if (methods) {\r\n for (const key in methods) {\r\n const methodHandler = methods[key];\r\n if (isFunction$1(methodHandler)) {\r\n // In dev mode, we use the `createRenderContext` function to define\r\n // methods to the proxy target, and those are read-only but\r\n // reconfigurable, so it needs to be redefined here\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n Object.defineProperty(ctx, key, {\r\n value: methodHandler.bind(publicThis),\r\n configurable: true,\r\n enumerable: true,\r\n writable: true\r\n });\r\n }\r\n else {\r\n ctx[key] = methodHandler.bind(publicThis);\r\n }\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n checkDuplicateProperties(\"Methods\" /* METHODS */, key);\r\n }\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n warn(`Method \"${key}\" has type \"${typeof methodHandler}\" in the component definition. ` +\r\n `Did you reference the function correctly?`);\r\n }\r\n }\r\n }\r\n if (dataOptions) {\r\n if ((process.env.NODE_ENV !== 'production') && !isFunction$1(dataOptions)) {\r\n warn(`The data option must be a function. ` +\r\n `Plain object usage is no longer supported.`);\r\n }\r\n const data = dataOptions.call(publicThis, publicThis);\r\n if ((process.env.NODE_ENV !== 'production') && isPromise$1(data)) {\r\n warn(`data() returned a Promise - note data() cannot be async; If you ` +\r\n `intend to perform data fetching before component renders, use ` +\r\n `async setup() + .`);\r\n }\r\n if (!isObject$1(data)) {\r\n (process.env.NODE_ENV !== 'production') && warn(`data() should return an object.`);\r\n }\r\n else {\r\n instance.data = reactive(data);\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n for (const key in data) {\r\n checkDuplicateProperties(\"Data\" /* DATA */, key);\r\n // expose data on ctx during dev\r\n if (key[0] !== '$' && key[0] !== '_') {\r\n Object.defineProperty(ctx, key, {\r\n configurable: true,\r\n enumerable: true,\r\n get: () => data[key],\r\n set: NOOP\r\n });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n // state initialization complete at this point - start caching access\r\n shouldCacheAccess = true;\r\n if (computedOptions) {\r\n for (const key in computedOptions) {\r\n const opt = computedOptions[key];\r\n const get = isFunction$1(opt)\r\n ? opt.bind(publicThis, publicThis)\r\n : isFunction$1(opt.get)\r\n ? opt.get.bind(publicThis, publicThis)\r\n : NOOP;\r\n if ((process.env.NODE_ENV !== 'production') && get === NOOP) {\r\n warn(`Computed property \"${key}\" has no getter.`);\r\n }\r\n const set = !isFunction$1(opt) && isFunction$1(opt.set)\r\n ? opt.set.bind(publicThis)\r\n : (process.env.NODE_ENV !== 'production')\r\n ? () => {\r\n warn(`Write operation failed: computed property \"${key}\" is readonly.`);\r\n }\r\n : NOOP;\r\n const c = computed({\r\n get,\r\n set\r\n });\r\n Object.defineProperty(ctx, key, {\r\n enumerable: true,\r\n configurable: true,\r\n get: () => c.value,\r\n set: v => (c.value = v)\r\n });\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n checkDuplicateProperties(\"Computed\" /* COMPUTED */, key);\r\n }\r\n }\r\n }\r\n if (watchOptions) {\r\n for (const key in watchOptions) {\r\n createWatcher(watchOptions[key], ctx, publicThis, key);\r\n }\r\n }\r\n if (provideOptions) {\r\n const provides = isFunction$1(provideOptions)\r\n ? provideOptions.call(publicThis)\r\n : provideOptions;\r\n Reflect.ownKeys(provides).forEach(key => {\r\n provide(key, provides[key]);\r\n });\r\n }\r\n if (created) {\r\n callHook(created, instance, \"c\" /* CREATED */);\r\n }\r\n function registerLifecycleHook(register, hook) {\r\n if (isArray(hook)) {\r\n hook.forEach(_hook => register(_hook.bind(publicThis)));\r\n }\r\n else if (hook) {\r\n register(hook.bind(publicThis));\r\n }\r\n }\r\n registerLifecycleHook(onBeforeMount, beforeMount);\r\n registerLifecycleHook(onMounted, mounted);\r\n registerLifecycleHook(onBeforeUpdate, beforeUpdate);\r\n registerLifecycleHook(onUpdated, updated);\r\n registerLifecycleHook(onActivated, activated);\r\n registerLifecycleHook(onDeactivated, deactivated);\r\n registerLifecycleHook(onErrorCaptured, errorCaptured);\r\n registerLifecycleHook(onRenderTracked, renderTracked);\r\n registerLifecycleHook(onRenderTriggered, renderTriggered);\r\n registerLifecycleHook(onBeforeUnmount, beforeUnmount);\r\n registerLifecycleHook(onUnmounted, unmounted);\r\n registerLifecycleHook(onServerPrefetch, serverPrefetch);\r\n if (isArray(expose)) {\r\n if (expose.length) {\r\n const exposed = instance.exposed || (instance.exposed = {});\r\n expose.forEach(key => {\r\n Object.defineProperty(exposed, key, {\r\n get: () => publicThis[key],\r\n set: val => (publicThis[key] = val)\r\n });\r\n });\r\n }\r\n else if (!instance.exposed) {\r\n instance.exposed = {};\r\n }\r\n }\r\n // options that are handled when creating the instance but also need to be\r\n // applied from mixins\r\n if (render && instance.render === NOOP) {\r\n instance.render = render;\r\n }\r\n if (inheritAttrs != null) {\r\n instance.inheritAttrs = inheritAttrs;\r\n }\r\n // asset options.\r\n if (components)\r\n instance.components = components;\r\n if (directives)\r\n instance.directives = directives;\r\n}\r\nfunction resolveInjections(injectOptions, ctx, checkDuplicateProperties = NOOP, unwrapRef = false) {\r\n if (isArray(injectOptions)) {\r\n injectOptions = normalizeInject(injectOptions);\r\n }\r\n for (const key in injectOptions) {\r\n const opt = injectOptions[key];\r\n let injected;\r\n if (isObject$1(opt)) {\r\n if ('default' in opt) {\r\n injected = inject(opt.from || key, opt.default, true /* treat default function as factory */);\r\n }\r\n else {\r\n injected = inject(opt.from || key);\r\n }\r\n }\r\n else {\r\n injected = inject(opt);\r\n }\r\n if (isRef(injected)) {\r\n // TODO remove the check in 3.3\r\n if (unwrapRef) {\r\n Object.defineProperty(ctx, key, {\r\n enumerable: true,\r\n configurable: true,\r\n get: () => injected.value,\r\n set: v => (injected.value = v)\r\n });\r\n }\r\n else {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n warn(`injected property \"${key}\" is a ref and will be auto-unwrapped ` +\r\n `and no longer needs \\`.value\\` in the next minor release. ` +\r\n `To opt-in to the new behavior now, ` +\r\n `set \\`app.config.unwrapInjectedRef = true\\` (this config is ` +\r\n `temporary and will not be needed in the future.)`);\r\n }\r\n ctx[key] = injected;\r\n }\r\n }\r\n else {\r\n ctx[key] = injected;\r\n }\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n checkDuplicateProperties(\"Inject\" /* INJECT */, key);\r\n }\r\n }\r\n}\r\nfunction callHook(hook, instance, type) {\r\n callWithAsyncErrorHandling(isArray(hook)\r\n ? hook.map(h => h.bind(instance.proxy))\r\n : hook.bind(instance.proxy), instance, type);\r\n}\r\nfunction createWatcher(raw, ctx, publicThis, key) {\r\n const getter = key.includes('.')\r\n ? createPathGetter(publicThis, key)\r\n : () => publicThis[key];\r\n if (isString(raw)) {\r\n const handler = ctx[raw];\r\n if (isFunction$1(handler)) {\r\n watch(getter, handler);\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n warn(`Invalid watch handler specified by key \"${raw}\"`, handler);\r\n }\r\n }\r\n else if (isFunction$1(raw)) {\r\n watch(getter, raw.bind(publicThis));\r\n }\r\n else if (isObject$1(raw)) {\r\n if (isArray(raw)) {\r\n raw.forEach(r => createWatcher(r, ctx, publicThis, key));\r\n }\r\n else {\r\n const handler = isFunction$1(raw.handler)\r\n ? raw.handler.bind(publicThis)\r\n : ctx[raw.handler];\r\n if (isFunction$1(handler)) {\r\n watch(getter, handler, raw);\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n warn(`Invalid watch handler specified by key \"${raw.handler}\"`, handler);\r\n }\r\n }\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n warn(`Invalid watch option: \"${key}\"`, raw);\r\n }\r\n}\r\n/**\r\n * Resolve merged options and cache it on the component.\r\n * This is done only once per-component since the merging does not involve\r\n * instances.\r\n */\r\nfunction resolveMergedOptions(instance) {\r\n const base = instance.type;\r\n const { mixins, extends: extendsOptions } = base;\r\n const { mixins: globalMixins, optionsCache: cache, config: { optionMergeStrategies } } = instance.appContext;\r\n const cached = cache.get(base);\r\n let resolved;\r\n if (cached) {\r\n resolved = cached;\r\n }\r\n else if (!globalMixins.length && !mixins && !extendsOptions) {\r\n {\r\n resolved = base;\r\n }\r\n }\r\n else {\r\n resolved = {};\r\n if (globalMixins.length) {\r\n globalMixins.forEach(m => mergeOptions(resolved, m, optionMergeStrategies, true));\r\n }\r\n mergeOptions(resolved, base, optionMergeStrategies);\r\n }\r\n cache.set(base, resolved);\r\n return resolved;\r\n}\r\nfunction mergeOptions(to, from, strats, asMixin = false) {\r\n const { mixins, extends: extendsOptions } = from;\r\n if (extendsOptions) {\r\n mergeOptions(to, extendsOptions, strats, true);\r\n }\r\n if (mixins) {\r\n mixins.forEach((m) => mergeOptions(to, m, strats, true));\r\n }\r\n for (const key in from) {\r\n if (asMixin && key === 'expose') {\r\n (process.env.NODE_ENV !== 'production') &&\r\n warn(`\"expose\" option is ignored when declared in mixins or extends. ` +\r\n `It should only be declared in the base component itself.`);\r\n }\r\n else {\r\n const strat = internalOptionMergeStrats[key] || (strats && strats[key]);\r\n to[key] = strat ? strat(to[key], from[key]) : from[key];\r\n }\r\n }\r\n return to;\r\n}\r\nconst internalOptionMergeStrats = {\r\n data: mergeDataFn,\r\n props: mergeObjectOptions,\r\n emits: mergeObjectOptions,\r\n // objects\r\n methods: mergeObjectOptions,\r\n computed: mergeObjectOptions,\r\n // lifecycle\r\n beforeCreate: mergeAsArray,\r\n created: mergeAsArray,\r\n beforeMount: mergeAsArray,\r\n mounted: mergeAsArray,\r\n beforeUpdate: mergeAsArray,\r\n updated: mergeAsArray,\r\n beforeDestroy: mergeAsArray,\r\n beforeUnmount: mergeAsArray,\r\n destroyed: mergeAsArray,\r\n unmounted: mergeAsArray,\r\n activated: mergeAsArray,\r\n deactivated: mergeAsArray,\r\n errorCaptured: mergeAsArray,\r\n serverPrefetch: mergeAsArray,\r\n // assets\r\n components: mergeObjectOptions,\r\n directives: mergeObjectOptions,\r\n // watch\r\n watch: mergeWatchOptions,\r\n // provide / inject\r\n provide: mergeDataFn,\r\n inject: mergeInject\r\n};\r\nfunction mergeDataFn(to, from) {\r\n if (!from) {\r\n return to;\r\n }\r\n if (!to) {\r\n return from;\r\n }\r\n return function mergedDataFn() {\r\n return (extend)(isFunction$1(to) ? to.call(this, this) : to, isFunction$1(from) ? from.call(this, this) : from);\r\n };\r\n}\r\nfunction mergeInject(to, from) {\r\n return mergeObjectOptions(normalizeInject(to), normalizeInject(from));\r\n}\r\nfunction normalizeInject(raw) {\r\n if (isArray(raw)) {\r\n const res = {};\r\n for (let i = 0; i < raw.length; i++) {\r\n res[raw[i]] = raw[i];\r\n }\r\n return res;\r\n }\r\n return raw;\r\n}\r\nfunction mergeAsArray(to, from) {\r\n return to ? [...new Set([].concat(to, from))] : from;\r\n}\r\nfunction mergeObjectOptions(to, from) {\r\n return to ? extend(extend(Object.create(null), to), from) : from;\r\n}\r\nfunction mergeWatchOptions(to, from) {\r\n if (!to)\r\n return from;\r\n if (!from)\r\n return to;\r\n const merged = extend(Object.create(null), to);\r\n for (const key in from) {\r\n merged[key] = mergeAsArray(to[key], from[key]);\r\n }\r\n return merged;\r\n}\n\nfunction initProps(instance, rawProps, isStateful, // result of bitwise flag comparison\r\nisSSR = false) {\r\n const props = {};\r\n const attrs = {};\r\n def(attrs, InternalObjectKey, 1);\r\n instance.propsDefaults = Object.create(null);\r\n setFullProps(instance, rawProps, props, attrs);\r\n // ensure all declared prop keys are present\r\n for (const key in instance.propsOptions[0]) {\r\n if (!(key in props)) {\r\n props[key] = undefined;\r\n }\r\n }\r\n // validation\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n validateProps(rawProps || {}, props, instance);\r\n }\r\n if (isStateful) {\r\n // stateful\r\n instance.props = isSSR ? props : shallowReactive(props);\r\n }\r\n else {\r\n if (!instance.type.props) {\r\n // functional w/ optional props, props === attrs\r\n instance.props = attrs;\r\n }\r\n else {\r\n // functional w/ declared props\r\n instance.props = props;\r\n }\r\n }\r\n instance.attrs = attrs;\r\n}\r\nfunction updateProps(instance, rawProps, rawPrevProps, optimized) {\r\n const { props, attrs, vnode: { patchFlag } } = instance;\r\n const rawCurrentProps = toRaw(props);\r\n const [options] = instance.propsOptions;\r\n let hasAttrsChanged = false;\r\n if (\r\n // always force full diff in dev\r\n // - #1942 if hmr is enabled with sfc component\r\n // - vite#872 non-sfc component used by sfc component\r\n !((process.env.NODE_ENV !== 'production') &&\r\n (instance.type.__hmrId ||\r\n (instance.parent && instance.parent.type.__hmrId))) &&\r\n (optimized || patchFlag > 0) &&\r\n !(patchFlag & 16 /* FULL_PROPS */)) {\r\n if (patchFlag & 8 /* PROPS */) {\r\n // Compiler-generated props & no keys change, just set the updated\r\n // the props.\r\n const propsToUpdate = instance.vnode.dynamicProps;\r\n for (let i = 0; i < propsToUpdate.length; i++) {\r\n let key = propsToUpdate[i];\r\n // PROPS flag guarantees rawProps to be non-null\r\n const value = rawProps[key];\r\n if (options) {\r\n // attr / props separation was done on init and will be consistent\r\n // in this code path, so just check if attrs have it.\r\n if (hasOwn(attrs, key)) {\r\n if (value !== attrs[key]) {\r\n attrs[key] = value;\r\n hasAttrsChanged = true;\r\n }\r\n }\r\n else {\r\n const camelizedKey = camelize(key);\r\n props[camelizedKey] = resolvePropValue(options, rawCurrentProps, camelizedKey, value, instance, false /* isAbsent */);\r\n }\r\n }\r\n else {\r\n if (value !== attrs[key]) {\r\n attrs[key] = value;\r\n hasAttrsChanged = true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n // full props update.\r\n if (setFullProps(instance, rawProps, props, attrs)) {\r\n hasAttrsChanged = true;\r\n }\r\n // in case of dynamic props, check if we need to delete keys from\r\n // the props object\r\n let kebabKey;\r\n for (const key in rawCurrentProps) {\r\n if (!rawProps ||\r\n // for camelCase\r\n (!hasOwn(rawProps, key) &&\r\n // it's possible the original props was passed in as kebab-case\r\n // and converted to camelCase (#955)\r\n ((kebabKey = hyphenate(key)) === key || !hasOwn(rawProps, kebabKey)))) {\r\n if (options) {\r\n if (rawPrevProps &&\r\n // for camelCase\r\n (rawPrevProps[key] !== undefined ||\r\n // for kebab-case\r\n rawPrevProps[kebabKey] !== undefined)) {\r\n props[key] = resolvePropValue(options, rawCurrentProps, key, undefined, instance, true /* isAbsent */);\r\n }\r\n }\r\n else {\r\n delete props[key];\r\n }\r\n }\r\n }\r\n // in the case of functional component w/o props declaration, props and\r\n // attrs point to the same object so it should already have been updated.\r\n if (attrs !== rawCurrentProps) {\r\n for (const key in attrs) {\r\n if (!rawProps || !hasOwn(rawProps, key)) {\r\n delete attrs[key];\r\n hasAttrsChanged = true;\r\n }\r\n }\r\n }\r\n }\r\n // trigger updates for $attrs in case it's used in component slots\r\n if (hasAttrsChanged) {\r\n trigger(instance, \"set\" /* SET */, '$attrs');\r\n }\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n validateProps(rawProps || {}, props, instance);\r\n }\r\n}\r\nfunction setFullProps(instance, rawProps, props, attrs) {\r\n const [options, needCastKeys] = instance.propsOptions;\r\n let hasAttrsChanged = false;\r\n let rawCastValues;\r\n if (rawProps) {\r\n for (let key in rawProps) {\r\n // key, ref are reserved and never passed down\r\n if (isReservedProp(key)) {\r\n continue;\r\n }\r\n const value = rawProps[key];\r\n // prop option names are camelized during normalization, so to support\r\n // kebab -> camel conversion here we need to camelize the key.\r\n let camelKey;\r\n if (options && hasOwn(options, (camelKey = camelize(key)))) {\r\n if (!needCastKeys || !needCastKeys.includes(camelKey)) {\r\n props[camelKey] = value;\r\n }\r\n else {\r\n (rawCastValues || (rawCastValues = {}))[camelKey] = value;\r\n }\r\n }\r\n else if (!isEmitListener(instance.emitsOptions, key)) {\r\n if (value !== attrs[key]) {\r\n attrs[key] = value;\r\n hasAttrsChanged = true;\r\n }\r\n }\r\n }\r\n }\r\n if (needCastKeys) {\r\n const rawCurrentProps = toRaw(props);\r\n const castValues = rawCastValues || EMPTY_OBJ;\r\n for (let i = 0; i < needCastKeys.length; i++) {\r\n const key = needCastKeys[i];\r\n props[key] = resolvePropValue(options, rawCurrentProps, key, castValues[key], instance, !hasOwn(castValues, key));\r\n }\r\n }\r\n return hasAttrsChanged;\r\n}\r\nfunction resolvePropValue(options, props, key, value, instance, isAbsent) {\r\n const opt = options[key];\r\n if (opt != null) {\r\n const hasDefault = hasOwn(opt, 'default');\r\n // default values\r\n if (hasDefault && value === undefined) {\r\n const defaultValue = opt.default;\r\n if (opt.type !== Function && isFunction$1(defaultValue)) {\r\n const { propsDefaults } = instance;\r\n if (key in propsDefaults) {\r\n value = propsDefaults[key];\r\n }\r\n else {\r\n setCurrentInstance(instance);\r\n value = propsDefaults[key] = defaultValue.call(null, props);\r\n unsetCurrentInstance();\r\n }\r\n }\r\n else {\r\n value = defaultValue;\r\n }\r\n }\r\n // boolean casting\r\n if (opt[0 /* shouldCast */]) {\r\n if (isAbsent && !hasDefault) {\r\n value = false;\r\n }\r\n else if (opt[1 /* shouldCastTrue */] &&\r\n (value === '' || value === hyphenate(key))) {\r\n value = true;\r\n }\r\n }\r\n }\r\n return value;\r\n}\r\nfunction normalizePropsOptions(comp, appContext, asMixin = false) {\r\n const cache = appContext.propsCache;\r\n const cached = cache.get(comp);\r\n if (cached) {\r\n return cached;\r\n }\r\n const raw = comp.props;\r\n const normalized = {};\r\n const needCastKeys = [];\r\n // apply mixin/extends props\r\n let hasExtends = false;\r\n if (__VUE_OPTIONS_API__ && !isFunction$1(comp)) {\r\n const extendProps = (raw) => {\r\n hasExtends = true;\r\n const [props, keys] = normalizePropsOptions(raw, appContext, true);\r\n extend(normalized, props);\r\n if (keys)\r\n needCastKeys.push(...keys);\r\n };\r\n if (!asMixin && appContext.mixins.length) {\r\n appContext.mixins.forEach(extendProps);\r\n }\r\n if (comp.extends) {\r\n extendProps(comp.extends);\r\n }\r\n if (comp.mixins) {\r\n comp.mixins.forEach(extendProps);\r\n }\r\n }\r\n if (!raw && !hasExtends) {\r\n cache.set(comp, EMPTY_ARR);\r\n return EMPTY_ARR;\r\n }\r\n if (isArray(raw)) {\r\n for (let i = 0; i < raw.length; i++) {\r\n if ((process.env.NODE_ENV !== 'production') && !isString(raw[i])) {\r\n warn(`props must be strings when using array syntax.`, raw[i]);\r\n }\r\n const normalizedKey = camelize(raw[i]);\r\n if (validatePropName(normalizedKey)) {\r\n normalized[normalizedKey] = EMPTY_OBJ;\r\n }\r\n }\r\n }\r\n else if (raw) {\r\n if ((process.env.NODE_ENV !== 'production') && !isObject$1(raw)) {\r\n warn(`invalid props options`, raw);\r\n }\r\n for (const key in raw) {\r\n const normalizedKey = camelize(key);\r\n if (validatePropName(normalizedKey)) {\r\n const opt = raw[key];\r\n const prop = (normalized[normalizedKey] =\r\n isArray(opt) || isFunction$1(opt) ? { type: opt } : opt);\r\n if (prop) {\r\n const booleanIndex = getTypeIndex(Boolean, prop.type);\r\n const stringIndex = getTypeIndex(String, prop.type);\r\n prop[0 /* shouldCast */] = booleanIndex > -1;\r\n prop[1 /* shouldCastTrue */] =\r\n stringIndex < 0 || booleanIndex < stringIndex;\r\n // if the prop needs boolean casting or default value\r\n if (booleanIndex > -1 || hasOwn(prop, 'default')) {\r\n needCastKeys.push(normalizedKey);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n const res = [normalized, needCastKeys];\r\n cache.set(comp, res);\r\n return res;\r\n}\r\nfunction validatePropName(key) {\r\n if (key[0] !== '$') {\r\n return true;\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n warn(`Invalid prop name: \"${key}\" is a reserved property.`);\r\n }\r\n return false;\r\n}\r\n// use function string name to check type constructors\r\n// so that it works across vms / iframes.\r\nfunction getType(ctor) {\r\n const match = ctor && ctor.toString().match(/^\\s*function (\\w+)/);\r\n return match ? match[1] : ctor === null ? 'null' : '';\r\n}\r\nfunction isSameType(a, b) {\r\n return getType(a) === getType(b);\r\n}\r\nfunction getTypeIndex(type, expectedTypes) {\r\n if (isArray(expectedTypes)) {\r\n return expectedTypes.findIndex(t => isSameType(t, type));\r\n }\r\n else if (isFunction$1(expectedTypes)) {\r\n return isSameType(expectedTypes, type) ? 0 : -1;\r\n }\r\n return -1;\r\n}\r\n/**\r\n * dev only\r\n */\r\nfunction validateProps(rawProps, props, instance) {\r\n const resolvedValues = toRaw(props);\r\n const options = instance.propsOptions[0];\r\n for (const key in options) {\r\n let opt = options[key];\r\n if (opt == null)\r\n continue;\r\n validateProp(key, resolvedValues[key], opt, !hasOwn(rawProps, key) && !hasOwn(rawProps, hyphenate(key)));\r\n }\r\n}\r\n/**\r\n * dev only\r\n */\r\nfunction validateProp(name, value, prop, isAbsent) {\r\n const { type, required, validator } = prop;\r\n // required!\r\n if (required && isAbsent) {\r\n warn('Missing required prop: \"' + name + '\"');\r\n return;\r\n }\r\n // missing but optional\r\n if (value == null && !prop.required) {\r\n return;\r\n }\r\n // type check\r\n if (type != null && type !== true) {\r\n let isValid = false;\r\n const types = isArray(type) ? type : [type];\r\n const expectedTypes = [];\r\n // value is valid as long as one of the specified types match\r\n for (let i = 0; i < types.length && !isValid; i++) {\r\n const { valid, expectedType } = assertType(value, types[i]);\r\n expectedTypes.push(expectedType || '');\r\n isValid = valid;\r\n }\r\n if (!isValid) {\r\n warn(getInvalidTypeMessage(name, value, expectedTypes));\r\n return;\r\n }\r\n }\r\n // custom validator\r\n if (validator && !validator(value)) {\r\n warn('Invalid prop: custom validator check failed for prop \"' + name + '\".');\r\n }\r\n}\r\nconst isSimpleType = /*#__PURE__*/ makeMap('String,Number,Boolean,Function,Symbol,BigInt');\r\n/**\r\n * dev only\r\n */\r\nfunction assertType(value, type) {\r\n let valid;\r\n const expectedType = getType(type);\r\n if (isSimpleType(expectedType)) {\r\n const t = typeof value;\r\n valid = t === expectedType.toLowerCase();\r\n // for primitive wrapper objects\r\n if (!valid && t === 'object') {\r\n valid = value instanceof type;\r\n }\r\n }\r\n else if (expectedType === 'Object') {\r\n valid = isObject$1(value);\r\n }\r\n else if (expectedType === 'Array') {\r\n valid = isArray(value);\r\n }\r\n else if (expectedType === 'null') {\r\n valid = value === null;\r\n }\r\n else {\r\n valid = value instanceof type;\r\n }\r\n return {\r\n valid,\r\n expectedType\r\n };\r\n}\r\n/**\r\n * dev only\r\n */\r\nfunction getInvalidTypeMessage(name, value, expectedTypes) {\r\n let message = `Invalid prop: type check failed for prop \"${name}\".` +\r\n ` Expected ${expectedTypes.map(capitalize).join(' | ')}`;\r\n const expectedType = expectedTypes[0];\r\n const receivedType = toRawType(value);\r\n const expectedValue = styleValue(value, expectedType);\r\n const receivedValue = styleValue(value, receivedType);\r\n // check if we need to specify expected value\r\n if (expectedTypes.length === 1 &&\r\n isExplicable(expectedType) &&\r\n !isBoolean(expectedType, receivedType)) {\r\n message += ` with value ${expectedValue}`;\r\n }\r\n message += `, got ${receivedType} `;\r\n // check if we need to specify received value\r\n if (isExplicable(receivedType)) {\r\n message += `with value ${receivedValue}.`;\r\n }\r\n return message;\r\n}\r\n/**\r\n * dev only\r\n */\r\nfunction styleValue(value, type) {\r\n if (type === 'String') {\r\n return `\"${value}\"`;\r\n }\r\n else if (type === 'Number') {\r\n return `${Number(value)}`;\r\n }\r\n else {\r\n return `${value}`;\r\n }\r\n}\r\n/**\r\n * dev only\r\n */\r\nfunction isExplicable(type) {\r\n const explicitTypes = ['string', 'number', 'boolean'];\r\n return explicitTypes.some(elem => type.toLowerCase() === elem);\r\n}\r\n/**\r\n * dev only\r\n */\r\nfunction isBoolean(...args) {\r\n return args.some(elem => elem.toLowerCase() === 'boolean');\r\n}\n\nconst isInternalKey = (key) => key[0] === '_' || key === '$stable';\r\nconst normalizeSlotValue = (value) => isArray(value)\r\n ? value.map(normalizeVNode)\r\n : [normalizeVNode(value)];\r\nconst normalizeSlot = (key, rawSlot, ctx) => {\r\n const normalized = withCtx((...args) => {\r\n if ((process.env.NODE_ENV !== 'production') && currentInstance) {\r\n warn(`Slot \"${key}\" invoked outside of the render function: ` +\r\n `this will not track dependencies used in the slot. ` +\r\n `Invoke the slot function inside the render function instead.`);\r\n }\r\n return normalizeSlotValue(rawSlot(...args));\r\n }, ctx);\r\n normalized._c = false;\r\n return normalized;\r\n};\r\nconst normalizeObjectSlots = (rawSlots, slots, instance) => {\r\n const ctx = rawSlots._ctx;\r\n for (const key in rawSlots) {\r\n if (isInternalKey(key))\r\n continue;\r\n const value = rawSlots[key];\r\n if (isFunction$1(value)) {\r\n slots[key] = normalizeSlot(key, value, ctx);\r\n }\r\n else if (value != null) {\r\n if ((process.env.NODE_ENV !== 'production') &&\r\n !(false )) {\r\n warn(`Non-function value encountered for slot \"${key}\". ` +\r\n `Prefer function slots for better performance.`);\r\n }\r\n const normalized = normalizeSlotValue(value);\r\n slots[key] = () => normalized;\r\n }\r\n }\r\n};\r\nconst normalizeVNodeSlots = (instance, children) => {\r\n if ((process.env.NODE_ENV !== 'production') &&\r\n !isKeepAlive(instance.vnode) &&\r\n !(false )) {\r\n warn(`Non-function value encountered for default slot. ` +\r\n `Prefer function slots for better performance.`);\r\n }\r\n const normalized = normalizeSlotValue(children);\r\n instance.slots.default = () => normalized;\r\n};\r\nconst initSlots = (instance, children) => {\r\n if (instance.vnode.shapeFlag & 32 /* SLOTS_CHILDREN */) {\r\n const type = children._;\r\n if (type) {\r\n // users can get the shallow readonly version of the slots object through `this.$slots`,\r\n // we should avoid the proxy object polluting the slots of the internal instance\r\n instance.slots = toRaw(children);\r\n // make compiler marker non-enumerable\r\n def(children, '_', type);\r\n }\r\n else {\r\n normalizeObjectSlots(children, (instance.slots = {}));\r\n }\r\n }\r\n else {\r\n instance.slots = {};\r\n if (children) {\r\n normalizeVNodeSlots(instance, children);\r\n }\r\n }\r\n def(instance.slots, InternalObjectKey, 1);\r\n};\r\nconst updateSlots = (instance, children, optimized) => {\r\n const { vnode, slots } = instance;\r\n let needDeletionCheck = true;\r\n let deletionComparisonTarget = EMPTY_OBJ;\r\n if (vnode.shapeFlag & 32 /* SLOTS_CHILDREN */) {\r\n const type = children._;\r\n if (type) {\r\n // compiled slots.\r\n if ((process.env.NODE_ENV !== 'production') && isHmrUpdating) {\r\n // Parent was HMR updated so slot content may have changed.\r\n // force update slots and mark instance for hmr as well\r\n extend(slots, children);\r\n }\r\n else if (optimized && type === 1 /* STABLE */) {\r\n // compiled AND stable.\r\n // no need to update, and skip stale slots removal.\r\n needDeletionCheck = false;\r\n }\r\n else {\r\n // compiled but dynamic (v-if/v-for on slots) - update slots, but skip\r\n // normalization.\r\n extend(slots, children);\r\n // #2893\r\n // when rendering the optimized slots by manually written render function,\r\n // we need to delete the `slots._` flag if necessary to make subsequent updates reliable,\r\n // i.e. let the `renderSlot` create the bailed Fragment\r\n if (!optimized && type === 1 /* STABLE */) {\r\n delete slots._;\r\n }\r\n }\r\n }\r\n else {\r\n needDeletionCheck = !children.$stable;\r\n normalizeObjectSlots(children, slots);\r\n }\r\n deletionComparisonTarget = children;\r\n }\r\n else if (children) {\r\n // non slot object children (direct value) passed to a component\r\n normalizeVNodeSlots(instance, children);\r\n deletionComparisonTarget = { default: 1 };\r\n }\r\n // delete stale slots\r\n if (needDeletionCheck) {\r\n for (const key in slots) {\r\n if (!isInternalKey(key) && !(key in deletionComparisonTarget)) {\r\n delete slots[key];\r\n }\r\n }\r\n }\r\n};\n\n/**\r\nRuntime helper for applying directives to a vnode. Example usage:\r\n\nconst comp = resolveComponent('comp')\r\nconst foo = resolveDirective('foo')\r\nconst bar = resolveDirective('bar')\r\n\nreturn withDirectives(h(comp), [\r\n [foo, this.x],\r\n [bar, this.y]\r\n])\r\n*/\r\nconst isBuiltInDirective = /*#__PURE__*/ makeMap('bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text');\r\nfunction validateDirectiveName(name) {\r\n if (isBuiltInDirective(name)) {\r\n warn('Do not use built-in directive ids as custom directive id: ' + name);\r\n }\r\n}\r\n/**\r\n * Adds directives to a VNode.\r\n */\r\nfunction withDirectives(vnode, directives) {\r\n const internalInstance = currentRenderingInstance;\r\n if (internalInstance === null) {\r\n (process.env.NODE_ENV !== 'production') && warn(`withDirectives can only be used inside render functions.`);\r\n return vnode;\r\n }\r\n const instance = internalInstance.proxy;\r\n const bindings = vnode.dirs || (vnode.dirs = []);\r\n for (let i = 0; i < directives.length; i++) {\r\n let [dir, value, arg, modifiers = EMPTY_OBJ] = directives[i];\r\n if (isFunction$1(dir)) {\r\n dir = {\r\n mounted: dir,\r\n updated: dir\r\n };\r\n }\r\n if (dir.deep) {\r\n traverse(value);\r\n }\r\n bindings.push({\r\n dir,\r\n instance,\r\n value,\r\n oldValue: void 0,\r\n arg,\r\n modifiers\r\n });\r\n }\r\n return vnode;\r\n}\r\nfunction invokeDirectiveHook(vnode, prevVNode, instance, name) {\r\n const bindings = vnode.dirs;\r\n const oldBindings = prevVNode && prevVNode.dirs;\r\n for (let i = 0; i < bindings.length; i++) {\r\n const binding = bindings[i];\r\n if (oldBindings) {\r\n binding.oldValue = oldBindings[i].value;\r\n }\r\n let hook = binding.dir[name];\r\n if (hook) {\r\n // disable tracking inside all lifecycle hooks\r\n // since they can potentially be called inside effects.\r\n pauseTracking();\r\n callWithAsyncErrorHandling(hook, instance, 8 /* DIRECTIVE_HOOK */, [\r\n vnode.el,\r\n binding,\r\n vnode,\r\n prevVNode\r\n ]);\r\n resetTracking();\r\n }\r\n }\r\n}\n\nfunction createAppContext() {\r\n return {\r\n app: null,\r\n config: {\r\n isNativeTag: NO,\r\n performance: false,\r\n globalProperties: {},\r\n optionMergeStrategies: {},\r\n errorHandler: undefined,\r\n warnHandler: undefined,\r\n compilerOptions: {}\r\n },\r\n mixins: [],\r\n components: {},\r\n directives: {},\r\n provides: Object.create(null),\r\n optionsCache: new WeakMap(),\r\n propsCache: new WeakMap(),\r\n emitsCache: new WeakMap()\r\n };\r\n}\r\nlet uid = 0;\r\nfunction createAppAPI(render, hydrate) {\r\n return function createApp(rootComponent, rootProps = null) {\r\n if (rootProps != null && !isObject$1(rootProps)) {\r\n (process.env.NODE_ENV !== 'production') && warn(`root props passed to app.mount() must be an object.`);\r\n rootProps = null;\r\n }\r\n const context = createAppContext();\r\n const installedPlugins = new Set();\r\n let isMounted = false;\r\n const app = (context.app = {\r\n _uid: uid++,\r\n _component: rootComponent,\r\n _props: rootProps,\r\n _container: null,\r\n _context: context,\r\n _instance: null,\r\n version,\r\n get config() {\r\n return context.config;\r\n },\r\n set config(v) {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n warn(`app.config cannot be replaced. Modify individual options instead.`);\r\n }\r\n },\r\n use(plugin, ...options) {\r\n if (installedPlugins.has(plugin)) {\r\n (process.env.NODE_ENV !== 'production') && warn(`Plugin has already been applied to target app.`);\r\n }\r\n else if (plugin && isFunction$1(plugin.install)) {\r\n installedPlugins.add(plugin);\r\n plugin.install(app, ...options);\r\n }\r\n else if (isFunction$1(plugin)) {\r\n installedPlugins.add(plugin);\r\n plugin(app, ...options);\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n warn(`A plugin must either be a function or an object with an \"install\" ` +\r\n `function.`);\r\n }\r\n return app;\r\n },\r\n mixin(mixin) {\r\n if (__VUE_OPTIONS_API__) {\r\n if (!context.mixins.includes(mixin)) {\r\n context.mixins.push(mixin);\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n warn('Mixin has already been applied to target app' +\r\n (mixin.name ? `: ${mixin.name}` : ''));\r\n }\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n warn('Mixins are only available in builds supporting Options API');\r\n }\r\n return app;\r\n },\r\n component(name, component) {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n validateComponentName(name, context.config);\r\n }\r\n if (!component) {\r\n return context.components[name];\r\n }\r\n if ((process.env.NODE_ENV !== 'production') && context.components[name]) {\r\n warn(`Component \"${name}\" has already been registered in target app.`);\r\n }\r\n context.components[name] = component;\r\n return app;\r\n },\r\n directive(name, directive) {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n validateDirectiveName(name);\r\n }\r\n if (!directive) {\r\n return context.directives[name];\r\n }\r\n if ((process.env.NODE_ENV !== 'production') && context.directives[name]) {\r\n warn(`Directive \"${name}\" has already been registered in target app.`);\r\n }\r\n context.directives[name] = directive;\r\n return app;\r\n },\r\n mount(rootContainer, isHydrate, isSVG) {\r\n if (!isMounted) {\r\n const vnode = createVNode(rootComponent, rootProps);\r\n // store app context on the root VNode.\r\n // this will be set on the root instance on initial mount.\r\n vnode.appContext = context;\r\n // HMR root reload\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n context.reload = () => {\r\n render(cloneVNode(vnode), rootContainer, isSVG);\r\n };\r\n }\r\n if (isHydrate && hydrate) {\r\n hydrate(vnode, rootContainer);\r\n }\r\n else {\r\n render(vnode, rootContainer, isSVG);\r\n }\r\n isMounted = true;\r\n app._container = rootContainer;\r\n rootContainer.__vue_app__ = app;\r\n if ((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) {\r\n app._instance = vnode.component;\r\n devtoolsInitApp(app, version);\r\n }\r\n return vnode.component.proxy;\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n warn(`App has already been mounted.\\n` +\r\n `If you want to remount the same app, move your app creation logic ` +\r\n `into a factory function and create fresh app instances for each ` +\r\n `mount - e.g. \\`const createMyApp = () => createApp(App)\\``);\r\n }\r\n },\r\n unmount() {\r\n if (isMounted) {\r\n render(null, app._container);\r\n if ((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) {\r\n app._instance = null;\r\n devtoolsUnmountApp(app);\r\n }\r\n delete app._container.__vue_app__;\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n warn(`Cannot unmount an app that is not mounted.`);\r\n }\r\n },\r\n provide(key, value) {\r\n if ((process.env.NODE_ENV !== 'production') && key in context.provides) {\r\n warn(`App already provides property with key \"${String(key)}\". ` +\r\n `It will be overwritten with the new value.`);\r\n }\r\n // TypeScript doesn't allow symbols as index type\r\n // https://github.com/Microsoft/TypeScript/issues/24587\r\n context.provides[key] = value;\r\n return app;\r\n }\r\n });\r\n return app;\r\n };\r\n}\n\nlet hasMismatch = false;\r\nconst isSVGContainer = (container) => /svg/.test(container.namespaceURI) && container.tagName !== 'foreignObject';\r\nconst isComment = (node) => node.nodeType === 8 /* COMMENT */;\r\n// Note: hydration is DOM-specific\r\n// But we have to place it in core due to tight coupling with core - splitting\r\n// it out creates a ton of unnecessary complexity.\r\n// Hydration also depends on some renderer internal logic which needs to be\r\n// passed in via arguments.\r\nfunction createHydrationFunctions(rendererInternals) {\r\n const { mt: mountComponent, p: patch, o: { patchProp, nextSibling, parentNode, remove, insert, createComment } } = rendererInternals;\r\n const hydrate = (vnode, container) => {\r\n if (!container.hasChildNodes()) {\r\n (process.env.NODE_ENV !== 'production') &&\r\n warn(`Attempting to hydrate existing markup but container is empty. ` +\r\n `Performing full mount instead.`);\r\n patch(null, vnode, container);\r\n flushPostFlushCbs();\r\n return;\r\n }\r\n hasMismatch = false;\r\n hydrateNode(container.firstChild, vnode, null, null, null);\r\n flushPostFlushCbs();\r\n if (hasMismatch && !false) {\r\n // this error should show up in production\r\n console.error(`Hydration completed but contains mismatches.`);\r\n }\r\n };\r\n const hydrateNode = (node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized = false) => {\r\n const isFragmentStart = isComment(node) && node.data === '[';\r\n const onMismatch = () => handleMismatch(node, vnode, parentComponent, parentSuspense, slotScopeIds, isFragmentStart);\r\n const { type, ref, shapeFlag } = vnode;\r\n const domType = node.nodeType;\r\n vnode.el = node;\r\n let nextNode = null;\r\n switch (type) {\r\n case Text:\r\n if (domType !== 3 /* TEXT */) {\r\n nextNode = onMismatch();\r\n }\r\n else {\r\n if (node.data !== vnode.children) {\r\n hasMismatch = true;\r\n (process.env.NODE_ENV !== 'production') &&\r\n warn(`Hydration text mismatch:` +\r\n `\\n- Client: ${JSON.stringify(node.data)}` +\r\n `\\n- Server: ${JSON.stringify(vnode.children)}`);\r\n node.data = vnode.children;\r\n }\r\n nextNode = nextSibling(node);\r\n }\r\n break;\r\n case Comment:\r\n if (domType !== 8 /* COMMENT */ || isFragmentStart) {\r\n nextNode = onMismatch();\r\n }\r\n else {\r\n nextNode = nextSibling(node);\r\n }\r\n break;\r\n case Static:\r\n if (domType !== 1 /* ELEMENT */) {\r\n nextNode = onMismatch();\r\n }\r\n else {\r\n // determine anchor, adopt content\r\n nextNode = node;\r\n // if the static vnode has its content stripped during build,\r\n // adopt it from the server-rendered HTML.\r\n const needToAdoptContent = !vnode.children.length;\r\n for (let i = 0; i < vnode.staticCount; i++) {\r\n if (needToAdoptContent)\r\n vnode.children += nextNode.outerHTML;\r\n if (i === vnode.staticCount - 1) {\r\n vnode.anchor = nextNode;\r\n }\r\n nextNode = nextSibling(nextNode);\r\n }\r\n return nextNode;\r\n }\r\n break;\r\n case Fragment:\r\n if (!isFragmentStart) {\r\n nextNode = onMismatch();\r\n }\r\n else {\r\n nextNode = hydrateFragment(node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized);\r\n }\r\n break;\r\n default:\r\n if (shapeFlag & 1 /* ELEMENT */) {\r\n if (domType !== 1 /* ELEMENT */ ||\r\n vnode.type.toLowerCase() !==\r\n node.tagName.toLowerCase()) {\r\n nextNode = onMismatch();\r\n }\r\n else {\r\n nextNode = hydrateElement(node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized);\r\n }\r\n }\r\n else if (shapeFlag & 6 /* COMPONENT */) {\r\n // when setting up the render effect, if the initial vnode already\r\n // has .el set, the component will perform hydration instead of mount\r\n // on its sub-tree.\r\n vnode.slotScopeIds = slotScopeIds;\r\n const container = parentNode(node);\r\n mountComponent(vnode, container, null, parentComponent, parentSuspense, isSVGContainer(container), optimized);\r\n // component may be async, so in the case of fragments we cannot rely\r\n // on component's rendered output to determine the end of the fragment\r\n // instead, we do a lookahead to find the end anchor node.\r\n nextNode = isFragmentStart\r\n ? locateClosingAsyncAnchor(node)\r\n : nextSibling(node);\r\n // #3787\r\n // if component is async, it may get moved / unmounted before its\r\n // inner component is loaded, so we need to give it a placeholder\r\n // vnode that matches its adopted DOM.\r\n if (isAsyncWrapper(vnode)) {\r\n let subTree;\r\n if (isFragmentStart) {\r\n subTree = createVNode(Fragment);\r\n subTree.anchor = nextNode\r\n ? nextNode.previousSibling\r\n : container.lastChild;\r\n }\r\n else {\r\n subTree =\r\n node.nodeType === 3 ? createTextVNode('') : createVNode('div');\r\n }\r\n subTree.el = node;\r\n vnode.component.subTree = subTree;\r\n }\r\n }\r\n else if (shapeFlag & 64 /* TELEPORT */) {\r\n if (domType !== 8 /* COMMENT */) {\r\n nextNode = onMismatch();\r\n }\r\n else {\r\n nextNode = vnode.type.hydrate(node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized, rendererInternals, hydrateChildren);\r\n }\r\n }\r\n else if (shapeFlag & 128 /* SUSPENSE */) {\r\n nextNode = vnode.type.hydrate(node, vnode, parentComponent, parentSuspense, isSVGContainer(parentNode(node)), slotScopeIds, optimized, rendererInternals, hydrateNode);\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n warn('Invalid HostVNode type:', type, `(${typeof type})`);\r\n }\r\n }\r\n if (ref != null) {\r\n setRef(ref, null, parentSuspense, vnode);\r\n }\r\n return nextNode;\r\n };\r\n const hydrateElement = (el, vnode, parentComponent, parentSuspense, slotScopeIds, optimized) => {\r\n optimized = optimized || !!vnode.dynamicChildren;\r\n const { type, props, patchFlag, shapeFlag, dirs } = vnode;\r\n // #4006 for form elements with non-string v-model value bindings\r\n // e.g.