{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/codemirror/lib/codemirror.js","webpack:///./node_modules/easymde/src/js/easymde.js","webpack:///./node_modules/codemirror/mode/markdown/markdown.js","webpack:///./node_modules/codemirror/mode/xml/xml.js","webpack:///./node_modules/codemirror/addon/mode/overlay.js","webpack:///./node_modules/codemirror/addon/edit/continuelist.js","webpack:///./node_modules/easymde/src/js/codemirror/tablist.js","webpack:///./node_modules/codemirror/addon/display/fullscreen.js","webpack:///./node_modules/codemirror/mode/meta.js","webpack:///./node_modules/codemirror/addon/display/placeholder.js","webpack:///./node_modules/codemirror/addon/display/autorefresh.js","webpack:///./node_modules/codemirror/addon/selection/mark-selection.js","webpack:///./node_modules/codemirror/addon/search/searchcursor.js","webpack:///./node_modules/codemirror/mode/gfm/gfm.js","webpack:///./node_modules/codemirror-spell-checker/src/js/spell-checker.js","webpack:///./node_modules/typo-js/typo.js","webpack:///./node_modules/marked/lib/marked.umd.js","webpack:///./app/javascript/packs/simplemde_init.js","webpack:///./node_modules/jquery/dist/jquery.js","webpack:///./node_modules/@popperjs/core/lib/enums.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getWindow.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/applyStyles.js","webpack:///./node_modules/@popperjs/core/lib/utils/getBasePlacement.js","webpack:///./node_modules/@popperjs/core/lib/utils/math.js","webpack:///./node_modules/@popperjs/core/lib/utils/userAgent.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/contains.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","webpack:///./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","webpack:///./node_modules/@popperjs/core/lib/utils/within.js","webpack:///./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","webpack:///./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","webpack:///./node_modules/@popperjs/core/lib/utils/expandToHashMap.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/arrow.js","webpack:///./node_modules/@popperjs/core/lib/utils/getVariation.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/computeStyles.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/eventListeners.js","webpack:///./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","webpack:///./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","webpack:///./node_modules/@popperjs/core/lib/utils/rectToClientRect.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","webpack:///./node_modules/@popperjs/core/lib/utils/computeOffsets.js","webpack:///./node_modules/@popperjs/core/lib/utils/detectOverflow.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/flip.js","webpack:///./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/hide.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/offset.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","webpack:///./node_modules/@popperjs/core/lib/utils/getAltAxis.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","webpack:///./node_modules/@popperjs/core/lib/utils/orderModifiers.js","webpack:///./node_modules/@popperjs/core/lib/createPopper.js","webpack:///./node_modules/@popperjs/core/lib/utils/debounce.js","webpack:///./node_modules/@popperjs/core/lib/utils/mergeByName.js","webpack:///./node_modules/@popperjs/core/lib/popper.js","webpack:///./node_modules/@popperjs/core/lib/popper-lite.js","webpack:///./node_modules/bootstrap/dist/js/bootstrap.esm.js","webpack:///./node_modules/@rails/ujs/lib/assets/compiled/rails-ujs.js","webpack:///./node_modules/@rails/activestorage/app/assets/javascripts/activestorage.js","webpack:///./app/javascript/packs/application.js","webpack:///(webpack)/buildin/global.js","webpack:///./app/javascript/channels/index.js","webpack:///./app/javascript/channels sync _channel\\.js$"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","userAgent","navigator","platform","gecko","test","ie_upto10","ie_11up","exec","edge","ie","ie_version","document","documentMode","webkit","qtwebkit","chrome","chrome_version","presto","safari","vendor","mac_geMountainLion","phantom","ios","maxTouchPoints","android","mobile","mac","chromeOS","windows","presto_version","match","Number","flipCtrlCmd","captureRightClick","classTest","cls","RegExp","range","rmClass","node","current","className","after","slice","index","length","removeChildren","e","count","childNodes","removeChild","firstChild","removeChildrenAndAdd","parent","appendChild","elt","tag","content","style","createElement","cssText","createTextNode","eltP","setAttribute","contains","child","nodeType","parentNode","host","activeElt","doc","activeElement","body","shadowRoot","addClass","joinClasses","a","b","as","split","createRange","start","end","endNode","setEnd","setStart","createTextRange","moveToElementText","collapse","moveEnd","moveStart","selectInput","select","cm","display","wrapper","ownerDocument","win","defaultView","f","args","Array","arguments","apply","copyObj","obj","target","overwrite","prop","countColumn","string","tabSize","startIndex","startValue","search","nextTab","indexOf","selectionStart","selectionEnd","_e","Delayed","this","id","time","handler","onTimeout","array","self","Date","setTimeout","set","ms","clearTimeout","scrollerGap","Pass","toString","sel_dontScroll","scroll","sel_mouse","origin","sel_move","findColumn","goal","pos","col","skipped","Math","min","spaceStrs","spaceStr","push","lst","arr","map","out","insertSorted","score","priority","splice","nothing","createObj","base","props","inst","nonASCIISingleCaseWordChar","isWordCharBasic","ch","toUpperCase","toLowerCase","isWordChar","helper","source","isEmpty","extendingChars","isExtendingChar","charCodeAt","skipExtendingChars","str","dir","charAt","findFirst","pred","from","to","midF","mid","ceil","floor","iterateBidiSections","order","found","part","max","level","bidiOther","getBidiPartAt","sticky","cur","bidiOrdering","lowTypes","arabicTypes","charType","code","bidiRE","isNeutral","isStrong","countsAsLeft","countsAsNum","BidiSpan","direction","outerType","len","types","i$1","prev","type","i$2","type$1","i$3","prev$1","type$2","i$4","type$3","replace","j","i$5","cur$1","type$4","i$6","end$1","before","replace$1","j$1","i$7","at","isRTL","j$2","nstart","unshift","reverse","getOrder","line","text","noHandlers","on","emitter","addEventListener","attachEvent","_handlers","concat","getHandlers","off","removeEventListener","detachEvent","signal","handlers","signalDOMEvent","override","preventDefault","defaultPrevented","e_defaultPrevented","codemirrorIgnore","signalCursorActivity","cursorActivity","curOp","cursorActivityHandlers","hasHandler","eventMixin","ctor","e_preventDefault","returnValue","e_stopPropagation","stopPropagation","cancelBubble","e_stop","e_target","srcElement","e_button","which","button","ctrlKey","zwspSupported","badBidiRects","dragAndDrop","div","zeroWidthElement","measure","offsetHeight","offsetWidth","hasBadBidiRects","txt","r0","getBoundingClientRect","r1","left","right","splitLinesAuto","result","nl","rt","hasSelection","window","getSelection","te","selection","parentElement","compareEndPoints","hasCopyEvent","oncopy","badZoomedRects","hasBadZoomedRects","normal","fromRange","abs","modes","mimeModes","defineMode","dependencies","defineMIME","mime","spec","resolveMode","getMode","options","mfactory","modeObj","modeExtensions","exts","helperType","modeProps","prop$1","extendMode","properties","copyState","state","nstate","val","innerMode","info","startState","a1","a2","StringStream","lineOracle","lastColumnPos","lastColumnValue","lineStart","getLine","first","size","Error","chunk","lines","children","sz","chunkSize","getBetween","iter","getLines","updateLineHeight","height","diff","lineNo","no","lineAtHeight","h","outer","lh","isLine","lineNumberFor","String","lineNumberFormatter","firstLineNumber","Pos","cmp","equalCursorPos","copyPos","x","maxPos","minPos","clipLine","clipPos","last","clipToLen","linelen","clipPosArray","eol","sol","peek","undefined","next","eat","eatWhile","eatSpace","skipToEnd","skipTo","backUp","column","indentation","pattern","consume","caseInsensitive","cased","substr","hideFirstChars","inner","lookAhead","oracle","baseToken","SavedContext","Context","maxLookAhead","baseTokens","baseTokenPos","highlightLine","context","forceToEnd","st","modeGen","lineClasses","runMode","loop","overlay","overlays","i_end","opaque","styles","classes","bgClass","textClass","getLineStyles","updateFrontier","getContextBefore","resetState","maxHighlightLength","stateAfter","save","styleClasses","highlightFrontier","modeFrontier","precise","findStartLine","saved","fromSaved","processLine","viewFrom","viewTo","nextLine","startAt","stream","callBlankLine","readToken","blankLine","token","copy","Token","takeToken","asArray","tokens","extractLineClasses","output","lineClass","flattenSpans","curStart","curStyle","addModeClass","mName","minindent","minline","lim","indented","retreatFrontier","sawReadOnlySpans","sawCollapsedSpans","seeReadOnlySpans","seeCollapsedSpans","MarkedSpan","marker","getMarkedSpanFor","spans","span","removeMarkedSpan","addMarkedSpan","op","inThisOp","WeakSet","markedSpans","has","add","attachLine","markedSpansBefore","old","startCh","isInsert","nw","inclusiveLeft","insertLeft","endsAfter","inclusiveRight","markedSpansAfter","endCh","startsBefore","stretchSpansOverChange","change","full","oldFirst","oldLast","sameLine","offset","span$1","clearEmptySpans","newMarkers","gapMarkers","gap","clearWhenEmpty","removeReadOnlyRanges","markers","mark","readOnly","parts","mk","find","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","found$1","findMaxLine","maxLine","maxLineLength","maxLineChanged","Line","estimateHeight","updateLine","estHeight","cleanUpLine","styleToClassCache","styleToClassCacheWithMode","interpretTokenStyle","cache","buildLineContent","lineView","builder","pre","trailingSpace","splitSpaces","getOption","rest","addToken","buildToken","buildTokenBadBidi","insertLineContent","externalMeasured","maps","caches","lastChild","querySelector","defaultSpecialCharPlaceholder","title","startStyle","endStyle","css","attributes","displayText","special","specialChars","mustWrap","createDocumentFragment","lastIndex","txt$1","tabWidth","specialCharPlaceholder","fullStyle","attr","trailingBefore","spaceBefore","buildCollapsedSpan","ignoreWidget","widget","input","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","lineNumInnerWidth","k","gutterSpecs","gutterWidth","alignable","isWidget","nextSibling","insertLineWidgets","buildLineElement","insertLineWidgetsFor","allowAbove","widgets","ws","handleMouseEvents","positionLineWidget","above","noHScroll","width","wrapperWidth","coverGutter","paddingLeft","position","marginLeft","widgetHeight","parentStyle","gutters","clientWidth","eventInWidget","getAttribute","sizer","mover","paddingTop","lineSpace","offsetTop","paddingVert","paddingH","cachedPaddingH","getComputedStyle","currentStyle","data","parseInt","paddingRight","isNaN","scrollGap","nativeBarWidth","displayWidth","scroller","barWidth","displayHeight","clientHeight","barHeight","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","boxIsAfter","box","ltr","coordsBidiPartWrapped","coordsBidiPart","baseX","chAround","boxAround","atLeft","atStart","_lineNo","ref","closestDist","endX","dist","textHeight","anchor","clientLeft","offsetLeft","compensateForHScroll","th","perLine","widgetsHeight","estimateLineHeights","est","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","customCursor","$customCursor","sel","ranges","primIndex","empty","head","drawSelectionCursor","showCursorWhenSelecting","drawSelectionRange","cursor","cursorHeight","getWrapperElement","charPos","defaultCharWidth","otherCursor","cmpCoords","fragment","padding","leftSide","rightSide","sizerWidth","docLTR","drawForLine","fromArg","toArg","lineLen","wrapX","side","extent","fromPos","toPos","openStart","openEnd","openRight","topLeft","topRight","botLeft","botRight","sFrom","sTo","fromLine","toLine","singleVLine","leftEnd","rightStart","restartBlink","focused","clearInterval","blinker","cursorDiv","visibility","cursorBlinkRate","setInterval","hasFocus","onBlur","ensureFocus","focus","onFocus","delayBlurEvent","delayingBlurEvent","draggingText","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","getCursor","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","bar","delay","maybeDisable","elementFromPoint","clear","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","operation","methodOp","docMethodOp","highlight","highlightWorker","workTime","changedLines","oldStyles","highlighted","oldCls","newCls","ischange","workDelay","force","visible","editorIsHidden","wrapperHeight","oldDisplayWidth","events","scrollbarsClipped","marginBottom","borderRightWidth","selectionSnapshot","active","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","align","innerW","lineGutter","lineNumWidth","getGutters","sawLineNumbers","renderGutters","specs","gElt","updateGutters","Display","clipPath","draggable","wheelDX","wheelDY","activeTouch","init","wheelSamples","wheelPixelsPerUnit","wheelEventDelta","dx","wheelDeltaX","dy","wheelDeltaY","detail","HORIZONTAL_AXIS","VERTICAL_AXIS","wheelDelta","wheelEventPixels","delta","onScrollWheel","chromeScrollHack","pointerEvents","pixelsPerUnit","deltaMode","deltaX","deltaY","canScrollX","canScrollY","pixels","movedX","movedY","sample","Selection","equals","here","there","deepCopy","Range","somethingSelected","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","done","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","event","newChanges","extendRange","posBefore","extendSelection","setSelection","extendSelections","heads","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","filter","returned","v","shiftDoc","distance","removed","makeChangeSingleDocInEditor","recomputeMaxLength","checkWidthStart","changesHandler","changeHandler","replaceRange","assign","splitLines","rebaseHistSelSingle","rebaseHistArray","sub","ok","copied","changeLine","handle","changeType","LeafChunk","BranchChunk","removeInner","insertInner","iterN","remaining","leaf","maybeSpill","me","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","constructor","getValue","join","lineSeparator","setValue","getRange","getLineHandle","getLineNumber","getLineHandleVisualStart","lineCount","listSelections","setCursor","extendSelectionsBy","setSelections","addSelection","getSelections","replaceSelection","dup","replaceSelections","newSel","undo","redo","undoSelection","redoSelection","setExtending","getExtending","historySize","markClean","changeGeneration","forceSplit","isClean","gen","getHistory","setHistory","histData","setGutterMarker","gutterID","clearGutter","lineInfo","addLineClass","where","removeLineClass","removeLineWidget","setBookmark","realOpts","findMarksAt","getAllMarks","posFromIndex","sepSize","indexFromPos","copyHistory","linkedDoc","unlinkDoc","CodeMirror","splitIds","iterLinkedDocs","getEditor","setDirection","eachLine","lastDrop","onDrop","clearDragCursor","files","dataTransfer","isReadOnly","FileReader","File","read","markAsReadAndPasteIfAllFilesAreRead","readTextFromFile","file","allowDropFileTypes","reader","onerror","onload","readAsText","text$1","getData","selected","onDragStart","setData","effectAllowed","setDragImage","img","src","_top","onDragOver","frag","dragCursor","forEachCodeMirror","getElementsByClassName","byClass","editors","globalsRegistered","ensureGlobalHandlers","registerGlobalHandlers","resizeTimer","onResize","setSize","keyNames","fromCharCode","keyMap","normalizeKeyName","alt","ctrl","cmd","mod","normalizeKeyMap","keymap","keyname","keys","lookupKey","getKeyMap","fallthrough","isModifierKey","keyCode","addModifierNames","noShift","altKey","metaKey","shiftKey","keyName","altGraphKey","deleteNearSelection","compute","kill","toKill","replaced","moveCharLogically","moveLogically","endOfLine","visually","prep","targetTop","moveVisually","bidi","mv","getWrappedLineExtent","moveInStorageOrder","searchInVisualLine","getRes","res","nextCh","basic","pcDefault","emacsy","macDefault","commands","singleSelection","killLine","deleteLine","delLineLeft","delWrappedLineLeft","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","now","compare","onMouseDown","supportsTouch","clickInGutter","repeat","selectingText","handleMappedButton","leftButtonDown","onContextMenu","configureMouse","option","unit","addNew","moveOnDrag","contained","behavior","dragDrop","leftButtonStartDrag","leftButtonSelect","moved","dragEnd","mouseMove","dragStart","preventScroll","e2","rangeForUnit","findWordAt","doc$1","ourRange","ourIndex","startSel","lastPos","extendTo","startCol","posCol","leftPos","oldRange","ranges$1","bidiSimplify","editorSize","counter","curCount","move","buttons","anchorLine","boundary","headIndex","usePart","gutterEvent","prevent","mX","mY","touches","lineBox","g","contextMenuInGutter","themeChanged","theme","Init","defaults","optionHandlers","defineOptions","deflt","notOnInit","defineOption","newBreaks","refresh","getInputField","spellcheck","autocorrect","autocapitalize","detach","attach","wrappingChanged","integer","blur","readOnlyChanged","screenReaderLabelChanged","dragDropChanged","resetPosition","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","indent","curSpace","curSpaceString","indentUnit","indentString","indentWithTabs","pos$1","defineInitHook","lastCopied","setLastCopied","newLastCopied","applyTextInput","inserted","deleted","recent","paste","textLines","multiPaste","pasteLinesPerSelection","lineWise","changeEvent","triggerElectric","handlePaste","pasted","clipboardData","disableInput","electricChars","smartIndent","getModeAt","electricInput","copyableRanges","lineRange","disableBrowserMagic","field","hiddenTextarea","border","addEditorMethods","helpers","setOption","getDoc","addKeyMap","removeKeyMap","addOverlay","modeSpec","removeOverlay","newRanges","getTokenAt","getLineTokens","getTokenTypeAt","getHelper","getHelpers","help","_global","getStateAfter","defaultTextHeight","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","closing","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","fromIndex","fromNode","toNode","toIndex","newText","oldText","cutFront","cutEnd","oldTop","maxCutFront","newBot","oldBot","maxCutEnd","chFrom","chTo","TextareaInput","prevInput","pollingFast","resetting","fromTextArea","textarea","tabindex","placeholder","realSubmit","form","leaveSubmitMethodAlone","submit","wrappedSubmit","getTextArea","toTextArea","addLegacyProps","cmpPos","createField","prepareCopyCut","fastPoll","dispatchEvent","Event","_display","opts","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","version","factory","CodeMirrorSpellChecker","marked","isMac","anchorToExternalRegex","bindings","toggleBold","toggleItalic","drawLink","toggleHeadingSmaller","toggleHeadingBigger","drawImage","toggleBlockquote","toggleOrderedList","toggleUnorderedList","toggleCodeBlock","togglePreview","toggleStrikethrough","toggleHeading1","toggleHeading2","toggleHeading3","toggleHeading4","toggleHeading5","toggleHeading6","cleanBlock","drawTable","drawHorizontalRule","toggleSideBySide","toggleFullScreen","shortcuts","getBindingName","isMobile","opera","fixShortcut","createToolbarDropdown","enableTooltips","el","createToolbarButton","classList","onclick","childrenIndex","childElement","toolbarBuiltInButtons","enableActions","markup","attribute","classNamePrefix","toolbarButtonClassPrefix","innerText","action","actionName","tooltip","createTooltip","noDisable","noMobile","classNameParts","iconClasses","classNameIndex","classNamePart","icon","iconClassIndex","iconClass","innerHTML","open","createSep","getState","stat","ret","bold","quote","italic","strikethrough","image","link","saved_overflow","editor","codemirror","overflow","sidebyside","sideBySideFullscreen","easyMDEContainer","onToggleFullScreen","maxHeight","removeProperty","setPreviewMaxHeight","toolbar_div","toolbarElements","fullscreen","_toggleBlock","blockStyles","fenceCharsToInsert","fencing_line","token_state","code_type","line_num","firstTok","lastTok","indentedCode","fencedChars","block_start","block_end","cur_start","cur_end","tok","is_code","start_text","start_line","end_text","end_line","fence_chars","search_from","next_line","next_line_last_tok","no_sel_and_starting_of_line","sel_multi","start_line_sel","end_line_sel","repl_start","repl_end","_replaceSelection","insertFencingAtSelection","_toggleLine","_toggleHeading","listStyle","includes","unorderedListStyle","startPoint","endPoint","_cleanBlock","url","promptURLs","prompt","promptTexts","escapePromptURL","_toggleLink","insertTexts","encodeURI","drawUploadedImage","openBrowseFileWindow","afterImageUploaded","imageName","lastIndexOf","substring","uploadedImage","text_link","updateStatusBar","imageTexts","sbOnUploaded","sbInit","table","horizontalRule","preview","toolbarButton","useSideBySideListener","previewNormal","toolbar","sideBySideRenderingFunction","newValue","previewRender","previewClass","isArray","preview_result","startEnd","currHeadingLevel","liststyle","listRegexp","whitespacesRegexp","repl","_toggle","untoggleOnly","char","_getChar","_checkChar","isPreviewActive","start_chars","end_chars","humanFileSize","bytes","units","u","toFixed","_mergeProperties","wordCount","iconClassMap","default","timeFormat","locale","format","hour","minute","sbOnDragEnter","sbOnDrop","sbProgress","sizeUnits","errorMessages","noFileGiven","typeNotAllowed","fileTooLarge","importError","EasyMDE","autoDownloadFA","autoDownloadFontAwesome","styleSheets","href","getElementsByTagName","element","console","log","showIcons","status","uploadImage","plainText","markdown","parsingConfig","highlightFormatting","autosave","errorCallback","errorMessage","alert","imageMaxSize","imageAccept","imagePathAbsolute","imageCSRFName","imageCSRFHeader","unique_id","uniqueId","overlayMode","combine","render","initialValue","foundSavedValue","imageUploadFunction","uploadImagesUsingCustomFunction","uploadImages","isLocalStorageAvailable","localStorage","setItem","removeItem","onSuccess","onError","names","uploadImageUsingCustomFunction","itemName","gui","statusbar","matchingClasses","markedOptions","renderingConfig","singleLineBreaks","breaks","codeSyntaxHighlighting","hljs","language","getLanguage","highlightAuto","setOptions","htmlText","parse","sanitizerFunction","htmlDoc","DOMParser","parseFromString","listItems","listItem","listItemChild","HTMLInputElement","listStyleType","removeListStyleWhenCheckbox","linkString","fixedLinkString","addAnchorTargetBlank","_rendered","backdrop","documentOnKeyDown","config","spellChecker","gitHubSpice","codeMirrorInstance","styleSelectedText","nativeSpellcheck","autoRefresh","forceSync","cmWrapper","createToolbar","createStatusbar","enabled","_autosave_timeout","submit_delay","_vm","previewImagesInEditor","querySelectorAll","forEach","parentEl","hasAttribute","srcAttr","EMDEimagesCache","keySrc","imagesPreviewHandler","newSrc","assignImageBlockAttributes","naturalWidth","naturalHeight","sideBySide","createSideBySide","temp_cm","cleanup","easyMDE","binded","autosaveTimeoutId","loaded","getItem","getElementById","dd","Intl","DateTimeFormat","clearAutosavedValue","imageInput","click","onChange","onErrorSup","fillErrorMessage","imageUrl","formData","FormData","append","imageCSRFToken","request","XMLHttpRequest","upload","onprogress","lengthComputable","progress","total","imageUploadEndpoint","setRequestHeader","response","JSON","responseText","error","filePath","location","statusText","send","filledErrorMessage","borderTopWidth","previewMaxHeight","syncSideBySidePreviewScroll","cScroll","pScroll","ratio","parseFloat","onscroll","items","toolbarData","toolbarGuideIcon","hideIcons","nonSeparatorIconsFollow","item","toolbarTips","multiple","accept","opacity","onUpdate","onActivity","defaultValue","posLine","posColumn","isSideBySideActive","isFullscreenActive","cmCfg","modeCfg","htmlMode","htmlModeMissing","findModeByName","mimes","maxBlockquoteDepth","taskLists","emoji","fencedCodeBlockHighlighting","fencedCodeBlockDefaultMode","xml","tokenTypeOverrides","tokenTypes","header","list1","list2","list3","hr","imageAltText","imageMarker","formatting","linkInline","linkEmail","linkText","linkHref","em","strong","tokenType","hrRE","listRE","taskListRE","atxHeaderRE","allowAtxHeaderWithoutSpace","setextHeaderRE","textRE","fencedCodeRE","linkDefRE","punctuation","expandedTab","switchInline","inline","switchBlock","block","lineIsEmpty","linkTitle","htmlBlock","exit","htmlState","tagStart","tokenize","isInText","inlineNormal","blockNormal","trailingSpaceNewLine","prevLine","thisLine","firstTokenOnLine","prevLineLineIsEmpty","prevLineIsIndentedCode","prevLineIsHr","prevLineIsList","maxNonCodeIndentation","listStack","lineIndentation","indentationDiff","allowsInlineContinuation","fencedCodeEnd","isHr","getType","setext","listType","taskList","fencedEndRE","localMode","localState","local","footnoteLink","md_inside","returnType","currListInd","hasExitedList","maxFencedEndInd","taskOpen","taskClosed","listMod","handleText","matchCh","regex","previousFormatting","formattingEscape","atts","leftFlanking","rightFlanking","setEm","setStrong","retType","getLinkHrefInside","linkRE","endChar","returnState","footnoteLinkInside","footnoteUrl","textAfter","blockCommentStart","blockCommentEnd","closeBrackets","fold","htmlConfig","autoSelfClosers","implicitlyClosed","contextGrabbers","doNotIndent","allowUnquoted","allowMissing","caseFold","xmlConfig","allowMissingTagName","editorConf","config_","setStyle","inText","chain","parser","inBlock","doctype","inTag","baseState","tagName","inAttribute","stringStartCol","closure","isInAttribute","terminator","depth","lower","startOfLine","noIndent","popContext","maybePopContext","nextTagName","parentTagName","tagNameState","closeTagNameState","attrState","matchClosing","closeState","closeStateErr","_stream","attrEqState","attrValueState","attrContinuedState","baseIndent","fullLine","multilineTagIndentPastTag","multilineTagIndentFactor","alignCDATA","tagAfter","grabbers","configuration","skipAttribute","xmlCurrentTag","xmlCurrentContext","cx","basePos","baseCur","overlayPos","overlayCur","streamSeen","combineTokens","overlayToken","emptyListRE","unorderedListRE","incrementRemainingMarkdownListNumbers","startLine","skipCount","startItem","startIndent","nextLineNumber","nextItem","nextIndent","newNumber","nextNumber","itemNumber","newlineAndIndentContinueMarkdownList","replacements","eolState","inList","inQuote","cursorBeforeBullet","endOfQuote","endOfList","numbered","bullet","tabAndIndentMarkdownList","shiftTabAndUnindentMarkdownList","setFullscreen","fullScreenRestore","setNormal","modeInfo","alias","findModeByMIME","findModeByExtension","findModeByFileName","filename","dot","clearPlaceholder","setPlaceholder","placeHolder","onComposition","placeholderCompose","startListening","stopListening","timeout","hurry","_cm","onCursorActivity","markedSelection","markedSelectionStyle","CHUNK_SIZE","coverRange","addAt","endLine","atEnd","doFold","noFold","regexpFlags","regexp","flags","ignoreCase","global","multiline","ensureFlags","maybeMultiline","searchRegexpForward","searchRegexpForwardMultiline","inside","lastMatchIn","endMargin","newMatch","searchRegexpBackward","searchRegexpBackwardMultiline","adjustPos","orig","folded","foldFunc","searchStringForward","query","cutFrom","endString","searchStringBackward","topString","SearchCursor","atOccurrence","afterEmptyMatch","matches","normalize","findNext","findPrevious","getSearchCursor","urlRE","modeConfig","codeDepth","gfmOverlay","codeBlock","ateSpace","difference","markdownConfig","Typo","aff_loading","xhr_aff","readyState","aff_data","num_loaded","typo","dic_data","dic_loading","xhr_dic","rx_word","dictionary","affData","wordsData","settings","rules","dictionaryTable","compoundRules","compoundRuleCodes","replacementTable","memoized","path","_len","_jlen","readDataFile","setFunc","_readFile","asyncLoad","then","setAffData","setup","setWordsData","_parseAFF","rule","ONLYINCOMPOUND","_parseDIC","ruleText","expressionText","character","loadedCallback","extension","dictionaryPath","getURL","__dirname","load","charset","async","promise","req","Promise","resolve","reject","overrideMimeType","fs","existsSync","readFileSync","numEntries","lineParts","_removeAffixComments","trim","definitionParts","ruleType","ruleCode","combineable","entries","charactersToRemove","additionParts","charactersToAdd","continuationClasses","parseRuleCodes","regexToMatch","entry","_removeDicComments","addWord","ruleCodesArray","NEEDAFFIX","newWords","_applyRule","ii","_iilen","newWord","combineCode","combineRule","otherNewWords","iii","_iiilen","textCodes","FLAG","continuationRule","aWord","trimmedWord","checkExact","capitalizedWord","hasFlag","uncapitalizedWord","ruleCodes","COMPOUNDMIN","flag","wordFlags","alphabet","suggest","memoizedLimit","replacementEntry","correctedWord","edits1","words","known_only","_edit","rv","alphabetLength","lettercase","replacementLetter","ed1","weighted_corrections","ed1word","sorted_corrections","a_val","b_val","localeCompare","capitalization_scheme","working_limit","correct","_defineProperties","descriptor","configurable","writable","_toPropertyKey","_createClass","Constructor","protoProps","staticProps","_extends","_unsupportedIterableToArray","minLen","_arrayLikeToArray","arr2","_createForOfIteratorHelperLoose","allowArrayLike","it","iterator","TypeError","_toPrimitive","toPrimitive","arg","getDefaults","baseUrl","extensions","gfm","headerIds","headerPrefix","hooks","langPrefix","mangle","pedantic","renderer","sanitize","sanitizer","silent","smartypants","tokenizer","walkTokens","xhtml","changeDefaults","newDefaults","escapeTest","escapeReplace","escapeTestNoEncode","escapeReplaceNoEncode","escapeReplacements","getEscapeReplacement","escape","html","encode","unescapeTest","unescape","_","caret","edit","getRegex","nonWordAndColonTest","originIndependentUrl","cleanUrl","prot","decodeURIComponent","resolveUrl","baseUrls","justDomain","protocol","domain","rtrim","relativeBase","noopTest","splitCells","tableRow","cells","escaped","curr","suffLen","currChar","findClosingBracket","checkSanitizeDeprecation","warn","repeatString","outputLink","cap","raw","lexer","inLink","inlineTokens","indentCodeCompensation","matchIndentToCode","indentToCode","matchIndentInNode","Tokenizer","_proto","newline","codeBlockStyle","fences","lang","_escapes","heading","trimmed","blockquote","blockTokens","istask","ischecked","endsWithBlankLine","rawLine","itemContents","endEarly","bull","isordered","ordered","loose","itemRegex","trimLeft","nextBulletRegex","hrRegex","fencesBeginRegex","headingBeginRegex","task","checked","trimRight","spacers","hasMultipleLineBreaks","some","def","rows","row","lheading","paragraph","inRawBlock","trimmedUrl","rtrimSlash","lastParenIndex","linkLen","reflink","links","nolink","emStrong","maskedSrc","prevChar","lDelim","nextChar","rDelim","rLength","lLength","delimTotal","midDelimTotal","endReg","rDelimAst","rDelimUnd","_text","codespan","hasNonSpaceChars","hasSpaceCharsOnBothEnds","br","del","autolink","prevCapZero","_backpedal","inlineText","_paragraph","_label","_title","listItemStart","_tag","_comment","reflinkSearch","random","_punctuation","blockSkip","escapedEmSt","_scheme","_email","_attribute","_href","middle","endAst","endUnd","_extended_email","Lexer","inlineQueue","lex","lexInline","lastToken","cutSrc","lastParagraphClipped","_this","leading","tabs","extTokenizer","startBlock","tempSrc","tempStart","getStartIndex","errMsg","_this2","keepPrevChar","startInline","Renderer","_code","infostring","_html","slugger","slug","listitem","checkbox","tablerow","tablecell","TextRenderer","Slugger","seen","serialize","getNextSafeSlug","originalSlug","isDryRun","occurenceAccumulator","dryrun","Parser","textRenderer","parseInline","l2","l3","cell","itemBody","renderers","Hooks","preprocess","postprocess","callback","message","msg","parseMarkdown","origOpt","throwError","err","pending","all","_tokens","passThroughHooks","Set","use","childTokens","_key","pack","prevRenderer","_len2","_key2","_loop","_len3","_key3","_loop2","prevTokenizer","_len4","_key4","_loop3","prevHook","_len5","_key5","_walkTokens","values","_step","_loop4","_step2","_iterator2","_step3","_iterator3","_step4","_iterator4","_cell","_iterator","noGlobal","getProto","getPrototypeOf","flat","class2type","hasOwn","fnToString","ObjectFunctionString","support","isFunction","isWindow","preservedScriptAttributes","nonce","noModule","DOMEval","script","toType","jQuery","selector","fn","isArrayLike","jquery","toArray","num","pushStack","elems","merge","prevObject","each","elem","eq","even","grep","_elem","odd","copyIsArray","clone","deep","isPlainObject","expando","isReady","noop","proto","Ctor","isEmptyObject","globalEval","makeArray","results","inArray","second","callbackExpect","guid","_i","Sizzle","Expr","getText","isXML","compile","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","preferredDoc","dirruns","classCache","createCache","tokenCache","compilerCache","nonnativeSelectorCache","sortOrder","pushNative","booleans","whitespace","identifier","pseudos","rwhitespace","rcomma","rleadingCombinator","rdescend","rpseudo","ridentifier","matchExpr","rhtml","rinputs","rheader","rnative","rquickExpr","rsibling","runescape","funescape","nonHex","high","rcssescape","fcssescape","asCodePoint","unloadHandler","inDisabledFieldset","addCombinator","els","seed","nid","groups","newSelector","newContext","qsa","testContext","scope","toSelector","qsaError","cacheLength","markFunction","assert","addHandle","attrs","attrHandle","siblingCheck","sourceIndex","createInputPseudo","createButtonPseudo","createDisabledPseudo","isDisabled","createPositionalPseudo","argument","matchIndexes","namespace","namespaceURI","hasCompare","subWindow","cssHas","createComment","getById","getElementsByName","attrId","getAttributeNode","tmp","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","sortDetached","aup","ap","bp","expr","elements","specified","uniqueSort","duplicates","detectDuplicates","sortStable","selectors","createPseudo","relative","preFilter","excess","unquoted","nodeNameSelector","operator","what","_argument","simple","forward","ofType","_context","uniqueCache","outerCache","nodeIndex","useCache","uniqueID","pseudo","setFilters","idx","matched","matcher","unmatched","elemLang","hash","selectedIndex","_matchIndexes","radio","password","combinator","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","contexts","multipleContexts","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","filters","parseOnly","soFar","preFilters","cached","setMatchers","elementMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","matcherFromGroupMatchers","compiled","_name","unique","isXMLDoc","escapeSelector","until","truncate","is","siblings","rneedsContext","needsContext","rsingleTag","winnow","qualifier","not","rootjQuery","root","parseHTML","ready","rparentsprev","guaranteedUnique","contents","targets","closest","prevAll","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","contentDocument","rnothtmlwhite","Identity","Thrower","ex","adoptValue","noValue","fail","Callbacks","createOptions","firing","memory","fired","locked","queue","firingIndex","fire","once","stopOnFalse","disable","lock","fireWith","Deferred","tuples","always","deferred","pipe","fns","newDefer","tuple","notify","onFulfilled","onRejected","onProgress","maxDepth","that","mightThrow","notifyWith","resolveWith","process","exceptionHook","stackTrace","rejectWith","getStackHook","stateString","when","singleValue","resolveContexts","resolveValues","updateFunc","rerrorNames","stack","readyException","readyList","completed","catch","readyWait","wait","access","chainable","emptyGet","bulk","rmsPrefix","rdashAlpha","fcamelCase","_all","letter","camelCase","acceptData","owner","Data","uid","hasData","dataPriv","dataUser","rbrace","rmultiDash","dataAttr","removeData","_data","_removeData","dequeue","startLength","_queueHooks","stop","setter","clearQueue","defer","pnum","rcssNum","cssExpand","isAttached","composed","getRootNode","isHiddenWithinTree","adjustCSS","valueParts","tween","adjusted","scale","maxIterations","currentValue","initial","cssNumber","initialInUnit","defaultDisplayMap","getDefaultDisplay","showHide","show","hide","rcheckableType","rtagName","rscriptType","checkClone","noCloneChecked","wrapMap","thead","tr","td","_default","getAll","setGlobalEval","refElements","tbody","tfoot","colgroup","caption","optgroup","buildFragment","scripts","ignored","attached","nodes","htmlPrefilter","rtypenamespace","returnTrue","returnFalse","expectSync","safeActiveElement","one","origFn","leverageNative","notAsync","isTrigger","delegateType","stopImmediatePropagation","trigger","handleObjIn","eventHandle","handleObj","namespaces","origType","elemData","triggered","dispatch","bindType","delegateCount","mappedTypes","origCount","teardown","removeEvent","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","isPropagationStopped","currentTarget","isImmediatePropagationStopped","rnamespace","postDispatch","matchedHandlers","matchedSelectors","addProp","hook","originalEvent","noBubble","beforeunload","isDefaultPrevented","relatedTarget","timeStamp","isSimulated","bubbles","cancelable","changedTouches","eventPhase","offsetX","offsetY","pointerId","pointerType","screenX","screenY","targetTouches","toElement","mouseenter","mouseleave","pointerenter","pointerleave","related","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","udataOld","udataCur","fixInput","domManip","collection","hasScripts","iNoClone","valueIsFunction","_evalUrl","keepData","cleanData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","prepend","replaceWith","appendTo","prependTo","insertAfter","replaceAll","original","rnumnonpx","rcustomProp","getStyles","opener","swap","rboxStyle","rtrimCSS","curCSS","computed","maxWidth","isCustomProp","getPropertyValue","pixelBoxStyles","addGetHookIf","conditionFn","hookFn","computeStyleTests","divStyle","pixelPositionVal","reliableMarginLeftVal","roundPixelMeasures","pixelBoxStylesVal","boxSizingReliableVal","scrollboxSizeVal","reliableTrDimensionsVal","backgroundClip","clearCloneStyle","boxSizingReliable","pixelPosition","reliableMarginLeft","scrollboxSize","reliableTrDimensions","trChild","trStyle","borderBottomWidth","cssPrefixes","emptyStyle","vendorProps","finalPropName","final","cssProps","capName","vendorPropName","rdisplayswap","cssShow","cssNormalTransform","letterSpacing","fontWeight","setPositiveNumber","subtract","boxModelAdjustment","dimension","isBorderBox","computedVal","extra","getWidthOrHeight","valueIsBorderBox","offsetProp","Tween","easing","cssHooks","origName","setProperty","isFinite","scrollboxSizeBuggy","prefix","suffix","expand","expanded","propHooks","run","percent","eased","duration","step","fx","linear","swing","cos","PI","fxNow","inProgress","rfxtypes","rrun","schedule","requestAnimationFrame","interval","tick","createFxNow","genFx","includeWidth","createTween","animation","Animation","tweeners","stopped","prefilters","currentTime","startTime","tweens","specialEasing","originalProperties","originalOptions","gotoEnd","propFilter","complete","timer","anim","tweener","oldfire","propTween","restoreDisplay","isBox","dataShow","unqueued","overflowX","overflowY","prefilter","speed","speeds","fadeTo","animate","optall","doAnimation","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","fast","checkOn","optSelected","radioValue","boolHook","removeAttr","nType","attrHooks","bool","attrNames","lowercaseName","rfocusable","rclickable","stripAndCollapse","getClass","classesToArray","removeProp","propFix","classNames","curValue","finalValue","removeClass","toggleClass","stateVal","isValidValue","hasClass","rreturn","valHooks","optionSet","focusin","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","parentWindow","simulate","triggerHandler","attaches","rquery","parseXML","parserErrorElem","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","traditional","param","valueOrFunction","encodeURIComponent","serializeArray","r20","rhash","rantiCache","rheaders","rnoContent","rprotocol","transports","allTypes","originAnchor","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","lastModified","etag","isLocal","processData","contentType","accepts","json","responseFields","converters","ajaxSetup","ajaxPrefilter","ajaxTransport","ajax","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","urlAnchor","fireGlobals","uncached","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getResponseHeader","getAllResponseHeaders","mimeType","abort","finalText","crossDomain","hasContent","ifModified","headers","beforeSend","success","nativeStatusText","responses","isSuccess","modified","ct","finalDataType","firstDataType","ajaxHandleResponses","conv2","conv","dataFilter","throws","ajaxConvert","getJSON","getScript","wrapAll","firstElementChild","wrapInner","htmlIsFunction","unwrap","xhr","xhrSuccessStatus","xhrSupported","cors","username","xhrFields","onabort","ontimeout","onreadystatechange","responseType","binary","scriptAttrs","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","createHTMLDocument","implementation","keepScripts","parsed","params","animated","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","using","parentOffset","Height","Width","defaultExtra","funcName","unbind","delegate","undelegate","hover","fnOver","fnOut","proxy","holdReady","hold","parseJSON","isNumeric","_jQuery","_$","$","noConflict","auto","basePlacements","variationPlacements","reduce","acc","placement","beforeRead","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite","modifierPhases","getNodeName","getWindow","isElement","Element","isHTMLElement","HTMLElement","isShadowRoot","ShadowRoot","phase","_ref","effect","_ref2","initialStyles","popper","strategy","arrow","reference","requires","getBasePlacement","getUAString","uaData","userAgentData","brands","brand","isLayoutViewport","includeScale","isFixedStrategy","clientRect","visualViewport","addVisualOffsets","getLayoutRect","rootNode","isSameNode","isTableElement","getDocumentElement","getParentNode","assignedSlot","getTrueOffsetParent","getOffsetParent","isFirefox","currentNode","transform","perspective","contain","willChange","getContainingBlock","getMainAxisFromPlacement","within","mergePaddingObject","paddingObject","expandToHashMap","hashMap","_state$modifiersData$","arrowElement","popperOffsets","modifiersData","basePlacement","arrowRect","minProp","maxProp","endDiff","startDiff","arrowOffsetParent","clientSize","centerToReference","center","axisProp","centerOffset","_options$element","requiresIfExists","getVariation","unsetSides","mapToStyles","_Object$assign2","popperRect","variation","offsets","gpuAcceleration","adaptive","roundOffsets","isFixed","_offsets$x","_offsets$y","_ref3","hasX","hasY","sideX","sideY","heightProp","widthProp","_Object$assign","commonStyles","_ref4","dpr","devicePixelRatio","roundOffsetsByDPR","_ref5","_options$gpuAccelerat","_options$adaptive","_options$roundOffsets","passive","instance","_options$scroll","_options$resize","resize","scrollParents","scrollParent","getOppositePlacement","getOppositeVariationPlacement","getWindowScroll","getWindowScrollBarX","isScrollParent","_getComputedStyle","getScrollParent","listScrollParents","_element$ownerDocumen","isBody","updatedList","rectToClientRect","getClientRectFromMixedType","clippingParent","layoutViewport","getViewportRect","clientTop","getInnerBoundingClientRect","winScroll","getDocumentRect","getClippingRect","rootBoundary","mainClippingParents","clippingParents","clipperElement","getClippingParents","firstClippingParent","clippingRect","accRect","computeOffsets","commonX","commonY","mainAxis","detectOverflow","_options","_options$placement","_options$strategy","_options$boundary","_options$rootBoundary","_options$elementConte","elementContext","_options$altBoundary","altBoundary","_options$padding","altContext","clippingClientRect","contextElement","referenceClientRect","popperClientRect","elementClientRect","overflowOffsets","offsetData","multiply","_skip","_options$mainAxis","checkMainAxis","_options$altAxis","altAxis","checkAltAxis","specifiedFallbackPlacements","fallbackPlacements","_options$flipVariatio","flipVariations","allowedAutoPlacements","preferredPlacement","oppositePlacement","getExpandedFallbackPlacements","placements","_options$allowedAutoP","allowedPlacements","overflows","computeAutoPlacement","referenceRect","checksMap","Map","makeFallbackChecks","firstFittingPlacement","_basePlacement","isStartVariation","isVertical","mainVariationSide","altVariationSide","checks","every","fittingPlacement","getSideOffsets","preventedOffsets","isAnySideFullyClipped","preventOverflow","referenceOverflow","popperAltOverflow","referenceClippingOffsets","popperEscapeOffsets","isReferenceHidden","hasPopperEscaped","_options$offset","invertDistance","skidding","distanceAndSkiddingToXY","_data$state$placement","_options$tether","tether","_options$tetherOffset","tetherOffset","isBasePlacement","tetherOffsetValue","normalizedTetherOffsetValue","offsetModifierState","_offsetModifierState$","mainSide","altSide","additive","maxLen","arrowPaddingObject","arrowPaddingMin","arrowPaddingMax","arrowLen","minOffset","maxOffset","clientOffset","offsetModifierValue","tetherMax","preventedOffset","_offsetModifierState$2","_mainSide","_altSide","_offset","_min","_max","isOriginSide","_offsetModifierValue","_tetherMin","_tetherMax","_preventedOffset","withinMaxClamp","getCompositeRect","elementOrVirtualElement","isOffsetParentAnElement","offsetParentIsScaled","isElementScaled","modifiers","visited","modifier","dep","depModifier","DEFAULT_OPTIONS","areValidElements","popperGenerator","generatorOptions","_generatorOptions","_generatorOptions$def","defaultModifiers","_generatorOptions$def2","defaultOptions","orderedModifiers","effectCleanupFns","isDestroyed","setOptionsAction","cleanupModifierEffects","orderModifiers","mergeByName","_ref3$options","cleanupFn","noopFn","_state$elements","_state$orderedModifie","_state$orderedModifie2","destroy","onFirstUpdate","eventListeners","ownKeys","enumerableOnly","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","_objectSpread","_defineProperty","getOwnPropertyDescriptors","defineProperties","_slicedToArray","_arrayWithHoles","_s","_x","_r","_arr","_n","_d","return","_iterableToArrayLimit","_nonIterableRest","TRANSITION_END","getSelector","hrefAttribute","startsWith","getSelectorFromElement","getElementFromSelector","triggerTransitionEnd","getElement","isVisible","elementIsVisible","closedDetails","summary","Node","ELEMENT_NODE","findShadowRoot","attachShadow","reflow","getjQuery","DOMContentLoadedCallbacks","defineJQueryPlugin","plugin","NAME","JQUERY_NO_CONFLICT","jQueryInterface","execute","executeAfterTransition","transitionElement","emulatedDuration","_window$getComputedSt","transitionDuration","transitionDelay","floatTransitionDuration","floatTransitionDelay","getTransitionDurationFromElement","called","getNextActiveElement","shouldGetNext","isCycleAllowed","listLength","namespaceRegex","stripNameRegex","stripUidRegex","eventRegistry","uidEvent","customEvents","nativeEvents","makeEventUid","getElementEvents","findHandler","callable","delegationSelector","normalizeParameters","originalTypeEvent","delegationFunction","isDelegated","typeEvent","getTypeEvent","addHandler","oneOff","_normalizeParameters2","wrapFunction","previousFunction","domElements","domElement","hydrateObj","EventHandler","bootstrapDelegationHandler","bootstrapHandler","removeHandler","Boolean","removeNamespacedHandlers","storeElementEvent","handlerKey","_normalizeParameters4","inNamespace","isNamespace","elementEvent","keyHandlers","jQueryEvent","nativeDispatch","meta","_unused","elementMap","instanceMap","delete","normalizeData","normalizeDataKey","chr","Manipulator","setDataAttribute","removeDataAttribute","getDataAttributes","bsKeys","dataset","pureKey","getDataAttribute","Config","Default","DefaultType","_getConfig","_mergeConfigObj","_configAfterMerge","_typeCheckConfig","jsonConfig","configTypes","expectedTypes","valueType","BaseComponent","super","_element","_config","DATA_KEY","dispose","EVENT_KEY","propertyName","getOwnPropertyNames","_queueCallback","static","getInstance","VERSION","enableDismissTrigger","component","clickEvent","getOrCreateInstance","EVENT_KEY$b","EVENT_CLOSE","EVENT_CLOSED","Alert","isAnimated","_destroyElement","SELECTOR_DATA_TOGGLE$5","Button","SelectorEngine","findOne","ancestor","previous","previousElementSibling","nextElementSibling","focusableChildren","focusables","EVENT_KEY$9","EVENT_TOUCHSTART","EVENT_TOUCHMOVE","EVENT_TOUCHEND","EVENT_POINTERDOWN","EVENT_POINTERUP","Default$c","endCallback","leftCallback","rightCallback","DefaultType$c","Swipe","isSupported","_deltaX","_supportPointerEvents","PointerEvent","_initEvents","_start","_eventIsPointerPenTouch","_end","_handleSwipe","_move","absDeltaX","EVENT_KEY$8","DATA_API_KEY$5","ORDER_NEXT","ORDER_PREV","DIRECTION_LEFT","DIRECTION_RIGHT","EVENT_SLIDE","EVENT_SLID","EVENT_KEYDOWN$1","EVENT_MOUSEENTER$1","EVENT_MOUSELEAVE$1","EVENT_DRAG_START","EVENT_LOAD_DATA_API$3","EVENT_CLICK_DATA_API$5","CLASS_NAME_CAROUSEL","CLASS_NAME_ACTIVE$2","SELECTOR_ACTIVE","SELECTOR_ITEM","SELECTOR_ACTIVE_ITEM","KEY_TO_DIRECTION","Default$b","keyboard","pause","ride","DefaultType$b","Carousel","_interval","_activeElement","_isSliding","touchTimeout","_swipeHelper","_indicatorsElement","_addEventListeners","cycle","_slide","nextWhenVisible","_clearInterval","_updateInterval","_maybeEnableCycle","_getItems","activeIndex","_getItemIndex","_getActive","defaultInterval","_keydown","_addTouchEventListeners","swipeConfig","_directionToOrder","_setActiveIndicatorElement","activeIndicator","newActiveIndicator","elementInterval","isNext","nextElement","nextElementIndex","triggerEvent","eventName","_orderToDirection","isCycling","directionalClassName","orderClassName","_isAnimated","carousel","slideIndex","carousels","EVENT_KEY$7","EVENT_SHOW$6","EVENT_SHOWN$6","EVENT_HIDE$6","EVENT_HIDDEN$6","EVENT_CLICK_DATA_API$4","CLASS_NAME_SHOW$7","CLASS_NAME_COLLAPSE","CLASS_NAME_COLLAPSING","CLASS_NAME_DEEPER_CHILDREN","SELECTOR_DATA_TOGGLE$4","Default$a","DefaultType$a","Collapse","_isTransitioning","_triggerArray","toggleList","filterElement","foundElement","_initializeChildren","_addAriaAndCollapsedClass","_isShown","activeChildren","_getFirstLevelChildren","activeInstance","_getDimension","scrollSize","triggerArray","isOpen","selectorElements","NAME$a","EVENT_KEY$6","DATA_API_KEY$3","ARROW_UP_KEY$1","ARROW_DOWN_KEY$1","EVENT_HIDE$5","EVENT_HIDDEN$5","EVENT_SHOW$5","EVENT_SHOWN$5","EVENT_CLICK_DATA_API$3","EVENT_KEYDOWN_DATA_API","EVENT_KEYUP_DATA_API","CLASS_NAME_SHOW$6","SELECTOR_DATA_TOGGLE$3","SELECTOR_DATA_TOGGLE_SHOWN","SELECTOR_MENU","PLACEMENT_TOP","PLACEMENT_TOPEND","PLACEMENT_BOTTOM","PLACEMENT_BOTTOMEND","PLACEMENT_RIGHT","PLACEMENT_LEFT","Default$9","autoClose","popperConfig","DefaultType$9","_popper","_parent","_menu","_inNavbar","_detectNavbar","_createPopper","_completeHide","referenceElement","_getPopperConfig","_getPlacement","parentDropdown","isEnd","_getOffset","popperData","defaultBsPopperConfig","_selectMenuItem","openToggles","composedPath","isMenuTarget","isInput","isEscapeEvent","isUpOrDownEvent","getToggleButton","dataApiKeydownHandler","clearMenus","SELECTOR_FIXED_CONTENT","SELECTOR_STICKY_CONTENT","PROPERTY_PADDING","PROPERTY_MARGIN","ScrollBarHelper","getWidth","documentWidth","innerWidth","_disableOverFlow","_setElementAttributes","calculatedValue","_resetElementAttributes","isOverflowing","_saveInitialAttribute","styleProperty","scrollbarWidth","_applyManipulationCallback","actualValue","callBack","NAME$9","CLASS_NAME_SHOW$5","EVENT_MOUSEDOWN","Default$8","clickCallback","rootElement","DefaultType$8","Backdrop","_isAppended","_append","_getElement","_emulateAnimation","EVENT_KEY$5","EVENT_FOCUSIN$2","EVENT_KEYDOWN_TAB","TAB_NAV_BACKWARD","Default$7","trapElement","DefaultType$7","FocusTrap","_isActive","_lastTabNavDirection","activate","_handleFocusin","_handleKeydown","deactivate","EVENT_KEY$4","EVENT_HIDE$4","EVENT_HIDE_PREVENTED$1","EVENT_HIDDEN$4","EVENT_SHOW$4","EVENT_SHOWN$4","EVENT_RESIZE$1","EVENT_CLICK_DISMISS","EVENT_MOUSEDOWN_DISMISS","EVENT_KEYDOWN_DISMISS$1","EVENT_CLICK_DATA_API$2","CLASS_NAME_OPEN","CLASS_NAME_SHOW$4","CLASS_NAME_STATIC","Default$6","DefaultType$6","Modal","_dialog","_backdrop","_initializeBackDrop","_focustrap","_initializeFocusTrap","_scrollBar","_adjustDialog","_showElement","_hideModal","htmlElement","handleUpdate","modalBody","_triggerBackdropTransition","event2","_resetAdjustments","isModalOverflowing","initialOverflowY","isBodyOverflowing","showEvent","alreadyOpen","EVENT_KEY$3","DATA_API_KEY$1","EVENT_LOAD_DATA_API$2","CLASS_NAME_SHOW$3","CLASS_NAME_SHOWING$1","CLASS_NAME_HIDING","OPEN_SELECTOR","EVENT_SHOW$3","EVENT_SHOWN$3","EVENT_HIDE$3","EVENT_HIDE_PREVENTED","EVENT_HIDDEN$3","EVENT_RESIZE","EVENT_CLICK_DATA_API$1","EVENT_KEYDOWN_DISMISS","Default$5","DefaultType$5","Offcanvas","uriAttributes","SAFE_URL_PATTERN","DATA_URL_PATTERN","allowedAttribute","allowedAttributeList","attributeName","attributeRegex","DefaultAllowlist","area","h1","h2","h3","h4","h5","h6","li","ol","small","sup","ul","Default$4","allowList","extraClass","sanitizeFn","template","DefaultType$4","DefaultContentType","TemplateFactory","getContent","_resolvePossibleFunction","changeContent","_checkContent","toHtml","templateWrapper","_maybeSanitize","_ref6","_setContent","_ref7","_ref8","templateElement","_putElementInTemplate","unsafeHtml","sanitizeFunction","createdDocument","elementName","attributeList","allowedAttributes","sanitizeHtml","DISALLOWED_ATTRIBUTES","CLASS_NAME_FADE$2","CLASS_NAME_SHOW$2","SELECTOR_MODAL","EVENT_MODAL_HIDE","TRIGGER_HOVER","TRIGGER_FOCUS","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","Default$3","customClass","DefaultType$3","_isEnabled","_timeout","_isHovered","_activeTrigger","_templateFactory","_newContent","tip","_setListeners","_fixTitle","enable","toggleEnabled","_leave","_enter","_hideModalHandler","_disposePopper","_isWithContent","isInTheDom","_getTipElement","_isWithActiveTrigger","_getTitle","_createTipElement","_getContentForTemplate","_getTemplateFactory","tipId","getUID","setContent","_initializeOnDelegatedTarget","_getDelegateConfig","attachment","triggers","eventIn","eventOut","_setTimeout","dataAttributes","dataAttribute","Default$2","DefaultType$2","Popover","_getContent","EVENT_KEY$2","EVENT_ACTIVATE","EVENT_CLICK","EVENT_LOAD_DATA_API$1","CLASS_NAME_ACTIVE$1","SELECTOR_TARGET_LINKS","SELECTOR_NAV_LINKS","SELECTOR_LINK_ITEMS","Default$1","rootMargin","smoothScroll","threshold","DefaultType$1","ScrollSpy","_targetLinks","_observableSections","_rootElement","_activeTarget","_observer","_previousScrollData","visibleEntryTop","parentScrollTop","_initializeTargetsAndObservables","_maybeEnableSmoothScroll","disconnect","_getNewObserver","section","observe","observableSection","IntersectionObserver","_observerCallback","targetElement","_process","userScrollsDown","isIntersecting","_clearActiveClass","entryIsLowerThanPrevious","targetLinks","_activateParents","listGroup","activeNodes","spy","EVENT_KEY$1","EVENT_HIDE$1","EVENT_HIDDEN$1","EVENT_SHOW$1","EVENT_SHOWN$1","EVENT_CLICK_DATA_API","EVENT_KEYDOWN","EVENT_LOAD_DATA_API","ARROW_LEFT_KEY","ARROW_RIGHT_KEY","ARROW_UP_KEY","ARROW_DOWN_KEY","CLASS_NAME_ACTIVE","CLASS_NAME_FADE$1","CLASS_NAME_SHOW$1","NOT_SELECTOR_DROPDOWN_TOGGLE","SELECTOR_DATA_TOGGLE","SELECTOR_INNER_ELEM","SELECTOR_DATA_TOGGLE_ACTIVE","Tab","_setInitialAttributes","_getChildren","innerElem","_elemIsActive","_getActiveElem","hideEvent","_deactivate","_activate","relatedElem","_toggleDropDown","nextActiveElement","_setAttributeIfNotExists","_setInitialAttributesOnChild","_getInnerElement","isActive","outerElem","_getOuterElement","_setInitialAttributesOnTargetPanel","EVENT_MOUSEOVER","EVENT_MOUSEOUT","EVENT_FOCUSIN","EVENT_FOCUSOUT","EVENT_HIDE","EVENT_HIDDEN","EVENT_SHOW","EVENT_SHOWN","CLASS_NAME_HIDE","CLASS_NAME_SHOW","CLASS_NAME_SHOWING","autohide","Toast","_hasMouseInteraction","_hasKeyboardInteraction","_clearTimeout","_maybeScheduleHide","isShown","_onInteraction","isInteracting","Rails","linkClickSelector","buttonClickSelector","exclude","inputChangeSelector","formSubmitSelector","formInputClickSelector","formDisableSelector","formEnableSelector","fileInputSelector","linkDisableSelector","buttonDisableSelector","loadCSPNonce","cspNonce","csrfParam","csrfToken","CSRFProtection","refreshCSRFTokens","CustomEvent","createEvent","initCustomEvent","stopEverything","eventType","AcceptHeaders","createXHR","prepareOptions","processResponse","OPENED","withCredentials","DONE","isCrossDomain","serializeElement","additionalParam","inputs","formElements","allowAction","handleConfirm","confirm","answer","disableFormElement","disableFormElements","disableLinkElement","enableFormElement","enableFormElements","enableLinkElement","isXhrRedirect","handleDisabledElement","enableElement","disableElement","replacement","originalText","handleMethod","formContent","isRemote","handleRemote","enctype","formSubmitButtonClick","formNoValidate","preventInsignificantClick","insignificantMetaClick","rails","_rails_loaded","createCommonjsModule","sparkMd5","hex_chr","md5cycle","md5blk","md5blks","md5blk_array","md51","tail","lo","hi","md51_array","subarray","Uint8Array","rhex","hex","toUtf8","utf8Str2ArrayBuffer","returnUInt8Array","buff","ArrayBuffer","arrayBuffer2Utf8Str","concatenateArrayBuffers","byteLength","buffer","hexToBinaryString","SparkMD5","clamp","targetArray","sourceArray","appendBinary","_buff","_length","_hash","_finish","setState","hashBinary","classCallCheck","createClass","fileSlice","mozSlice","webkitSlice","FileChecksum","chunkCount","chunkIndex","md5Buffer","fileReader","fileReaderDidLoad","fileReaderDidError","readNextChunk","binaryDigest","base64digest","btoa","readAsArrayBuffer","getMetaValue","findElement","findElements","toArray$1","eventInit","initEvent","BlobRecord","checksum","content_type","byte_size","requestDidLoad","requestDidError","stringify","blob","direct_upload","directUploadData","toJSON","_xhr","BlobUpload","_blob$directUploadDat","DirectUpload","methodName","messages","DirectUploadController","directUpload","hiddenInput","insertAdjacentElement","dispatchError","signed_id","uploadRequestDidProgress","inputSelector","DirectUploadsController","controllers","createDirectUploadControllers","startNextController","controller","processingAttribute","submitButtonsByForm","WeakMap","started","didClick","didSubmitForm","didSubmitRemoteElement","handleFormSubmissionEvent","submitForm","autostart","ActiveStorage","Function","channels","require","webpackEmptyContext"],"mappings":"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","file":"js/application-a273e1065cfe90ff146d.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/packs/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 23);\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n// This is CodeMirror (https://codemirror.net/5), 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() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.CodeMirror = factory());\n})(this, function () {\n '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 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\\/(\\d+)/.exec(userAgent);\n var chrome_version = chrome && +chrome[1];\n var presto = /Opera\\//.test(userAgent);\n var safari = /Apple Computer/.test(navigator.vendor);\n var mac_geMountainLion = /Mac OS X 1\\d\\D([8-9]|\\d\\d)\\D/.test(userAgent);\n var phantom = /PhantomJS/.test(userAgent);\n var ios = safari && (/Mobile\\/\\w+/.test(userAgent) || navigator.maxTouchPoints > 2);\n var android = /Android/.test(userAgent);\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 var presto_version = presto && userAgent.match(/Version\\/(\\d*\\.\\d*)/);\n if (presto_version) {\n presto_version = Number(presto_version[1]);\n }\n if (presto_version && presto_version >= 15) {\n presto = false;\n webkit = true;\n }\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 function classTest(cls) {\n 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 function removeChildren(e) {\n for (var count = e.childNodes.length; count > 0; --count) {\n e.removeChild(e.firstChild);\n }\n return e;\n }\n function removeChildrenAndAdd(parent, e) {\n return removeChildren(parent).appendChild(e);\n }\n function elt(tag, content, className, style) {\n var e = document.createElement(tag);\n if (className) {\n e.className = className;\n }\n if (style) {\n e.style.cssText = style;\n }\n if (typeof content == \"string\") {\n e.appendChild(document.createTextNode(content));\n } else if (content) {\n for (var i = 0; i < content.length; ++i) {\n e.appendChild(content[i]);\n }\n }\n 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 var range;\n if (document.createRange) {\n 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 {\n range = function (node, start, end) {\n var r = document.body.createTextRange();\n try {\n r.moveToElementText(node.parentNode);\n } catch (e) {\n return r;\n }\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)\n // Android browser always returns false when child is a textnode\n {\n child = child.parentNode;\n }\n if (parent.contains) {\n return parent.contains(child);\n }\n do {\n if (child.nodeType == 11) {\n child = child.host;\n }\n if (child == parent) {\n return true;\n }\n } while (child = child.parentNode);\n }\n function activeElt(doc) {\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 = doc.activeElement;\n } catch (e) {\n activeElement = doc.body || null;\n }\n while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement) {\n activeElement = activeElement.shadowRoot.activeElement;\n }\n return activeElement;\n }\n function addClass(node, cls) {\n var current = node.className;\n if (!classTest(cls).test(current)) {\n node.className += (current ? \" \" : \"\") + cls;\n }\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)) {\n b += \" \" + as[i];\n }\n }\n return b;\n }\n var selectInput = function (node) {\n node.select();\n };\n if (ios)\n // Mobile Safari apparently has a bug where select() is broken.\n {\n selectInput = function (node) {\n node.selectionStart = 0;\n node.selectionEnd = node.value.length;\n };\n } else if (ie)\n // Suppress mysterious IE10 errors\n {\n selectInput = function (node) {\n try {\n node.select();\n } catch (_e) {}\n };\n }\n function doc(cm) {\n return cm.display.wrapper.ownerDocument;\n }\n function win(cm) {\n return doc(cm).defaultView;\n }\n function bind(f) {\n var args = Array.prototype.slice.call(arguments, 1);\n return function () {\n return f.apply(null, args);\n };\n }\n function copyObj(obj, target, overwrite) {\n if (!target) {\n target = {};\n }\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop))) {\n target[prop] = obj[prop];\n }\n }\n 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) {\n end = string.length;\n }\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 n += nextTab - i;\n n += tabSize - n % tabSize;\n i = nextTab + 1;\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 function indexOf(array, elt) {\n for (var i = 0; i < array.length; ++i) {\n if (array[i] == elt) {\n return i;\n }\n }\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 = {\n toString: function () {\n return \"CodeMirror.Pass\";\n }\n };\n\n // Reused option objects for setSelection & friends\n var sel_dontScroll = {\n scroll: false\n },\n sel_mouse = {\n origin: \"*mouse\"\n },\n sel_move = {\n origin: \"+move\"\n };\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) {\n nextTab = string.length;\n }\n var skipped = nextTab - pos;\n if (nextTab == string.length || col + skipped >= goal) {\n return pos + Math.min(skipped, goal - col);\n }\n col += nextTab - pos;\n col += tabSize - col % tabSize;\n pos = nextTab + 1;\n if (col >= goal) {\n return pos;\n }\n }\n }\n var spaceStrs = [\"\"];\n function spaceStr(n) {\n while (spaceStrs.length <= n) {\n spaceStrs.push(lst(spaceStrs) + \" \");\n }\n return spaceStrs[n];\n }\n function lst(arr) {\n return arr[arr.length - 1];\n }\n function map(array, f) {\n var out = [];\n for (var i = 0; i < array.length; i++) {\n out[i] = f(array[i], i);\n }\n return out;\n }\n function insertSorted(array, value, score) {\n var pos = 0,\n priority = score(value);\n while (pos < array.length && score(array[pos]) <= priority) {\n pos++;\n }\n array.splice(pos, 0, value);\n }\n function nothing() {}\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) {\n copyObj(props, inst);\n }\n return inst;\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\" && (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch));\n }\n function isWordChar(ch, helper) {\n if (!helper) {\n return isWordCharBasic(ch);\n }\n if (helper.source.indexOf(\"\\\\w\") > -1 && isWordCharBasic(ch)) {\n return true;\n }\n return helper.test(ch);\n }\n function isEmpty(obj) {\n for (var n in obj) {\n if (obj.hasOwnProperty(n) && obj[n]) {\n return false;\n }\n }\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) {\n return ch.charCodeAt(0) >= 768 && extendingChars.test(ch);\n }\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))) {\n pos += dir;\n }\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) {\n return from;\n }\n var midF = (from + to) / 2,\n mid = dir < 0 ? Math.ceil(midF) : Math.floor(midF);\n if (mid == from) {\n return pred(mid) ? from : to;\n }\n if (pred(mid)) {\n to = mid;\n } else {\n from = mid + dir;\n }\n }\n }\n\n // BIDI HELPERS\n\n function iterateBidiSections(order, from, to, f) {\n if (!order) {\n return f(from, to, \"ltr\", 0);\n }\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) {\n 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) {\n return i;\n }\n if (cur.to == ch) {\n if (cur.from != cur.to && sticky == \"before\") {\n found = i;\n } else {\n bidiOther = i;\n }\n }\n if (cur.from == ch) {\n if (cur.from != cur.to && sticky != \"before\") {\n found = i;\n } else {\n bidiOther = i;\n }\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) {\n return lowTypes.charAt(code);\n } else if (0x590 <= code && code <= 0x5f4) {\n return \"R\";\n } else if (0x600 <= code && code <= 0x6f9) {\n return arabicTypes.charAt(code - 0x600);\n } else if (0x6ee <= code && code <= 0x8ac) {\n return \"r\";\n } else if (0x2000 <= code && code <= 0x200b) {\n return \"w\";\n } else if (code == 0x200c) {\n return \"b\";\n } else {\n return \"L\";\n }\n }\n var bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/;\n var isNeutral = /[stwN]/,\n isStrong = /[LRr]/,\n countsAsLeft = /[Lb1n]/,\n countsAsNum = /[1n]/;\n function BidiSpan(level, from, to) {\n this.level = level;\n this.from = from;\n this.to = to;\n }\n return function (str, direction) {\n var outerType = direction == \"ltr\" ? \"L\" : \"R\";\n if (str.length == 0 || direction == \"ltr\" && !bidiRE.test(str)) {\n return false;\n }\n var len = str.length,\n types = [];\n for (var i = 0; i < len; ++i) {\n types.push(charType(str.charCodeAt(i)));\n }\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\") {\n types[i$1] = prev;\n } else {\n prev = type;\n }\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\") {\n types[i$2] = \"n\";\n } else if (isStrong.test(type$1)) {\n cur = type$1;\n if (type$1 == \"r\") {\n types[i$2] = \"R\";\n }\n }\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\") {\n types[i$3] = \"1\";\n } else if (type$2 == \",\" && prev$1 == types[i$3 + 1] && (prev$1 == \"1\" || prev$1 == \"n\")) {\n types[i$3] = prev$1;\n }\n 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 == \",\") {\n 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) {\n types[j] = replace;\n }\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\") {\n types[i$5] = \"L\";\n } else if (isStrong.test(type$4)) {\n cur$1 = type$4;\n }\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) {\n types[j$1] = replace$1;\n }\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 = [],\n 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,\n at = order.length,\n 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) {\n order.splice(at, 0, new BidiSpan(1, pos, j$2));\n at += isRTL;\n }\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 {\n ++j$2;\n }\n }\n if (pos < i$7) {\n order.splice(at, 0, new BidiSpan(1, pos, i$7));\n }\n }\n }\n if (direction == \"ltr\") {\n if (order[0].level == 1 && (m = str.match(/^\\s+/))) {\n order[0].from = m[0].length;\n order.unshift(new BidiSpan(0, 0, m[0].length));\n }\n 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 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) {\n order = line.order = bidiOrdering(line.text, direction);\n }\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 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 function getHandlers(emitter, type) {\n return emitter._handlers && emitter._handlers[type] || noHandlers;\n }\n function off(emitter, type, f) {\n if (emitter.removeEventListener) {\n emitter.removeEventListener(type, f, false);\n } else if (emitter.detachEvent) {\n emitter.detachEvent(\"on\" + type, f);\n } else {\n var map = emitter._handlers,\n arr = map && map[type];\n 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) {\n return;\n }\n var args = Array.prototype.slice.call(arguments, 2);\n for (var i = 0; i < handlers.length; ++i) {\n handlers[i].apply(null, args);\n }\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 = {\n type: e,\n preventDefault: function () {\n this.defaultPrevented = true;\n }\n };\n }\n signal(cm, override || e.type, cm, e);\n return e_defaultPrevented(e) || e.codemirrorIgnore;\n }\n function signalCursorActivity(cm) {\n var arr = cm._handlers && cm._handlers.cursorActivity;\n if (!arr) {\n return;\n }\n var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []);\n for (var i = 0; i < arr.length; ++i) {\n if (indexOf(set, arr[i]) == -1) {\n set.push(arr[i]);\n }\n }\n }\n 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) {\n on(this, type, f);\n };\n ctor.prototype.off = function (type, f) {\n off(this, type, f);\n };\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) {\n e.preventDefault();\n } else {\n e.returnValue = false;\n }\n }\n function e_stopPropagation(e) {\n if (e.stopPropagation) {\n e.stopPropagation();\n } else {\n e.cancelBubble = true;\n }\n }\n function e_defaultPrevented(e) {\n return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false;\n }\n function e_stop(e) {\n e_preventDefault(e);\n e_stopPropagation(e);\n }\n function e_target(e) {\n return e.target || e.srcElement;\n }\n function e_button(e) {\n var b = e.which;\n if (b == null) {\n if (e.button & 1) {\n b = 1;\n } else if (e.button & 2) {\n b = 3;\n } else if (e.button & 4) {\n b = 2;\n }\n }\n if (mac && e.ctrlKey && b == 1) {\n b = 3;\n }\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) {\n return false;\n }\n var div = elt('div');\n return \"draggable\" in div || \"dragDrop\" in div;\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 }\n var node = zwspSupported ? elt(\"span\", \"\\u200b\") : 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) {\n return badBidiRects;\n }\n var txt = removeChildrenAndAdd(measure, document.createTextNode(\"A\\u062eA\"));\n var r0 = range(txt, 0, 1).getBoundingClientRect();\n var r1 = range(txt, 1, 2).getBoundingClientRect();\n removeChildren(measure);\n if (!r0 || r0.left == r0.right) {\n return false;\n } // 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,\n result = [],\n l = string.length;\n while (pos <= l) {\n var nl = string.indexOf(\"\\n\", pos);\n if (nl == -1) {\n nl = string.length;\n }\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) {\n return string.split(/\\r\\n?|\\n/);\n };\n var hasSelection = window.getSelection ? function (te) {\n try {\n return te.selectionStart != te.selectionEnd;\n } catch (e) {\n return false;\n }\n } : function (te) {\n var range;\n try {\n range = te.ownerDocument.selection.createRange();\n } catch (e) {}\n if (!range || range.parentElement() != te) {\n return false;\n }\n return range.compareEndPoints(\"StartToEnd\", range) != 0;\n };\n var hasCopyEvent = function () {\n var e = elt(\"div\");\n if (\"oncopy\" in e) {\n return true;\n }\n e.setAttribute(\"oncopy\", \"return;\");\n return typeof e.oncopy == \"function\";\n }();\n var badZoomedRects = null;\n function hasBadZoomedRects(measure) {\n if (badZoomedRects != null) {\n return badZoomedRects;\n }\n var node = removeChildrenAndAdd(measure, elt(\"span\", \"x\"));\n var normal = node.getBoundingClientRect();\n var fromRange = range(node, 0, 1).getBoundingClientRect();\n return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1;\n }\n\n // Known modes, by name and by MIME\n var modes = {},\n 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 }\n modes[name] = mode;\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\") {\n found = {\n name: found\n };\n }\n spec = createObj(found, spec);\n spec.name = found.name;\n } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+xml$/.test(spec)) {\n return resolveMode(\"application/xml\");\n } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+json$/.test(spec)) {\n return resolveMode(\"application/json\");\n }\n if (typeof spec == \"string\") {\n return {\n name: spec\n };\n } else {\n return spec || {\n name: \"null\"\n };\n }\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) {\n return getMode(options, \"text/plain\");\n }\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)) {\n continue;\n }\n if (modeObj.hasOwnProperty(prop)) {\n modeObj[\"_\" + prop] = modeObj[prop];\n }\n modeObj[prop] = exts[prop];\n }\n }\n modeObj.name = spec.name;\n if (spec.helperType) {\n modeObj.helperType = spec.helperType;\n }\n if (spec.modeProps) {\n for (var prop$1 in spec.modeProps) {\n modeObj[prop$1] = spec.modeProps[prop$1];\n }\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 function copyState(mode, state) {\n if (state === true) {\n return state;\n }\n if (mode.copyState) {\n return mode.copyState(state);\n }\n var nstate = {};\n for (var n in state) {\n var val = state[n];\n if (val instanceof Array) {\n val = val.concat([]);\n }\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) {\n break;\n }\n state = info.state;\n mode = info.mode;\n }\n return info || {\n mode: mode,\n 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 StringStream.prototype.eol = function () {\n return this.pos >= this.string.length;\n };\n StringStream.prototype.sol = function () {\n return this.pos == this.lineStart;\n };\n StringStream.prototype.peek = function () {\n return this.string.charAt(this.pos) || undefined;\n };\n StringStream.prototype.next = function () {\n if (this.pos < this.string.length) {\n return this.string.charAt(this.pos++);\n }\n };\n StringStream.prototype.eat = function (match) {\n var ch = this.string.charAt(this.pos);\n var ok;\n if (typeof match == \"string\") {\n ok = ch == match;\n } else {\n ok = ch && (match.test ? match.test(ch) : match(ch));\n }\n if (ok) {\n ++this.pos;\n return ch;\n }\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))) {\n ++this.pos;\n }\n return this.pos > start;\n };\n StringStream.prototype.skipToEnd = function () {\n this.pos = this.string.length;\n };\n StringStream.prototype.skipTo = function (ch) {\n var found = this.string.indexOf(ch, this.pos);\n if (found > -1) {\n this.pos = found;\n return true;\n }\n };\n StringStream.prototype.backUp = function (n) {\n this.pos -= n;\n };\n StringStream.prototype.column = function () {\n if (this.lastColumnPos < this.start) {\n this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue);\n this.lastColumnPos = this.start;\n }\n 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) - (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) {\n return caseInsensitive ? str.toLowerCase() : str;\n };\n var substr = this.string.substr(this.pos, pattern.length);\n if (cased(substr) == cased(pattern)) {\n if (consume !== false) {\n this.pos += pattern.length;\n }\n return true;\n }\n } else {\n var match = this.string.slice(this.pos).match(pattern);\n if (match && match.index > 0) {\n return null;\n }\n if (match && consume !== false) {\n this.pos += match[0].length;\n }\n return match;\n }\n };\n StringStream.prototype.current = function () {\n return this.string.slice(this.start, this.pos);\n };\n StringStream.prototype.hideFirstChars = function (n, inner) {\n this.lineStart += n;\n try {\n return inner();\n } finally {\n this.lineStart -= n;\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) {\n throw new Error(\"There is no line \" + (n + doc.first) + \" in the document.\");\n }\n var chunk = doc;\n while (!chunk.lines) {\n for (var i = 0;; ++i) {\n var child = chunk.children[i],\n sz = child.chunkSize();\n if (n < sz) {\n chunk = child;\n break;\n }\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 n = start.line;\n doc.iter(start.line, end.line + 1, function (line) {\n var text = line.text;\n if (n == end.line) {\n text = text.slice(0, end.ch);\n }\n if (n == start.line) {\n text = text.slice(start.ch);\n }\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) {\n out.push(line.text);\n }); // 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) {\n for (var n = line; n; n = n.parent) {\n n.height += diff;\n }\n }\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) {\n return null;\n }\n var cur = line.parent,\n 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) {\n break;\n }\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],\n ch = child.height;\n if (h < ch) {\n chunk = child;\n continue outer;\n }\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],\n lh = line.height;\n if (h < lh) {\n break;\n }\n h -= lh;\n }\n return n + i;\n }\n function isLine(doc, l) {\n 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 if (!(this instanceof Pos)) {\n return new Pos(line, ch, sticky);\n }\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) {\n return a.line - b.line || a.ch - b.ch;\n }\n function equalCursorPos(a, b) {\n return a.sticky == b.sticky && cmp(a, b) == 0;\n }\n function copyPos(x) {\n return Pos(x.line, x.ch);\n }\n function maxPos(a, b) {\n return cmp(a, b) < 0 ? b : a;\n }\n function minPos(a, b) {\n return cmp(a, b) < 0 ? a : b;\n }\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) {\n return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1));\n }\n function clipPos(doc, pos) {\n if (pos.line < doc.first) {\n return Pos(doc.first, 0);\n }\n var last = doc.first + doc.size - 1;\n if (pos.line > last) {\n return Pos(last, getLine(doc, last).text.length);\n }\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) {\n return Pos(pos.line, linelen);\n } else if (ch < 0) {\n return Pos(pos.line, 0);\n } else {\n return pos;\n }\n }\n function clipPosArray(doc, array) {\n var out = [];\n for (var i = 0; i < array.length; i++) {\n out[i] = clipPos(doc, array[i]);\n }\n return out;\n }\n var SavedContext = function (state, lookAhead) {\n this.state = state;\n this.lookAhead = lookAhead;\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 Context.prototype.lookAhead = function (n) {\n var line = this.doc.getLine(this.line + n);\n if (line != null && n > this.maxLookAhead) {\n this.maxLookAhead = n;\n }\n return line;\n };\n Context.prototype.baseToken = function (n) {\n if (!this.baseTokens) {\n return null;\n }\n while (this.baseTokens[this.baseTokenPos] <= n) {\n this.baseTokenPos += 2;\n }\n var type = this.baseTokens[this.baseTokenPos + 1];\n return {\n type: type && type.replace(/( |^)overlay .*/, \"\"),\n size: this.baseTokens[this.baseTokenPos] - n\n };\n };\n Context.prototype.nextLine = function () {\n this.line++;\n if (this.maxLookAhead > 0) {\n 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 // 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],\n lineClasses = {};\n // Compute the base array of styles\n runMode(cm, line.text, cm.doc.mode, context, function (end, style) {\n return st.push(end, style);\n }, lineClasses, forceToEnd);\n var state = context.state;\n\n // Run overlays, adjust style array.\n var loop = function (o) {\n context.baseTokens = st;\n var overlay = cm.state.overlays[o],\n i = 1,\n at = 0;\n context.state = true;\n runMode(cm, line.text, overlay.mode, context, function (end, style) {\n var start = i;\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 }\n i += 2;\n at = Math.min(end, i_end);\n }\n if (!style) {\n return;\n }\n if (overlay.opaque) {\n st.splice(start, i - start, end, \"overlay \" + style);\n i = start + 2;\n } else {\n for (; start < i; start += 2) {\n var cur = st[start + 1];\n st[start + 1] = (cur ? cur + \" \" : \"\") + \"overlay \" + style;\n }\n }\n }, lineClasses);\n context.state = state;\n context.baseTokens = null;\n context.baseTokenPos = 1;\n };\n for (var o = 0; o < cm.state.overlays.length; ++o) loop(o);\n return {\n styles: st,\n 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) {\n context.state = resetState;\n }\n line.stateAfter = context.save(!resetState);\n line.styles = result.styles;\n if (result.classes) {\n line.styleClasses = result.classes;\n } else if (line.styleClasses) {\n line.styleClasses = null;\n }\n if (updateFrontier === cm.doc.highlightFrontier) {\n cm.doc.modeFrontier = Math.max(cm.doc.modeFrontier, ++cm.doc.highlightFrontier);\n }\n }\n return line.styles;\n }\n function getContextBefore(cm, n, precise) {\n var doc = cm.doc,\n display = cm.display;\n if (!doc.mode.startState) {\n return new Context(doc, true, n);\n }\n var start = findStartLine(cm, n, precise);\n var saved = start > doc.first && getLine(doc, start - 1).stateAfter;\n var context = saved ? Context.fromSaved(doc, saved, start) : new Context(doc, startState(doc.mode), start);\n doc.iter(start, n, function (line) {\n processLine(cm, line.text, context);\n var pos = context.line;\n line.stateAfter = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo ? context.save() : null;\n context.nextLine();\n });\n if (precise) {\n doc.modeFrontier = context.line;\n }\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 == \"\") {\n callBlankLine(mode, context.state);\n }\n while (!stream.eol()) {\n readToken(mode, stream, context.state);\n stream.start = stream.pos;\n }\n }\n function callBlankLine(mode, state) {\n if (mode.blankLine) {\n return mode.blankLine(state);\n }\n if (!mode.innerMode) {\n return;\n }\n var inner = innerMode(mode, state);\n if (inner.mode.blankLine) {\n 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) {\n inner[0] = innerMode(mode, state).mode;\n }\n var style = mode.token(stream, state);\n if (stream.pos > stream.start) {\n return style;\n }\n }\n throw new Error(\"Mode \" + mode.name + \" failed to advance stream.\");\n }\n var Token = function (stream, type, state) {\n this.start = stream.start;\n this.end = stream.pos;\n this.string = stream.current();\n this.type = type || null;\n this.state = state;\n };\n\n // Utility for getTokenAt and getLineTokens\n function takeToken(cm, pos, precise, asArray) {\n var doc = cm.doc,\n mode = doc.mode,\n style;\n pos = clipPos(doc, pos);\n var line = getLine(doc, pos.line),\n context = getContextBefore(cm, pos.line, precise);\n var stream = new StringStream(line.text, cm.options.tabSize, context),\n tokens;\n if (asArray) {\n tokens = [];\n }\n while ((asArray || stream.pos < pos.ch) && !stream.eol()) {\n stream.start = stream.pos;\n style = readToken(mode, stream, context.state);\n if (asArray) {\n tokens.push(new Token(stream, style, copyState(doc.mode, context.state)));\n }\n }\n return asArray ? tokens : new Token(stream, style, context.state);\n }\n function extractLineClasses(type, output) {\n if (type) {\n for (;;) {\n var lineClass = type.match(/(?:^|\\s+)line-(background-)?(\\S+)/);\n if (!lineClass) {\n break;\n }\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 }\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) {\n flattenSpans = cm.options.flattenSpans;\n }\n var curStart = 0,\n curStyle = null;\n var stream = new StringStream(text, cm.options.tabSize, context),\n style;\n var inner = cm.options.addModeClass && [null];\n if (text == \"\") {\n extractLineClasses(callBlankLine(mode, context.state), lineClasses);\n }\n while (!stream.eol()) {\n if (stream.pos > cm.options.maxHighlightLength) {\n flattenSpans = false;\n if (forceToEnd) {\n processLine(cm, text, context, stream.pos);\n }\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) {\n style = \"m-\" + (style ? mName + \" \" + style : mName);\n }\n }\n if (!flattenSpans || curStyle != style) {\n while (curStart < stream.start) {\n curStart = Math.min(stream.start, curStart + 5000);\n f(curStart, curStyle);\n }\n 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,\n minline,\n 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) {\n return doc.first;\n }\n var line = getLine(doc, search - 1),\n after = line.stateAfter;\n if (after && (!precise || search + (after instanceof SavedContext ? after.lookAhead : 0) <= doc.modeFrontier)) {\n return search;\n }\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 function retreatFrontier(doc, n) {\n doc.modeFrontier = Math.min(doc.modeFrontier, n);\n if (doc.highlightFrontier < n - 10) {\n return;\n }\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,\n sawCollapsedSpans = false;\n function seeReadOnlySpans() {\n sawReadOnlySpans = true;\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;\n 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) {\n for (var i = 0; i < spans.length; ++i) {\n var span = spans[i];\n if (span.marker == marker) {\n return span;\n }\n }\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) {\n (r || (r = [])).push(spans[i]);\n }\n }\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 && line.markedSpans && inThisOp.has(line.markedSpans)) {\n line.markedSpans.push(span);\n } else {\n line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span];\n if (inThisOp) {\n inThisOp.add(line.markedSpans);\n }\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) {\n for (var i = 0; i < old.length; ++i) {\n var span = old[i],\n marker = span.marker;\n var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh);\n if (startsBefore || span.from == startCh && marker.type == \"bookmark\" && (!isInsert || !span.marker.insertLeft)) {\n var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh);\n (nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to));\n }\n }\n }\n return nw;\n }\n function markedSpansAfter(old, endCh, isInsert) {\n var nw;\n if (old) {\n for (var i = 0; i < old.length; ++i) {\n var span = old[i],\n marker = span.marker;\n var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh);\n if (endsAfter || span.from == endCh && marker.type == \"bookmark\" && (!isInsert || span.marker.insertLeft)) {\n var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh);\n (nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh, span.to == null ? null : span.to - endCh));\n }\n }\n }\n 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) {\n return null;\n }\n var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans;\n var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans;\n if (!oldFirst && !oldLast) {\n return null;\n }\n var startCh = change.from.ch,\n endCh = change.to.ch,\n 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,\n 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) {\n span.to = startCh;\n } else if (sameLine) {\n span.to = found.to == null ? null : found.to + offset;\n }\n }\n }\n }\n if (last) {\n // Fix up .from in last (or move them into first in case of sameLine)\n for (var i$1 = 0; i$1 < last.length; ++i$1) {\n var span$1 = last[i$1];\n if (span$1.to != null) {\n span$1.to += offset;\n }\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) {\n (first || (first = [])).push(span$1);\n }\n }\n } else {\n span$1.from += offset;\n if (sameLine) {\n (first || (first = [])).push(span$1);\n }\n }\n }\n }\n // Make sure we didn't create any zero-length spans\n if (first) {\n first = clearEmptySpans(first);\n }\n if (last && last != first) {\n 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,\n 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 }\n }\n }\n for (var i$3 = 0; i$3 < gap; ++i$3) {\n newMarkers.push(gapMarkers);\n }\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 }\n if (!spans.length) {\n return null;\n }\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) {\n 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 }\n });\n if (!markers) {\n return null;\n }\n var parts = [{\n from: from,\n to: to\n }];\n for (var i = 0; i < markers.length; ++i) {\n var mk = markers[i],\n 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) {\n continue;\n }\n var newParts = [j, 1],\n dfrom = cmp(p.from, m.from),\n dto = cmp(p.to, m.to);\n if (dfrom < 0 || !mk.inclusiveLeft && !dfrom) {\n newParts.push({\n from: p.from,\n to: m.from\n });\n }\n if (dto > 0 || !mk.inclusiveRight && !dto) {\n newParts.push({\n from: m.to,\n to: p.to\n });\n }\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) {\n return;\n }\n for (var i = 0; i < spans.length; ++i) {\n spans[i].marker.detachLine(line);\n }\n line.markedSpans = null;\n }\n function attachMarkedSpans(line, spans) {\n if (!spans) {\n return;\n }\n for (var i = 0; i < spans.length; ++i) {\n spans[i].marker.attachLine(line);\n }\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) {\n return marker.inclusiveLeft ? -1 : 0;\n }\n function extraRight(marker) {\n return marker.inclusiveRight ? 1 : 0;\n }\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) {\n return lenDiff;\n }\n var aPos = a.find(),\n bPos = b.find();\n var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b);\n if (fromCmp) {\n return -fromCmp;\n }\n var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b);\n if (toCmp) {\n return toCmp;\n }\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,\n found;\n if (sps) {\n 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 && (!found || compareCollapsedMarkers(found, sp.marker) < 0)) {\n found = sp.marker;\n }\n }\n }\n return found;\n }\n function collapsedSpanAtStart(line) {\n return collapsedSpanAtSide(line, true);\n }\n function collapsedSpanAtEnd(line) {\n return collapsedSpanAtSide(line, false);\n }\n function collapsedSpanAround(line, ch) {\n var sps = sawCollapsedSpans && line.markedSpans,\n found;\n if (sps) {\n 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) && (!found || compareCollapsedMarkers(found, sp.marker) < 0)) {\n found = sp.marker;\n }\n }\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) {\n for (var i = 0; i < sps.length; ++i) {\n var sp = sps[i];\n if (!sp.marker.collapsed) {\n continue;\n }\n var found = sp.marker.find(0);\n var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker);\n var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker);\n if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) {\n continue;\n }\n if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) || fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0)) {\n return true;\n }\n }\n }\n }\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 }\n return line;\n }\n function visualLineEnd(line) {\n var merged;\n while (merged = collapsedSpanAtEnd(line)) {\n line = merged.find(1, true).line;\n }\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),\n vis = visualLine(line);\n if (line == vis) {\n return lineN;\n }\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()) {\n return lineN;\n }\n var line = getLine(doc, lineN),\n merged;\n if (!lineIsHidden(doc, line)) {\n return lineN;\n }\n while (merged = collapsedSpanAtEnd(line)) {\n line = merged.find(1, true).line;\n }\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) {\n for (var sp = void 0, i = 0; i < sps.length; ++i) {\n sp = sps[i];\n if (!sp.marker.collapsed) {\n continue;\n }\n if (sp.from == null) {\n return true;\n }\n if (sp.marker.widgetNode) {\n continue;\n }\n if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp)) {\n return true;\n }\n }\n }\n }\n function lineIsHiddenInner(doc, line, span) {\n if (span.to == null) {\n var end = span.marker.find(1, true);\n return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker));\n }\n if (span.marker.inclusiveRight && span.to == line.text.length) {\n return true;\n }\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 && (sp.to == null || sp.to != span.from) && (sp.marker.inclusiveLeft || span.marker.inclusiveRight) && lineIsHiddenInner(doc, line, sp)) {\n return true;\n }\n }\n }\n\n // Find the height above the given line.\n function heightAtLine(lineObj) {\n lineObj = visualLine(lineObj);\n var h = 0,\n chunk = lineObj.parent;\n for (var i = 0; i < chunk.lines.length; ++i) {\n var line = chunk.lines[i];\n if (line == lineObj) {\n break;\n } else {\n h += line.height;\n }\n }\n for (var p = chunk.parent; p; chunk = p, p = chunk.parent) {\n for (var i$1 = 0; i$1 < p.children.length; ++i$1) {\n var cur = p.children[i$1];\n if (cur == chunk) {\n break;\n } else {\n h += cur.height;\n }\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) {\n return 0;\n }\n var len = line.text.length,\n merged,\n 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,\n doc = cm.doc;\n d.maxLine = getLine(doc, doc.first);\n d.maxLineLength = lineLength(d.maxLine);\n d.maxLineChanged = true;\n doc.iter(function (line) {\n var len = lineLength(line);\n 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 Line.prototype.lineNo = function () {\n return lineNo(this);\n };\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) {\n line.stateAfter = null;\n }\n if (line.styles) {\n line.styles = null;\n }\n if (line.order != null) {\n line.order = null;\n }\n detachMarkedSpans(line);\n attachMarkedSpans(line, markedSpans);\n var estHeight = estimateHeight ? estimateHeight(line) : 1;\n if (estHeight != line.height) {\n updateLineHeight(line, estHeight);\n }\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 = {},\n styleToClassCacheWithMode = {};\n function interpretTokenStyle(style, options) {\n if (!style || /^\\s*$/.test(style)) {\n return null;\n }\n var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache;\n return cache[style] || (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 = {\n pre: eltP(\"pre\", [content], \"CodeMirror-line\"),\n content: content,\n col: 0,\n pos: 0,\n cm: cm,\n trailingSpace: false,\n splitSpaces: cm.getOption(\"lineWrapping\")\n };\n lineView.measure = {};\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,\n 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 }\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 }\n if (line.styleClasses.textClass) {\n builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || \"\");\n }\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\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 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) {\n return;\n }\n var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text;\n var special = builder.cm.state.specialChars,\n mustWrap = false;\n var content;\n 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) {\n mustWrap = true;\n }\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) {\n content.appendChild(elt(\"span\", [txt]));\n } else {\n content.appendChild(txt);\n }\n builder.map.push(builder.pos, builder.pos + skipped, txt);\n builder.col += skipped;\n builder.pos += skipped;\n }\n if (!m) {\n break;\n }\n pos += skipped + 1;\n var txt$1 = void 0;\n if (m[0] == \"\\t\") {\n var tabSize = builder.cm.options.tabSize,\n tabWidth = tabSize - builder.col % tabSize;\n txt$1 = content.appendChild(elt(\"span\", spaceStr(tabWidth), \"cm-tab\"));\n txt$1.setAttribute(\"role\", \"presentation\");\n txt$1.setAttribute(\"cm-text\", \"\\t\");\n builder.col += tabWidth;\n } else if (m[0] == \"\\r\" || m[0] == \"\\n\") {\n txt$1 = content.appendChild(elt(\"span\", m[0] == \"\\r\" ? \"\\u240d\" : \"\\u2424\", \"cm-invalidchar\"));\n txt$1.setAttribute(\"cm-text\", m[0]);\n builder.col += 1;\n } else {\n txt$1 = builder.cm.options.specialCharPlaceholder(m[0]);\n txt$1.setAttribute(\"cm-text\", m[0]);\n if (ie && ie_version < 9) {\n content.appendChild(elt(\"span\", [txt$1]));\n } else {\n content.appendChild(txt$1);\n }\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) {\n fullStyle += startStyle;\n }\n if (endStyle) {\n fullStyle += endStyle;\n }\n var token = elt(\"span\", [content], fullStyle, css);\n if (attributes) {\n for (var attr in attributes) {\n if (attributes.hasOwnProperty(attr) && attr != \"style\" && attr != \"class\") {\n token.setAttribute(attr, attributes[attr]);\n }\n }\n }\n 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)) {\n return text;\n }\n var spaceBefore = trailingBefore,\n 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 }\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,\n 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) {\n break;\n }\n }\n if (part.to >= end) {\n return inner(builder, text, style, startStyle, endStyle, css, attributes);\n }\n inner(builder, text.slice(0, part.to - start), style, startStyle, null, css, attributes);\n startStyle = null;\n text = text.slice(part.to - start);\n start = part.to;\n }\n };\n }\n function buildCollapsedSpan(builder, size, marker, ignoreWidget) {\n var widget = !ignoreWidget && marker.widgetNode;\n if (widget) {\n builder.map.push(builder.pos, builder.pos + size, widget);\n }\n if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) {\n if (!widget) {\n widget = builder.content.appendChild(document.createElement(\"span\"));\n }\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,\n allText = line.text,\n 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 }\n return;\n }\n var len = allText.length,\n pos = 0,\n i = 1,\n text = \"\",\n style,\n css;\n var nextChange = 0,\n spanStyle,\n spanEndStyle,\n spanStartStyle,\n collapsed,\n attributes;\n for (;;) {\n if (nextChange == pos) {\n // Update current marker set\n spanStyle = spanEndStyle = spanStartStyle = css = \"\";\n attributes = null;\n collapsed = null;\n nextChange = Infinity;\n var foundBookmarks = [],\n endStyles = void 0;\n for (var j = 0; j < spans.length; ++j) {\n var sp = spans[j],\n 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) {\n spanStyle += \" \" + m.className;\n }\n if (m.css) {\n css = (css ? css + \";\" : \"\") + m.css;\n }\n if (m.startStyle && sp.from == pos) {\n spanStartStyle += \" \" + m.startStyle;\n }\n if (m.endStyle && sp.to == nextChange) {\n (endStyles || (endStyles = [])).push(m.endStyle, sp.to);\n }\n // support for the old title property\n // https://github.com/codemirror/CodeMirror/pull/5673\n if (m.title) {\n (attributes || (attributes = {})).title = m.title;\n }\n if (m.attributes) {\n for (var attr in m.attributes) {\n (attributes || (attributes = {}))[attr] = m.attributes[attr];\n }\n }\n if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0)) {\n collapsed = sp;\n }\n } else if (sp.from > pos && nextChange > sp.from) {\n nextChange = sp.from;\n }\n }\n if (endStyles) {\n for (var j$1 = 0; j$1 < endStyles.length; j$1 += 2) {\n if (endStyles[j$1 + 1] == nextChange) {\n spanEndStyle += \" \" + endStyles[j$1];\n }\n }\n }\n if (!collapsed || collapsed.from == pos) {\n for (var j$2 = 0; j$2 < foundBookmarks.length; ++j$2) {\n buildCollapsedSpan(builder, 0, foundBookmarks[j$2]);\n }\n }\n if (collapsed && (collapsed.from || 0) == pos) {\n buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos, collapsed.marker, collapsed.from == null);\n if (collapsed.to == null) {\n return;\n }\n if (collapsed.to == pos) {\n collapsed = false;\n }\n }\n }\n if (pos >= len) {\n 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, spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : \"\", css, attributes);\n }\n if (end >= upto) {\n text = text.slice(upto - pos);\n pos = upto;\n break;\n }\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 // 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 = [],\n 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 var operationGroup = null;\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 function fireCallbacksForOps(group) {\n // Calls delayed callbacks and cursorActivity handlers until no\n // new ones appear\n var callbacks = group.delayedCallbacks,\n i = 0;\n do {\n for (; i < callbacks.length; i++) {\n callbacks[i].call(null);\n }\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 }\n }\n } while (i < callbacks.length);\n }\n function finishOperation(op, endCb) {\n var group = op.ownsGroup;\n if (!group) {\n return;\n }\n try {\n fireCallbacksForOps(group);\n } finally {\n operationGroup = null;\n endCb(group);\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) {\n return;\n }\n var args = Array.prototype.slice.call(arguments, 2),\n 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 () {\n return arr[i].apply(null, args);\n });\n };\n for (var i = 0; i < arr.length; ++i) loop(i);\n }\n function fireOrphanDelayed() {\n var delayed = orphanDelayedCallbacks;\n orphanDelayedCallbacks = null;\n for (var i = 0; i < delayed.length; ++i) {\n delayed[i]();\n }\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\") {\n updateLineText(cm, lineView);\n } else if (type == \"gutter\") {\n updateLineGutter(cm, lineView, lineN, dims);\n } else if (type == \"class\") {\n updateLineClasses(cm, lineView);\n } else if (type == \"widget\") {\n updateLineWidgets(cm, lineView, dims);\n }\n }\n 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 }\n lineView.node.appendChild(lineView.text);\n if (ie && ie_version < 8) {\n lineView.node.style.zIndex = 2;\n }\n }\n return lineView.node;\n }\n function updateLineBackground(cm, lineView) {\n var cls = lineView.bgClass ? lineView.bgClass + \" \" + (lineView.line.bgClass || \"\") : lineView.line.bgClass;\n if (cls) {\n cls += \" CodeMirror-linebackground\";\n }\n if (lineView.background) {\n if (cls) {\n lineView.background.className = cls;\n } else {\n lineView.background.parentNode.removeChild(lineView.background);\n lineView.background = null;\n }\n } else if (cls) {\n var wrap = ensureLineWrapped(lineView);\n lineView.background = wrap.insertBefore(elt(\"div\", null, cls), wrap.firstChild);\n cm.display.input.setUneditable(lineView.background);\n }\n }\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) {\n lineView.node = built.pre;\n }\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 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 }\n var textClass = lineView.textClass ? lineView.textClass + \" \" + (lineView.line.textClass || \"\") : lineView.line.textClass;\n lineView.text.className = textClass || \"\";\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, \"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 }\n if (cm.options.lineNumbers && (!markers || !markers[\"CodeMirror-linenumbers\"])) {\n lineView.lineNumber = gutterWrap.appendChild(elt(\"div\", lineNumberFor(cm.options, lineN), \"CodeMirror-linenumber CodeMirror-gutter-elt\", \"left: \" + dims.gutterLeft[\"CodeMirror-linenumbers\"] + \"px; width: \" + cm.display.lineNumInnerWidth + \"px\"));\n }\n if (markers) {\n for (var k = 0; k < cm.display.gutterSpecs.length; ++k) {\n var id = cm.display.gutterSpecs[k].className,\n found = markers.hasOwnProperty(id) && markers[id];\n if (found) {\n gutterWrap.appendChild(elt(\"div\", [found], \"CodeMirror-gutter-elt\", \"left: \" + dims.gutterLeft[id] + \"px; width: \" + dims.gutterWidth[id] + \"px\"));\n }\n }\n }\n }\n }\n function updateLineWidgets(cm, lineView, dims) {\n if (lineView.alignable) {\n lineView.alignable = null;\n }\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)) {\n lineView.node.removeChild(node);\n }\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) {\n lineView.bgClass = built.bgClass;\n }\n if (built.textClass) {\n 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) {\n for (var i = 0; i < lineView.rest.length; i++) {\n insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false);\n }\n }\n }\n function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) {\n if (!line.widgets) {\n return;\n }\n var wrap = ensureLineWrapped(lineView);\n for (var i = 0, ws = line.widgets; i < ws.length; ++i) {\n var widget = ws[i],\n node = elt(\"div\", [widget.node], \"CodeMirror-linewidget\" + (widget.className ? \" \" + widget.className : \"\"));\n if (!widget.handleMouseEvents) {\n node.setAttribute(\"cm-ignore-events\", \"true\");\n }\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 }\n signalLater(widget, \"redraw\");\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) {\n node.style.marginLeft = -dims.gutterTotalWidth + \"px\";\n }\n }\n }\n function widgetHeight(widget) {\n if (widget.height != null) {\n return widget.height;\n }\n var cm = widget.doc.cm;\n if (!cm) {\n return 0;\n }\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 }\n if (widget.noHScroll) {\n parentStyle += \"width: \" + cm.display.wrapper.clientWidth + \"px;\";\n }\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.parentNode == display.sizer && n != display.mover) {\n return true;\n }\n }\n }\n\n // POSITION MEASUREMENT\n\n function paddingTop(display) {\n return display.lineSpace.offsetTop;\n }\n function paddingVert(display) {\n return display.mover.offsetHeight - display.lineSpace.offsetHeight;\n }\n function paddingH(display) {\n if (display.cachedPaddingH) {\n return display.cachedPaddingH;\n }\n var e = removeChildrenAndAdd(display.measure, elt(\"pre\", \"x\", \"CodeMirror-line-like\"));\n var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle;\n var data = {\n left: parseInt(style.paddingLeft),\n right: parseInt(style.paddingRight)\n };\n if (!isNaN(data.left) && !isNaN(data.right)) {\n display.cachedPaddingH = data;\n }\n return data;\n }\n function scrollGap(cm) {\n return scrollerGap - cm.display.nativeBarWidth;\n }\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],\n 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 }\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 {\n map: lineView.measure.map,\n cache: lineView.measure.cache\n };\n }\n if (lineView.rest) {\n for (var i = 0; i < lineView.rest.length; i++) {\n if (lineView.rest[i] == line) {\n return {\n map: lineView.measure.maps[i],\n cache: lineView.measure.caches[i]\n };\n }\n }\n for (var i$1 = 0; i$1 < lineView.rest.length; i$1++) {\n if (lineNo(lineView.rest[i$1]) > lineN) {\n return {\n map: lineView.measure.maps[i$1],\n cache: lineView.measure.caches[i$1],\n before: true\n };\n }\n }\n }\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 }\n var ext = cm.display.externalMeasured;\n if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size) {\n return ext;\n }\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,\n view: view,\n rect: null,\n map: info.map,\n cache: info.cache,\n 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) {\n ch = -1;\n }\n var key = ch + (bias || \"\"),\n 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 }\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) {\n prepared.cache[key] = found;\n }\n }\n return {\n left: found.left,\n right: found.right,\n top: varHeight ? found.rtop : found.top,\n bottom: varHeight ? found.rbottom : found.bottom\n };\n }\n var nullRect = {\n left: 0,\n right: 0,\n top: 0,\n 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;\n end = 1;\n collapse = \"left\";\n } else if (ch < mEnd) {\n start = ch - mStart;\n end = start + 1;\n } else if (i == map.length - 3 || ch == mEnd && map[i + 3] > ch) {\n end = mEnd - mStart;\n start = end - 1;\n if (ch >= mEnd) {\n collapse = \"right\";\n }\n }\n if (start != null) {\n node = map[i + 2];\n if (mStart == mEnd && bias == (node.insertLeft ? \"left\" : \"right\")) {\n collapse = bias;\n }\n if (bias == \"left\" && start == 0) {\n while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) {\n node = map[(i -= 3) + 2];\n collapse = \"left\";\n }\n }\n if (bias == \"right\" && start == mEnd - mStart) {\n while (i < map.length - 3 && map[i + 3] == map[i + 4] && !map[i + 5].insertLeft) {\n node = map[(i += 3) + 2];\n collapse = \"right\";\n }\n }\n break;\n }\n }\n return {\n node: node,\n start: start,\n end: end,\n collapse: collapse,\n coverStart: mStart,\n coverEnd: mEnd\n };\n }\n function getUsefulRect(rects, bias) {\n var rect = nullRect;\n if (bias == \"left\") {\n for (var i = 0; i < rects.length; i++) {\n if ((rect = rects[i]).left != rect.right) {\n break;\n }\n }\n } else {\n for (var i$1 = rects.length - 1; i$1 >= 0; i$1--) {\n if ((rect = rects[i$1]).left != rect.right) {\n break;\n }\n }\n }\n return rect;\n }\n function measureCharInner(cm, prepared, ch, bias) {\n var place = nodeAndOffsetInLineMap(prepared.map, ch, bias);\n var node = place.node,\n start = place.start,\n end = place.end,\n collapse = place.collapse;\n var rect;\n if (node.nodeType == 3) {\n // If it is a text node, use a range to retrieve the coordinates.\n for (var i$1 = 0; i$1 < 4; i$1++) {\n // Retry a maximum of 4 times when nonsense rectangles are returned\n while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) {\n --start;\n }\n while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) {\n ++end;\n }\n if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart) {\n rect = node.parentNode.getBoundingClientRect();\n } else {\n rect = getUsefulRect(range(node, start, end).getClientRects(), bias);\n }\n if (rect.left || rect.right || start == 0) {\n break;\n }\n end = start;\n start = start - 1;\n collapse = \"right\";\n }\n if (ie && ie_version < 11) {\n rect = maybeUpdateRectForZooming(cm.display.measure, rect);\n }\n } else {\n // If it is a widget, simply get the box for the whole widget.\n if (start > 0) {\n collapse = bias = \"right\";\n }\n 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 }\n if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) {\n var rSpan = node.parentNode.getClientRects()[0];\n if (rSpan) {\n rect = {\n left: rSpan.left,\n right: rSpan.left + charWidth(cm.display),\n top: rSpan.top,\n bottom: rSpan.bottom\n };\n } else {\n rect = nullRect;\n }\n }\n var rtop = rect.top - prepared.rect.top,\n rbot = rect.bottom - prepared.rect.top;\n var mid = (rtop + rbot) / 2;\n var heights = prepared.view.measure.heights;\n var i = 0;\n for (; i < heights.length - 1; i++) {\n if (mid < heights[i]) {\n break;\n }\n }\n var top = i ? heights[i - 1] : 0,\n bot = heights[i];\n var result = {\n left: (collapse == \"right\" ? rect.right : rect.left) - prepared.rect.left,\n right: (collapse == \"left\" ? rect.left : rect.right) - prepared.rect.left,\n top: top,\n bottom: bot\n };\n if (!rect.left && !rect.right) {\n result.bogus = true;\n }\n if (!cm.options.singleCursorHeightPerLine) {\n result.rtop = rtop;\n 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 || screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure)) {\n return rect;\n }\n var scaleX = screen.logicalXDPI / screen.deviceXDPI;\n var scaleY = screen.logicalYDPI / screen.deviceYDPI;\n return {\n left: rect.left * scaleX,\n right: rect.right * scaleX,\n top: rect.top * scaleY,\n bottom: rect.bottom * scaleY\n };\n }\n function clearLineMeasurementCacheFor(lineView) {\n if (lineView.measure) {\n lineView.measure.cache = {};\n lineView.measure.heights = null;\n if (lineView.rest) {\n for (var i = 0; i < lineView.rest.length; i++) {\n lineView.measure.caches[i] = {};\n }\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) {\n cm.display.maxLineChanged = true;\n }\n cm.display.lineNumChars = null;\n }\n function pageScrollX(doc) {\n // Work around https://bugs.chromium.org/p/chromium/issues/detail?id=489206\n // which causes page_Offset and bounding client rects to use\n // different reference viewports and invalidate our calculations.\n if (chrome && android) {\n return -(doc.body.getBoundingClientRect().left - parseInt(getComputedStyle(doc.body).marginLeft));\n }\n return doc.defaultView.pageXOffset || (doc.documentElement || doc.body).scrollLeft;\n }\n function pageScrollY(doc) {\n if (chrome && android) {\n return -(doc.body.getBoundingClientRect().top - parseInt(getComputedStyle(doc.body).marginTop));\n }\n return doc.defaultView.pageYOffset || (doc.documentElement || doc.body).scrollTop;\n }\n function widgetTopHeight(lineObj) {\n var ref = visualLine(lineObj);\n var widgets = ref.widgets;\n var height = 0;\n if (widgets) {\n for (var i = 0; i < widgets.length; ++i) {\n if (widgets[i].above) {\n height += widgetHeight(widgets[i]);\n }\n }\n }\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;\n rect.bottom += height;\n }\n if (context == \"line\") {\n return rect;\n }\n if (!context) {\n context = \"local\";\n }\n var yOff = heightAtLine(lineObj);\n if (context == \"local\") {\n yOff += paddingTop(cm.display);\n } else {\n yOff -= cm.display.viewOffset;\n }\n if (context == \"page\" || context == \"window\") {\n var lOff = cm.display.lineSpace.getBoundingClientRect();\n yOff += lOff.top + (context == \"window\" ? 0 : pageScrollY(doc(cm)));\n var xOff = lOff.left + (context == \"window\" ? 0 : pageScrollX(doc(cm)));\n rect.left += xOff;\n rect.right += xOff;\n }\n rect.top += yOff;\n 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\") {\n return coords;\n }\n var left = coords.left,\n top = coords.top;\n // First move into \"page\" coordinate system\n if (context == \"page\") {\n left -= pageScrollX(doc(cm));\n top -= pageScrollY(doc(cm));\n } else if (context == \"local\" || !context) {\n var localBox = cm.display.sizer.getBoundingClientRect();\n left += localBox.left;\n top += localBox.top;\n }\n var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect();\n return {\n left: left - lineSpaceBox.left,\n top: top - lineSpaceBox.top\n };\n }\n function charCoords(cm, pos, context, lineObj, bias) {\n if (!lineObj) {\n lineObj = getLine(cm.doc, pos.line);\n }\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) {\n preparedMeasure = prepareMeasureForLine(cm, lineObj);\n }\n function get(ch, right) {\n var m = measureCharPrepared(cm, preparedMeasure, ch, right ? \"right\" : \"left\", varHeight);\n if (right) {\n m.left = m.right;\n } else {\n m.right = m.left;\n }\n return intoCoordSystem(cm, lineObj, m, context);\n }\n var order = getOrder(lineObj, cm.doc.direction),\n ch = pos.ch,\n 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) {\n return get(sticky == \"before\" ? ch - 1 : ch, sticky == \"before\");\n }\n function getBidi(ch, partPos, invert) {\n var part = order[partPos],\n right = part.level == 1;\n return get(invert ? ch - 1 : ch, right != invert);\n }\n var partPos = getBidiPartAt(order, ch, sticky);\n var other = bidiOther;\n var val = getBidi(ch, partPos, sticky == \"before\");\n if (other != null) {\n val.other = getBidi(ch, other, sticky != \"before\");\n }\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) {\n left = charWidth(cm.display) * pos.ch;\n }\n var lineObj = getLine(cm.doc, pos.line);\n var top = heightAtLine(lineObj) + paddingTop(cm.display);\n return {\n left: left,\n right: left,\n top: top,\n bottom: top + lineObj.height\n };\n }\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) {\n pos.outside = outside;\n }\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) {\n return PosWithInfo(doc.first, 0, null, -1, -1);\n }\n var lineN = lineAtHeight(doc, y),\n 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 }\n if (x < 0) {\n 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) {\n return found;\n }\n var rangeEnd = collapsed.find(1);\n if (rangeEnd.line == lineN) {\n return rangeEnd;\n }\n lineObj = getLine(doc, lineN = rangeEnd.line);\n }\n }\n function wrappedLineExtent(cm, lineObj, preparedMeasure, y) {\n y -= widgetTopHeight(lineObj);\n var end = lineObj.text.length;\n var begin = findFirst(function (ch) {\n return measureCharPrepared(cm, preparedMeasure, ch - 1).bottom <= y;\n }, end, 0);\n end = findFirst(function (ch) {\n return measureCharPrepared(cm, preparedMeasure, ch).top > y;\n }, begin, end);\n return {\n begin: begin,\n end: end\n };\n }\n function wrappedLineExtentChar(cm, lineObj, preparedMeasure, target) {\n if (!preparedMeasure) {\n preparedMeasure = prepareMeasureForLine(cm, lineObj);\n }\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 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,\n end = lineObj.text.length,\n ltr = true;\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)(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,\n boxAround = null;\n var ch = findFirst(function (ch) {\n var box = measureCharPrepared(cm, preparedMeasure, ch);\n box.top += widgetHeight;\n box.bottom += widgetHeight;\n if (!boxIsAfter(box, x, y, false)) {\n return false;\n }\n if (box.top <= y && box.left <= x) {\n chAround = ch;\n boxAround = box;\n }\n return true;\n }, begin, end);\n var baseX,\n sticky,\n 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,\n atStart = atLeft == ltr;\n ch = chAround + (atStart ? 0 : 1);\n sticky = atStart ? \"after\" : \"before\";\n baseX = atLeft ? boxAround.left : boxAround.right;\n } else {\n // (Adjust for extended bound, if necessary.)\n if (!ltr && (ch == end || ch == begin)) {\n ch++;\n }\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\" : measureCharPrepared(cm, preparedMeasure, ch - (ltr ? 1 : 0)).bottom + widgetHeight <= y == ltr ? \"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 ch = skipExtendingChars(lineObj.text, ch, 1);\n return PosWithInfo(lineNo, ch, sticky, outside, x - baseX);\n }\n function coordsBidiPart(cm, lineObj, lineNo, preparedMeasure, order, x, y) {\n // Bidi parts are sorted left-to-right, and in a non-line-wrapping\n // situation, we can take this ordering to correspond to the visual\n // ordering. This finds the first part whose end is after the given\n // coordinates.\n var index = findFirst(function (i) {\n var part = order[i],\n ltr = part.level != 1;\n return boxIsAfter(cursorCoords(cm, Pos(lineNo, ltr ? part.to : part.from, ltr ? \"before\" : \"after\"), \"line\", lineObj, preparedMeasure), x, y, true);\n }, 0, order.length - 1);\n var part = order[index];\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\"), \"line\", lineObj, preparedMeasure);\n if (boxIsAfter(start, x, y, true) && start.top > y) {\n part = order[index - 1];\n }\n }\n return part;\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))) {\n end--;\n }\n var part = null,\n closestDist = null;\n for (var i = 0; i < order.length; i++) {\n var p = order[i];\n if (p.from >= end || p.to <= begin) {\n continue;\n }\n var ltr = p.level != 1;\n var endX = measureCharPrepared(cm, preparedMeasure, ltr ? Math.min(end, p.to) - 1 : Math.max(begin, p.from)).right;\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) {\n part = order[order.length - 1];\n }\n // Clip the part to the wrapped line.\n if (part.from < begin) {\n part = {\n from: begin,\n to: part.to,\n level: part.level\n };\n }\n if (part.to > end) {\n part = {\n from: part.from,\n to: end,\n level: part.level\n };\n }\n return part;\n }\n var measureText;\n // Compute the default text height.\n function textHeight(display) {\n if (display.cachedTextHeight != null) {\n return display.cachedTextHeight;\n }\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) {\n display.cachedTextHeight = height;\n }\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) {\n return display.cachedCharWidth;\n }\n var anchor = elt(\"span\", \"xxxxxxxxxx\");\n var pre = elt(\"pre\", [anchor], \"CodeMirror-line-like\");\n removeChildrenAndAdd(display.measure, pre);\n var rect = anchor.getBoundingClientRect(),\n width = (rect.right - rect.left) / 10;\n if (width > 2) {\n display.cachedCharWidth = width;\n }\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,\n left = {},\n 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 {\n fixedPos: compensateForHScroll(d),\n gutterTotalWidth: d.gutters.offsetWidth,\n gutterLeft: left,\n gutterWidth: width,\n wrapperWidth: d.wrapper.clientWidth\n };\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),\n wrapping = cm.options.lineWrapping;\n var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3);\n return function (line) {\n if (lineIsHidden(cm.doc, line)) {\n return 0;\n }\n var widgetsHeight = 0;\n if (line.widgets) {\n for (var i = 0; i < line.widgets.length; i++) {\n if (line.widgets[i].height) {\n widgetsHeight += line.widgets[i].height;\n }\n }\n }\n 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,\n est = estimateHeight(cm);\n doc.iter(function (line) {\n var estHeight = est(line);\n if (estHeight != line.height) {\n updateLineHeight(line, estHeight);\n }\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\") {\n return null;\n }\n var x,\n y,\n space = display.lineSpace.getBoundingClientRect();\n // Fails unpredictably on IE[67] when mouse is dragged around quickly.\n try {\n x = e.clientX - space.left;\n y = e.clientY - space.top;\n } catch (e$1) {\n return null;\n }\n var coords = coordsChar(cm, x, y),\n 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) {\n return null;\n }\n n -= cm.display.viewFrom;\n if (n < 0) {\n return null;\n }\n var view = cm.display.view;\n for (var i = 0; i < view.length; i++) {\n n -= view[i].size;\n if (n < 0) {\n return i;\n }\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) {\n from = cm.doc.first;\n }\n if (to == null) {\n to = cm.doc.first + cm.doc.size;\n }\n if (!lendiff) {\n lendiff = 0;\n }\n var display = cm.display;\n if (lendiff && to < display.viewTo && (display.updateLineNumbers == null || display.updateLineNumbers > from)) {\n display.updateLineNumbers = from;\n }\n cm.curOp.viewChanged = true;\n if (from >= display.viewTo) {\n // Change after\n if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo) {\n resetView(cm);\n }\n } else if (to <= display.viewFrom) {\n // Change before\n if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) {\n resetView(cm);\n } else {\n display.viewFrom += lendiff;\n display.viewTo += lendiff;\n }\n } else if (from <= display.viewFrom && to >= display.viewTo) {\n // Full overlap\n resetView(cm);\n } else if (from <= display.viewFrom) {\n // Top overlap\n var cut = viewCuttingPoint(cm, to, to + lendiff, 1);\n if (cut) {\n display.view = display.view.slice(cut.index);\n display.viewFrom = cut.lineN;\n display.viewTo += lendiff;\n } else {\n resetView(cm);\n }\n } else if (to >= display.viewTo) {\n // Bottom overlap\n var cut$1 = viewCuttingPoint(cm, from, from, -1);\n if (cut$1) {\n display.view = display.view.slice(0, cut$1.index);\n display.viewTo = cut$1.lineN;\n } else {\n resetView(cm);\n }\n } else {\n // Gap in the middle\n var cutTop = viewCuttingPoint(cm, from, from, -1);\n var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1);\n if (cutTop && cutBot) {\n display.view = display.view.slice(0, cutTop.index).concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN)).concat(display.view.slice(cutBot.index));\n display.viewTo += lendiff;\n } else {\n resetView(cm);\n }\n }\n 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\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,\n 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) {\n return;\n }\n var lineView = display.view[findViewIndex(cm, line)];\n if (lineView.node == null) {\n return;\n }\n var arr = lineView.changes || (lineView.changes = []);\n if (indexOf(arr, type) == -1) {\n arr.push(type);\n }\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 function viewCuttingPoint(cm, oldN, newN, dir) {\n var index = findViewIndex(cm, oldN),\n diff,\n view = cm.display.view;\n if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size) {\n return {\n index: index,\n lineN: newN\n };\n }\n var n = cm.display.viewFrom;\n for (var i = 0; i < index; i++) {\n n += view[i].size;\n }\n if (n != oldN) {\n if (dir > 0) {\n if (index == view.length - 1) {\n return null;\n }\n diff = n + view[index].size - oldN;\n index++;\n } else {\n diff = n - oldN;\n }\n oldN += diff;\n newN += diff;\n }\n while (visualLineNo(cm.doc, newN) != newN) {\n if (index == (dir < 0 ? 0 : view.length - 1)) {\n return null;\n }\n newN += dir * view[index - (dir < 0 ? 1 : 0)].size;\n index += dir;\n }\n return {\n index: index,\n lineN: newN\n };\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,\n 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 }\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 }\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,\n dirty = 0;\n for (var i = 0; i < view.length; i++) {\n var lineView = view[i];\n if (!lineView.hidden && (!lineView.node || lineView.changes)) {\n ++dirty;\n }\n }\n return dirty;\n }\n function updateSelection(cm) {\n cm.display.input.showSelection(cm.display.input.prepareSelection());\n }\n function prepareSelection(cm, primary) {\n if (primary === void 0) primary = true;\n var doc = cm.doc,\n result = {};\n var curFragment = result.cursors = document.createDocumentFragment();\n var selFragment = result.selection = document.createDocumentFragment();\n var customCursor = cm.options.$customCursor;\n if (customCursor) {\n primary = true;\n }\n for (var i = 0; i < doc.sel.ranges.length; i++) {\n if (!primary && i == doc.sel.primIndex) {\n continue;\n }\n var range = doc.sel.ranges[i];\n if (range.from().line >= cm.display.viewTo || range.to().line < cm.display.viewFrom) {\n continue;\n }\n var collapsed = range.empty();\n if (customCursor) {\n var head = customCursor(cm, range);\n if (head) {\n drawSelectionCursor(cm, head, curFragment);\n }\n } else if (collapsed || cm.options.showCursorWhenSelecting) {\n drawSelectionCursor(cm, range.head, curFragment);\n }\n if (!collapsed) {\n drawSelectionRange(cm, range, selFragment);\n }\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 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 if (/\\bcm-fat-cursor\\b/.test(cm.getWrapperElement().className)) {\n var charPos = charCoords(cm, head, \"div\", null, null);\n var width = charPos.right - charPos.left;\n cursor.style.width = (width > 0 ? width : cm.defaultCharWidth()) + \"px\";\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 function cmpCoords(a, b) {\n return a.top - b.top || a.left - b.left;\n }\n\n // Draws the given range as a highlighted selection\n function drawSelectionRange(cm, range, output) {\n var display = cm.display,\n doc = cm.doc;\n var fragment = document.createDocumentFragment();\n var padding = paddingH(cm.display),\n leftSide = padding.left;\n var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right;\n var docLTR = doc.direction == \"ltr\";\n function add(left, top, width, bottom) {\n if (top < 0) {\n top = 0;\n }\n top = Math.round(top);\n bottom = Math.round(bottom);\n fragment.appendChild(elt(\"div\", null, \"CodeMirror-selected\", \"position: absolute; left: \" + left + \"px;\\n top: \" + top + \"px; width: \" + (width == null ? rightSide - left : width) + \"px;\\n height: \" + (bottom - top) + \"px\"));\n }\n 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 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 var order = getOrder(lineObj, doc.direction);\n iterateBidiSections(order, fromArg || 0, toArg == null ? lineLen : toArg, function (from, to, dir, i) {\n var ltr = dir == \"ltr\";\n var fromPos = coords(from, ltr ? \"left\" : \"right\");\n var toPos = coords(to - 1, ltr ? \"right\" : \"left\");\n var openStart = fromArg == null && from == 0,\n openEnd = toArg == null && to == lineLen;\n var first = i == 0,\n last = !order || i == order.length - 1;\n if (toPos.top - fromPos.top <= 3) {\n // Single line\n var openLeft = (docLTR ? openStart : openEnd) && first;\n var openRight = (docLTR ? openEnd : openStart) && last;\n var left = openLeft ? leftSide : (ltr ? fromPos : toPos).left;\n var right = openRight ? rightSide : (ltr ? toPos : fromPos).right;\n add(left, fromPos.top, right - left, fromPos.bottom);\n } else {\n // Multiple lines\n var topLeft, topRight, botLeft, botRight;\n 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) {\n add(leftSide, fromPos.bottom, null, toPos.top);\n }\n add(botLeft, toPos.top, botRight - botLeft, toPos.bottom);\n }\n if (!start || cmpCoords(fromPos, start) < 0) {\n start = fromPos;\n }\n if (cmpCoords(toPos, start) < 0) {\n start = toPos;\n }\n if (!end || cmpCoords(fromPos, end) < 0) {\n end = fromPos;\n }\n if (cmpCoords(toPos, end) < 0) {\n end = toPos;\n }\n });\n return {\n start: start,\n end: end\n };\n }\n var sFrom = range.from(),\n 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),\n toLine = getLine(doc, sTo.line);\n var singleVLine = visualLine(fromLine) == visualLine(toLine);\n var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end;\n var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start;\n 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) {\n return;\n }\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()) {\n onBlur(cm);\n }\n display.cursorDiv.style.visibility = (on = !on) ? \"\" : \"hidden\";\n }, cm.options.cursorBlinkRate);\n } else if (cm.options.cursorBlinkRate < 0) {\n display.cursorDiv.style.visibility = \"hidden\";\n }\n }\n function ensureFocus(cm) {\n if (!cm.hasFocus()) {\n cm.display.input.focus();\n if (!cm.state.focused) {\n onFocus(cm);\n }\n }\n }\n function delayBlurEvent(cm) {\n cm.state.delayingBlurEvent = true;\n setTimeout(function () {\n if (cm.state.delayingBlurEvent) {\n cm.state.delayingBlurEvent = false;\n if (cm.state.focused) {\n onBlur(cm);\n }\n }\n }, 100);\n }\n function onFocus(cm, e) {\n if (cm.state.delayingBlurEvent && !cm.state.draggingText) {\n cm.state.delayingBlurEvent = false;\n }\n if (cm.options.readOnly == \"nocursor\") {\n return;\n }\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) {\n setTimeout(function () {\n return cm.display.input.reset(true);\n }, 20);\n } // Issue #1730\n }\n\n cm.display.input.receivedFocus();\n }\n restartBlink(cm);\n }\n function onBlur(cm, e) {\n if (cm.state.delayingBlurEvent) {\n 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 () {\n if (!cm.state.focused) {\n cm.display.shift = false;\n }\n }, 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],\n wrapping = cm.options.lineWrapping;\n var height = void 0,\n width = 0;\n if (cur.hidden) {\n continue;\n }\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 }\n var diff = cur.line.height - height;\n if (diff > .005 || diff < -.005) {\n if (oldHeight < viewTop) {\n mustScroll -= diff;\n }\n updateLineHeight(cur.line, height);\n updateWidgetHeight(cur.line);\n if (cur.rest) {\n for (var j = 0; j < cur.rest.length; j++) {\n updateWidgetHeight(cur.rest[j]);\n }\n }\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) {\n display.scroller.scrollTop += mustScroll;\n }\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) {\n for (var i = 0; i < line.widgets.length; ++i) {\n var w = line.widgets[i],\n parent = w.node.parentNode;\n if (parent) {\n w.height = parent.offsetHeight;\n }\n }\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 var from = lineAtHeight(doc, top),\n 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,\n 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 {\n from: from,\n to: Math.max(to, from + 1)\n };\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\")) {\n return;\n }\n var display = cm.display,\n box = display.sizer.getBoundingClientRect(),\n doScroll = null;\n var doc = display.wrapper.ownerDocument;\n if (rect.top + box.top < 0) {\n doScroll = true;\n } else if (rect.bottom + box.top > (doc.defaultView.innerHeight || doc.documentElement.clientHeight)) {\n doScroll = false;\n }\n if (doScroll != null && !phantom) {\n var scrollNode = elt(\"div\", \"\\u200b\", null, \"position: absolute;\\n top: \" + (rect.top - display.viewOffset - paddingTop(cm.display)) + \"px;\\n height: \" + (rect.bottom - rect.top + scrollGap(cm) + display.barHeight) + \"px;\\n left: \" + rect.left + \"px; width: \" + Math.max(2, rect.right - rect.left) + \"px;\");\n cm.display.lineSpace.appendChild(scrollNode);\n scrollNode.scrollIntoView(doScroll);\n cm.display.lineSpace.removeChild(scrollNode);\n }\n }\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) {\n margin = 0;\n }\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 = {\n left: Math.min(coords.left, endCoords.left),\n top: Math.min(coords.top, endCoords.top) - margin,\n right: Math.max(coords.left, endCoords.left),\n bottom: Math.max(coords.bottom, endCoords.bottom) + margin\n };\n var scrollPos = calculateScrollPos(cm, rect);\n var startTop = cm.doc.scrollTop,\n startLeft = cm.doc.scrollLeft;\n if (scrollPos.scrollTop != null) {\n updateScrollTop(cm, scrollPos.scrollTop);\n if (Math.abs(cm.doc.scrollTop - startTop) > 1) {\n changed = true;\n }\n }\n if (scrollPos.scrollLeft != null) {\n setScrollLeft(cm, scrollPos.scrollLeft);\n if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) {\n changed = true;\n }\n }\n if (!changed) {\n break;\n }\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) {\n updateScrollTop(cm, scrollPos.scrollTop);\n }\n if (scrollPos.scrollLeft != null) {\n setScrollLeft(cm, scrollPos.scrollLeft);\n }\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,\n snapMargin = textHeight(cm.display);\n if (rect.top < 0) {\n rect.top = 0;\n }\n var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop;\n var screen = displayHeight(cm),\n result = {};\n if (rect.bottom - rect.top > screen) {\n rect.bottom = rect.top + screen;\n }\n var docBottom = cm.doc.height + paddingVert(display);\n var atTop = rect.top < snapMargin,\n 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) {\n 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) {\n rect.right = rect.left + screenw;\n }\n if (rect.left < 10) {\n result.scrollLeft = 0;\n } else if (rect.left < screenleft) {\n result.scrollLeft = Math.max(0, rect.left + gutterSpace - (tooWide ? 0 : 10));\n } else if (rect.right > screenw + screenleft - 3) {\n result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw;\n }\n 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) {\n return;\n }\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 = {\n from: cur,\n to: cur,\n margin: cm.options.cursorScrollMargin\n };\n }\n function scrollToCoords(cm, x, y) {\n if (x != null || y != null) {\n resolveScrollToPos(cm);\n }\n if (x != null) {\n cm.curOp.scrollLeft = x;\n }\n if (y != null) {\n 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),\n to = estimateCoords(cm, range.to);\n scrollToCoordsRange(cm, from, to, range.margin);\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) {\n return;\n }\n if (!gecko) {\n updateDisplaySimple(cm, {\n top: val\n });\n }\n setScrollTop(cm, val, true);\n if (gecko) {\n updateDisplaySimple(cm);\n }\n startWorker(cm, 100);\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) {\n return;\n }\n cm.doc.scrollTop = val;\n cm.display.scrollbars.setScrollTop(val);\n if (cm.display.scroller.scrollTop != val) {\n cm.display.scroller.scrollTop = val;\n }\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) {\n return;\n }\n cm.doc.scrollLeft = val;\n alignHorizontally(cm);\n if (cm.display.scroller.scrollLeft != val) {\n cm.display.scroller.scrollLeft = val;\n }\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,\n gutterW = d.gutters.offsetWidth;\n var docH = Math.round(cm.doc.height + paddingVert(cm.display));\n return {\n clientHeight: d.scroller.clientHeight,\n viewHeight: d.wrapper.clientHeight,\n scrollWidth: d.scroller.scrollWidth,\n clientWidth: d.scroller.clientWidth,\n viewWidth: d.wrapper.clientWidth,\n barLeft: cm.options.fixedGutter ? gutterW : 0,\n docHeight: docH,\n scrollHeight: docH + scrollGap(cm) + d.barHeight,\n nativeBarWidth: d.nativeBarWidth,\n gutterWidth: gutterW\n };\n }\n 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);\n place(horiz);\n on(vert, \"scroll\", function () {\n if (vert.clientHeight) {\n scroll(vert.scrollTop, \"vertical\");\n }\n });\n on(horiz, \"scroll\", function () {\n if (horiz.clientWidth) {\n scroll(horiz.scrollLeft, \"horizontal\");\n }\n });\n this.checkedZeroWidth = false;\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) {\n 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 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 = Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + \"px\";\n } else {\n this.vert.scrollTop = 0;\n this.vert.style.display = \"\";\n this.vert.firstChild.style.height = \"0\";\n }\n if (needsH) {\n this.horiz.style.display = \"block\";\n this.horiz.style.right = needsV ? sWidth + \"px\" : \"0\";\n this.horiz.style.left = measure.barLeft + \"px\";\n var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0);\n this.horiz.firstChild.style.width = Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + \"px\";\n } else {\n this.horiz.style.display = \"\";\n this.horiz.firstChild.style.width = \"0\";\n }\n if (!this.checkedZeroWidth && measure.clientHeight > 0) {\n if (sWidth == 0) {\n this.zeroWidthHack();\n }\n this.checkedZeroWidth = true;\n }\n return {\n right: needsV ? sWidth : 0,\n bottom: needsH ? sWidth : 0\n };\n };\n NativeScrollbars.prototype.setScrollLeft = function (pos) {\n if (this.horiz.scrollLeft != pos) {\n this.horiz.scrollLeft = pos;\n }\n if (this.disableHoriz) {\n this.enableZeroWidthBar(this.horiz, this.disableHoriz, \"horiz\");\n }\n };\n NativeScrollbars.prototype.setScrollTop = function (pos) {\n if (this.vert.scrollTop != pos) {\n this.vert.scrollTop = pos;\n }\n if (this.disableVert) {\n 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.visibility = this.vert.style.visibility = \"hidden\";\n this.disableHoriz = new Delayed();\n this.disableVert = new Delayed();\n };\n NativeScrollbars.prototype.enableZeroWidthBar = function (bar, delay, type) {\n bar.style.visibility = \"\";\n function maybeDisable() {\n // To find out whether the scrollbar is still visible, we\n // check whether the element under the pixel in the bottom\n // right corner of the scrollbar box is the scrollbar box\n // itself (when the bar is still visible) or its filler child\n // (when the bar is hidden). If it is still visible, we keep\n // it enabled, if it's hidden, we disable pointer events.\n var box = bar.getBoundingClientRect();\n var elt = type == \"vert\" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2) : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1);\n if (elt != bar) {\n bar.style.visibility = \"hidden\";\n } else {\n delay.set(1000, maybeDisable);\n }\n }\n delay.set(1000, maybeDisable);\n };\n NativeScrollbars.prototype.clear = function () {\n var parent = this.horiz.parentNode;\n parent.removeChild(this.horiz);\n parent.removeChild(this.vert);\n };\n var NullScrollbars = function () {};\n NullScrollbars.prototype.update = function () {\n return {\n bottom: 0,\n right: 0\n };\n };\n NullScrollbars.prototype.setScrollLeft = function () {};\n NullScrollbars.prototype.setScrollTop = function () {};\n NullScrollbars.prototype.clear = function () {};\n function updateScrollbars(cm, measure) {\n if (!measure) {\n measure = measureForScrollbars(cm);\n }\n var startWidth = cm.display.barWidth,\n 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 }\n updateScrollbarsInner(cm, measureForScrollbars(cm));\n startWidth = cm.display.barWidth;\n 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 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 if (sizes.right && sizes.bottom) {\n d.scrollbarFiller.style.display = \"block\";\n d.scrollbarFiller.style.height = sizes.bottom + \"px\";\n d.scrollbarFiller.style.width = sizes.right + \"px\";\n } else {\n d.scrollbarFiller.style.display = \"\";\n }\n if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) {\n d.gutterFiller.style.display = \"block\";\n d.gutterFiller.style.height = sizes.bottom + \"px\";\n d.gutterFiller.style.width = measure.gutterWidth + \"px\";\n } else {\n d.gutterFiller.style.display = \"\";\n }\n }\n var scrollbarModel = {\n \"native\": NativeScrollbars,\n \"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) {\n setTimeout(function () {\n return cm.display.input.focus();\n }, 0);\n }\n });\n node.setAttribute(\"cm-not-content\", \"true\");\n }, function (pos, axis) {\n if (axis == \"horizontal\") {\n setScrollLeft(cm, pos);\n } else {\n updateScrollTop(cm, pos);\n }\n }, cm);\n if (cm.display.scrollbars.addClass) {\n addClass(cm.display.wrapper, cm.display.scrollbars.addClass);\n }\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,\n // Flag that indicates that lines might need to be redrawn\n startHeight: cm.doc.height,\n // Used to detect need to update scrollbar\n forceUpdate: false,\n // Used to force a redraw\n updateInput: 0,\n // Whether to reset the input textarea\n typing: false,\n // Whether this reset should be careful to leave existing text (for compositing)\n changeObjs: null,\n // Accumulated changes, for firing change events\n cursorActivityHandlers: null,\n // Set of handlers to fire cursorActivity on\n cursorActivityCalled: 0,\n // Tracks which cursorActivity handlers have been called already\n selectionChanged: false,\n // Whether the selection needs to be redrawn\n updateMaxLine: false,\n // Set when the widest line needs to be determined anew\n scrollLeft: null,\n scrollTop: null,\n // Intermediate scroll position, not pushed to DOM yet\n scrollToPos: null,\n // Used to scroll to a specific position\n focus: false,\n id: ++nextOpId,\n // Unique ID\n markArrays: null // Used by addMarkedSpan\n };\n\n pushOperation(cm.curOp);\n }\n\n // Finish an operation, updating the display and signalling delayed events\n function endOperation(cm) {\n var op = cm.curOp;\n if (op) {\n finishOperation(op, function (group) {\n for (var i = 0; i < group.ops.length; i++) {\n group.ops[i].cm.curOp = null;\n }\n endOperations(group);\n });\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++)\n // Read DOM\n {\n endOperation_R1(ops[i]);\n }\n for (var i$1 = 0; i$1 < ops.length; i$1++)\n // Write DOM (maybe)\n {\n endOperation_W1(ops[i$1]);\n }\n for (var i$2 = 0; i$2 < ops.length; i$2++)\n // Read DOM\n {\n endOperation_R2(ops[i$2]);\n }\n for (var i$3 = 0; i$3 < ops.length; i$3++)\n // Write DOM (maybe)\n {\n endOperation_W2(ops[i$3]);\n }\n for (var i$4 = 0; i$4 < ops.length; i$4++)\n // Read DOM\n {\n endOperation_finish(ops[i$4]);\n }\n }\n function endOperation_R1(op) {\n var cm = op.cm,\n display = cm.display;\n maybeClipScrollbars(cm);\n if (op.updateMaxLine) {\n findMaxLine(cm);\n }\n op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null || op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom || op.scrollToPos.to.line >= display.viewTo) || display.maxLineChanged && cm.options.lineWrapping;\n op.update = op.mustUpdate && new DisplayUpdate(cm, op.mustUpdate && {\n top: op.scrollTop,\n ensure: op.scrollToPos\n }, op.forceUpdate);\n }\n function endOperation_W1(op) {\n op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update);\n }\n function endOperation_R2(op) {\n var cm = op.cm,\n display = cm.display;\n if (op.updatedDisplay) {\n 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 = 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 if (op.updatedDisplay || op.selectionChanged) {\n op.preparedSelection = display.input.prepareSelection();\n }\n }\n function endOperation_W2(op) {\n var cm = op.cm;\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 }\n cm.display.maxLineChanged = false;\n }\n var takeFocus = op.focus && op.focus == activeElt(doc(cm));\n if (op.preparedSelection) {\n cm.display.input.showSelection(op.preparedSelection, takeFocus);\n }\n if (op.updatedDisplay || op.startHeight != cm.doc.height) {\n updateScrollbars(cm, op.barMeasure);\n }\n if (op.updatedDisplay) {\n setDocumentHeight(cm, op.barMeasure);\n }\n if (op.selectionChanged) {\n restartBlink(cm);\n }\n if (cm.state.focused && op.updateInput) {\n cm.display.input.reset(op.typing);\n }\n if (takeFocus) {\n ensureFocus(op.cm);\n }\n }\n function endOperation_finish(op) {\n var cm = op.cm,\n display = cm.display,\n doc = cm.doc;\n if (op.updatedDisplay) {\n postUpdateDisplay(cm, op.update);\n }\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\n // Propagate the scroll position to the actual DOM scroller\n if (op.scrollTop != null) {\n setScrollTop(cm, op.scrollTop, op.forceScroll);\n }\n if (op.scrollLeft != null) {\n setScrollLeft(cm, op.scrollLeft, true, true);\n }\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), 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,\n unhidden = op.maybeUnhiddenMarkers;\n if (hidden) {\n for (var i = 0; i < hidden.length; ++i) {\n if (!hidden[i].lines.length) {\n signal(hidden[i], \"hide\");\n }\n }\n }\n if (unhidden) {\n for (var i$1 = 0; i$1 < unhidden.length; ++i$1) {\n if (unhidden[i$1].lines.length) {\n signal(unhidden[i$1], \"unhide\");\n }\n }\n }\n if (display.wrapper.offsetHeight) {\n doc.scrollTop = cm.display.scroller.scrollTop;\n }\n\n // Fire change events, and delayed event handlers\n if (op.changeObjs) {\n signal(cm, \"changes\", cm, op.changeObjs);\n }\n if (op.update) {\n op.update.finish();\n }\n }\n\n // Run the given function in an operation\n function runInOp(cm, f) {\n if (cm.curOp) {\n return f();\n }\n startOperation(cm);\n try {\n return f();\n } finally {\n endOperation(cm);\n }\n }\n // Wraps a function in an operation. Returns the wrapped function.\n function operation(cm, f) {\n return function () {\n if (cm.curOp) {\n return f.apply(cm, arguments);\n }\n startOperation(cm);\n try {\n return f.apply(cm, arguments);\n } finally {\n endOperation(cm);\n }\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) {\n return f.apply(this, arguments);\n }\n startOperation(this);\n try {\n return f.apply(this, arguments);\n } finally {\n endOperation(this);\n }\n };\n }\n function docMethodOp(f) {\n return function () {\n var cm = this.cm;\n if (!cm || cm.curOp) {\n return f.apply(this, arguments);\n }\n startOperation(cm);\n try {\n return f.apply(this, arguments);\n } finally {\n endOperation(cm);\n }\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) {\n return;\n }\n var end = +new Date() + cm.options.workTime;\n var context = getContextBefore(cm, doc.highlightFrontier);\n var changedLines = [];\n doc.iter(context.line, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function (line) {\n if (context.line >= cm.display.viewFrom) {\n // Visible\n var oldStyles = line.styles;\n var resetState = line.text.length > cm.options.maxHighlightLength ? copyState(doc.mode, context.state) : null;\n var highlighted = highlightLine(cm, line, context, true);\n if (resetState) {\n context.state = resetState;\n }\n line.styles = highlighted.styles;\n var oldCls = line.styleClasses,\n newCls = highlighted.classes;\n if (newCls) {\n line.styleClasses = newCls;\n } else if (oldCls) {\n line.styleClasses = null;\n }\n var ischange = !oldStyles || oldStyles.length != line.styles.length || oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass);\n for (var i = 0; !ischange && i < oldStyles.length; ++i) {\n ischange = oldStyles[i] != line.styles[i];\n }\n if (ischange) {\n changedLines.push(context.line);\n }\n line.stateAfter = context.save();\n context.nextLine();\n } else {\n if (line.text.length <= cm.options.maxHighlightLength) {\n processLine(cm, line.text, context);\n }\n 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) {\n runInOp(cm, function () {\n for (var i = 0; i < changedLines.length; i++) {\n regLineChange(cm, changedLines[i], \"text\");\n }\n });\n }\n }\n\n // DISPLAY DRAWING\n\n var DisplayUpdate = function (cm, viewport, force) {\n var display = cm.display;\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 DisplayUpdate.prototype.signal = function (emitter, type) {\n if (hasHandler(emitter, type)) {\n this.events.push(arguments);\n }\n };\n DisplayUpdate.prototype.finish = function () {\n for (var i = 0; i < this.events.length; i++) {\n signal.apply(null, this.events[i]);\n }\n };\n 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 function selectionSnapshot(cm) {\n if (cm.hasFocus()) {\n return null;\n }\n var active = activeElt(doc(cm));\n if (!active || !contains(cm.display.lineDiv, active)) {\n return null;\n }\n var result = {\n activeElt: active\n };\n if (window.getSelection) {\n var sel = win(cm).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 function restoreSelection(snapshot) {\n if (!snapshot || !snapshot.activeElt || snapshot.activeElt == activeElt(snapshot.activeElt.ownerDocument)) {\n return;\n }\n snapshot.activeElt.focus();\n if (!/^(INPUT|TEXTAREA)$/.test(snapshot.activeElt.nodeName) && snapshot.anchorNode && contains(document.body, snapshot.anchorNode) && contains(document.body, snapshot.focusNode)) {\n var doc = snapshot.activeElt.ownerDocument;\n var sel = doc.defaultView.getSelection(),\n range = doc.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,\n doc = cm.doc;\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 && update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo && (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) && display.renderedView == display.view && countDirtyView(cm) == 0) {\n return false;\n }\n 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) {\n from = Math.max(doc.first, display.viewFrom);\n }\n if (display.viewTo > to && display.viewTo - to < 20) {\n to = Math.min(end, display.viewTo);\n }\n if (sawCollapsedSpans) {\n from = visualLineNo(cm.doc, from);\n to = visualLineEndNo(cm.doc, to);\n }\n var different = from != display.viewFrom || to != display.viewTo || display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth;\n adjustView(cm, from, to);\n display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom));\n // Position the mover div to align with the current scroll position\n cm.display.mover.style.top = display.viewOffset + \"px\";\n var toUpdate = countDirtyView(cm);\n if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view && (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo)) {\n return false;\n }\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) {\n display.lineDiv.style.display = \"none\";\n }\n patchDisplay(cm, display.updateLineNumbers, update.dims);\n if (toUpdate > 4) {\n display.lineDiv.style.display = \"\";\n }\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 if (different) {\n display.lastWrapHeight = update.wrapperHeight;\n display.lastWrapWidth = update.wrapperWidth;\n startWorker(cm, 400);\n }\n display.updateLineNumbers = null;\n return true;\n }\n function postUpdateDisplay(cm, update) {\n var viewport = update.viewport;\n for (var first = true;; first = false) {\n if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) {\n // Clip forced viewport to actual scrollable area.\n if (viewport && viewport.top != null) {\n viewport = {\n top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)\n };\n }\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 }\n } else if (first) {\n update.visible = visibleLines(cm.display, cm.doc, viewport);\n }\n if (!updateDisplayIfNeeded(cm, update)) {\n break;\n }\n updateHeightsInViewport(cm);\n var barMeasure = measureForScrollbars(cm);\n updateSelection(cm);\n updateScrollbars(cm, barMeasure);\n setDocumentHeight(cm, barMeasure);\n update.force = false;\n }\n 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;\n cm.display.reportedViewTo = cm.display.viewTo;\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,\n lineNumbers = cm.options.lineNumbers;\n var container = display.lineDiv,\n cur = container.firstChild;\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 }\n return next;\n }\n var view = display.view,\n 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) {\n // Not drawn yet\n var node = buildLineElement(cm, lineView, lineN, dims);\n container.insertBefore(node, cur);\n } else {\n // Already drawn\n while (cur != lineView.node) {\n cur = rm(cur);\n }\n var updateNumber = lineNumbers && updateNumbersFrom != null && updateNumbersFrom <= lineN && lineView.lineNumber;\n if (lineView.changes) {\n if (indexOf(lineView.changes, \"gutter\") > -1) {\n updateNumber = false;\n }\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) {\n 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 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,\n view = display.view;\n if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) {\n return;\n }\n var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft;\n var gutterW = display.gutters.offsetWidth,\n left = comp + \"px\";\n for (var i = 0; i < view.length; i++) {\n if (!view[i].hidden) {\n if (cm.options.fixedGutter) {\n if (view[i].gutter) {\n view[i].gutter.style.left = left;\n }\n if (view[i].gutterBackground) {\n view[i].gutterBackground.style.left = left;\n }\n }\n var align = view[i].alignable;\n if (align) {\n for (var j = 0; j < align.length; j++) {\n align[j].style.left = left;\n }\n }\n }\n }\n if (cm.options.fixedGutter) {\n display.gutters.style.left = comp + gutterW + \"px\";\n }\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) {\n return false;\n }\n var doc = cm.doc,\n last = lineNumberFor(cm.options, doc.first + doc.size - 1),\n display = cm.display;\n if (last.length != display.lineNumChars) {\n var test = display.measure.appendChild(elt(\"div\", [elt(\"div\", last)], \"CodeMirror-linenumber CodeMirror-gutter-elt\"));\n var innerW = test.firstChild.offsetWidth,\n padding = test.offsetWidth - innerW;\n display.lineGutter.style.width = \"\";\n display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1;\n display.lineNumWidth = display.lineNumInnerWidth + padding;\n display.lineNumChars = display.lineNumInnerWidth ? last.length : -1;\n display.lineGutter.style.width = display.lineNumWidth + \"px\";\n updateGutterSpace(cm.display);\n return true;\n }\n return false;\n }\n function getGutters(gutters, lineNumbers) {\n var result = [],\n sawLineNumbers = false;\n for (var i = 0; i < gutters.length; i++) {\n var name = gutters[i],\n style = null;\n if (typeof name != \"string\") {\n style = name.style;\n name = name.className;\n }\n if (name == \"CodeMirror-linenumbers\") {\n if (!lineNumbers) {\n continue;\n } else {\n sawLineNumbers = true;\n }\n }\n result.push({\n className: name,\n style: style\n });\n }\n if (lineNumbers && !sawLineNumbers) {\n result.push({\n className: \"CodeMirror-linenumbers\",\n style: null\n });\n }\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,\n 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) {\n gElt.style.cssText = style;\n }\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 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], 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 // See #6982. FIXME remove when this has been fixed for a while in Chrome\n if (chrome && chrome_version >= 105) {\n d.wrapper.style.clipPath = \"inset(0px)\";\n }\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) {\n d.gutters.style.zIndex = -1;\n d.scroller.style.paddingRight = 0;\n }\n if (!webkit && !(gecko && mobile)) {\n d.scroller.draggable = true;\n }\n if (place) {\n if (place.appendChild) {\n place.appendChild(d.wrapper);\n } else {\n place(d.wrapper);\n }\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 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 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 d.activeTouch = null;\n d.gutterSpecs = getGutters(options.gutters, options.lineNumbers);\n renderGutters(d);\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,\n 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) {\n wheelPixelsPerUnit = -.53;\n } else if (gecko) {\n wheelPixelsPerUnit = 15;\n } else if (chrome) {\n wheelPixelsPerUnit = -.7;\n } else if (safari) {\n wheelPixelsPerUnit = -1 / 3;\n }\n function wheelEventDelta(e) {\n var dx = e.wheelDeltaX,\n dy = e.wheelDeltaY;\n if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) {\n dx = e.detail;\n }\n if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) {\n dy = e.detail;\n } else if (dy == null) {\n dy = e.wheelDelta;\n }\n return {\n x: dx,\n y: dy\n };\n }\n function wheelEventPixels(e) {\n var delta = wheelEventDelta(e);\n delta.x *= wheelPixelsPerUnit;\n delta.y *= wheelPixelsPerUnit;\n return delta;\n }\n function onScrollWheel(cm, e) {\n // On Chrome 102, viewport updates somehow stop wheel-based\n // scrolling. Turning off pointer events during the scroll seems\n // to avoid the issue.\n if (chrome && chrome_version == 102) {\n if (cm.display.chromeScrollHack == null) {\n cm.display.sizer.style.pointerEvents = \"none\";\n } else {\n clearTimeout(cm.display.chromeScrollHack);\n }\n cm.display.chromeScrollHack = setTimeout(function () {\n cm.display.chromeScrollHack = null;\n cm.display.sizer.style.pointerEvents = \"\";\n }, 100);\n }\n var delta = wheelEventDelta(e),\n dx = delta.x,\n 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 var display = cm.display,\n 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)) {\n return;\n }\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 }\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 }\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,\n bot = top + display.wrapper.clientHeight;\n if (pixels < 0) {\n top = Math.max(0, top + pixels - 50);\n } else {\n bot = Math.min(cm.doc.height, bot + pixels + 50);\n }\n updateDisplaySimple(cm, {\n top: top,\n bottom: bot\n });\n }\n if (wheelSamples < 20 && e.deltaMode !== 0) {\n if (display.wheelStartX == null) {\n display.wheelStartX = scroll.scrollLeft;\n display.wheelStartY = scroll.scrollTop;\n display.wheelDX = dx;\n display.wheelDY = dy;\n setTimeout(function () {\n if (display.wheelStartX == null) {\n return;\n }\n var movedX = scroll.scrollLeft - display.wheelStartX;\n var movedY = scroll.scrollTop - display.wheelStartY;\n var sample = movedY && display.wheelDY && movedY / display.wheelDY || movedX && display.wheelDX && movedX / display.wheelDX;\n display.wheelStartX = display.wheelStartY = null;\n if (!sample) {\n return;\n }\n wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1);\n ++wheelSamples;\n }, 200);\n } else {\n display.wheelDX += dx;\n display.wheelDY += dy;\n }\n }\n }\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 Selection.prototype.primary = function () {\n return this.ranges[this.primIndex];\n };\n Selection.prototype.equals = function (other) {\n if (other == this) {\n return true;\n }\n if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) {\n return false;\n }\n for (var i = 0; i < this.ranges.length; i++) {\n var here = this.ranges[i],\n there = other.ranges[i];\n if (!equalCursorPos(here.anchor, there.anchor) || !equalCursorPos(here.head, there.head)) {\n return false;\n }\n }\n return true;\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 }\n return new Selection(out, this.primIndex);\n };\n Selection.prototype.somethingSelected = function () {\n for (var i = 0; i < this.ranges.length; i++) {\n if (!this.ranges[i].empty()) {\n return true;\n }\n }\n return false;\n };\n Selection.prototype.contains = function (pos, end) {\n if (!end) {\n end = pos;\n }\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 }\n return -1;\n };\n var Range = function (anchor, head) {\n this.anchor = anchor;\n this.head = head;\n };\n Range.prototype.from = function () {\n return minPos(this.anchor, this.head);\n };\n Range.prototype.to = function () {\n return maxPos(this.anchor, this.head);\n };\n Range.prototype.empty = function () {\n return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch;\n };\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) {\n return cmp(a.from(), b.from());\n });\n primIndex = indexOf(ranges, prim);\n for (var i = 1; i < ranges.length; i++) {\n var cur = ranges[i],\n prev = ranges[i - 1];\n var diff = cmp(prev.to(), cur.from());\n if (mayTouch && !cur.empty() ? diff > 0 : diff >= 0) {\n var from = minPos(prev.from(), cur.from()),\n to = maxPos(prev.to(), cur.to());\n var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head;\n if (i <= primIndex) {\n --primIndex;\n }\n ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to));\n }\n }\n return new Selection(ranges, primIndex);\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) {\n return change.to;\n }\n return Pos(change.from.line + change.text.length - 1, 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) {\n return pos;\n }\n if (cmp(pos, change.to) <= 0) {\n return changeEnd(change);\n }\n var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1,\n ch = pos.ch;\n if (pos.line == change.to.line) {\n ch += changeEnd(change).ch - change.to.ch;\n }\n return Pos(line, ch);\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), adjustForChange(range.head, change)));\n }\n return normalizeSelection(doc.cm, out, doc.sel.primIndex);\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\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),\n 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],\n inv = cmp(range.head, range.anchor) < 0;\n out[i] = new Range(inv ? to : from, inv ? from : to);\n } else {\n out[i] = new Range(from, from);\n }\n }\n 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 function resetModeState(cm) {\n cm.doc.iter(function (line) {\n if (line.stateAfter) {\n line.stateAfter = null;\n }\n if (line.styles) {\n line.styles = null;\n }\n });\n cm.doc.modeFrontier = cm.doc.highlightFrontier = cm.doc.first;\n startWorker(cm, 100);\n cm.state.modeGen++;\n if (cm.curOp) {\n regChange(cm);\n }\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) == \"\" && (!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) {\n return markedSpans ? markedSpans[n] : null;\n }\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 }\n return result;\n }\n var from = change.from,\n to = change.to,\n text = change.text;\n var firstLine = getLine(doc, from.line),\n lastLine = getLine(doc, to.line);\n var lastText = lst(text),\n lastSpans = spansFor(text.length - 1),\n nlines = to.line - from.line;\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) {\n doc.remove(from.line, nlines);\n }\n if (added.length) {\n doc.insert(from.line, added);\n }\n } else if (firstLine == lastLine) {\n if (text.length == 1) {\n update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans);\n } else {\n var added$1 = linesFor(1, text.length - 1);\n added$1.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight));\n update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n doc.insert(from.line + 1, added$1);\n }\n } else if (text.length == 1) {\n update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0));\n doc.remove(from.line + 1, nlines);\n } else {\n update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans);\n var added$2 = linesFor(1, text.length - 1);\n if (nlines > 1) {\n doc.remove(from.line + 1, nlines - 1);\n }\n doc.insert(from.line + 1, added$2);\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) {\n for (var i = 0; i < doc.linked.length; ++i) {\n var rel = doc.linked[i];\n if (rel.doc == skip) {\n continue;\n }\n var shared = sharedHist && rel.sharedHist;\n if (sharedHistOnly && !shared) {\n continue;\n }\n f(rel.doc, shared);\n propagate(rel.doc, doc, shared);\n }\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) {\n throw new Error(\"This document is already in use.\");\n }\n cm.doc = doc;\n doc.cm = cm;\n estimateLineHeights(cm);\n loadMode(cm);\n setDirectionClass(cm);\n cm.options.direction = doc.direction;\n if (!cm.options.lineWrapping) {\n findMaxLine(cm);\n }\n cm.options.mode = doc.modeOption;\n regChange(cm);\n }\n function setDirectionClass(cm) {\n (cm.doc.direction == \"rtl\" ? addClass : rmClass)(cm.display.lineDiv, \"CodeMirror-rtl\");\n }\n function directionChanged(cm) {\n runInOp(cm, function () {\n setDirectionClass(cm);\n regChange(cm);\n });\n }\n function History(prev) {\n // Arrays of change events and selections. Doing something adds an\n // event to done and clears undo. Undoing moves events from done\n // to undone, redoing moves them in the other direction.\n this.done = [];\n this.undone = [];\n this.undoDepth = prev ? prev.undoDepth : Infinity;\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 = {\n from: copyPos(change.from),\n to: changeEnd(change),\n text: getBetween(doc, change.from, change.to)\n };\n attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);\n linkedDocs(doc, function (doc) {\n return attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);\n }, true);\n return histChange;\n }\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) {\n array.pop();\n } else {\n break;\n }\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(),\n cur;\n var last;\n if ((hist.lastOp == opId || hist.lastOrigin == change.origin && change.origin && (change.origin.charAt(0) == \"+\" && hist.lastModTime > time - (doc.cm ? doc.cm.options.historyEventDelay : 500) || change.origin.charAt(0) == \"*\")) && (cur = lastChangeEvent(hist, hist.lastOp == opId))) {\n // Merge this change into the last event\n last = lst(cur.changes);\n 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 }\n cur = {\n changes: [historyChangeFromChange(doc, change)],\n generation: hist.generation\n };\n hist.done.push(cur);\n while (hist.done.length > hist.undoDepth) {\n hist.done.shift();\n if (!hist.done[0].ranges) {\n hist.done.shift();\n }\n }\n }\n hist.done.push(selAfter);\n hist.generation = ++hist.maxGeneration;\n hist.lastModTime = hist.lastSelTime = time;\n hist.lastOp = hist.lastSelOp = opId;\n hist.lastOrigin = hist.lastSelOrigin = change.origin;\n if (!last) {\n signal(doc, \"historyAdded\");\n }\n }\n function selectionEventCanBeMerged(doc, origin, prev, sel) {\n var ch = origin.charAt(0);\n return ch == \"*\" || ch == \"+\" && prev.ranges.length == sel.ranges.length && prev.somethingSelected() == sel.somethingSelected() && new Date() - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500);\n }\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,\n 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 || origin && hist.lastSelOrigin == origin && (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin || selectionEventCanBeMerged(doc, origin, lst(hist.done), sel))) {\n hist.done[hist.done.length - 1] = sel;\n } else {\n pushSelectionToHistory(sel, hist.done);\n }\n 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\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 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\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) {\n return null;\n }\n var out;\n for (var i = 0; i < spans.length; ++i) {\n if (spans[i].marker.explicitlyCleared) {\n if (!out) {\n out = spans.slice(0, i);\n }\n } else if (out) {\n out.push(spans[i]);\n }\n }\n 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) {\n return null;\n }\n var nw = [];\n for (var i = 0; i < change.text.length; ++i) {\n nw.push(removeClearedSpans(found[i]));\n }\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) {\n return stretched;\n }\n if (!stretched) {\n return old;\n }\n for (var i = 0; i < old.length; ++i) {\n var oldCur = old[i],\n 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) {\n continue spans;\n }\n }\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,\n newChanges = [];\n copy.push({\n changes: newChanges\n });\n for (var j = 0; j < changes.length; ++j) {\n var change = changes[j],\n m = void 0;\n newChanges.push({\n from: change.from,\n to: change.to,\n text: change.text\n });\n if (newGroup) {\n for (var prop in change) {\n if (m = prop.match(/^spans_(\\d+)$/)) {\n if (indexOf(newGroup, Number(m[1])) > -1) {\n lst(newChanges)[prop] = change[prop];\n delete change[prop];\n }\n }\n }\n }\n }\n }\n 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) {\n extend = doc.cm && (doc.cm.display.shift || doc.extend);\n }\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 }\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), clipPos(doc, ranges[i].head));\n }\n },\n origin: options && options.origin\n };\n signal(doc, \"beforeSelectionChange\", doc, obj);\n if (doc.cm) {\n signal(doc.cm, \"beforeSelectionChange\", doc.cm, obj);\n }\n if (obj.ranges != sel.ranges) {\n return normalizeSelection(doc.cm, obj.ranges, obj.ranges.length - 1);\n } else {\n return sel;\n }\n }\n function setSelectionReplaceHistory(doc, sel, options) {\n var done = doc.history.done,\n 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 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 || (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1);\n setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true));\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)) {\n return;\n }\n doc.sel = sel;\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 = range.head == range.anchor ? newAnchor : skipAtomic(doc, range.head, old && old.head, bias, mayClear);\n if (out || newAnchor != range.anchor || newHead != range.head) {\n if (!out) {\n out = sel.ranges.slice(0, i);\n }\n out[i] = new Range(newAnchor, newHead);\n }\n }\n return out ? normalizeSelection(doc.cm, out, sel.primIndex) : sel;\n }\n function skipAtomicInner(doc, pos, oldPos, dir, mayClear) {\n var line = getLine(doc, pos.line);\n if (line.markedSpans) {\n for (var i = 0; i < line.markedSpans.length; ++i) {\n var sp = line.markedSpans[i],\n 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 if ((sp.from == null || (preventCursorLeft ? sp.from <= pos.ch : sp.from < pos.ch)) && (sp.to == null || (preventCursorRight ? sp.to >= pos.ch : sp.to > pos.ch))) {\n if (mayClear) {\n signal(m, \"beforeCursorEnter\");\n if (m.explicitlyCleared) {\n if (!line.markedSpans) {\n break;\n } else {\n --i;\n continue;\n }\n }\n }\n if (!m.atomic) {\n continue;\n }\n if (oldPos) {\n var near = m.find(dir < 0 ? 1 : -1),\n diff = void 0;\n if (dir < 0 ? preventCursorRight : preventCursorLeft) {\n near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null);\n }\n if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0)) {\n return skipAtomicInner(doc, near, pos, dir, mayClear);\n }\n }\n 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 }\n return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null;\n }\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) || !mayClear && skipAtomicInner(doc, pos, oldPos, dir, true) || skipAtomicInner(doc, pos, oldPos, -dir, mayClear) || !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 function movePos(doc, pos, dir, line) {\n if (dir < 0 && pos.ch == 0) {\n if (pos.line > doc.first) {\n return clipPos(doc, Pos(pos.line - 1));\n } else {\n return null;\n }\n } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) {\n if (pos.line < doc.first + doc.size - 1) {\n return Pos(pos.line + 1, 0);\n } else {\n return null;\n }\n } else {\n return new Pos(pos.line, pos.ch + dir);\n }\n }\n 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 () {\n return obj.canceled = true;\n }\n };\n if (update) {\n obj.update = function (from, to, text, origin) {\n if (from) {\n obj.from = clipPos(doc, from);\n }\n if (to) {\n obj.to = clipPos(doc, to);\n }\n if (text) {\n obj.text = text;\n }\n if (origin !== undefined) {\n obj.origin = origin;\n }\n };\n }\n signal(doc, \"beforeChange\", doc, obj);\n if (doc.cm) {\n signal(doc.cm, \"beforeChange\", doc.cm, obj);\n }\n if (obj.canceled) {\n if (doc.cm) {\n doc.cm.curOp.updateInput = 2;\n }\n return null;\n }\n return {\n from: obj.from,\n to: obj.to,\n text: obj.text,\n origin: obj.origin\n };\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) {\n return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly);\n }\n if (doc.cm.state.suppressEdits) {\n return;\n }\n }\n if (hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\")) {\n change = filterChange(doc, change, true);\n if (!change) {\n return;\n }\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, {\n from: split[i].from,\n to: split[i].to,\n text: i ? [\"\"] : change.text,\n origin: change.origin\n });\n }\n } else {\n makeChangeInner(doc, change);\n }\n }\n function makeChangeInner(doc, change) {\n if (change.text.length == 1 && change.text[0] == \"\" && cmp(change.from, change.to) == 0) {\n return;\n }\n var selAfter = computeSelAfterChange(doc, change);\n addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN);\n makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change));\n var rebased = [];\n linkedDocs(doc, function (doc, sharedHist) {\n if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n rebaseHist(doc.history, change);\n rebased.push(doc.history);\n }\n 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) {\n return;\n }\n var hist = doc.history,\n event,\n selAfter = doc.sel;\n var source = type == \"undo\" ? hist.done : hist.undone,\n dest = type == \"undo\" ? hist.undone : hist.done;\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 }\n if (i == source.length) {\n return;\n }\n hist.lastOrigin = hist.lastSelOrigin = null;\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, {\n clearRedo: false\n });\n return;\n }\n selAfter = event;\n } else if (suppress) {\n source.push(event);\n return;\n } else {\n break;\n }\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({\n changes: antiChanges,\n generation: hist.generation\n });\n hist.generation = event.generation || ++hist.maxGeneration;\n var filter = hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\");\n 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 antiChanges.push(historyChangeFromChange(doc, change));\n var after = i ? computeSelAfterChange(doc, change) : lst(source);\n makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change));\n if (!i && doc.cm) {\n doc.cm.scrollIntoView({\n from: change.from,\n to: changeEnd(change)\n });\n }\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 for (var i$1 = event.changes.length - 1; i$1 >= 0; --i$1) {\n var returned = loop(i$1);\n if (returned) return returned.v;\n }\n }\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) {\n return;\n }\n doc.first += distance;\n doc.sel = new Selection(map(doc.sel.ranges, function (range) {\n return new Range(Pos(range.anchor.line + distance, range.anchor.ch), Pos(range.head.line + distance, range.head.ch));\n }), doc.sel.primIndex);\n 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\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()) {\n return;\n }\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 = {\n from: Pos(doc.first, 0),\n to: Pos(change.to.line + shift, change.to.ch),\n text: [lst(change.text)],\n origin: change.origin\n };\n }\n var last = doc.lastLine();\n if (change.to.line > last) {\n change = {\n from: change.from,\n to: Pos(last, getLine(doc, last).text.length),\n text: [change.text[0]],\n origin: change.origin\n };\n }\n change.removed = getBetween(doc, change.from, change.to);\n if (!selAfter) {\n selAfter = computeSelAfterChange(doc, change);\n }\n if (doc.cm) {\n makeChangeSingleDocInEditor(doc.cm, change, spans);\n } else {\n updateDoc(doc, change, spans);\n }\n setSelectionNoUndo(doc, selAfter, sel_dontScroll);\n if (doc.cantEdit && skipAtomic(doc, Pos(doc.firstLine(), 0))) {\n doc.cantEdit = false;\n }\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,\n display = cm.display,\n from = change.from,\n to = change.to;\n var recomputeMaxLength = false,\n 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 if (doc.sel.contains(change.from, change.to) > -1) {\n signalCursorActivity(cm);\n }\n updateDoc(doc, change, spans, estimateHeight(cm));\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) {\n cm.curOp.updateMaxLine = true;\n }\n }\n retreatFrontier(doc, from.line);\n startWorker(cm, 400);\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\"),\n changeHandler = hasHandler(cm, \"change\");\n if (changeHandler || changesHandler) {\n var obj = {\n from: from,\n to: to,\n text: change.text,\n removed: change.removed,\n origin: change.origin\n };\n if (changeHandler) {\n signalLater(cm, \"change\", cm, obj);\n }\n if (changesHandler) {\n (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj);\n }\n }\n cm.display.selForContextMenu = null;\n }\n function replaceRange(doc, code, from, to, origin) {\n var assign;\n if (!to) {\n to = from;\n }\n if (cmp(to, from) < 0) {\n assign = [to, from], from = assign[0], to = assign[1];\n }\n if (typeof code == \"string\") {\n code = doc.splitLines(code);\n }\n makeChange(doc, {\n from: from,\n to: to,\n text: code,\n origin: origin\n });\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],\n ok = true;\n if (sub.ranges) {\n if (!sub.copied) {\n sub = array[i] = sub.deepCopy();\n sub.copied = true;\n }\n for (var j = 0; j < sub.ranges.length; j++) {\n rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff);\n rebaseHistSelSingle(sub.ranges[j].head, from, to, diff);\n }\n 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 function rebaseHist(hist, change) {\n var from = change.from.line,\n to = change.to.line,\n diff = change.text.length - (to - from) - 1;\n rebaseHistArray(hist.done, from, to, diff);\n rebaseHistArray(hist.undone, from, to, diff);\n }\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,\n line = handle;\n if (typeof handle == \"number\") {\n line = getLine(doc, clipLine(doc, handle));\n } else {\n no = lineNo(handle);\n }\n if (no == null) {\n return null;\n }\n if (op(line, no) && doc.cm) {\n regLineChange(doc.cm, no, changeType);\n }\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 LeafChunk.prototype = {\n chunkSize: function () {\n 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 // Helper used to collapse a small branch into a single leaf.\n collapse: function (lines) {\n lines.push.apply(lines, this.lines);\n },\n // Insert the given array of lines at offset 'at', count them as\n // having the given height.\n insertInner: function (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) {\n 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])) {\n return true;\n }\n }\n }\n };\n function BranchChunk(children) {\n this.children = children;\n var size = 0,\n height = 0;\n for (var i = 0; i < children.length; ++i) {\n var ch = children[i];\n size += ch.chunkSize();\n height += ch.height;\n ch.parent = this;\n }\n this.size = size;\n this.height = height;\n this.parent = null;\n }\n BranchChunk.prototype = {\n chunkSize: function () {\n 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],\n sz = child.chunkSize();\n if (at < sz) {\n var rm = Math.min(n, sz - at),\n oldHeight = child.height;\n child.removeInner(at, rm);\n this.height -= oldHeight - child.height;\n if (sz == rm) {\n this.children.splice(i--, 1);\n child.parent = null;\n }\n if ((n -= rm) == 0) {\n break;\n }\n at = 0;\n } else {\n at -= sz;\n }\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 && (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) {\n var lines = [];\n this.collapse(lines);\n this.children = [new LeafChunk(lines)];\n this.children[0].parent = this;\n }\n },\n collapse: function (lines) {\n for (var i = 0; i < this.children.length; ++i) {\n 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],\n 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 // When a node has grown, check whether it should be split.\n maybeSpill: function () {\n if (this.children.length <= 10) {\n return;\n }\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) {\n // Become the parent node\n var copy = new BranchChunk(me.children);\n copy.parent = me;\n me.children = [copy, sibling];\n me = copy;\n } else {\n me.size -= sibling.size;\n me.height -= sibling.height;\n var myIndex = indexOf(me.parent.children, me);\n me.parent.children.splice(myIndex + 1, 0, sibling);\n }\n sibling.parent = me.parent;\n } while (me.children.length > 10);\n me.parent.maybeSpill();\n },\n iterN: function (at, n, op) {\n for (var i = 0; i < this.children.length; ++i) {\n var child = this.children[i],\n sz = child.chunkSize();\n if (at < sz) {\n var used = Math.min(n, sz - at);\n if (child.iterN(at, used, op)) {\n return true;\n }\n if ((n -= used) == 0) {\n break;\n }\n at = 0;\n } else {\n at -= sz;\n }\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) {\n for (var opt in options) {\n if (options.hasOwnProperty(opt)) {\n this[opt] = options[opt];\n }\n }\n }\n this.doc = doc;\n this.node = node;\n };\n LineWidget.prototype.clear = function () {\n var cm = this.doc.cm,\n ws = this.line.widgets,\n line = this.line,\n no = lineNo(line);\n if (no == null || !ws) {\n return;\n }\n for (var i = 0; i < ws.length; ++i) {\n if (ws[i] == this) {\n ws.splice(i--, 1);\n }\n }\n if (!ws.length) {\n line.widgets = null;\n }\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 LineWidget.prototype.changed = function () {\n var this$1 = this;\n var oldH = this.height,\n cm = this.doc.cm,\n line = this.line;\n this.height = null;\n var diff = widgetHeight(this) - oldH;\n if (!diff) {\n return;\n }\n if (!lineIsHidden(this.doc, line)) {\n updateLineHeight(line, line.height + diff);\n }\n if (cm) {\n runInOp(cm, function () {\n cm.curOp.forceUpdate = true;\n adjustScrollWhenAboveVisible(cm, line, diff);\n signalLater(cm, \"lineWidgetChanged\", cm, this$1, lineNo(line));\n });\n }\n };\n eventMixin(LineWidget);\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) {\n cm.display.alignWidgets = true;\n }\n changeLine(doc, handle, \"widget\", function (line) {\n var widgets = line.widgets || (line.widgets = []);\n if (widget.insertAt == null) {\n widgets.push(widget);\n } else {\n widgets.splice(Math.min(widgets.length, Math.max(0, widget.insertAt)), 0, widget);\n }\n 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) {\n addToScrollTop(cm, widget.height);\n }\n cm.curOp.forceUpdate = true;\n }\n return true;\n });\n if (cm) {\n signalLater(cm, \"lineWidgetAdded\", cm, widget, typeof handle == \"number\" ? handle : lineNo(handle));\n }\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 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) {\n return;\n }\n var cm = this.doc.cm,\n withOp = cm && !cm.curOp;\n if (withOp) {\n startOperation(cm);\n }\n if (hasHandler(this, \"clear\")) {\n var found = this.find();\n if (found) {\n signalLater(this, \"clear\", found.from, found.to);\n }\n }\n var min = null,\n 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) {\n regLineChange(cm, lineNo(line), \"text\");\n } else if (cm) {\n if (span.to != null) {\n max = lineNo(line);\n }\n if (span.from != null) {\n min = lineNo(line);\n }\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 }\n if (cm && this.collapsed && !cm.options.lineWrapping) {\n for (var i$1 = 0; i$1 < this.lines.length; ++i$1) {\n var visual = visualLine(this.lines[i$1]),\n len = lineLength(visual);\n 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) {\n regChange(cm, min, max + 1);\n }\n this.lines.length = 0;\n this.explicitlyCleared = true;\n if (this.atomic && this.doc.cantEdit) {\n this.doc.cantEdit = false;\n if (cm) {\n reCheckSelection(cm.doc);\n }\n }\n if (cm) {\n signalLater(cm, \"markerCleared\", cm, this, min, max);\n }\n if (withOp) {\n endOperation(cm);\n }\n if (this.parent) {\n this.parent.clear();\n }\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\") {\n side = 1;\n }\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) {\n return from;\n }\n }\n if (span.to != null) {\n to = Pos(lineObj ? line : lineNo(line), span.to);\n if (side == 1) {\n return to;\n }\n }\n }\n return from && {\n from: from,\n to: to\n };\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 var pos = this.find(-1, true),\n widget = this,\n cm = this.doc.cm;\n if (!pos || !cm) {\n return;\n }\n runInOp(cm, function () {\n var line = pos.line,\n 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 }\n signalLater(cm, \"markerChanged\", cm, this$1);\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 }\n this.lines.push(line);\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) {\n return markTextShared(doc, from, to, options, type);\n }\n // Ensure we are in an operation.\n if (doc.cm && !doc.cm.curOp) {\n return operation(doc.cm, markText)(doc, from, to, options, type);\n }\n var marker = new TextMarker(doc, type),\n diff = cmp(from, to);\n if (options) {\n copyObj(options, marker, false);\n }\n // Don't connect empty markers unless clearWhenEmpty is false\n if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false) {\n return marker;\n }\n if (marker.replacedWith) {\n // Showing up as a widget implies collapsed (widget replaces text)\n marker.collapsed = true;\n marker.widgetNode = eltP(\"span\", [marker.replacedWith], \"CodeMirror-widget\");\n if (!options.handleMouseEvents) {\n marker.widgetNode.setAttribute(\"cm-ignore-events\", \"true\");\n }\n if (options.insertLeft) {\n marker.widgetNode.insertLeft = true;\n }\n }\n if (marker.collapsed) {\n if (conflictingCollapsedRange(doc, from.line, from, to, marker) || from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker)) {\n throw new Error(\"Inserting collapsed marker partially overlapping an existing one\");\n }\n seeCollapsedSpans();\n }\n if (marker.addToHistory) {\n addChangeToHistory(doc, {\n from: from,\n to: to,\n origin: \"markText\"\n }, doc.sel, NaN);\n }\n var curLine = from.line,\n cm = doc.cm,\n updateMaxLine;\n doc.iter(curLine, to.line + 1, function (line) {\n if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine) {\n updateMaxLine = true;\n }\n if (marker.collapsed && curLine != from.line) {\n updateLineHeight(line, 0);\n }\n addMarkedSpan(line, new MarkedSpan(marker, curLine == from.line ? from.ch : null, curLine == to.line ? to.ch : null), doc.cm && doc.cm.curOp);\n ++curLine;\n });\n // lineIsHidden depends on the presence of the spans, so needs a second pass\n if (marker.collapsed) {\n doc.iter(from.line, to.line + 1, function (line) {\n if (lineIsHidden(doc, line)) {\n updateLineHeight(line, 0);\n }\n });\n }\n if (marker.clearOnEnter) {\n on(marker, \"beforeCursorEnter\", function () {\n return marker.clear();\n });\n }\n if (marker.readOnly) {\n seeReadOnlySpans();\n if (doc.history.done.length || doc.history.undone.length) {\n doc.clearHistory();\n }\n }\n if (marker.collapsed) {\n marker.id = ++nextMarkerId;\n marker.atomic = true;\n }\n if (cm) {\n // Sync editor state\n if (updateMaxLine) {\n cm.curOp.updateMaxLine = true;\n }\n if (marker.collapsed) {\n regChange(cm, from.line, to.line + 1);\n } else if (marker.className || marker.startStyle || marker.endStyle || marker.css || marker.attributes || marker.title) {\n for (var i = from.line; i <= to.line; i++) {\n regLineChange(cm, i, \"text\");\n }\n }\n if (marker.atomic) {\n reCheckSelection(cm.doc);\n }\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) {\n return;\n }\n this.explicitlyCleared = true;\n for (var i = 0; i < this.markers.length; ++i) {\n this.markers[i].clear();\n }\n signalLater(this, \"clear\");\n };\n SharedTextMarker.prototype.find = function (side, lineObj) {\n return this.primary.find(side, lineObj);\n };\n eventMixin(SharedTextMarker);\n function markTextShared(doc, from, to, options, type) {\n options = copyObj(options);\n options.shared = false;\n var markers = [markText(doc, from, to, options, type)],\n primary = markers[0];\n var widget = options.widgetNode;\n linkedDocs(doc, function (doc) {\n if (widget) {\n options.widgetNode = widget.cloneNode(true);\n }\n 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) {\n return;\n }\n }\n primary = lst(markers);\n });\n return new SharedTextMarker(markers, primary);\n }\n function findSharedMarkers(doc) {\n return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function (m) {\n return m.parent;\n });\n }\n function copySharedMarkers(doc, markers) {\n for (var i = 0; i < markers.length; i++) {\n var marker = markers[i],\n pos = marker.find();\n var mFrom = doc.clipPos(pos.from),\n mTo = doc.clipPos(pos.to);\n 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 function detachSharedMarkers(markers) {\n var loop = function (i) {\n var marker = markers[i],\n linked = [marker.primary.doc];\n linkedDocs(marker.primary.doc, function (d) {\n return linked.push(d);\n });\n 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 for (var i = 0; i < markers.length; i++) loop(i);\n }\n var nextDocId = 0;\n var Doc = function (text, mode, firstLine, lineSep, direction) {\n if (!(this instanceof Doc)) {\n return new Doc(text, mode, firstLine, lineSep, direction);\n }\n if (firstLine == null) {\n 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 if (typeof text == \"string\") {\n text = this.splitLines(text);\n }\n updateDoc(this, {\n from: start,\n to: start,\n text: text\n });\n setSelection(this, simpleSelection(start), sel_dontScroll);\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) {\n this.iterN(from - this.first, to - from, op);\n } else {\n this.iterN(this.first, this.first + this.size, from);\n }\n },\n // Non-public interface for adding and removing lines.\n insert: function (at, lines) {\n var height = 0;\n for (var i = 0; i < lines.length; ++i) {\n height += lines[i].height;\n }\n this.insertInner(at - this.first, lines, height);\n },\n remove: function (at, n) {\n this.removeInner(at - this.first, n);\n },\n // From here, the methods are part of the public interface. Most\n // are also available from CodeMirror (editor) instances.\n\n getValue: function (lineSep) {\n var lines = getLines(this, this.first, this.first + this.size);\n if (lineSep === false) {\n return lines;\n }\n return lines.join(lineSep || this.lineSeparator());\n },\n setValue: docMethodOp(function (code) {\n var top = Pos(this.first, 0),\n last = this.first + this.size - 1;\n makeChange(this, {\n from: top,\n to: Pos(last, getLine(this, last).text.length),\n text: this.splitLines(code),\n origin: \"setValue\",\n full: true\n }, true);\n if (this.cm) {\n scrollToCoords(this.cm, 0, 0);\n }\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) {\n return lines;\n }\n if (lineSep === '') {\n return lines.join('');\n }\n return lines.join(lineSep || this.lineSeparator());\n },\n getLine: function (line) {\n var l = this.getLineHandle(line);\n return l && l.text;\n },\n getLineHandle: function (line) {\n if (isLine(this, line)) {\n return getLine(this, line);\n }\n },\n getLineNumber: function (line) {\n return lineNo(line);\n },\n getLineHandleVisualStart: function (line) {\n if (typeof line == \"number\") {\n line = getLine(this, line);\n }\n return visualLine(line);\n },\n lineCount: function () {\n return this.size;\n },\n firstLine: function () {\n return this.first;\n },\n lastLine: function () {\n return this.first + this.size - 1;\n },\n clipPos: function (pos) {\n return clipPos(this, pos);\n },\n getCursor: function (start) {\n var range = this.sel.primary(),\n pos;\n if (start == null || start == \"head\") {\n pos = range.head;\n } else if (start == \"anchor\") {\n pos = range.anchor;\n } else if (start == \"end\" || start == \"to\" || start === false) {\n pos = range.to();\n } else {\n pos = range.from();\n }\n return pos;\n },\n listSelections: function () {\n return this.sel.ranges;\n },\n somethingSelected: function () {\n return this.sel.somethingSelected();\n },\n setCursor: docMethodOp(function (line, ch, options) {\n setSimpleSelection(this, clipPos(this, typeof line == \"number\" ? Pos(line, ch || 0) : line), null, options);\n }),\n setSelection: docMethodOp(function (anchor, head, options) {\n setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options);\n }),\n extendSelection: docMethodOp(function (head, other, options) {\n extendSelection(this, clipPos(this, head), other && clipPos(this, other), options);\n }),\n extendSelections: docMethodOp(function (heads, options) {\n extendSelections(this, clipPosArray(this, heads), options);\n }),\n extendSelectionsBy: docMethodOp(function (f, options) {\n var heads = map(this.sel.ranges, f);\n extendSelections(this, clipPosArray(this, heads), options);\n }),\n setSelections: docMethodOp(function (ranges, primary, options) {\n if (!ranges.length) {\n return;\n }\n var out = [];\n for (var i = 0; i < ranges.length; i++) {\n out[i] = new Range(clipPos(this, ranges[i].anchor), clipPos(this, ranges[i].head || ranges[i].anchor));\n }\n if (primary == null) {\n primary = Math.min(ranges.length - 1, this.sel.primIndex);\n }\n setSelection(this, normalizeSelection(this.cm, out, primary), options);\n }),\n addSelection: docMethodOp(function (anchor, head, options) {\n var ranges = this.sel.ranges.slice(0);\n ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor)));\n setSelection(this, normalizeSelection(this.cm, ranges, ranges.length - 1), options);\n }),\n getSelection: function (lineSep) {\n var ranges = this.sel.ranges,\n 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) {\n return lines;\n } else {\n return lines.join(lineSep || this.lineSeparator());\n }\n },\n getSelections: function (lineSep) {\n var parts = [],\n 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) {\n sel = sel.join(lineSep || this.lineSeparator());\n }\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 }\n this.replaceSelections(dup, collapse, origin || \"+input\");\n },\n replaceSelections: docMethodOp(function (code, collapse, origin) {\n var changes = [],\n sel = this.sel;\n for (var i = 0; i < sel.ranges.length; i++) {\n var range = sel.ranges[i];\n changes[i] = {\n from: range.from(),\n to: range.to(),\n text: this.splitLines(code[i]),\n origin: origin\n };\n }\n 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 }\n if (newSel) {\n setSelectionReplaceHistory(this, newSel);\n } else if (this.cm) {\n ensureCursorVisible(this.cm);\n }\n }),\n undo: docMethodOp(function () {\n makeChangeFromHistory(this, \"undo\");\n }),\n redo: docMethodOp(function () {\n makeChangeFromHistory(this, \"redo\");\n }),\n undoSelection: docMethodOp(function () {\n makeChangeFromHistory(this, \"undo\", true);\n }),\n redoSelection: docMethodOp(function () {\n makeChangeFromHistory(this, \"redo\", true);\n }),\n setExtending: function (val) {\n this.extend = val;\n },\n getExtending: function () {\n return this.extend;\n },\n historySize: function () {\n var hist = this.history,\n done = 0,\n undone = 0;\n for (var i = 0; i < hist.done.length; i++) {\n if (!hist.done[i].ranges) {\n ++done;\n }\n }\n for (var i$1 = 0; i$1 < hist.undone.length; i$1++) {\n if (!hist.undone[i$1].ranges) {\n ++undone;\n }\n }\n return {\n undo: done,\n redo: undone\n };\n },\n clearHistory: function () {\n var this$1 = this;\n this.history = new History(this.history);\n linkedDocs(this, function (doc) {\n return doc.history = this$1.history;\n }, true);\n },\n markClean: function () {\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 }\n return this.history.generation;\n },\n isClean: function (gen) {\n return this.history.generation == (gen || this.cleanGeneration);\n },\n getHistory: function () {\n return {\n done: copyHistoryArray(this.history.done),\n undone: copyHistoryArray(this.history.undone)\n };\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 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)) {\n line.gutterMarkers = null;\n }\n return true;\n });\n }),\n clearGutter: docMethodOp(function (gutterID) {\n var this$1 = this;\n this.iter(function (line) {\n if (line.gutterMarkers && line.gutterMarkers[gutterID]) {\n changeLine(this$1, line, \"gutter\", function () {\n line.gutterMarkers[gutterID] = null;\n if (isEmpty(line.gutterMarkers)) {\n line.gutterMarkers = null;\n }\n return true;\n });\n }\n });\n }),\n lineInfo: function (line) {\n var n;\n if (typeof line == \"number\") {\n if (!isLine(this, line)) {\n return null;\n }\n n = line;\n line = getLine(this, line);\n if (!line) {\n return null;\n }\n } else {\n n = lineNo(line);\n if (n == null) {\n return null;\n }\n }\n return {\n line: n,\n handle: line,\n text: line.text,\n gutterMarkers: line.gutterMarkers,\n textClass: line.textClass,\n bgClass: line.bgClass,\n wrapClass: line.wrapClass,\n widgets: line.widgets\n };\n },\n addLineClass: docMethodOp(function (handle, where, cls) {\n return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", function (line) {\n var prop = where == \"text\" ? \"textClass\" : where == \"background\" ? \"bgClass\" : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n if (!line[prop]) {\n line[prop] = cls;\n } else if (classTest(cls).test(line[prop])) {\n return false;\n } else {\n line[prop] += \" \" + cls;\n }\n return true;\n });\n }),\n removeLineClass: docMethodOp(function (handle, where, cls) {\n return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", function (line) {\n var prop = where == \"text\" ? \"textClass\" : where == \"background\" ? \"bgClass\" : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n var cur = line[prop];\n if (!cur) {\n return false;\n } else if (cls == null) {\n line[prop] = null;\n } else {\n var found = cur.match(classTest(cls));\n if (!found) {\n return false;\n }\n var end = found.index + found[0].length;\n line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? \"\" : \" \") + cur.slice(end) || null;\n }\n return true;\n });\n }),\n addLineWidget: docMethodOp(function (handle, node, options) {\n return addLineWidget(this, handle, node, options);\n }),\n removeLineWidget: function (widget) {\n 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 = {\n replacedWith: options && (options.nodeType == null ? options.widget : options),\n insertLeft: options && options.insertLeft,\n clearWhenEmpty: false,\n shared: options && options.shared,\n handleMouseEvents: options && options.handleMouseEvents\n };\n pos = clipPos(this, pos);\n return markText(this, pos, pos, realOpts, \"bookmark\");\n },\n findMarksAt: function (pos) {\n pos = clipPos(this, pos);\n var markers = [],\n spans = getLine(this, pos.line).markedSpans;\n if (spans) {\n for (var i = 0; i < spans.length; ++i) {\n var span = spans[i];\n if ((span.from == null || span.from <= pos.ch) && (span.to == null || span.to >= pos.ch)) {\n markers.push(span.marker.parent || span.marker);\n }\n }\n }\n return markers;\n },\n findMarks: function (from, to, filter) {\n from = clipPos(this, from);\n to = clipPos(this, to);\n var found = [],\n lineNo = from.line;\n this.iter(from.line, to.line + 1, function (line) {\n var spans = line.markedSpans;\n if (spans) {\n 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 || span.from == null && lineNo != from.line || span.from != null && lineNo == to.line && span.from >= to.ch) && (!filter || filter(span.marker))) {\n found.push(span.marker.parent || span.marker);\n }\n }\n }\n ++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) {\n for (var i = 0; i < sps.length; ++i) {\n if (sps[i].from != null) {\n markers.push(sps[i].marker);\n }\n }\n }\n });\n return markers;\n },\n posFromIndex: function (off) {\n var ch,\n lineNo = this.first,\n sepSize = this.lineSeparator().length;\n this.iter(function (line) {\n var sz = line.text.length + sepSize;\n if (sz > off) {\n ch = off;\n return true;\n }\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) {\n return 0;\n }\n var sepSize = this.lineSeparator().length;\n this.iter(this.first, coords.line, function (line) {\n // iter aborts when callback returns a truthy value\n index += line.text.length + sepSize;\n });\n return index;\n },\n copy: function (copyHistory) {\n var doc = new Doc(getLines(this, this.first, this.first + this.size), this.modeOption, this.first, this.lineSep, this.direction);\n doc.scrollTop = this.scrollTop;\n doc.scrollLeft = this.scrollLeft;\n doc.sel = this.sel;\n doc.extend = false;\n if (copyHistory) {\n doc.history.undoDepth = this.history.undoDepth;\n doc.setHistory(this.getHistory());\n }\n return doc;\n },\n linkedDoc: function (options) {\n if (!options) {\n options = {};\n }\n var from = this.first,\n to = this.first + this.size;\n if (options.from != null && options.from > from) {\n from = options.from;\n }\n if (options.to != null && options.to < to) {\n to = options.to;\n }\n var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep, this.direction);\n if (options.sharedHist) {\n copy.history = this.history;\n }\n (this.linked || (this.linked = [])).push({\n doc: copy,\n sharedHist: options.sharedHist\n });\n copy.linked = [{\n doc: this,\n isParent: true,\n sharedHist: options.sharedHist\n }];\n copySharedMarkers(copy, findSharedMarkers(this));\n return copy;\n },\n unlinkDoc: function (other) {\n if (other instanceof CodeMirror) {\n other = other.doc;\n }\n if (this.linked) {\n for (var i = 0; i < this.linked.length; ++i) {\n var link = this.linked[i];\n if (link.doc != other) {\n continue;\n }\n this.linked.splice(i, 1);\n other.unlinkDoc(this);\n detachSharedMarkers(findSharedMarkers(this));\n break;\n }\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) {\n return splitIds.push(doc.id);\n }, true);\n other.history = new History(null);\n other.history.done = copyHistoryArray(this.history.done, splitIds);\n other.history.undone = copyHistoryArray(this.history.undone, splitIds);\n }\n },\n iterLinkedDocs: function (f) {\n linkedDocs(this, f);\n },\n getMode: function () {\n return this.mode;\n },\n getEditor: function () {\n return this.cm;\n },\n splitLines: function (str) {\n if (this.lineSep) {\n return str.split(this.lineSep);\n }\n return splitLinesAuto(str);\n },\n lineSeparator: function () {\n return this.lineSep || \"\\n\";\n },\n setDirection: docMethodOp(function (dir) {\n if (dir != \"rtl\") {\n dir = \"ltr\";\n }\n if (dir == this.direction) {\n return;\n }\n this.direction = dir;\n this.iter(function (line) {\n return line.order = null;\n });\n if (this.cm) {\n directionChanged(this.cm);\n }\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 function onDrop(e) {\n var cm = this;\n clearDragCursor(cm);\n if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) {\n return;\n }\n e_preventDefault(e);\n if (ie) {\n lastDrop = +new Date();\n }\n var pos = posFromMouse(cm, e, true),\n files = e.dataTransfer.files;\n if (!pos || cm.isReadOnly()) {\n return;\n }\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,\n text = Array(n),\n read = 0;\n var markAsReadAndPasteIfAllFilesAreRead = function () {\n if (++read == n) {\n operation(cm, function () {\n pos = clipPos(cm.doc, pos);\n var change = {\n from: pos,\n to: pos,\n text: cm.doc.splitLines(text.filter(function (t) {\n return t != null;\n }).join(cm.doc.lineSeparator())),\n origin: \"paste\"\n };\n makeChange(cm.doc, change);\n setSelectionReplaceHistory(cm.doc, simpleSelection(clipPos(cm.doc, pos), clipPos(cm.doc, changeEnd(change))));\n })();\n }\n };\n var readTextFromFile = function (file, i) {\n if (cm.options.allowDropFileTypes && indexOf(cm.options.allowDropFileTypes, file.type) == -1) {\n markAsReadAndPasteIfAllFilesAreRead();\n return;\n }\n var reader = new FileReader();\n reader.onerror = function () {\n return markAsReadAndPasteIfAllFilesAreRead();\n };\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++) {\n readTextFromFile(files[i], i);\n }\n } else {\n // Normal drop\n // Don't do a replace if the drop happened inside of the selected text.\n if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) {\n cm.state.draggingText(e);\n // Ensure the editor is re-focused\n setTimeout(function () {\n return cm.display.input.focus();\n }, 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 }\n setSelectionNoUndo(cm.doc, simpleSelection(pos, pos));\n if (selected) {\n for (var i$1 = 0; i$1 < selected.length; ++i$1) {\n replaceRange(cm.doc, \"\", selected[i$1].anchor, selected[i$1].head, \"drag\");\n }\n }\n cm.replaceSelection(text$1, \"around\", \"paste\");\n cm.display.input.focus();\n }\n } catch (e$1) {}\n }\n }\n function onDragStart(cm, e) {\n if (ie && (!cm.state.draggingText || +new Date() - lastDrop < 100)) {\n e_stop(e);\n return;\n }\n if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) {\n 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) {\n img.parentNode.removeChild(img);\n }\n }\n }\n function onDragOver(cm, e) {\n var pos = posFromMouse(cm, e);\n if (!pos) {\n return;\n }\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 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) {\n return;\n }\n var byClass = document.getElementsByClassName(\"CodeMirror\"),\n editors = [];\n for (var i = 0; i < byClass.length; i++) {\n var cm = byClass[i].CodeMirror;\n if (cm) {\n editors.push(cm);\n }\n }\n if (editors.length) {\n editors[0].operation(function () {\n for (var i = 0; i < editors.length; i++) {\n f(editors[i]);\n }\n });\n }\n }\n var globalsRegistered = false;\n function ensureGlobalHandlers() {\n if (globalsRegistered) {\n return;\n }\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) {\n resizeTimer = setTimeout(function () {\n resizeTimer = null;\n forEachCodeMirror(onResize);\n }, 100);\n }\n });\n // When the window loses focus, we want to show the editor as blurred\n on(window, \"blur\", function () {\n return forEachCodeMirror(onBlur);\n });\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 var keyNames = {\n 3: \"Pause\",\n 8: \"Backspace\",\n 9: \"Tab\",\n 13: \"Enter\",\n 16: \"Shift\",\n 17: \"Ctrl\",\n 18: \"Alt\",\n 19: \"Pause\",\n 20: \"CapsLock\",\n 27: \"Esc\",\n 32: \"Space\",\n 33: \"PageUp\",\n 34: \"PageDown\",\n 35: \"End\",\n 36: \"Home\",\n 37: \"Left\",\n 38: \"Up\",\n 39: \"Right\",\n 40: \"Down\",\n 44: \"PrintScrn\",\n 45: \"Insert\",\n 46: \"Delete\",\n 59: \";\",\n 61: \"=\",\n 91: \"Mod\",\n 92: \"Mod\",\n 93: \"Mod\",\n 106: \"*\",\n 107: \"=\",\n 109: \"-\",\n 110: \".\",\n 111: \"/\",\n 145: \"ScrollLock\",\n 173: \"-\",\n 186: \";\",\n 187: \"=\",\n 188: \",\",\n 189: \"-\",\n 190: \".\",\n 191: \"/\",\n 192: \"`\",\n 219: \"[\",\n 220: \"\\\\\",\n 221: \"]\",\n 222: \"'\",\n 224: \"Mod\",\n 63232: \"Up\",\n 63233: \"Down\",\n 63234: \"Left\",\n 63235: \"Right\",\n 63272: \"Delete\",\n 63273: \"Home\",\n 63275: \"End\",\n 63276: \"PageUp\",\n 63277: \"PageDown\",\n 63302: \"Insert\"\n };\n\n // Number keys\n for (var i = 0; i < 10; i++) {\n keyNames[i + 48] = keyNames[i + 96] = String(i);\n }\n // Alphabetic keys\n for (var i$1 = 65; i$1 <= 90; i$1++) {\n keyNames[i$1] = String.fromCharCode(i$1);\n }\n // Function keys\n for (var i$2 = 1; i$2 <= 12; i$2++) {\n keyNames[i$2 + 111] = keyNames[i$2 + 63235] = \"F\" + i$2;\n }\n var keyMap = {};\n keyMap.basic = {\n \"Left\": \"goCharLeft\",\n \"Right\": \"goCharRight\",\n \"Up\": \"goLineUp\",\n \"Down\": \"goLineDown\",\n \"End\": \"goLineEnd\",\n \"Home\": \"goLineStartSmart\",\n \"PageUp\": \"goPageUp\",\n \"PageDown\": \"goPageDown\",\n \"Delete\": \"delCharAfter\",\n \"Backspace\": \"delCharBefore\",\n \"Shift-Backspace\": \"delCharBefore\",\n \"Tab\": \"defaultTab\",\n \"Shift-Tab\": \"indentAuto\",\n \"Enter\": \"newlineAndIndent\",\n \"Insert\": \"toggleOverwrite\",\n \"Esc\": \"singleSelection\"\n };\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\",\n \"Ctrl-D\": \"deleteLine\",\n \"Ctrl-Z\": \"undo\",\n \"Shift-Ctrl-Z\": \"redo\",\n \"Ctrl-Y\": \"redo\",\n \"Ctrl-Home\": \"goDocStart\",\n \"Ctrl-End\": \"goDocEnd\",\n \"Ctrl-Up\": \"goLineUp\",\n \"Ctrl-Down\": \"goLineDown\",\n \"Ctrl-Left\": \"goGroupLeft\",\n \"Ctrl-Right\": \"goGroupRight\",\n \"Alt-Left\": \"goLineStart\",\n \"Alt-Right\": \"goLineEnd\",\n \"Ctrl-Backspace\": \"delGroupBefore\",\n \"Ctrl-Delete\": \"delGroupAfter\",\n \"Ctrl-S\": \"save\",\n \"Ctrl-F\": \"find\",\n \"Ctrl-G\": \"findNext\",\n \"Shift-Ctrl-G\": \"findPrev\",\n \"Shift-Ctrl-F\": \"replace\",\n \"Shift-Ctrl-R\": \"replaceAll\",\n \"Ctrl-[\": \"indentLess\",\n \"Ctrl-]\": \"indentMore\",\n \"Ctrl-U\": \"undoSelection\",\n \"Shift-Ctrl-U\": \"redoSelection\",\n \"Alt-U\": \"redoSelection\",\n \"fallthrough\": \"basic\"\n };\n // Very basic readline/emacs-style bindings, which are standard on Mac.\n keyMap.emacsy = {\n \"Ctrl-F\": \"goCharRight\",\n \"Ctrl-B\": \"goCharLeft\",\n \"Ctrl-P\": \"goLineUp\",\n \"Ctrl-N\": \"goLineDown\",\n \"Ctrl-A\": \"goLineStart\",\n \"Ctrl-E\": \"goLineEnd\",\n \"Ctrl-V\": \"goPageDown\",\n \"Shift-Ctrl-V\": \"goPageUp\",\n \"Ctrl-D\": \"delCharAfter\",\n \"Ctrl-H\": \"delCharBefore\",\n \"Alt-Backspace\": \"delWordBefore\",\n \"Ctrl-K\": \"killLine\",\n \"Ctrl-T\": \"transposeChars\",\n \"Ctrl-O\": \"openLine\"\n };\n keyMap.macDefault = {\n \"Cmd-A\": \"selectAll\",\n \"Cmd-D\": \"deleteLine\",\n \"Cmd-Z\": \"undo\",\n \"Shift-Cmd-Z\": \"redo\",\n \"Cmd-Y\": \"redo\",\n \"Cmd-Home\": \"goDocStart\",\n \"Cmd-Up\": \"goDocStart\",\n \"Cmd-End\": \"goDocEnd\",\n \"Cmd-Down\": \"goDocEnd\",\n \"Alt-Left\": \"goGroupLeft\",\n \"Alt-Right\": \"goGroupRight\",\n \"Cmd-Left\": \"goLineLeft\",\n \"Cmd-Right\": \"goLineRight\",\n \"Alt-Backspace\": \"delGroupBefore\",\n \"Ctrl-Alt-Backspace\": \"delGroupAfter\",\n \"Alt-Delete\": \"delGroupAfter\",\n \"Cmd-S\": \"save\",\n \"Cmd-F\": \"find\",\n \"Cmd-G\": \"findNext\",\n \"Shift-Cmd-G\": \"findPrev\",\n \"Cmd-Alt-F\": \"replace\",\n \"Shift-Cmd-Alt-F\": \"replaceAll\",\n \"Cmd-[\": \"indentLess\",\n \"Cmd-]\": \"indentMore\",\n \"Cmd-Backspace\": \"delWrappedLineLeft\",\n \"Cmd-Delete\": \"delWrappedLineRight\",\n \"Cmd-U\": \"undoSelection\",\n \"Shift-Cmd-U\": \"redoSelection\",\n \"Ctrl-Up\": \"goDocStart\",\n \"Ctrl-Down\": \"goDocEnd\",\n \"fallthrough\": [\"basic\", \"emacsy\"]\n };\n keyMap[\"default\"] = mac ? keyMap.macDefault : keyMap.pcDefault;\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)) {\n cmd = true;\n } else if (/^a(lt)?$/i.test(mod)) {\n alt = true;\n } else if (/^(c|ctrl|control)$/i.test(mod)) {\n ctrl = true;\n } else if (/^s(hift)?$/i.test(mod)) {\n shift = true;\n } else {\n throw new Error(\"Unrecognized modifier name: \" + mod);\n }\n }\n if (alt) {\n name = \"Alt-\" + name;\n }\n if (ctrl) {\n name = \"Ctrl-\" + name;\n }\n if (cmd) {\n name = \"Cmd-\" + name;\n }\n if (shift) {\n name = \"Shift-\" + name;\n }\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) {\n if (keymap.hasOwnProperty(keyname)) {\n var value = keymap[keyname];\n if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) {\n continue;\n }\n if (value == \"...\") {\n delete keymap[keyname];\n continue;\n }\n var keys = map(keyname.split(\" \"), normalizeKeyName);\n for (var i = 0; i < keys.length; i++) {\n var val = void 0,\n 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) {\n copy[name] = val;\n } else if (prev != val) {\n throw new Error(\"Inconsistent bindings for \" + name);\n }\n }\n delete keymap[keyname];\n }\n }\n for (var prop in copy) {\n keymap[prop] = copy[prop];\n }\n return keymap;\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) {\n return \"nothing\";\n }\n if (found === \"...\") {\n return \"multi\";\n }\n if (found != null && handle(found)) {\n 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 }\n for (var i = 0; i < map.fallthrough.length; i++) {\n var result = lookupKey(key, map.fallthrough[i], handle, context);\n if (result) {\n return result;\n }\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 function addModifierNames(name, event, noShift) {\n var base = name;\n if (event.altKey && base != \"Alt\") {\n name = \"Alt-\" + name;\n }\n if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != \"Ctrl\") {\n name = \"Ctrl-\" + name;\n }\n if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != \"Mod\") {\n name = \"Cmd-\" + name;\n }\n if (!noShift && event.shiftKey && base != \"Shift\") {\n name = \"Shift-\" + name;\n }\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\"]) {\n return false;\n }\n var name = keyNames[event.keyCode];\n if (name == null || event.altGraphKey) {\n return false;\n }\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) {\n name = event.code;\n }\n return addModifierNames(name, event, noShift);\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,\n 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 }\n ensureCursorVisible(cm);\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 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 function endOfLine(visually, cm, lineObj, lineNo, dir) {\n if (visually) {\n if (cm.doc.direction == \"rtl\") {\n dir = -dir;\n }\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) {\n return measureCharPrepared(cm, prep, ch).top == targetTop;\n }, dir < 0 == (part.level == 1) ? part.from : part.to - 1, ch);\n if (sticky == \"before\") {\n ch = moveCharLogically(lineObj, ch, 1);\n }\n } else {\n ch = dir < 0 ? part.to : part.from;\n }\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 function moveVisually(cm, line, start, dir) {\n var bidi = getOrder(line, cm.doc.direction);\n if (!bidi) {\n return moveLogically(line, start, dir);\n }\n if (start.ch >= line.text.length) {\n start.ch = line.text.length;\n start.sticky = \"before\";\n } else if (start.ch <= 0) {\n start.ch = 0;\n start.sticky = \"after\";\n }\n var partPos = getBidiPartAt(bidi, start.ch, start.sticky),\n 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 var mv = function (pos, dir) {\n return moveCharLogically(line, pos instanceof Pos ? pos.ch : pos, dir);\n };\n var prep;\n var getWrappedLineExtent = function (ch) {\n if (!cm.options.lineWrapping) {\n return {\n begin: 0,\n end: line.text.length\n };\n }\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 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) {\n return moveInStorageOrder ? new Pos(start.line, mv(ch, 1), \"before\") : 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) {\n return getRes(ch, moveInStorageOrder);\n }\n ch = moveInStorageOrder ? part.from : mv(part.to, -1);\n if (wrappedLineExtent.begin <= ch && ch < wrappedLineExtent.end) {\n return getRes(ch, moveInStorageOrder);\n }\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) {\n return res;\n }\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) {\n return res;\n }\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) {\n return cm.setSelection(cm.getCursor(\"anchor\"), cm.getCursor(\"head\"), sel_dontScroll);\n },\n killLine: function (cm) {\n 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 {\n from: range.head,\n to: Pos(range.head.line + 1, 0)\n };\n } else {\n return {\n from: range.head,\n to: Pos(range.head.line, len)\n };\n }\n } else {\n return {\n from: range.from(),\n to: range.to()\n };\n }\n });\n },\n deleteLine: function (cm) {\n return deleteNearSelection(cm, function (range) {\n return {\n from: Pos(range.from().line, 0),\n to: clipPos(cm.doc, Pos(range.to().line + 1, 0))\n };\n });\n },\n delLineLeft: function (cm) {\n return deleteNearSelection(cm, function (range) {\n return {\n from: Pos(range.from().line, 0),\n to: range.from()\n };\n });\n },\n delWrappedLineLeft: function (cm) {\n return deleteNearSelection(cm, function (range) {\n var top = cm.charCoords(range.head, \"div\").top + 5;\n var leftPos = cm.coordsChar({\n left: 0,\n top: top\n }, \"div\");\n return {\n from: leftPos,\n to: range.from()\n };\n });\n },\n delWrappedLineRight: function (cm) {\n return deleteNearSelection(cm, function (range) {\n var top = cm.charCoords(range.head, \"div\").top + 5;\n var rightPos = cm.coordsChar({\n left: cm.display.lineDiv.offsetWidth + 100,\n top: top\n }, \"div\");\n return {\n from: range.from(),\n to: rightPos\n };\n });\n },\n undo: function (cm) {\n return cm.undo();\n },\n redo: function (cm) {\n return cm.redo();\n },\n undoSelection: function (cm) {\n return cm.undoSelection();\n },\n redoSelection: function (cm) {\n return cm.redoSelection();\n },\n goDocStart: function (cm) {\n return cm.extendSelection(Pos(cm.firstLine(), 0));\n },\n goDocEnd: function (cm) {\n return cm.extendSelection(Pos(cm.lastLine()));\n },\n goLineStart: function (cm) {\n return cm.extendSelectionsBy(function (range) {\n return lineStart(cm, range.head.line);\n }, {\n origin: \"+move\",\n bias: 1\n });\n },\n goLineStartSmart: function (cm) {\n return cm.extendSelectionsBy(function (range) {\n return lineStartSmart(cm, range.head);\n }, {\n origin: \"+move\",\n bias: 1\n });\n },\n goLineEnd: function (cm) {\n return cm.extendSelectionsBy(function (range) {\n return lineEnd(cm, range.head.line);\n }, {\n origin: \"+move\",\n bias: -1\n });\n },\n goLineRight: function (cm) {\n return cm.extendSelectionsBy(function (range) {\n var top = cm.cursorCoords(range.head, \"div\").top + 5;\n return cm.coordsChar({\n left: cm.display.lineDiv.offsetWidth + 100,\n top: top\n }, \"div\");\n }, sel_move);\n },\n goLineLeft: function (cm) {\n return cm.extendSelectionsBy(function (range) {\n var top = cm.cursorCoords(range.head, \"div\").top + 5;\n return cm.coordsChar({\n left: 0,\n top: top\n }, \"div\");\n }, sel_move);\n },\n goLineLeftSmart: function (cm) {\n return cm.extendSelectionsBy(function (range) {\n var top = cm.cursorCoords(range.head, \"div\").top + 5;\n var pos = cm.coordsChar({\n left: 0,\n top: top\n }, \"div\");\n if (pos.ch < cm.getLine(pos.line).search(/\\S/)) {\n return lineStartSmart(cm, range.head);\n }\n return pos;\n }, sel_move);\n },\n goLineUp: function (cm) {\n return cm.moveV(-1, \"line\");\n },\n goLineDown: function (cm) {\n return cm.moveV(1, \"line\");\n },\n goPageUp: function (cm) {\n return cm.moveV(-1, \"page\");\n },\n goPageDown: function (cm) {\n return cm.moveV(1, \"page\");\n },\n goCharLeft: function (cm) {\n return cm.moveH(-1, \"char\");\n },\n goCharRight: function (cm) {\n return cm.moveH(1, \"char\");\n },\n goColumnLeft: function (cm) {\n return cm.moveH(-1, \"column\");\n },\n goColumnRight: function (cm) {\n return cm.moveH(1, \"column\");\n },\n goWordLeft: function (cm) {\n return cm.moveH(-1, \"word\");\n },\n goGroupRight: function (cm) {\n return cm.moveH(1, \"group\");\n },\n goGroupLeft: function (cm) {\n return cm.moveH(-1, \"group\");\n },\n goWordRight: function (cm) {\n return cm.moveH(1, \"word\");\n },\n delCharBefore: function (cm) {\n return cm.deleteH(-1, \"codepoint\");\n },\n delCharAfter: function (cm) {\n return cm.deleteH(1, \"char\");\n },\n delWordBefore: function (cm) {\n return cm.deleteH(-1, \"word\");\n },\n delWordAfter: function (cm) {\n return cm.deleteH(1, \"word\");\n },\n delGroupBefore: function (cm) {\n return cm.deleteH(-1, \"group\");\n },\n delGroupAfter: function (cm) {\n return cm.deleteH(1, \"group\");\n },\n indentAuto: function (cm) {\n return cm.indentSelection(\"smart\");\n },\n indentMore: function (cm) {\n return cm.indentSelection(\"add\");\n },\n indentLess: function (cm) {\n return cm.indentSelection(\"subtract\");\n },\n insertTab: function (cm) {\n return cm.replaceSelection(\"\\t\");\n },\n insertSoftTab: function (cm) {\n var spaces = [],\n ranges = cm.listSelections(),\n 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()) {\n cm.indentSelection(\"add\");\n } else {\n cm.execCommand(\"insertTab\");\n }\n },\n // Swap the two chars left and right of each selection's head.\n // Move cursor behind the two swapped characters afterwards.\n //\n // Doesn't consider line feeds a character.\n // Doesn't scan more than one line above to find a character.\n // Doesn't do anything on an empty line.\n // Doesn't do anything with non-empty selections.\n transposeChars: function (cm) {\n return runInOp(cm, function () {\n var ranges = cm.listSelections(),\n newSel = [];\n for (var i = 0; i < ranges.length; i++) {\n if (!ranges[i].empty()) {\n continue;\n }\n var cur = ranges[i].head,\n line = getLine(cm.doc, cur.line).text;\n if (line) {\n if (cur.ch == line.length) {\n cur = new Pos(cur.line, cur.ch - 1);\n }\n if (cur.ch > 0) {\n cur = new Pos(cur.line, cur.ch + 1);\n cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2), Pos(cur.line, cur.ch - 2), cur, \"+transpose\");\n } else if (cur.line > cm.doc.first) {\n var prev = getLine(cm.doc, cur.line - 1).text;\n if (prev) {\n cur = new Pos(cur.line, 1);\n cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() + prev.charAt(prev.length - 1), Pos(cur.line - 1, prev.length - 1), cur, \"+transpose\");\n }\n }\n }\n newSel.push(new Range(cur, cur));\n }\n cm.setSelections(newSel);\n });\n },\n newlineAndIndent: function (cm) {\n 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 }\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 }\n ensureCursorVisible(cm);\n });\n },\n openLine: function (cm) {\n return cm.replaceSelection(\"\\n\", \"start\");\n },\n toggleOverwrite: function (cm) {\n return cm.toggleOverwrite();\n }\n };\n function lineStart(cm, lineN) {\n var line = getLine(cm.doc, lineN);\n var visual = visualLine(line);\n if (visual != line) {\n lineN = lineNo(visual);\n }\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) {\n lineN = lineNo(visual);\n }\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) {\n return false;\n }\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,\n done = false;\n try {\n if (cm.isReadOnly()) {\n cm.state.suppressEdits = true;\n }\n if (dropShift) {\n cm.display.shift = false;\n }\n done = bound(cm) != Pass;\n } finally {\n cm.display.shift = prevShift;\n cm.state.suppressEdits = false;\n }\n return done;\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) {\n return result;\n }\n }\n return cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm) || 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 function dispatchKey(cm, name, e, handle) {\n var seq = cm.state.keySeq;\n if (seq) {\n if (isModifierKey(name)) {\n return \"handled\";\n }\n if (/\\'$/.test(name)) {\n cm.state.keySeq = null;\n } else {\n stopSeq.set(50, function () {\n if (cm.state.keySeq == seq) {\n cm.state.keySeq = null;\n cm.display.input.reset();\n }\n });\n }\n if (dispatchKeyInner(cm, seq + \" \" + name, e, handle)) {\n return true;\n }\n }\n return dispatchKeyInner(cm, name, e, handle);\n }\n function dispatchKeyInner(cm, name, e, handle) {\n var result = lookupKeyForEditor(cm, name, handle);\n if (result == \"multi\") {\n cm.state.keySeq = name;\n }\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 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) {\n 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) {\n return doHandleBinding(cm, b, true);\n }) || dispatchKey(cm, name, e, function (b) {\n if (typeof b == \"string\" ? /^go[A-Z]/.test(b) : b.motion) {\n return doHandleBinding(cm, b);\n }\n });\n } else {\n return dispatchKey(cm, name, e, function (b) {\n return doHandleBinding(cm, b);\n });\n }\n }\n\n // Handle a key from the keypress event\n function handleCharBinding(cm, e, ch) {\n return dispatchKey(cm, \"'\" + ch + \"'\", e, function (b) {\n 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()) {\n return;\n }\n cm.curOp.focus = activeElt(doc(cm));\n if (signalDOMEvent(cm, e)) {\n return;\n }\n // IE does strange things with escape.\n if (ie && ie_version < 11 && e.keyCode == 27) {\n e.returnValue = false;\n }\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 }\n if (gecko && !mac && !handled && code == 46 && e.shiftKey && !e.ctrlKey && document.execCommand) {\n document.execCommand(\"cut\");\n }\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 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 function onKeyUp(e) {\n if (e.keyCode == 16) {\n this.doc.sel.shift = false;\n }\n signalDOMEvent(this, e);\n }\n function onKeyPress(e) {\n var cm = this;\n if (e.target && e.target != cm.display.input.getField()) {\n return;\n }\n if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) {\n return;\n }\n var keyCode = e.keyCode,\n charCode = e.charCode;\n if (presto && keyCode == lastStoppedKey) {\n lastStoppedKey = null;\n e_preventDefault(e);\n return;\n }\n if (presto && (!e.which || e.which < 10) && handleKeyBinding(cm, e)) {\n return;\n }\n var ch = String.fromCharCode(charCode == null ? keyCode : charCode);\n // Some browsers fire keypress events for backspace\n if (ch == \"\\x08\") {\n return;\n }\n if (handleCharBinding(cm, e, ch)) {\n return;\n }\n cm.display.input.onKeyPress(e);\n }\n var DOUBLECLICK_DELAY = 400;\n var PastClick = function (time, pos, button) {\n this.time = time;\n this.pos = pos;\n this.button = button;\n };\n PastClick.prototype.compare = function (time, pos, button) {\n return this.time + DOUBLECLICK_DELAY > time && cmp(pos, this.pos) == 0 && button == this.button;\n };\n 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,\n display = cm.display;\n if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) {\n return;\n }\n display.input.ensurePolled();\n display.shift = e.shiftKey;\n if (eventInWidget(display, e)) {\n if (!webkit) {\n // Briefly turn off draggability, to allow widgets to do\n // normal dragging things.\n display.scroller.draggable = false;\n setTimeout(function () {\n return display.scroller.draggable = true;\n }, 100);\n }\n return;\n }\n if (clickInGutter(cm, e)) {\n return;\n }\n var pos = posFromMouse(cm, e),\n button = e_button(e),\n repeat = pos ? clickRepeat(pos, button) : \"single\";\n win(cm).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)) {\n return;\n }\n if (button == 1) {\n if (pos) {\n leftButtonDown(cm, pos, repeat, e);\n } else if (e_target(e) == display.scroller) {\n e_preventDefault(e);\n }\n } else if (button == 2) {\n if (pos) {\n extendSelection(cm.doc, pos);\n }\n setTimeout(function () {\n return display.input.focus();\n }, 20);\n } else if (button == 3) {\n if (captureRightClick) {\n cm.display.input.onContextMenu(e);\n } else {\n delayBlurEvent(cm);\n }\n }\n }\n function handleMappedButton(cm, button, pos, repeat, event) {\n var name = \"Click\";\n if (repeat == \"double\") {\n name = \"Double\" + name;\n } else if (repeat == \"triple\") {\n name = \"Triple\" + name;\n }\n name = (button == 1 ? \"Left\" : button == 2 ? \"Middle\" : \"Right\") + name;\n return dispatchKey(cm, addModifierNames(name, event), event, function (bound) {\n if (typeof bound == \"string\") {\n bound = commands[bound];\n }\n if (!bound) {\n return false;\n }\n var done = false;\n try {\n if (cm.isReadOnly()) {\n cm.state.suppressEdits = true;\n }\n done = bound(cm, pos) != Pass;\n } finally {\n cm.state.suppressEdits = false;\n }\n return done;\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) {\n value.extend = cm.doc.extend || event.shiftKey;\n }\n if (value.addNew == null) {\n value.addNew = mac ? event.metaKey : event.ctrlKey;\n }\n if (value.moveOnDrag == null) {\n value.moveOnDrag = !(mac ? event.altKey : event.ctrlKey);\n }\n return value;\n }\n function leftButtonDown(cm, pos, repeat, event) {\n if (ie) {\n setTimeout(bind(ensureFocus, cm), 0);\n } else {\n cm.curOp.focus = activeElt(doc(cm));\n }\n var behavior = configureMouse(cm, repeat, event);\n var sel = cm.doc.sel,\n contained;\n if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() && repeat == \"single\" && (contained = sel.contains(pos)) > -1 && (cmp((contained = sel.ranges[contained]).from(), pos) < 0 || pos.xRel > 0) && (cmp(contained.to(), pos) > 0 || pos.xRel < 0)) {\n leftButtonStartDrag(cm, event, pos, behavior);\n } else {\n leftButtonSelect(cm, event, pos, behavior);\n }\n }\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,\n moved = false;\n var dragEnd = operation(cm, function (e) {\n if (webkit) {\n display.scroller.draggable = false;\n }\n cm.state.draggingText = false;\n if (cm.state.delayingBlurEvent) {\n if (cm.hasFocus()) {\n cm.state.delayingBlurEvent = false;\n } else {\n delayBlurEvent(cm);\n }\n }\n off(display.wrapper.ownerDocument, \"mouseup\", dragEnd);\n off(display.wrapper.ownerDocument, \"mousemove\", mouseMove);\n off(display.scroller, \"dragstart\", dragStart);\n off(display.scroller, \"drop\", dragEnd);\n if (!moved) {\n e_preventDefault(e);\n if (!behavior.addNew) {\n extendSelection(cm.doc, pos, null, null, behavior.extend);\n }\n // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081)\n if (webkit && !safari || ie && ie_version == 9) {\n setTimeout(function () {\n display.wrapper.ownerDocument.body.focus({\n preventScroll: true\n });\n display.input.focus();\n }, 20);\n } else {\n display.input.focus();\n }\n }\n });\n 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 () {\n return moved = true;\n };\n // Let the drag handler handle this.\n if (webkit) {\n display.scroller.draggable = true;\n }\n cm.state.draggingText = dragEnd;\n dragEnd.copy = !behavior.moveOnDrag;\n on(display.wrapper.ownerDocument, \"mouseup\", dragEnd);\n on(display.wrapper.ownerDocument, \"mousemove\", mouseMove);\n on(display.scroller, \"dragstart\", dragStart);\n on(display.scroller, \"drop\", dragEnd);\n cm.state.delayingBlurEvent = true;\n setTimeout(function () {\n return display.input.focus();\n }, 20);\n // IE's approach to draggable\n if (display.scroller.dragDrop) {\n display.scroller.dragDrop();\n }\n }\n function rangeForUnit(cm, pos, unit) {\n if (unit == \"char\") {\n return new Range(pos, pos);\n }\n if (unit == \"word\") {\n return cm.findWordAt(pos);\n }\n if (unit == \"line\") {\n return new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0)));\n }\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) {\n delayBlurEvent(cm);\n }\n var display = cm.display,\n doc$1 = cm.doc;\n e_preventDefault(event);\n var ourRange,\n ourIndex,\n startSel = doc$1.sel,\n ranges = startSel.ranges;\n if (behavior.addNew && !behavior.extend) {\n ourIndex = doc$1.sel.contains(start);\n if (ourIndex > -1) {\n ourRange = ranges[ourIndex];\n } else {\n ourRange = new Range(start, start);\n }\n } else {\n ourRange = doc$1.sel.primary();\n ourIndex = doc$1.sel.primIndex;\n }\n if (behavior.unit == \"rectangle\") {\n if (!behavior.addNew) {\n ourRange = new Range(start, start);\n }\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$1, new Selection([ourRange], 0), sel_mouse);\n startSel = doc$1.sel;\n } else if (ourIndex == -1) {\n ourIndex = ranges.length;\n setSelection(doc$1, normalizeSelection(cm, ranges.concat([ourRange]), ourIndex), {\n scroll: false,\n origin: \"*mouse\"\n });\n } else if (ranges.length > 1 && ranges[ourIndex].empty() && behavior.unit == \"char\" && !behavior.extend) {\n setSelection(doc$1, normalizeSelection(cm, ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0), {\n scroll: false,\n origin: \"*mouse\"\n });\n startSel = doc$1.sel;\n } else {\n replaceOneSelection(doc$1, ourIndex, ourRange, sel_mouse);\n }\n var lastPos = start;\n function extendTo(pos) {\n if (cmp(lastPos, pos) == 0) {\n return;\n }\n lastPos = pos;\n if (behavior.unit == \"rectangle\") {\n var ranges = [],\n tabSize = cm.options.tabSize;\n var startCol = countColumn(getLine(doc$1, start.line).text, start.ch, tabSize);\n var posCol = countColumn(getLine(doc$1, pos.line).text, pos.ch, tabSize);\n var left = Math.min(startCol, posCol),\n 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)); line <= end; line++) {\n var text = getLine(doc$1, line).text,\n 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 }\n if (!ranges.length) {\n ranges.push(new Range(start, start));\n }\n setSelection(doc$1, normalizeSelection(cm, startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex), {\n origin: \"*mouse\",\n scroll: false\n });\n cm.scrollIntoView(pos);\n } else {\n var oldRange = ourRange;\n var range = rangeForUnit(cm, pos, behavior.unit);\n var anchor = oldRange.anchor,\n head;\n 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$1, anchor), head));\n setSelection(doc$1, normalizeSelection(cm, ranges$1, ourIndex), sel_mouse);\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 function extend(e) {\n var curCount = ++counter;\n var cur = posFromMouse(cm, e, true, behavior.unit == \"rectangle\");\n if (!cur) {\n return;\n }\n if (cmp(cur, lastPos) != 0) {\n cm.curOp.focus = activeElt(doc(cm));\n extendTo(cur);\n var visible = visibleLines(display, doc$1);\n if (cur.line >= visible.to || cur.line < visible.from) {\n setTimeout(operation(cm, function () {\n if (counter == curCount) {\n extend(e);\n }\n }), 150);\n }\n } else {\n var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0;\n if (outside) {\n setTimeout(operation(cm, function () {\n if (counter != curCount) {\n return;\n }\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$1.history.lastSelOrigin = null;\n }\n var move = operation(cm, function (e) {\n if (e.buttons === 0 || !e_button(e)) {\n done(e);\n } else {\n extend(e);\n }\n });\n var up = operation(cm, done);\n cm.state.selectingText = up;\n on(display.wrapper.ownerDocument, \"mousemove\", move);\n on(display.wrapper.ownerDocument, \"mouseup\", up);\n }\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) {\n return range;\n }\n var order = getOrder(anchorLine);\n if (!order) {\n return range;\n }\n var index = getBidiPartAt(order, anchor.ch, anchor.sticky),\n part = order[index];\n if (part.from != anchor.ch && part.to != anchor.ch) {\n return range;\n }\n var boundary = index + (part.from == anchor.ch == (part.level != 1) ? 0 : 1);\n if (boundary == 0 || boundary == order.length) {\n return range;\n }\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,\n 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 // 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 {\n mX = e.clientX;\n mY = e.clientY;\n } catch (e$1) {\n return false;\n }\n }\n if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) {\n return false;\n }\n if (prevent) {\n e_preventDefault(e);\n }\n var display = cm.display;\n var lineBox = display.lineDiv.getBoundingClientRect();\n if (mY > lineBox.bottom || !hasHandler(cm, type)) {\n return e_defaultPrevented(e);\n }\n mY -= lineBox.top - display.viewOffset;\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 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)) {\n return;\n }\n if (signalDOMEvent(cm, e, \"contextmenu\")) {\n return;\n }\n if (!captureRightClick) {\n cm.display.input.onContextMenu(e);\n }\n }\n function contextMenuInGutter(cm, e) {\n if (!hasHandler(cm, \"gutterContextMenu\")) {\n return false;\n }\n return gutterEvent(cm, e, \"gutterContextMenu\", false);\n }\n function themeChanged(cm) {\n cm.display.wrapper.className = cm.display.wrapper.className.replace(/\\s*cm-s-\\S+/g, \"\") + cm.options.theme.replace(/(^|\\s)\\s*/g, \" cm-s-\");\n clearCaches(cm);\n }\n var Init = {\n toString: function () {\n return \"CodeMirror.Init\";\n }\n };\n var defaults = {};\n var optionHandlers = {};\n function defineOptions(CodeMirror) {\n var optionHandlers = CodeMirror.optionHandlers;\n function option(name, deflt, handle, notOnInit) {\n CodeMirror.defaults[name] = deflt;\n if (handle) {\n optionHandlers[name] = notOnInit ? function (cm, val, old) {\n if (old != Init) {\n handle(cm, val, old);\n }\n } : handle;\n }\n }\n 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) {\n return cm.setValue(val);\n }, true);\n option(\"mode\", null, function (cm, val) {\n cm.doc.modeOption = val;\n loadMode(cm);\n }, true);\n option(\"indentUnit\", 2, loadMode, true);\n option(\"indentWithTabs\", false);\n option(\"smartIndent\", true);\n option(\"tabSize\", 4, function (cm) {\n resetModeState(cm);\n clearCaches(cm);\n regChange(cm);\n }, true);\n option(\"lineSeparator\", null, function (cm, val) {\n cm.doc.lineSep = val;\n if (!val) {\n return;\n }\n var newBreaks = [],\n lineNo = cm.doc.first;\n cm.doc.iter(function (line) {\n for (var pos = 0;;) {\n var found = line.text.indexOf(val, pos);\n if (found == -1) {\n break;\n }\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 });\n option(\"specialChars\", /[\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u061c\\u200b\\u200e\\u200f\\u2028\\u2029\\u202d\\u202e\\u2066\\u2067\\u2069\\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) {\n cm.refresh();\n }\n });\n option(\"specialCharPlaceholder\", defaultSpecialCharPlaceholder, function (cm) {\n return cm.refresh();\n }, true);\n option(\"electricChars\", true);\n option(\"inputStyle\", mobile ? \"contenteditable\" : \"textarea\", function () {\n throw new Error(\"inputStyle can not (yet) be changed in a running editor\"); // FIXME\n }, true);\n option(\"spellcheck\", false, function (cm, val) {\n return cm.getInputField().spellcheck = val;\n }, true);\n option(\"autocorrect\", false, function (cm, val) {\n return cm.getInputField().autocorrect = val;\n }, true);\n option(\"autocapitalize\", false, function (cm, val) {\n return cm.getInputField().autocapitalize = val;\n }, true);\n option(\"rtlMoveVisually\", !windows);\n option(\"wholeLineUpdateBefore\", true);\n option(\"theme\", \"default\", function (cm) {\n themeChanged(cm);\n updateGutters(cm);\n }, true);\n option(\"keyMap\", \"default\", function (cm, val, old) {\n var next = getKeyMap(val);\n var prev = old != Init && getKeyMap(old);\n if (prev && prev.detach) {\n prev.detach(cm, next);\n }\n if (next.attach) {\n next.attach(cm, prev || null);\n }\n });\n option(\"extraKeys\", null);\n option(\"configureMouse\", null);\n option(\"lineWrapping\", false, wrappingChanged, true);\n option(\"gutters\", [], function (cm, val) {\n cm.display.gutterSpecs = getGutters(val, cm.options.lineNumbers);\n updateGutters(cm);\n }, true);\n option(\"fixedGutter\", true, function (cm, val) {\n cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + \"px\" : \"0\";\n cm.refresh();\n }, true);\n option(\"coverGutterNextToScrollbar\", false, function (cm) {\n return updateScrollbars(cm);\n }, true);\n option(\"scrollbarStyle\", \"native\", function (cm) {\n initScrollbars(cm);\n updateScrollbars(cm);\n cm.display.scrollbars.setScrollTop(cm.doc.scrollTop);\n cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft);\n }, true);\n option(\"lineNumbers\", false, function (cm, val) {\n cm.display.gutterSpecs = getGutters(cm.options.gutters, val);\n updateGutters(cm);\n }, true);\n option(\"firstLineNumber\", 1, updateGutters, true);\n option(\"lineNumberFormatter\", function (integer) {\n return integer;\n }, updateGutters, true);\n option(\"showCursorWhenSelecting\", false, updateSelection, true);\n option(\"resetSelectionOnContextMenu\", true);\n option(\"lineWiseCopyCut\", true);\n option(\"pasteLinesPerSelection\", true);\n option(\"selectionsMayTouch\", false);\n option(\"readOnly\", false, function (cm, val) {\n if (val == \"nocursor\") {\n onBlur(cm);\n cm.display.input.blur();\n }\n cm.display.input.readOnlyChanged(val);\n });\n option(\"screenReaderLabel\", null, function (cm, val) {\n val = val === '' ? null : val;\n cm.display.input.screenReaderLabelChanged(val);\n });\n option(\"disableInput\", false, function (cm, val) {\n if (!val) {\n cm.display.input.reset();\n }\n }, true);\n option(\"dragDrop\", true, dragDropChanged);\n option(\"allowDropFileTypes\", null);\n option(\"cursorBlinkRate\", 530);\n option(\"cursorScrollMargin\", 0);\n option(\"cursorHeight\", 1, updateSelection, true);\n option(\"singleCursorHeightPerLine\", true, updateSelection, true);\n option(\"workTime\", 100);\n option(\"workDelay\", 100);\n option(\"flattenSpans\", true, resetModeState, true);\n option(\"addModeClass\", false, resetModeState, true);\n option(\"pollInterval\", 100);\n option(\"undoDepth\", 200, function (cm, val) {\n return cm.doc.history.undoDepth = val;\n });\n option(\"historyEventDelay\", 1250);\n option(\"viewportMargin\", 10, function (cm) {\n return cm.refresh();\n }, true);\n option(\"maxHighlightLength\", 10000, resetModeState, true);\n option(\"moveInputWithCursor\", true, function (cm, val) {\n if (!val) {\n cm.display.input.resetPosition();\n }\n });\n option(\"tabindex\", null, function (cm, val) {\n return cm.display.input.getField().tabIndex = val || \"\";\n });\n option(\"autofocus\", null);\n option(\"direction\", \"ltr\", function (cm, val) {\n return cm.doc.setDirection(val);\n }, true);\n option(\"phrases\", null);\n }\n 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 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 () {\n return updateScrollbars(cm);\n }, 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 if (!(this instanceof CodeMirror)) {\n 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 var doc = options.value;\n if (typeof doc == \"string\") {\n doc = new Doc(doc, options.mode, null, options.lineSeparator, options.direction);\n } else if (options.mode) {\n doc.modeOption = options.mode;\n }\n this.doc = doc;\n var input = new CodeMirror.inputStyles[options.inputStyle](this);\n var display = this.display = new Display(place, doc, input, options);\n display.wrapper.CodeMirror = this;\n themeChanged(this);\n if (options.lineWrapping) {\n this.display.wrapper.className += \" CodeMirror-wrap\";\n }\n initScrollbars(this);\n this.state = {\n keyMaps: [],\n // stores maps added by addKeyMap\n overlays: [],\n // highlighting overlays, as added by addOverlay\n modeGen: 0,\n // bumped when mode/overlay changes, used to invalidate highlighting info\n overwrite: false,\n delayingBlurEvent: false,\n focused: false,\n suppressEdits: false,\n // used to disable editing during key handlers when in readOnly mode\n pasteIncoming: -1,\n cutIncoming: -1,\n // help recognize paste/cut edits in input.poll\n selectingText: false,\n draggingText: false,\n highlight: new Delayed(),\n // stores highlight worker timeout\n keySeq: null,\n // Unfinished key sequence\n specialChars: null\n };\n if (options.autofocus && !mobile) {\n display.input.focus();\n }\n\n // Override magic textarea content restore that IE sometimes does\n // on our hidden textarea on reload\n if (ie && ie_version < 11) {\n setTimeout(function () {\n return this$1.display.input.reset(true);\n }, 20);\n }\n registerEventHandlers(this);\n ensureGlobalHandlers();\n startOperation(this);\n this.curOp.forceUpdate = true;\n attachDoc(this, doc);\n if (options.autofocus && !mobile || this.hasFocus()) {\n setTimeout(function () {\n if (this$1.hasFocus() && !this$1.state.focused) {\n onFocus(this$1);\n }\n }, 20);\n } else {\n onBlur(this);\n }\n for (var opt in optionHandlers) {\n if (optionHandlers.hasOwnProperty(opt)) {\n optionHandlers[opt](this, options[opt], Init);\n }\n }\n maybeUpdateLineNumberWidth(this);\n if (options.finishInit) {\n options.finishInit(this);\n }\n for (var i = 0; i < initHooks.length; ++i) {\n initHooks[i](this);\n }\n endOperation(this);\n // Suppress optimizelegibility in Webkit, since it breaks text\n // measuring on line wrapping boundaries.\n if (webkit && options.lineWrapping && getComputedStyle(display.lineDiv).textRendering == \"optimizelegibility\") {\n display.lineDiv.style.textRendering = \"auto\";\n }\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)) {\n return;\n }\n var pos = posFromMouse(cm, e);\n if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) {\n return;\n }\n e_preventDefault(e);\n var word = cm.findWordAt(pos);\n extendSelection(cm.doc, word.anchor, word.head);\n }));\n } else {\n on(d.scroller, \"dblclick\", function (e) {\n return signalDOMEvent(cm, e) || e_preventDefault(e);\n });\n }\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) {\n return onContextMenu(cm, e);\n });\n on(d.input.getField(), \"contextmenu\", function (e) {\n if (!d.scroller.contains(e.target)) {\n onContextMenu(cm, e);\n }\n });\n\n // Used to suppress mouse event handling when a touch happens\n var touchFinished,\n prevTouch = {\n end: 0\n };\n function finishTouch() {\n if (d.activeTouch) {\n touchFinished = setTimeout(function () {\n return d.activeTouch = null;\n }, 1000);\n prevTouch = d.activeTouch;\n prevTouch.end = +new Date();\n }\n }\n function isMouseLikeTouchEvent(e) {\n if (e.touches.length != 1) {\n return false;\n }\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) {\n return true;\n }\n var dx = other.left - touch.left,\n 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 = {\n start: now,\n moved: false,\n prev: now - prevTouch.end <= 300 ? prevTouch : null\n };\n if (e.touches.length == 1) {\n d.activeTouch.left = e.touches[0].pageX;\n d.activeTouch.top = e.touches[0].pageY;\n }\n }\n });\n on(d.scroller, \"touchmove\", function () {\n if (d.activeTouch) {\n d.activeTouch.moved = true;\n }\n });\n on(d.scroller, \"touchend\", function (e) {\n var touch = d.activeTouch;\n if (touch && !eventInWidget(d, e) && touch.left != null && !touch.moved && new Date() - touch.start < 300) {\n var pos = cm.coordsChar(d.activeTouch, \"page\"),\n range;\n if (!touch.prev || farAway(touch, touch.prev))\n // Single tap\n {\n range = new Range(pos, pos);\n } else if (!touch.prev.prev || farAway(touch, touch.prev.prev))\n // Double tap\n {\n range = cm.findWordAt(pos);\n } else\n // Triple tap\n {\n range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0)));\n }\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) {\n return onScrollWheel(cm, e);\n });\n on(d.scroller, \"DOMMouseScroll\", function (e) {\n return onScrollWheel(cm, e);\n });\n\n // Prevent wrapper from ever scrolling\n on(d.wrapper, \"scroll\", function () {\n return d.wrapper.scrollTop = d.wrapper.scrollLeft = 0;\n });\n d.dragFunctions = {\n enter: function (e) {\n if (!signalDOMEvent(cm, e)) {\n e_stop(e);\n }\n },\n over: function (e) {\n if (!signalDOMEvent(cm, e)) {\n onDragOver(cm, e);\n e_stop(e);\n }\n },\n start: function (e) {\n return onDragStart(cm, e);\n },\n drop: operation(cm, onDrop),\n leave: function (e) {\n if (!signalDOMEvent(cm, e)) {\n clearDragCursor(cm);\n }\n }\n };\n var inp = d.input.getField();\n on(inp, \"keyup\", function (e) {\n return onKeyUp.call(cm, e);\n });\n on(inp, \"keydown\", operation(cm, onKeyDown));\n on(inp, \"keypress\", operation(cm, onKeyPress));\n on(inp, \"focus\", function (e) {\n return onFocus(cm, e);\n });\n on(inp, \"blur\", function (e) {\n return onBlur(cm, e);\n });\n }\n var initHooks = [];\n CodeMirror.defineInitHook = function (f) {\n return initHooks.push(f);\n };\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,\n state;\n if (how == null) {\n how = \"add\";\n }\n if (how == \"smart\") {\n // Fall back to \"prev\" when the mode doesn't have an indentation\n // method.\n if (!doc.mode.indent) {\n how = \"prev\";\n } else {\n state = getContextBefore(cm, n).state;\n }\n }\n var tabSize = cm.options.tabSize;\n var line = getLine(doc, n),\n curSpace = countColumn(line.text, null, tabSize);\n if (line.stateAfter) {\n line.stateAfter = null;\n }\n var curSpaceString = line.text.match(/^\\s*/)[0],\n 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) {\n return;\n }\n how = \"prev\";\n }\n }\n if (how == \"prev\") {\n if (n > doc.first) {\n indentation = countColumn(getLine(doc, n - 1).text, null, tabSize);\n } else {\n indentation = 0;\n }\n } else if (how == \"add\") {\n indentation = curSpace + cm.options.indentUnit;\n } else if (how == \"subtract\") {\n indentation = curSpace - cm.options.indentUnit;\n } else if (typeof how == \"number\") {\n indentation = curSpace + how;\n }\n indentation = Math.max(0, indentation);\n var indentString = \"\",\n pos = 0;\n if (cm.options.indentWithTabs) {\n for (var i = Math.floor(indentation / tabSize); i; --i) {\n pos += tabSize;\n indentString += \"\\t\";\n }\n }\n if (pos < indentation) {\n 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 function setLastCopied(newLastCopied) {\n lastCopied = newLastCopied;\n }\n function applyTextInput(cm, inserted, deleted, sel, origin) {\n var doc = cm.doc;\n cm.display.shift = false;\n if (!sel) {\n sel = doc.sel;\n }\n var recent = +new Date() - 200;\n var paste = origin == \"paste\" || cm.state.pasteIncoming > recent;\n var textLines = splitLinesAuto(inserted),\n 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 }\n } else if (textLines.length == sel.ranges.length && cm.options.pasteLinesPerSelection) {\n multiPaste = map(textLines, function (l) {\n 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(),\n to = range.to();\n if (range.empty()) {\n if (deleted && deleted > 0)\n // Handle deletion\n {\n from = Pos(from.line, from.ch - deleted);\n } else if (cm.state.overwrite && !paste)\n // Handle overwrite\n {\n to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length));\n } else if (paste && lastCopied && lastCopied.lineWise && lastCopied.text.join(\"\\n\") == textLines.join(\"\\n\")) {\n from = to = Pos(from.line, 0);\n }\n }\n var changeEvent = {\n from: from,\n to: to,\n text: multiPaste ? multiPaste[i$1 % multiPaste.length] : textLines,\n origin: origin || (paste ? \"paste\" : cm.state.cutIncoming > recent ? \"cut\" : \"+input\")\n };\n makeChange(cm.doc, changeEvent);\n signalLater(cm, \"inputRead\", cm, changeEvent);\n }\n if (inserted && !paste) {\n triggerElectric(cm, inserted);\n }\n ensureCursorVisible(cm);\n if (cm.curOp.updateInput < 2) {\n cm.curOp.updateInput = updateInput;\n }\n cm.curOp.typing = true;\n cm.state.pasteIncoming = cm.state.cutIncoming = -1;\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 && cm.hasFocus()) {\n runInOp(cm, function () {\n return applyTextInput(cm, pasted, 0, null, \"paste\");\n });\n }\n return true;\n }\n }\n function triggerElectric(cm, inserted) {\n // When an 'electric' character is inserted, immediately trigger a reindent\n if (!cm.options.electricChars || !cm.options.smartIndent) {\n return;\n }\n var sel = cm.doc.sel;\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) {\n continue;\n }\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 }\n } else if (mode.electricInput) {\n if (mode.electricInput.test(getLine(cm.doc, range.head.line).text.slice(0, range.head.ch))) {\n indented = indentLine(cm, range.head.line, \"smart\");\n }\n }\n if (indented) {\n signalLater(cm, \"electricInput\", cm, range.head.line);\n }\n }\n }\n function copyableRanges(cm) {\n var text = [],\n 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 = {\n anchor: Pos(line, 0),\n head: Pos(line + 1, 0)\n };\n ranges.push(lineRange);\n text.push(cm.getRange(lineRange.anchor, lineRange.head));\n }\n return {\n text: text,\n ranges: ranges\n };\n }\n function disableBrowserMagic(field, spellcheck, autocorrect, autocapitalize) {\n field.setAttribute(\"autocorrect\", autocorrect ? \"on\" : \"off\");\n field.setAttribute(\"autocapitalize\", autocapitalize ? \"on\" : \"off\");\n field.setAttribute(\"spellcheck\", !!spellcheck);\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) {\n te.style.width = \"1000px\";\n } else {\n te.setAttribute(\"wrap\", \"off\");\n }\n // If border: 0; -- iOS fails to open keyboard (issue #1287)\n if (ios) {\n te.style.border = \"1px solid black\";\n }\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 var helpers = CodeMirror.helpers = {};\n CodeMirror.prototype = {\n constructor: CodeMirror,\n focus: function () {\n win(this).focus();\n this.display.input.focus();\n },\n setOption: function (option, value) {\n var options = this.options,\n old = options[option];\n if (options[option] == value && option != \"mode\") {\n return;\n }\n options[option] = value;\n if (optionHandlers.hasOwnProperty(option)) {\n operation(this, optionHandlers[option])(this, value, old);\n }\n signal(this, \"optionChange\", this, option);\n },\n getOption: function (option) {\n return this.options[option];\n },\n getDoc: function () {\n 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) {\n throw new Error(\"Overlays may not be stateful.\");\n }\n insertSorted(this.state.overlays, {\n mode: mode,\n modeSpec: spec,\n opaque: options && options.opaque,\n priority: options && options.priority || 0\n }, function (overlay) {\n return overlay.priority;\n });\n this.state.modeGen++;\n regChange(this);\n }),\n removeOverlay: methodOp(function (spec) {\n var overlays = this.state.overlays;\n 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 indentLine: methodOp(function (n, dir, aggressive) {\n if (typeof dir != \"string\" && typeof dir != \"number\") {\n if (dir == null) {\n dir = this.options.smartIndent ? \"smart\" : \"prev\";\n } else {\n dir = dir ? \"add\" : \"subtract\";\n }\n }\n if (isLine(this.doc, n)) {\n indentLine(this, n, dir, aggressive);\n }\n }),\n indentSelection: methodOp(function (how) {\n var ranges = this.doc.sel.ranges,\n end = -1;\n for (var i = 0; i < ranges.length; i++) {\n var range = ranges[i];\n if (!range.empty()) {\n var from = range.from(),\n to = range.to();\n var start = Math.max(end, from.line);\n end = Math.min(this.lastLine(), to.line - (to.ch ? 0 : 1)) + 1;\n for (var j = start; j < end; ++j) {\n indentLine(this, j, how);\n }\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 }\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) {\n ensureCursorVisible(this);\n }\n }\n }\n }),\n // Fetch the parser token for a given character. Useful for hacks\n // that want to inspect the mode state (say, for completion).\n getTokenAt: function (pos, precise) {\n return takeToken(this, pos, precise);\n },\n getLineTokens: function (line, precise) {\n return takeToken(this, Pos(line), precise, true);\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,\n after = (styles.length - 1) / 2,\n ch = pos.ch;\n var type;\n if (ch == 0) {\n type = styles[2];\n } else {\n for (;;) {\n var mid = before + after >> 1;\n if ((mid ? styles[mid * 2 - 1] : 0) >= ch) {\n after = mid;\n } else if (styles[mid * 2 + 1] < ch) {\n before = mid + 1;\n } else {\n type = styles[mid * 2 + 2];\n break;\n }\n }\n }\n var cut = type ? type.indexOf(\"overlay \") : -1;\n return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1);\n },\n getModeAt: function (pos) {\n var mode = this.doc.mode;\n if (!mode.innerMode) {\n return mode;\n }\n return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode;\n },\n getHelper: function (pos, type) {\n return this.getHelpers(pos, type)[0];\n },\n getHelpers: function (pos, type) {\n var found = [];\n if (!helpers.hasOwnProperty(type)) {\n return found;\n }\n var help = helpers[type],\n mode = this.getModeAt(pos);\n if (typeof mode[type] == \"string\") {\n if (help[mode[type]]) {\n found.push(help[mode[type]]);\n }\n } else if (mode[type]) {\n for (var i = 0; i < mode[type].length; i++) {\n var val = help[mode[type][i]];\n if (val) {\n found.push(val);\n }\n }\n } else if (mode.helperType && help[mode.helperType]) {\n found.push(help[mode.helperType]);\n } else if (help[mode.name]) {\n found.push(help[mode.name]);\n }\n 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 }\n return found;\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 cursorCoords: function (start, mode) {\n var pos,\n range = this.doc.sel.primary();\n if (start == null) {\n pos = range.head;\n } else if (typeof start == \"object\") {\n pos = clipPos(this.doc, start);\n } else {\n pos = start ? range.from() : range.to();\n }\n return cursorCoords(this, pos, mode || \"page\");\n },\n charCoords: function (pos, mode) {\n return charCoords(this, clipPos(this.doc, pos), mode || \"page\");\n },\n coordsChar: function (coords, mode) {\n coords = fromCoordSystem(this, coords, mode || \"page\");\n return coordsChar(this, coords.left, coords.top);\n },\n lineAtHeight: function (height, mode) {\n height = fromCoordSystem(this, {\n top: height,\n left: 0\n }, mode || \"page\").top;\n return lineAtHeight(this.doc, height + this.display.viewOffset);\n },\n heightAtLine: function (line, mode, includeWidgets) {\n var end = false,\n lineObj;\n if (typeof line == \"number\") {\n var last = this.doc.first + this.doc.size - 1;\n if (line < this.doc.first) {\n line = this.doc.first;\n } else if (line > last) {\n line = last;\n end = true;\n }\n lineObj = getLine(this.doc, line);\n } else {\n lineObj = line;\n }\n return intoCoordSystem(this, lineObj, {\n top: 0,\n left: 0\n }, mode || \"page\", includeWidgets || end).top + (end ? this.doc.height - heightAtLine(lineObj) : 0);\n },\n defaultTextHeight: function () {\n return textHeight(this.display);\n },\n defaultCharWidth: function () {\n return charWidth(this.display);\n },\n getViewport: function () {\n return {\n from: this.display.viewFrom,\n to: this.display.viewTo\n };\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,\n left = pos.left;\n node.style.position = \"absolute\";\n node.setAttribute(\"cm-ignore-events\", \"true\");\n this.display.input.setUneditable(node);\n display.sizer.appendChild(node);\n 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 }\n if (left + node.offsetWidth > hspace) {\n left = hspace - node.offsetWidth;\n }\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\") {\n left = 0;\n } else if (horiz == \"middle\") {\n left = (display.sizer.clientWidth - node.offsetWidth) / 2;\n }\n node.style.left = left + \"px\";\n }\n if (scroll) {\n scrollIntoView(this, {\n left: left,\n top: top,\n right: left + node.offsetWidth,\n bottom: top + node.offsetHeight\n });\n }\n },\n triggerOnKeyDown: methodOp(onKeyDown),\n triggerOnKeyPress: methodOp(onKeyPress),\n triggerOnKeyUp: onKeyUp,\n triggerOnMouseDown: methodOp(onMouseDown),\n execCommand: function (cmd) {\n if (commands.hasOwnProperty(cmd)) {\n return commands[cmd].call(null, this);\n }\n },\n triggerElectric: methodOp(function (text) {\n triggerElectric(this, text);\n }),\n findPosH: function (from, amount, unit, visually) {\n var dir = 1;\n if (amount < 0) {\n dir = -1;\n amount = -amount;\n }\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) {\n break;\n }\n }\n return cur;\n },\n moveH: methodOp(function (dir, unit) {\n var this$1 = this;\n this.extendSelectionsBy(function (range) {\n if (this$1.display.shift || this$1.doc.extend || range.empty()) {\n return findPosH(this$1.doc, range.head, dir, unit, this$1.options.rtlMoveVisually);\n } else {\n return dir < 0 ? range.from() : range.to();\n }\n }, sel_move);\n }),\n deleteH: methodOp(function (dir, unit) {\n var sel = this.doc.sel,\n doc = this.doc;\n 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 ? {\n from: other,\n to: range.head\n } : {\n from: range.head,\n to: other\n };\n });\n }\n }),\n findPosV: function (from, amount, unit, goalColumn) {\n var dir = 1,\n x = goalColumn;\n if (amount < 0) {\n dir = -1;\n amount = -amount;\n }\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) {\n x = coords.left;\n } else {\n coords.left = x;\n }\n cur = findPosV(this, coords, dir, unit);\n if (cur.hitSide) {\n break;\n }\n }\n return cur;\n },\n moveV: methodOp(function (dir, unit) {\n var this$1 = this;\n var doc = this.doc,\n goals = [];\n var collapse = !this.display.shift && !doc.extend && doc.sel.somethingSelected();\n doc.extendSelectionsBy(function (range) {\n if (collapse) {\n return dir < 0 ? range.from() : range.to();\n }\n var headPos = cursorCoords(this$1, range.head, \"div\");\n if (range.goalColumn != null) {\n headPos.left = range.goalColumn;\n }\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 }\n return pos;\n }, sel_move);\n if (goals.length) {\n for (var i = 0; i < doc.sel.ranges.length; i++) {\n doc.sel.ranges[i].goalColumn = goals[i];\n }\n }\n }),\n // Find the word at the given position (as returned by coordsChar).\n findWordAt: function (pos) {\n var doc = this.doc,\n line = getLine(doc, pos.line).text;\n var start = pos.ch,\n end = pos.ch;\n if (line) {\n var helper = this.getHelper(pos, \"wordChars\");\n if ((pos.sticky == \"before\" || end == line.length) && start) {\n --start;\n } else {\n ++end;\n }\n var startChar = line.charAt(start);\n var check = isWordChar(startChar, helper) ? function (ch) {\n return isWordChar(ch, helper);\n } : /\\s/.test(startChar) ? function (ch) {\n return /\\s/.test(ch);\n } : function (ch) {\n return !/\\s/.test(ch) && !isWordChar(ch);\n };\n while (start > 0 && check(line.charAt(start - 1))) {\n --start;\n }\n while (end < line.length && check(line.charAt(end))) {\n ++end;\n }\n }\n return new Range(Pos(pos.line, start), Pos(pos.line, end));\n },\n toggleOverwrite: function (value) {\n if (value != null && value == this.state.overwrite) {\n return;\n }\n if (this.state.overwrite = !this.state.overwrite) {\n addClass(this.display.cursorDiv, \"CodeMirror-overwrite\");\n } else {\n rmClass(this.display.cursorDiv, \"CodeMirror-overwrite\");\n }\n signal(this, \"overwriteToggle\", this, this.state.overwrite);\n },\n hasFocus: function () {\n return this.display.input.getField() == activeElt(doc(this));\n },\n isReadOnly: function () {\n return !!(this.options.readOnly || this.doc.cantEdit);\n },\n scrollTo: methodOp(function (x, y) {\n scrollToCoords(this, x, y);\n }),\n getScrollInfo: function () {\n var scroller = this.display.scroller;\n return {\n left: scroller.scrollLeft,\n top: scroller.scrollTop,\n height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight,\n width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth,\n clientHeight: displayHeight(this),\n clientWidth: displayWidth(this)\n };\n },\n scrollIntoView: methodOp(function (range, margin) {\n if (range == null) {\n range = {\n from: this.doc.sel.primary().head,\n to: null\n };\n if (margin == null) {\n margin = this.options.cursorScrollMargin;\n }\n } else if (typeof range == \"number\") {\n range = {\n from: Pos(range, 0),\n to: null\n };\n } else if (range.from == null) {\n range = {\n from: range,\n to: null\n };\n }\n if (!range.to) {\n range.to = range.from;\n }\n range.margin = margin || 0;\n if (range.from.line != null) {\n scrollToRange(this, range);\n } else {\n scrollToCoordsRange(this, range.from, range.to, range.margin);\n }\n }),\n setSize: methodOp(function (width, height) {\n var this$1 = this;\n var interpret = function (val) {\n return typeof val == \"number\" || /^\\d+$/.test(String(val)) ? val + \"px\" : val;\n };\n if (width != null) {\n this.display.wrapper.style.width = interpret(width);\n }\n if (height != null) {\n this.display.wrapper.style.height = interpret(height);\n }\n if (this.options.lineWrapping) {\n clearLineMeasurementCache(this);\n }\n var lineNo = this.display.viewFrom;\n this.doc.iter(lineNo, this.display.viewTo, function (line) {\n if (line.widgets) {\n for (var i = 0; i < line.widgets.length; i++) {\n if (line.widgets[i].noHScroll) {\n regLineChange(this$1, lineNo, \"widget\");\n break;\n }\n }\n }\n ++lineNo;\n });\n this.curOp.forceUpdate = true;\n signal(this, \"refresh\", this);\n }),\n operation: function (f) {\n return runInOp(this, f);\n },\n startOperation: function () {\n return startOperation(this);\n },\n endOperation: function () {\n return endOperation(this);\n },\n refresh: methodOp(function () {\n var oldHeight = this.display.cachedTextHeight;\n regChange(this);\n this.curOp.forceUpdate = true;\n clearCaches(this);\n scrollToCoords(this, this.doc.scrollLeft, this.doc.scrollTop);\n updateGutterSpace(this.display);\n if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5 || this.options.lineWrapping) {\n estimateLineHeights(this);\n }\n signal(this, \"refresh\", this);\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) {\n this.state.selectingText();\n }\n attachDoc(this, doc);\n clearCaches(this);\n this.display.input.reset();\n scrollToCoords(this, doc.scrollLeft, doc.scrollTop);\n this.curOp.forceScroll = true;\n signalLater(this, \"swapDoc\", this, old);\n return old;\n }),\n phrase: function (phraseText) {\n var phrases = this.options.phrases;\n return phrases && Object.prototype.hasOwnProperty.call(phrases, phraseText) ? phrases[phraseText] : phraseText;\n },\n getInputField: function () {\n return this.display.input.getField();\n },\n getWrapperElement: function () {\n return this.display.wrapper;\n },\n getScrollerElement: function () {\n return this.display.scroller;\n },\n getGutterElement: function () {\n return this.display.gutters;\n }\n };\n eventMixin(CodeMirror);\n CodeMirror.registerHelper = function (type, name, value) {\n if (!helpers.hasOwnProperty(type)) {\n helpers[type] = CodeMirror[type] = {\n _global: []\n };\n }\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({\n pred: predicate,\n val: value\n });\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) {\n return false;\n }\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 }\n } else {\n pos = next;\n }\n return true;\n }\n if (unit == \"char\" || unit == \"codepoint\") {\n moveOnce();\n } else if (unit == \"column\") {\n moveOnce(true);\n } else if (unit == \"word\" || unit == \"group\") {\n var sawType = null,\n group = unit == \"group\";\n var helper = doc.cm && doc.cm.getHelper(pos, \"wordChars\");\n for (var first = true;; first = false) {\n if (dir < 0 && !moveOnce(!first)) {\n break;\n }\n var cur = lineObj.text.charAt(pos.ch) || \"\\n\";\n var type = isWordChar(cur, helper) ? \"w\" : group && cur == \"\\n\" ? \"n\" : !group || /\\s/.test(cur) ? null : \"p\";\n if (group && !first && !type) {\n type = \"s\";\n }\n if (sawType && sawType != type) {\n if (dir < 0) {\n dir = 1;\n moveOnce();\n pos.sticky = \"after\";\n }\n break;\n }\n if (type) {\n sawType = type;\n }\n if (dir > 0 && !moveOnce(!first)) {\n break;\n }\n }\n }\n var result = skipAtomic(doc, pos, oldPos, origDir, true);\n if (equalCursorPos(oldPos, result)) {\n result.hitSide = true;\n }\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,\n x = pos.left,\n y;\n if (unit == \"page\") {\n var pageSize = Math.min(cm.display.wrapper.clientHeight, win(cm).innerHeight || doc(cm).documentElement.clientHeight);\n var moveAmount = Math.max(pageSize - .5 * textHeight(cm.display), 3);\n y = (dir > 0 ? pos.bottom : pos.top) + dir * moveAmount;\n } else if (unit == \"line\") {\n y = dir > 0 ? pos.bottom + 3 : pos.top - 3;\n }\n var target;\n for (;;) {\n target = coordsChar(cm, x, y);\n if (!target.outside) {\n break;\n }\n if (dir < 0 ? y <= 0 : y >= doc.height) {\n target.hitSide = true;\n break;\n }\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 ContentEditableInput.prototype.init = function (display) {\n var this$1 = this;\n var input = this,\n cm = input.cm;\n var div = input.div = display.lineDiv;\n div.contentEditable = true;\n disableBrowserMagic(div, cm.options.spellcheck, cm.options.autocorrect, cm.options.autocapitalize);\n function belongsToInput(e) {\n for (var t = e.target; t; t = t.parentNode) {\n if (t == div) {\n return true;\n }\n if (/\\bCodeMirror-(?:line)?widget\\b/.test(t.className)) {\n break;\n }\n }\n return false;\n }\n on(div, \"paste\", function (e) {\n if (!belongsToInput(e) || signalDOMEvent(cm, e) || handlePaste(e, cm)) {\n return;\n }\n // IE doesn't fire input events, so we schedule a read for the pasted content in this way\n if (ie_version <= 11) {\n setTimeout(operation(cm, function () {\n return this$1.updateFromDOM();\n }), 20);\n }\n });\n on(div, \"compositionstart\", function (e) {\n this$1.composing = {\n data: e.data,\n done: false\n };\n });\n on(div, \"compositionupdate\", function (e) {\n if (!this$1.composing) {\n this$1.composing = {\n data: e.data,\n done: false\n };\n }\n });\n on(div, \"compositionend\", function (e) {\n if (this$1.composing) {\n if (e.data != this$1.composing.data) {\n this$1.readFromDOMSoon();\n }\n this$1.composing.done = true;\n }\n });\n on(div, \"touchstart\", function () {\n return input.forceCompositionEnd();\n });\n on(div, \"input\", function () {\n if (!this$1.composing) {\n this$1.readFromDOMSoon();\n }\n });\n function onCopyCut(e) {\n if (!belongsToInput(e) || signalDOMEvent(cm, e)) {\n return;\n }\n if (cm.somethingSelected()) {\n setLastCopied({\n lineWise: false,\n text: cm.getSelections()\n });\n if (e.type == \"cut\") {\n cm.replaceSelection(\"\", null, \"cut\");\n }\n } else if (!cm.options.lineWiseCopyCut) {\n return;\n } else {\n var ranges = copyableRanges(cm);\n setLastCopied({\n lineWise: true,\n text: ranges.text\n });\n 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(),\n te = kludge.firstChild;\n disableBrowserMagic(te);\n cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild);\n te.value = lastCopied.text.join(\"\\n\");\n var hadFocus = activeElt(div.ownerDocument);\n selectInput(te);\n setTimeout(function () {\n cm.display.lineSpace.removeChild(kludge);\n hadFocus.focus();\n if (hadFocus == div) {\n input.showPrimarySelection();\n }\n }, 50);\n }\n on(div, \"copy\", onCopyCut);\n on(div, \"cut\", onCopyCut);\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 ContentEditableInput.prototype.prepareSelection = function () {\n var result = prepareSelection(this.cm, false);\n result.focus = activeElt(this.div.ownerDocument) == this.div;\n return result;\n };\n ContentEditableInput.prototype.showSelection = function (info, takeFocus) {\n if (!info || !this.cm.display.view.length) {\n return;\n }\n if (info.focus || takeFocus) {\n this.showPrimarySelection();\n }\n this.showMultipleSelections(info);\n };\n ContentEditableInput.prototype.getSelection = function () {\n return this.cm.display.wrapper.ownerDocument.getSelection();\n };\n ContentEditableInput.prototype.showPrimarySelection = function () {\n var sel = this.getSelection(),\n cm = this.cm,\n prim = cm.doc.sel.primary();\n var from = prim.from(),\n to = prim.to();\n if (cm.display.viewTo == cm.display.viewFrom || from.line >= cm.display.viewTo || to.line < cm.display.viewFrom) {\n sel.removeAllRanges();\n return;\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 && cmp(minPos(curAnchor, curFocus), from) == 0 && 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],\n offset: 0\n };\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 = {\n node: map[map.length - 1],\n offset: map[map.length - 2] - map[map.length - 3]\n };\n }\n if (!start || !end) {\n sel.removeAllRanges();\n return;\n }\n var old = sel.rangeCount && sel.getRangeAt(0),\n rng;\n try {\n rng = range(start.node, start.offset, end.offset, end.node);\n } catch (e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible\n 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) {\n sel.addRange(old);\n } else if (gecko) {\n this.startGracePeriod();\n }\n }\n this.rememberSelection();\n };\n ContentEditableInput.prototype.startGracePeriod = function () {\n var this$1 = this;\n clearTimeout(this.gracePeriod);\n this.gracePeriod = setTimeout(function () {\n this$1.gracePeriod = false;\n if (this$1.selectionChanged()) {\n this$1.cm.operation(function () {\n return this$1.cm.curOp.selectionChanged = true;\n });\n }\n }, 20);\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 ContentEditableInput.prototype.rememberSelection = function () {\n var sel = this.getSelection();\n this.lastAnchorNode = sel.anchorNode;\n this.lastAnchorOffset = sel.anchorOffset;\n this.lastFocusNode = sel.focusNode;\n this.lastFocusOffset = sel.focusOffset;\n };\n ContentEditableInput.prototype.selectionInEditor = function () {\n var sel = this.getSelection();\n if (!sel.rangeCount) {\n return false;\n }\n var node = sel.getRangeAt(0).commonAncestorContainer;\n return contains(this.div, node);\n };\n ContentEditableInput.prototype.focus = function () {\n if (this.cm.options.readOnly != \"nocursor\") {\n if (!this.selectionInEditor() || activeElt(this.div.ownerDocument) != this.div) {\n this.showSelection(this.prepareSelection(), true);\n }\n this.div.focus();\n }\n };\n ContentEditableInput.prototype.blur = function () {\n this.div.blur();\n };\n ContentEditableInput.prototype.getField = function () {\n return this.div;\n };\n ContentEditableInput.prototype.supportsTouch = function () {\n return true;\n };\n ContentEditableInput.prototype.receivedFocus = function () {\n var this$1 = this;\n var input = this;\n if (this.selectionInEditor()) {\n setTimeout(function () {\n return this$1.pollSelection();\n }, 20);\n } else {\n runInOp(this.cm, function () {\n return input.cm.curOp.selectionChanged = true;\n });\n }\n function poll() {\n if (input.cm.state.focused) {\n input.pollSelection();\n input.polling.set(input.cm.options.pollInterval, poll);\n }\n }\n this.polling.set(this.cm.options.pollInterval, poll);\n };\n ContentEditableInput.prototype.selectionChanged = function () {\n var sel = this.getSelection();\n return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset || sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset;\n };\n ContentEditableInput.prototype.pollSelection = function () {\n if (this.readDOMTimeout != null || this.gracePeriod || !this.selectionChanged()) {\n return;\n }\n var sel = this.getSelection(),\n 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({\n type: \"keydown\",\n keyCode: 8,\n preventDefault: Math.abs\n });\n this.blur();\n this.focus();\n return;\n }\n if (this.composing) {\n return;\n }\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) {\n runInOp(cm, function () {\n setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll);\n if (anchor.bad || head.bad) {\n cm.curOp.selectionChanged = true;\n }\n });\n }\n };\n ContentEditableInput.prototype.pollContent = function () {\n if (this.readDOMTimeout != null) {\n clearTimeout(this.readDOMTimeout);\n this.readDOMTimeout = null;\n }\n var cm = this.cm,\n display = cm.display,\n sel = cm.doc.sel.primary();\n var from = sel.from(),\n to = sel.to();\n if (from.ch == 0 && from.line > cm.firstLine()) {\n from = Pos(from.line - 1, getLine(cm.doc, from.line - 1).length);\n }\n if (to.ch == getLine(cm.doc, to.line).text.length && to.line < cm.lastLine()) {\n to = Pos(to.line + 1, 0);\n }\n if (from.line < display.viewFrom || to.line > display.viewTo - 1) {\n 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 if (!fromNode) {\n return false;\n }\n var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine));\n var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length));\n while (newText.length > 1 && oldText.length > 1) {\n if (lst(newText) == lst(oldText)) {\n newText.pop();\n oldText.pop();\n toLine--;\n } else if (newText[0] == oldText[0]) {\n newText.shift();\n oldText.shift();\n fromLine++;\n } else {\n break;\n }\n }\n var cutFront = 0,\n cutEnd = 0;\n var newTop = newText[0],\n oldTop = oldText[0],\n maxCutFront = Math.min(newTop.length, oldTop.length);\n while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront)) {\n ++cutFront;\n }\n var newBot = lst(newText),\n oldBot = lst(oldText);\n var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0), oldBot.length - (oldText.length == 1 ? cutFront : 0));\n while (cutEnd < maxCutEnd && newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) {\n ++cutEnd;\n }\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 && newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) {\n cutFront--;\n cutEnd++;\n }\n }\n newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd).replace(/^\\u200b+/, \"\");\n newText[0] = newText[0].slice(cutFront).replace(/\\u200b+$/, \"\");\n var chFrom = Pos(fromLine, cutFront);\n var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0);\n if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) {\n replaceRange(cm.doc, newText, chFrom, chTo, \"+input\");\n return true;\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) {\n return;\n }\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 if (this.readDOMTimeout != null) {\n return;\n }\n this.readDOMTimeout = setTimeout(function () {\n this$1.readDOMTimeout = null;\n if (this$1.composing) {\n if (this$1.composing.done) {\n this$1.composing = null;\n } else {\n return;\n }\n }\n this$1.updateFromDOM();\n }, 80);\n };\n ContentEditableInput.prototype.updateFromDOM = function () {\n var this$1 = this;\n if (this.cm.isReadOnly() || !this.pollContent()) {\n runInOp(this.cm, function () {\n return regChange(this$1.cm);\n });\n }\n };\n ContentEditableInput.prototype.setUneditable = function (node) {\n node.contentEditable = \"false\";\n };\n ContentEditableInput.prototype.onKeyPress = function (e) {\n if (e.charCode == 0 || this.composing) {\n return;\n }\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 ContentEditableInput.prototype.onContextMenu = function () {};\n ContentEditableInput.prototype.resetPosition = function () {};\n ContentEditableInput.prototype.needsContentAttribute = true;\n function posToDOM(cm, pos) {\n var view = findViewForLine(cm, pos.line);\n if (!view || view.hidden) {\n return null;\n }\n var line = getLine(cm.doc, pos.line);\n var info = mapFromLineView(view, line, pos.line);\n var order = getOrder(line, cm.doc.direction),\n side = \"left\";\n 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 function isInGutter(node) {\n for (var scan = node; scan; scan = scan.parentNode) {\n if (/CodeMirror-gutter-wrapper/.test(scan.className)) {\n return true;\n }\n }\n return false;\n }\n function badPos(pos, bad) {\n if (bad) {\n pos.bad = true;\n }\n return pos;\n }\n function domTextBetween(cm, from, to, fromLine, toLine) {\n var text = \"\",\n closing = false,\n lineSep = cm.doc.lineSeparator(),\n extraLinebreak = false;\n function recognizeMarker(id) {\n return function (marker) {\n return marker.id == id;\n };\n }\n function close() {\n if (closing) {\n text += lineSep;\n if (extraLinebreak) {\n text += lineSep;\n }\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\"),\n 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 }\n return;\n }\n if (node.getAttribute(\"contenteditable\") == \"false\") {\n return;\n }\n var isBlock = /^(pre|div|p|li|table|br)$/i.test(node.nodeName);\n if (!/^br$/i.test(node.nodeName) && node.textContent.length == 0) {\n return;\n }\n if (isBlock) {\n close();\n }\n for (var i = 0; i < node.childNodes.length; i++) {\n walk(node.childNodes[i]);\n }\n if (/^(pre|p)$/i.test(node.nodeName)) {\n extraLinebreak = true;\n }\n if (isBlock) {\n closing = true;\n }\n } else if (node.nodeType == 3) {\n addText(node.nodeValue.replace(/\\u200b/g, \"\").replace(/\\u00a0/g, \" \"));\n }\n }\n for (;;) {\n walk(from);\n if (from == to) {\n break;\n }\n from = from.nextSibling;\n extraLinebreak = false;\n }\n return text;\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) {\n return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true);\n }\n node = null;\n offset = 0;\n } else {\n for (lineNode = node;; lineNode = lineNode.parentNode) {\n if (!lineNode || lineNode == cm.display.lineDiv) {\n return null;\n }\n if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) {\n break;\n }\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,\n bad = false;\n if (!node || !contains(wrapper, node)) {\n return badPos(Pos(lineNo(lineView.line), 0), true);\n }\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 var textNode = node.nodeType == 3 ? node : null,\n topNode = node;\n if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) {\n textNode = node.firstChild;\n if (offset) {\n offset = textNode.nodeValue.length;\n }\n }\n while (topNode.parentNode != wrapper) {\n topNode = topNode.parentNode;\n }\n var measure = lineView.measure,\n maps = measure.maps;\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) {\n ch = map[j + (offset ? 1 : 0)];\n }\n return Pos(line, ch);\n }\n }\n }\n }\n var found = find(textNode, topNode, offset);\n if (found) {\n return badPos(found, bad);\n }\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 }\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\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 this.resetting = false;\n };\n TextareaInput.prototype.init = function (display) {\n var this$1 = this;\n var input = this,\n cm = this.cm;\n this.createField(display);\n var te = this.textarea;\n display.wrapper.insertBefore(this.wrapper, display.wrapper.firstChild);\n\n // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore)\n if (ios) {\n te.style.width = \"0px\";\n }\n on(te, \"input\", function () {\n if (ie && ie_version >= 9 && this$1.hasSelection) {\n this$1.hasSelection = null;\n }\n input.poll();\n });\n on(te, \"paste\", function (e) {\n if (signalDOMEvent(cm, e) || handlePaste(e, cm)) {\n return;\n }\n cm.state.pasteIncoming = +new Date();\n input.fastPoll();\n });\n function prepareCopyCut(e) {\n if (signalDOMEvent(cm, e)) {\n return;\n }\n if (cm.somethingSelected()) {\n setLastCopied({\n lineWise: false,\n text: cm.getSelections()\n });\n } else if (!cm.options.lineWiseCopyCut) {\n return;\n } else {\n var ranges = copyableRanges(cm);\n setLastCopied({\n lineWise: true,\n text: ranges.text\n });\n 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\") {\n cm.state.cutIncoming = +new Date();\n }\n }\n on(te, \"cut\", prepareCopyCut);\n on(te, \"copy\", prepareCopyCut);\n on(display.scroller, \"paste\", function (e) {\n if (eventInWidget(display, e) || signalDOMEvent(cm, e)) {\n return;\n }\n 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)) {\n e_preventDefault(e);\n }\n });\n on(te, \"compositionstart\", function () {\n var start = cm.getCursor(\"from\");\n if (input.composing) {\n input.composing.range.clear();\n }\n input.composing = {\n start: start,\n range: cm.markText(start, cm.getCursor(\"to\"), {\n className: \"CodeMirror-composing\"\n })\n };\n });\n on(te, \"compositionend\", function () {\n if (input.composing) {\n input.poll();\n input.composing.range.clear();\n input.composing = null;\n }\n });\n };\n 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 var opts = this.cm.options;\n disableBrowserMagic(this.textarea, opts.spellcheck, opts.autocorrect, opts.autocapitalize);\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 TextareaInput.prototype.prepareSelection = function () {\n // Redraw the selection and/or cursor\n var cm = this.cm,\n display = cm.display,\n doc = cm.doc;\n var result = prepareSelection(cm);\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(),\n lineOff = display.lineDiv.getBoundingClientRect();\n result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10, headPos.top + lineOff.top - wrapOff.top));\n result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10, headPos.left + lineOff.left - wrapOff.left));\n }\n return result;\n };\n TextareaInput.prototype.showSelection = function (drawn) {\n var cm = this.cm,\n display = cm.display;\n removeChildrenAndAdd(display.cursorDiv, drawn.cursors);\n removeChildrenAndAdd(display.selectionDiv, drawn.selection);\n 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 && typing) {\n return;\n }\n var cm = this.cm;\n this.resetting = true;\n if (cm.somethingSelected()) {\n this.prevInput = \"\";\n var content = cm.getSelection();\n this.textarea.value = content;\n if (cm.state.focused) {\n selectInput(this.textarea);\n }\n if (ie && ie_version >= 9) {\n this.hasSelection = content;\n }\n } else if (!typing) {\n this.prevInput = this.textarea.value = \"\";\n if (ie && ie_version >= 9) {\n this.hasSelection = null;\n }\n }\n this.resetting = false;\n };\n TextareaInput.prototype.getField = function () {\n return this.textarea;\n };\n TextareaInput.prototype.supportsTouch = function () {\n return false;\n };\n TextareaInput.prototype.focus = function () {\n if (this.cm.options.readOnly != \"nocursor\" && (!mobile || activeElt(this.textarea.ownerDocument) != this.textarea)) {\n try {\n this.textarea.focus();\n } catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM\n }\n };\n\n TextareaInput.prototype.blur = function () {\n this.textarea.blur();\n };\n TextareaInput.prototype.resetPosition = function () {\n this.wrapper.style.top = this.wrapper.style.left = 0;\n };\n TextareaInput.prototype.receivedFocus = function () {\n this.slowPoll();\n };\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 if (this.pollingFast) {\n return;\n }\n this.polling.set(this.cm.options.pollInterval, function () {\n this$1.poll();\n if (this$1.cm.state.focused) {\n this$1.slowPoll();\n }\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,\n input = this;\n input.pollingFast = true;\n function p() {\n var changed = input.poll();\n if (!changed && !missed) {\n missed = true;\n input.polling.set(60, p);\n } else {\n input.pollingFast = false;\n input.slowPoll();\n }\n }\n 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 var cm = this.cm,\n input = this.textarea,\n 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 || this.resetting || !cm.state.focused || hasSelection(input) && !prevInput && !this.composing || 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()) {\n return false;\n }\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 || mac && /[\\uf700-\\uf7ff]/.test(text)) {\n cm.display.input.reset();\n return false;\n }\n if (cm.doc.sel == cm.display.selForContextMenu) {\n var first = text.charCodeAt(0);\n if (first == 0x200b && !prevInput) {\n prevInput = \"\\u200b\";\n }\n if (first == 0x21da) {\n this.reset();\n return this.cm.execCommand(\"undo\");\n }\n }\n // Find the part of the input that is actually new\n var same = 0,\n l = Math.min(prevInput.length, text.length);\n while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) {\n ++same;\n }\n runInOp(cm, function () {\n applyTextInput(cm, text.slice(same), prevInput.length - same, 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) {\n input.value = this$1.prevInput = \"\";\n } else {\n 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 });\n return true;\n };\n TextareaInput.prototype.ensurePolled = function () {\n if (this.pollingFast && this.poll()) {\n this.pollingFast = false;\n }\n };\n TextareaInput.prototype.onKeyPress = function () {\n if (ie && ie_version >= 9) {\n this.hasSelection = null;\n }\n this.fastPoll();\n };\n TextareaInput.prototype.onContextMenu = function (e) {\n var input = this,\n cm = input.cm,\n display = cm.display,\n te = input.textarea;\n if (input.contextMenuPending) {\n input.contextMenuPending();\n }\n var pos = posFromMouse(cm, e),\n scrollPos = display.scroller.scrollTop;\n if (!pos || presto) {\n return;\n } // 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,\n oldWrapperCSS = input.wrapper.style.cssText;\n var wrapperBox = input.wrapper.offsetParent.getBoundingClientRect();\n input.wrapper.style.cssText = \"position: static\";\n te.style.cssText = \"position: absolute; width: 30px; height: 30px;\\n top: \" + (e.clientY - wrapperBox.top - 5) + \"px; left: \" + (e.clientX - wrapperBox.left - 5) + \"px;\\n z-index: 1000; background: \" + (ie ? \"rgba(255, 255, 255, .05)\" : \"transparent\") + \";\\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);\";\n var oldScrollY;\n if (webkit) {\n oldScrollY = te.ownerDocument.defaultView.scrollY;\n } // Work around Chrome issue (#2712)\n display.input.focus();\n if (webkit) {\n te.ownerDocument.defaultView.scrollTo(null, oldScrollY);\n }\n display.input.reset();\n // Adds \"Select all\" to context menu in FF\n if (!cm.somethingSelected()) {\n te.value = input.prevInput = \" \";\n }\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;\n 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) {\n return;\n }\n input.contextMenuPending = false;\n input.wrapper.style.cssText = oldWrapperCSS;\n te.style.cssText = oldCSS;\n if (ie && ie_version < 9) {\n display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos);\n }\n\n // Try to detect the user choosing select-all\n if (te.selectionStart != null) {\n if (!ie || ie && ie_version < 9) {\n prepareSelectAllHack();\n }\n var i = 0,\n poll = function () {\n if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 && te.selectionEnd > 0 && input.prevInput == \"\\u200b\") {\n operation(cm, selectAll)(cm);\n } else if (i++ < 10) {\n display.detectingSelectAll = setTimeout(poll, 500);\n } else {\n display.selForContextMenu = null;\n display.input.reset();\n }\n };\n display.detectingSelectAll = setTimeout(poll, 200);\n }\n }\n if (ie && ie_version >= 9) {\n prepareSelectAllHack();\n }\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 TextareaInput.prototype.readOnlyChanged = function (val) {\n if (!val) {\n this.reset();\n }\n this.textarea.disabled = val == \"nocursor\";\n this.textarea.readOnly = !!val;\n };\n TextareaInput.prototype.setUneditable = function () {};\n TextareaInput.prototype.needsContentAttribute = false;\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 }\n if (!options.placeholder && textarea.placeholder) {\n options.placeholder = textarea.placeholder;\n }\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(textarea.ownerDocument);\n options.autofocus = hasFocus == textarea || textarea.getAttribute(\"autofocus\") != null && hasFocus == document.body;\n }\n function save() {\n 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 options.finishInit = function (cm) {\n cm.save = save;\n cm.getTextArea = function () {\n return textarea;\n };\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) {\n return textarea.parentNode.insertBefore(node, textarea.nextSibling);\n }, options);\n return cm;\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 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) {\n if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0) {\n CodeMirror.prototype[prop] = function (method) {\n return function () {\n return method.apply(this.doc, arguments);\n };\n }(Doc.prototype[prop]);\n }\n }\n eventMixin(Doc);\n CodeMirror.inputStyles = {\n \"textarea\": TextareaInput,\n \"contenteditable\": ContentEditableInput\n };\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\") {\n CodeMirror.defaults.mode = name;\n }\n defineMode.apply(this, arguments);\n };\n CodeMirror.defineMIME = defineMIME;\n\n // Minimal default mode.\n CodeMirror.defineMode(\"null\", function () {\n return {\n token: function (stream) {\n return stream.skipToEnd();\n }\n };\n });\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 CodeMirror.fromTextArea = fromTextArea;\n addLegacyProps(CodeMirror);\n CodeMirror.version = \"5.65.12\";\n return CodeMirror;\n});","'use strict';\n\nvar CodeMirror = require('codemirror');\nrequire('codemirror/addon/edit/continuelist.js');\nrequire('./codemirror/tablist');\nrequire('codemirror/addon/display/fullscreen.js');\nrequire('codemirror/mode/markdown/markdown.js');\nrequire('codemirror/addon/mode/overlay.js');\nrequire('codemirror/addon/display/placeholder.js');\nrequire('codemirror/addon/display/autorefresh.js');\nrequire('codemirror/addon/selection/mark-selection.js');\nrequire('codemirror/addon/search/searchcursor.js');\nrequire('codemirror/mode/gfm/gfm.js');\nrequire('codemirror/mode/xml/xml.js');\nvar CodeMirrorSpellChecker = require('codemirror-spell-checker');\nvar marked = require('marked').marked;\n\n// Some variables\nvar isMac = /Mac/.test(navigator.platform);\nvar anchorToExternalRegex = new RegExp(/()+?/g);\n\n// Mapping of actions that can be bound to keyboard shortcuts or toolbar buttons\nvar bindings = {\n 'toggleBold': toggleBold,\n 'toggleItalic': toggleItalic,\n 'drawLink': drawLink,\n 'toggleHeadingSmaller': toggleHeadingSmaller,\n 'toggleHeadingBigger': toggleHeadingBigger,\n 'drawImage': drawImage,\n 'toggleBlockquote': toggleBlockquote,\n 'toggleOrderedList': toggleOrderedList,\n 'toggleUnorderedList': toggleUnorderedList,\n 'toggleCodeBlock': toggleCodeBlock,\n 'togglePreview': togglePreview,\n 'toggleStrikethrough': toggleStrikethrough,\n 'toggleHeading1': toggleHeading1,\n 'toggleHeading2': toggleHeading2,\n 'toggleHeading3': toggleHeading3,\n 'toggleHeading4': toggleHeading4,\n 'toggleHeading5': toggleHeading5,\n 'toggleHeading6': toggleHeading6,\n 'cleanBlock': cleanBlock,\n 'drawTable': drawTable,\n 'drawHorizontalRule': drawHorizontalRule,\n 'undo': undo,\n 'redo': redo,\n 'toggleSideBySide': toggleSideBySide,\n 'toggleFullScreen': toggleFullScreen\n};\nvar shortcuts = {\n 'toggleBold': 'Cmd-B',\n 'toggleItalic': 'Cmd-I',\n 'drawLink': 'Cmd-K',\n 'toggleHeadingSmaller': 'Cmd-H',\n 'toggleHeadingBigger': 'Shift-Cmd-H',\n 'toggleHeading1': 'Ctrl+Alt+1',\n 'toggleHeading2': 'Ctrl+Alt+2',\n 'toggleHeading3': 'Ctrl+Alt+3',\n 'toggleHeading4': 'Ctrl+Alt+4',\n 'toggleHeading5': 'Ctrl+Alt+5',\n 'toggleHeading6': 'Ctrl+Alt+6',\n 'cleanBlock': 'Cmd-E',\n 'drawImage': 'Cmd-Alt-I',\n 'toggleBlockquote': 'Cmd-\\'',\n 'toggleOrderedList': 'Cmd-Alt-L',\n 'toggleUnorderedList': 'Cmd-L',\n 'toggleCodeBlock': 'Cmd-Alt-C',\n 'togglePreview': 'Cmd-P',\n 'toggleSideBySide': 'F9',\n 'toggleFullScreen': 'F11'\n};\nvar getBindingName = function (f) {\n for (var key in bindings) {\n if (bindings[key] === f) {\n return key;\n }\n }\n return null;\n};\nvar isMobile = function () {\n var check = false;\n (function (a) {\n if (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(a.substr(0, 4))) check = true;\n })(navigator.userAgent || navigator.vendor || window.opera);\n return check;\n};\n\n/**\n * Modify HTML to add 'target=\"_blank\"' to links so they open in new tabs by default.\n * @param {string} htmlText - HTML to be modified.\n * @return {string} The modified HTML text.\n */\nfunction addAnchorTargetBlank(htmlText) {\n var match;\n while ((match = anchorToExternalRegex.exec(htmlText)) !== null) {\n // With only one capture group in the RegExp, we can safely take the first index from the match.\n var linkString = match[0];\n if (linkString.indexOf('target=') === -1) {\n var fixedLinkString = linkString.replace(/>$/, ' target=\"_blank\">');\n htmlText = htmlText.replace(linkString, fixedLinkString);\n }\n }\n return htmlText;\n}\n\n/**\n * Modify HTML to remove the list-style when rendering checkboxes.\n * @param {string} htmlText - HTML to be modified.\n * @return {string} The modified HTML text.\n */\nfunction removeListStyleWhenCheckbox(htmlText) {\n var parser = new DOMParser();\n var htmlDoc = parser.parseFromString(htmlText, 'text/html');\n var listItems = htmlDoc.getElementsByTagName('li');\n for (var i = 0; i < listItems.length; i++) {\n var listItem = listItems[i];\n for (var j = 0; j < listItem.children.length; j++) {\n var listItemChild = listItem.children[j];\n if (listItemChild instanceof HTMLInputElement && listItemChild.type === 'checkbox') {\n // From Github: margin: 0 .2em .25em -1.6em;\n listItem.style.marginLeft = '-1.5em';\n listItem.style.listStyleType = 'none';\n }\n }\n }\n return htmlDoc.documentElement.innerHTML;\n}\n\n/**\n * Fix shortcut. Mac use Command, others use Ctrl.\n */\nfunction fixShortcut(name) {\n if (isMac) {\n name = name.replace('Ctrl', 'Cmd');\n } else {\n name = name.replace('Cmd', 'Ctrl');\n }\n return name;\n}\n\n/**\n * Create dropdown block\n */\nfunction createToolbarDropdown(options, enableTooltips, shortcuts, parent) {\n var el = createToolbarButton(options, false, enableTooltips, shortcuts, 'button', parent);\n el.classList.add('easymde-dropdown');\n el.onclick = function () {\n el.focus();\n };\n var content = document.createElement('div');\n content.className = 'easymde-dropdown-content';\n for (var childrenIndex = 0; childrenIndex < options.children.length; childrenIndex++) {\n var child = options.children[childrenIndex];\n var childElement;\n if (typeof child === 'string' && child in toolbarBuiltInButtons) {\n childElement = createToolbarButton(toolbarBuiltInButtons[child], true, enableTooltips, shortcuts, 'button', parent);\n } else {\n childElement = createToolbarButton(child, true, enableTooltips, shortcuts, 'button', parent);\n }\n childElement.addEventListener('click', function (e) {\n e.stopPropagation();\n }, false);\n content.appendChild(childElement);\n }\n el.appendChild(content);\n return el;\n}\n\n/**\n * Create button element for toolbar.\n */\nfunction createToolbarButton(options, enableActions, enableTooltips, shortcuts, markup, parent) {\n options = options || {};\n var el = document.createElement(markup);\n\n // Add 'custom' attributes as early as possible, so that 'official' attributes will never be overwritten.\n if (options.attributes) {\n for (var attribute in options.attributes) {\n if (Object.prototype.hasOwnProperty.call(options.attributes, attribute)) {\n el.setAttribute(attribute, options.attributes[attribute]);\n }\n }\n }\n var classNamePrefix = parent.options.toolbarButtonClassPrefix ? parent.options.toolbarButtonClassPrefix + '-' : '';\n el.className = classNamePrefix + options.name;\n el.setAttribute('type', markup);\n enableTooltips = enableTooltips == undefined ? true : enableTooltips;\n if (options.text) {\n el.innerText = options.text;\n }\n\n // Properly handle custom shortcuts\n if (options.name && options.name in shortcuts) {\n bindings[options.name] = options.action;\n }\n if (options.title && enableTooltips) {\n el.title = createTooltip(options.title, options.action, shortcuts);\n if (isMac) {\n el.title = el.title.replace('Ctrl', '⌘');\n el.title = el.title.replace('Alt', '⌥');\n }\n }\n if (options.title) {\n el.setAttribute('aria-label', options.title);\n }\n if (options.noDisable) {\n el.classList.add('no-disable');\n }\n if (options.noMobile) {\n el.classList.add('no-mobile');\n }\n\n // Prevent errors if there is no class name in custom options\n var classNameParts = [];\n if (typeof options.className !== 'undefined') {\n classNameParts = options.className.split(' ');\n }\n\n // Provide backwards compatibility with simple-markdown-editor by adding custom classes to the button.\n var iconClasses = [];\n for (var classNameIndex = 0; classNameIndex < classNameParts.length; classNameIndex++) {\n var classNamePart = classNameParts[classNameIndex];\n // Split icon classes from the button.\n // Regex will detect \"fa\", \"fas\", \"fa-something\" and \"fa-some-icon-1\", but not \"fanfare\".\n if (classNamePart.match(/^fa([srlb]|(-[\\w-]*)|$)/)) {\n iconClasses.push(classNamePart);\n } else {\n el.classList.add(classNamePart);\n }\n }\n el.tabIndex = -1;\n if (iconClasses.length > 0) {\n // Create icon element and append as a child to the button\n var icon = document.createElement('i');\n for (var iconClassIndex = 0; iconClassIndex < iconClasses.length; iconClassIndex++) {\n var iconClass = iconClasses[iconClassIndex];\n icon.classList.add(iconClass);\n }\n el.appendChild(icon);\n }\n\n // If there is a custom icon markup set, use that\n if (typeof options.icon !== 'undefined') {\n el.innerHTML = options.icon;\n }\n if (options.action && enableActions) {\n if (typeof options.action === 'function') {\n el.onclick = function (e) {\n e.preventDefault();\n options.action(parent);\n };\n } else if (typeof options.action === 'string') {\n el.onclick = function (e) {\n e.preventDefault();\n window.open(options.action, '_blank');\n };\n }\n }\n return el;\n}\nfunction createSep() {\n var el = document.createElement('i');\n el.className = 'separator';\n el.innerHTML = '|';\n return el;\n}\nfunction createTooltip(title, action, shortcuts) {\n var actionName;\n var tooltip = title;\n if (action) {\n actionName = getBindingName(action);\n if (shortcuts[actionName]) {\n tooltip += ' (' + fixShortcut(shortcuts[actionName]) + ')';\n }\n }\n return tooltip;\n}\n\n/**\n * The state of CodeMirror at the given position.\n */\nfunction getState(cm, pos) {\n pos = pos || cm.getCursor('start');\n var stat = cm.getTokenAt(pos);\n if (!stat.type) return {};\n var types = stat.type.split(' ');\n var ret = {},\n data,\n text;\n for (var i = 0; i < types.length; i++) {\n data = types[i];\n if (data === 'strong') {\n ret.bold = true;\n } else if (data === 'variable-2') {\n text = cm.getLine(pos.line);\n if (/^\\s*\\d+\\.\\s/.test(text)) {\n ret['ordered-list'] = true;\n } else {\n ret['unordered-list'] = true;\n }\n } else if (data === 'atom') {\n ret.quote = true;\n } else if (data === 'em') {\n ret.italic = true;\n } else if (data === 'quote') {\n ret.quote = true;\n } else if (data === 'strikethrough') {\n ret.strikethrough = true;\n } else if (data === 'comment') {\n ret.code = true;\n } else if (data === 'link' && !ret.image) {\n ret.link = true;\n } else if (data === 'image') {\n ret.image = true;\n } else if (data.match(/^header(-[1-6])?$/)) {\n ret[data.replace('header', 'heading')] = true;\n }\n }\n return ret;\n}\n\n// Saved overflow setting\nvar saved_overflow = '';\n\n/**\n * Toggle full screen of the editor.\n * @param {EasyMDE} editor\n */\nfunction toggleFullScreen(editor) {\n // Set fullscreen\n var cm = editor.codemirror;\n cm.setOption('fullScreen', !cm.getOption('fullScreen'));\n\n // Prevent scrolling on body during fullscreen active\n if (cm.getOption('fullScreen')) {\n saved_overflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = saved_overflow;\n }\n var wrapper = cm.getWrapperElement();\n var sidebyside = wrapper.nextSibling;\n if (sidebyside.classList.contains('editor-preview-active-side')) {\n if (editor.options.sideBySideFullscreen === false) {\n // if side-by-side not-fullscreen ok, apply classes as needed\n var easyMDEContainer = wrapper.parentNode;\n if (cm.getOption('fullScreen')) {\n easyMDEContainer.classList.remove('sided--no-fullscreen');\n } else {\n easyMDEContainer.classList.add('sided--no-fullscreen');\n }\n } else {\n toggleSideBySide(editor);\n }\n }\n if (editor.options.onToggleFullScreen) {\n editor.options.onToggleFullScreen(cm.getOption('fullScreen') || false);\n }\n\n // Remove or set maxHeight\n if (typeof editor.options.maxHeight !== 'undefined') {\n if (cm.getOption('fullScreen')) {\n cm.getScrollerElement().style.removeProperty('height');\n sidebyside.style.removeProperty('height');\n } else {\n cm.getScrollerElement().style.height = editor.options.maxHeight;\n editor.setPreviewMaxHeight();\n }\n }\n\n // Update toolbar class\n editor.toolbar_div.classList.toggle('fullscreen');\n\n // Update toolbar button\n if (editor.toolbarElements && editor.toolbarElements.fullscreen) {\n var toolbarButton = editor.toolbarElements.fullscreen;\n toolbarButton.classList.toggle('active');\n }\n}\n\n/**\n * Action for toggling bold.\n * @param {EasyMDE} editor\n */\nfunction toggleBold(editor) {\n _toggleBlock(editor, 'bold', editor.options.blockStyles.bold);\n}\n\n/**\n * Action for toggling italic.\n * @param {EasyMDE} editor\n */\nfunction toggleItalic(editor) {\n _toggleBlock(editor, 'italic', editor.options.blockStyles.italic);\n}\n\n/**\n * Action for toggling strikethrough.\n * @param {EasyMDE} editor\n */\nfunction toggleStrikethrough(editor) {\n _toggleBlock(editor, 'strikethrough', '~~');\n}\n\n/**\n * Action for toggling code block.\n * @param {EasyMDE} editor\n */\nfunction toggleCodeBlock(editor) {\n var fenceCharsToInsert = editor.options.blockStyles.code;\n function fencing_line(line) {\n /* return true, if this is a ``` or ~~~ line */\n if (typeof line !== 'object') {\n throw 'fencing_line() takes a \\'line\\' object (not a line number, or line text). Got: ' + typeof line + ': ' + line;\n }\n return line.styles && line.styles[2] && line.styles[2].indexOf('formatting-code-block') !== -1;\n }\n function token_state(token) {\n // base goes an extra level deep when mode backdrops are used, e.g. spellchecker on\n return token.state.base.base || token.state.base;\n }\n function code_type(cm, line_num, line, firstTok, lastTok) {\n /*\n * Return \"single\", \"indented\", \"fenced\" or false\n *\n * cm and line_num are required. Others are optional for efficiency\n * To check in the middle of a line, pass in firstTok yourself.\n */\n line = line || cm.getLineHandle(line_num);\n firstTok = firstTok || cm.getTokenAt({\n line: line_num,\n ch: 1\n });\n lastTok = lastTok || !!line.text && cm.getTokenAt({\n line: line_num,\n ch: line.text.length - 1\n });\n var types = firstTok.type ? firstTok.type.split(' ') : [];\n if (lastTok && token_state(lastTok).indentedCode) {\n // have to check last char, since first chars of first line aren\"t marked as indented\n return 'indented';\n } else if (types.indexOf('comment') === -1) {\n // has to be after \"indented\" check, since first chars of first indented line aren\"t marked as such\n return false;\n } else if (token_state(firstTok).fencedChars || token_state(lastTok).fencedChars || fencing_line(line)) {\n return 'fenced';\n } else {\n return 'single';\n }\n }\n function insertFencingAtSelection(cm, cur_start, cur_end, fenceCharsToInsert) {\n var start_line_sel = cur_start.line + 1,\n end_line_sel = cur_end.line + 1,\n sel_multi = cur_start.line !== cur_end.line,\n repl_start = fenceCharsToInsert + '\\n',\n repl_end = '\\n' + fenceCharsToInsert;\n if (sel_multi) {\n end_line_sel++;\n }\n // handle last char including \\n or not\n if (sel_multi && cur_end.ch === 0) {\n repl_end = fenceCharsToInsert + '\\n';\n end_line_sel--;\n }\n _replaceSelection(cm, false, [repl_start, repl_end]);\n cm.setSelection({\n line: start_line_sel,\n ch: 0\n }, {\n line: end_line_sel,\n ch: 0\n });\n }\n var cm = editor.codemirror,\n cur_start = cm.getCursor('start'),\n cur_end = cm.getCursor('end'),\n tok = cm.getTokenAt({\n line: cur_start.line,\n ch: cur_start.ch || 1\n }),\n // avoid ch 0 which is a cursor pos but not token\n line = cm.getLineHandle(cur_start.line),\n is_code = code_type(cm, cur_start.line, line, tok);\n var block_start, block_end, lineCount;\n if (is_code === 'single') {\n // similar to some EasyMDE _toggleBlock logic\n var start = line.text.slice(0, cur_start.ch).replace('`', ''),\n end = line.text.slice(cur_start.ch).replace('`', '');\n cm.replaceRange(start + end, {\n line: cur_start.line,\n ch: 0\n }, {\n line: cur_start.line,\n ch: 99999999999999\n });\n cur_start.ch--;\n if (cur_start !== cur_end) {\n cur_end.ch--;\n }\n cm.setSelection(cur_start, cur_end);\n cm.focus();\n } else if (is_code === 'fenced') {\n if (cur_start.line !== cur_end.line || cur_start.ch !== cur_end.ch) {\n // use selection\n\n // find the fenced line so we know what type it is (tilde, backticks, number of them)\n for (block_start = cur_start.line; block_start >= 0; block_start--) {\n line = cm.getLineHandle(block_start);\n if (fencing_line(line)) {\n break;\n }\n }\n var fencedTok = cm.getTokenAt({\n line: block_start,\n ch: 1\n });\n var fence_chars = token_state(fencedTok).fencedChars;\n var start_text, start_line;\n var end_text, end_line;\n // check for selection going up against fenced lines, in which case we don't want to add more fencing\n if (fencing_line(cm.getLineHandle(cur_start.line))) {\n start_text = '';\n start_line = cur_start.line;\n } else if (fencing_line(cm.getLineHandle(cur_start.line - 1))) {\n start_text = '';\n start_line = cur_start.line - 1;\n } else {\n start_text = fence_chars + '\\n';\n start_line = cur_start.line;\n }\n if (fencing_line(cm.getLineHandle(cur_end.line))) {\n end_text = '';\n end_line = cur_end.line;\n if (cur_end.ch === 0) {\n end_line += 1;\n }\n } else if (cur_end.ch !== 0 && fencing_line(cm.getLineHandle(cur_end.line + 1))) {\n end_text = '';\n end_line = cur_end.line + 1;\n } else {\n end_text = fence_chars + '\\n';\n end_line = cur_end.line + 1;\n }\n if (cur_end.ch === 0) {\n // full last line selected, putting cursor at beginning of next\n end_line -= 1;\n }\n cm.operation(function () {\n // end line first, so that line numbers don't change\n cm.replaceRange(end_text, {\n line: end_line,\n ch: 0\n }, {\n line: end_line + (end_text ? 0 : 1),\n ch: 0\n });\n cm.replaceRange(start_text, {\n line: start_line,\n ch: 0\n }, {\n line: start_line + (start_text ? 0 : 1),\n ch: 0\n });\n });\n cm.setSelection({\n line: start_line + (start_text ? 1 : 0),\n ch: 0\n }, {\n line: end_line + (start_text ? 1 : -1),\n ch: 0\n });\n cm.focus();\n } else {\n // no selection, search for ends of this fenced block\n var search_from = cur_start.line;\n if (fencing_line(cm.getLineHandle(cur_start.line))) {\n // gets a little tricky if cursor is right on a fenced line\n if (code_type(cm, cur_start.line + 1) === 'fenced') {\n block_start = cur_start.line;\n search_from = cur_start.line + 1; // for searching for \"end\"\n } else {\n block_end = cur_start.line;\n search_from = cur_start.line - 1; // for searching for \"start\"\n }\n }\n\n if (block_start === undefined) {\n for (block_start = search_from; block_start >= 0; block_start--) {\n line = cm.getLineHandle(block_start);\n if (fencing_line(line)) {\n break;\n }\n }\n }\n if (block_end === undefined) {\n lineCount = cm.lineCount();\n for (block_end = search_from; block_end < lineCount; block_end++) {\n line = cm.getLineHandle(block_end);\n if (fencing_line(line)) {\n break;\n }\n }\n }\n cm.operation(function () {\n cm.replaceRange('', {\n line: block_start,\n ch: 0\n }, {\n line: block_start + 1,\n ch: 0\n });\n cm.replaceRange('', {\n line: block_end - 1,\n ch: 0\n }, {\n line: block_end,\n ch: 0\n });\n });\n cm.focus();\n }\n } else if (is_code === 'indented') {\n if (cur_start.line !== cur_end.line || cur_start.ch !== cur_end.ch) {\n // use selection\n block_start = cur_start.line;\n block_end = cur_end.line;\n if (cur_end.ch === 0) {\n block_end--;\n }\n } else {\n // no selection, search for ends of this indented block\n for (block_start = cur_start.line; block_start >= 0; block_start--) {\n line = cm.getLineHandle(block_start);\n if (line.text.match(/^\\s*$/)) {\n // empty or all whitespace - keep going\n continue;\n } else {\n if (code_type(cm, block_start, line) !== 'indented') {\n block_start += 1;\n break;\n }\n }\n }\n lineCount = cm.lineCount();\n for (block_end = cur_start.line; block_end < lineCount; block_end++) {\n line = cm.getLineHandle(block_end);\n if (line.text.match(/^\\s*$/)) {\n // empty or all whitespace - keep going\n continue;\n } else {\n if (code_type(cm, block_end, line) !== 'indented') {\n block_end -= 1;\n break;\n }\n }\n }\n }\n // if we are going to un-indent based on a selected set of lines, and the next line is indented too, we need to\n // insert a blank line so that the next line(s) continue to be indented code\n var next_line = cm.getLineHandle(block_end + 1),\n next_line_last_tok = next_line && cm.getTokenAt({\n line: block_end + 1,\n ch: next_line.text.length - 1\n }),\n next_line_indented = next_line_last_tok && token_state(next_line_last_tok).indentedCode;\n if (next_line_indented) {\n cm.replaceRange('\\n', {\n line: block_end + 1,\n ch: 0\n });\n }\n for (var i = block_start; i <= block_end; i++) {\n cm.indentLine(i, 'subtract'); // TODO: this doesn't get tracked in the history, so can't be undone :(\n }\n\n cm.focus();\n } else {\n // insert code formatting\n var no_sel_and_starting_of_line = cur_start.line === cur_end.line && cur_start.ch === cur_end.ch && cur_start.ch === 0;\n var sel_multi = cur_start.line !== cur_end.line;\n if (no_sel_and_starting_of_line || sel_multi) {\n insertFencingAtSelection(cm, cur_start, cur_end, fenceCharsToInsert);\n } else {\n _replaceSelection(cm, false, ['`', '`']);\n }\n }\n}\n\n/**\n * Action for toggling blockquote.\n */\nfunction toggleBlockquote(editor) {\n _toggleLine(editor.codemirror, 'quote');\n}\n\n/**\n * Action for toggling heading size: normal -> h1 -> h2 -> h3 -> h4 -> h5 -> h6 -> normal\n */\nfunction toggleHeadingSmaller(editor) {\n _toggleHeading(editor.codemirror, 'smaller');\n}\n\n/**\n * Action for toggling heading size: normal -> h6 -> h5 -> h4 -> h3 -> h2 -> h1 -> normal\n */\nfunction toggleHeadingBigger(editor) {\n _toggleHeading(editor.codemirror, 'bigger');\n}\n\n/**\n * Action for toggling heading size 1\n */\nfunction toggleHeading1(editor) {\n _toggleHeading(editor.codemirror, undefined, 1);\n}\n\n/**\n * Action for toggling heading size 2\n */\nfunction toggleHeading2(editor) {\n _toggleHeading(editor.codemirror, undefined, 2);\n}\n\n/**\n * Action for toggling heading size 3\n */\nfunction toggleHeading3(editor) {\n _toggleHeading(editor.codemirror, undefined, 3);\n}\n\n/**\n * Action for toggling heading size 4\n */\nfunction toggleHeading4(editor) {\n _toggleHeading(editor.codemirror, undefined, 4);\n}\n\n/**\n * Action for toggling heading size 5\n */\nfunction toggleHeading5(editor) {\n _toggleHeading(editor.codemirror, undefined, 5);\n}\n\n/**\n * Action for toggling heading size 6\n */\nfunction toggleHeading6(editor) {\n _toggleHeading(editor.codemirror, undefined, 6);\n}\n\n/**\n * Action for toggling ul.\n */\nfunction toggleUnorderedList(editor) {\n var cm = editor.codemirror;\n var listStyle = '*'; // Default\n if (['-', '+', '*'].includes(editor.options.unorderedListStyle)) {\n listStyle = editor.options.unorderedListStyle;\n }\n _toggleLine(cm, 'unordered-list', listStyle);\n}\n\n/**\n * Action for toggling ol.\n */\nfunction toggleOrderedList(editor) {\n _toggleLine(editor.codemirror, 'ordered-list');\n}\n\n/**\n * Action for clean block (remove headline, list, blockquote code, markers)\n */\nfunction cleanBlock(editor) {\n _cleanBlock(editor.codemirror);\n}\n\n/**\n * Action for drawing a link.\n * @param {EasyMDE} editor\n */\nfunction drawLink(editor) {\n var options = editor.options;\n var url = 'https://';\n if (options.promptURLs) {\n var result = prompt(options.promptTexts.link, url);\n if (!result) {\n return false;\n }\n url = escapePromptURL(result);\n }\n _toggleLink(editor, 'link', options.insertTexts.link, url);\n}\n\n/**\n * Action for drawing an img.\n * @param {EasyMDE} editor\n */\nfunction drawImage(editor) {\n var options = editor.options;\n var url = 'https://';\n if (options.promptURLs) {\n var result = prompt(options.promptTexts.image, url);\n if (!result) {\n return false;\n }\n url = escapePromptURL(result);\n }\n _toggleLink(editor, 'image', options.insertTexts.image, url);\n}\n\n/**\n * Encode and escape URLs to prevent breaking up rendered Markdown links.\n * @param {string} url The url of the link or image\n */\nfunction escapePromptURL(url) {\n return encodeURI(url).replace(/([\\\\()])/g, '\\\\$1');\n}\n\n/**\n * Action for opening the browse-file window to upload an image to a server.\n * @param {EasyMDE} editor The EasyMDE object\n */\nfunction drawUploadedImage(editor) {\n // TODO: Draw the image template with a fake url? ie: '![](importing foo.png...)'\n editor.openBrowseFileWindow();\n}\n\n/**\n * Action executed after an image have been successfully imported on the server.\n * @param {EasyMDE} editor The EasyMDE object\n * @param {string} url The url of the uploaded image\n */\nfunction afterImageUploaded(editor, url) {\n var cm = editor.codemirror;\n var stat = getState(cm);\n var options = editor.options;\n var imageName = url.substr(url.lastIndexOf('/') + 1);\n var ext = imageName.substring(imageName.lastIndexOf('.') + 1).replace(/\\?.*$/, '').toLowerCase();\n\n // Check if media is an image\n if (['png', 'jpg', 'jpeg', 'gif', 'svg', 'apng', 'avif', 'webp'].includes(ext)) {\n _replaceSelection(cm, stat.image, options.insertTexts.uploadedImage, url);\n } else {\n var text_link = options.insertTexts.link;\n text_link[0] = '[' + imageName;\n _replaceSelection(cm, stat.link, text_link, url);\n }\n\n // show uploaded image filename for 1000ms\n editor.updateStatusBar('upload-image', editor.options.imageTexts.sbOnUploaded.replace('#image_name#', imageName));\n setTimeout(function () {\n editor.updateStatusBar('upload-image', editor.options.imageTexts.sbInit);\n }, 1000);\n}\n\n/**\n * Action for drawing a table.\n * @param {EasyMDE} editor\n */\nfunction drawTable(editor) {\n var cm = editor.codemirror;\n var stat = getState(cm);\n var options = editor.options;\n _replaceSelection(cm, stat.table, options.insertTexts.table);\n}\n\n/**\n * Action for drawing a horizontal rule.\n * @param {EasyMDE} editor\n */\nfunction drawHorizontalRule(editor) {\n var cm = editor.codemirror;\n var stat = getState(cm);\n var options = editor.options;\n _replaceSelection(cm, stat.image, options.insertTexts.horizontalRule);\n}\n\n/**\n * Undo action.\n * @param {EasyMDE} editor\n */\nfunction undo(editor) {\n var cm = editor.codemirror;\n cm.undo();\n cm.focus();\n}\n\n/**\n * Redo action.\n * @param {EasyMDE} editor\n */\nfunction redo(editor) {\n var cm = editor.codemirror;\n cm.redo();\n cm.focus();\n}\n\n/**\n * Toggle side by side preview\n * @param {EasyMDE} editor\n */\nfunction toggleSideBySide(editor) {\n var cm = editor.codemirror;\n var wrapper = cm.getWrapperElement();\n var preview = wrapper.nextSibling;\n var toolbarButton = editor.toolbarElements && editor.toolbarElements['side-by-side'];\n var useSideBySideListener = false;\n var easyMDEContainer = wrapper.parentNode;\n if (preview.classList.contains('editor-preview-active-side')) {\n if (editor.options.sideBySideFullscreen === false) {\n // if side-by-side not-fullscreen ok, remove classes when hiding side\n easyMDEContainer.classList.remove('sided--no-fullscreen');\n }\n preview.classList.remove('editor-preview-active-side');\n if (toolbarButton) toolbarButton.classList.remove('active');\n wrapper.classList.remove('CodeMirror-sided');\n } else {\n // When the preview button is clicked for the first time,\n // give some time for the transition from editor.css to fire and the view to slide from right to left,\n // instead of just appearing.\n setTimeout(function () {\n if (!cm.getOption('fullScreen')) {\n if (editor.options.sideBySideFullscreen === false) {\n // if side-by-side not-fullscreen ok, add classes when not fullscreen and showing side\n easyMDEContainer.classList.add('sided--no-fullscreen');\n } else {\n toggleFullScreen(editor);\n }\n }\n preview.classList.add('editor-preview-active-side');\n }, 1);\n if (toolbarButton) toolbarButton.classList.add('active');\n wrapper.classList.add('CodeMirror-sided');\n useSideBySideListener = true;\n }\n\n // Hide normal preview if active\n var previewNormal = wrapper.lastChild;\n if (previewNormal.classList.contains('editor-preview-active')) {\n previewNormal.classList.remove('editor-preview-active');\n var toolbar = editor.toolbarElements.preview;\n var toolbar_div = editor.toolbar_div;\n toolbar.classList.remove('active');\n toolbar_div.classList.remove('disabled-for-preview');\n }\n var sideBySideRenderingFunction = function () {\n var newValue = editor.options.previewRender(editor.value(), preview);\n if (newValue != null) {\n preview.innerHTML = newValue;\n }\n };\n if (!cm.sideBySideRenderingFunction) {\n cm.sideBySideRenderingFunction = sideBySideRenderingFunction;\n }\n if (useSideBySideListener) {\n var newValue = editor.options.previewRender(editor.value(), preview);\n if (newValue != null) {\n preview.innerHTML = newValue;\n }\n cm.on('update', cm.sideBySideRenderingFunction);\n } else {\n cm.off('update', cm.sideBySideRenderingFunction);\n }\n\n // Refresh to fix selection being off (#309)\n cm.refresh();\n}\n\n/**\n * Preview action.\n * @param {EasyMDE} editor\n */\nfunction togglePreview(editor) {\n var cm = editor.codemirror;\n var wrapper = cm.getWrapperElement();\n var toolbar_div = editor.toolbar_div;\n var toolbar = editor.options.toolbar ? editor.toolbarElements.preview : false;\n var preview = wrapper.lastChild;\n\n // Turn off side by side if needed\n var sidebyside = cm.getWrapperElement().nextSibling;\n if (sidebyside.classList.contains('editor-preview-active-side')) toggleSideBySide(editor);\n if (!preview || !preview.classList.contains('editor-preview-full')) {\n preview = document.createElement('div');\n preview.className = 'editor-preview-full';\n if (editor.options.previewClass) {\n if (Array.isArray(editor.options.previewClass)) {\n for (var i = 0; i < editor.options.previewClass.length; i++) {\n preview.classList.add(editor.options.previewClass[i]);\n }\n } else if (typeof editor.options.previewClass === 'string') {\n preview.classList.add(editor.options.previewClass);\n }\n }\n wrapper.appendChild(preview);\n }\n if (preview.classList.contains('editor-preview-active')) {\n preview.classList.remove('editor-preview-active');\n if (toolbar) {\n toolbar.classList.remove('active');\n toolbar_div.classList.remove('disabled-for-preview');\n }\n } else {\n // When the preview button is clicked for the first time,\n // give some time for the transition from editor.css to fire and the view to slide from right to left,\n // instead of just appearing.\n setTimeout(function () {\n preview.classList.add('editor-preview-active');\n }, 1);\n if (toolbar) {\n toolbar.classList.add('active');\n toolbar_div.classList.add('disabled-for-preview');\n }\n }\n var preview_result = editor.options.previewRender(editor.value(), preview);\n if (preview_result !== null) {\n preview.innerHTML = preview_result;\n }\n}\nfunction _replaceSelection(cm, active, startEnd, url) {\n if (cm.getWrapperElement().lastChild.classList.contains('editor-preview-active')) return;\n var text;\n var start = startEnd[0];\n var end = startEnd[1];\n var startPoint = {},\n endPoint = {};\n Object.assign(startPoint, cm.getCursor('start'));\n Object.assign(endPoint, cm.getCursor('end'));\n if (url) {\n start = start.replace('#url#', url); // url is in start for upload-image\n end = end.replace('#url#', url);\n }\n if (active) {\n text = cm.getLine(startPoint.line);\n start = text.slice(0, startPoint.ch);\n end = text.slice(startPoint.ch);\n cm.replaceRange(start + end, {\n line: startPoint.line,\n ch: 0\n });\n } else {\n text = cm.getSelection();\n cm.replaceSelection(start + text + end);\n startPoint.ch += start.length;\n if (startPoint !== endPoint) {\n endPoint.ch += start.length;\n }\n }\n cm.setSelection(startPoint, endPoint);\n cm.focus();\n}\nfunction _toggleHeading(cm, direction, size) {\n if (cm.getWrapperElement().lastChild.classList.contains('editor-preview-active')) return;\n var startPoint = cm.getCursor('start');\n var endPoint = cm.getCursor('end');\n for (var i = startPoint.line; i <= endPoint.line; i++) {\n (function (i) {\n var text = cm.getLine(i);\n var currHeadingLevel = text.search(/[^#]/);\n if (direction !== undefined) {\n if (currHeadingLevel <= 0) {\n if (direction == 'bigger') {\n text = '###### ' + text;\n } else {\n text = '# ' + text;\n }\n } else if (currHeadingLevel == 6 && direction == 'smaller') {\n text = text.substr(7);\n } else if (currHeadingLevel == 1 && direction == 'bigger') {\n text = text.substr(2);\n } else {\n if (direction == 'bigger') {\n text = text.substr(1);\n } else {\n text = '#' + text;\n }\n }\n } else {\n if (currHeadingLevel <= 0) {\n text = '#'.repeat(size) + ' ' + text;\n } else if (currHeadingLevel == size) {\n text = text.substr(currHeadingLevel + 1);\n } else {\n text = '#'.repeat(size) + ' ' + text.substr(currHeadingLevel + 1);\n }\n }\n cm.replaceRange(text, {\n line: i,\n ch: 0\n }, {\n line: i,\n ch: 99999999999999\n });\n })(i);\n }\n cm.focus();\n}\nfunction _toggleLine(cm, name, liststyle) {\n if (cm.getWrapperElement().lastChild.classList.contains('editor-preview-active')) return;\n var listRegexp = /^(\\s*)(\\*|-|\\+|\\d*\\.)(\\s+)/;\n var whitespacesRegexp = /^\\s*/;\n var stat = getState(cm);\n var startPoint = cm.getCursor('start');\n var endPoint = cm.getCursor('end');\n var repl = {\n 'quote': /^(\\s*)>\\s+/,\n 'unordered-list': listRegexp,\n 'ordered-list': listRegexp\n };\n var _getChar = function (name, i) {\n var map = {\n 'quote': '>',\n 'unordered-list': liststyle,\n 'ordered-list': '%%i.'\n };\n return map[name].replace('%%i', i);\n };\n var _checkChar = function (name, char) {\n var map = {\n 'quote': '>',\n 'unordered-list': '\\\\' + liststyle,\n 'ordered-list': '\\\\d+.'\n };\n var rt = new RegExp(map[name]);\n return char && rt.test(char);\n };\n var _toggle = function (name, text, untoggleOnly) {\n var arr = listRegexp.exec(text);\n var char = _getChar(name, line);\n if (arr !== null) {\n if (_checkChar(name, arr[2])) {\n char = '';\n }\n text = arr[1] + char + arr[3] + text.replace(whitespacesRegexp, '').replace(repl[name], '$1');\n } else if (untoggleOnly == false) {\n text = char + ' ' + text;\n }\n return text;\n };\n var line = 1;\n for (var i = startPoint.line; i <= endPoint.line; i++) {\n (function (i) {\n var text = cm.getLine(i);\n if (stat[name]) {\n text = text.replace(repl[name], '$1');\n } else {\n // If we're toggling unordered-list formatting, check if the current line\n // is part of an ordered-list, and if so, untoggle that first.\n // Workaround for https://github.com/Ionaru/easy-markdown-editor/issues/92\n if (name == 'unordered-list') {\n text = _toggle('ordered-list', text, true);\n }\n text = _toggle(name, text, false);\n line += 1;\n }\n cm.replaceRange(text, {\n line: i,\n ch: 0\n }, {\n line: i,\n ch: 99999999999999\n });\n })(i);\n }\n cm.focus();\n}\n\n/**\n * @param {EasyMDE} editor\n * @param {'link' | 'image'} type\n * @param {string} startEnd\n * @param {string} url\n */\nfunction _toggleLink(editor, type, startEnd, url) {\n if (!editor.codemirror || editor.isPreviewActive()) {\n return;\n }\n var cm = editor.codemirror;\n var stat = getState(cm);\n var active = stat[type];\n if (!active) {\n _replaceSelection(cm, active, startEnd, url);\n return;\n }\n var startPoint = cm.getCursor('start');\n var endPoint = cm.getCursor('end');\n var text = cm.getLine(startPoint.line);\n var start = text.slice(0, startPoint.ch);\n var end = text.slice(startPoint.ch);\n if (type == 'link') {\n start = start.replace(/(.*)[^!]\\[/, '$1');\n } else if (type == 'image') {\n start = start.replace(/(.*)!\\[$/, '$1');\n }\n end = end.replace(/]\\(.*?\\)/, '');\n cm.replaceRange(start + end, {\n line: startPoint.line,\n ch: 0\n }, {\n line: startPoint.line,\n ch: 99999999999999\n });\n startPoint.ch -= startEnd[0].length;\n if (startPoint !== endPoint) {\n endPoint.ch -= startEnd[0].length;\n }\n cm.setSelection(startPoint, endPoint);\n cm.focus();\n}\n\n/**\n * @param {EasyMDE} editor\n */\nfunction _toggleBlock(editor, type, start_chars, end_chars) {\n if (!editor.codemirror || editor.isPreviewActive()) {\n return;\n }\n end_chars = typeof end_chars === 'undefined' ? start_chars : end_chars;\n var cm = editor.codemirror;\n var stat = getState(cm);\n var text;\n var start = start_chars;\n var end = end_chars;\n var startPoint = cm.getCursor('start');\n var endPoint = cm.getCursor('end');\n if (stat[type]) {\n text = cm.getLine(startPoint.line);\n start = text.slice(0, startPoint.ch);\n end = text.slice(startPoint.ch);\n if (type == 'bold') {\n start = start.replace(/(\\*\\*|__)(?![\\s\\S]*(\\*\\*|__))/, '');\n end = end.replace(/(\\*\\*|__)/, '');\n } else if (type == 'italic') {\n start = start.replace(/(\\*|_)(?![\\s\\S]*(\\*|_))/, '');\n end = end.replace(/(\\*|_)/, '');\n } else if (type == 'strikethrough') {\n start = start.replace(/(\\*\\*|~~)(?![\\s\\S]*(\\*\\*|~~))/, '');\n end = end.replace(/(\\*\\*|~~)/, '');\n }\n cm.replaceRange(start + end, {\n line: startPoint.line,\n ch: 0\n }, {\n line: startPoint.line,\n ch: 99999999999999\n });\n if (type == 'bold' || type == 'strikethrough') {\n startPoint.ch -= 2;\n if (startPoint !== endPoint) {\n endPoint.ch -= 2;\n }\n } else if (type == 'italic') {\n startPoint.ch -= 1;\n if (startPoint !== endPoint) {\n endPoint.ch -= 1;\n }\n }\n } else {\n text = cm.getSelection();\n if (type == 'bold') {\n text = text.split('**').join('');\n text = text.split('__').join('');\n } else if (type == 'italic') {\n text = text.split('*').join('');\n text = text.split('_').join('');\n } else if (type == 'strikethrough') {\n text = text.split('~~').join('');\n }\n cm.replaceSelection(start + text + end);\n startPoint.ch += start_chars.length;\n endPoint.ch = startPoint.ch + text.length;\n }\n cm.setSelection(startPoint, endPoint);\n cm.focus();\n}\nfunction _cleanBlock(cm) {\n if (cm.getWrapperElement().lastChild.classList.contains('editor-preview-active')) return;\n var startPoint = cm.getCursor('start');\n var endPoint = cm.getCursor('end');\n var text;\n for (var line = startPoint.line; line <= endPoint.line; line++) {\n text = cm.getLine(line);\n text = text.replace(/^[ ]*([# ]+|\\*|-|[> ]+|[0-9]+(.|\\)))[ ]*/, '');\n cm.replaceRange(text, {\n line: line,\n ch: 0\n }, {\n line: line,\n ch: 99999999999999\n });\n }\n}\n\n/**\n * Convert a number of bytes to a human-readable file size. If you desire\n * to add a space between the value and the unit, you need to add this space\n * to the given units.\n * @param bytes {number} A number of bytes, as integer. Ex: 421137\n * @param units {number[]} An array of human-readable units, ie. [' B', ' K', ' MB']\n * @returns string A human-readable file size. Ex: '412 KB'\n */\nfunction humanFileSize(bytes, units) {\n if (Math.abs(bytes) < 1024) {\n return '' + bytes + units[0];\n }\n var u = 0;\n do {\n bytes /= 1024;\n ++u;\n } while (Math.abs(bytes) >= 1024 && u < units.length);\n return '' + bytes.toFixed(1) + units[u];\n}\n\n// Merge the properties of one object into another.\nfunction _mergeProperties(target, source) {\n for (var property in source) {\n if (Object.prototype.hasOwnProperty.call(source, property)) {\n if (source[property] instanceof Array) {\n target[property] = source[property].concat(target[property] instanceof Array ? target[property] : []);\n } else if (source[property] !== null && typeof source[property] === 'object' && source[property].constructor === Object) {\n target[property] = _mergeProperties(target[property] || {}, source[property]);\n } else {\n target[property] = source[property];\n }\n }\n }\n return target;\n}\n\n// Merge an arbitrary number of objects into one.\nfunction extend(target) {\n for (var i = 1; i < arguments.length; i++) {\n target = _mergeProperties(target, arguments[i]);\n }\n return target;\n}\n\n/* The right word count in respect for CJK. */\nfunction wordCount(data) {\n var pattern = /[a-zA-Z0-9_\\u00A0-\\u02AF\\u0392-\\u03c9\\u0410-\\u04F9]+|[\\u4E00-\\u9FFF\\u3400-\\u4dbf\\uf900-\\ufaff\\u3040-\\u309f\\uac00-\\ud7af]+/g;\n var m = data.match(pattern);\n var count = 0;\n if (m === null) return count;\n for (var i = 0; i < m.length; i++) {\n if (m[i].charCodeAt(0) >= 0x4E00) {\n count += m[i].length;\n } else {\n count += 1;\n }\n }\n return count;\n}\nvar iconClassMap = {\n 'bold': 'fa fa-bold',\n 'italic': 'fa fa-italic',\n 'strikethrough': 'fa fa-strikethrough',\n 'heading': 'fa fa-header fa-heading',\n 'heading-smaller': 'fa fa-header fa-heading header-smaller',\n 'heading-bigger': 'fa fa-header fa-heading header-bigger',\n 'heading-1': 'fa fa-header fa-heading header-1',\n 'heading-2': 'fa fa-header fa-heading header-2',\n 'heading-3': 'fa fa-header fa-heading header-3',\n 'code': 'fa fa-code',\n 'quote': 'fa fa-quote-left',\n 'ordered-list': 'fa fa-list-ol',\n 'unordered-list': 'fa fa-list-ul',\n 'clean-block': 'fa fa-eraser',\n 'link': 'fa fa-link',\n 'image': 'fa fa-image',\n 'upload-image': 'fa fa-image',\n 'table': 'fa fa-table',\n 'horizontal-rule': 'fa fa-minus',\n 'preview': 'fa fa-eye',\n 'side-by-side': 'fa fa-columns',\n 'fullscreen': 'fa fa-arrows-alt',\n 'guide': 'fa fa-question-circle',\n 'undo': 'fa fa-undo',\n 'redo': 'fa fa-repeat fa-redo'\n};\nvar toolbarBuiltInButtons = {\n 'bold': {\n name: 'bold',\n action: toggleBold,\n className: iconClassMap['bold'],\n title: 'Bold',\n default: true\n },\n 'italic': {\n name: 'italic',\n action: toggleItalic,\n className: iconClassMap['italic'],\n title: 'Italic',\n default: true\n },\n 'strikethrough': {\n name: 'strikethrough',\n action: toggleStrikethrough,\n className: iconClassMap['strikethrough'],\n title: 'Strikethrough'\n },\n 'heading': {\n name: 'heading',\n action: toggleHeadingSmaller,\n className: iconClassMap['heading'],\n title: 'Heading',\n default: true\n },\n 'heading-smaller': {\n name: 'heading-smaller',\n action: toggleHeadingSmaller,\n className: iconClassMap['heading-smaller'],\n title: 'Smaller Heading'\n },\n 'heading-bigger': {\n name: 'heading-bigger',\n action: toggleHeadingBigger,\n className: iconClassMap['heading-bigger'],\n title: 'Bigger Heading'\n },\n 'heading-1': {\n name: 'heading-1',\n action: toggleHeading1,\n className: iconClassMap['heading-1'],\n title: 'Big Heading'\n },\n 'heading-2': {\n name: 'heading-2',\n action: toggleHeading2,\n className: iconClassMap['heading-2'],\n title: 'Medium Heading'\n },\n 'heading-3': {\n name: 'heading-3',\n action: toggleHeading3,\n className: iconClassMap['heading-3'],\n title: 'Small Heading'\n },\n 'separator-1': {\n name: 'separator-1'\n },\n 'code': {\n name: 'code',\n action: toggleCodeBlock,\n className: iconClassMap['code'],\n title: 'Code'\n },\n 'quote': {\n name: 'quote',\n action: toggleBlockquote,\n className: iconClassMap['quote'],\n title: 'Quote',\n default: true\n },\n 'unordered-list': {\n name: 'unordered-list',\n action: toggleUnorderedList,\n className: iconClassMap['unordered-list'],\n title: 'Generic List',\n default: true\n },\n 'ordered-list': {\n name: 'ordered-list',\n action: toggleOrderedList,\n className: iconClassMap['ordered-list'],\n title: 'Numbered List',\n default: true\n },\n 'clean-block': {\n name: 'clean-block',\n action: cleanBlock,\n className: iconClassMap['clean-block'],\n title: 'Clean block'\n },\n 'separator-2': {\n name: 'separator-2'\n },\n 'link': {\n name: 'link',\n action: drawLink,\n className: iconClassMap['link'],\n title: 'Create Link',\n default: true\n },\n 'image': {\n name: 'image',\n action: drawImage,\n className: iconClassMap['image'],\n title: 'Insert Image',\n default: true\n },\n 'upload-image': {\n name: 'upload-image',\n action: drawUploadedImage,\n className: iconClassMap['upload-image'],\n title: 'Import an image'\n },\n 'table': {\n name: 'table',\n action: drawTable,\n className: iconClassMap['table'],\n title: 'Insert Table'\n },\n 'horizontal-rule': {\n name: 'horizontal-rule',\n action: drawHorizontalRule,\n className: iconClassMap['horizontal-rule'],\n title: 'Insert Horizontal Line'\n },\n 'separator-3': {\n name: 'separator-3'\n },\n 'preview': {\n name: 'preview',\n action: togglePreview,\n className: iconClassMap['preview'],\n noDisable: true,\n title: 'Toggle Preview',\n default: true\n },\n 'side-by-side': {\n name: 'side-by-side',\n action: toggleSideBySide,\n className: iconClassMap['side-by-side'],\n noDisable: true,\n noMobile: true,\n title: 'Toggle Side by Side',\n default: true\n },\n 'fullscreen': {\n name: 'fullscreen',\n action: toggleFullScreen,\n className: iconClassMap['fullscreen'],\n noDisable: true,\n noMobile: true,\n title: 'Toggle Fullscreen',\n default: true\n },\n 'separator-4': {\n name: 'separator-4'\n },\n 'guide': {\n name: 'guide',\n action: 'https://www.markdownguide.org/basic-syntax/',\n className: iconClassMap['guide'],\n noDisable: true,\n title: 'Markdown Guide',\n default: true\n },\n 'separator-5': {\n name: 'separator-5'\n },\n 'undo': {\n name: 'undo',\n action: undo,\n className: iconClassMap['undo'],\n noDisable: true,\n title: 'Undo'\n },\n 'redo': {\n name: 'redo',\n action: redo,\n className: iconClassMap['redo'],\n noDisable: true,\n title: 'Redo'\n }\n};\nvar insertTexts = {\n link: ['[', '](#url#)'],\n image: ['![', '](#url#)'],\n uploadedImage: ['![](#url#)', ''],\n // uploadedImage: ['![](#url#)\\n', ''], // TODO: New line insertion doesn't work here.\n table: ['', '\\n\\n| Column 1 | Column 2 | Column 3 |\\n| -------- | -------- | -------- |\\n| Text | Text | Text |\\n\\n'],\n horizontalRule: ['', '\\n\\n-----\\n\\n']\n};\nvar promptTexts = {\n link: 'URL for the link:',\n image: 'URL of the image:'\n};\nvar timeFormat = {\n locale: 'en-US',\n format: {\n hour: '2-digit',\n minute: '2-digit'\n }\n};\nvar blockStyles = {\n 'bold': '**',\n 'code': '```',\n 'italic': '*'\n};\n\n/**\n * Texts displayed to the user (mainly on the status bar) for the import image\n * feature. Can be used for customization or internationalization.\n */\nvar imageTexts = {\n sbInit: 'Attach files by drag and dropping or pasting from clipboard.',\n sbOnDragEnter: 'Drop image to upload it.',\n sbOnDrop: 'Uploading image #images_names#...',\n sbProgress: 'Uploading #file_name#: #progress#%',\n sbOnUploaded: 'Uploaded #image_name#',\n sizeUnits: ' B, KB, MB'\n};\n\n/**\n * Errors displayed to the user, using the `errorCallback` option. Can be used for\n * customization or internationalization.\n */\nvar errorMessages = {\n noFileGiven: 'You must select a file.',\n typeNotAllowed: 'This image type is not allowed.',\n fileTooLarge: 'Image #image_name# is too big (#image_size#).\\n' + 'Maximum file size is #image_max_size#.',\n importError: 'Something went wrong when uploading the image #image_name#.'\n};\n\n/**\n * Interface of EasyMDE.\n */\nfunction EasyMDE(options) {\n // Handle options parameter\n options = options || {};\n\n // Used later to refer to it\"s parent\n options.parent = this;\n\n // Check if Font Awesome needs to be auto downloaded\n var autoDownloadFA = true;\n if (options.autoDownloadFontAwesome === false) {\n autoDownloadFA = false;\n }\n if (options.autoDownloadFontAwesome !== true) {\n var styleSheets = document.styleSheets;\n for (var i = 0; i < styleSheets.length; i++) {\n if (!styleSheets[i].href) continue;\n if (styleSheets[i].href.indexOf('//maxcdn.bootstrapcdn.com/font-awesome/') > -1) {\n autoDownloadFA = false;\n }\n }\n }\n if (autoDownloadFA) {\n var link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = 'https://maxcdn.bootstrapcdn.com/font-awesome/latest/css/font-awesome.min.css';\n document.getElementsByTagName('head')[0].appendChild(link);\n }\n\n // Find the textarea to use\n if (options.element) {\n this.element = options.element;\n } else if (options.element === null) {\n // This means that the element option was specified, but no element was found\n console.log('EasyMDE: Error. No element was found.');\n return;\n }\n\n // Handle toolbar\n if (options.toolbar === undefined) {\n // Initialize\n options.toolbar = [];\n\n // Loop over the built in buttons, to get the preferred order\n for (var key in toolbarBuiltInButtons) {\n if (Object.prototype.hasOwnProperty.call(toolbarBuiltInButtons, key)) {\n if (key.indexOf('separator-') != -1) {\n options.toolbar.push('|');\n }\n if (toolbarBuiltInButtons[key].default === true || options.showIcons && options.showIcons.constructor === Array && options.showIcons.indexOf(key) != -1) {\n options.toolbar.push(key);\n }\n }\n }\n }\n\n // Editor preview styling class.\n if (!Object.prototype.hasOwnProperty.call(options, 'previewClass')) {\n options.previewClass = 'editor-preview';\n }\n\n // Handle status bar\n if (!Object.prototype.hasOwnProperty.call(options, 'status')) {\n options.status = ['autosave', 'lines', 'words', 'cursor'];\n if (options.uploadImage) {\n options.status.unshift('upload-image');\n }\n }\n\n // Add default preview rendering function\n if (!options.previewRender) {\n options.previewRender = function (plainText) {\n // Note: \"this\" refers to the options object\n return this.parent.markdown(plainText);\n };\n }\n\n // Set default options for parsing config\n options.parsingConfig = extend({\n highlightFormatting: true // needed for toggleCodeBlock to detect types of code\n }, options.parsingConfig || {});\n\n // Merging the insertTexts, with the given options\n options.insertTexts = extend({}, insertTexts, options.insertTexts || {});\n\n // Merging the promptTexts, with the given options\n options.promptTexts = extend({}, promptTexts, options.promptTexts || {});\n\n // Merging the blockStyles, with the given options\n options.blockStyles = extend({}, blockStyles, options.blockStyles || {});\n if (options.autosave != undefined) {\n // Merging the Autosave timeFormat, with the given options\n options.autosave.timeFormat = extend({}, timeFormat, options.autosave.timeFormat || {});\n }\n options.iconClassMap = extend({}, iconClassMap, options.iconClassMap || {});\n\n // Merging the shortcuts, with the given options\n options.shortcuts = extend({}, shortcuts, options.shortcuts || {});\n options.maxHeight = options.maxHeight || undefined;\n options.direction = options.direction || 'ltr';\n if (typeof options.maxHeight !== 'undefined') {\n // Min and max height are equal if maxHeight is set\n options.minHeight = options.maxHeight;\n } else {\n options.minHeight = options.minHeight || '300px';\n }\n options.errorCallback = options.errorCallback || function (errorMessage) {\n alert(errorMessage);\n };\n\n // Import-image default configuration\n options.uploadImage = options.uploadImage || false;\n options.imageMaxSize = options.imageMaxSize || 2097152; // 1024 * 1024 * 2\n options.imageAccept = options.imageAccept || 'image/png, image/jpeg, image/gif, image/avif';\n options.imageTexts = extend({}, imageTexts, options.imageTexts || {});\n options.errorMessages = extend({}, errorMessages, options.errorMessages || {});\n options.imagePathAbsolute = options.imagePathAbsolute || false;\n options.imageCSRFName = options.imageCSRFName || 'csrfmiddlewaretoken';\n options.imageCSRFHeader = options.imageCSRFHeader || false;\n\n // Change unique_id to uniqueId for backwards compatibility\n if (options.autosave != undefined && options.autosave.unique_id != undefined && options.autosave.unique_id != '') options.autosave.uniqueId = options.autosave.unique_id;\n\n // If overlay mode is specified and combine is not provided, default it to true\n if (options.overlayMode && options.overlayMode.combine === undefined) {\n options.overlayMode.combine = true;\n }\n\n // Update this options\n this.options = options;\n\n // Auto render\n this.render();\n\n // The codemirror component is only available after rendering\n // so, the setter for the initialValue can only run after\n // the element has been rendered\n if (options.initialValue && (!this.options.autosave || this.options.autosave.foundSavedValue !== true)) {\n this.value(options.initialValue);\n }\n if (options.uploadImage) {\n var self = this;\n this.codemirror.on('dragenter', function (cm, event) {\n self.updateStatusBar('upload-image', self.options.imageTexts.sbOnDragEnter);\n event.stopPropagation();\n event.preventDefault();\n });\n this.codemirror.on('dragend', function (cm, event) {\n self.updateStatusBar('upload-image', self.options.imageTexts.sbInit);\n event.stopPropagation();\n event.preventDefault();\n });\n this.codemirror.on('dragleave', function (cm, event) {\n self.updateStatusBar('upload-image', self.options.imageTexts.sbInit);\n event.stopPropagation();\n event.preventDefault();\n });\n this.codemirror.on('dragover', function (cm, event) {\n self.updateStatusBar('upload-image', self.options.imageTexts.sbOnDragEnter);\n event.stopPropagation();\n event.preventDefault();\n });\n this.codemirror.on('drop', function (cm, event) {\n event.stopPropagation();\n event.preventDefault();\n if (options.imageUploadFunction) {\n self.uploadImagesUsingCustomFunction(options.imageUploadFunction, event.dataTransfer.files);\n } else {\n self.uploadImages(event.dataTransfer.files);\n }\n });\n this.codemirror.on('paste', function (cm, event) {\n if (options.imageUploadFunction) {\n self.uploadImagesUsingCustomFunction(options.imageUploadFunction, event.clipboardData.files);\n } else {\n self.uploadImages(event.clipboardData.files);\n }\n });\n }\n}\n\n/**\n * Upload asynchronously a list of images to a server.\n *\n * Can be triggered by:\n * - drag&drop;\n * - copy-paste;\n * - the browse-file window (opened when the user clicks on the *upload-image* icon).\n * @param {FileList} files The files to upload the the server.\n * @param [onSuccess] {function} see EasyMDE.prototype.uploadImage\n * @param [onError] {function} see EasyMDE.prototype.uploadImage\n */\nEasyMDE.prototype.uploadImages = function (files, onSuccess, onError) {\n if (files.length === 0) {\n return;\n }\n var names = [];\n for (var i = 0; i < files.length; i++) {\n names.push(files[i].name);\n this.uploadImage(files[i], onSuccess, onError);\n }\n this.updateStatusBar('upload-image', this.options.imageTexts.sbOnDrop.replace('#images_names#', names.join(', ')));\n};\n\n/**\n * Upload asynchronously a list of images to a server.\n *\n * Can be triggered by:\n * - drag&drop;\n * - copy-paste;\n * - the browse-file window (opened when the user clicks on the *upload-image* icon).\n * @param imageUploadFunction {Function} The custom function to upload the image passed in options.\n * @param {FileList} files The files to upload the the server.\n */\nEasyMDE.prototype.uploadImagesUsingCustomFunction = function (imageUploadFunction, files) {\n if (files.length === 0) {\n return;\n }\n var names = [];\n for (var i = 0; i < files.length; i++) {\n names.push(files[i].name);\n this.uploadImageUsingCustomFunction(imageUploadFunction, files[i]);\n }\n this.updateStatusBar('upload-image', this.options.imageTexts.sbOnDrop.replace('#images_names#', names.join(', ')));\n};\n\n/**\n * Update an item in the status bar.\n * @param itemName {string} The name of the item to update (ie. 'upload-image', 'autosave', etc.).\n * @param content {string} the new content of the item to write in the status bar.\n */\nEasyMDE.prototype.updateStatusBar = function (itemName, content) {\n if (!this.gui.statusbar) {\n return;\n }\n var matchingClasses = this.gui.statusbar.getElementsByClassName(itemName);\n if (matchingClasses.length === 1) {\n this.gui.statusbar.getElementsByClassName(itemName)[0].textContent = content;\n } else if (matchingClasses.length === 0) {\n console.log('EasyMDE: status bar item ' + itemName + ' was not found.');\n } else {\n console.log('EasyMDE: Several status bar items named ' + itemName + ' was found.');\n }\n};\n\n/**\n * Default markdown render.\n */\nEasyMDE.prototype.markdown = function (text) {\n if (marked) {\n // Initialize\n var markedOptions;\n if (this.options && this.options.renderingConfig && this.options.renderingConfig.markedOptions) {\n markedOptions = this.options.renderingConfig.markedOptions;\n } else {\n markedOptions = {};\n }\n\n // Update options\n if (this.options && this.options.renderingConfig && this.options.renderingConfig.singleLineBreaks === false) {\n markedOptions.breaks = false;\n } else {\n markedOptions.breaks = true;\n }\n if (this.options && this.options.renderingConfig && this.options.renderingConfig.codeSyntaxHighlighting === true) {\n /* Get HLJS from config or window */\n var hljs = this.options.renderingConfig.hljs || window.hljs;\n\n /* Check if HLJS loaded */\n if (hljs) {\n markedOptions.highlight = function (code, language) {\n if (language && hljs.getLanguage(language)) {\n return hljs.highlight(language, code).value;\n } else {\n return hljs.highlightAuto(code).value;\n }\n };\n }\n }\n\n // Set options\n marked.setOptions(markedOptions);\n\n // Convert the markdown to HTML\n var htmlText = marked.parse(text);\n\n // Sanitize HTML\n if (this.options.renderingConfig && typeof this.options.renderingConfig.sanitizerFunction === 'function') {\n htmlText = this.options.renderingConfig.sanitizerFunction.call(this, htmlText);\n }\n\n // Edit the HTML anchors to add 'target=\"_blank\"' by default.\n htmlText = addAnchorTargetBlank(htmlText);\n\n // Remove list-style when rendering checkboxes\n htmlText = removeListStyleWhenCheckbox(htmlText);\n return htmlText;\n }\n};\n\n/**\n * Render editor to the given element.\n */\nEasyMDE.prototype.render = function (el) {\n if (!el) {\n el = this.element || document.getElementsByTagName('textarea')[0];\n }\n if (this._rendered && this._rendered === el) {\n // Already rendered.\n return;\n }\n this.element = el;\n var options = this.options;\n var self = this;\n var keyMaps = {};\n for (var key in options.shortcuts) {\n // null stands for \"do not bind this command\"\n if (options.shortcuts[key] !== null && bindings[key] !== null) {\n (function (key) {\n keyMaps[fixShortcut(options.shortcuts[key])] = function () {\n var action = bindings[key];\n if (typeof action === 'function') {\n action(self);\n } else if (typeof action === 'string') {\n window.open(action, '_blank');\n }\n };\n })(key);\n }\n }\n keyMaps['Enter'] = 'newlineAndIndentContinueMarkdownList';\n keyMaps['Tab'] = 'tabAndIndentMarkdownList';\n keyMaps['Shift-Tab'] = 'shiftTabAndUnindentMarkdownList';\n keyMaps['Esc'] = function (cm) {\n if (cm.getOption('fullScreen')) toggleFullScreen(self);\n };\n this.documentOnKeyDown = function (e) {\n e = e || window.event;\n if (e.keyCode == 27) {\n if (self.codemirror.getOption('fullScreen')) toggleFullScreen(self);\n }\n };\n document.addEventListener('keydown', this.documentOnKeyDown, false);\n var mode, backdrop;\n\n // CodeMirror overlay mode\n if (options.overlayMode) {\n CodeMirror.defineMode('overlay-mode', function (config) {\n return CodeMirror.overlayMode(CodeMirror.getMode(config, options.spellChecker !== false ? 'spell-checker' : 'gfm'), options.overlayMode.mode, options.overlayMode.combine);\n });\n mode = 'overlay-mode';\n backdrop = options.parsingConfig;\n backdrop.gitHubSpice = false;\n } else {\n mode = options.parsingConfig;\n mode.name = 'gfm';\n mode.gitHubSpice = false;\n }\n if (options.spellChecker !== false) {\n mode = 'spell-checker';\n backdrop = options.parsingConfig;\n backdrop.name = 'gfm';\n backdrop.gitHubSpice = false;\n if (typeof options.spellChecker === 'function') {\n options.spellChecker({\n codeMirrorInstance: CodeMirror\n });\n } else {\n CodeMirrorSpellChecker({\n codeMirrorInstance: CodeMirror\n });\n }\n }\n\n // eslint-disable-next-line no-unused-vars\n function configureMouse(cm, repeat, event) {\n return {\n addNew: false\n };\n }\n this.codemirror = CodeMirror.fromTextArea(el, {\n mode: mode,\n backdrop: backdrop,\n theme: options.theme != undefined ? options.theme : 'easymde',\n tabSize: options.tabSize != undefined ? options.tabSize : 2,\n indentUnit: options.tabSize != undefined ? options.tabSize : 2,\n indentWithTabs: options.indentWithTabs === false ? false : true,\n lineNumbers: options.lineNumbers === true ? true : false,\n autofocus: options.autofocus === true ? true : false,\n extraKeys: keyMaps,\n direction: options.direction,\n lineWrapping: options.lineWrapping === false ? false : true,\n allowDropFileTypes: ['text/plain'],\n placeholder: options.placeholder || el.getAttribute('placeholder') || '',\n styleSelectedText: options.styleSelectedText != undefined ? options.styleSelectedText : !isMobile(),\n scrollbarStyle: options.scrollbarStyle != undefined ? options.scrollbarStyle : 'native',\n configureMouse: configureMouse,\n inputStyle: options.inputStyle != undefined ? options.inputStyle : isMobile() ? 'contenteditable' : 'textarea',\n spellcheck: options.nativeSpellcheck != undefined ? options.nativeSpellcheck : true,\n autoRefresh: options.autoRefresh != undefined ? options.autoRefresh : false\n });\n this.codemirror.getScrollerElement().style.minHeight = options.minHeight;\n if (typeof options.maxHeight !== 'undefined') {\n this.codemirror.getScrollerElement().style.height = options.maxHeight;\n }\n if (options.forceSync === true) {\n var cm = this.codemirror;\n cm.on('change', function () {\n cm.save();\n });\n }\n this.gui = {};\n\n // Wrap Codemirror with container before create toolbar, etc,\n // to use with sideBySideFullscreen option.\n var easyMDEContainer = document.createElement('div');\n easyMDEContainer.classList.add('EasyMDEContainer');\n easyMDEContainer.setAttribute('role', 'application');\n var cmWrapper = this.codemirror.getWrapperElement();\n cmWrapper.parentNode.insertBefore(easyMDEContainer, cmWrapper);\n easyMDEContainer.appendChild(cmWrapper);\n if (options.toolbar !== false) {\n this.gui.toolbar = this.createToolbar();\n }\n if (options.status !== false) {\n this.gui.statusbar = this.createStatusbar();\n }\n if (options.autosave != undefined && options.autosave.enabled === true) {\n this.autosave(); // use to load localstorage content\n this.codemirror.on('change', function () {\n clearTimeout(self._autosave_timeout);\n self._autosave_timeout = setTimeout(function () {\n self.autosave();\n }, self.options.autosave.submit_delay || self.options.autosave.delay || 1000);\n });\n }\n function calcHeight(naturalWidth, naturalHeight) {\n var height;\n var viewportWidth = window.getComputedStyle(document.querySelector('.CodeMirror-sizer')).width.replace('px', '');\n if (naturalWidth < viewportWidth) {\n height = naturalHeight + 'px';\n } else {\n height = naturalHeight / naturalWidth * 100 + '%';\n }\n return height;\n }\n var _vm = this;\n function assignImageBlockAttributes(parentEl, img) {\n parentEl.setAttribute('data-img-src', img.url);\n parentEl.setAttribute('style', '--bg-image:url(' + img.url + ');--width:' + img.naturalWidth + 'px;--height:' + calcHeight(img.naturalWidth, img.naturalHeight));\n _vm.codemirror.setSize();\n }\n function handleImages() {\n if (!options.previewImagesInEditor) {\n return;\n }\n easyMDEContainer.querySelectorAll('.cm-image-marker').forEach(function (e) {\n var parentEl = e.parentElement;\n if (!parentEl.innerText.match(/^!\\[.*?\\]\\(.*\\)/g)) {\n // if img pasted on the same line with other text, don't preview, preview only images on separate line\n return;\n }\n if (!parentEl.hasAttribute('data-img-src')) {\n var srcAttr = parentEl.innerText.match('\\\\((.*)\\\\)'); // might require better parsing according to markdown spec\n if (!window.EMDEimagesCache) {\n window.EMDEimagesCache = {};\n }\n if (srcAttr && srcAttr.length >= 2) {\n var keySrc = srcAttr[1];\n if (options.imagesPreviewHandler) {\n var newSrc = options.imagesPreviewHandler(srcAttr[1]);\n // defensive check making sure the handler provided by the user returns a string\n if (typeof newSrc === 'string') {\n keySrc = newSrc;\n }\n }\n if (!window.EMDEimagesCache[keySrc]) {\n var img = document.createElement('img');\n img.onload = function () {\n window.EMDEimagesCache[keySrc] = {\n naturalWidth: img.naturalWidth,\n naturalHeight: img.naturalHeight,\n url: keySrc\n };\n assignImageBlockAttributes(parentEl, window.EMDEimagesCache[keySrc]);\n };\n img.src = keySrc;\n } else {\n assignImageBlockAttributes(parentEl, window.EMDEimagesCache[keySrc]);\n }\n }\n }\n });\n }\n this.codemirror.on('update', function () {\n handleImages();\n });\n this.gui.sideBySide = this.createSideBySide();\n this._rendered = this.element;\n if (options.autofocus === true || el.autofocus) {\n this.codemirror.focus();\n }\n\n // Fixes CodeMirror bug (#344)\n var temp_cm = this.codemirror;\n setTimeout(function () {\n temp_cm.refresh();\n }.bind(temp_cm), 0);\n};\nEasyMDE.prototype.cleanup = function () {\n document.removeEventListener('keydown', this.documentOnKeyDown);\n};\n\n// Safari, in Private Browsing Mode, looks like it supports localStorage but all calls to setItem throw QuotaExceededError. We're going to detect this and set a variable accordingly.\nfunction isLocalStorageAvailable() {\n if (typeof localStorage === 'object') {\n try {\n localStorage.setItem('smde_localStorage', 1);\n localStorage.removeItem('smde_localStorage');\n } catch (e) {\n return false;\n }\n } else {\n return false;\n }\n return true;\n}\nEasyMDE.prototype.autosave = function () {\n if (isLocalStorageAvailable()) {\n var easyMDE = this;\n if (this.options.autosave.uniqueId == undefined || this.options.autosave.uniqueId == '') {\n console.log('EasyMDE: You must set a uniqueId to use the autosave feature');\n return;\n }\n if (this.options.autosave.binded !== true) {\n if (easyMDE.element.form != null && easyMDE.element.form != undefined) {\n easyMDE.element.form.addEventListener('submit', function () {\n clearTimeout(easyMDE.autosaveTimeoutId);\n easyMDE.autosaveTimeoutId = undefined;\n localStorage.removeItem('smde_' + easyMDE.options.autosave.uniqueId);\n });\n }\n this.options.autosave.binded = true;\n }\n if (this.options.autosave.loaded !== true) {\n if (typeof localStorage.getItem('smde_' + this.options.autosave.uniqueId) == 'string' && localStorage.getItem('smde_' + this.options.autosave.uniqueId) != '') {\n this.codemirror.setValue(localStorage.getItem('smde_' + this.options.autosave.uniqueId));\n this.options.autosave.foundSavedValue = true;\n }\n this.options.autosave.loaded = true;\n }\n var value = easyMDE.value();\n if (value !== '') {\n localStorage.setItem('smde_' + this.options.autosave.uniqueId, value);\n } else {\n localStorage.removeItem('smde_' + this.options.autosave.uniqueId);\n }\n var el = document.getElementById('autosaved');\n if (el != null && el != undefined && el != '') {\n var d = new Date();\n var dd = new Intl.DateTimeFormat([this.options.autosave.timeFormat.locale, 'en-US'], this.options.autosave.timeFormat.format).format(d);\n var save = this.options.autosave.text == undefined ? 'Autosaved: ' : this.options.autosave.text;\n el.innerHTML = save + dd;\n }\n } else {\n console.log('EasyMDE: localStorage not available, cannot autosave');\n }\n};\nEasyMDE.prototype.clearAutosavedValue = function () {\n if (isLocalStorageAvailable()) {\n if (this.options.autosave == undefined || this.options.autosave.uniqueId == undefined || this.options.autosave.uniqueId == '') {\n console.log('EasyMDE: You must set a uniqueId to clear the autosave value');\n return;\n }\n localStorage.removeItem('smde_' + this.options.autosave.uniqueId);\n } else {\n console.log('EasyMDE: localStorage not available, cannot autosave');\n }\n};\n\n/**\n * Open the browse-file window to upload an image to a server.\n * @param [onSuccess] {function} see EasyMDE.prototype.uploadImage\n * @param [onError] {function} see EasyMDE.prototype.uploadImage\n */\nEasyMDE.prototype.openBrowseFileWindow = function (onSuccess, onError) {\n var self = this;\n var imageInput = this.gui.toolbar.getElementsByClassName('imageInput')[0];\n imageInput.click(); //dispatchEvent(new MouseEvent('click')); // replaced with click() for IE11 compatibility.\n function onChange(event) {\n if (self.options.imageUploadFunction) {\n self.uploadImagesUsingCustomFunction(self.options.imageUploadFunction, event.target.files);\n } else {\n self.uploadImages(event.target.files, onSuccess, onError);\n }\n imageInput.removeEventListener('change', onChange);\n }\n imageInput.addEventListener('change', onChange);\n};\n\n/**\n * Upload an image to the server.\n *\n * @param file {File} The image to upload, as a HTML5 File object (https://developer.mozilla.org/en-US/docs/Web/API/File)\n * @param [onSuccess] {function} A callback function to execute after the image has been successfully uploaded, with one parameter:\n * - url (string): The URL of the uploaded image.\n * @param [onError] {function} A callback function to execute when the image upload fails, with one parameter:\n * - error (string): the detailed error to display to the user (based on messages from options.errorMessages).\n */\nEasyMDE.prototype.uploadImage = function (file, onSuccess, onError) {\n var self = this;\n onSuccess = onSuccess || function onSuccess(imageUrl) {\n afterImageUploaded(self, imageUrl);\n };\n function onErrorSup(errorMessage) {\n // show error on status bar and reset after 10000ms\n self.updateStatusBar('upload-image', errorMessage);\n setTimeout(function () {\n self.updateStatusBar('upload-image', self.options.imageTexts.sbInit);\n }, 10000);\n\n // run custom error handler\n if (onError && typeof onError === 'function') {\n onError(errorMessage);\n }\n // run error handler from options, this alerts the message.\n self.options.errorCallback(errorMessage);\n }\n function fillErrorMessage(errorMessage) {\n var units = self.options.imageTexts.sizeUnits.split(',');\n return errorMessage.replace('#image_name#', file.name).replace('#image_size#', humanFileSize(file.size, units)).replace('#image_max_size#', humanFileSize(self.options.imageMaxSize, units));\n }\n if (file.size > this.options.imageMaxSize) {\n onErrorSup(fillErrorMessage(this.options.errorMessages.fileTooLarge));\n return;\n }\n var formData = new FormData();\n formData.append('image', file);\n\n // insert CSRF body token if provided in config.\n if (self.options.imageCSRFToken && !self.options.imageCSRFHeader) {\n formData.append(self.options.imageCSRFName, self.options.imageCSRFToken);\n }\n var request = new XMLHttpRequest();\n request.upload.onprogress = function (event) {\n if (event.lengthComputable) {\n var progress = '' + Math.round(event.loaded * 100 / event.total);\n self.updateStatusBar('upload-image', self.options.imageTexts.sbProgress.replace('#file_name#', file.name).replace('#progress#', progress));\n }\n };\n request.open('POST', this.options.imageUploadEndpoint);\n\n // insert CSRF header token if provided in config.\n if (self.options.imageCSRFToken && self.options.imageCSRFHeader) {\n request.setRequestHeader(self.options.imageCSRFName, self.options.imageCSRFToken);\n }\n request.onload = function () {\n try {\n var response = JSON.parse(this.responseText);\n } catch (error) {\n console.error('EasyMDE: The server did not return a valid json.');\n onErrorSup(fillErrorMessage(self.options.errorMessages.importError));\n return;\n }\n if (this.status === 200 && response && !response.error && response.data && response.data.filePath) {\n onSuccess((self.options.imagePathAbsolute ? '' : window.location.origin + '/') + response.data.filePath);\n } else {\n if (response.error && response.error in self.options.errorMessages) {\n // preformatted error message\n onErrorSup(fillErrorMessage(self.options.errorMessages[response.error]));\n } else if (response.error) {\n // server side generated error message\n onErrorSup(fillErrorMessage(response.error));\n } else {\n //unknown error\n console.error('EasyMDE: Received an unexpected response after uploading the image.' + this.status + ' (' + this.statusText + ')');\n onErrorSup(fillErrorMessage(self.options.errorMessages.importError));\n }\n }\n };\n request.onerror = function (event) {\n console.error('EasyMDE: An unexpected error occurred when trying to upload the image.' + event.target.status + ' (' + event.target.statusText + ')');\n onErrorSup(self.options.errorMessages.importError);\n };\n request.send(formData);\n};\n\n/**\n * Upload an image to the server using a custom upload function.\n *\n * @param imageUploadFunction {Function} The custom function to upload the image passed in options\n * @param file {File} The image to upload, as a HTML5 File object (https://developer.mozilla.org/en-US/docs/Web/API/File).\n */\nEasyMDE.prototype.uploadImageUsingCustomFunction = function (imageUploadFunction, file) {\n var self = this;\n function onSuccess(imageUrl) {\n afterImageUploaded(self, imageUrl);\n }\n function onError(errorMessage) {\n var filledErrorMessage = fillErrorMessage(errorMessage);\n // show error on status bar and reset after 10000ms\n self.updateStatusBar('upload-image', filledErrorMessage);\n setTimeout(function () {\n self.updateStatusBar('upload-image', self.options.imageTexts.sbInit);\n }, 10000);\n\n // run error handler from options, this alerts the message.\n self.options.errorCallback(filledErrorMessage);\n }\n function fillErrorMessage(errorMessage) {\n var units = self.options.imageTexts.sizeUnits.split(',');\n return errorMessage.replace('#image_name#', file.name).replace('#image_size#', humanFileSize(file.size, units)).replace('#image_max_size#', humanFileSize(self.options.imageMaxSize, units));\n }\n imageUploadFunction.apply(this, [file, onSuccess, onError]);\n};\nEasyMDE.prototype.setPreviewMaxHeight = function () {\n var cm = this.codemirror;\n var wrapper = cm.getWrapperElement();\n var preview = wrapper.nextSibling;\n\n // Calc preview max height\n var paddingTop = parseInt(window.getComputedStyle(wrapper).paddingTop);\n var borderTopWidth = parseInt(window.getComputedStyle(wrapper).borderTopWidth);\n var optionsMaxHeight = parseInt(this.options.maxHeight);\n var wrapperMaxHeight = optionsMaxHeight + paddingTop * 2 + borderTopWidth * 2;\n var previewMaxHeight = wrapperMaxHeight.toString() + 'px';\n preview.style.height = previewMaxHeight;\n};\nEasyMDE.prototype.createSideBySide = function () {\n var cm = this.codemirror;\n var wrapper = cm.getWrapperElement();\n var preview = wrapper.nextSibling;\n if (!preview || !preview.classList.contains('editor-preview-side')) {\n preview = document.createElement('div');\n preview.className = 'editor-preview-side';\n if (this.options.previewClass) {\n if (Array.isArray(this.options.previewClass)) {\n for (var i = 0; i < this.options.previewClass.length; i++) {\n preview.classList.add(this.options.previewClass[i]);\n }\n } else if (typeof this.options.previewClass === 'string') {\n preview.classList.add(this.options.previewClass);\n }\n }\n wrapper.parentNode.insertBefore(preview, wrapper.nextSibling);\n }\n if (typeof this.options.maxHeight !== 'undefined') {\n this.setPreviewMaxHeight();\n }\n if (this.options.syncSideBySidePreviewScroll === false) return preview;\n // Syncs scroll editor -> preview\n var cScroll = false;\n var pScroll = false;\n cm.on('scroll', function (v) {\n if (cScroll) {\n cScroll = false;\n return;\n }\n pScroll = true;\n var height = v.getScrollInfo().height - v.getScrollInfo().clientHeight;\n var ratio = parseFloat(v.getScrollInfo().top) / height;\n var move = (preview.scrollHeight - preview.clientHeight) * ratio;\n preview.scrollTop = move;\n });\n\n // Syncs scroll preview -> editor\n preview.onscroll = function () {\n if (pScroll) {\n pScroll = false;\n return;\n }\n cScroll = true;\n var height = preview.scrollHeight - preview.clientHeight;\n var ratio = parseFloat(preview.scrollTop) / height;\n var move = (cm.getScrollInfo().height - cm.getScrollInfo().clientHeight) * ratio;\n cm.scrollTo(0, move);\n };\n return preview;\n};\nEasyMDE.prototype.createToolbar = function (items) {\n items = items || this.options.toolbar;\n if (!items || items.length === 0) {\n return;\n }\n var i;\n for (i = 0; i < items.length; i++) {\n if (toolbarBuiltInButtons[items[i]] != undefined) {\n items[i] = toolbarBuiltInButtons[items[i]];\n }\n }\n var bar = document.createElement('div');\n bar.className = 'editor-toolbar';\n bar.setAttribute('role', 'toolbar');\n var self = this;\n var toolbarData = {};\n self.toolbar = items;\n for (i = 0; i < items.length; i++) {\n if (items[i].name == 'guide' && self.options.toolbarGuideIcon === false) continue;\n if (self.options.hideIcons && self.options.hideIcons.indexOf(items[i].name) != -1) continue;\n\n // Fullscreen does not work well on mobile devices (even tablets)\n // In the future, hopefully this can be resolved\n if ((items[i].name == 'fullscreen' || items[i].name == 'side-by-side') && isMobile()) continue;\n\n // Don't include trailing separators\n if (items[i] === '|') {\n var nonSeparatorIconsFollow = false;\n for (var x = i + 1; x < items.length; x++) {\n if (items[x] !== '|' && (!self.options.hideIcons || self.options.hideIcons.indexOf(items[x].name) == -1)) {\n nonSeparatorIconsFollow = true;\n }\n }\n if (!nonSeparatorIconsFollow) continue;\n }\n\n // Create the icon and append to the toolbar\n (function (item) {\n var el;\n if (item === '|') {\n el = createSep();\n } else if (item.children) {\n el = createToolbarDropdown(item, self.options.toolbarTips, self.options.shortcuts, self);\n } else {\n el = createToolbarButton(item, true, self.options.toolbarTips, self.options.shortcuts, 'button', self);\n }\n toolbarData[item.name || item] = el;\n bar.appendChild(el);\n\n // Create the input element (ie. ), used among\n // with the 'import-image' icon to open the browse-file window.\n if (item.name === 'upload-image') {\n var imageInput = document.createElement('input');\n imageInput.className = 'imageInput';\n imageInput.type = 'file';\n imageInput.multiple = true;\n imageInput.name = 'image';\n imageInput.accept = self.options.imageAccept;\n imageInput.style.display = 'none';\n imageInput.style.opacity = 0;\n bar.appendChild(imageInput);\n }\n })(items[i]);\n }\n self.toolbar_div = bar;\n self.toolbarElements = toolbarData;\n var cm = this.codemirror;\n cm.on('cursorActivity', function () {\n var stat = getState(cm);\n for (var key in toolbarData) {\n (function (key) {\n var el = toolbarData[key];\n if (stat[key]) {\n el.classList.add('active');\n } else if (key != 'fullscreen' && key != 'side-by-side') {\n el.classList.remove('active');\n }\n })(key);\n }\n });\n var cmWrapper = cm.getWrapperElement();\n cmWrapper.parentNode.insertBefore(bar, cmWrapper);\n return bar;\n};\nEasyMDE.prototype.createStatusbar = function (status) {\n // Initialize\n status = status || this.options.status;\n var options = this.options;\n var cm = this.codemirror;\n\n // Make sure the status variable is valid\n if (!status || status.length === 0) {\n return;\n }\n\n // Set up the built-in items\n var items = [];\n var i, onUpdate, onActivity, defaultValue;\n for (i = 0; i < status.length; i++) {\n // Reset some values\n onUpdate = undefined;\n onActivity = undefined;\n defaultValue = undefined;\n\n // Handle if custom or not\n if (typeof status[i] === 'object') {\n items.push({\n className: status[i].className,\n defaultValue: status[i].defaultValue,\n onUpdate: status[i].onUpdate,\n onActivity: status[i].onActivity\n });\n } else {\n var name = status[i];\n if (name === 'words') {\n defaultValue = function (el) {\n el.innerHTML = wordCount(cm.getValue());\n };\n onUpdate = function (el) {\n el.innerHTML = wordCount(cm.getValue());\n };\n } else if (name === 'lines') {\n defaultValue = function (el) {\n el.innerHTML = cm.lineCount();\n };\n onUpdate = function (el) {\n el.innerHTML = cm.lineCount();\n };\n } else if (name === 'cursor') {\n defaultValue = function (el) {\n el.innerHTML = '1:1';\n };\n onActivity = function (el) {\n var pos = cm.getCursor();\n var posLine = pos.line + 1;\n var posColumn = pos.ch + 1;\n el.innerHTML = posLine + ':' + posColumn;\n };\n } else if (name === 'autosave') {\n defaultValue = function (el) {\n if (options.autosave != undefined && options.autosave.enabled === true) {\n el.setAttribute('id', 'autosaved');\n }\n };\n } else if (name === 'upload-image') {\n defaultValue = function (el) {\n el.innerHTML = options.imageTexts.sbInit;\n };\n }\n items.push({\n className: name,\n defaultValue: defaultValue,\n onUpdate: onUpdate,\n onActivity: onActivity\n });\n }\n }\n\n // Create element for the status bar\n var bar = document.createElement('div');\n bar.className = 'editor-statusbar';\n\n // Create a new span for each item\n for (i = 0; i < items.length; i++) {\n // Store in temporary variable\n var item = items[i];\n\n // Create span element\n var el = document.createElement('span');\n el.className = item.className;\n\n // Ensure the defaultValue is a function\n if (typeof item.defaultValue === 'function') {\n item.defaultValue(el);\n }\n\n // Ensure the onUpdate is a function\n if (typeof item.onUpdate === 'function') {\n // Create a closure around the span of the current action, then execute the onUpdate handler\n this.codemirror.on('update', function (el, item) {\n return function () {\n item.onUpdate(el);\n };\n }(el, item));\n }\n if (typeof item.onActivity === 'function') {\n // Create a closure around the span of the current action, then execute the onActivity handler\n this.codemirror.on('cursorActivity', function (el, item) {\n return function () {\n item.onActivity(el);\n };\n }(el, item));\n }\n\n // Append the item to the status bar\n bar.appendChild(el);\n }\n\n // Insert the status bar into the DOM\n var cmWrapper = this.codemirror.getWrapperElement();\n cmWrapper.parentNode.insertBefore(bar, cmWrapper.nextSibling);\n return bar;\n};\n\n/**\n * Get or set the text content.\n */\nEasyMDE.prototype.value = function (val) {\n var cm = this.codemirror;\n if (val === undefined) {\n return cm.getValue();\n } else {\n cm.getDoc().setValue(val);\n if (this.isPreviewActive()) {\n var wrapper = cm.getWrapperElement();\n var preview = wrapper.lastChild;\n var preview_result = this.options.previewRender(val, preview);\n if (preview_result !== null) {\n preview.innerHTML = preview_result;\n }\n }\n return this;\n }\n};\n\n/**\n * Bind static methods for exports.\n */\nEasyMDE.toggleBold = toggleBold;\nEasyMDE.toggleItalic = toggleItalic;\nEasyMDE.toggleStrikethrough = toggleStrikethrough;\nEasyMDE.toggleBlockquote = toggleBlockquote;\nEasyMDE.toggleHeadingSmaller = toggleHeadingSmaller;\nEasyMDE.toggleHeadingBigger = toggleHeadingBigger;\nEasyMDE.toggleHeading1 = toggleHeading1;\nEasyMDE.toggleHeading2 = toggleHeading2;\nEasyMDE.toggleHeading3 = toggleHeading3;\nEasyMDE.toggleHeading4 = toggleHeading4;\nEasyMDE.toggleHeading5 = toggleHeading5;\nEasyMDE.toggleHeading6 = toggleHeading6;\nEasyMDE.toggleCodeBlock = toggleCodeBlock;\nEasyMDE.toggleUnorderedList = toggleUnorderedList;\nEasyMDE.toggleOrderedList = toggleOrderedList;\nEasyMDE.cleanBlock = cleanBlock;\nEasyMDE.drawLink = drawLink;\nEasyMDE.drawImage = drawImage;\nEasyMDE.drawUploadedImage = drawUploadedImage;\nEasyMDE.drawTable = drawTable;\nEasyMDE.drawHorizontalRule = drawHorizontalRule;\nEasyMDE.undo = undo;\nEasyMDE.redo = redo;\nEasyMDE.togglePreview = togglePreview;\nEasyMDE.toggleSideBySide = toggleSideBySide;\nEasyMDE.toggleFullScreen = toggleFullScreen;\n\n/**\n * Bind instance methods for exports.\n */\nEasyMDE.prototype.toggleBold = function () {\n toggleBold(this);\n};\nEasyMDE.prototype.toggleItalic = function () {\n toggleItalic(this);\n};\nEasyMDE.prototype.toggleStrikethrough = function () {\n toggleStrikethrough(this);\n};\nEasyMDE.prototype.toggleBlockquote = function () {\n toggleBlockquote(this);\n};\nEasyMDE.prototype.toggleHeadingSmaller = function () {\n toggleHeadingSmaller(this);\n};\nEasyMDE.prototype.toggleHeadingBigger = function () {\n toggleHeadingBigger(this);\n};\nEasyMDE.prototype.toggleHeading1 = function () {\n toggleHeading1(this);\n};\nEasyMDE.prototype.toggleHeading2 = function () {\n toggleHeading2(this);\n};\nEasyMDE.prototype.toggleHeading3 = function () {\n toggleHeading3(this);\n};\nEasyMDE.prototype.toggleHeading4 = function () {\n toggleHeading4(this);\n};\nEasyMDE.prototype.toggleHeading5 = function () {\n toggleHeading5(this);\n};\nEasyMDE.prototype.toggleHeading6 = function () {\n toggleHeading6(this);\n};\nEasyMDE.prototype.toggleCodeBlock = function () {\n toggleCodeBlock(this);\n};\nEasyMDE.prototype.toggleUnorderedList = function () {\n toggleUnorderedList(this);\n};\nEasyMDE.prototype.toggleOrderedList = function () {\n toggleOrderedList(this);\n};\nEasyMDE.prototype.cleanBlock = function () {\n cleanBlock(this);\n};\nEasyMDE.prototype.drawLink = function () {\n drawLink(this);\n};\nEasyMDE.prototype.drawImage = function () {\n drawImage(this);\n};\nEasyMDE.prototype.drawUploadedImage = function () {\n drawUploadedImage(this);\n};\nEasyMDE.prototype.drawTable = function () {\n drawTable(this);\n};\nEasyMDE.prototype.drawHorizontalRule = function () {\n drawHorizontalRule(this);\n};\nEasyMDE.prototype.undo = function () {\n undo(this);\n};\nEasyMDE.prototype.redo = function () {\n redo(this);\n};\nEasyMDE.prototype.togglePreview = function () {\n togglePreview(this);\n};\nEasyMDE.prototype.toggleSideBySide = function () {\n toggleSideBySide(this);\n};\nEasyMDE.prototype.toggleFullScreen = function () {\n toggleFullScreen(this);\n};\nEasyMDE.prototype.isPreviewActive = function () {\n var cm = this.codemirror;\n var wrapper = cm.getWrapperElement();\n var preview = wrapper.lastChild;\n return preview.classList.contains('editor-preview-active');\n};\nEasyMDE.prototype.isSideBySideActive = function () {\n var cm = this.codemirror;\n var wrapper = cm.getWrapperElement();\n var preview = wrapper.nextSibling;\n return preview.classList.contains('editor-preview-active-side');\n};\nEasyMDE.prototype.isFullscreenActive = function () {\n var cm = this.codemirror;\n return cm.getOption('fullScreen');\n};\nEasyMDE.prototype.getState = function () {\n var cm = this.codemirror;\n return getState(cm);\n};\nEasyMDE.prototype.toTextArea = function () {\n var cm = this.codemirror;\n var wrapper = cm.getWrapperElement();\n var easyMDEContainer = wrapper.parentNode;\n if (easyMDEContainer) {\n if (this.gui.toolbar) {\n easyMDEContainer.removeChild(this.gui.toolbar);\n }\n if (this.gui.statusbar) {\n easyMDEContainer.removeChild(this.gui.statusbar);\n }\n if (this.gui.sideBySide) {\n easyMDEContainer.removeChild(this.gui.sideBySide);\n }\n }\n\n // Unwrap easyMDEcontainer before codemirror toTextArea() call\n easyMDEContainer.parentNode.insertBefore(wrapper, easyMDEContainer);\n easyMDEContainer.remove();\n cm.toTextArea();\n if (this.autosaveTimeoutId) {\n clearTimeout(this.autosaveTimeoutId);\n this.autosaveTimeoutId = undefined;\n this.clearAutosavedValue();\n }\n};\nmodule.exports = EasyMDE;","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n(function (mod) {\n if (typeof exports == \"object\" && typeof module == \"object\")\n // CommonJS\n mod(require(\"../../lib/codemirror\"), require(\"../xml/xml\"), require(\"../meta\"));else if (typeof define == \"function\" && define.amd)\n // AMD\n define([\"../../lib/codemirror\", \"../xml/xml\", \"../meta\"], mod);else\n // Plain browser env\n mod(CodeMirror);\n})(function (CodeMirror) {\n \"use strict\";\n\n CodeMirror.defineMode(\"markdown\", function (cmCfg, modeCfg) {\n var htmlMode = CodeMirror.getMode(cmCfg, \"text/html\");\n var htmlModeMissing = htmlMode.name == \"null\";\n function getMode(name) {\n if (CodeMirror.findModeByName) {\n var found = CodeMirror.findModeByName(name);\n if (found) name = found.mime || found.mimes[0];\n }\n var mode = CodeMirror.getMode(cmCfg, name);\n return mode.name == \"null\" ? null : mode;\n }\n\n // Should characters that affect highlighting be highlighted separate?\n // Does not include characters that will be output (such as `1.` and `-` for lists)\n if (modeCfg.highlightFormatting === undefined) modeCfg.highlightFormatting = false;\n\n // Maximum number of nested blockquotes. Set to 0 for infinite nesting.\n // Excess `>` will emit `error` token.\n if (modeCfg.maxBlockquoteDepth === undefined) modeCfg.maxBlockquoteDepth = 0;\n\n // Turn on task lists? (\"- [ ] \" and \"- [x] \")\n if (modeCfg.taskLists === undefined) modeCfg.taskLists = false;\n\n // Turn on strikethrough syntax\n if (modeCfg.strikethrough === undefined) modeCfg.strikethrough = false;\n if (modeCfg.emoji === undefined) modeCfg.emoji = false;\n if (modeCfg.fencedCodeBlockHighlighting === undefined) modeCfg.fencedCodeBlockHighlighting = true;\n if (modeCfg.fencedCodeBlockDefaultMode === undefined) modeCfg.fencedCodeBlockDefaultMode = 'text/plain';\n if (modeCfg.xml === undefined) modeCfg.xml = true;\n\n // Allow token types to be overridden by user-provided token types.\n if (modeCfg.tokenTypeOverrides === undefined) modeCfg.tokenTypeOverrides = {};\n var tokenTypes = {\n header: \"header\",\n code: \"comment\",\n quote: \"quote\",\n list1: \"variable-2\",\n list2: \"variable-3\",\n list3: \"keyword\",\n hr: \"hr\",\n image: \"image\",\n imageAltText: \"image-alt-text\",\n imageMarker: \"image-marker\",\n formatting: \"formatting\",\n linkInline: \"link\",\n linkEmail: \"link\",\n linkText: \"link\",\n linkHref: \"string\",\n em: \"em\",\n strong: \"strong\",\n strikethrough: \"strikethrough\",\n emoji: \"builtin\"\n };\n for (var tokenType in tokenTypes) {\n if (tokenTypes.hasOwnProperty(tokenType) && modeCfg.tokenTypeOverrides[tokenType]) {\n tokenTypes[tokenType] = modeCfg.tokenTypeOverrides[tokenType];\n }\n }\n var hrRE = /^([*\\-_])(?:\\s*\\1){2,}\\s*$/,\n listRE = /^(?:[*\\-+]|^[0-9]+([.)]))\\s+/,\n taskListRE = /^\\[(x| )\\](?=\\s)/i // Must follow listRE\n ,\n atxHeaderRE = modeCfg.allowAtxHeaderWithoutSpace ? /^(#+)/ : /^(#+)(?: |$)/,\n setextHeaderRE = /^ {0,3}(?:\\={1,}|-{2,})\\s*$/,\n textRE = /^[^#!\\[\\]*_\\\\<>` \"'(~:]+/,\n fencedCodeRE = /^(~~~+|```+)[ \\t]*([\\w\\/+#-]*)[^\\n`]*$/,\n linkDefRE = /^\\s*\\[[^\\]]+?\\]:.*$/ // naive link-definition\n ,\n punctuation = /[!\"#$%&'()*+,\\-.\\/:;<=>?@\\[\\\\\\]^_`{|}~\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0AF0\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E42\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC9\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDF3C-\\uDF3E]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]/,\n expandedTab = \" \"; // CommonMark specifies tab as 4 spaces\n\n function switchInline(stream, state, f) {\n state.f = state.inline = f;\n return f(stream, state);\n }\n function switchBlock(stream, state, f) {\n state.f = state.block = f;\n return f(stream, state);\n }\n function lineIsEmpty(line) {\n return !line || !/\\S/.test(line.string);\n }\n\n // Blocks\n\n function blankLine(state) {\n // Reset linkTitle state\n state.linkTitle = false;\n state.linkHref = false;\n state.linkText = false;\n // Reset EM state\n state.em = false;\n // Reset STRONG state\n state.strong = false;\n // Reset strikethrough state\n state.strikethrough = false;\n // Reset state.quote\n state.quote = 0;\n // Reset state.indentedCode\n state.indentedCode = false;\n if (state.f == htmlBlock) {\n var exit = htmlModeMissing;\n if (!exit) {\n var inner = CodeMirror.innerMode(htmlMode, state.htmlState);\n exit = inner.mode.name == \"xml\" && inner.state.tagStart === null && !inner.state.context && inner.state.tokenize.isInText;\n }\n if (exit) {\n state.f = inlineNormal;\n state.block = blockNormal;\n state.htmlState = null;\n }\n }\n // Reset state.trailingSpace\n state.trailingSpace = 0;\n state.trailingSpaceNewLine = false;\n // Mark this line as blank\n state.prevLine = state.thisLine;\n state.thisLine = {\n stream: null\n };\n return null;\n }\n function blockNormal(stream, state) {\n var firstTokenOnLine = stream.column() === state.indentation;\n var prevLineLineIsEmpty = lineIsEmpty(state.prevLine.stream);\n var prevLineIsIndentedCode = state.indentedCode;\n var prevLineIsHr = state.prevLine.hr;\n var prevLineIsList = state.list !== false;\n var maxNonCodeIndentation = (state.listStack[state.listStack.length - 1] || 0) + 3;\n state.indentedCode = false;\n var lineIndentation = state.indentation;\n // compute once per line (on first token)\n if (state.indentationDiff === null) {\n state.indentationDiff = state.indentation;\n if (prevLineIsList) {\n state.list = null;\n // While this list item's marker's indentation is less than the deepest\n // list item's content's indentation,pop the deepest list item\n // indentation off the stack, and update block indentation state\n while (lineIndentation < state.listStack[state.listStack.length - 1]) {\n state.listStack.pop();\n if (state.listStack.length) {\n state.indentation = state.listStack[state.listStack.length - 1];\n // less than the first list's indent -> the line is no longer a list\n } else {\n state.list = false;\n }\n }\n if (state.list !== false) {\n state.indentationDiff = lineIndentation - state.listStack[state.listStack.length - 1];\n }\n }\n }\n\n // not comprehensive (currently only for setext detection purposes)\n var allowsInlineContinuation = !prevLineLineIsEmpty && !prevLineIsHr && !state.prevLine.header && (!prevLineIsList || !prevLineIsIndentedCode) && !state.prevLine.fencedCodeEnd;\n var isHr = (state.list === false || prevLineIsHr || prevLineLineIsEmpty) && state.indentation <= maxNonCodeIndentation && stream.match(hrRE);\n var match = null;\n if (state.indentationDiff >= 4 && (prevLineIsIndentedCode || state.prevLine.fencedCodeEnd || state.prevLine.header || prevLineLineIsEmpty)) {\n stream.skipToEnd();\n state.indentedCode = true;\n return tokenTypes.code;\n } else if (stream.eatSpace()) {\n return null;\n } else if (firstTokenOnLine && state.indentation <= maxNonCodeIndentation && (match = stream.match(atxHeaderRE)) && match[1].length <= 6) {\n state.quote = 0;\n state.header = match[1].length;\n state.thisLine.header = true;\n if (modeCfg.highlightFormatting) state.formatting = \"header\";\n state.f = state.inline;\n return getType(state);\n } else if (state.indentation <= maxNonCodeIndentation && stream.eat('>')) {\n state.quote = firstTokenOnLine ? 1 : state.quote + 1;\n if (modeCfg.highlightFormatting) state.formatting = \"quote\";\n stream.eatSpace();\n return getType(state);\n } else if (!isHr && !state.setext && firstTokenOnLine && state.indentation <= maxNonCodeIndentation && (match = stream.match(listRE))) {\n var listType = match[1] ? \"ol\" : \"ul\";\n state.indentation = lineIndentation + stream.current().length;\n state.list = true;\n state.quote = 0;\n\n // Add this list item's content's indentation to the stack\n state.listStack.push(state.indentation);\n // Reset inline styles which shouldn't propagate across list items\n state.em = false;\n state.strong = false;\n state.code = false;\n state.strikethrough = false;\n if (modeCfg.taskLists && stream.match(taskListRE, false)) {\n state.taskList = true;\n }\n state.f = state.inline;\n if (modeCfg.highlightFormatting) state.formatting = [\"list\", \"list-\" + listType];\n return getType(state);\n } else if (firstTokenOnLine && state.indentation <= maxNonCodeIndentation && (match = stream.match(fencedCodeRE, true))) {\n state.quote = 0;\n state.fencedEndRE = new RegExp(match[1] + \"+ *$\");\n // try switching mode\n state.localMode = modeCfg.fencedCodeBlockHighlighting && getMode(match[2] || modeCfg.fencedCodeBlockDefaultMode);\n if (state.localMode) state.localState = CodeMirror.startState(state.localMode);\n state.f = state.block = local;\n if (modeCfg.highlightFormatting) state.formatting = \"code-block\";\n state.code = -1;\n return getType(state);\n // SETEXT has lowest block-scope precedence after HR, so check it after\n // the others (code, blockquote, list...)\n } else if (\n // if setext set, indicates line after ---/===\n state.setext ||\n // line before ---/===\n (!allowsInlineContinuation || !prevLineIsList) && !state.quote && state.list === false && !state.code && !isHr && !linkDefRE.test(stream.string) && (match = stream.lookAhead(1)) && (match = match.match(setextHeaderRE))) {\n if (!state.setext) {\n state.header = match[0].charAt(0) == '=' ? 1 : 2;\n state.setext = state.header;\n } else {\n state.header = state.setext;\n // has no effect on type so we can reset it now\n state.setext = 0;\n stream.skipToEnd();\n if (modeCfg.highlightFormatting) state.formatting = \"header\";\n }\n state.thisLine.header = true;\n state.f = state.inline;\n return getType(state);\n } else if (isHr) {\n stream.skipToEnd();\n state.hr = true;\n state.thisLine.hr = true;\n return tokenTypes.hr;\n } else if (stream.peek() === '[') {\n return switchInline(stream, state, footnoteLink);\n }\n return switchInline(stream, state, state.inline);\n }\n function htmlBlock(stream, state) {\n var style = htmlMode.token(stream, state.htmlState);\n if (!htmlModeMissing) {\n var inner = CodeMirror.innerMode(htmlMode, state.htmlState);\n if (inner.mode.name == \"xml\" && inner.state.tagStart === null && !inner.state.context && inner.state.tokenize.isInText || state.md_inside && stream.current().indexOf(\">\") > -1) {\n state.f = inlineNormal;\n state.block = blockNormal;\n state.htmlState = null;\n }\n }\n return style;\n }\n function local(stream, state) {\n var currListInd = state.listStack[state.listStack.length - 1] || 0;\n var hasExitedList = state.indentation < currListInd;\n var maxFencedEndInd = currListInd + 3;\n if (state.fencedEndRE && state.indentation <= maxFencedEndInd && (hasExitedList || stream.match(state.fencedEndRE))) {\n if (modeCfg.highlightFormatting) state.formatting = \"code-block\";\n var returnType;\n if (!hasExitedList) returnType = getType(state);\n state.localMode = state.localState = null;\n state.block = blockNormal;\n state.f = inlineNormal;\n state.fencedEndRE = null;\n state.code = 0;\n state.thisLine.fencedCodeEnd = true;\n if (hasExitedList) return switchBlock(stream, state, state.block);\n return returnType;\n } else if (state.localMode) {\n return state.localMode.token(stream, state.localState);\n } else {\n stream.skipToEnd();\n return tokenTypes.code;\n }\n }\n\n // Inline\n function getType(state) {\n var styles = [];\n if (state.formatting) {\n styles.push(tokenTypes.formatting);\n if (typeof state.formatting === \"string\") state.formatting = [state.formatting];\n for (var i = 0; i < state.formatting.length; i++) {\n styles.push(tokenTypes.formatting + \"-\" + state.formatting[i]);\n if (state.formatting[i] === \"header\") {\n styles.push(tokenTypes.formatting + \"-\" + state.formatting[i] + \"-\" + state.header);\n }\n\n // Add `formatting-quote` and `formatting-quote-#` for blockquotes\n // Add `error` instead if the maximum blockquote nesting depth is passed\n if (state.formatting[i] === \"quote\") {\n if (!modeCfg.maxBlockquoteDepth || modeCfg.maxBlockquoteDepth >= state.quote) {\n styles.push(tokenTypes.formatting + \"-\" + state.formatting[i] + \"-\" + state.quote);\n } else {\n styles.push(\"error\");\n }\n }\n }\n }\n if (state.taskOpen) {\n styles.push(\"meta\");\n return styles.length ? styles.join(' ') : null;\n }\n if (state.taskClosed) {\n styles.push(\"property\");\n return styles.length ? styles.join(' ') : null;\n }\n if (state.linkHref) {\n styles.push(tokenTypes.linkHref, \"url\");\n } else {\n // Only apply inline styles to non-url text\n if (state.strong) {\n styles.push(tokenTypes.strong);\n }\n if (state.em) {\n styles.push(tokenTypes.em);\n }\n if (state.strikethrough) {\n styles.push(tokenTypes.strikethrough);\n }\n if (state.emoji) {\n styles.push(tokenTypes.emoji);\n }\n if (state.linkText) {\n styles.push(tokenTypes.linkText);\n }\n if (state.code) {\n styles.push(tokenTypes.code);\n }\n if (state.image) {\n styles.push(tokenTypes.image);\n }\n if (state.imageAltText) {\n styles.push(tokenTypes.imageAltText, \"link\");\n }\n if (state.imageMarker) {\n styles.push(tokenTypes.imageMarker);\n }\n }\n if (state.header) {\n styles.push(tokenTypes.header, tokenTypes.header + \"-\" + state.header);\n }\n if (state.quote) {\n styles.push(tokenTypes.quote);\n\n // Add `quote-#` where the maximum for `#` is modeCfg.maxBlockquoteDepth\n if (!modeCfg.maxBlockquoteDepth || modeCfg.maxBlockquoteDepth >= state.quote) {\n styles.push(tokenTypes.quote + \"-\" + state.quote);\n } else {\n styles.push(tokenTypes.quote + \"-\" + modeCfg.maxBlockquoteDepth);\n }\n }\n if (state.list !== false) {\n var listMod = (state.listStack.length - 1) % 3;\n if (!listMod) {\n styles.push(tokenTypes.list1);\n } else if (listMod === 1) {\n styles.push(tokenTypes.list2);\n } else {\n styles.push(tokenTypes.list3);\n }\n }\n if (state.trailingSpaceNewLine) {\n styles.push(\"trailing-space-new-line\");\n } else if (state.trailingSpace) {\n styles.push(\"trailing-space-\" + (state.trailingSpace % 2 ? \"a\" : \"b\"));\n }\n return styles.length ? styles.join(' ') : null;\n }\n function handleText(stream, state) {\n if (stream.match(textRE, true)) {\n return getType(state);\n }\n return undefined;\n }\n function inlineNormal(stream, state) {\n var style = state.text(stream, state);\n if (typeof style !== 'undefined') return style;\n if (state.list) {\n // List marker (*, +, -, 1., etc)\n state.list = null;\n return getType(state);\n }\n if (state.taskList) {\n var taskOpen = stream.match(taskListRE, true)[1] === \" \";\n if (taskOpen) state.taskOpen = true;else state.taskClosed = true;\n if (modeCfg.highlightFormatting) state.formatting = \"task\";\n state.taskList = false;\n return getType(state);\n }\n state.taskOpen = false;\n state.taskClosed = false;\n if (state.header && stream.match(/^#+$/, true)) {\n if (modeCfg.highlightFormatting) state.formatting = \"header\";\n return getType(state);\n }\n var ch = stream.next();\n\n // Matches link titles present on next line\n if (state.linkTitle) {\n state.linkTitle = false;\n var matchCh = ch;\n if (ch === '(') {\n matchCh = ')';\n }\n matchCh = (matchCh + '').replace(/([.?*+^\\[\\]\\\\(){}|-])/g, \"\\\\$1\");\n var regex = '^\\\\s*(?:[^' + matchCh + '\\\\\\\\]+|\\\\\\\\\\\\\\\\|\\\\\\\\.)' + matchCh;\n if (stream.match(new RegExp(regex), true)) {\n return tokenTypes.linkHref;\n }\n }\n\n // If this block is changed, it may need to be updated in GFM mode\n if (ch === '`') {\n var previousFormatting = state.formatting;\n if (modeCfg.highlightFormatting) state.formatting = \"code\";\n stream.eatWhile('`');\n var count = stream.current().length;\n if (state.code == 0 && (!state.quote || count == 1)) {\n state.code = count;\n return getType(state);\n } else if (count == state.code) {\n // Must be exact\n var t = getType(state);\n state.code = 0;\n return t;\n } else {\n state.formatting = previousFormatting;\n return getType(state);\n }\n } else if (state.code) {\n return getType(state);\n }\n if (ch === '\\\\') {\n stream.next();\n if (modeCfg.highlightFormatting) {\n var type = getType(state);\n var formattingEscape = tokenTypes.formatting + \"-escape\";\n return type ? type + \" \" + formattingEscape : formattingEscape;\n }\n }\n if (ch === '!' && stream.match(/\\[[^\\]]*\\] ?(?:\\(|\\[)/, false)) {\n state.imageMarker = true;\n state.image = true;\n if (modeCfg.highlightFormatting) state.formatting = \"image\";\n return getType(state);\n }\n if (ch === '[' && state.imageMarker && stream.match(/[^\\]]*\\](\\(.*?\\)| ?\\[.*?\\])/, false)) {\n state.imageMarker = false;\n state.imageAltText = true;\n if (modeCfg.highlightFormatting) state.formatting = \"image\";\n return getType(state);\n }\n if (ch === ']' && state.imageAltText) {\n if (modeCfg.highlightFormatting) state.formatting = \"image\";\n var type = getType(state);\n state.imageAltText = false;\n state.image = false;\n state.inline = state.f = linkHref;\n return type;\n }\n if (ch === '[' && !state.image) {\n if (state.linkText && stream.match(/^.*?\\]/)) return getType(state);\n state.linkText = true;\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n return getType(state);\n }\n if (ch === ']' && state.linkText) {\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n var type = getType(state);\n state.linkText = false;\n state.inline = state.f = stream.match(/\\(.*?\\)| ?\\[.*?\\]/, false) ? linkHref : inlineNormal;\n return type;\n }\n if (ch === '<' && stream.match(/^(https?|ftps?):\\/\\/(?:[^\\\\>]|\\\\.)+>/, false)) {\n state.f = state.inline = linkInline;\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n var type = getType(state);\n if (type) {\n type += \" \";\n } else {\n type = \"\";\n }\n return type + tokenTypes.linkInline;\n }\n if (ch === '<' && stream.match(/^[^> \\\\]+@(?:[^\\\\>]|\\\\.)+>/, false)) {\n state.f = state.inline = linkInline;\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n var type = getType(state);\n if (type) {\n type += \" \";\n } else {\n type = \"\";\n }\n return type + tokenTypes.linkEmail;\n }\n if (modeCfg.xml && ch === '<' && stream.match(/^(!--|\\?|!\\[CDATA\\[|[a-z][a-z0-9-]*(?:\\s+[a-z_:.\\-]+(?:\\s*=\\s*[^>]+)?)*\\s*(?:>|$))/i, false)) {\n var end = stream.string.indexOf(\">\", stream.pos);\n if (end != -1) {\n var atts = stream.string.substring(stream.start, end);\n if (/markdown\\s*=\\s*('|\"){0,1}1('|\"){0,1}/.test(atts)) state.md_inside = true;\n }\n stream.backUp(1);\n state.htmlState = CodeMirror.startState(htmlMode);\n return switchBlock(stream, state, htmlBlock);\n }\n if (modeCfg.xml && ch === '<' && stream.match(/^\\/\\w*?>/)) {\n state.md_inside = false;\n return \"tag\";\n } else if (ch === \"*\" || ch === \"_\") {\n var len = 1,\n before = stream.pos == 1 ? \" \" : stream.string.charAt(stream.pos - 2);\n while (len < 3 && stream.eat(ch)) len++;\n var after = stream.peek() || \" \";\n // See http://spec.commonmark.org/0.27/#emphasis-and-strong-emphasis\n var leftFlanking = !/\\s/.test(after) && (!punctuation.test(after) || /\\s/.test(before) || punctuation.test(before));\n var rightFlanking = !/\\s/.test(before) && (!punctuation.test(before) || /\\s/.test(after) || punctuation.test(after));\n var setEm = null,\n setStrong = null;\n if (len % 2) {\n // Em\n if (!state.em && leftFlanking && (ch === \"*\" || !rightFlanking || punctuation.test(before))) setEm = true;else if (state.em == ch && rightFlanking && (ch === \"*\" || !leftFlanking || punctuation.test(after))) setEm = false;\n }\n if (len > 1) {\n // Strong\n if (!state.strong && leftFlanking && (ch === \"*\" || !rightFlanking || punctuation.test(before))) setStrong = true;else if (state.strong == ch && rightFlanking && (ch === \"*\" || !leftFlanking || punctuation.test(after))) setStrong = false;\n }\n if (setStrong != null || setEm != null) {\n if (modeCfg.highlightFormatting) state.formatting = setEm == null ? \"strong\" : setStrong == null ? \"em\" : \"strong em\";\n if (setEm === true) state.em = ch;\n if (setStrong === true) state.strong = ch;\n var t = getType(state);\n if (setEm === false) state.em = false;\n if (setStrong === false) state.strong = false;\n return t;\n }\n } else if (ch === ' ') {\n if (stream.eat('*') || stream.eat('_')) {\n // Probably surrounded by spaces\n if (stream.peek() === ' ') {\n // Surrounded by spaces, ignore\n return getType(state);\n } else {\n // Not surrounded by spaces, back up pointer\n stream.backUp(1);\n }\n }\n }\n if (modeCfg.strikethrough) {\n if (ch === '~' && stream.eatWhile(ch)) {\n if (state.strikethrough) {\n // Remove strikethrough\n if (modeCfg.highlightFormatting) state.formatting = \"strikethrough\";\n var t = getType(state);\n state.strikethrough = false;\n return t;\n } else if (stream.match(/^[^\\s]/, false)) {\n // Add strikethrough\n state.strikethrough = true;\n if (modeCfg.highlightFormatting) state.formatting = \"strikethrough\";\n return getType(state);\n }\n } else if (ch === ' ') {\n if (stream.match('~~', true)) {\n // Probably surrounded by space\n if (stream.peek() === ' ') {\n // Surrounded by spaces, ignore\n return getType(state);\n } else {\n // Not surrounded by spaces, back up pointer\n stream.backUp(2);\n }\n }\n }\n }\n if (modeCfg.emoji && ch === \":\" && stream.match(/^(?:[a-z_\\d+][a-z_\\d+-]*|\\-[a-z_\\d+][a-z_\\d+-]*):/)) {\n state.emoji = true;\n if (modeCfg.highlightFormatting) state.formatting = \"emoji\";\n var retType = getType(state);\n state.emoji = false;\n return retType;\n }\n if (ch === ' ') {\n if (stream.match(/^ +$/, false)) {\n state.trailingSpace++;\n } else if (state.trailingSpace) {\n state.trailingSpaceNewLine = true;\n }\n }\n return getType(state);\n }\n function linkInline(stream, state) {\n var ch = stream.next();\n if (ch === \">\") {\n state.f = state.inline = inlineNormal;\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n var type = getType(state);\n if (type) {\n type += \" \";\n } else {\n type = \"\";\n }\n return type + tokenTypes.linkInline;\n }\n stream.match(/^[^>]+/, true);\n return tokenTypes.linkInline;\n }\n function linkHref(stream, state) {\n // Check if space, and return NULL if so (to avoid marking the space)\n if (stream.eatSpace()) {\n return null;\n }\n var ch = stream.next();\n if (ch === '(' || ch === '[') {\n state.f = state.inline = getLinkHrefInside(ch === \"(\" ? \")\" : \"]\");\n if (modeCfg.highlightFormatting) state.formatting = \"link-string\";\n state.linkHref = true;\n return getType(state);\n }\n return 'error';\n }\n var linkRE = {\n \")\": /^(?:[^\\\\\\(\\)]|\\\\.|\\((?:[^\\\\\\(\\)]|\\\\.)*\\))*?(?=\\))/,\n \"]\": /^(?:[^\\\\\\[\\]]|\\\\.|\\[(?:[^\\\\\\[\\]]|\\\\.)*\\])*?(?=\\])/\n };\n function getLinkHrefInside(endChar) {\n return function (stream, state) {\n var ch = stream.next();\n if (ch === endChar) {\n state.f = state.inline = inlineNormal;\n if (modeCfg.highlightFormatting) state.formatting = \"link-string\";\n var returnState = getType(state);\n state.linkHref = false;\n return returnState;\n }\n stream.match(linkRE[endChar]);\n state.linkHref = true;\n return getType(state);\n };\n }\n function footnoteLink(stream, state) {\n if (stream.match(/^([^\\]\\\\]|\\\\.)*\\]:/, false)) {\n state.f = footnoteLinkInside;\n stream.next(); // Consume [\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n state.linkText = true;\n return getType(state);\n }\n return switchInline(stream, state, inlineNormal);\n }\n function footnoteLinkInside(stream, state) {\n if (stream.match(']:', true)) {\n state.f = state.inline = footnoteUrl;\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n var returnType = getType(state);\n state.linkText = false;\n return returnType;\n }\n stream.match(/^([^\\]\\\\]|\\\\.)+/, true);\n return tokenTypes.linkText;\n }\n function footnoteUrl(stream, state) {\n // Check if space, and return NULL if so (to avoid marking the space)\n if (stream.eatSpace()) {\n return null;\n }\n // Match URL\n stream.match(/^[^\\s]+/, true);\n // Check for link title\n if (stream.peek() === undefined) {\n // End of line, set flag to check next line\n state.linkTitle = true;\n } else {\n // More content on line, check if link title\n stream.match(/^(?:\\s+(?:\"(?:[^\"\\\\]|\\\\.)+\"|'(?:[^'\\\\]|\\\\.)+'|\\((?:[^)\\\\]|\\\\.)+\\)))?/, true);\n }\n state.f = state.inline = inlineNormal;\n return tokenTypes.linkHref + \" url\";\n }\n var mode = {\n startState: function () {\n return {\n f: blockNormal,\n prevLine: {\n stream: null\n },\n thisLine: {\n stream: null\n },\n block: blockNormal,\n htmlState: null,\n indentation: 0,\n inline: inlineNormal,\n text: handleText,\n formatting: false,\n linkText: false,\n linkHref: false,\n linkTitle: false,\n code: 0,\n em: false,\n strong: false,\n header: 0,\n setext: 0,\n hr: false,\n taskList: false,\n list: false,\n listStack: [],\n quote: 0,\n trailingSpace: 0,\n trailingSpaceNewLine: false,\n strikethrough: false,\n emoji: false,\n fencedEndRE: null\n };\n },\n copyState: function (s) {\n return {\n f: s.f,\n prevLine: s.prevLine,\n thisLine: s.thisLine,\n block: s.block,\n htmlState: s.htmlState && CodeMirror.copyState(htmlMode, s.htmlState),\n indentation: s.indentation,\n localMode: s.localMode,\n localState: s.localMode ? CodeMirror.copyState(s.localMode, s.localState) : null,\n inline: s.inline,\n text: s.text,\n formatting: false,\n linkText: s.linkText,\n linkTitle: s.linkTitle,\n linkHref: s.linkHref,\n code: s.code,\n em: s.em,\n strong: s.strong,\n strikethrough: s.strikethrough,\n emoji: s.emoji,\n header: s.header,\n setext: s.setext,\n hr: s.hr,\n taskList: s.taskList,\n list: s.list,\n listStack: s.listStack.slice(0),\n quote: s.quote,\n indentedCode: s.indentedCode,\n trailingSpace: s.trailingSpace,\n trailingSpaceNewLine: s.trailingSpaceNewLine,\n md_inside: s.md_inside,\n fencedEndRE: s.fencedEndRE\n };\n },\n token: function (stream, state) {\n // Reset state.formatting\n state.formatting = false;\n if (stream != state.thisLine.stream) {\n state.header = 0;\n state.hr = false;\n if (stream.match(/^\\s*$/, true)) {\n blankLine(state);\n return null;\n }\n state.prevLine = state.thisLine;\n state.thisLine = {\n stream: stream\n };\n\n // Reset state.taskList\n state.taskList = false;\n\n // Reset state.trailingSpace\n state.trailingSpace = 0;\n state.trailingSpaceNewLine = false;\n if (!state.localState) {\n state.f = state.block;\n if (state.f != htmlBlock) {\n var indentation = stream.match(/^\\s*/, true)[0].replace(/\\t/g, expandedTab).length;\n state.indentation = indentation;\n state.indentationDiff = null;\n if (indentation > 0) return null;\n }\n }\n }\n return state.f(stream, state);\n },\n innerMode: function (state) {\n if (state.block == htmlBlock) return {\n state: state.htmlState,\n mode: htmlMode\n };\n if (state.localState) return {\n state: state.localState,\n mode: state.localMode\n };\n return {\n state: state,\n mode: mode\n };\n },\n indent: function (state, textAfter, line) {\n if (state.block == htmlBlock && htmlMode.indent) return htmlMode.indent(state.htmlState, textAfter, line);\n if (state.localState && state.localMode.indent) return state.localMode.indent(state.localState, textAfter, line);\n return CodeMirror.Pass;\n },\n blankLine: blankLine,\n getType: getType,\n blockCommentStart: \"\",\n closeBrackets: \"()[]{}''\\\"\\\"``\",\n fold: \"markdown\"\n };\n return mode;\n }, \"xml\");\n CodeMirror.defineMIME(\"text/markdown\", \"markdown\");\n CodeMirror.defineMIME(\"text/x-markdown\", \"markdown\");\n});","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n(function (mod) {\n if (typeof exports == \"object\" && typeof module == \"object\")\n // CommonJS\n mod(require(\"../../lib/codemirror\"));else if (typeof define == \"function\" && define.amd)\n // AMD\n define([\"../../lib/codemirror\"], mod);else\n // Plain browser env\n mod(CodeMirror);\n})(function (CodeMirror) {\n \"use strict\";\n\n var htmlConfig = {\n autoSelfClosers: {\n 'area': true,\n 'base': true,\n 'br': true,\n 'col': true,\n 'command': true,\n 'embed': true,\n 'frame': true,\n 'hr': true,\n 'img': true,\n 'input': true,\n 'keygen': true,\n 'link': true,\n 'meta': true,\n 'param': true,\n 'source': true,\n 'track': true,\n 'wbr': true,\n 'menuitem': true\n },\n implicitlyClosed: {\n 'dd': true,\n 'li': true,\n 'optgroup': true,\n 'option': true,\n 'p': true,\n 'rp': true,\n 'rt': true,\n 'tbody': true,\n 'td': true,\n 'tfoot': true,\n 'th': true,\n 'tr': true\n },\n contextGrabbers: {\n 'dd': {\n 'dd': true,\n 'dt': true\n },\n 'dt': {\n 'dd': true,\n 'dt': true\n },\n 'li': {\n 'li': true\n },\n 'option': {\n 'option': true,\n 'optgroup': true\n },\n 'optgroup': {\n 'optgroup': true\n },\n 'p': {\n 'address': true,\n 'article': true,\n 'aside': true,\n 'blockquote': true,\n 'dir': true,\n 'div': true,\n 'dl': true,\n 'fieldset': true,\n 'footer': true,\n 'form': true,\n 'h1': true,\n 'h2': true,\n 'h3': true,\n 'h4': true,\n 'h5': true,\n 'h6': true,\n 'header': true,\n 'hgroup': true,\n 'hr': true,\n 'menu': true,\n 'nav': true,\n 'ol': true,\n 'p': true,\n 'pre': true,\n 'section': true,\n 'table': true,\n 'ul': true\n },\n 'rp': {\n 'rp': true,\n 'rt': true\n },\n 'rt': {\n 'rp': true,\n 'rt': true\n },\n 'tbody': {\n 'tbody': true,\n 'tfoot': true\n },\n 'td': {\n 'td': true,\n 'th': true\n },\n 'tfoot': {\n 'tbody': true\n },\n 'th': {\n 'td': true,\n 'th': true\n },\n 'thead': {\n 'tbody': true,\n 'tfoot': true\n },\n 'tr': {\n 'tr': true\n }\n },\n doNotIndent: {\n \"pre\": true\n },\n allowUnquoted: true,\n allowMissing: true,\n caseFold: true\n };\n var xmlConfig = {\n autoSelfClosers: {},\n implicitlyClosed: {},\n contextGrabbers: {},\n doNotIndent: {},\n allowUnquoted: false,\n allowMissing: false,\n allowMissingTagName: false,\n caseFold: false\n };\n CodeMirror.defineMode(\"xml\", function (editorConf, config_) {\n var indentUnit = editorConf.indentUnit;\n var config = {};\n var defaults = config_.htmlMode ? htmlConfig : xmlConfig;\n for (var prop in defaults) config[prop] = defaults[prop];\n for (var prop in config_) config[prop] = config_[prop];\n\n // Return variables for tokenizers\n var type, setStyle;\n function inText(stream, state) {\n function chain(parser) {\n state.tokenize = parser;\n return parser(stream, state);\n }\n var ch = stream.next();\n if (ch == \"<\") {\n if (stream.eat(\"!\")) {\n if (stream.eat(\"[\")) {\n if (stream.match(\"CDATA[\")) return chain(inBlock(\"atom\", \"]]>\"));else return null;\n } else if (stream.match(\"--\")) {\n return chain(inBlock(\"comment\", \"-->\"));\n } else if (stream.match(\"DOCTYPE\", true, true)) {\n stream.eatWhile(/[\\w\\._\\-]/);\n return chain(doctype(1));\n } else {\n return null;\n }\n } else if (stream.eat(\"?\")) {\n stream.eatWhile(/[\\w\\._\\-]/);\n state.tokenize = inBlock(\"meta\", \"?>\");\n return \"meta\";\n } else {\n type = stream.eat(\"/\") ? \"closeTag\" : \"openTag\";\n state.tokenize = inTag;\n return \"tag bracket\";\n }\n } else if (ch == \"&\") {\n var ok;\n if (stream.eat(\"#\")) {\n if (stream.eat(\"x\")) {\n ok = stream.eatWhile(/[a-fA-F\\d]/) && stream.eat(\";\");\n } else {\n ok = stream.eatWhile(/[\\d]/) && stream.eat(\";\");\n }\n } else {\n ok = stream.eatWhile(/[\\w\\.\\-:]/) && stream.eat(\";\");\n }\n return ok ? \"atom\" : \"error\";\n } else {\n stream.eatWhile(/[^&<]/);\n return null;\n }\n }\n inText.isInText = true;\n function inTag(stream, state) {\n var ch = stream.next();\n if (ch == \">\" || ch == \"/\" && stream.eat(\">\")) {\n state.tokenize = inText;\n type = ch == \">\" ? \"endTag\" : \"selfcloseTag\";\n return \"tag bracket\";\n } else if (ch == \"=\") {\n type = \"equals\";\n return null;\n } else if (ch == \"<\") {\n state.tokenize = inText;\n state.state = baseState;\n state.tagName = state.tagStart = null;\n var next = state.tokenize(stream, state);\n return next ? next + \" tag error\" : \"tag error\";\n } else if (/[\\'\\\"]/.test(ch)) {\n state.tokenize = inAttribute(ch);\n state.stringStartCol = stream.column();\n return state.tokenize(stream, state);\n } else {\n stream.match(/^[^\\s\\u00a0=<>\\\"\\']*[^\\s\\u00a0=<>\\\"\\'\\/]/);\n return \"word\";\n }\n }\n function inAttribute(quote) {\n var closure = function (stream, state) {\n while (!stream.eol()) {\n if (stream.next() == quote) {\n state.tokenize = inTag;\n break;\n }\n }\n return \"string\";\n };\n closure.isInAttribute = true;\n return closure;\n }\n function inBlock(style, terminator) {\n return function (stream, state) {\n while (!stream.eol()) {\n if (stream.match(terminator)) {\n state.tokenize = inText;\n break;\n }\n stream.next();\n }\n return style;\n };\n }\n function doctype(depth) {\n return function (stream, state) {\n var ch;\n while ((ch = stream.next()) != null) {\n if (ch == \"<\") {\n state.tokenize = doctype(depth + 1);\n return state.tokenize(stream, state);\n } else if (ch == \">\") {\n if (depth == 1) {\n state.tokenize = inText;\n break;\n } else {\n state.tokenize = doctype(depth - 1);\n return state.tokenize(stream, state);\n }\n }\n }\n return \"meta\";\n };\n }\n function lower(tagName) {\n return tagName && tagName.toLowerCase();\n }\n function Context(state, tagName, startOfLine) {\n this.prev = state.context;\n this.tagName = tagName || \"\";\n this.indent = state.indented;\n this.startOfLine = startOfLine;\n if (config.doNotIndent.hasOwnProperty(tagName) || state.context && state.context.noIndent) this.noIndent = true;\n }\n function popContext(state) {\n if (state.context) state.context = state.context.prev;\n }\n function maybePopContext(state, nextTagName) {\n var parentTagName;\n while (true) {\n if (!state.context) {\n return;\n }\n parentTagName = state.context.tagName;\n if (!config.contextGrabbers.hasOwnProperty(lower(parentTagName)) || !config.contextGrabbers[lower(parentTagName)].hasOwnProperty(lower(nextTagName))) {\n return;\n }\n popContext(state);\n }\n }\n function baseState(type, stream, state) {\n if (type == \"openTag\") {\n state.tagStart = stream.column();\n return tagNameState;\n } else if (type == \"closeTag\") {\n return closeTagNameState;\n } else {\n return baseState;\n }\n }\n function tagNameState(type, stream, state) {\n if (type == \"word\") {\n state.tagName = stream.current();\n setStyle = \"tag\";\n return attrState;\n } else if (config.allowMissingTagName && type == \"endTag\") {\n setStyle = \"tag bracket\";\n return attrState(type, stream, state);\n } else {\n setStyle = \"error\";\n return tagNameState;\n }\n }\n function closeTagNameState(type, stream, state) {\n if (type == \"word\") {\n var tagName = stream.current();\n if (state.context && state.context.tagName != tagName && config.implicitlyClosed.hasOwnProperty(lower(state.context.tagName))) popContext(state);\n if (state.context && state.context.tagName == tagName || config.matchClosing === false) {\n setStyle = \"tag\";\n return closeState;\n } else {\n setStyle = \"tag error\";\n return closeStateErr;\n }\n } else if (config.allowMissingTagName && type == \"endTag\") {\n setStyle = \"tag bracket\";\n return closeState(type, stream, state);\n } else {\n setStyle = \"error\";\n return closeStateErr;\n }\n }\n function closeState(type, _stream, state) {\n if (type != \"endTag\") {\n setStyle = \"error\";\n return closeState;\n }\n popContext(state);\n return baseState;\n }\n function closeStateErr(type, stream, state) {\n setStyle = \"error\";\n return closeState(type, stream, state);\n }\n function attrState(type, _stream, state) {\n if (type == \"word\") {\n setStyle = \"attribute\";\n return attrEqState;\n } else if (type == \"endTag\" || type == \"selfcloseTag\") {\n var tagName = state.tagName,\n tagStart = state.tagStart;\n state.tagName = state.tagStart = null;\n if (type == \"selfcloseTag\" || config.autoSelfClosers.hasOwnProperty(lower(tagName))) {\n maybePopContext(state, tagName);\n } else {\n maybePopContext(state, tagName);\n state.context = new Context(state, tagName, tagStart == state.indented);\n }\n return baseState;\n }\n setStyle = \"error\";\n return attrState;\n }\n function attrEqState(type, stream, state) {\n if (type == \"equals\") return attrValueState;\n if (!config.allowMissing) setStyle = \"error\";\n return attrState(type, stream, state);\n }\n function attrValueState(type, stream, state) {\n if (type == \"string\") return attrContinuedState;\n if (type == \"word\" && config.allowUnquoted) {\n setStyle = \"string\";\n return attrState;\n }\n setStyle = \"error\";\n return attrState(type, stream, state);\n }\n function attrContinuedState(type, stream, state) {\n if (type == \"string\") return attrContinuedState;\n return attrState(type, stream, state);\n }\n return {\n startState: function (baseIndent) {\n var state = {\n tokenize: inText,\n state: baseState,\n indented: baseIndent || 0,\n tagName: null,\n tagStart: null,\n context: null\n };\n if (baseIndent != null) state.baseIndent = baseIndent;\n return state;\n },\n token: function (stream, state) {\n if (!state.tagName && stream.sol()) state.indented = stream.indentation();\n if (stream.eatSpace()) return null;\n type = null;\n var style = state.tokenize(stream, state);\n if ((style || type) && style != \"comment\") {\n setStyle = null;\n state.state = state.state(type || style, stream, state);\n if (setStyle) style = setStyle == \"error\" ? style + \" error\" : setStyle;\n }\n return style;\n },\n indent: function (state, textAfter, fullLine) {\n var context = state.context;\n // Indent multi-line strings (e.g. css).\n if (state.tokenize.isInAttribute) {\n if (state.tagStart == state.indented) return state.stringStartCol + 1;else return state.indented + indentUnit;\n }\n if (context && context.noIndent) return CodeMirror.Pass;\n if (state.tokenize != inTag && state.tokenize != inText) return fullLine ? fullLine.match(/^(\\s*)/)[0].length : 0;\n // Indent the starts of attribute names.\n if (state.tagName) {\n if (config.multilineTagIndentPastTag !== false) return state.tagStart + state.tagName.length + 2;else return state.tagStart + indentUnit * (config.multilineTagIndentFactor || 1);\n }\n if (config.alignCDATA && /$/,\n blockCommentStart: \"\",\n configuration: config.htmlMode ? \"html\" : \"xml\",\n helperType: config.htmlMode ? \"html\" : \"xml\",\n skipAttribute: function (state) {\n if (state.state == attrValueState) state.state = attrState;\n },\n xmlCurrentTag: function (state) {\n return state.tagName ? {\n name: state.tagName,\n close: state.type == \"closeTag\"\n } : null;\n },\n xmlCurrentContext: function (state) {\n var context = [];\n for (var cx = state.context; cx; cx = cx.prev) context.push(cx.tagName);\n return context.reverse();\n }\n };\n });\n CodeMirror.defineMIME(\"text/xml\", \"xml\");\n CodeMirror.defineMIME(\"application/xml\", \"xml\");\n if (!CodeMirror.mimeModes.hasOwnProperty(\"text/html\")) CodeMirror.defineMIME(\"text/html\", {\n name: \"xml\",\n htmlMode: true\n });\n});","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n// Utility function that allows modes to be combined. The mode given\n// as the base argument takes care of most of the normal mode\n// functionality, but a second (typically simple) mode is used, which\n// can override the style of text. Both modes get to parse all of the\n// text, but when both assign a non-null style to a piece of code, the\n// overlay wins, unless the combine argument was true and not overridden,\n// or state.overlay.combineTokens was true, in which case the styles are\n// combined.\n\n(function (mod) {\n if (typeof exports == \"object\" && typeof module == \"object\")\n // CommonJS\n mod(require(\"../../lib/codemirror\"));else if (typeof define == \"function\" && define.amd)\n // AMD\n define([\"../../lib/codemirror\"], mod);else\n // Plain browser env\n mod(CodeMirror);\n})(function (CodeMirror) {\n \"use strict\";\n\n CodeMirror.overlayMode = function (base, overlay, combine) {\n return {\n startState: function () {\n return {\n base: CodeMirror.startState(base),\n overlay: CodeMirror.startState(overlay),\n basePos: 0,\n baseCur: null,\n overlayPos: 0,\n overlayCur: null,\n streamSeen: null\n };\n },\n copyState: function (state) {\n return {\n base: CodeMirror.copyState(base, state.base),\n overlay: CodeMirror.copyState(overlay, state.overlay),\n basePos: state.basePos,\n baseCur: null,\n overlayPos: state.overlayPos,\n overlayCur: null\n };\n },\n token: function (stream, state) {\n if (stream != state.streamSeen || Math.min(state.basePos, state.overlayPos) < stream.start) {\n state.streamSeen = stream;\n state.basePos = state.overlayPos = stream.start;\n }\n if (stream.start == state.basePos) {\n state.baseCur = base.token(stream, state.base);\n state.basePos = stream.pos;\n }\n if (stream.start == state.overlayPos) {\n stream.pos = stream.start;\n state.overlayCur = overlay.token(stream, state.overlay);\n state.overlayPos = stream.pos;\n }\n stream.pos = Math.min(state.basePos, state.overlayPos);\n\n // state.overlay.combineTokens always takes precedence over combine,\n // unless set to null\n if (state.overlayCur == null) return state.baseCur;else if (state.baseCur != null && state.overlay.combineTokens || combine && state.overlay.combineTokens == null) return state.baseCur + \" \" + state.overlayCur;else return state.overlayCur;\n },\n indent: base.indent && function (state, textAfter, line) {\n return base.indent(state.base, textAfter, line);\n },\n electricChars: base.electricChars,\n innerMode: function (state) {\n return {\n state: state.base,\n mode: base\n };\n },\n blankLine: function (state) {\n var baseToken, overlayToken;\n if (base.blankLine) baseToken = base.blankLine(state.base);\n if (overlay.blankLine) overlayToken = overlay.blankLine(state.overlay);\n return overlayToken == null ? baseToken : combine && baseToken != null ? baseToken + \" \" + overlayToken : overlayToken;\n }\n };\n };\n});","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n(function (mod) {\n if (typeof exports == \"object\" && typeof module == \"object\")\n // CommonJS\n mod(require(\"../../lib/codemirror\"));else if (typeof define == \"function\" && define.amd)\n // AMD\n define([\"../../lib/codemirror\"], mod);else\n // Plain browser env\n mod(CodeMirror);\n})(function (CodeMirror) {\n \"use strict\";\n\n var listRE = /^(\\s*)(>[> ]*|[*+-] \\[[x ]\\]\\s|[*+-]\\s|(\\d+)([.)]))(\\s*)/,\n emptyListRE = /^(\\s*)(>[> ]*|[*+-] \\[[x ]\\]|[*+-]|(\\d+)[.)])(\\s*)$/,\n unorderedListRE = /[*+-]\\s/;\n CodeMirror.commands.newlineAndIndentContinueMarkdownList = function (cm) {\n if (cm.getOption(\"disableInput\")) return CodeMirror.Pass;\n var ranges = cm.listSelections(),\n replacements = [];\n for (var i = 0; i < ranges.length; i++) {\n var pos = ranges[i].head;\n\n // If we're not in Markdown mode, fall back to normal newlineAndIndent\n var eolState = cm.getStateAfter(pos.line);\n var inner = CodeMirror.innerMode(cm.getMode(), eolState);\n if (inner.mode.name !== \"markdown\" && inner.mode.helperType !== \"markdown\") {\n cm.execCommand(\"newlineAndIndent\");\n return;\n } else {\n eolState = inner.state;\n }\n var inList = eolState.list !== false;\n var inQuote = eolState.quote !== 0;\n var line = cm.getLine(pos.line),\n match = listRE.exec(line);\n var cursorBeforeBullet = /^\\s*$/.test(line.slice(0, pos.ch));\n if (!ranges[i].empty() || !inList && !inQuote || !match || cursorBeforeBullet) {\n cm.execCommand(\"newlineAndIndent\");\n return;\n }\n if (emptyListRE.test(line)) {\n var endOfQuote = inQuote && />\\s*$/.test(line);\n var endOfList = !/>\\s*$/.test(line);\n if (endOfQuote || endOfList) cm.replaceRange(\"\", {\n line: pos.line,\n ch: 0\n }, {\n line: pos.line,\n ch: pos.ch + 1\n });\n replacements[i] = \"\\n\";\n } else {\n var indent = match[1],\n after = match[5];\n var numbered = !(unorderedListRE.test(match[2]) || match[2].indexOf(\">\") >= 0);\n var bullet = numbered ? parseInt(match[3], 10) + 1 + match[4] : match[2].replace(\"x\", \" \");\n replacements[i] = \"\\n\" + indent + bullet + after;\n if (numbered) incrementRemainingMarkdownListNumbers(cm, pos);\n }\n }\n cm.replaceSelections(replacements);\n };\n\n // Auto-updating Markdown list numbers when a new item is added to the\n // middle of a list\n function incrementRemainingMarkdownListNumbers(cm, pos) {\n var startLine = pos.line,\n lookAhead = 0,\n skipCount = 0;\n var startItem = listRE.exec(cm.getLine(startLine)),\n startIndent = startItem[1];\n do {\n lookAhead += 1;\n var nextLineNumber = startLine + lookAhead;\n var nextLine = cm.getLine(nextLineNumber),\n nextItem = listRE.exec(nextLine);\n if (nextItem) {\n var nextIndent = nextItem[1];\n var newNumber = parseInt(startItem[3], 10) + lookAhead - skipCount;\n var nextNumber = parseInt(nextItem[3], 10),\n itemNumber = nextNumber;\n if (startIndent === nextIndent && !isNaN(nextNumber)) {\n if (newNumber === nextNumber) itemNumber = nextNumber + 1;\n if (newNumber > nextNumber) itemNumber = newNumber + 1;\n cm.replaceRange(nextLine.replace(listRE, nextIndent + itemNumber + nextItem[4] + nextItem[5]), {\n line: nextLineNumber,\n ch: 0\n }, {\n line: nextLineNumber,\n ch: nextLine.length\n });\n } else {\n if (startIndent.length > nextIndent.length) return;\n // This doesn't run if the next line immediately indents, as it is\n // not clear of the users intention (new indented item or same level)\n if (startIndent.length < nextIndent.length && lookAhead === 1) return;\n skipCount += 1;\n }\n }\n } while (nextItem);\n }\n});","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\nvar CodeMirror = require('codemirror');\nCodeMirror.commands.tabAndIndentMarkdownList = function (cm) {\n var ranges = cm.listSelections();\n var pos = ranges[0].head;\n var eolState = cm.getStateAfter(pos.line);\n var inList = eolState.list !== false;\n if (inList) {\n cm.execCommand('indentMore');\n return;\n }\n if (cm.options.indentWithTabs) {\n cm.execCommand('insertTab');\n } else {\n var spaces = Array(cm.options.tabSize + 1).join(' ');\n cm.replaceSelection(spaces);\n }\n};\nCodeMirror.commands.shiftTabAndUnindentMarkdownList = function (cm) {\n var ranges = cm.listSelections();\n var pos = ranges[0].head;\n var eolState = cm.getStateAfter(pos.line);\n var inList = eolState.list !== false;\n if (inList) {\n cm.execCommand('indentLess');\n return;\n }\n if (cm.options.indentWithTabs) {\n cm.execCommand('insertTab');\n } else {\n var spaces = Array(cm.options.tabSize + 1).join(' ');\n cm.replaceSelection(spaces);\n }\n};","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n(function (mod) {\n if (typeof exports == \"object\" && typeof module == \"object\")\n // CommonJS\n mod(require(\"../../lib/codemirror\"));else if (typeof define == \"function\" && define.amd)\n // AMD\n define([\"../../lib/codemirror\"], mod);else\n // Plain browser env\n mod(CodeMirror);\n})(function (CodeMirror) {\n \"use strict\";\n\n CodeMirror.defineOption(\"fullScreen\", false, function (cm, val, old) {\n if (old == CodeMirror.Init) old = false;\n if (!old == !val) return;\n if (val) setFullscreen(cm);else setNormal(cm);\n });\n function setFullscreen(cm) {\n var wrap = cm.getWrapperElement();\n cm.state.fullScreenRestore = {\n scrollTop: window.pageYOffset,\n scrollLeft: window.pageXOffset,\n width: wrap.style.width,\n height: wrap.style.height\n };\n wrap.style.width = \"\";\n wrap.style.height = \"auto\";\n wrap.className += \" CodeMirror-fullscreen\";\n document.documentElement.style.overflow = \"hidden\";\n cm.refresh();\n }\n function setNormal(cm) {\n var wrap = cm.getWrapperElement();\n wrap.className = wrap.className.replace(/\\s*CodeMirror-fullscreen\\b/, \"\");\n document.documentElement.style.overflow = \"\";\n var info = cm.state.fullScreenRestore;\n wrap.style.width = info.width;\n wrap.style.height = info.height;\n window.scrollTo(info.scrollLeft, info.scrollTop);\n cm.refresh();\n }\n});","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n(function (mod) {\n if (typeof exports == \"object\" && typeof module == \"object\")\n // CommonJS\n mod(require(\"../lib/codemirror\"));else if (typeof define == \"function\" && define.amd)\n // AMD\n define([\"../lib/codemirror\"], mod);else\n // Plain browser env\n mod(CodeMirror);\n})(function (CodeMirror) {\n \"use strict\";\n\n CodeMirror.modeInfo = [{\n name: \"APL\",\n mime: \"text/apl\",\n mode: \"apl\",\n ext: [\"dyalog\", \"apl\"]\n }, {\n name: \"PGP\",\n mimes: [\"application/pgp\", \"application/pgp-encrypted\", \"application/pgp-keys\", \"application/pgp-signature\"],\n mode: \"asciiarmor\",\n ext: [\"asc\", \"pgp\", \"sig\"]\n }, {\n name: \"ASN.1\",\n mime: \"text/x-ttcn-asn\",\n mode: \"asn.1\",\n ext: [\"asn\", \"asn1\"]\n }, {\n name: \"Asterisk\",\n mime: \"text/x-asterisk\",\n mode: \"asterisk\",\n file: /^extensions\\.conf$/i\n }, {\n name: \"Brainfuck\",\n mime: \"text/x-brainfuck\",\n mode: \"brainfuck\",\n ext: [\"b\", \"bf\"]\n }, {\n name: \"C\",\n mime: \"text/x-csrc\",\n mode: \"clike\",\n ext: [\"c\", \"h\", \"ino\"]\n }, {\n name: \"C++\",\n mime: \"text/x-c++src\",\n mode: \"clike\",\n ext: [\"cpp\", \"c++\", \"cc\", \"cxx\", \"hpp\", \"h++\", \"hh\", \"hxx\"],\n alias: [\"cpp\"]\n }, {\n name: \"Cobol\",\n mime: \"text/x-cobol\",\n mode: \"cobol\",\n ext: [\"cob\", \"cpy\", \"cbl\"]\n }, {\n name: \"C#\",\n mime: \"text/x-csharp\",\n mode: \"clike\",\n ext: [\"cs\"],\n alias: [\"csharp\", \"cs\"]\n }, {\n name: \"Clojure\",\n mime: \"text/x-clojure\",\n mode: \"clojure\",\n ext: [\"clj\", \"cljc\", \"cljx\"]\n }, {\n name: \"ClojureScript\",\n mime: \"text/x-clojurescript\",\n mode: \"clojure\",\n ext: [\"cljs\"]\n }, {\n name: \"Closure Stylesheets (GSS)\",\n mime: \"text/x-gss\",\n mode: \"css\",\n ext: [\"gss\"]\n }, {\n name: \"CMake\",\n mime: \"text/x-cmake\",\n mode: \"cmake\",\n ext: [\"cmake\", \"cmake.in\"],\n file: /^CMakeLists\\.txt$/\n }, {\n name: \"CoffeeScript\",\n mimes: [\"application/vnd.coffeescript\", \"text/coffeescript\", \"text/x-coffeescript\"],\n mode: \"coffeescript\",\n ext: [\"coffee\"],\n alias: [\"coffee\", \"coffee-script\"]\n }, {\n name: \"Common Lisp\",\n mime: \"text/x-common-lisp\",\n mode: \"commonlisp\",\n ext: [\"cl\", \"lisp\", \"el\"],\n alias: [\"lisp\"]\n }, {\n name: \"Cypher\",\n mime: \"application/x-cypher-query\",\n mode: \"cypher\",\n ext: [\"cyp\", \"cypher\"]\n }, {\n name: \"Cython\",\n mime: \"text/x-cython\",\n mode: \"python\",\n ext: [\"pyx\", \"pxd\", \"pxi\"]\n }, {\n name: \"Crystal\",\n mime: \"text/x-crystal\",\n mode: \"crystal\",\n ext: [\"cr\"]\n }, {\n name: \"CSS\",\n mime: \"text/css\",\n mode: \"css\",\n ext: [\"css\"]\n }, {\n name: \"CQL\",\n mime: \"text/x-cassandra\",\n mode: \"sql\",\n ext: [\"cql\"]\n }, {\n name: \"D\",\n mime: \"text/x-d\",\n mode: \"d\",\n ext: [\"d\"]\n }, {\n name: \"Dart\",\n mimes: [\"application/dart\", \"text/x-dart\"],\n mode: \"dart\",\n ext: [\"dart\"]\n }, {\n name: \"diff\",\n mime: \"text/x-diff\",\n mode: \"diff\",\n ext: [\"diff\", \"patch\"]\n }, {\n name: \"Django\",\n mime: \"text/x-django\",\n mode: \"django\"\n }, {\n name: \"Dockerfile\",\n mime: \"text/x-dockerfile\",\n mode: \"dockerfile\",\n file: /^Dockerfile$/\n }, {\n name: \"DTD\",\n mime: \"application/xml-dtd\",\n mode: \"dtd\",\n ext: [\"dtd\"]\n }, {\n name: \"Dylan\",\n mime: \"text/x-dylan\",\n mode: \"dylan\",\n ext: [\"dylan\", \"dyl\", \"intr\"]\n }, {\n name: \"EBNF\",\n mime: \"text/x-ebnf\",\n mode: \"ebnf\"\n }, {\n name: \"ECL\",\n mime: \"text/x-ecl\",\n mode: \"ecl\",\n ext: [\"ecl\"]\n }, {\n name: \"edn\",\n mime: \"application/edn\",\n mode: \"clojure\",\n ext: [\"edn\"]\n }, {\n name: \"Eiffel\",\n mime: \"text/x-eiffel\",\n mode: \"eiffel\",\n ext: [\"e\"]\n }, {\n name: \"Elm\",\n mime: \"text/x-elm\",\n mode: \"elm\",\n ext: [\"elm\"]\n }, {\n name: \"Embedded JavaScript\",\n mime: \"application/x-ejs\",\n mode: \"htmlembedded\",\n ext: [\"ejs\"]\n }, {\n name: \"Embedded Ruby\",\n mime: \"application/x-erb\",\n mode: \"htmlembedded\",\n ext: [\"erb\"]\n }, {\n name: \"Erlang\",\n mime: \"text/x-erlang\",\n mode: \"erlang\",\n ext: [\"erl\"]\n }, {\n name: \"Esper\",\n mime: \"text/x-esper\",\n mode: \"sql\"\n }, {\n name: \"Factor\",\n mime: \"text/x-factor\",\n mode: \"factor\",\n ext: [\"factor\"]\n }, {\n name: \"FCL\",\n mime: \"text/x-fcl\",\n mode: \"fcl\"\n }, {\n name: \"Forth\",\n mime: \"text/x-forth\",\n mode: \"forth\",\n ext: [\"forth\", \"fth\", \"4th\"]\n }, {\n name: \"Fortran\",\n mime: \"text/x-fortran\",\n mode: \"fortran\",\n ext: [\"f\", \"for\", \"f77\", \"f90\", \"f95\"]\n }, {\n name: \"F#\",\n mime: \"text/x-fsharp\",\n mode: \"mllike\",\n ext: [\"fs\"],\n alias: [\"fsharp\"]\n }, {\n name: \"Gas\",\n mime: \"text/x-gas\",\n mode: \"gas\",\n ext: [\"s\"]\n }, {\n name: \"Gherkin\",\n mime: \"text/x-feature\",\n mode: \"gherkin\",\n ext: [\"feature\"]\n }, {\n name: \"GitHub Flavored Markdown\",\n mime: \"text/x-gfm\",\n mode: \"gfm\",\n file: /^(readme|contributing|history)\\.md$/i\n }, {\n name: \"Go\",\n mime: \"text/x-go\",\n mode: \"go\",\n ext: [\"go\"]\n }, {\n name: \"Groovy\",\n mime: \"text/x-groovy\",\n mode: \"groovy\",\n ext: [\"groovy\", \"gradle\"],\n file: /^Jenkinsfile$/\n }, {\n name: \"HAML\",\n mime: \"text/x-haml\",\n mode: \"haml\",\n ext: [\"haml\"]\n }, {\n name: \"Haskell\",\n mime: \"text/x-haskell\",\n mode: \"haskell\",\n ext: [\"hs\"]\n }, {\n name: \"Haskell (Literate)\",\n mime: \"text/x-literate-haskell\",\n mode: \"haskell-literate\",\n ext: [\"lhs\"]\n }, {\n name: \"Haxe\",\n mime: \"text/x-haxe\",\n mode: \"haxe\",\n ext: [\"hx\"]\n }, {\n name: \"HXML\",\n mime: \"text/x-hxml\",\n mode: \"haxe\",\n ext: [\"hxml\"]\n }, {\n name: \"ASP.NET\",\n mime: \"application/x-aspx\",\n mode: \"htmlembedded\",\n ext: [\"aspx\"],\n alias: [\"asp\", \"aspx\"]\n }, {\n name: \"HTML\",\n mime: \"text/html\",\n mode: \"htmlmixed\",\n ext: [\"html\", \"htm\", \"handlebars\", \"hbs\"],\n alias: [\"xhtml\"]\n }, {\n name: \"HTTP\",\n mime: \"message/http\",\n mode: \"http\"\n }, {\n name: \"IDL\",\n mime: \"text/x-idl\",\n mode: \"idl\",\n ext: [\"pro\"]\n }, {\n name: \"Pug\",\n mime: \"text/x-pug\",\n mode: \"pug\",\n ext: [\"jade\", \"pug\"],\n alias: [\"jade\"]\n }, {\n name: \"Java\",\n mime: \"text/x-java\",\n mode: \"clike\",\n ext: [\"java\"]\n }, {\n name: \"Java Server Pages\",\n mime: \"application/x-jsp\",\n mode: \"htmlembedded\",\n ext: [\"jsp\"],\n alias: [\"jsp\"]\n }, {\n name: \"JavaScript\",\n mimes: [\"text/javascript\", \"text/ecmascript\", \"application/javascript\", \"application/x-javascript\", \"application/ecmascript\"],\n mode: \"javascript\",\n ext: [\"js\"],\n alias: [\"ecmascript\", \"js\", \"node\"]\n }, {\n name: \"JSON\",\n mimes: [\"application/json\", \"application/x-json\"],\n mode: \"javascript\",\n ext: [\"json\", \"map\"],\n alias: [\"json5\"]\n }, {\n name: \"JSON-LD\",\n mime: \"application/ld+json\",\n mode: \"javascript\",\n ext: [\"jsonld\"],\n alias: [\"jsonld\"]\n }, {\n name: \"JSX\",\n mime: \"text/jsx\",\n mode: \"jsx\",\n ext: [\"jsx\"]\n }, {\n name: \"Jinja2\",\n mime: \"text/jinja2\",\n mode: \"jinja2\",\n ext: [\"j2\", \"jinja\", \"jinja2\"]\n }, {\n name: \"Julia\",\n mime: \"text/x-julia\",\n mode: \"julia\",\n ext: [\"jl\"],\n alias: [\"jl\"]\n }, {\n name: \"Kotlin\",\n mime: \"text/x-kotlin\",\n mode: \"clike\",\n ext: [\"kt\"]\n }, {\n name: \"LESS\",\n mime: \"text/x-less\",\n mode: \"css\",\n ext: [\"less\"]\n }, {\n name: \"LiveScript\",\n mime: \"text/x-livescript\",\n mode: \"livescript\",\n ext: [\"ls\"],\n alias: [\"ls\"]\n }, {\n name: \"Lua\",\n mime: \"text/x-lua\",\n mode: \"lua\",\n ext: [\"lua\"]\n }, {\n name: \"Markdown\",\n mime: \"text/x-markdown\",\n mode: \"markdown\",\n ext: [\"markdown\", \"md\", \"mkd\"]\n }, {\n name: \"mIRC\",\n mime: \"text/mirc\",\n mode: \"mirc\"\n }, {\n name: \"MariaDB SQL\",\n mime: \"text/x-mariadb\",\n mode: \"sql\"\n }, {\n name: \"Mathematica\",\n mime: \"text/x-mathematica\",\n mode: \"mathematica\",\n ext: [\"m\", \"nb\", \"wl\", \"wls\"]\n }, {\n name: \"Modelica\",\n mime: \"text/x-modelica\",\n mode: \"modelica\",\n ext: [\"mo\"]\n }, {\n name: \"MUMPS\",\n mime: \"text/x-mumps\",\n mode: \"mumps\",\n ext: [\"mps\"]\n }, {\n name: \"MS SQL\",\n mime: \"text/x-mssql\",\n mode: \"sql\"\n }, {\n name: \"mbox\",\n mime: \"application/mbox\",\n mode: \"mbox\",\n ext: [\"mbox\"]\n }, {\n name: \"MySQL\",\n mime: \"text/x-mysql\",\n mode: \"sql\"\n }, {\n name: \"Nginx\",\n mime: \"text/x-nginx-conf\",\n mode: \"nginx\",\n file: /nginx.*\\.conf$/i\n }, {\n name: \"NSIS\",\n mime: \"text/x-nsis\",\n mode: \"nsis\",\n ext: [\"nsh\", \"nsi\"]\n }, {\n name: \"NTriples\",\n mimes: [\"application/n-triples\", \"application/n-quads\", \"text/n-triples\"],\n mode: \"ntriples\",\n ext: [\"nt\", \"nq\"]\n }, {\n name: \"Objective-C\",\n mime: \"text/x-objectivec\",\n mode: \"clike\",\n ext: [\"m\"],\n alias: [\"objective-c\", \"objc\"]\n }, {\n name: \"Objective-C++\",\n mime: \"text/x-objectivec++\",\n mode: \"clike\",\n ext: [\"mm\"],\n alias: [\"objective-c++\", \"objc++\"]\n }, {\n name: \"OCaml\",\n mime: \"text/x-ocaml\",\n mode: \"mllike\",\n ext: [\"ml\", \"mli\", \"mll\", \"mly\"]\n }, {\n name: \"Octave\",\n mime: \"text/x-octave\",\n mode: \"octave\",\n ext: [\"m\"]\n }, {\n name: \"Oz\",\n mime: \"text/x-oz\",\n mode: \"oz\",\n ext: [\"oz\"]\n }, {\n name: \"Pascal\",\n mime: \"text/x-pascal\",\n mode: \"pascal\",\n ext: [\"p\", \"pas\"]\n }, {\n name: \"PEG.js\",\n mime: \"null\",\n mode: \"pegjs\",\n ext: [\"jsonld\"]\n }, {\n name: \"Perl\",\n mime: \"text/x-perl\",\n mode: \"perl\",\n ext: [\"pl\", \"pm\"]\n }, {\n name: \"PHP\",\n mimes: [\"text/x-php\", \"application/x-httpd-php\", \"application/x-httpd-php-open\"],\n mode: \"php\",\n ext: [\"php\", \"php3\", \"php4\", \"php5\", \"php7\", \"phtml\"]\n }, {\n name: \"Pig\",\n mime: \"text/x-pig\",\n mode: \"pig\",\n ext: [\"pig\"]\n }, {\n name: \"Plain Text\",\n mime: \"text/plain\",\n mode: \"null\",\n ext: [\"txt\", \"text\", \"conf\", \"def\", \"list\", \"log\"]\n }, {\n name: \"PLSQL\",\n mime: \"text/x-plsql\",\n mode: \"sql\",\n ext: [\"pls\"]\n }, {\n name: \"PostgreSQL\",\n mime: \"text/x-pgsql\",\n mode: \"sql\"\n }, {\n name: \"PowerShell\",\n mime: \"application/x-powershell\",\n mode: \"powershell\",\n ext: [\"ps1\", \"psd1\", \"psm1\"]\n }, {\n name: \"Properties files\",\n mime: \"text/x-properties\",\n mode: \"properties\",\n ext: [\"properties\", \"ini\", \"in\"],\n alias: [\"ini\", \"properties\"]\n }, {\n name: \"ProtoBuf\",\n mime: \"text/x-protobuf\",\n mode: \"protobuf\",\n ext: [\"proto\"]\n }, {\n name: \"Python\",\n mime: \"text/x-python\",\n mode: \"python\",\n ext: [\"BUILD\", \"bzl\", \"py\", \"pyw\"],\n file: /^(BUCK|BUILD)$/\n }, {\n name: \"Puppet\",\n mime: \"text/x-puppet\",\n mode: \"puppet\",\n ext: [\"pp\"]\n }, {\n name: \"Q\",\n mime: \"text/x-q\",\n mode: \"q\",\n ext: [\"q\"]\n }, {\n name: \"R\",\n mime: \"text/x-rsrc\",\n mode: \"r\",\n ext: [\"r\", \"R\"],\n alias: [\"rscript\"]\n }, {\n name: \"reStructuredText\",\n mime: \"text/x-rst\",\n mode: \"rst\",\n ext: [\"rst\"],\n alias: [\"rst\"]\n }, {\n name: \"RPM Changes\",\n mime: \"text/x-rpm-changes\",\n mode: \"rpm\"\n }, {\n name: \"RPM Spec\",\n mime: \"text/x-rpm-spec\",\n mode: \"rpm\",\n ext: [\"spec\"]\n }, {\n name: \"Ruby\",\n mime: \"text/x-ruby\",\n mode: \"ruby\",\n ext: [\"rb\"],\n alias: [\"jruby\", \"macruby\", \"rake\", \"rb\", \"rbx\"]\n }, {\n name: \"Rust\",\n mime: \"text/x-rustsrc\",\n mode: \"rust\",\n ext: [\"rs\"]\n }, {\n name: \"SAS\",\n mime: \"text/x-sas\",\n mode: \"sas\",\n ext: [\"sas\"]\n }, {\n name: \"Sass\",\n mime: \"text/x-sass\",\n mode: \"sass\",\n ext: [\"sass\"]\n }, {\n name: \"Scala\",\n mime: \"text/x-scala\",\n mode: \"clike\",\n ext: [\"scala\"]\n }, {\n name: \"Scheme\",\n mime: \"text/x-scheme\",\n mode: \"scheme\",\n ext: [\"scm\", \"ss\"]\n }, {\n name: \"SCSS\",\n mime: \"text/x-scss\",\n mode: \"css\",\n ext: [\"scss\"]\n }, {\n name: \"Shell\",\n mimes: [\"text/x-sh\", \"application/x-sh\"],\n mode: \"shell\",\n ext: [\"sh\", \"ksh\", \"bash\"],\n alias: [\"bash\", \"sh\", \"zsh\"],\n file: /^PKGBUILD$/\n }, {\n name: \"Sieve\",\n mime: \"application/sieve\",\n mode: \"sieve\",\n ext: [\"siv\", \"sieve\"]\n }, {\n name: \"Slim\",\n mimes: [\"text/x-slim\", \"application/x-slim\"],\n mode: \"slim\",\n ext: [\"slim\"]\n }, {\n name: \"Smalltalk\",\n mime: \"text/x-stsrc\",\n mode: \"smalltalk\",\n ext: [\"st\"]\n }, {\n name: \"Smarty\",\n mime: \"text/x-smarty\",\n mode: \"smarty\",\n ext: [\"tpl\"]\n }, {\n name: \"Solr\",\n mime: \"text/x-solr\",\n mode: \"solr\"\n }, {\n name: \"SML\",\n mime: \"text/x-sml\",\n mode: \"mllike\",\n ext: [\"sml\", \"sig\", \"fun\", \"smackspec\"]\n }, {\n name: \"Soy\",\n mime: \"text/x-soy\",\n mode: \"soy\",\n ext: [\"soy\"],\n alias: [\"closure template\"]\n }, {\n name: \"SPARQL\",\n mime: \"application/sparql-query\",\n mode: \"sparql\",\n ext: [\"rq\", \"sparql\"],\n alias: [\"sparul\"]\n }, {\n name: \"Spreadsheet\",\n mime: \"text/x-spreadsheet\",\n mode: \"spreadsheet\",\n alias: [\"excel\", \"formula\"]\n }, {\n name: \"SQL\",\n mime: \"text/x-sql\",\n mode: \"sql\",\n ext: [\"sql\"]\n }, {\n name: \"SQLite\",\n mime: \"text/x-sqlite\",\n mode: \"sql\"\n }, {\n name: \"Squirrel\",\n mime: \"text/x-squirrel\",\n mode: \"clike\",\n ext: [\"nut\"]\n }, {\n name: \"Stylus\",\n mime: \"text/x-styl\",\n mode: \"stylus\",\n ext: [\"styl\"]\n }, {\n name: \"Swift\",\n mime: \"text/x-swift\",\n mode: \"swift\",\n ext: [\"swift\"]\n }, {\n name: \"sTeX\",\n mime: \"text/x-stex\",\n mode: \"stex\"\n }, {\n name: \"LaTeX\",\n mime: \"text/x-latex\",\n mode: \"stex\",\n ext: [\"text\", \"ltx\", \"tex\"],\n alias: [\"tex\"]\n }, {\n name: \"SystemVerilog\",\n mime: \"text/x-systemverilog\",\n mode: \"verilog\",\n ext: [\"v\", \"sv\", \"svh\"]\n }, {\n name: \"Tcl\",\n mime: \"text/x-tcl\",\n mode: \"tcl\",\n ext: [\"tcl\"]\n }, {\n name: \"Textile\",\n mime: \"text/x-textile\",\n mode: \"textile\",\n ext: [\"textile\"]\n }, {\n name: \"TiddlyWiki\",\n mime: \"text/x-tiddlywiki\",\n mode: \"tiddlywiki\"\n }, {\n name: \"Tiki wiki\",\n mime: \"text/tiki\",\n mode: \"tiki\"\n }, {\n name: \"TOML\",\n mime: \"text/x-toml\",\n mode: \"toml\",\n ext: [\"toml\"]\n }, {\n name: \"Tornado\",\n mime: \"text/x-tornado\",\n mode: \"tornado\"\n }, {\n name: \"troff\",\n mime: \"text/troff\",\n mode: \"troff\",\n ext: [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"]\n }, {\n name: \"TTCN\",\n mime: \"text/x-ttcn\",\n mode: \"ttcn\",\n ext: [\"ttcn\", \"ttcn3\", \"ttcnpp\"]\n }, {\n name: \"TTCN_CFG\",\n mime: \"text/x-ttcn-cfg\",\n mode: \"ttcn-cfg\",\n ext: [\"cfg\"]\n }, {\n name: \"Turtle\",\n mime: \"text/turtle\",\n mode: \"turtle\",\n ext: [\"ttl\"]\n }, {\n name: \"TypeScript\",\n mime: \"application/typescript\",\n mode: \"javascript\",\n ext: [\"ts\"],\n alias: [\"ts\"]\n }, {\n name: \"TypeScript-JSX\",\n mime: \"text/typescript-jsx\",\n mode: \"jsx\",\n ext: [\"tsx\"],\n alias: [\"tsx\"]\n }, {\n name: \"Twig\",\n mime: \"text/x-twig\",\n mode: \"twig\"\n }, {\n name: \"Web IDL\",\n mime: \"text/x-webidl\",\n mode: \"webidl\",\n ext: [\"webidl\"]\n }, {\n name: \"VB.NET\",\n mime: \"text/x-vb\",\n mode: \"vb\",\n ext: [\"vb\"]\n }, {\n name: \"VBScript\",\n mime: \"text/vbscript\",\n mode: \"vbscript\",\n ext: [\"vbs\"]\n }, {\n name: \"Velocity\",\n mime: \"text/velocity\",\n mode: \"velocity\",\n ext: [\"vtl\"]\n }, {\n name: \"Verilog\",\n mime: \"text/x-verilog\",\n mode: \"verilog\",\n ext: [\"v\"]\n }, {\n name: \"VHDL\",\n mime: \"text/x-vhdl\",\n mode: \"vhdl\",\n ext: [\"vhd\", \"vhdl\"]\n }, {\n name: \"Vue.js Component\",\n mimes: [\"script/x-vue\", \"text/x-vue\"],\n mode: \"vue\",\n ext: [\"vue\"]\n }, {\n name: \"XML\",\n mimes: [\"application/xml\", \"text/xml\"],\n mode: \"xml\",\n ext: [\"xml\", \"xsl\", \"xsd\", \"svg\"],\n alias: [\"rss\", \"wsdl\", \"xsd\"]\n }, {\n name: \"XQuery\",\n mime: \"application/xquery\",\n mode: \"xquery\",\n ext: [\"xy\", \"xquery\"]\n }, {\n name: \"Yacas\",\n mime: \"text/x-yacas\",\n mode: \"yacas\",\n ext: [\"ys\"]\n }, {\n name: \"YAML\",\n mimes: [\"text/x-yaml\", \"text/yaml\"],\n mode: \"yaml\",\n ext: [\"yaml\", \"yml\"],\n alias: [\"yml\"]\n }, {\n name: \"Z80\",\n mime: \"text/x-z80\",\n mode: \"z80\",\n ext: [\"z80\"]\n }, {\n name: \"mscgen\",\n mime: \"text/x-mscgen\",\n mode: \"mscgen\",\n ext: [\"mscgen\", \"mscin\", \"msc\"]\n }, {\n name: \"xu\",\n mime: \"text/x-xu\",\n mode: \"mscgen\",\n ext: [\"xu\"]\n }, {\n name: \"msgenny\",\n mime: \"text/x-msgenny\",\n mode: \"mscgen\",\n ext: [\"msgenny\"]\n }, {\n name: \"WebAssembly\",\n mime: \"text/webassembly\",\n mode: \"wast\",\n ext: [\"wat\", \"wast\"]\n }];\n // Ensure all modes have a mime property for backwards compatibility\n for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n var info = CodeMirror.modeInfo[i];\n if (info.mimes) info.mime = info.mimes[0];\n }\n CodeMirror.findModeByMIME = function (mime) {\n mime = mime.toLowerCase();\n for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n var info = CodeMirror.modeInfo[i];\n if (info.mime == mime) return info;\n if (info.mimes) for (var j = 0; j < info.mimes.length; j++) if (info.mimes[j] == mime) return info;\n }\n if (/\\+xml$/.test(mime)) return CodeMirror.findModeByMIME(\"application/xml\");\n if (/\\+json$/.test(mime)) return CodeMirror.findModeByMIME(\"application/json\");\n };\n CodeMirror.findModeByExtension = function (ext) {\n ext = ext.toLowerCase();\n for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n var info = CodeMirror.modeInfo[i];\n if (info.ext) for (var j = 0; j < info.ext.length; j++) if (info.ext[j] == ext) return info;\n }\n };\n CodeMirror.findModeByFileName = function (filename) {\n for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n var info = CodeMirror.modeInfo[i];\n if (info.file && info.file.test(filename)) return info;\n }\n var dot = filename.lastIndexOf(\".\");\n var ext = dot > -1 && filename.substring(dot + 1, filename.length);\n if (ext) return CodeMirror.findModeByExtension(ext);\n };\n CodeMirror.findModeByName = function (name) {\n name = name.toLowerCase();\n for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n var info = CodeMirror.modeInfo[i];\n if (info.name.toLowerCase() == name) return info;\n if (info.alias) for (var j = 0; j < info.alias.length; j++) if (info.alias[j].toLowerCase() == name) return info;\n }\n };\n});","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n(function (mod) {\n if (typeof exports == \"object\" && typeof module == \"object\")\n // CommonJS\n mod(require(\"../../lib/codemirror\"));else if (typeof define == \"function\" && define.amd)\n // AMD\n define([\"../../lib/codemirror\"], mod);else\n // Plain browser env\n mod(CodeMirror);\n})(function (CodeMirror) {\n CodeMirror.defineOption(\"placeholder\", \"\", function (cm, val, old) {\n var prev = old && old != CodeMirror.Init;\n if (val && !prev) {\n cm.on(\"blur\", onBlur);\n cm.on(\"change\", onChange);\n cm.on(\"swapDoc\", onChange);\n CodeMirror.on(cm.getInputField(), \"compositionupdate\", cm.state.placeholderCompose = function () {\n onComposition(cm);\n });\n onChange(cm);\n } else if (!val && prev) {\n cm.off(\"blur\", onBlur);\n cm.off(\"change\", onChange);\n cm.off(\"swapDoc\", onChange);\n CodeMirror.off(cm.getInputField(), \"compositionupdate\", cm.state.placeholderCompose);\n clearPlaceholder(cm);\n var wrapper = cm.getWrapperElement();\n wrapper.className = wrapper.className.replace(\" CodeMirror-empty\", \"\");\n }\n if (val && !cm.hasFocus()) onBlur(cm);\n });\n function clearPlaceholder(cm) {\n if (cm.state.placeholder) {\n cm.state.placeholder.parentNode.removeChild(cm.state.placeholder);\n cm.state.placeholder = null;\n }\n }\n function setPlaceholder(cm) {\n clearPlaceholder(cm);\n var elt = cm.state.placeholder = document.createElement(\"pre\");\n elt.style.cssText = \"height: 0; overflow: visible\";\n elt.style.direction = cm.getOption(\"direction\");\n elt.className = \"CodeMirror-placeholder CodeMirror-line-like\";\n var placeHolder = cm.getOption(\"placeholder\");\n if (typeof placeHolder == \"string\") placeHolder = document.createTextNode(placeHolder);\n elt.appendChild(placeHolder);\n cm.display.lineSpace.insertBefore(elt, cm.display.lineSpace.firstChild);\n }\n function onComposition(cm) {\n setTimeout(function () {\n var empty = false;\n if (cm.lineCount() == 1) {\n var input = cm.getInputField();\n empty = input.nodeName == \"TEXTAREA\" ? !cm.getLine(0).length : !/[^\\u200b]/.test(input.querySelector(\".CodeMirror-line\").textContent);\n }\n if (empty) setPlaceholder(cm);else clearPlaceholder(cm);\n }, 20);\n }\n function onBlur(cm) {\n if (isEmpty(cm)) setPlaceholder(cm);\n }\n function onChange(cm) {\n var wrapper = cm.getWrapperElement(),\n empty = isEmpty(cm);\n wrapper.className = wrapper.className.replace(\" CodeMirror-empty\", \"\") + (empty ? \" CodeMirror-empty\" : \"\");\n if (empty) setPlaceholder(cm);else clearPlaceholder(cm);\n }\n function isEmpty(cm) {\n return cm.lineCount() === 1 && cm.getLine(0) === \"\";\n }\n});","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n(function (mod) {\n if (typeof exports == \"object\" && typeof module == \"object\")\n // CommonJS\n mod(require(\"../../lib/codemirror\"));else if (typeof define == \"function\" && define.amd)\n // AMD\n define([\"../../lib/codemirror\"], mod);else\n // Plain browser env\n mod(CodeMirror);\n})(function (CodeMirror) {\n \"use strict\";\n\n CodeMirror.defineOption(\"autoRefresh\", false, function (cm, val) {\n if (cm.state.autoRefresh) {\n stopListening(cm, cm.state.autoRefresh);\n cm.state.autoRefresh = null;\n }\n if (val && cm.display.wrapper.offsetHeight == 0) startListening(cm, cm.state.autoRefresh = {\n delay: val.delay || 250\n });\n });\n function startListening(cm, state) {\n function check() {\n if (cm.display.wrapper.offsetHeight) {\n stopListening(cm, state);\n if (cm.display.lastWrapHeight != cm.display.wrapper.clientHeight) cm.refresh();\n } else {\n state.timeout = setTimeout(check, state.delay);\n }\n }\n state.timeout = setTimeout(check, state.delay);\n state.hurry = function () {\n clearTimeout(state.timeout);\n state.timeout = setTimeout(check, 50);\n };\n CodeMirror.on(window, \"mouseup\", state.hurry);\n CodeMirror.on(window, \"keyup\", state.hurry);\n }\n function stopListening(_cm, state) {\n clearTimeout(state.timeout);\n CodeMirror.off(window, \"mouseup\", state.hurry);\n CodeMirror.off(window, \"keyup\", state.hurry);\n }\n});","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n// Because sometimes you need to mark the selected *text*.\n//\n// Adds an option 'styleSelectedText' which, when enabled, gives\n// selected text the CSS class given as option value, or\n// \"CodeMirror-selectedtext\" when the value is not a string.\n\n(function (mod) {\n if (typeof exports == \"object\" && typeof module == \"object\")\n // CommonJS\n mod(require(\"../../lib/codemirror\"));else if (typeof define == \"function\" && define.amd)\n // AMD\n define([\"../../lib/codemirror\"], mod);else\n // Plain browser env\n mod(CodeMirror);\n})(function (CodeMirror) {\n \"use strict\";\n\n CodeMirror.defineOption(\"styleSelectedText\", false, function (cm, val, old) {\n var prev = old && old != CodeMirror.Init;\n if (val && !prev) {\n cm.state.markedSelection = [];\n cm.state.markedSelectionStyle = typeof val == \"string\" ? val : \"CodeMirror-selectedtext\";\n reset(cm);\n cm.on(\"cursorActivity\", onCursorActivity);\n cm.on(\"change\", onChange);\n } else if (!val && prev) {\n cm.off(\"cursorActivity\", onCursorActivity);\n cm.off(\"change\", onChange);\n clear(cm);\n cm.state.markedSelection = cm.state.markedSelectionStyle = null;\n }\n });\n function onCursorActivity(cm) {\n if (cm.state.markedSelection) cm.operation(function () {\n update(cm);\n });\n }\n function onChange(cm) {\n if (cm.state.markedSelection && cm.state.markedSelection.length) cm.operation(function () {\n clear(cm);\n });\n }\n var CHUNK_SIZE = 8;\n var Pos = CodeMirror.Pos;\n var cmp = CodeMirror.cmpPos;\n function coverRange(cm, from, to, addAt) {\n if (cmp(from, to) == 0) return;\n var array = cm.state.markedSelection;\n var cls = cm.state.markedSelectionStyle;\n for (var line = from.line;;) {\n var start = line == from.line ? from : Pos(line, 0);\n var endLine = line + CHUNK_SIZE,\n atEnd = endLine >= to.line;\n var end = atEnd ? to : Pos(endLine, 0);\n var mark = cm.markText(start, end, {\n className: cls\n });\n if (addAt == null) array.push(mark);else array.splice(addAt++, 0, mark);\n if (atEnd) break;\n line = endLine;\n }\n }\n function clear(cm) {\n var array = cm.state.markedSelection;\n for (var i = 0; i < array.length; ++i) array[i].clear();\n array.length = 0;\n }\n function reset(cm) {\n clear(cm);\n var ranges = cm.listSelections();\n for (var i = 0; i < ranges.length; i++) coverRange(cm, ranges[i].from(), ranges[i].to());\n }\n function update(cm) {\n if (!cm.somethingSelected()) return clear(cm);\n if (cm.listSelections().length > 1) return reset(cm);\n var from = cm.getCursor(\"start\"),\n to = cm.getCursor(\"end\");\n var array = cm.state.markedSelection;\n if (!array.length) return coverRange(cm, from, to);\n var coverStart = array[0].find(),\n coverEnd = array[array.length - 1].find();\n if (!coverStart || !coverEnd || to.line - from.line <= CHUNK_SIZE || cmp(from, coverEnd.to) >= 0 || cmp(to, coverStart.from) <= 0) return reset(cm);\n while (cmp(from, coverStart.from) > 0) {\n array.shift().clear();\n coverStart = array[0].find();\n }\n if (cmp(from, coverStart.from) < 0) {\n if (coverStart.to.line - from.line < CHUNK_SIZE) {\n array.shift().clear();\n coverRange(cm, from, coverStart.to, 0);\n } else {\n coverRange(cm, from, coverStart.from, 0);\n }\n }\n while (cmp(to, coverEnd.to) < 0) {\n array.pop().clear();\n coverEnd = array[array.length - 1].find();\n }\n if (cmp(to, coverEnd.to) > 0) {\n if (to.line - coverEnd.from.line < CHUNK_SIZE) {\n array.pop().clear();\n coverRange(cm, coverEnd.from, to);\n } else {\n coverRange(cm, coverEnd.to, to);\n }\n }\n }\n});","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n(function (mod) {\n if (typeof exports == \"object\" && typeof module == \"object\")\n // CommonJS\n mod(require(\"../../lib/codemirror\"));else if (typeof define == \"function\" && define.amd)\n // AMD\n define([\"../../lib/codemirror\"], mod);else\n // Plain browser env\n mod(CodeMirror);\n})(function (CodeMirror) {\n \"use strict\";\n\n var Pos = CodeMirror.Pos;\n function regexpFlags(regexp) {\n var flags = regexp.flags;\n return flags != null ? flags : (regexp.ignoreCase ? \"i\" : \"\") + (regexp.global ? \"g\" : \"\") + (regexp.multiline ? \"m\" : \"\");\n }\n function ensureFlags(regexp, flags) {\n var current = regexpFlags(regexp),\n target = current;\n for (var i = 0; i < flags.length; i++) if (target.indexOf(flags.charAt(i)) == -1) target += flags.charAt(i);\n return current == target ? regexp : new RegExp(regexp.source, target);\n }\n function maybeMultiline(regexp) {\n return /\\\\s|\\\\n|\\n|\\\\W|\\\\D|\\[\\^/.test(regexp.source);\n }\n function searchRegexpForward(doc, regexp, start) {\n regexp = ensureFlags(regexp, \"g\");\n for (var line = start.line, ch = start.ch, last = doc.lastLine(); line <= last; line++, ch = 0) {\n regexp.lastIndex = ch;\n var string = doc.getLine(line),\n match = regexp.exec(string);\n if (match) return {\n from: Pos(line, match.index),\n to: Pos(line, match.index + match[0].length),\n match: match\n };\n }\n }\n function searchRegexpForwardMultiline(doc, regexp, start) {\n if (!maybeMultiline(regexp)) return searchRegexpForward(doc, regexp, start);\n regexp = ensureFlags(regexp, \"gm\");\n var string,\n chunk = 1;\n for (var line = start.line, last = doc.lastLine(); line <= last;) {\n // This grows the search buffer in exponentially-sized chunks\n // between matches, so that nearby matches are fast and don't\n // require concatenating the whole document (in case we're\n // searching for something that has tons of matches), but at the\n // same time, the amount of retries is limited.\n for (var i = 0; i < chunk; i++) {\n if (line > last) break;\n var curLine = doc.getLine(line++);\n string = string == null ? curLine : string + \"\\n\" + curLine;\n }\n chunk = chunk * 2;\n regexp.lastIndex = start.ch;\n var match = regexp.exec(string);\n if (match) {\n var before = string.slice(0, match.index).split(\"\\n\"),\n inside = match[0].split(\"\\n\");\n var startLine = start.line + before.length - 1,\n startCh = before[before.length - 1].length;\n return {\n from: Pos(startLine, startCh),\n to: Pos(startLine + inside.length - 1, inside.length == 1 ? startCh + inside[0].length : inside[inside.length - 1].length),\n match: match\n };\n }\n }\n }\n function lastMatchIn(string, regexp, endMargin) {\n var match,\n from = 0;\n while (from <= string.length) {\n regexp.lastIndex = from;\n var newMatch = regexp.exec(string);\n if (!newMatch) break;\n var end = newMatch.index + newMatch[0].length;\n if (end > string.length - endMargin) break;\n if (!match || end > match.index + match[0].length) match = newMatch;\n from = newMatch.index + 1;\n }\n return match;\n }\n function searchRegexpBackward(doc, regexp, start) {\n regexp = ensureFlags(regexp, \"g\");\n for (var line = start.line, ch = start.ch, first = doc.firstLine(); line >= first; line--, ch = -1) {\n var string = doc.getLine(line);\n var match = lastMatchIn(string, regexp, ch < 0 ? 0 : string.length - ch);\n if (match) return {\n from: Pos(line, match.index),\n to: Pos(line, match.index + match[0].length),\n match: match\n };\n }\n }\n function searchRegexpBackwardMultiline(doc, regexp, start) {\n if (!maybeMultiline(regexp)) return searchRegexpBackward(doc, regexp, start);\n regexp = ensureFlags(regexp, \"gm\");\n var string,\n chunkSize = 1,\n endMargin = doc.getLine(start.line).length - start.ch;\n for (var line = start.line, first = doc.firstLine(); line >= first;) {\n for (var i = 0; i < chunkSize && line >= first; i++) {\n var curLine = doc.getLine(line--);\n string = string == null ? curLine : curLine + \"\\n\" + string;\n }\n chunkSize *= 2;\n var match = lastMatchIn(string, regexp, endMargin);\n if (match) {\n var before = string.slice(0, match.index).split(\"\\n\"),\n inside = match[0].split(\"\\n\");\n var startLine = line + before.length,\n startCh = before[before.length - 1].length;\n return {\n from: Pos(startLine, startCh),\n to: Pos(startLine + inside.length - 1, inside.length == 1 ? startCh + inside[0].length : inside[inside.length - 1].length),\n match: match\n };\n }\n }\n }\n var doFold, noFold;\n if (String.prototype.normalize) {\n doFold = function (str) {\n return str.normalize(\"NFD\").toLowerCase();\n };\n noFold = function (str) {\n return str.normalize(\"NFD\");\n };\n } else {\n doFold = function (str) {\n return str.toLowerCase();\n };\n noFold = function (str) {\n return str;\n };\n }\n\n // Maps a position in a case-folded line back to a position in the original line\n // (compensating for codepoints increasing in number during folding)\n function adjustPos(orig, folded, pos, foldFunc) {\n if (orig.length == folded.length) return pos;\n for (var min = 0, max = pos + Math.max(0, orig.length - folded.length);;) {\n if (min == max) return min;\n var mid = min + max >> 1;\n var len = foldFunc(orig.slice(0, mid)).length;\n if (len == pos) return mid;else if (len > pos) max = mid;else min = mid + 1;\n }\n }\n function searchStringForward(doc, query, start, caseFold) {\n // Empty string would match anything and never progress, so we\n // define it to match nothing instead.\n if (!query.length) return null;\n var fold = caseFold ? doFold : noFold;\n var lines = fold(query).split(/\\r|\\n\\r?/);\n search: for (var line = start.line, ch = start.ch, last = doc.lastLine() + 1 - lines.length; line <= last; line++, ch = 0) {\n var orig = doc.getLine(line).slice(ch),\n string = fold(orig);\n if (lines.length == 1) {\n var found = string.indexOf(lines[0]);\n if (found == -1) continue search;\n var start = adjustPos(orig, string, found, fold) + ch;\n return {\n from: Pos(line, adjustPos(orig, string, found, fold) + ch),\n to: Pos(line, adjustPos(orig, string, found + lines[0].length, fold) + ch)\n };\n } else {\n var cutFrom = string.length - lines[0].length;\n if (string.slice(cutFrom) != lines[0]) continue search;\n for (var i = 1; i < lines.length - 1; i++) if (fold(doc.getLine(line + i)) != lines[i]) continue search;\n var end = doc.getLine(line + lines.length - 1),\n endString = fold(end),\n lastLine = lines[lines.length - 1];\n if (endString.slice(0, lastLine.length) != lastLine) continue search;\n return {\n from: Pos(line, adjustPos(orig, string, cutFrom, fold) + ch),\n to: Pos(line + lines.length - 1, adjustPos(end, endString, lastLine.length, fold))\n };\n }\n }\n }\n function searchStringBackward(doc, query, start, caseFold) {\n if (!query.length) return null;\n var fold = caseFold ? doFold : noFold;\n var lines = fold(query).split(/\\r|\\n\\r?/);\n search: for (var line = start.line, ch = start.ch, first = doc.firstLine() - 1 + lines.length; line >= first; line--, ch = -1) {\n var orig = doc.getLine(line);\n if (ch > -1) orig = orig.slice(0, ch);\n var string = fold(orig);\n if (lines.length == 1) {\n var found = string.lastIndexOf(lines[0]);\n if (found == -1) continue search;\n return {\n from: Pos(line, adjustPos(orig, string, found, fold)),\n to: Pos(line, adjustPos(orig, string, found + lines[0].length, fold))\n };\n } else {\n var lastLine = lines[lines.length - 1];\n if (string.slice(0, lastLine.length) != lastLine) continue search;\n for (var i = 1, start = line - lines.length + 1; i < lines.length - 1; i++) if (fold(doc.getLine(start + i)) != lines[i]) continue search;\n var top = doc.getLine(line + 1 - lines.length),\n topString = fold(top);\n if (topString.slice(topString.length - lines[0].length) != lines[0]) continue search;\n return {\n from: Pos(line + 1 - lines.length, adjustPos(top, topString, top.length - lines[0].length, fold)),\n to: Pos(line, adjustPos(orig, string, lastLine.length, fold))\n };\n }\n }\n }\n function SearchCursor(doc, query, pos, options) {\n this.atOccurrence = false;\n this.afterEmptyMatch = false;\n this.doc = doc;\n pos = pos ? doc.clipPos(pos) : Pos(0, 0);\n this.pos = {\n from: pos,\n to: pos\n };\n var caseFold;\n if (typeof options == \"object\") {\n caseFold = options.caseFold;\n } else {\n // Backwards compat for when caseFold was the 4th argument\n caseFold = options;\n options = null;\n }\n if (typeof query == \"string\") {\n if (caseFold == null) caseFold = false;\n this.matches = function (reverse, pos) {\n return (reverse ? searchStringBackward : searchStringForward)(doc, query, pos, caseFold);\n };\n } else {\n query = ensureFlags(query, \"gm\");\n if (!options || options.multiline !== false) this.matches = function (reverse, pos) {\n return (reverse ? searchRegexpBackwardMultiline : searchRegexpForwardMultiline)(doc, query, pos);\n };else this.matches = function (reverse, pos) {\n return (reverse ? searchRegexpBackward : searchRegexpForward)(doc, query, pos);\n };\n }\n }\n SearchCursor.prototype = {\n findNext: function () {\n return this.find(false);\n },\n findPrevious: function () {\n return this.find(true);\n },\n find: function (reverse) {\n var head = this.doc.clipPos(reverse ? this.pos.from : this.pos.to);\n if (this.afterEmptyMatch && this.atOccurrence) {\n // do not return the same 0 width match twice\n head = Pos(head.line, head.ch);\n if (reverse) {\n head.ch--;\n if (head.ch < 0) {\n head.line--;\n head.ch = (this.doc.getLine(head.line) || \"\").length;\n }\n } else {\n head.ch++;\n if (head.ch > (this.doc.getLine(head.line) || \"\").length) {\n head.ch = 0;\n head.line++;\n }\n }\n if (CodeMirror.cmpPos(head, this.doc.clipPos(head)) != 0) {\n return this.atOccurrence = false;\n }\n }\n var result = this.matches(reverse, head);\n this.afterEmptyMatch = result && CodeMirror.cmpPos(result.from, result.to) == 0;\n if (result) {\n this.pos = result;\n this.atOccurrence = true;\n return this.pos.match || true;\n } else {\n var end = Pos(reverse ? this.doc.firstLine() : this.doc.lastLine() + 1, 0);\n this.pos = {\n from: end,\n to: end\n };\n return this.atOccurrence = false;\n }\n },\n from: function () {\n if (this.atOccurrence) return this.pos.from;\n },\n to: function () {\n if (this.atOccurrence) return this.pos.to;\n },\n replace: function (newText, origin) {\n if (!this.atOccurrence) return;\n var lines = CodeMirror.splitLines(newText);\n this.doc.replaceRange(lines, this.pos.from, this.pos.to, origin);\n this.pos.to = Pos(this.pos.from.line + lines.length - 1, lines[lines.length - 1].length + (lines.length == 1 ? this.pos.from.ch : 0));\n }\n };\n CodeMirror.defineExtension(\"getSearchCursor\", function (query, pos, caseFold) {\n return new SearchCursor(this.doc, query, pos, caseFold);\n });\n CodeMirror.defineDocExtension(\"getSearchCursor\", function (query, pos, caseFold) {\n return new SearchCursor(this, query, pos, caseFold);\n });\n CodeMirror.defineExtension(\"selectMatches\", function (query, caseFold) {\n var ranges = [];\n var cur = this.getSearchCursor(query, this.getCursor(\"from\"), caseFold);\n while (cur.findNext()) {\n if (CodeMirror.cmpPos(cur.to(), this.getCursor(\"to\")) > 0) break;\n ranges.push({\n anchor: cur.from(),\n head: cur.to()\n });\n }\n if (ranges.length) this.setSelections(ranges, 0);\n });\n});","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n(function (mod) {\n if (typeof exports == \"object\" && typeof module == \"object\")\n // CommonJS\n mod(require(\"../../lib/codemirror\"), require(\"../markdown/markdown\"), require(\"../../addon/mode/overlay\"));else if (typeof define == \"function\" && define.amd)\n // AMD\n define([\"../../lib/codemirror\", \"../markdown/markdown\", \"../../addon/mode/overlay\"], mod);else\n // Plain browser env\n mod(CodeMirror);\n})(function (CodeMirror) {\n \"use strict\";\n\n var urlRE = /^((?:(?:aaas?|about|acap|adiumxtra|af[ps]|aim|apt|attachment|aw|beshare|bitcoin|bolo|callto|cap|chrome(?:-extension)?|cid|coap|com-eventbrite-attendee|content|crid|cvs|data|dav|dict|dlna-(?:playcontainer|playsingle)|dns|doi|dtn|dvb|ed2k|facetime|feed|file|finger|fish|ftp|geo|gg|git|gizmoproject|go|gopher|gtalk|h323|hcp|https?|iax|icap|icon|im|imap|info|ipn|ipp|irc[6s]?|iris(?:\\.beep|\\.lwz|\\.xpc|\\.xpcs)?|itms|jar|javascript|jms|keyparc|lastfm|ldaps?|magnet|mailto|maps|market|message|mid|mms|ms-help|msnim|msrps?|mtqp|mumble|mupdate|mvn|news|nfs|nih?|nntp|notes|oid|opaquelocktoken|palm|paparazzi|platform|pop|pres|proxy|psyc|query|res(?:ource)?|rmi|rsync|rtmp|rtsp|secondlife|service|session|sftp|sgn|shttp|sieve|sips?|skype|sm[bs]|snmp|soap\\.beeps?|soldat|spotify|ssh|steam|svn|tag|teamspeak|tel(?:net)?|tftp|things|thismessage|tip|tn3270|tv|udp|unreal|urn|ut2004|vemmi|ventrilo|view-source|webcal|wss?|wtai|wyciwyg|xcon(?:-userid)?|xfire|xmlrpc\\.beeps?|xmpp|xri|ymsgr|z39\\.50[rs]?):(?:\\/{1,3}|[a-z0-9%])|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}\\/)(?:[^\\s()<>]|\\([^\\s()<>]*\\))+(?:\\([^\\s()<>]*\\)|[^\\s`*!()\\[\\]{};:'\".,<>?«»“”‘’]))/i;\n CodeMirror.defineMode(\"gfm\", function (config, modeConfig) {\n var codeDepth = 0;\n function blankLine(state) {\n state.code = false;\n return null;\n }\n var gfmOverlay = {\n startState: function () {\n return {\n code: false,\n codeBlock: false,\n ateSpace: false\n };\n },\n copyState: function (s) {\n return {\n code: s.code,\n codeBlock: s.codeBlock,\n ateSpace: s.ateSpace\n };\n },\n token: function (stream, state) {\n state.combineTokens = null;\n\n // Hack to prevent formatting override inside code blocks (block and inline)\n if (state.codeBlock) {\n if (stream.match(/^```+/)) {\n state.codeBlock = false;\n return null;\n }\n stream.skipToEnd();\n return null;\n }\n if (stream.sol()) {\n state.code = false;\n }\n if (stream.sol() && stream.match(/^```+/)) {\n stream.skipToEnd();\n state.codeBlock = true;\n return null;\n }\n // If this block is changed, it may need to be updated in Markdown mode\n if (stream.peek() === '`') {\n stream.next();\n var before = stream.pos;\n stream.eatWhile('`');\n var difference = 1 + stream.pos - before;\n if (!state.code) {\n codeDepth = difference;\n state.code = true;\n } else {\n if (difference === codeDepth) {\n // Must be exact\n state.code = false;\n }\n }\n return null;\n } else if (state.code) {\n stream.next();\n return null;\n }\n // Check if space. If so, links can be formatted later on\n if (stream.eatSpace()) {\n state.ateSpace = true;\n return null;\n }\n if (stream.sol() || state.ateSpace) {\n state.ateSpace = false;\n if (modeConfig.gitHubSpice !== false) {\n if (stream.match(/^(?:[a-zA-Z0-9\\-_]+\\/)?(?:[a-zA-Z0-9\\-_]+@)?(?=.{0,6}\\d)(?:[a-f0-9]{7,40}\\b)/)) {\n // User/Project@SHA\n // User@SHA\n // SHA\n state.combineTokens = true;\n return \"link\";\n } else if (stream.match(/^(?:[a-zA-Z0-9\\-_]+\\/)?(?:[a-zA-Z0-9\\-_]+)?#[0-9]+\\b/)) {\n // User/Project#Num\n // User#Num\n // #Num\n state.combineTokens = true;\n return \"link\";\n }\n }\n }\n if (stream.match(urlRE) && stream.string.slice(stream.start - 2, stream.start) != \"](\" && (stream.start == 0 || /\\W/.test(stream.string.charAt(stream.start - 1)))) {\n // URLs\n // Taken from http://daringfireball.net/2010/07/improved_regex_for_matching_urls\n // And then (issue #1160) simplified to make it not crash the Chrome Regexp engine\n // And then limited url schemes to the CommonMark list, so foo:bar isn't matched as a URL\n state.combineTokens = true;\n return \"link\";\n }\n stream.next();\n return null;\n },\n blankLine: blankLine\n };\n var markdownConfig = {\n taskLists: true,\n strikethrough: true,\n emoji: true\n };\n for (var attr in modeConfig) {\n markdownConfig[attr] = modeConfig[attr];\n }\n markdownConfig.name = \"markdown\";\n return CodeMirror.overlayMode(CodeMirror.getMode(config, markdownConfig), gfmOverlay);\n }, \"markdown\");\n CodeMirror.defineMIME(\"text/x-gfm\", \"gfm\");\n});","// Use strict mode (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode)\n\"use strict\";\n\n// Requires\nvar Typo = require(\"typo-js\");\n\n// Create function\nfunction CodeMirrorSpellChecker(options) {\n // Initialize\n options = options || {};\n\n // Verify\n if (typeof options.codeMirrorInstance !== \"function\" || typeof options.codeMirrorInstance.defineMode !== \"function\") {\n console.log(\"CodeMirror Spell Checker: You must provide an instance of CodeMirror via the option `codeMirrorInstance`\");\n return;\n }\n\n // Because some browsers don't support this functionality yet\n if (!String.prototype.includes) {\n String.prototype.includes = function () {\n \"use strict\";\n\n return String.prototype.indexOf.apply(this, arguments) !== -1;\n };\n }\n\n // Define the new mode\n options.codeMirrorInstance.defineMode(\"spell-checker\", function (config) {\n // Load AFF/DIC data\n if (!CodeMirrorSpellChecker.aff_loading) {\n CodeMirrorSpellChecker.aff_loading = true;\n var xhr_aff = new XMLHttpRequest();\n xhr_aff.open(\"GET\", \"https://cdn.jsdelivr.net/codemirror.spell-checker/latest/en_US.aff\", true);\n xhr_aff.onload = function () {\n if (xhr_aff.readyState === 4 && xhr_aff.status === 200) {\n CodeMirrorSpellChecker.aff_data = xhr_aff.responseText;\n CodeMirrorSpellChecker.num_loaded++;\n if (CodeMirrorSpellChecker.num_loaded == 2) {\n CodeMirrorSpellChecker.typo = new Typo(\"en_US\", CodeMirrorSpellChecker.aff_data, CodeMirrorSpellChecker.dic_data, {\n platform: \"any\"\n });\n }\n }\n };\n xhr_aff.send(null);\n }\n if (!CodeMirrorSpellChecker.dic_loading) {\n CodeMirrorSpellChecker.dic_loading = true;\n var xhr_dic = new XMLHttpRequest();\n xhr_dic.open(\"GET\", \"https://cdn.jsdelivr.net/codemirror.spell-checker/latest/en_US.dic\", true);\n xhr_dic.onload = function () {\n if (xhr_dic.readyState === 4 && xhr_dic.status === 200) {\n CodeMirrorSpellChecker.dic_data = xhr_dic.responseText;\n CodeMirrorSpellChecker.num_loaded++;\n if (CodeMirrorSpellChecker.num_loaded == 2) {\n CodeMirrorSpellChecker.typo = new Typo(\"en_US\", CodeMirrorSpellChecker.aff_data, CodeMirrorSpellChecker.dic_data, {\n platform: \"any\"\n });\n }\n }\n };\n xhr_dic.send(null);\n }\n\n // Define what separates a word\n var rx_word = \"!\\\"#$%&()*+,-./:;<=>?@[\\\\]^_`{|}~ \";\n\n // Create the overlay and such\n var overlay = {\n token: function (stream) {\n var ch = stream.peek();\n var word = \"\";\n if (rx_word.includes(ch)) {\n stream.next();\n return null;\n }\n while ((ch = stream.peek()) != null && !rx_word.includes(ch)) {\n word += ch;\n stream.next();\n }\n if (CodeMirrorSpellChecker.typo && !CodeMirrorSpellChecker.typo.check(word)) return \"spell-error\"; // CSS class: cm-spell-error\n\n return null;\n }\n };\n var mode = options.codeMirrorInstance.getMode(config, config.backdrop || \"text/plain\");\n return options.codeMirrorInstance.overlayMode(mode, overlay, true);\n });\n}\n\n// Initialize data globally to reduce memory consumption\nCodeMirrorSpellChecker.num_loaded = 0;\nCodeMirrorSpellChecker.aff_loading = false;\nCodeMirrorSpellChecker.dic_loading = false;\nCodeMirrorSpellChecker.aff_data = \"\";\nCodeMirrorSpellChecker.dic_data = \"\";\nCodeMirrorSpellChecker.typo;\n\n// Export\nmodule.exports = CodeMirrorSpellChecker;","/* globals chrome: false */\n/* globals __dirname: false */\n/* globals require: false */\n/* globals Buffer: false */\n/* globals module: false */\n\n/**\n * Typo is a JavaScript implementation of a spellchecker using hunspell-style \n * dictionaries.\n */\n\nvar Typo;\n(function () {\n \"use strict\";\n\n /**\n * Typo constructor.\n *\n * @param {String} [dictionary] The locale code of the dictionary being used. e.g.,\n * \"en_US\". This is only used to auto-load dictionaries.\n * @param {String} [affData] The data from the dictionary's .aff file. If omitted\n * and Typo.js is being used in a Chrome extension, the .aff\n * file will be loaded automatically from\n * lib/typo/dictionaries/[dictionary]/[dictionary].aff\n * In other environments, it will be loaded from\n * [settings.dictionaryPath]/dictionaries/[dictionary]/[dictionary].aff\n * @param {String} [wordsData] The data from the dictionary's .dic file. If omitted\n * and Typo.js is being used in a Chrome extension, the .dic\n * file will be loaded automatically from\n * lib/typo/dictionaries/[dictionary]/[dictionary].dic\n * In other environments, it will be loaded from\n * [settings.dictionaryPath]/dictionaries/[dictionary]/[dictionary].dic\n * @param {Object} [settings] Constructor settings. Available properties are:\n * {String} [dictionaryPath]: path to load dictionary from in non-chrome\n * environment.\n * {Object} [flags]: flag information.\n * {Boolean} [asyncLoad]: If true, affData and wordsData will be loaded\n * asynchronously.\n * {Function} [loadedCallback]: Called when both affData and wordsData\n * have been loaded. Only used if asyncLoad is set to true. The parameter\n * is the instantiated Typo object.\n *\n * @returns {Typo} A Typo object.\n */\n Typo = function (dictionary, affData, wordsData, settings) {\n settings = settings || {};\n this.dictionary = null;\n this.rules = {};\n this.dictionaryTable = {};\n this.compoundRules = [];\n this.compoundRuleCodes = {};\n this.replacementTable = [];\n this.flags = settings.flags || {};\n this.memoized = {};\n this.loaded = false;\n var self = this;\n var path;\n\n // Loop-control variables.\n var i, j, _len, _jlen;\n if (dictionary) {\n self.dictionary = dictionary;\n\n // If the data is preloaded, just setup the Typo object.\n if (affData && wordsData) {\n setup();\n }\n // Loading data for Chrome extentions.\n else if (typeof window !== 'undefined' && 'chrome' in window && 'extension' in window.chrome && 'getURL' in window.chrome.extension) {\n if (settings.dictionaryPath) {\n path = settings.dictionaryPath;\n } else {\n path = \"typo/dictionaries\";\n }\n if (!affData) readDataFile(chrome.extension.getURL(path + \"/\" + dictionary + \"/\" + dictionary + \".aff\"), setAffData);\n if (!wordsData) readDataFile(chrome.extension.getURL(path + \"/\" + dictionary + \"/\" + dictionary + \".dic\"), setWordsData);\n } else {\n if (settings.dictionaryPath) {\n path = settings.dictionaryPath;\n } else if (typeof __dirname !== 'undefined') {\n path = __dirname + '/dictionaries';\n } else {\n path = './dictionaries';\n }\n if (!affData) readDataFile(path + \"/\" + dictionary + \"/\" + dictionary + \".aff\", setAffData);\n if (!wordsData) readDataFile(path + \"/\" + dictionary + \"/\" + dictionary + \".dic\", setWordsData);\n }\n }\n function readDataFile(url, setFunc) {\n var response = self._readFile(url, null, settings.asyncLoad);\n if (settings.asyncLoad) {\n response.then(function (data) {\n setFunc(data);\n });\n } else {\n setFunc(response);\n }\n }\n function setAffData(data) {\n affData = data;\n if (wordsData) {\n setup();\n }\n }\n function setWordsData(data) {\n wordsData = data;\n if (affData) {\n setup();\n }\n }\n function setup() {\n self.rules = self._parseAFF(affData);\n\n // Save the rule codes that are used in compound rules.\n self.compoundRuleCodes = {};\n for (i = 0, _len = self.compoundRules.length; i < _len; i++) {\n var rule = self.compoundRules[i];\n for (j = 0, _jlen = rule.length; j < _jlen; j++) {\n self.compoundRuleCodes[rule[j]] = [];\n }\n }\n\n // If we add this ONLYINCOMPOUND flag to self.compoundRuleCodes, then _parseDIC\n // will do the work of saving the list of words that are compound-only.\n if (\"ONLYINCOMPOUND\" in self.flags) {\n self.compoundRuleCodes[self.flags.ONLYINCOMPOUND] = [];\n }\n self.dictionaryTable = self._parseDIC(wordsData);\n\n // Get rid of any codes from the compound rule codes that are never used \n // (or that were special regex characters). Not especially necessary... \n for (i in self.compoundRuleCodes) {\n if (self.compoundRuleCodes[i].length === 0) {\n delete self.compoundRuleCodes[i];\n }\n }\n\n // Build the full regular expressions for each compound rule.\n // I have a feeling (but no confirmation yet) that this method of \n // testing for compound words is probably slow.\n for (i = 0, _len = self.compoundRules.length; i < _len; i++) {\n var ruleText = self.compoundRules[i];\n var expressionText = \"\";\n for (j = 0, _jlen = ruleText.length; j < _jlen; j++) {\n var character = ruleText[j];\n if (character in self.compoundRuleCodes) {\n expressionText += \"(\" + self.compoundRuleCodes[character].join(\"|\") + \")\";\n } else {\n expressionText += character;\n }\n }\n self.compoundRules[i] = new RegExp(expressionText, \"i\");\n }\n self.loaded = true;\n if (settings.asyncLoad && settings.loadedCallback) {\n settings.loadedCallback(self);\n }\n }\n return this;\n };\n Typo.prototype = {\n /**\n * Loads a Typo instance from a hash of all of the Typo properties.\n *\n * @param object obj A hash of Typo properties, probably gotten from a JSON.parse(JSON.stringify(typo_instance)).\n */\n\n load: function (obj) {\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) {\n this[i] = obj[i];\n }\n }\n return this;\n },\n /**\n * Read the contents of a file.\n * \n * @param {String} path The path (relative) to the file.\n * @param {String} [charset=\"ISO8859-1\"] The expected charset of the file\n * @param {Boolean} async If true, the file will be read asynchronously. For node.js this does nothing, all\n * files are read synchronously.\n * @returns {String} The file data if async is false, otherwise a promise object. If running node.js, the data is\n * always returned.\n */\n\n _readFile: function (path, charset, async) {\n charset = charset || \"utf8\";\n if (typeof XMLHttpRequest !== 'undefined') {\n var promise;\n var req = new XMLHttpRequest();\n req.open(\"GET\", path, async);\n if (async) {\n promise = new Promise(function (resolve, reject) {\n req.onload = function () {\n if (req.status === 200) {\n resolve(req.responseText);\n } else {\n reject(req.statusText);\n }\n };\n req.onerror = function () {\n reject(req.statusText);\n };\n });\n }\n if (req.overrideMimeType) req.overrideMimeType(\"text/plain; charset=\" + charset);\n req.send(null);\n return async ? promise : req.responseText;\n } else if (typeof require !== 'undefined') {\n // Node.js\n var fs = require(\"fs\");\n try {\n if (fs.existsSync(path)) {\n return fs.readFileSync(path, charset);\n } else {\n console.log(\"Path \" + path + \" does not exist.\");\n }\n } catch (e) {\n console.log(e);\n return '';\n }\n }\n },\n /**\n * Parse the rules out from a .aff file.\n *\n * @param {String} data The contents of the affix file.\n * @returns object The rules from the file.\n */\n\n _parseAFF: function (data) {\n var rules = {};\n var line, subline, numEntries, lineParts;\n var i, j, _len, _jlen;\n var lines = data.split(/\\r?\\n/);\n for (i = 0, _len = lines.length; i < _len; i++) {\n // Remove comment lines\n line = this._removeAffixComments(lines[i]);\n line = line.trim();\n if (!line) {\n continue;\n }\n var definitionParts = line.split(/\\s+/);\n var ruleType = definitionParts[0];\n if (ruleType == \"PFX\" || ruleType == \"SFX\") {\n var ruleCode = definitionParts[1];\n var combineable = definitionParts[2];\n numEntries = parseInt(definitionParts[3], 10);\n var entries = [];\n for (j = i + 1, _jlen = i + 1 + numEntries; j < _jlen; j++) {\n subline = lines[j];\n lineParts = subline.split(/\\s+/);\n var charactersToRemove = lineParts[2];\n var additionParts = lineParts[3].split(\"/\");\n var charactersToAdd = additionParts[0];\n if (charactersToAdd === \"0\") charactersToAdd = \"\";\n var continuationClasses = this.parseRuleCodes(additionParts[1]);\n var regexToMatch = lineParts[4];\n var entry = {};\n entry.add = charactersToAdd;\n if (continuationClasses.length > 0) entry.continuationClasses = continuationClasses;\n if (regexToMatch !== \".\") {\n if (ruleType === \"SFX\") {\n entry.match = new RegExp(regexToMatch + \"$\");\n } else {\n entry.match = new RegExp(\"^\" + regexToMatch);\n }\n }\n if (charactersToRemove != \"0\") {\n if (ruleType === \"SFX\") {\n entry.remove = new RegExp(charactersToRemove + \"$\");\n } else {\n entry.remove = charactersToRemove;\n }\n }\n entries.push(entry);\n }\n rules[ruleCode] = {\n \"type\": ruleType,\n \"combineable\": combineable == \"Y\",\n \"entries\": entries\n };\n i += numEntries;\n } else if (ruleType === \"COMPOUNDRULE\") {\n numEntries = parseInt(definitionParts[1], 10);\n for (j = i + 1, _jlen = i + 1 + numEntries; j < _jlen; j++) {\n line = lines[j];\n lineParts = line.split(/\\s+/);\n this.compoundRules.push(lineParts[1]);\n }\n i += numEntries;\n } else if (ruleType === \"REP\") {\n lineParts = line.split(/\\s+/);\n if (lineParts.length === 3) {\n this.replacementTable.push([lineParts[1], lineParts[2]]);\n }\n } else {\n // ONLYINCOMPOUND\n // COMPOUNDMIN\n // FLAG\n // KEEPCASE\n // NEEDAFFIX\n\n this.flags[ruleType] = definitionParts[1];\n }\n }\n return rules;\n },\n /**\n * Removes comments.\n *\n * @param {String} data A line from an affix file.\n * @return {String} The cleaned-up line.\n */\n\n _removeAffixComments: function (line) {\n // This used to remove any string starting with '#' up to the end of the line,\n // but some COMPOUNDRULE definitions include '#' as part of the rule.\n // So, only remove lines that begin with a comment, optionally preceded by whitespace.\n if (line.match(/^\\s*#/, \"\")) {\n return '';\n }\n return line;\n },\n /**\n * Parses the words out from the .dic file.\n *\n * @param {String} data The data from the dictionary file.\n * @returns object The lookup table containing all of the words and\n * word forms from the dictionary.\n */\n\n _parseDIC: function (data) {\n data = this._removeDicComments(data);\n var lines = data.split(/\\r?\\n/);\n var dictionaryTable = {};\n function addWord(word, rules) {\n // Some dictionaries will list the same word multiple times with different rule sets.\n if (!dictionaryTable.hasOwnProperty(word)) {\n dictionaryTable[word] = null;\n }\n if (rules.length > 0) {\n if (dictionaryTable[word] === null) {\n dictionaryTable[word] = [];\n }\n dictionaryTable[word].push(rules);\n }\n }\n\n // The first line is the number of words in the dictionary.\n for (var i = 1, _len = lines.length; i < _len; i++) {\n var line = lines[i];\n if (!line) {\n // Ignore empty lines.\n continue;\n }\n var parts = line.split(\"/\", 2);\n var word = parts[0];\n\n // Now for each affix rule, generate that form of the word.\n if (parts.length > 1) {\n var ruleCodesArray = this.parseRuleCodes(parts[1]);\n\n // Save the ruleCodes for compound word situations.\n if (!(\"NEEDAFFIX\" in this.flags) || ruleCodesArray.indexOf(this.flags.NEEDAFFIX) == -1) {\n addWord(word, ruleCodesArray);\n }\n for (var j = 0, _jlen = ruleCodesArray.length; j < _jlen; j++) {\n var code = ruleCodesArray[j];\n var rule = this.rules[code];\n if (rule) {\n var newWords = this._applyRule(word, rule);\n for (var ii = 0, _iilen = newWords.length; ii < _iilen; ii++) {\n var newWord = newWords[ii];\n addWord(newWord, []);\n if (rule.combineable) {\n for (var k = j + 1; k < _jlen; k++) {\n var combineCode = ruleCodesArray[k];\n var combineRule = this.rules[combineCode];\n if (combineRule) {\n if (combineRule.combineable && rule.type != combineRule.type) {\n var otherNewWords = this._applyRule(newWord, combineRule);\n for (var iii = 0, _iiilen = otherNewWords.length; iii < _iiilen; iii++) {\n var otherNewWord = otherNewWords[iii];\n addWord(otherNewWord, []);\n }\n }\n }\n }\n }\n }\n }\n if (code in this.compoundRuleCodes) {\n this.compoundRuleCodes[code].push(word);\n }\n }\n } else {\n addWord(word.trim(), []);\n }\n }\n return dictionaryTable;\n },\n /**\n * Removes comment lines and then cleans up blank lines and trailing whitespace.\n *\n * @param {String} data The data from a .dic file.\n * @return {String} The cleaned-up data.\n */\n\n _removeDicComments: function (data) {\n // I can't find any official documentation on it, but at least the de_DE\n // dictionary uses tab-indented lines as comments.\n\n // Remove comments\n data = data.replace(/^\\t.*$/mg, \"\");\n return data;\n },\n parseRuleCodes: function (textCodes) {\n if (!textCodes) {\n return [];\n } else if (!(\"FLAG\" in this.flags)) {\n // The flag symbols are single characters\n return textCodes.split(\"\");\n } else if (this.flags.FLAG === \"long\") {\n // The flag symbols are two characters long.\n var flags = [];\n for (var i = 0, _len = textCodes.length; i < _len; i += 2) {\n flags.push(textCodes.substr(i, 2));\n }\n return flags;\n } else if (this.flags.FLAG === \"num\") {\n // The flag symbols are a CSV list of numbers.\n return textCodes.split(\",\");\n } else if (this.flags.FLAG === \"UTF-8\") {\n // The flags are single UTF-8 characters.\n // @see https://github.com/cfinke/Typo.js/issues/57\n return Array.from(textCodes);\n } else {\n // It's possible that this fallback case will not work for all FLAG values,\n // but I think it's more likely to work than not returning anything at all.\n return textCodes.split(\"\");\n }\n },\n /**\n * Applies an affix rule to a word.\n *\n * @param {String} word The base word.\n * @param {Object} rule The affix rule.\n * @returns {String[]} The new words generated by the rule.\n */\n\n _applyRule: function (word, rule) {\n var entries = rule.entries;\n var newWords = [];\n for (var i = 0, _len = entries.length; i < _len; i++) {\n var entry = entries[i];\n if (!entry.match || word.match(entry.match)) {\n var newWord = word;\n if (entry.remove) {\n newWord = newWord.replace(entry.remove, \"\");\n }\n if (rule.type === \"SFX\") {\n newWord = newWord + entry.add;\n } else {\n newWord = entry.add + newWord;\n }\n newWords.push(newWord);\n if (\"continuationClasses\" in entry) {\n for (var j = 0, _jlen = entry.continuationClasses.length; j < _jlen; j++) {\n var continuationRule = this.rules[entry.continuationClasses[j]];\n if (continuationRule) {\n newWords = newWords.concat(this._applyRule(newWord, continuationRule));\n }\n /*\n else {\n \t// This shouldn't happen, but it does, at least in the de_DE dictionary.\n \t// I think the author mistakenly supplied lower-case rule codes instead \n \t// of upper-case.\n }\n */\n }\n }\n }\n }\n\n return newWords;\n },\n /**\n * Checks whether a word or a capitalization variant exists in the current dictionary.\n * The word is trimmed and several variations of capitalizations are checked.\n * If you want to check a word without any changes made to it, call checkExact()\n *\n * @see http://blog.stevenlevithan.com/archives/faster-trim-javascript re:trimming function\n *\n * @param {String} aWord The word to check.\n * @returns {Boolean}\n */\n\n check: function (aWord) {\n if (!this.loaded) {\n throw \"Dictionary not loaded.\";\n }\n\n // Remove leading and trailing whitespace\n var trimmedWord = aWord.replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n if (this.checkExact(trimmedWord)) {\n return true;\n }\n\n // The exact word is not in the dictionary.\n if (trimmedWord.toUpperCase() === trimmedWord) {\n // The word was supplied in all uppercase.\n // Check for a capitalized form of the word.\n var capitalizedWord = trimmedWord[0] + trimmedWord.substring(1).toLowerCase();\n if (this.hasFlag(capitalizedWord, \"KEEPCASE\")) {\n // Capitalization variants are not allowed for this word.\n return false;\n }\n if (this.checkExact(capitalizedWord)) {\n // The all-caps word is a capitalized word spelled correctly.\n return true;\n }\n if (this.checkExact(trimmedWord.toLowerCase())) {\n // The all-caps is a lowercase word spelled correctly.\n return true;\n }\n }\n var uncapitalizedWord = trimmedWord[0].toLowerCase() + trimmedWord.substring(1);\n if (uncapitalizedWord !== trimmedWord) {\n if (this.hasFlag(uncapitalizedWord, \"KEEPCASE\")) {\n // Capitalization variants are not allowed for this word.\n return false;\n }\n\n // Check for an uncapitalized form\n if (this.checkExact(uncapitalizedWord)) {\n // The word is spelled correctly but with the first letter capitalized.\n return true;\n }\n }\n return false;\n },\n /**\n * Checks whether a word exists in the current dictionary.\n *\n * @param {String} word The word to check.\n * @returns {Boolean}\n */\n\n checkExact: function (word) {\n if (!this.loaded) {\n throw \"Dictionary not loaded.\";\n }\n var ruleCodes = this.dictionaryTable[word];\n var i, _len;\n if (typeof ruleCodes === 'undefined') {\n // Check if this might be a compound word.\n if (\"COMPOUNDMIN\" in this.flags && word.length >= this.flags.COMPOUNDMIN) {\n for (i = 0, _len = this.compoundRules.length; i < _len; i++) {\n if (word.match(this.compoundRules[i])) {\n return true;\n }\n }\n }\n } else if (ruleCodes === null) {\n // a null (but not undefined) value for an entry in the dictionary table\n // means that the word is in the dictionary but has no flags.\n return true;\n } else if (typeof ruleCodes === 'object') {\n // this.dictionary['hasOwnProperty'] will be a function.\n for (i = 0, _len = ruleCodes.length; i < _len; i++) {\n if (!this.hasFlag(word, \"ONLYINCOMPOUND\", ruleCodes[i])) {\n return true;\n }\n }\n }\n return false;\n },\n /**\n * Looks up whether a given word is flagged with a given flag.\n *\n * @param {String} word The word in question.\n * @param {String} flag The flag in question.\n * @return {Boolean}\n */\n\n hasFlag: function (word, flag, wordFlags) {\n if (!this.loaded) {\n throw \"Dictionary not loaded.\";\n }\n if (flag in this.flags) {\n if (typeof wordFlags === 'undefined') {\n wordFlags = Array.prototype.concat.apply([], this.dictionaryTable[word]);\n }\n if (wordFlags && wordFlags.indexOf(this.flags[flag]) !== -1) {\n return true;\n }\n }\n return false;\n },\n /**\n * Returns a list of suggestions for a misspelled word.\n *\n * @see http://www.norvig.com/spell-correct.html for the basis of this suggestor.\n * This suggestor is primitive, but it works.\n *\n * @param {String} word The misspelling.\n * @param {Number} [limit=5] The maximum number of suggestions to return.\n * @returns {String[]} The array of suggestions.\n */\n\n alphabet: \"\",\n suggest: function (word, limit) {\n if (!this.loaded) {\n throw \"Dictionary not loaded.\";\n }\n limit = limit || 5;\n if (this.memoized.hasOwnProperty(word)) {\n var memoizedLimit = this.memoized[word]['limit'];\n\n // Only return the cached list if it's big enough or if there weren't enough suggestions\n // to fill a smaller limit.\n if (limit <= memoizedLimit || this.memoized[word]['suggestions'].length < memoizedLimit) {\n return this.memoized[word]['suggestions'].slice(0, limit);\n }\n }\n if (this.check(word)) return [];\n\n // Check the replacement table.\n for (var i = 0, _len = this.replacementTable.length; i < _len; i++) {\n var replacementEntry = this.replacementTable[i];\n if (word.indexOf(replacementEntry[0]) !== -1) {\n var correctedWord = word.replace(replacementEntry[0], replacementEntry[1]);\n if (this.check(correctedWord)) {\n return [correctedWord];\n }\n }\n }\n var self = this;\n self.alphabet = \"abcdefghijklmnopqrstuvwxyz\";\n\n /*\n if (!self.alphabet) {\n \t// Use the alphabet as implicitly defined by the words in the dictionary.\n \tvar alphaHash = {};\n \t\n \tfor (var i in self.dictionaryTable) {\n \t\tfor (var j = 0, _len = i.length; j < _len; j++) {\n \t\t\talphaHash[i[j]] = true;\n \t\t}\n \t}\n \t\n \tfor (var i in alphaHash) {\n \t\tself.alphabet += i;\n \t}\n \t\n \tvar alphaArray = self.alphabet.split(\"\");\n \talphaArray.sort();\n \tself.alphabet = alphaArray.join(\"\");\n }\n */\n\n /**\n * Returns a hash keyed by all of the strings that can be made by making a single edit to the word (or words in) `words`\n * The value of each entry is the number of unique ways that the resulting word can be made.\n *\n * @arg mixed words Either a hash keyed by words or a string word to operate on.\n * @arg bool known_only Whether this function should ignore strings that are not in the dictionary.\n */\n function edits1(words, known_only) {\n var rv = {};\n var i, j, _iilen, _len, _jlen, _edit;\n var alphabetLength = self.alphabet.length;\n if (typeof words == 'string') {\n var word = words;\n words = {};\n words[word] = true;\n }\n for (var word in words) {\n for (i = 0, _len = word.length + 1; i < _len; i++) {\n var s = [word.substring(0, i), word.substring(i)];\n\n // Remove a letter.\n if (s[1]) {\n _edit = s[0] + s[1].substring(1);\n if (!known_only || self.check(_edit)) {\n if (!(_edit in rv)) {\n rv[_edit] = 1;\n } else {\n rv[_edit] += 1;\n }\n }\n }\n\n // Transpose letters\n // Eliminate transpositions of identical letters\n if (s[1].length > 1 && s[1][1] !== s[1][0]) {\n _edit = s[0] + s[1][1] + s[1][0] + s[1].substring(2);\n if (!known_only || self.check(_edit)) {\n if (!(_edit in rv)) {\n rv[_edit] = 1;\n } else {\n rv[_edit] += 1;\n }\n }\n }\n if (s[1]) {\n // Replace a letter with another letter.\n\n var lettercase = s[1].substring(0, 1).toUpperCase() === s[1].substring(0, 1) ? 'uppercase' : 'lowercase';\n for (j = 0; j < alphabetLength; j++) {\n var replacementLetter = self.alphabet[j];\n\n // Set the case of the replacement letter to the same as the letter being replaced.\n if ('uppercase' === lettercase) {\n replacementLetter = replacementLetter.toUpperCase();\n }\n\n // Eliminate replacement of a letter by itself\n if (replacementLetter != s[1].substring(0, 1)) {\n _edit = s[0] + replacementLetter + s[1].substring(1);\n if (!known_only || self.check(_edit)) {\n if (!(_edit in rv)) {\n rv[_edit] = 1;\n } else {\n rv[_edit] += 1;\n }\n }\n }\n }\n }\n if (s[1]) {\n // Add a letter between each letter.\n for (j = 0; j < alphabetLength; j++) {\n // If the letters on each side are capitalized, capitalize the replacement.\n var lettercase = s[0].substring(-1).toUpperCase() === s[0].substring(-1) && s[1].substring(0, 1).toUpperCase() === s[1].substring(0, 1) ? 'uppercase' : 'lowercase';\n var replacementLetter = self.alphabet[j];\n if ('uppercase' === lettercase) {\n replacementLetter = replacementLetter.toUpperCase();\n }\n _edit = s[0] + replacementLetter + s[1];\n if (!known_only || self.check(_edit)) {\n if (!(_edit in rv)) {\n rv[_edit] = 1;\n } else {\n rv[_edit] += 1;\n }\n }\n }\n }\n }\n }\n return rv;\n }\n function correct(word) {\n // Get the edit-distance-1 and edit-distance-2 forms of this word.\n var ed1 = edits1(word);\n var ed2 = edits1(ed1, true);\n\n // Sort the edits based on how many different ways they were created.\n var weighted_corrections = ed2;\n for (var ed1word in ed1) {\n if (!self.check(ed1word)) {\n continue;\n }\n if (ed1word in weighted_corrections) {\n weighted_corrections[ed1word] += ed1[ed1word];\n } else {\n weighted_corrections[ed1word] = ed1[ed1word];\n }\n }\n var i, _len;\n var sorted_corrections = [];\n for (i in weighted_corrections) {\n if (weighted_corrections.hasOwnProperty(i)) {\n sorted_corrections.push([i, weighted_corrections[i]]);\n }\n }\n function sorter(a, b) {\n var a_val = a[1];\n var b_val = b[1];\n if (a_val < b_val) {\n return -1;\n } else if (a_val > b_val) {\n return 1;\n }\n // @todo If a and b are equally weighted, add our own weight based on something like the key locations on this language's default keyboard.\n return b[0].localeCompare(a[0]);\n }\n sorted_corrections.sort(sorter).reverse();\n var rv = [];\n var capitalization_scheme = \"lowercase\";\n if (word.toUpperCase() === word) {\n capitalization_scheme = \"uppercase\";\n } else if (word.substr(0, 1).toUpperCase() + word.substr(1).toLowerCase() === word) {\n capitalization_scheme = \"capitalized\";\n }\n var working_limit = limit;\n for (i = 0; i < Math.min(working_limit, sorted_corrections.length); i++) {\n if (\"uppercase\" === capitalization_scheme) {\n sorted_corrections[i][0] = sorted_corrections[i][0].toUpperCase();\n } else if (\"capitalized\" === capitalization_scheme) {\n sorted_corrections[i][0] = sorted_corrections[i][0].substr(0, 1).toUpperCase() + sorted_corrections[i][0].substr(1);\n }\n if (!self.hasFlag(sorted_corrections[i][0], \"NOSUGGEST\") && rv.indexOf(sorted_corrections[i][0]) == -1) {\n rv.push(sorted_corrections[i][0]);\n } else {\n // If one of the corrections is not eligible as a suggestion , make sure we still return the right number of suggestions.\n working_limit++;\n }\n }\n return rv;\n }\n this.memoized[word] = {\n 'suggestions': correct(word),\n 'limit': limit\n };\n return this.memoized[word]['suggestions'];\n }\n };\n})();\n\n// Support for use as a node.js module.\nif (typeof module !== 'undefined') {\n module.exports = Typo;\n}","/**\n * marked v4.3.0 - a markdown parser\n * Copyright (c) 2011-2023, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.marked = {}));\n})(this, function (exports) {\n 'use strict';\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);\n }\n }\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n }\n function _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n }\n function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n }\n function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n }\n function _createForOfIteratorHelperLoose(o, allowArrayLike) {\n var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n if (it) return (it = it.call(o)).next.bind(it);\n if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n var i = 0;\n return function () {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n };\n }\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n function _toPrimitive(input, hint) {\n if (typeof input !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (typeof res !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n }\n function _toPropertyKey(arg) {\n var key = _toPrimitive(arg, \"string\");\n return typeof key === \"symbol\" ? key : String(key);\n }\n function getDefaults() {\n return {\n async: false,\n baseUrl: null,\n breaks: false,\n extensions: null,\n gfm: true,\n headerIds: true,\n headerPrefix: '',\n highlight: null,\n hooks: null,\n langPrefix: 'language-',\n mangle: true,\n pedantic: false,\n renderer: null,\n sanitize: false,\n sanitizer: null,\n silent: false,\n smartypants: false,\n tokenizer: null,\n walkTokens: null,\n xhtml: false\n };\n }\n exports.defaults = getDefaults();\n function changeDefaults(newDefaults) {\n exports.defaults = newDefaults;\n }\n\n /**\n * Helpers\n */\n var escapeTest = /[&<>\"']/;\n var escapeReplace = new RegExp(escapeTest.source, 'g');\n var escapeTestNoEncode = /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/;\n var escapeReplaceNoEncode = new RegExp(escapeTestNoEncode.source, 'g');\n var escapeReplacements = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n };\n var getEscapeReplacement = function getEscapeReplacement(ch) {\n return escapeReplacements[ch];\n };\n function escape(html, encode) {\n if (encode) {\n if (escapeTest.test(html)) {\n return html.replace(escapeReplace, getEscapeReplacement);\n }\n } else {\n if (escapeTestNoEncode.test(html)) {\n return html.replace(escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n return html;\n }\n var unescapeTest = /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig;\n\n /**\n * @param {string} html\n */\n function unescape(html) {\n // explicitly match decimal, hex, and named HTML entities\n return html.replace(unescapeTest, function (_, n) {\n n = n.toLowerCase();\n if (n === 'colon') return ':';\n if (n.charAt(0) === '#') {\n return n.charAt(1) === 'x' ? String.fromCharCode(parseInt(n.substring(2), 16)) : String.fromCharCode(+n.substring(1));\n }\n return '';\n });\n }\n var caret = /(^|[^\\[])\\^/g;\n\n /**\n * @param {string | RegExp} regex\n * @param {string} opt\n */\n function edit(regex, opt) {\n regex = typeof regex === 'string' ? regex : regex.source;\n opt = opt || '';\n var obj = {\n replace: function replace(name, val) {\n val = val.source || val;\n val = val.replace(caret, '$1');\n regex = regex.replace(name, val);\n return obj;\n },\n getRegex: function getRegex() {\n return new RegExp(regex, opt);\n }\n };\n return obj;\n }\n var nonWordAndColonTest = /[^\\w:]/g;\n var originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;\n\n /**\n * @param {boolean} sanitize\n * @param {string} base\n * @param {string} href\n */\n function cleanUrl(sanitize, base, href) {\n if (sanitize) {\n var prot;\n try {\n prot = decodeURIComponent(unescape(href)).replace(nonWordAndColonTest, '').toLowerCase();\n } catch (e) {\n return null;\n }\n if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) {\n return null;\n }\n }\n if (base && !originIndependentUrl.test(href)) {\n href = resolveUrl(base, href);\n }\n try {\n href = encodeURI(href).replace(/%25/g, '%');\n } catch (e) {\n return null;\n }\n return href;\n }\n var baseUrls = {};\n var justDomain = /^[^:]+:\\/*[^/]*$/;\n var protocol = /^([^:]+:)[\\s\\S]*$/;\n var domain = /^([^:]+:\\/*[^/]*)[\\s\\S]*$/;\n\n /**\n * @param {string} base\n * @param {string} href\n */\n function resolveUrl(base, href) {\n if (!baseUrls[' ' + base]) {\n // we can ignore everything in base after the last slash of its path component,\n // but we might need to add _that_\n // https://tools.ietf.org/html/rfc3986#section-3\n if (justDomain.test(base)) {\n baseUrls[' ' + base] = base + '/';\n } else {\n baseUrls[' ' + base] = rtrim(base, '/', true);\n }\n }\n base = baseUrls[' ' + base];\n var relativeBase = base.indexOf(':') === -1;\n if (href.substring(0, 2) === '//') {\n if (relativeBase) {\n return href;\n }\n return base.replace(protocol, '$1') + href;\n } else if (href.charAt(0) === '/') {\n if (relativeBase) {\n return href;\n }\n return base.replace(domain, '$1') + href;\n } else {\n return base + href;\n }\n }\n var noopTest = {\n exec: function noopTest() {}\n };\n function splitCells(tableRow, count) {\n // ensure that every cell-delimiting pipe has a space\n // before it to distinguish it from an escaped pipe\n var row = tableRow.replace(/\\|/g, function (match, offset, str) {\n var escaped = false,\n curr = offset;\n while (--curr >= 0 && str[curr] === '\\\\') {\n escaped = !escaped;\n }\n if (escaped) {\n // odd number of slashes means | is escaped\n // so we leave it alone\n return '|';\n } else {\n // add space before unescaped |\n return ' |';\n }\n }),\n cells = row.split(/ \\|/);\n var i = 0;\n\n // First/last cell in a row cannot be empty if it has no leading/trailing pipe\n if (!cells[0].trim()) {\n cells.shift();\n }\n if (cells.length > 0 && !cells[cells.length - 1].trim()) {\n cells.pop();\n }\n if (cells.length > count) {\n cells.splice(count);\n } else {\n while (cells.length < count) {\n cells.push('');\n }\n }\n for (; i < cells.length; i++) {\n // leading or trailing whitespace is ignored per the gfm spec\n cells[i] = cells[i].trim().replace(/\\\\\\|/g, '|');\n }\n return cells;\n }\n\n /**\n * Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n * /c*$/ is vulnerable to REDOS.\n *\n * @param {string} str\n * @param {string} c\n * @param {boolean} invert Remove suffix of non-c chars instead. Default falsey.\n */\n function rtrim(str, c, invert) {\n var l = str.length;\n if (l === 0) {\n return '';\n }\n\n // Length of suffix matching the invert condition.\n var suffLen = 0;\n\n // Step left until we fail to match the invert condition.\n while (suffLen < l) {\n var currChar = str.charAt(l - suffLen - 1);\n if (currChar === c && !invert) {\n suffLen++;\n } else if (currChar !== c && invert) {\n suffLen++;\n } else {\n break;\n }\n }\n return str.slice(0, l - suffLen);\n }\n function findClosingBracket(str, b) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n var l = str.length;\n var level = 0,\n i = 0;\n for (; i < l; i++) {\n if (str[i] === '\\\\') {\n i++;\n } else if (str[i] === b[0]) {\n level++;\n } else if (str[i] === b[1]) {\n level--;\n if (level < 0) {\n return i;\n }\n }\n }\n return -1;\n }\n function checkSanitizeDeprecation(opt) {\n if (opt && opt.sanitize && !opt.silent) {\n console.warn('marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options');\n }\n }\n\n // copied from https://stackoverflow.com/a/5450113/806777\n /**\n * @param {string} pattern\n * @param {number} count\n */\n function repeatString(pattern, count) {\n if (count < 1) {\n return '';\n }\n var result = '';\n while (count > 1) {\n if (count & 1) {\n result += pattern;\n }\n count >>= 1;\n pattern += pattern;\n }\n return result + pattern;\n }\n function outputLink(cap, link, raw, lexer) {\n var href = link.href;\n var title = link.title ? escape(link.title) : null;\n var text = cap[1].replace(/\\\\([\\[\\]])/g, '$1');\n if (cap[0].charAt(0) !== '!') {\n lexer.state.inLink = true;\n var token = {\n type: 'link',\n raw: raw,\n href: href,\n title: title,\n text: text,\n tokens: lexer.inlineTokens(text)\n };\n lexer.state.inLink = false;\n return token;\n }\n return {\n type: 'image',\n raw: raw,\n href: href,\n title: title,\n text: escape(text)\n };\n }\n function indentCodeCompensation(raw, text) {\n var matchIndentToCode = raw.match(/^(\\s+)(?:```)/);\n if (matchIndentToCode === null) {\n return text;\n }\n var indentToCode = matchIndentToCode[1];\n return text.split('\\n').map(function (node) {\n var matchIndentInNode = node.match(/^\\s+/);\n if (matchIndentInNode === null) {\n return node;\n }\n var indentInNode = matchIndentInNode[0];\n if (indentInNode.length >= indentToCode.length) {\n return node.slice(indentToCode.length);\n }\n return node;\n }).join('\\n');\n }\n\n /**\n * Tokenizer\n */\n var Tokenizer = /*#__PURE__*/function () {\n function Tokenizer(options) {\n this.options = options || exports.defaults;\n }\n var _proto = Tokenizer.prototype;\n _proto.space = function space(src) {\n var cap = this.rules.block.newline.exec(src);\n if (cap && cap[0].length > 0) {\n return {\n type: 'space',\n raw: cap[0]\n };\n }\n };\n _proto.code = function code(src) {\n var cap = this.rules.block.code.exec(src);\n if (cap) {\n var text = cap[0].replace(/^ {1,4}/gm, '');\n return {\n type: 'code',\n raw: cap[0],\n codeBlockStyle: 'indented',\n text: !this.options.pedantic ? rtrim(text, '\\n') : text\n };\n }\n };\n _proto.fences = function fences(src) {\n var cap = this.rules.block.fences.exec(src);\n if (cap) {\n var raw = cap[0];\n var text = indentCodeCompensation(raw, cap[3] || '');\n return {\n type: 'code',\n raw: raw,\n lang: cap[2] ? cap[2].trim().replace(this.rules.inline._escapes, '$1') : cap[2],\n text: text\n };\n }\n };\n _proto.heading = function heading(src) {\n var cap = this.rules.block.heading.exec(src);\n if (cap) {\n var text = cap[2].trim();\n\n // remove trailing #s\n if (/#$/.test(text)) {\n var trimmed = rtrim(text, '#');\n if (this.options.pedantic) {\n text = trimmed.trim();\n } else if (!trimmed || / $/.test(trimmed)) {\n // CommonMark requires space before trailing #s\n text = trimmed.trim();\n }\n }\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[1].length,\n text: text,\n tokens: this.lexer.inline(text)\n };\n }\n };\n _proto.hr = function hr(src) {\n var cap = this.rules.block.hr.exec(src);\n if (cap) {\n return {\n type: 'hr',\n raw: cap[0]\n };\n }\n };\n _proto.blockquote = function blockquote(src) {\n var cap = this.rules.block.blockquote.exec(src);\n if (cap) {\n var text = cap[0].replace(/^ *>[ \\t]?/gm, '');\n var top = this.lexer.state.top;\n this.lexer.state.top = true;\n var tokens = this.lexer.blockTokens(text);\n this.lexer.state.top = top;\n return {\n type: 'blockquote',\n raw: cap[0],\n tokens: tokens,\n text: text\n };\n }\n };\n _proto.list = function list(src) {\n var cap = this.rules.block.list.exec(src);\n if (cap) {\n var raw, istask, ischecked, indent, i, blankLine, endsWithBlankLine, line, nextLine, rawLine, itemContents, endEarly;\n var bull = cap[1].trim();\n var isordered = bull.length > 1;\n var list = {\n type: 'list',\n raw: '',\n ordered: isordered,\n start: isordered ? +bull.slice(0, -1) : '',\n loose: false,\n items: []\n };\n bull = isordered ? \"\\\\d{1,9}\\\\\" + bull.slice(-1) : \"\\\\\" + bull;\n if (this.options.pedantic) {\n bull = isordered ? bull : '[*+-]';\n }\n\n // Get next list item\n var itemRegex = new RegExp(\"^( {0,3}\" + bull + \")((?:[\\t ][^\\\\n]*)?(?:\\\\n|$))\");\n\n // Check if current bullet point can start a new List Item\n while (src) {\n endEarly = false;\n if (!(cap = itemRegex.exec(src))) {\n break;\n }\n if (this.rules.block.hr.test(src)) {\n // End list if bullet was actually HR (possibly move into itemRegex?)\n break;\n }\n raw = cap[0];\n src = src.substring(raw.length);\n line = cap[2].split('\\n', 1)[0].replace(/^\\t+/, function (t) {\n return ' '.repeat(3 * t.length);\n });\n nextLine = src.split('\\n', 1)[0];\n if (this.options.pedantic) {\n indent = 2;\n itemContents = line.trimLeft();\n } else {\n indent = cap[2].search(/[^ ]/); // Find first non-space char\n indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent\n itemContents = line.slice(indent);\n indent += cap[1].length;\n }\n blankLine = false;\n if (!line && /^ *$/.test(nextLine)) {\n // Items begin with at most one blank line\n raw += nextLine + '\\n';\n src = src.substring(nextLine.length + 1);\n endEarly = true;\n }\n if (!endEarly) {\n var nextBulletRegex = new RegExp(\"^ {0,\" + Math.min(3, indent - 1) + \"}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \\t][^\\\\n]*)?(?:\\\\n|$))\");\n var hrRegex = new RegExp(\"^ {0,\" + Math.min(3, indent - 1) + \"}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)\");\n var fencesBeginRegex = new RegExp(\"^ {0,\" + Math.min(3, indent - 1) + \"}(?:```|~~~)\");\n var headingBeginRegex = new RegExp(\"^ {0,\" + Math.min(3, indent - 1) + \"}#\");\n\n // Check if following lines should be included in List Item\n while (src) {\n rawLine = src.split('\\n', 1)[0];\n nextLine = rawLine;\n\n // Re-align to follow commonmark nesting rules\n if (this.options.pedantic) {\n nextLine = nextLine.replace(/^ {1,4}(?=( {4})*[^ ])/g, ' ');\n }\n\n // End list item if found code fences\n if (fencesBeginRegex.test(nextLine)) {\n break;\n }\n\n // End list item if found start of new heading\n if (headingBeginRegex.test(nextLine)) {\n break;\n }\n\n // End list item if found start of new bullet\n if (nextBulletRegex.test(nextLine)) {\n break;\n }\n\n // Horizontal rule found\n if (hrRegex.test(src)) {\n break;\n }\n if (nextLine.search(/[^ ]/) >= indent || !nextLine.trim()) {\n // Dedent if possible\n itemContents += '\\n' + nextLine.slice(indent);\n } else {\n // not enough indentation\n if (blankLine) {\n break;\n }\n\n // paragraph continuation unless last line was a different block level element\n if (line.search(/[^ ]/) >= 4) {\n // indented code block\n break;\n }\n if (fencesBeginRegex.test(line)) {\n break;\n }\n if (headingBeginRegex.test(line)) {\n break;\n }\n if (hrRegex.test(line)) {\n break;\n }\n itemContents += '\\n' + nextLine;\n }\n if (!blankLine && !nextLine.trim()) {\n // Check if current line is blank\n blankLine = true;\n }\n raw += rawLine + '\\n';\n src = src.substring(rawLine.length + 1);\n line = nextLine.slice(indent);\n }\n }\n if (!list.loose) {\n // If the previous item ended with a blank line, the list is loose\n if (endsWithBlankLine) {\n list.loose = true;\n } else if (/\\n *\\n *$/.test(raw)) {\n endsWithBlankLine = true;\n }\n }\n\n // Check for task list items\n if (this.options.gfm) {\n istask = /^\\[[ xX]\\] /.exec(itemContents);\n if (istask) {\n ischecked = istask[0] !== '[ ] ';\n itemContents = itemContents.replace(/^\\[[ xX]\\] +/, '');\n }\n }\n list.items.push({\n type: 'list_item',\n raw: raw,\n task: !!istask,\n checked: ischecked,\n loose: false,\n text: itemContents\n });\n list.raw += raw;\n }\n\n // Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic\n list.items[list.items.length - 1].raw = raw.trimRight();\n list.items[list.items.length - 1].text = itemContents.trimRight();\n list.raw = list.raw.trimRight();\n var l = list.items.length;\n\n // Item child tokens handled here at end because we needed to have the final item to trim it first\n for (i = 0; i < l; i++) {\n this.lexer.state.top = false;\n list.items[i].tokens = this.lexer.blockTokens(list.items[i].text, []);\n if (!list.loose) {\n // Check if list should be loose\n var spacers = list.items[i].tokens.filter(function (t) {\n return t.type === 'space';\n });\n var hasMultipleLineBreaks = spacers.length > 0 && spacers.some(function (t) {\n return /\\n.*\\n/.test(t.raw);\n });\n list.loose = hasMultipleLineBreaks;\n }\n }\n\n // Set all items to loose if list is loose\n if (list.loose) {\n for (i = 0; i < l; i++) {\n list.items[i].loose = true;\n }\n }\n return list;\n }\n };\n _proto.html = function html(src) {\n var cap = this.rules.block.html.exec(src);\n if (cap) {\n var token = {\n type: 'html',\n raw: cap[0],\n pre: !this.options.sanitizer && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),\n text: cap[0]\n };\n if (this.options.sanitize) {\n var text = this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0]);\n token.type = 'paragraph';\n token.text = text;\n token.tokens = this.lexer.inline(text);\n }\n return token;\n }\n };\n _proto.def = function def(src) {\n var cap = this.rules.block.def.exec(src);\n if (cap) {\n var tag = cap[1].toLowerCase().replace(/\\s+/g, ' ');\n var href = cap[2] ? cap[2].replace(/^<(.*)>$/, '$1').replace(this.rules.inline._escapes, '$1') : '';\n var title = cap[3] ? cap[3].substring(1, cap[3].length - 1).replace(this.rules.inline._escapes, '$1') : cap[3];\n return {\n type: 'def',\n tag: tag,\n raw: cap[0],\n href: href,\n title: title\n };\n }\n };\n _proto.table = function table(src) {\n var cap = this.rules.block.table.exec(src);\n if (cap) {\n var item = {\n type: 'table',\n header: splitCells(cap[1]).map(function (c) {\n return {\n text: c\n };\n }),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n rows: cap[3] && cap[3].trim() ? cap[3].replace(/\\n[ \\t]*$/, '').split('\\n') : []\n };\n if (item.header.length === item.align.length) {\n item.raw = cap[0];\n var l = item.align.length;\n var i, j, k, row;\n for (i = 0; i < l; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n l = item.rows.length;\n for (i = 0; i < l; i++) {\n item.rows[i] = splitCells(item.rows[i], item.header.length).map(function (c) {\n return {\n text: c\n };\n });\n }\n\n // parse child tokens inside headers and cells\n\n // header child tokens\n l = item.header.length;\n for (j = 0; j < l; j++) {\n item.header[j].tokens = this.lexer.inline(item.header[j].text);\n }\n\n // cell child tokens\n l = item.rows.length;\n for (j = 0; j < l; j++) {\n row = item.rows[j];\n for (k = 0; k < row.length; k++) {\n row[k].tokens = this.lexer.inline(row[k].text);\n }\n }\n return item;\n }\n }\n };\n _proto.lheading = function lheading(src) {\n var cap = this.rules.block.lheading.exec(src);\n if (cap) {\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[2].charAt(0) === '=' ? 1 : 2,\n text: cap[1],\n tokens: this.lexer.inline(cap[1])\n };\n }\n };\n _proto.paragraph = function paragraph(src) {\n var cap = this.rules.block.paragraph.exec(src);\n if (cap) {\n var text = cap[1].charAt(cap[1].length - 1) === '\\n' ? cap[1].slice(0, -1) : cap[1];\n return {\n type: 'paragraph',\n raw: cap[0],\n text: text,\n tokens: this.lexer.inline(text)\n };\n }\n };\n _proto.text = function text(src) {\n var cap = this.rules.block.text.exec(src);\n if (cap) {\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0],\n tokens: this.lexer.inline(cap[0])\n };\n }\n };\n _proto.escape = function escape$1(src) {\n var cap = this.rules.inline.escape.exec(src);\n if (cap) {\n return {\n type: 'escape',\n raw: cap[0],\n text: escape(cap[1])\n };\n }\n };\n _proto.tag = function tag(src) {\n var cap = this.rules.inline.tag.exec(src);\n if (cap) {\n if (!this.lexer.state.inLink && /^/i.test(cap[0])) {\n this.lexer.state.inLink = false;\n }\n if (!this.lexer.state.inRawBlock && /^<(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n this.lexer.state.inRawBlock = true;\n } else if (this.lexer.state.inRawBlock && /^<\\/(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n this.lexer.state.inRawBlock = false;\n }\n return {\n type: this.options.sanitize ? 'text' : 'html',\n raw: cap[0],\n inLink: this.lexer.state.inLink,\n inRawBlock: this.lexer.state.inRawBlock,\n text: this.options.sanitize ? this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0]) : cap[0]\n };\n }\n };\n _proto.link = function link(src) {\n var cap = this.rules.inline.link.exec(src);\n if (cap) {\n var trimmedUrl = cap[2].trim();\n if (!this.options.pedantic && /^$/.test(trimmedUrl)) {\n return;\n }\n\n // ending angle bracket cannot be escaped\n var rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\\\');\n if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n return;\n }\n } else {\n // find closing parenthesis\n var lastParenIndex = findClosingBracket(cap[2], '()');\n if (lastParenIndex > -1) {\n var start = cap[0].indexOf('!') === 0 ? 5 : 4;\n var linkLen = start + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = '';\n }\n }\n var href = cap[2];\n var title = '';\n if (this.options.pedantic) {\n // split pedantic href and title\n var link = /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/.exec(href);\n if (link) {\n href = link[1];\n title = link[3];\n }\n } else {\n title = cap[3] ? cap[3].slice(1, -1) : '';\n }\n href = href.trim();\n if (/^$/.test(trimmedUrl)) {\n // pedantic allows starting angle bracket without ending angle bracket\n href = href.slice(1);\n } else {\n href = href.slice(1, -1);\n }\n }\n return outputLink(cap, {\n href: href ? href.replace(this.rules.inline._escapes, '$1') : href,\n title: title ? title.replace(this.rules.inline._escapes, '$1') : title\n }, cap[0], this.lexer);\n }\n };\n _proto.reflink = function reflink(src, links) {\n var cap;\n if ((cap = this.rules.inline.reflink.exec(src)) || (cap = this.rules.inline.nolink.exec(src))) {\n var link = (cap[2] || cap[1]).replace(/\\s+/g, ' ');\n link = links[link.toLowerCase()];\n if (!link) {\n var text = cap[0].charAt(0);\n return {\n type: 'text',\n raw: text,\n text: text\n };\n }\n return outputLink(cap, link, cap[0], this.lexer);\n }\n };\n _proto.emStrong = function emStrong(src, maskedSrc, prevChar) {\n if (prevChar === void 0) {\n prevChar = '';\n }\n var match = this.rules.inline.emStrong.lDelim.exec(src);\n if (!match) return;\n\n // _ can't be between two alphanumerics. \\p{L}\\p{N} includes non-english alphabet/numbers as well\n if (match[3] && prevChar.match(/(?:[0-9A-Za-z\\xAA\\xB2\\xB3\\xB5\\xB9\\xBA\\xBC-\\xBE\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u0660-\\u0669\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07C0-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0966-\\u096F\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09E6-\\u09F1\\u09F4-\\u09F9\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A6F\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AE6-\\u0AEF\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B66-\\u0B6F\\u0B71-\\u0B77\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0BE6-\\u0BF2\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C66-\\u0C6F\\u0C78-\\u0C7E\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D58-\\u0D61\\u0D66-\\u0D78\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DE6-\\u0DEF\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F20-\\u0F33\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F-\\u1049\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u1090-\\u1099\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1369-\\u137C\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u17E0-\\u17E9\\u17F0-\\u17F9\\u1810-\\u1819\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19DA\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B50-\\u1B59\\u1B83-\\u1BA0\\u1BAE-\\u1BE5\\u1C00-\\u1C23\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2070\\u2071\\u2074-\\u2079\\u207F-\\u2089\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2150-\\u2189\\u2460-\\u249B\\u24EA-\\u24FF\\u2776-\\u2793\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2CFD\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u3192-\\u3195\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3220-\\u3229\\u3248-\\u324F\\u3251-\\u325F\\u3280-\\u3289\\u32B1-\\u32BF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA830-\\uA835\\uA840-\\uA873\\uA882-\\uA8B3\\uA8D0-\\uA8D9\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA900-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF-\\uA9D9\\uA9E0-\\uA9E4\\uA9E6-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD07-\\uDD33\\uDD40-\\uDD78\\uDD8A\\uDD8B\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDEE1-\\uDEFB\\uDF00-\\uDF23\\uDF2D-\\uDF4A\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCA0-\\uDCA9\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC58-\\uDC76\\uDC79-\\uDC9E\\uDCA7-\\uDCAF\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDCFB-\\uDD1B\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBC-\\uDDCF\\uDDD2-\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE40-\\uDE48\\uDE60-\\uDE7E\\uDE80-\\uDE9F\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDEEB-\\uDEEF\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF58-\\uDF72\\uDF78-\\uDF91\\uDFA9-\\uDFAF]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDCFA-\\uDD23\\uDD30-\\uDD39\\uDE60-\\uDE7E\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF27\\uDF30-\\uDF45\\uDF51-\\uDF54\\uDF70-\\uDF81\\uDFB0-\\uDFCB\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC52-\\uDC6F\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDCF0-\\uDCF9\\uDD03-\\uDD26\\uDD36-\\uDD3F\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDD0-\\uDDDA\\uDDDC\\uDDE1-\\uDDF4\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDEF0-\\uDEF9\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC50-\\uDC59\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDCD0-\\uDCD9\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE50-\\uDE59\\uDE80-\\uDEAA\\uDEB8\\uDEC0-\\uDEC9\\uDF00-\\uDF1A\\uDF30-\\uDF3B\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCF2\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDD50-\\uDD59\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC50-\\uDC6C\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD50-\\uDD59\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDDA0-\\uDDA9\\uDEE0-\\uDEF2\\uDFB0\\uDFC0-\\uDFD4]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE60-\\uDE69\\uDE70-\\uDEBE\\uDEC0-\\uDEC9\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF50-\\uDF59\\uDF5B-\\uDF61\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE96\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD834[\\uDEE0-\\uDEF3\\uDF60-\\uDF78]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB\\uDFCE-\\uDFFF]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD40-\\uDD49\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB\\uDEF0-\\uDEF9]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDCC7-\\uDCCF\\uDD00-\\uDD43\\uDD4B\\uDD50-\\uDD59]|\\uD83B[\\uDC71-\\uDCAB\\uDCAD-\\uDCAF\\uDCB1-\\uDCB4\\uDD01-\\uDD2D\\uDD2F-\\uDD3D\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD83C[\\uDD00-\\uDD0C]|\\uD83E[\\uDFF0-\\uDFF9]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])/)) return;\n var nextChar = match[1] || match[2] || '';\n if (!nextChar || nextChar && (prevChar === '' || this.rules.inline.punctuation.exec(prevChar))) {\n var lLength = match[0].length - 1;\n var rDelim,\n rLength,\n delimTotal = lLength,\n midDelimTotal = 0;\n var endReg = match[0][0] === '*' ? this.rules.inline.emStrong.rDelimAst : this.rules.inline.emStrong.rDelimUnd;\n endReg.lastIndex = 0;\n\n // Clip maskedSrc to same section of string as src (move to lexer?)\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n while ((match = endReg.exec(maskedSrc)) != null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n if (!rDelim) continue; // skip single * in __abc*abc__\n\n rLength = rDelim.length;\n if (match[3] || match[4]) {\n // found another Left Delim\n delimTotal += rLength;\n continue;\n } else if (match[5] || match[6]) {\n // either Left or Right Delim\n if (lLength % 3 && !((lLength + rLength) % 3)) {\n midDelimTotal += rLength;\n continue; // CommonMark Emphasis Rules 9-10\n }\n }\n\n delimTotal -= rLength;\n if (delimTotal > 0) continue; // Haven't found enough closing delimiters\n\n // Remove extra characters. *a*** -> *a*\n rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n var raw = src.slice(0, lLength + match.index + (match[0].length - rDelim.length) + rLength);\n\n // Create `em` if smallest delimiter has odd char count. *a***\n if (Math.min(lLength, rLength) % 2) {\n var _text = raw.slice(1, -1);\n return {\n type: 'em',\n raw: raw,\n text: _text,\n tokens: this.lexer.inlineTokens(_text)\n };\n }\n\n // Create 'strong' if smallest delimiter has even char count. **a***\n var text = raw.slice(2, -2);\n return {\n type: 'strong',\n raw: raw,\n text: text,\n tokens: this.lexer.inlineTokens(text)\n };\n }\n }\n };\n _proto.codespan = function codespan(src) {\n var cap = this.rules.inline.code.exec(src);\n if (cap) {\n var text = cap[2].replace(/\\n/g, ' ');\n var hasNonSpaceChars = /[^ ]/.test(text);\n var hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text);\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n text = escape(text, true);\n return {\n type: 'codespan',\n raw: cap[0],\n text: text\n };\n }\n };\n _proto.br = function br(src) {\n var cap = this.rules.inline.br.exec(src);\n if (cap) {\n return {\n type: 'br',\n raw: cap[0]\n };\n }\n };\n _proto.del = function del(src) {\n var cap = this.rules.inline.del.exec(src);\n if (cap) {\n return {\n type: 'del',\n raw: cap[0],\n text: cap[2],\n tokens: this.lexer.inlineTokens(cap[2])\n };\n }\n };\n _proto.autolink = function autolink(src, mangle) {\n var cap = this.rules.inline.autolink.exec(src);\n if (cap) {\n var text, href;\n if (cap[2] === '@') {\n text = escape(this.options.mangle ? mangle(cap[1]) : cap[1]);\n href = 'mailto:' + text;\n } else {\n text = escape(cap[1]);\n href = text;\n }\n return {\n type: 'link',\n raw: cap[0],\n text: text,\n href: href,\n tokens: [{\n type: 'text',\n raw: text,\n text: text\n }]\n };\n }\n };\n _proto.url = function url(src, mangle) {\n var cap;\n if (cap = this.rules.inline.url.exec(src)) {\n var text, href;\n if (cap[2] === '@') {\n text = escape(this.options.mangle ? mangle(cap[0]) : cap[0]);\n href = 'mailto:' + text;\n } else {\n // do extended autolink path validation\n var prevCapZero;\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules.inline._backpedal.exec(cap[0])[0];\n } while (prevCapZero !== cap[0]);\n text = escape(cap[0]);\n if (cap[1] === 'www.') {\n href = 'http://' + cap[0];\n } else {\n href = cap[0];\n }\n }\n return {\n type: 'link',\n raw: cap[0],\n text: text,\n href: href,\n tokens: [{\n type: 'text',\n raw: text,\n text: text\n }]\n };\n }\n };\n _proto.inlineText = function inlineText(src, smartypants) {\n var cap = this.rules.inline.text.exec(src);\n if (cap) {\n var text;\n if (this.lexer.state.inRawBlock) {\n text = this.options.sanitize ? this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0]) : cap[0];\n } else {\n text = escape(this.options.smartypants ? smartypants(cap[0]) : cap[0]);\n }\n return {\n type: 'text',\n raw: cap[0],\n text: text\n };\n }\n };\n return Tokenizer;\n }();\n\n /**\n * Block-Level Grammar\n */\n var block = {\n newline: /^(?: *(?:\\n|$))+/,\n code: /^( {4}[^\\n]+(?:\\n(?: *(?:\\n|$))*)?)+/,\n fences: /^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/,\n hr: /^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/,\n heading: /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,\n blockquote: /^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/,\n list: /^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/,\n html: '^ {0,3}(?:' // optional indentation\n + '<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:[^\\\\n]*\\\\n+|$)' // (1)\n + '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n + '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n + '|\\\\n*|$)' // (4)\n + '|\\\\n*|$)' // (5)\n + '|)[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (6)\n + '|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (7) open tag\n + '|(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (7) closing tag\n + ')',\n def: /^ {0,3}\\[(label)\\]: *(?:\\n *)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n *)?| *\\n *)(title))? *(?:\\n+|$)/,\n table: noopTest,\n lheading: /^((?:.|\\n(?!\\n))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n // regex template, placeholders will be replaced according to different paragraph\n // interruption rules of commonmark and the original markdown spec:\n _paragraph: /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/,\n text: /^[^\\n]+/\n };\n block._label = /(?!\\s*\\])(?:\\\\.|[^\\[\\]\\\\])+/;\n block._title = /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/;\n block.def = edit(block.def).replace('label', block._label).replace('title', block._title).getRegex();\n block.bullet = /(?:[*+-]|\\d{1,9}[.)])/;\n block.listItemStart = edit(/^( *)(bull) */).replace('bull', block.bullet).getRegex();\n block.list = edit(block.list).replace(/bull/g, block.bullet).replace('hr', '\\\\n+(?=\\\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$))').replace('def', '\\\\n+(?=' + block.def.source + ')').getRegex();\n block._tag = 'address|article|aside|base|basefont|blockquote|body|caption' + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption' + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe' + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option' + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr' + '|track|ul';\n block._comment = /|$)/;\n block.html = edit(block.html, 'i').replace('comment', block._comment).replace('tag', block._tag).replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/).getRegex();\n block.paragraph = edit(block._paragraph).replace('hr', block.hr).replace('heading', ' {0,3}#{1,6} ').replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs\n .replace('|table', '').replace('blockquote', ' {0,3}>').replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n').replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', ')|<(?:script|pre|style|textarea|!--)').replace('tag', block._tag) // pars can be interrupted by type (6) html blocks\n .getRegex();\n block.blockquote = edit(block.blockquote).replace('paragraph', block.paragraph).getRegex();\n\n /**\n * Normal Block Grammar\n */\n\n block.normal = _extends({}, block);\n\n /**\n * GFM Block Grammar\n */\n\n block.gfm = _extends({}, block.normal, {\n table: '^ *([^\\\\n ].*\\\\|.*)\\\\n' // Header\n + ' {0,3}(?:\\\\| *)?(:?-+:? *(?:\\\\| *:?-+:? *)*)(?:\\\\| *)?' // Align\n + '(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)' // Cells\n });\n\n block.gfm.table = edit(block.gfm.table).replace('hr', block.hr).replace('heading', ' {0,3}#{1,6} ').replace('blockquote', ' {0,3}>').replace('code', ' {4}[^\\\\n]').replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n').replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', ')|<(?:script|pre|style|textarea|!--)').replace('tag', block._tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\n block.gfm.paragraph = edit(block._paragraph).replace('hr', block.hr).replace('heading', ' {0,3}#{1,6} ').replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs\n .replace('table', block.gfm.table) // interrupt paragraphs with table\n .replace('blockquote', ' {0,3}>').replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n').replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', ')|<(?:script|pre|style|textarea|!--)').replace('tag', block._tag) // pars can be interrupted by type (6) html blocks\n .getRegex();\n /**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\n\n block.pedantic = _extends({}, block.normal, {\n html: edit('^ *(?:comment *(?:\\\\n|\\\\s*$)' + '|<(tag)[\\\\s\\\\S]+? *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n + '|\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))').replace('comment', block._comment).replace(/tag/g, '(?!(?:' + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub' + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)' + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b').getRegex(),\n def: /^ *\\[([^\\]]+)\\]: *]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n fences: noopTest,\n // fences not supported\n lheading: /^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n paragraph: edit(block.normal._paragraph).replace('hr', block.hr).replace('heading', ' *#{1,6} *[^\\n]').replace('lheading', block.lheading).replace('blockquote', ' {0,3}>').replace('|fences', '').replace('|list', '').replace('|html', '').getRegex()\n });\n\n /**\n * Inline-Level Grammar\n */\n var inline = {\n escape: /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,\n autolink: /^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/,\n url: noopTest,\n tag: '^comment' + '|^' // self-closing tag\n + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. \n + '|^' // declaration, e.g. \n + '|^',\n // CDATA section\n link: /^!?\\[(label)\\]\\(\\s*(href)(?:\\s+(title))?\\s*\\)/,\n reflink: /^!?\\[(label)\\]\\[(ref)\\]/,\n nolink: /^!?\\[(ref)\\](?:\\[\\])?/,\n reflinkSearch: 'reflink|nolink(?!\\\\()',\n emStrong: {\n lDelim: /^(?:\\*+(?:([punct_])|[^\\s*]))|^_+(?:([punct*])|([^\\s_]))/,\n // (1) and (2) can only be a Right Delimiter. (3) and (4) can only be Left. (5) and (6) can be either Left or Right.\n // () Skip orphan inside strong () Consume to delim (1) #*** (2) a***#, a*** (3) #***a, ***a (4) ***# (5) #***# (6) a***a\n rDelimAst: /^(?:[^_*\\\\]|\\\\.)*?\\_\\_(?:[^_*\\\\]|\\\\.)*?\\*(?:[^_*\\\\]|\\\\.)*?(?=\\_\\_)|(?:[^*\\\\]|\\\\.)+(?=[^*])|[punct_](\\*+)(?=[\\s]|$)|(?:[^punct*_\\s\\\\]|\\\\.)(\\*+)(?=[punct_\\s]|$)|[punct_\\s](\\*+)(?=[^punct*_\\s])|[\\s](\\*+)(?=[punct_])|[punct_](\\*+)(?=[punct_])|(?:[^punct*_\\s\\\\]|\\\\.)(\\*+)(?=[^punct*_\\s])/,\n rDelimUnd: /^(?:[^_*\\\\]|\\\\.)*?\\*\\*(?:[^_*\\\\]|\\\\.)*?\\_(?:[^_*\\\\]|\\\\.)*?(?=\\*\\*)|(?:[^_\\\\]|\\\\.)+(?=[^_])|[punct*](\\_+)(?=[\\s]|$)|(?:[^punct*_\\s\\\\]|\\\\.)(\\_+)(?=[punct*\\s]|$)|[punct*\\s](\\_+)(?=[^punct*_\\s])|[\\s](\\_+)(?=[punct*])|[punct*](\\_+)(?=[punct*])/ // ^- Not allowed for _\n },\n\n code: /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,\n br: /^( {2,}|\\\\)\\n(?!\\s*$)/,\n del: noopTest,\n text: /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\?@\\\\[\\\\]`^{|}~';\n inline.punctuation = edit(inline.punctuation).replace(/punctuation/g, inline._punctuation).getRegex();\n\n // sequences em should skip over [title](link), `code`, \n inline.blockSkip = /\\[[^\\]]*?\\]\\([^\\)]*?\\)|`[^`]*?`|<[^>]*?>/g;\n // lookbehind is not available on Safari as of version 16\n // inline.escapedEmSt = /(?<=(?:^|[^\\\\)(?:\\\\[^])*)\\\\[*_]/g;\n inline.escapedEmSt = /(?:^|[^\\\\])(?:\\\\\\\\)*\\\\[*_]/g;\n inline._comment = edit(block._comment).replace('(?:-->|$)', '-->').getRegex();\n inline.emStrong.lDelim = edit(inline.emStrong.lDelim).replace(/punct/g, inline._punctuation).getRegex();\n inline.emStrong.rDelimAst = edit(inline.emStrong.rDelimAst, 'g').replace(/punct/g, inline._punctuation).getRegex();\n inline.emStrong.rDelimUnd = edit(inline.emStrong.rDelimUnd, 'g').replace(/punct/g, inline._punctuation).getRegex();\n inline._escapes = /\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/g;\n inline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;\n inline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/;\n inline.autolink = edit(inline.autolink).replace('scheme', inline._scheme).replace('email', inline._email).getRegex();\n inline._attribute = /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/;\n inline.tag = edit(inline.tag).replace('comment', inline._comment).replace('attribute', inline._attribute).getRegex();\n inline._label = /(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/;\n inline._href = /<(?:\\\\.|[^\\n<>\\\\])+>|[^\\s\\x00-\\x1f]*/;\n inline._title = /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/;\n inline.link = edit(inline.link).replace('label', inline._label).replace('href', inline._href).replace('title', inline._title).getRegex();\n inline.reflink = edit(inline.reflink).replace('label', inline._label).replace('ref', block._label).getRegex();\n inline.nolink = edit(inline.nolink).replace('ref', block._label).getRegex();\n inline.reflinkSearch = edit(inline.reflinkSearch, 'g').replace('reflink', inline.reflink).replace('nolink', inline.nolink).getRegex();\n\n /**\n * Normal Inline Grammar\n */\n\n inline.normal = _extends({}, inline);\n\n /**\n * Pedantic Inline Grammar\n */\n\n inline.pedantic = _extends({}, inline.normal, {\n strong: {\n start: /^__|\\*\\*/,\n middle: /^__(?=\\S)([\\s\\S]*?\\S)__(?!_)|^\\*\\*(?=\\S)([\\s\\S]*?\\S)\\*\\*(?!\\*)/,\n endAst: /\\*\\*(?!\\*)/g,\n endUnd: /__(?!_)/g\n },\n em: {\n start: /^_|\\*/,\n middle: /^()\\*(?=\\S)([\\s\\S]*?\\S)\\*(?!\\*)|^_(?=\\S)([\\s\\S]*?\\S)_(?!_)/,\n endAst: /\\*(?!\\*)/g,\n endUnd: /_(?!_)/g\n },\n link: edit(/^!?\\[(label)\\]\\((.*?)\\)/).replace('label', inline._label).getRegex(),\n reflink: edit(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/).replace('label', inline._label).getRegex()\n });\n\n /**\n * GFM Inline Grammar\n */\n\n inline.gfm = _extends({}, inline.normal, {\n escape: edit(inline.escape).replace('])', '~|])').getRegex(),\n _extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,\n url: /^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/,\n _backpedal: /(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,\n del: /^(~~?)(?=[^\\s~])([\\s\\S]*?[^\\s~])\\1(?=[^~]|$)/,\n text: /^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\ 0.5) {\n ch = 'x' + ch.toString(16);\n }\n out += '&#' + ch + ';';\n }\n return out;\n }\n\n /**\n * Block Lexer\n */\n var Lexer = /*#__PURE__*/function () {\n function Lexer(options) {\n this.tokens = [];\n this.tokens.links = Object.create(null);\n this.options = options || exports.defaults;\n this.options.tokenizer = this.options.tokenizer || new Tokenizer();\n this.tokenizer = this.options.tokenizer;\n this.tokenizer.options = this.options;\n this.tokenizer.lexer = this;\n this.inlineQueue = [];\n this.state = {\n inLink: false,\n inRawBlock: false,\n top: true\n };\n var rules = {\n block: block.normal,\n inline: inline.normal\n };\n if (this.options.pedantic) {\n rules.block = block.pedantic;\n rules.inline = inline.pedantic;\n } else if (this.options.gfm) {\n rules.block = block.gfm;\n if (this.options.breaks) {\n rules.inline = inline.breaks;\n } else {\n rules.inline = inline.gfm;\n }\n }\n this.tokenizer.rules = rules;\n }\n\n /**\n * Expose Rules\n */\n /**\n * Static Lex Method\n */\n Lexer.lex = function lex(src, options) {\n var lexer = new Lexer(options);\n return lexer.lex(src);\n }\n\n /**\n * Static Lex Inline Method\n */;\n Lexer.lexInline = function lexInline(src, options) {\n var lexer = new Lexer(options);\n return lexer.inlineTokens(src);\n }\n\n /**\n * Preprocessing\n */;\n var _proto = Lexer.prototype;\n _proto.lex = function lex(src) {\n src = src.replace(/\\r\\n|\\r/g, '\\n');\n this.blockTokens(src, this.tokens);\n var next;\n while (next = this.inlineQueue.shift()) {\n this.inlineTokens(next.src, next.tokens);\n }\n return this.tokens;\n }\n\n /**\n * Lexing\n */;\n _proto.blockTokens = function blockTokens(src, tokens) {\n var _this = this;\n if (tokens === void 0) {\n tokens = [];\n }\n if (this.options.pedantic) {\n src = src.replace(/\\t/g, ' ').replace(/^ +$/gm, '');\n } else {\n src = src.replace(/^( *)(\\t+)/gm, function (_, leading, tabs) {\n return leading + ' '.repeat(tabs.length);\n });\n }\n var token, lastToken, cutSrc, lastParagraphClipped;\n while (src) {\n if (this.options.extensions && this.options.extensions.block && this.options.extensions.block.some(function (extTokenizer) {\n if (token = extTokenizer.call({\n lexer: _this\n }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n\n // newline\n if (token = this.tokenizer.space(src)) {\n src = src.substring(token.raw.length);\n if (token.raw.length === 1 && tokens.length > 0) {\n // if there's a single \\n as a spacer, it's terminating the last line,\n // so move it there so that we don't get unecessary paragraph tags\n tokens[tokens.length - 1].raw += '\\n';\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // code\n if (token = this.tokenizer.code(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n // An indented code block cannot interrupt a paragraph.\n if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // fences\n if (token = this.tokenizer.fences(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // heading\n if (token = this.tokenizer.heading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // hr\n if (token = this.tokenizer.hr(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // blockquote\n if (token = this.tokenizer.blockquote(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // list\n if (token = this.tokenizer.list(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // html\n if (token = this.tokenizer.html(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // def\n if (token = this.tokenizer.def(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.raw;\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n } else if (!this.tokens.links[token.tag]) {\n this.tokens.links[token.tag] = {\n href: token.href,\n title: token.title\n };\n }\n continue;\n }\n\n // table (gfm)\n if (token = this.tokenizer.table(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // lheading\n if (token = this.tokenizer.lheading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // top-level paragraph\n // prevent paragraph consuming extensions by clipping 'src' to extension start\n cutSrc = src;\n if (this.options.extensions && this.options.extensions.startBlock) {\n (function () {\n var startIndex = Infinity;\n var tempSrc = src.slice(1);\n var tempStart = void 0;\n _this.options.extensions.startBlock.forEach(function (getStartIndex) {\n tempStart = getStartIndex.call({\n lexer: this\n }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n })();\n }\n if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {\n lastToken = tokens[tokens.length - 1];\n if (lastParagraphClipped && lastToken.type === 'paragraph') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n } else {\n tokens.push(token);\n }\n lastParagraphClipped = cutSrc.length !== src.length;\n src = src.substring(token.raw.length);\n continue;\n }\n\n // text\n if (token = this.tokenizer.text(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n if (src) {\n var errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n this.state.top = true;\n return tokens;\n };\n _proto.inline = function inline(src, tokens) {\n if (tokens === void 0) {\n tokens = [];\n }\n this.inlineQueue.push({\n src: src,\n tokens: tokens\n });\n return tokens;\n }\n\n /**\n * Lexing/Compiling\n */;\n _proto.inlineTokens = function inlineTokens(src, tokens) {\n var _this2 = this;\n if (tokens === void 0) {\n tokens = [];\n }\n var token, lastToken, cutSrc;\n\n // String with links masked to avoid interference with em and strong\n var maskedSrc = src;\n var match;\n var keepPrevChar, prevChar;\n\n // Mask out reflinks\n if (this.tokens.links) {\n var links = Object.keys(this.tokens.links);\n if (links.length > 0) {\n while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n }\n }\n }\n }\n // Mask out other blocks\n while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n }\n\n // Mask out escaped em & strong delimiters\n while ((match = this.tokenizer.rules.inline.escapedEmSt.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index + match[0].length - 2) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);\n this.tokenizer.rules.inline.escapedEmSt.lastIndex--;\n }\n while (src) {\n if (!keepPrevChar) {\n prevChar = '';\n }\n keepPrevChar = false;\n\n // extensions\n if (this.options.extensions && this.options.extensions.inline && this.options.extensions.inline.some(function (extTokenizer) {\n if (token = extTokenizer.call({\n lexer: _this2\n }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n\n // escape\n if (token = this.tokenizer.escape(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // tag\n if (token = this.tokenizer.tag(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // link\n if (token = this.tokenizer.link(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // reflink, nolink\n if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // em & strong\n if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // code\n if (token = this.tokenizer.codespan(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // br\n if (token = this.tokenizer.br(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // del (gfm)\n if (token = this.tokenizer.del(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // autolink\n if (token = this.tokenizer.autolink(src, mangle)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // url (gfm)\n if (!this.state.inLink && (token = this.tokenizer.url(src, mangle))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // text\n // prevent inlineText consuming extensions by clipping 'src' to extension start\n cutSrc = src;\n if (this.options.extensions && this.options.extensions.startInline) {\n (function () {\n var startIndex = Infinity;\n var tempSrc = src.slice(1);\n var tempStart = void 0;\n _this2.options.extensions.startInline.forEach(function (getStartIndex) {\n tempStart = getStartIndex.call({\n lexer: this\n }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n })();\n }\n if (token = this.tokenizer.inlineText(cutSrc, smartypants)) {\n src = src.substring(token.raw.length);\n if (token.raw.slice(-1) !== '_') {\n // Track prevChar before string of ____ started\n prevChar = token.raw.slice(-1);\n }\n keepPrevChar = true;\n lastToken = tokens[tokens.length - 1];\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n if (src) {\n var errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n return tokens;\n };\n _createClass(Lexer, null, [{\n key: \"rules\",\n get: function get() {\n return {\n block: block,\n inline: inline\n };\n }\n }]);\n return Lexer;\n }();\n\n /**\n * Renderer\n */\n var Renderer = /*#__PURE__*/function () {\n function Renderer(options) {\n this.options = options || exports.defaults;\n }\n var _proto = Renderer.prototype;\n _proto.code = function code(_code, infostring, escaped) {\n var lang = (infostring || '').match(/\\S*/)[0];\n if (this.options.highlight) {\n var out = this.options.highlight(_code, lang);\n if (out != null && out !== _code) {\n escaped = true;\n _code = out;\n }\n }\n _code = _code.replace(/\\n$/, '') + '\\n';\n if (!lang) {\n return '
' + (escaped ? _code : escape(_code, true)) + '
\\n';\n }\n return '
' + (escaped ? _code : escape(_code, true)) + '
\\n';\n }\n\n /**\n * @param {string} quote\n */;\n _proto.blockquote = function blockquote(quote) {\n return \"
\\n\" + quote + \"
\\n\";\n };\n _proto.html = function html(_html) {\n return _html;\n }\n\n /**\n * @param {string} text\n * @param {string} level\n * @param {string} raw\n * @param {any} slugger\n */;\n _proto.heading = function heading(text, level, raw, slugger) {\n if (this.options.headerIds) {\n var id = this.options.headerPrefix + slugger.slug(raw);\n return \"\" + text + \"\\n\";\n }\n\n // ignore IDs\n return \"\" + text + \"\\n\";\n };\n _proto.hr = function hr() {\n return this.options.xhtml ? '
\\n' : '
\\n';\n };\n _proto.list = function list(body, ordered, start) {\n var type = ordered ? 'ol' : 'ul',\n startatt = ordered && start !== 1 ? ' start=\"' + start + '\"' : '';\n return '<' + type + startatt + '>\\n' + body + '\\n';\n }\n\n /**\n * @param {string} text\n */;\n _proto.listitem = function listitem(text) {\n return \"
  • \" + text + \"
  • \\n\";\n };\n _proto.checkbox = function checkbox(checked) {\n return ' ';\n }\n\n /**\n * @param {string} text\n */;\n _proto.paragraph = function paragraph(text) {\n return \"

    \" + text + \"

    \\n\";\n }\n\n /**\n * @param {string} header\n * @param {string} body\n */;\n _proto.table = function table(header, body) {\n if (body) body = \"\" + body + \"\";\n return '\\n' + '\\n' + header + '\\n' + body + '
    \\n';\n }\n\n /**\n * @param {string} content\n */;\n _proto.tablerow = function tablerow(content) {\n return \"\\n\" + content + \"\\n\";\n };\n _proto.tablecell = function tablecell(content, flags) {\n var type = flags.header ? 'th' : 'td';\n var tag = flags.align ? \"<\" + type + \" align=\\\"\" + flags.align + \"\\\">\" : \"<\" + type + \">\";\n return tag + content + (\"\\n\");\n }\n\n /**\n * span level renderer\n * @param {string} text\n */;\n _proto.strong = function strong(text) {\n return \"\" + text + \"\";\n }\n\n /**\n * @param {string} text\n */;\n _proto.em = function em(text) {\n return \"\" + text + \"\";\n }\n\n /**\n * @param {string} text\n */;\n _proto.codespan = function codespan(text) {\n return \"\" + text + \"\";\n };\n _proto.br = function br() {\n return this.options.xhtml ? '
    ' : '
    ';\n }\n\n /**\n * @param {string} text\n */;\n _proto.del = function del(text) {\n return \"\" + text + \"\";\n }\n\n /**\n * @param {string} href\n * @param {string} title\n * @param {string} text\n */;\n _proto.link = function link(href, title, text) {\n href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);\n if (href === null) {\n return text;\n }\n var out = '
    ';\n return out;\n }\n\n /**\n * @param {string} href\n * @param {string} title\n * @param {string} text\n */;\n _proto.image = function image(href, title, text) {\n href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);\n if (href === null) {\n return text;\n }\n var out = \"\\\"\"' : '>';\n return out;\n };\n _proto.text = function text(_text) {\n return _text;\n };\n return Renderer;\n }();\n\n /**\n * TextRenderer\n * returns only the textual part of the token\n */\n var TextRenderer = /*#__PURE__*/function () {\n function TextRenderer() {}\n var _proto = TextRenderer.prototype;\n // no need for block level renderers\n _proto.strong = function strong(text) {\n return text;\n };\n _proto.em = function em(text) {\n return text;\n };\n _proto.codespan = function codespan(text) {\n return text;\n };\n _proto.del = function del(text) {\n return text;\n };\n _proto.html = function html(text) {\n return text;\n };\n _proto.text = function text(_text) {\n return _text;\n };\n _proto.link = function link(href, title, text) {\n return '' + text;\n };\n _proto.image = function image(href, title, text) {\n return '' + text;\n };\n _proto.br = function br() {\n return '';\n };\n return TextRenderer;\n }();\n\n /**\n * Slugger generates header id\n */\n var Slugger = /*#__PURE__*/function () {\n function Slugger() {\n this.seen = {};\n }\n\n /**\n * @param {string} value\n */\n var _proto = Slugger.prototype;\n _proto.serialize = function serialize(value) {\n return value.toLowerCase().trim()\n // remove html tags\n .replace(/<[!\\/a-z].*?>/ig, '')\n // remove unwanted chars\n .replace(/[\\u2000-\\u206F\\u2E00-\\u2E7F\\\\'!\"#$%&()*+,./:;<=>?@[\\]^`{|}~]/g, '').replace(/\\s/g, '-');\n }\n\n /**\n * Finds the next safe (unique) slug to use\n * @param {string} originalSlug\n * @param {boolean} isDryRun\n */;\n _proto.getNextSafeSlug = function getNextSafeSlug(originalSlug, isDryRun) {\n var slug = originalSlug;\n var occurenceAccumulator = 0;\n if (this.seen.hasOwnProperty(slug)) {\n occurenceAccumulator = this.seen[originalSlug];\n do {\n occurenceAccumulator++;\n slug = originalSlug + '-' + occurenceAccumulator;\n } while (this.seen.hasOwnProperty(slug));\n }\n if (!isDryRun) {\n this.seen[originalSlug] = occurenceAccumulator;\n this.seen[slug] = 0;\n }\n return slug;\n }\n\n /**\n * Convert string to unique id\n * @param {object} [options]\n * @param {boolean} [options.dryrun] Generates the next unique slug without\n * updating the internal accumulator.\n */;\n _proto.slug = function slug(value, options) {\n if (options === void 0) {\n options = {};\n }\n var slug = this.serialize(value);\n return this.getNextSafeSlug(slug, options.dryrun);\n };\n return Slugger;\n }();\n\n /**\n * Parsing & Compiling\n */\n var Parser = /*#__PURE__*/function () {\n function Parser(options) {\n this.options = options || exports.defaults;\n this.options.renderer = this.options.renderer || new Renderer();\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n this.textRenderer = new TextRenderer();\n this.slugger = new Slugger();\n }\n\n /**\n * Static Parse Method\n */\n Parser.parse = function parse(tokens, options) {\n var parser = new Parser(options);\n return parser.parse(tokens);\n }\n\n /**\n * Static Parse Inline Method\n */;\n Parser.parseInline = function parseInline(tokens, options) {\n var parser = new Parser(options);\n return parser.parseInline(tokens);\n }\n\n /**\n * Parse Loop\n */;\n var _proto = Parser.prototype;\n _proto.parse = function parse(tokens, top) {\n if (top === void 0) {\n top = true;\n }\n var out = '',\n i,\n j,\n k,\n l2,\n l3,\n row,\n cell,\n header,\n body,\n token,\n ordered,\n start,\n loose,\n itemBody,\n item,\n checked,\n task,\n checkbox,\n ret;\n var l = tokens.length;\n for (i = 0; i < l; i++) {\n token = tokens[i];\n\n // Run any renderer extensions\n if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) {\n ret = this.options.extensions.renderers[token.type].call({\n parser: this\n }, token);\n if (ret !== false || !['space', 'hr', 'heading', 'code', 'table', 'blockquote', 'list', 'html', 'paragraph', 'text'].includes(token.type)) {\n out += ret || '';\n continue;\n }\n }\n switch (token.type) {\n case 'space':\n {\n continue;\n }\n case 'hr':\n {\n out += this.renderer.hr();\n continue;\n }\n case 'heading':\n {\n out += this.renderer.heading(this.parseInline(token.tokens), token.depth, unescape(this.parseInline(token.tokens, this.textRenderer)), this.slugger);\n continue;\n }\n case 'code':\n {\n out += this.renderer.code(token.text, token.lang, token.escaped);\n continue;\n }\n case 'table':\n {\n header = '';\n\n // header\n cell = '';\n l2 = token.header.length;\n for (j = 0; j < l2; j++) {\n cell += this.renderer.tablecell(this.parseInline(token.header[j].tokens), {\n header: true,\n align: token.align[j]\n });\n }\n header += this.renderer.tablerow(cell);\n body = '';\n l2 = token.rows.length;\n for (j = 0; j < l2; j++) {\n row = token.rows[j];\n cell = '';\n l3 = row.length;\n for (k = 0; k < l3; k++) {\n cell += this.renderer.tablecell(this.parseInline(row[k].tokens), {\n header: false,\n align: token.align[k]\n });\n }\n body += this.renderer.tablerow(cell);\n }\n out += this.renderer.table(header, body);\n continue;\n }\n case 'blockquote':\n {\n body = this.parse(token.tokens);\n out += this.renderer.blockquote(body);\n continue;\n }\n case 'list':\n {\n ordered = token.ordered;\n start = token.start;\n loose = token.loose;\n l2 = token.items.length;\n body = '';\n for (j = 0; j < l2; j++) {\n item = token.items[j];\n checked = item.checked;\n task = item.task;\n itemBody = '';\n if (item.task) {\n checkbox = this.renderer.checkbox(checked);\n if (loose) {\n if (item.tokens.length > 0 && item.tokens[0].type === 'paragraph') {\n item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;\n if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {\n item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text;\n }\n } else {\n item.tokens.unshift({\n type: 'text',\n text: checkbox\n });\n }\n } else {\n itemBody += checkbox;\n }\n }\n itemBody += this.parse(item.tokens, loose);\n body += this.renderer.listitem(itemBody, task, checked);\n }\n out += this.renderer.list(body, ordered, start);\n continue;\n }\n case 'html':\n {\n // TODO parse inline content if parameter markdown=1\n out += this.renderer.html(token.text);\n continue;\n }\n case 'paragraph':\n {\n out += this.renderer.paragraph(this.parseInline(token.tokens));\n continue;\n }\n case 'text':\n {\n body = token.tokens ? this.parseInline(token.tokens) : token.text;\n while (i + 1 < l && tokens[i + 1].type === 'text') {\n token = tokens[++i];\n body += '\\n' + (token.tokens ? this.parseInline(token.tokens) : token.text);\n }\n out += top ? this.renderer.paragraph(body) : body;\n continue;\n }\n default:\n {\n var errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out;\n }\n\n /**\n * Parse Inline Tokens\n */;\n _proto.parseInline = function parseInline(tokens, renderer) {\n renderer = renderer || this.renderer;\n var out = '',\n i,\n token,\n ret;\n var l = tokens.length;\n for (i = 0; i < l; i++) {\n token = tokens[i];\n\n // Run any renderer extensions\n if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) {\n ret = this.options.extensions.renderers[token.type].call({\n parser: this\n }, token);\n if (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(token.type)) {\n out += ret || '';\n continue;\n }\n }\n switch (token.type) {\n case 'escape':\n {\n out += renderer.text(token.text);\n break;\n }\n case 'html':\n {\n out += renderer.html(token.text);\n break;\n }\n case 'link':\n {\n out += renderer.link(token.href, token.title, this.parseInline(token.tokens, renderer));\n break;\n }\n case 'image':\n {\n out += renderer.image(token.href, token.title, token.text);\n break;\n }\n case 'strong':\n {\n out += renderer.strong(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'em':\n {\n out += renderer.em(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'codespan':\n {\n out += renderer.codespan(token.text);\n break;\n }\n case 'br':\n {\n out += renderer.br();\n break;\n }\n case 'del':\n {\n out += renderer.del(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'text':\n {\n out += renderer.text(token.text);\n break;\n }\n default:\n {\n var errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out;\n };\n return Parser;\n }();\n var Hooks = /*#__PURE__*/function () {\n function Hooks(options) {\n this.options = options || exports.defaults;\n }\n var _proto = Hooks.prototype;\n /**\n * Process markdown before marked\n */\n _proto.preprocess = function preprocess(markdown) {\n return markdown;\n }\n\n /**\n * Process HTML after marked is finished\n */;\n _proto.postprocess = function postprocess(html) {\n return html;\n };\n return Hooks;\n }();\n Hooks.passThroughHooks = new Set(['preprocess', 'postprocess']);\n function onError(silent, async, callback) {\n return function (e) {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n if (silent) {\n var msg = '

    An error occurred:

    ' + escape(e.message + '', true) + '
    ';\n if (async) {\n return Promise.resolve(msg);\n }\n if (callback) {\n callback(null, msg);\n return;\n }\n return msg;\n }\n if (async) {\n return Promise.reject(e);\n }\n if (callback) {\n callback(e);\n return;\n }\n throw e;\n };\n }\n function parseMarkdown(lexer, parser) {\n return function (src, opt, callback) {\n if (typeof opt === 'function') {\n callback = opt;\n opt = null;\n }\n var origOpt = _extends({}, opt);\n opt = _extends({}, marked.defaults, origOpt);\n var throwError = onError(opt.silent, opt.async, callback);\n\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n return throwError(new Error('marked(): input parameter is undefined or null'));\n }\n if (typeof src !== 'string') {\n return throwError(new Error('marked(): input parameter is of type ' + Object.prototype.toString.call(src) + ', string expected'));\n }\n checkSanitizeDeprecation(opt);\n if (opt.hooks) {\n opt.hooks.options = opt;\n }\n if (callback) {\n var highlight = opt.highlight;\n var tokens;\n try {\n if (opt.hooks) {\n src = opt.hooks.preprocess(src);\n }\n tokens = lexer(src, opt);\n } catch (e) {\n return throwError(e);\n }\n var done = function done(err) {\n var out;\n if (!err) {\n try {\n if (opt.walkTokens) {\n marked.walkTokens(tokens, opt.walkTokens);\n }\n out = parser(tokens, opt);\n if (opt.hooks) {\n out = opt.hooks.postprocess(out);\n }\n } catch (e) {\n err = e;\n }\n }\n opt.highlight = highlight;\n return err ? throwError(err) : callback(null, out);\n };\n if (!highlight || highlight.length < 3) {\n return done();\n }\n delete opt.highlight;\n if (!tokens.length) return done();\n var pending = 0;\n marked.walkTokens(tokens, function (token) {\n if (token.type === 'code') {\n pending++;\n setTimeout(function () {\n highlight(token.text, token.lang, function (err, code) {\n if (err) {\n return done(err);\n }\n if (code != null && code !== token.text) {\n token.text = code;\n token.escaped = true;\n }\n pending--;\n if (pending === 0) {\n done();\n }\n });\n }, 0);\n }\n });\n if (pending === 0) {\n done();\n }\n return;\n }\n if (opt.async) {\n return Promise.resolve(opt.hooks ? opt.hooks.preprocess(src) : src).then(function (src) {\n return lexer(src, opt);\n }).then(function (tokens) {\n return opt.walkTokens ? Promise.all(marked.walkTokens(tokens, opt.walkTokens)).then(function () {\n return tokens;\n }) : tokens;\n }).then(function (tokens) {\n return parser(tokens, opt);\n }).then(function (html) {\n return opt.hooks ? opt.hooks.postprocess(html) : html;\n })[\"catch\"](throwError);\n }\n try {\n if (opt.hooks) {\n src = opt.hooks.preprocess(src);\n }\n var _tokens = lexer(src, opt);\n if (opt.walkTokens) {\n marked.walkTokens(_tokens, opt.walkTokens);\n }\n var html = parser(_tokens, opt);\n if (opt.hooks) {\n html = opt.hooks.postprocess(html);\n }\n return html;\n } catch (e) {\n return throwError(e);\n }\n };\n }\n\n /**\n * Marked\n */\n function marked(src, opt, callback) {\n return parseMarkdown(Lexer.lex, Parser.parse)(src, opt, callback);\n }\n\n /**\n * Options\n */\n\n marked.options = marked.setOptions = function (opt) {\n marked.defaults = _extends({}, marked.defaults, opt);\n changeDefaults(marked.defaults);\n return marked;\n };\n marked.getDefaults = getDefaults;\n marked.defaults = exports.defaults;\n\n /**\n * Use Extension\n */\n\n marked.use = function () {\n var extensions = marked.defaults.extensions || {\n renderers: {},\n childTokens: {}\n };\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n args.forEach(function (pack) {\n // copy options to new object\n var opts = _extends({}, pack);\n\n // set async to true if it was set to true before\n opts.async = marked.defaults.async || opts.async || false;\n\n // ==-- Parse \"addon\" extensions --== //\n if (pack.extensions) {\n pack.extensions.forEach(function (ext) {\n if (!ext.name) {\n throw new Error('extension name required');\n }\n if (ext.renderer) {\n // Renderer extensions\n var prevRenderer = extensions.renderers[ext.name];\n if (prevRenderer) {\n // Replace extension with func to run new extension but fall back if false\n extensions.renderers[ext.name] = function () {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n var ret = ext.renderer.apply(this, args);\n if (ret === false) {\n ret = prevRenderer.apply(this, args);\n }\n return ret;\n };\n } else {\n extensions.renderers[ext.name] = ext.renderer;\n }\n }\n if (ext.tokenizer) {\n // Tokenizer Extensions\n if (!ext.level || ext.level !== 'block' && ext.level !== 'inline') {\n throw new Error(\"extension level must be 'block' or 'inline'\");\n }\n if (extensions[ext.level]) {\n extensions[ext.level].unshift(ext.tokenizer);\n } else {\n extensions[ext.level] = [ext.tokenizer];\n }\n if (ext.start) {\n // Function to check for start of token\n if (ext.level === 'block') {\n if (extensions.startBlock) {\n extensions.startBlock.push(ext.start);\n } else {\n extensions.startBlock = [ext.start];\n }\n } else if (ext.level === 'inline') {\n if (extensions.startInline) {\n extensions.startInline.push(ext.start);\n } else {\n extensions.startInline = [ext.start];\n }\n }\n }\n }\n if (ext.childTokens) {\n // Child tokens to be visited by walkTokens\n extensions.childTokens[ext.name] = ext.childTokens;\n }\n });\n opts.extensions = extensions;\n }\n\n // ==-- Parse \"overwrite\" extensions --== //\n if (pack.renderer) {\n (function () {\n var renderer = marked.defaults.renderer || new Renderer();\n var _loop = function _loop(prop) {\n var prevRenderer = renderer[prop];\n // Replace renderer with func to run extension, but fall back if false\n renderer[prop] = function () {\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n var ret = pack.renderer[prop].apply(renderer, args);\n if (ret === false) {\n ret = prevRenderer.apply(renderer, args);\n }\n return ret;\n };\n };\n for (var prop in pack.renderer) {\n _loop(prop);\n }\n opts.renderer = renderer;\n })();\n }\n if (pack.tokenizer) {\n (function () {\n var tokenizer = marked.defaults.tokenizer || new Tokenizer();\n var _loop2 = function _loop2(prop) {\n var prevTokenizer = tokenizer[prop];\n // Replace tokenizer with func to run extension, but fall back if false\n tokenizer[prop] = function () {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n var ret = pack.tokenizer[prop].apply(tokenizer, args);\n if (ret === false) {\n ret = prevTokenizer.apply(tokenizer, args);\n }\n return ret;\n };\n };\n for (var prop in pack.tokenizer) {\n _loop2(prop);\n }\n opts.tokenizer = tokenizer;\n })();\n }\n\n // ==-- Parse Hooks extensions --== //\n if (pack.hooks) {\n (function () {\n var hooks = marked.defaults.hooks || new Hooks();\n var _loop3 = function _loop3(prop) {\n var prevHook = hooks[prop];\n if (Hooks.passThroughHooks.has(prop)) {\n hooks[prop] = function (arg) {\n if (marked.defaults.async) {\n return Promise.resolve(pack.hooks[prop].call(hooks, arg)).then(function (ret) {\n return prevHook.call(hooks, ret);\n });\n }\n var ret = pack.hooks[prop].call(hooks, arg);\n return prevHook.call(hooks, ret);\n };\n } else {\n hooks[prop] = function () {\n for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n args[_key5] = arguments[_key5];\n }\n var ret = pack.hooks[prop].apply(hooks, args);\n if (ret === false) {\n ret = prevHook.apply(hooks, args);\n }\n return ret;\n };\n }\n };\n for (var prop in pack.hooks) {\n _loop3(prop);\n }\n opts.hooks = hooks;\n })();\n }\n\n // ==-- Parse WalkTokens extensions --== //\n if (pack.walkTokens) {\n var _walkTokens = marked.defaults.walkTokens;\n opts.walkTokens = function (token) {\n var values = [];\n values.push(pack.walkTokens.call(this, token));\n if (_walkTokens) {\n values = values.concat(_walkTokens.call(this, token));\n }\n return values;\n };\n }\n marked.setOptions(opts);\n });\n };\n\n /**\n * Run callback for every token\n */\n\n marked.walkTokens = function (tokens, callback) {\n var values = [];\n var _loop4 = function _loop4() {\n var token = _step.value;\n values = values.concat(callback.call(marked, token));\n switch (token.type) {\n case 'table':\n {\n for (var _iterator2 = _createForOfIteratorHelperLoose(token.header), _step2; !(_step2 = _iterator2()).done;) {\n var cell = _step2.value;\n values = values.concat(marked.walkTokens(cell.tokens, callback));\n }\n for (var _iterator3 = _createForOfIteratorHelperLoose(token.rows), _step3; !(_step3 = _iterator3()).done;) {\n var row = _step3.value;\n for (var _iterator4 = _createForOfIteratorHelperLoose(row), _step4; !(_step4 = _iterator4()).done;) {\n var _cell = _step4.value;\n values = values.concat(marked.walkTokens(_cell.tokens, callback));\n }\n }\n break;\n }\n case 'list':\n {\n values = values.concat(marked.walkTokens(token.items, callback));\n break;\n }\n default:\n {\n if (marked.defaults.extensions && marked.defaults.extensions.childTokens && marked.defaults.extensions.childTokens[token.type]) {\n // Walk any extensions\n marked.defaults.extensions.childTokens[token.type].forEach(function (childTokens) {\n values = values.concat(marked.walkTokens(token[childTokens], callback));\n });\n } else if (token.tokens) {\n values = values.concat(marked.walkTokens(token.tokens, callback));\n }\n }\n }\n };\n for (var _iterator = _createForOfIteratorHelperLoose(tokens), _step; !(_step = _iterator()).done;) {\n _loop4();\n }\n return values;\n };\n\n /**\n * Parse Inline\n * @param {string} src\n */\n marked.parseInline = parseMarkdown(Lexer.lexInline, Parser.parseInline);\n\n /**\n * Expose\n */\n marked.Parser = Parser;\n marked.parser = Parser.parse;\n marked.Renderer = Renderer;\n marked.TextRenderer = TextRenderer;\n marked.Lexer = Lexer;\n marked.lexer = Lexer.lex;\n marked.Tokenizer = Tokenizer;\n marked.Slugger = Slugger;\n marked.Hooks = Hooks;\n marked.parse = marked;\n var options = marked.options;\n var setOptions = marked.setOptions;\n var use = marked.use;\n var walkTokens = marked.walkTokens;\n var parseInline = marked.parseInline;\n var parse = marked;\n var parser = Parser.parse;\n var lexer = Lexer.lex;\n exports.Hooks = Hooks;\n exports.Lexer = Lexer;\n exports.Parser = Parser;\n exports.Renderer = Renderer;\n exports.Slugger = Slugger;\n exports.TextRenderer = TextRenderer;\n exports.Tokenizer = Tokenizer;\n exports.getDefaults = getDefaults;\n exports.lexer = lexer;\n exports.marked = marked;\n exports.options = options;\n exports.parse = parse;\n exports.parseInline = parseInline;\n exports.parser = parser;\n exports.setOptions = setOptions;\n exports.use = use;\n exports.walkTokens = walkTokens;\n});","import EasyMDE from 'easymde';\n\ndocument.addEventListener('DOMContentLoaded', () => {\n const textarea = document.getElementById('item_body');\n if (textarea) {\n new EasyMDE({ element: textarea });\n }\n});\n","/*!\n * jQuery JavaScript Library v3.6.4\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2023-03-08T15:28Z\n */\n(function (global, factory) {\n \"use strict\";\n\n if (typeof module === \"object\" && typeof module.exports === \"object\") {\n // For CommonJS and CommonJS-like environments where a proper `window`\n // is present, execute the factory and get jQuery.\n // For environments that do not have a `window` with a `document`\n // (such as Node.js), expose a factory as module.exports.\n // This accentuates the need for the creation of a real `window`.\n // e.g. var jQuery = require(\"jquery\")(window);\n // See ticket trac-14549 for more info.\n module.exports = global.document ? factory(global, true) : function (w) {\n if (!w.document) {\n throw new Error(\"jQuery requires a window with a document\");\n }\n return factory(w);\n };\n } else {\n factory(global);\n }\n\n // Pass this if window is not defined yet\n})(typeof window !== \"undefined\" ? window : this, function (window, noGlobal) {\n // Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n // throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n // arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n // enough that all such attempts are guarded in a try block.\n \"use strict\";\n\n var arr = [];\n var getProto = Object.getPrototypeOf;\n var slice = arr.slice;\n var flat = arr.flat ? function (array) {\n return arr.flat.call(array);\n } : function (array) {\n return arr.concat.apply([], array);\n };\n var push = arr.push;\n var indexOf = arr.indexOf;\n var class2type = {};\n var toString = class2type.toString;\n var hasOwn = class2type.hasOwnProperty;\n var fnToString = hasOwn.toString;\n var ObjectFunctionString = fnToString.call(Object);\n var support = {};\n var isFunction = function isFunction(obj) {\n // Support: Chrome <=57, Firefox <=52\n // In some browsers, typeof returns \"function\" for HTML elements\n // (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n // We don't want to classify *any* DOM node as a function.\n // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n // Plus for old WebKit, typeof returns \"function\" for HTML collections\n // (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n return typeof obj === \"function\" && typeof obj.nodeType !== \"number\" && typeof obj.item !== \"function\";\n };\n var isWindow = function isWindow(obj) {\n return obj != null && obj === obj.window;\n };\n var document = window.document;\n var preservedScriptAttributes = {\n type: true,\n src: true,\n nonce: true,\n noModule: true\n };\n function DOMEval(code, node, doc) {\n doc = doc || document;\n var i,\n val,\n script = doc.createElement(\"script\");\n script.text = code;\n if (node) {\n for (i in preservedScriptAttributes) {\n // Support: Firefox 64+, Edge 18+\n // Some browsers don't support the \"nonce\" property on scripts.\n // On the other hand, just using `getAttribute` is not enough as\n // the `nonce` attribute is reset to an empty string whenever it\n // becomes browsing-context connected.\n // See https://github.com/whatwg/html/issues/2369\n // See https://html.spec.whatwg.org/#nonce-attributes\n // The `node.getAttribute` check was added for the sake of\n // `jQuery.globalEval` so that it can fake a nonce-containing node\n // via an object.\n val = node[i] || node.getAttribute && node.getAttribute(i);\n if (val) {\n script.setAttribute(i, val);\n }\n }\n }\n doc.head.appendChild(script).parentNode.removeChild(script);\n }\n function toType(obj) {\n if (obj == null) {\n return obj + \"\";\n }\n\n // Support: Android <=2.3 only (functionish RegExp)\n return typeof obj === \"object\" || typeof obj === \"function\" ? class2type[toString.call(obj)] || \"object\" : typeof obj;\n }\n /* global Symbol */\n // Defining this global in .eslintrc.json would create a danger of using the global\n // unguarded in another place, it seems safer to define global only for this module\n\n var version = \"3.6.4\",\n // Define a local copy of jQuery\n jQuery = function (selector, context) {\n // The jQuery object is actually just the init constructor 'enhanced'\n // Need init if jQuery is called (just allow error to be thrown if not included)\n return new jQuery.fn.init(selector, context);\n };\n jQuery.fn = jQuery.prototype = {\n // The current version of jQuery being used\n jquery: version,\n constructor: jQuery,\n // The default length of a jQuery object is 0\n length: 0,\n toArray: function () {\n return slice.call(this);\n },\n // Get the Nth element in the matched element set OR\n // Get the whole matched element set as a clean array\n get: function (num) {\n // Return all the elements in a clean array\n if (num == null) {\n return slice.call(this);\n }\n\n // Return just the one element from the set\n return num < 0 ? this[num + this.length] : this[num];\n },\n // Take an array of elements and push it onto the stack\n // (returning the new matched element set)\n pushStack: function (elems) {\n // Build a new jQuery matched element set\n var ret = jQuery.merge(this.constructor(), elems);\n\n // Add the old object onto the stack (as a reference)\n ret.prevObject = this;\n\n // Return the newly-formed element set\n return ret;\n },\n // Execute a callback for every element in the matched set.\n each: function (callback) {\n return jQuery.each(this, callback);\n },\n map: function (callback) {\n return this.pushStack(jQuery.map(this, function (elem, i) {\n return callback.call(elem, i, elem);\n }));\n },\n slice: function () {\n return this.pushStack(slice.apply(this, arguments));\n },\n first: function () {\n return this.eq(0);\n },\n last: function () {\n return this.eq(-1);\n },\n even: function () {\n return this.pushStack(jQuery.grep(this, function (_elem, i) {\n return (i + 1) % 2;\n }));\n },\n odd: function () {\n return this.pushStack(jQuery.grep(this, function (_elem, i) {\n return i % 2;\n }));\n },\n eq: function (i) {\n var len = this.length,\n j = +i + (i < 0 ? len : 0);\n return this.pushStack(j >= 0 && j < len ? [this[j]] : []);\n },\n end: function () {\n return this.prevObject || this.constructor();\n },\n // For internal use only.\n // Behaves like an Array's method, not like a jQuery method.\n push: push,\n sort: arr.sort,\n splice: arr.splice\n };\n jQuery.extend = jQuery.fn.extend = function () {\n var options,\n name,\n src,\n copy,\n copyIsArray,\n clone,\n target = arguments[0] || {},\n i = 1,\n length = arguments.length,\n deep = false;\n\n // Handle a deep copy situation\n if (typeof target === \"boolean\") {\n deep = target;\n\n // Skip the boolean and the target\n target = arguments[i] || {};\n i++;\n }\n\n // Handle case when target is a string or something (possible in deep copy)\n if (typeof target !== \"object\" && !isFunction(target)) {\n target = {};\n }\n\n // Extend jQuery itself if only one argument is passed\n if (i === length) {\n target = this;\n i--;\n }\n for (; i < length; i++) {\n // Only deal with non-null/undefined values\n if ((options = arguments[i]) != null) {\n // Extend the base object\n for (name in options) {\n copy = options[name];\n\n // Prevent Object.prototype pollution\n // Prevent never-ending loop\n if (name === \"__proto__\" || target === copy) {\n continue;\n }\n\n // Recurse if we're merging plain objects or arrays\n if (deep && copy && (jQuery.isPlainObject(copy) || (copyIsArray = Array.isArray(copy)))) {\n src = target[name];\n\n // Ensure proper type for the source value\n if (copyIsArray && !Array.isArray(src)) {\n clone = [];\n } else if (!copyIsArray && !jQuery.isPlainObject(src)) {\n clone = {};\n } else {\n clone = src;\n }\n copyIsArray = false;\n\n // Never move original objects, clone them\n target[name] = jQuery.extend(deep, clone, copy);\n\n // Don't bring in undefined values\n } else if (copy !== undefined) {\n target[name] = copy;\n }\n }\n }\n }\n\n // Return the modified object\n return target;\n };\n jQuery.extend({\n // Unique for each copy of jQuery on the page\n expando: \"jQuery\" + (version + Math.random()).replace(/\\D/g, \"\"),\n // Assume jQuery is ready without the ready module\n isReady: true,\n error: function (msg) {\n throw new Error(msg);\n },\n noop: function () {},\n isPlainObject: function (obj) {\n var proto, Ctor;\n\n // Detect obvious negatives\n // Use toString instead of jQuery.type to catch host objects\n if (!obj || toString.call(obj) !== \"[object Object]\") {\n return false;\n }\n proto = getProto(obj);\n\n // Objects with no prototype (e.g., `Object.create( null )`) are plain\n if (!proto) {\n return true;\n }\n\n // Objects with prototype are plain iff they were constructed by a global Object function\n Ctor = hasOwn.call(proto, \"constructor\") && proto.constructor;\n return typeof Ctor === \"function\" && fnToString.call(Ctor) === ObjectFunctionString;\n },\n isEmptyObject: function (obj) {\n var name;\n for (name in obj) {\n return false;\n }\n return true;\n },\n // Evaluates a script in a provided context; falls back to the global one\n // if not specified.\n globalEval: function (code, options, doc) {\n DOMEval(code, {\n nonce: options && options.nonce\n }, doc);\n },\n each: function (obj, callback) {\n var length,\n i = 0;\n if (isArrayLike(obj)) {\n length = obj.length;\n for (; i < length; i++) {\n if (callback.call(obj[i], i, obj[i]) === false) {\n break;\n }\n }\n } else {\n for (i in obj) {\n if (callback.call(obj[i], i, obj[i]) === false) {\n break;\n }\n }\n }\n return obj;\n },\n // results is for internal usage only\n makeArray: function (arr, results) {\n var ret = results || [];\n if (arr != null) {\n if (isArrayLike(Object(arr))) {\n jQuery.merge(ret, typeof arr === \"string\" ? [arr] : arr);\n } else {\n push.call(ret, arr);\n }\n }\n return ret;\n },\n inArray: function (elem, arr, i) {\n return arr == null ? -1 : indexOf.call(arr, elem, i);\n },\n // Support: Android <=4.0 only, PhantomJS 1 only\n // push.apply(_, arraylike) throws on ancient WebKit\n merge: function (first, second) {\n var len = +second.length,\n j = 0,\n i = first.length;\n for (; j < len; j++) {\n first[i++] = second[j];\n }\n first.length = i;\n return first;\n },\n grep: function (elems, callback, invert) {\n var callbackInverse,\n matches = [],\n i = 0,\n length = elems.length,\n callbackExpect = !invert;\n\n // Go through the array, only saving the items\n // that pass the validator function\n for (; i < length; i++) {\n callbackInverse = !callback(elems[i], i);\n if (callbackInverse !== callbackExpect) {\n matches.push(elems[i]);\n }\n }\n return matches;\n },\n // arg is for internal usage only\n map: function (elems, callback, arg) {\n var length,\n value,\n i = 0,\n ret = [];\n\n // Go through the array, translating each of the items to their new values\n if (isArrayLike(elems)) {\n length = elems.length;\n for (; i < length; i++) {\n value = callback(elems[i], i, arg);\n if (value != null) {\n ret.push(value);\n }\n }\n\n // Go through every key on the object,\n } else {\n for (i in elems) {\n value = callback(elems[i], i, arg);\n if (value != null) {\n ret.push(value);\n }\n }\n }\n\n // Flatten any nested arrays\n return flat(ret);\n },\n // A global GUID counter for objects\n guid: 1,\n // jQuery.support is not used in Core but other projects attach their\n // properties to it so it needs to exist.\n support: support\n });\n if (typeof Symbol === \"function\") {\n jQuery.fn[Symbol.iterator] = arr[Symbol.iterator];\n }\n\n // Populate the class2type map\n jQuery.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"), function (_i, name) {\n class2type[\"[object \" + name + \"]\"] = name.toLowerCase();\n });\n function isArrayLike(obj) {\n // Support: real iOS 8.2 only (not reproducible in simulator)\n // `in` check used to prevent JIT error (gh-2145)\n // hasOwn isn't used here due to false negatives\n // regarding Nodelist length in IE\n var length = !!obj && \"length\" in obj && obj.length,\n type = toType(obj);\n if (isFunction(obj) || isWindow(obj)) {\n return false;\n }\n return type === \"array\" || length === 0 || typeof length === \"number\" && length > 0 && length - 1 in obj;\n }\n var Sizzle =\n /*!\n * Sizzle CSS Selector Engine v2.3.10\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://js.foundation/\n *\n * Date: 2023-02-14\n */\n function (window) {\n var i,\n support,\n Expr,\n getText,\n isXML,\n tokenize,\n compile,\n select,\n outermostContext,\n sortInput,\n hasDuplicate,\n // Local document vars\n setDocument,\n document,\n docElem,\n documentIsHTML,\n rbuggyQSA,\n rbuggyMatches,\n matches,\n contains,\n // Instance-specific data\n expando = \"sizzle\" + 1 * new Date(),\n preferredDoc = window.document,\n dirruns = 0,\n done = 0,\n classCache = createCache(),\n tokenCache = createCache(),\n compilerCache = createCache(),\n nonnativeSelectorCache = createCache(),\n sortOrder = function (a, b) {\n if (a === b) {\n hasDuplicate = true;\n }\n return 0;\n },\n // Instance methods\n hasOwn = {}.hasOwnProperty,\n arr = [],\n pop = arr.pop,\n pushNative = arr.push,\n push = arr.push,\n slice = arr.slice,\n // Use a stripped-down indexOf as it's faster than native\n // https://jsperf.com/thor-indexof-vs-for/5\n indexOf = function (list, elem) {\n var i = 0,\n len = list.length;\n for (; i < len; i++) {\n if (list[i] === elem) {\n return i;\n }\n }\n return -1;\n },\n booleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|\" + \"ismap|loop|multiple|open|readonly|required|scoped\",\n // Regular expressions\n\n // http://www.w3.org/TR/css3-selectors/#whitespace\n whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n identifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace + \"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n attributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n // Operator (capture 2)\n \"*([*^$|!~]?=)\" + whitespace +\n // \"Attribute values must be CSS identifiers [capture 5]\n // or strings [capture 3 or capture 4]\"\n \"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace + \"*\\\\]\",\n pseudos = \":(\" + identifier + \")(?:\\\\((\" +\n // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n // 1. quoted (capture 3; capture 4 or capture 5)\n \"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n // 2. simple (capture 6)\n \"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n // 3. anything else (capture 2)\n \".*\" + \")\\\\)|)\",\n // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n rwhitespace = new RegExp(whitespace + \"+\", \"g\"),\n rtrim = new RegExp(\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\"),\n rcomma = new RegExp(\"^\" + whitespace + \"*,\" + whitespace + \"*\"),\n rleadingCombinator = new RegExp(\"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\"),\n rdescend = new RegExp(whitespace + \"|>\"),\n rpseudo = new RegExp(pseudos),\n ridentifier = new RegExp(\"^\" + identifier + \"$\"),\n matchExpr = {\n \"ID\": new RegExp(\"^#(\" + identifier + \")\"),\n \"CLASS\": new RegExp(\"^\\\\.(\" + identifier + \")\"),\n \"TAG\": new RegExp(\"^(\" + identifier + \"|[*])\"),\n \"ATTR\": new RegExp(\"^\" + attributes),\n \"PSEUDO\": new RegExp(\"^\" + pseudos),\n \"CHILD\": new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\"),\n \"bool\": new RegExp(\"^(?:\" + booleans + \")$\", \"i\"),\n // For use in libraries implementing .is()\n // We use this for POS matching in `select`\n \"needsContext\": new RegExp(\"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\")\n },\n rhtml = /HTML$/i,\n rinputs = /^(?:input|select|textarea|button)$/i,\n rheader = /^h\\d$/i,\n rnative = /^[^{]+\\{\\s*\\[native \\w/,\n // Easily-parseable/retrievable ID or TAG or CLASS selectors\n rquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n rsibling = /[+~]/,\n // CSS escapes\n // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n runescape = new RegExp(\"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace + \"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\"),\n funescape = function (escape, nonHex) {\n var high = \"0x\" + escape.slice(1) - 0x10000;\n return nonHex ?\n // Strip the backslash prefix from a non-hex escape sequence\n nonHex :\n // Replace a hexadecimal escape sequence with the encoded Unicode code point\n // Support: IE <=11+\n // For values outside the Basic Multilingual Plane (BMP), manually construct a\n // surrogate pair\n high < 0 ? String.fromCharCode(high + 0x10000) : String.fromCharCode(high >> 10 | 0xD800, high & 0x3FF | 0xDC00);\n },\n // CSS string/identifier serialization\n // https://drafts.csswg.org/cssom/#common-serializing-idioms\n rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n fcssescape = function (ch, asCodePoint) {\n if (asCodePoint) {\n // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n if (ch === \"\\0\") {\n return \"\\uFFFD\";\n }\n\n // Control characters and (dependent upon position) numbers get escaped as code points\n return ch.slice(0, -1) + \"\\\\\" + ch.charCodeAt(ch.length - 1).toString(16) + \" \";\n }\n\n // Other potentially-special ASCII characters get backslash-escaped\n return \"\\\\\" + ch;\n },\n // Used for iframes\n // See setDocument()\n // Removing the function wrapper causes a \"Permission Denied\"\n // error in IE\n unloadHandler = function () {\n setDocument();\n },\n inDisabledFieldset = addCombinator(function (elem) {\n return elem.disabled === true && elem.nodeName.toLowerCase() === \"fieldset\";\n }, {\n dir: \"parentNode\",\n next: \"legend\"\n });\n\n // Optimize for push.apply( _, NodeList )\n try {\n push.apply(arr = slice.call(preferredDoc.childNodes), preferredDoc.childNodes);\n\n // Support: Android<4.0\n // Detect silently failing push.apply\n // eslint-disable-next-line no-unused-expressions\n arr[preferredDoc.childNodes.length].nodeType;\n } catch (e) {\n push = {\n apply: arr.length ?\n // Leverage slice if possible\n function (target, els) {\n pushNative.apply(target, slice.call(els));\n } :\n // Support: IE<9\n // Otherwise append directly\n function (target, els) {\n var j = target.length,\n i = 0;\n\n // Can't trust NodeList.length\n while (target[j++] = els[i++]) {}\n target.length = j - 1;\n }\n };\n }\n function Sizzle(selector, context, results, seed) {\n var m,\n i,\n elem,\n nid,\n match,\n groups,\n newSelector,\n newContext = context && context.ownerDocument,\n // nodeType defaults to 9, since context defaults to document\n nodeType = context ? context.nodeType : 9;\n results = results || [];\n\n // Return early from calls with invalid selector or context\n if (typeof selector !== \"string\" || !selector || nodeType !== 1 && nodeType !== 9 && nodeType !== 11) {\n return results;\n }\n\n // Try to shortcut find operations (as opposed to filters) in HTML documents\n if (!seed) {\n setDocument(context);\n context = context || document;\n if (documentIsHTML) {\n // If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n // (excepting DocumentFragment context, where the methods don't exist)\n if (nodeType !== 11 && (match = rquickExpr.exec(selector))) {\n // ID selector\n if (m = match[1]) {\n // Document context\n if (nodeType === 9) {\n if (elem = context.getElementById(m)) {\n // Support: IE, Opera, Webkit\n // TODO: identify versions\n // getElementById can match elements by name instead of ID\n if (elem.id === m) {\n results.push(elem);\n return results;\n }\n } else {\n return results;\n }\n\n // Element context\n } else {\n // Support: IE, Opera, Webkit\n // TODO: identify versions\n // getElementById can match elements by name instead of ID\n if (newContext && (elem = newContext.getElementById(m)) && contains(context, elem) && elem.id === m) {\n results.push(elem);\n return results;\n }\n }\n\n // Type selector\n } else if (match[2]) {\n push.apply(results, context.getElementsByTagName(selector));\n return results;\n\n // Class selector\n } else if ((m = match[3]) && support.getElementsByClassName && context.getElementsByClassName) {\n push.apply(results, context.getElementsByClassName(m));\n return results;\n }\n }\n\n // Take advantage of querySelectorAll\n if (support.qsa && !nonnativeSelectorCache[selector + \" \"] && (!rbuggyQSA || !rbuggyQSA.test(selector)) && (\n // Support: IE 8 only\n // Exclude object elements\n nodeType !== 1 || context.nodeName.toLowerCase() !== \"object\")) {\n newSelector = selector;\n newContext = context;\n\n // qSA considers elements outside a scoping root when evaluating child or\n // descendant combinators, which is not what we want.\n // In such cases, we work around the behavior by prefixing every selector in the\n // list with an ID selector referencing the scope context.\n // The technique has to be used as well when a leading combinator is used\n // as such selectors are not recognized by querySelectorAll.\n // Thanks to Andrew Dupont for this technique.\n if (nodeType === 1 && (rdescend.test(selector) || rleadingCombinator.test(selector))) {\n // Expand context for sibling selectors\n newContext = rsibling.test(selector) && testContext(context.parentNode) || context;\n\n // We can use :scope instead of the ID hack if the browser\n // supports it & if we're not changing the context.\n if (newContext !== context || !support.scope) {\n // Capture the context ID, setting it first if necessary\n if (nid = context.getAttribute(\"id\")) {\n nid = nid.replace(rcssescape, fcssescape);\n } else {\n context.setAttribute(\"id\", nid = expando);\n }\n }\n\n // Prefix every selector in the list\n groups = tokenize(selector);\n i = groups.length;\n while (i--) {\n groups[i] = (nid ? \"#\" + nid : \":scope\") + \" \" + toSelector(groups[i]);\n }\n newSelector = groups.join(\",\");\n }\n try {\n push.apply(results, newContext.querySelectorAll(newSelector));\n return results;\n } catch (qsaError) {\n nonnativeSelectorCache(selector, true);\n } finally {\n if (nid === expando) {\n context.removeAttribute(\"id\");\n }\n }\n }\n }\n }\n\n // All others\n return select(selector.replace(rtrim, \"$1\"), context, results, seed);\n }\n\n /**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\n function createCache() {\n var keys = [];\n function cache(key, value) {\n // Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n if (keys.push(key + \" \") > Expr.cacheLength) {\n // Only keep the most recent entries\n delete cache[keys.shift()];\n }\n return cache[key + \" \"] = value;\n }\n return cache;\n }\n\n /**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\n function markFunction(fn) {\n fn[expando] = true;\n return fn;\n }\n\n /**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\n function assert(fn) {\n var el = document.createElement(\"fieldset\");\n try {\n return !!fn(el);\n } catch (e) {\n return false;\n } finally {\n // Remove from its parent by default\n if (el.parentNode) {\n el.parentNode.removeChild(el);\n }\n\n // release memory in IE\n el = null;\n }\n }\n\n /**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\n function addHandle(attrs, handler) {\n var arr = attrs.split(\"|\"),\n i = arr.length;\n while (i--) {\n Expr.attrHandle[arr[i]] = handler;\n }\n }\n\n /**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\n function siblingCheck(a, b) {\n var cur = b && a,\n diff = cur && a.nodeType === 1 && b.nodeType === 1 && a.sourceIndex - b.sourceIndex;\n\n // Use IE sourceIndex if available on both nodes\n if (diff) {\n return diff;\n }\n\n // Check if b follows a\n if (cur) {\n while (cur = cur.nextSibling) {\n if (cur === b) {\n return -1;\n }\n }\n }\n return a ? 1 : -1;\n }\n\n /**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\n function createInputPseudo(type) {\n return function (elem) {\n var name = elem.nodeName.toLowerCase();\n return name === \"input\" && elem.type === type;\n };\n }\n\n /**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\n function createButtonPseudo(type) {\n return function (elem) {\n var name = elem.nodeName.toLowerCase();\n return (name === \"input\" || name === \"button\") && elem.type === type;\n };\n }\n\n /**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\n function createDisabledPseudo(disabled) {\n // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n return function (elem) {\n // Only certain elements can match :enabled or :disabled\n // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n if (\"form\" in elem) {\n // Check for inherited disabledness on relevant non-disabled elements:\n // * listed form-associated elements in a disabled fieldset\n // https://html.spec.whatwg.org/multipage/forms.html#category-listed\n // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n // * option elements in a disabled optgroup\n // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n // All such elements have a \"form\" property.\n if (elem.parentNode && elem.disabled === false) {\n // Option elements defer to a parent optgroup if present\n if (\"label\" in elem) {\n if (\"label\" in elem.parentNode) {\n return elem.parentNode.disabled === disabled;\n } else {\n return elem.disabled === disabled;\n }\n }\n\n // Support: IE 6 - 11\n // Use the isDisabled shortcut property to check for disabled fieldset ancestors\n return elem.isDisabled === disabled ||\n // Where there is no isDisabled, check manually\n /* jshint -W018 */\n elem.isDisabled !== !disabled && inDisabledFieldset(elem) === disabled;\n }\n return elem.disabled === disabled;\n\n // Try to winnow out elements that can't be disabled before trusting the disabled property.\n // Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n // even exist on them, let alone have a boolean value.\n } else if (\"label\" in elem) {\n return elem.disabled === disabled;\n }\n\n // Remaining elements are neither :enabled nor :disabled\n return false;\n };\n }\n\n /**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\n function createPositionalPseudo(fn) {\n return markFunction(function (argument) {\n argument = +argument;\n return markFunction(function (seed, matches) {\n var j,\n matchIndexes = fn([], seed.length, argument),\n i = matchIndexes.length;\n\n // Match elements found at the specified indexes\n while (i--) {\n if (seed[j = matchIndexes[i]]) {\n seed[j] = !(matches[j] = seed[j]);\n }\n }\n });\n });\n }\n\n /**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\n function testContext(context) {\n return context && typeof context.getElementsByTagName !== \"undefined\" && context;\n }\n\n // Expose support vars for convenience\n support = Sizzle.support = {};\n\n /**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\n isXML = Sizzle.isXML = function (elem) {\n var namespace = elem && elem.namespaceURI,\n docElem = elem && (elem.ownerDocument || elem).documentElement;\n\n // Support: IE <=8\n // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes\n // https://bugs.jquery.com/ticket/4833\n return !rhtml.test(namespace || docElem && docElem.nodeName || \"HTML\");\n };\n\n /**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\n setDocument = Sizzle.setDocument = function (node) {\n var hasCompare,\n subWindow,\n doc = node ? node.ownerDocument || node : preferredDoc;\n\n // Return early if doc is invalid or already selected\n // Support: IE 11+, Edge 17 - 18+\n // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n // two documents; shallow comparisons work.\n // eslint-disable-next-line eqeqeq\n if (doc == document || doc.nodeType !== 9 || !doc.documentElement) {\n return document;\n }\n\n // Update global variables\n document = doc;\n docElem = document.documentElement;\n documentIsHTML = !isXML(document);\n\n // Support: IE 9 - 11+, Edge 12 - 18+\n // Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n // Support: IE 11+, Edge 17 - 18+\n // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n // two documents; shallow comparisons work.\n // eslint-disable-next-line eqeqeq\n if (preferredDoc != document && (subWindow = document.defaultView) && subWindow.top !== subWindow) {\n // Support: IE 11, Edge\n if (subWindow.addEventListener) {\n subWindow.addEventListener(\"unload\", unloadHandler, false);\n\n // Support: IE 9 - 10 only\n } else if (subWindow.attachEvent) {\n subWindow.attachEvent(\"onunload\", unloadHandler);\n }\n }\n\n // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,\n // Safari 4 - 5 only, Opera <=11.6 - 12.x only\n // IE/Edge & older browsers don't support the :scope pseudo-class.\n // Support: Safari 6.0 only\n // Safari 6.0 supports :scope but it's an alias of :root there.\n support.scope = assert(function (el) {\n docElem.appendChild(el).appendChild(document.createElement(\"div\"));\n return typeof el.querySelectorAll !== \"undefined\" && !el.querySelectorAll(\":scope fieldset div\").length;\n });\n\n // Support: Chrome 105 - 110+, Safari 15.4 - 16.3+\n // Make sure the the `:has()` argument is parsed unforgivingly.\n // We include `*` in the test to detect buggy implementations that are\n // _selectively_ forgiving (specifically when the list includes at least\n // one valid selector).\n // Note that we treat complete lack of support for `:has()` as if it were\n // spec-compliant support, which is fine because use of `:has()` in such\n // environments will fail in the qSA path and fall back to jQuery traversal\n // anyway.\n support.cssHas = assert(function () {\n try {\n document.querySelector(\":has(*,:jqfake)\");\n return false;\n } catch (e) {\n return true;\n }\n });\n\n /* Attributes\n ---------------------------------------------------------------------- */\n\n // Support: IE<8\n // Verify that getAttribute really returns attributes and not properties\n // (excepting IE8 booleans)\n support.attributes = assert(function (el) {\n el.className = \"i\";\n return !el.getAttribute(\"className\");\n });\n\n /* getElement(s)By*\n ---------------------------------------------------------------------- */\n\n // Check if getElementsByTagName(\"*\") returns only elements\n support.getElementsByTagName = assert(function (el) {\n el.appendChild(document.createComment(\"\"));\n return !el.getElementsByTagName(\"*\").length;\n });\n\n // Support: IE<9\n support.getElementsByClassName = rnative.test(document.getElementsByClassName);\n\n // Support: IE<10\n // Check if getElementById returns elements by name\n // The broken getElementById methods don't pick up programmatically-set names,\n // so use a roundabout getElementsByName test\n support.getById = assert(function (el) {\n docElem.appendChild(el).id = expando;\n return !document.getElementsByName || !document.getElementsByName(expando).length;\n });\n\n // ID filter and find\n if (support.getById) {\n Expr.filter[\"ID\"] = function (id) {\n var attrId = id.replace(runescape, funescape);\n return function (elem) {\n return elem.getAttribute(\"id\") === attrId;\n };\n };\n Expr.find[\"ID\"] = function (id, context) {\n if (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n var elem = context.getElementById(id);\n return elem ? [elem] : [];\n }\n };\n } else {\n Expr.filter[\"ID\"] = function (id) {\n var attrId = id.replace(runescape, funescape);\n return function (elem) {\n var node = typeof elem.getAttributeNode !== \"undefined\" && elem.getAttributeNode(\"id\");\n return node && node.value === attrId;\n };\n };\n\n // Support: IE 6 - 7 only\n // getElementById is not reliable as a find shortcut\n Expr.find[\"ID\"] = function (id, context) {\n if (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n var node,\n i,\n elems,\n elem = context.getElementById(id);\n if (elem) {\n // Verify the id attribute\n node = elem.getAttributeNode(\"id\");\n if (node && node.value === id) {\n return [elem];\n }\n\n // Fall back on getElementsByName\n elems = context.getElementsByName(id);\n i = 0;\n while (elem = elems[i++]) {\n node = elem.getAttributeNode(\"id\");\n if (node && node.value === id) {\n return [elem];\n }\n }\n }\n return [];\n }\n };\n }\n\n // Tag\n Expr.find[\"TAG\"] = support.getElementsByTagName ? function (tag, context) {\n if (typeof context.getElementsByTagName !== \"undefined\") {\n return context.getElementsByTagName(tag);\n\n // DocumentFragment nodes don't have gEBTN\n } else if (support.qsa) {\n return context.querySelectorAll(tag);\n }\n } : function (tag, context) {\n var elem,\n tmp = [],\n i = 0,\n // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n results = context.getElementsByTagName(tag);\n\n // Filter out possible comments\n if (tag === \"*\") {\n while (elem = results[i++]) {\n if (elem.nodeType === 1) {\n tmp.push(elem);\n }\n }\n return tmp;\n }\n return results;\n };\n\n // Class\n Expr.find[\"CLASS\"] = support.getElementsByClassName && function (className, context) {\n if (typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML) {\n return context.getElementsByClassName(className);\n }\n };\n\n /* QSA/matchesSelector\n ---------------------------------------------------------------------- */\n\n // QSA and matchesSelector support\n\n // matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n rbuggyMatches = [];\n\n // qSa(:focus) reports false when true (Chrome 21)\n // We allow this because of a bug in IE8/9 that throws an error\n // whenever `document.activeElement` is accessed on an iframe\n // So, we allow :focus to pass through QSA all the time to avoid the IE error\n // See https://bugs.jquery.com/ticket/13378\n rbuggyQSA = [];\n if (support.qsa = rnative.test(document.querySelectorAll)) {\n // Build QSA regex\n // Regex strategy adopted from Diego Perini\n assert(function (el) {\n var input;\n\n // Select is set to empty string on purpose\n // This is to test IE's treatment of not explicitly\n // setting a boolean content attribute,\n // since its presence should be enough\n // https://bugs.jquery.com/ticket/12359\n docElem.appendChild(el).innerHTML = \"\" + \"\";\n\n // Support: IE8, Opera 11-12.16\n // Nothing should be selected when empty strings follow ^= or $= or *=\n // The test attribute must be unknown in Opera but \"safe\" for WinRT\n // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n if (el.querySelectorAll(\"[msallowcapture^='']\").length) {\n rbuggyQSA.push(\"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\");\n }\n\n // Support: IE8\n // Boolean attributes and \"value\" are not treated correctly\n if (!el.querySelectorAll(\"[selected]\").length) {\n rbuggyQSA.push(\"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\");\n }\n\n // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n if (!el.querySelectorAll(\"[id~=\" + expando + \"-]\").length) {\n rbuggyQSA.push(\"~=\");\n }\n\n // Support: IE 11+, Edge 15 - 18+\n // IE 11/Edge don't find elements on a `[name='']` query in some cases.\n // Adding a temporary attribute to the document before the selection works\n // around the issue.\n // Interestingly, IE 10 & older don't seem to have the issue.\n input = document.createElement(\"input\");\n input.setAttribute(\"name\", \"\");\n el.appendChild(input);\n if (!el.querySelectorAll(\"[name='']\").length) {\n rbuggyQSA.push(\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" + whitespace + \"*(?:''|\\\"\\\")\");\n }\n\n // Webkit/Opera - :checked should return selected option elements\n // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n // IE8 throws error here and will not see later tests\n if (!el.querySelectorAll(\":checked\").length) {\n rbuggyQSA.push(\":checked\");\n }\n\n // Support: Safari 8+, iOS 8+\n // https://bugs.webkit.org/show_bug.cgi?id=136851\n // In-page `selector#id sibling-combinator selector` fails\n if (!el.querySelectorAll(\"a#\" + expando + \"+*\").length) {\n rbuggyQSA.push(\".#.+[+~]\");\n }\n\n // Support: Firefox <=3.6 - 5 only\n // Old Firefox doesn't throw on a badly-escaped identifier.\n el.querySelectorAll(\"\\\\\\f\");\n rbuggyQSA.push(\"[\\\\r\\\\n\\\\f]\");\n });\n assert(function (el) {\n el.innerHTML = \"\" + \"\";\n\n // Support: Windows 8 Native Apps\n // The type and name attributes are restricted during .innerHTML assignment\n var input = document.createElement(\"input\");\n input.setAttribute(\"type\", \"hidden\");\n el.appendChild(input).setAttribute(\"name\", \"D\");\n\n // Support: IE8\n // Enforce case-sensitivity of name attribute\n if (el.querySelectorAll(\"[name=d]\").length) {\n rbuggyQSA.push(\"name\" + whitespace + \"*[*^$|!~]?=\");\n }\n\n // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n // IE8 throws error here and will not see later tests\n if (el.querySelectorAll(\":enabled\").length !== 2) {\n rbuggyQSA.push(\":enabled\", \":disabled\");\n }\n\n // Support: IE9-11+\n // IE's :disabled selector does not pick up the children of disabled fieldsets\n docElem.appendChild(el).disabled = true;\n if (el.querySelectorAll(\":disabled\").length !== 2) {\n rbuggyQSA.push(\":enabled\", \":disabled\");\n }\n\n // Support: Opera 10 - 11 only\n // Opera 10-11 does not throw on post-comma invalid pseudos\n el.querySelectorAll(\"*,:x\");\n rbuggyQSA.push(\",.*:\");\n });\n }\n if (support.matchesSelector = rnative.test(matches = docElem.matches || docElem.webkitMatchesSelector || docElem.mozMatchesSelector || docElem.oMatchesSelector || docElem.msMatchesSelector)) {\n assert(function (el) {\n // Check to see if it's possible to do matchesSelector\n // on a disconnected node (IE 9)\n support.disconnectedMatch = matches.call(el, \"*\");\n\n // This should fail with an exception\n // Gecko does not error, returns false instead\n matches.call(el, \"[s!='']:x\");\n rbuggyMatches.push(\"!=\", pseudos);\n });\n }\n if (!support.cssHas) {\n // Support: Chrome 105 - 110+, Safari 15.4 - 16.3+\n // Our regular `try-catch` mechanism fails to detect natively-unsupported\n // pseudo-classes inside `:has()` (such as `:has(:contains(\"Foo\"))`)\n // in browsers that parse the `:has()` argument as a forgiving selector list.\n // https://drafts.csswg.org/selectors/#relational now requires the argument\n // to be parsed unforgivingly, but browsers have not yet fully adjusted.\n rbuggyQSA.push(\":has\");\n }\n rbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join(\"|\"));\n rbuggyMatches = rbuggyMatches.length && new RegExp(rbuggyMatches.join(\"|\"));\n\n /* Contains\n ---------------------------------------------------------------------- */\n hasCompare = rnative.test(docElem.compareDocumentPosition);\n\n // Element contains another\n // Purposefully self-exclusive\n // As in, an element does not contain itself\n contains = hasCompare || rnative.test(docElem.contains) ? function (a, b) {\n // Support: IE <9 only\n // IE doesn't have `contains` on `document` so we need to check for\n // `documentElement` presence.\n // We need to fall back to `a` when `documentElement` is missing\n // as `ownerDocument` of elements within `