{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/@stimulus/core/dist/event_listener.js","webpack:///./node_modules/@stimulus/core/dist/dispatcher.js","webpack:///./node_modules/@stimulus/core/dist/action_descriptor.js","webpack:///./node_modules/@stimulus/core/dist/action.js","webpack:///./node_modules/@stimulus/core/dist/binding.js","webpack:///./node_modules/@stimulus/mutation-observers/dist/element_observer.js","webpack:///./node_modules/@stimulus/mutation-observers/dist/attribute_observer.js","webpack:///./node_modules/@stimulus/mutation-observers/dist/string_map_observer.js","webpack:///./node_modules/@stimulus/multimap/dist/set_operations.js","webpack:///./node_modules/@stimulus/multimap/dist/multimap.js","webpack:///./node_modules/@stimulus/multimap/dist/indexed_multimap.js","webpack:///./node_modules/@stimulus/mutation-observers/dist/token_list_observer.js","webpack:///./node_modules/@stimulus/mutation-observers/dist/value_list_observer.js","webpack:///./node_modules/@stimulus/core/dist/binding_observer.js","webpack:///./node_modules/@stimulus/core/dist/value_observer.js","webpack:///./node_modules/@stimulus/core/dist/context.js","webpack:///./node_modules/@stimulus/core/dist/inheritable_statics.js","webpack:///./node_modules/@stimulus/core/dist/blessing.js","webpack:///./node_modules/@stimulus/core/dist/module.js","webpack:///./node_modules/@stimulus/core/dist/definition.js","webpack:///./node_modules/@stimulus/core/dist/class_map.js","webpack:///./node_modules/@stimulus/core/dist/string_helpers.js","webpack:///./node_modules/@stimulus/core/dist/data_map.js","webpack:///./node_modules/@stimulus/core/dist/guide.js","webpack:///./node_modules/@stimulus/core/dist/selectors.js","webpack:///./node_modules/@stimulus/core/dist/target_set.js","webpack:///./node_modules/@stimulus/core/dist/scope.js","webpack:///./node_modules/@stimulus/core/dist/scope_observer.js","webpack:///./node_modules/@stimulus/core/dist/router.js","webpack:///./node_modules/@stimulus/core/dist/schema.js","webpack:///./node_modules/@stimulus/core/dist/application.js","webpack:///./node_modules/@stimulus/core/dist/class_properties.js","webpack:///./node_modules/@stimulus/core/dist/target_properties.js","webpack:///./node_modules/@stimulus/core/dist/value_properties.js","webpack:///./node_modules/@stimulus/core/dist/controller.js","webpack:///./node_modules/stimulus/index.js","webpack:///./node_modules/codemirror/lib/codemirror.js","webpack:///(webpack)/buildin/module.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/behave-js/behave.js","webpack:///./node_modules/codemirror/mode/meta.js","webpack:///./node_modules/easymde/src/js/easymde.js","webpack:///./node_modules/@rails/ujs/lib/assets/compiled/rails-ujs.js","webpack:///./node_modules/turbolinks/dist/turbolinks.js","webpack:///./app/javascript/controllers sync _controller\\.js$","webpack:///./app/javascript/controllers/checkbox_list_controller.js","webpack:///./app/javascript/controllers/clipboard_controller.js","webpack:///./app/javascript/controllers/dependent_form_items_controller.js","webpack:///./app/javascript/controllers/from_name_controller.js","webpack:///./app/javascript/controllers/hello_controller.js","webpack:///./app/javascript/controllers/markdown_editor_controller.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/addon/display/placeholder.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.js","webpack:///./app/javascript/controllers/meeting_list_controller.js","webpack:///./app/javascript/controllers/message_preview_controller.js","webpack:///./app/javascript/controllers/redirect_to_post_controller.js","webpack:///./app/javascript/controllers/tabs_controller.js","webpack:///./app/javascript/controllers/template_form_controller.js","webpack:///./app/javascript/controllers/timezone_autoselect_controller.js","webpack:///./app/javascript/controllers/toggle_controller.js","webpack:///./app/javascript/controllers/yaml_editor_controller.js","webpack:///./app/javascript/controllers/index.js","webpack:///./node_modules/@stimulus/webpack-helpers/dist/index.js","webpack:///./app/javascript/packs/participant.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","EventListener","eventTarget","eventName","eventOptions","this","unorderedBindings","Set","connect","addEventListener","disconnect","removeEventListener","bindingConnected","binding","add","bindingDisconnected","handleEvent","event","extendedEvent","stopImmediatePropagation_1","stopImmediatePropagation","assign","immediatePropagationStopped","extendEvent","_i","_a","bindings","length","Array","from","sort","left","right","leftIndex","index","rightIndex","configurable","Dispatcher","application","eventListenerMaps","Map","started","start","eventListeners","forEach","eventListener","stop","values","reduce","listeners","map","concat","fetchEventListenerForBinding","handleError","error","message","detail","fetchEventListener","eventListenerMap","fetchEventListenerMapForEventTarget","cacheKey","createEventListener","set","parts","keys","push","join","descriptorPattern","Action","element","descriptor","tagName","toLowerCase","defaultEventNames","getDefaultEventNameForElement","identifier","methodName","forToken","token","descriptorString","content","matches","trim","match","eventTargetName","window","document","split","options","replace","test","toString","eventNameSuffix","e","getAttribute","Error","Binding","context","action","willBeInvokedByEvent","invokeWithEvent","method","controller","target","Element","contains","scope","containsElement","ElementObserver","delegate","_this","elements","mutationObserver","MutationObserver","mutations","processMutations","observe","attributes","childList","subtree","refresh","takeRecords","matchElementsInTree","has","removeElement","_b","_c","addElement","mutations_1","mutation","processMutation","type","processAttributeChange","attributeName","processRemovedNodes","removedNodes","processAddedNodes","addedNodes","node","elementAttributeChanged","matchElement","nodes","elementFromNode","processTree","elementIsActive","tree","processor","nodeType","Node","ELEMENT_NODE","isConnected","elementMatched","elementUnmatched","AttributeObserver","elementObserver","hasAttribute","querySelectorAll","selector","elementMatchedAttribute","elementUnmatchedAttribute","elementAttributeValueChanged","StringMapObserver","stringMap","knownAttributeNames","refreshAttribute","getStringMapKeyForAttribute","stringMapKeyAdded","stringMapValueChanged","stringMapKeyRemoved","currentAttributeNames","recordedAttributeNames","attribute","fetch","del","size","prune","_extendStatics","Multimap","valuesByKey","hasKey","hasValue","some","getValuesForKey","getKeysForValue","filter","__extends","b","setPrototypeOf","__proto__","__","constructor","_super","IndexedMultimap","keysByValue","TokenListObserver","attributeObserver","tokensByElement","tokensMatched","readTokensForElement","refreshTokensForElement","unmatchedTokens","matchedTokens","tokensUnmatched","tokens","tokenMatched","tokenUnmatched","previousTokens","currentTokens","firstDifferingIndex","Math","max","_","findIndex","tokensAreEqual","slice","tokenString","parseTokenString","ValueListObserver","tokenListObserver","parseResultsByToken","WeakMap","valuesByTokenByElement","fetchParseResultForToken","fetchValuesByTokenForElement","elementMatchedValue","elementUnmatchedValue","parseResult","parseToken","valuesByToken","parseValueForToken","BindingObserver","bindingsByAction","valueListObserver","actionAttribute","disconnectAllActions","schema","connectAction","disconnectAction","clear","ValueObserver","receiver","stringMapObserver","valueDescriptorMap","invokeChangedCallbacksForDefaultValues","attributeValue","invokeChangedCallbackForValue","valueDescriptors","name_1","undefined","defaultValue","data","Context","controllerConstructor","bindingObserver","dispatcher","valueObserver","initialize","parentElement","readInheritableStaticArrayValues","propertyName","ancestors","getAncestorsForConstructor","definition","isArray","getOwnStaticArrayValues","readInheritableStaticObjectPairs","pairs","apply","getOwnStaticObjectPairs","getPrototypeOf","reverse","__spreadArrays","il","arguments","k","a","j","jl","bless","properties","shadowConstructor","extend","shadowProperties","getOwnKeys","shadowingDescriptor","getOwnPropertyDescriptor","getShadowedDescriptor","getShadowProperties","defineProperties","shadow","blessedProperties","blessing","getBlessedProperties","getOwnPropertySymbols","getOwnPropertyNames","extendWithReflect","extended","_newTarget","Reflect","construct","Module","blessDefinition","contextsByScope","connectedContexts","connectContextForScope","fetchContextForScope","disconnectContextForScope","ClassMap","getDataKey","getAttributeName","getAttributeNameForKey","capitalize","charAt","toUpperCase","dasherize","_char2","DataMap","setAttribute","removeAttribute","Guide","logger","warnedKeysByObject","warn","warnedKeys","attributeValueContainsToken","TargetSet","targetName","find","targetNames","findTarget","findLegacyTarget","findAll","targets","findAllTargets","findAllLegacyTargets","getSelectorForTargetName","findElement","findAllElements","getLegacySelectorForTargetName","deprecate","targetDescriptor","targetAttribute","guide","Scope","classes","closest","controllerSelector","queryElements","controllerAttribute","ScopeObserver","scopesByIdentifierByElement","scopeReferenceCounts","scopesByIdentifier","fetchScopesByIdentifierForElement","createScopeForElementAndIdentifier","referenceCount","scopeConnected","scopeDisconnected","Router","scopeObserver","modulesByIdentifier","contexts","loadDefinition","unloadIdentifier","connectModule","disconnectModule","getContextForElementAndIdentifier","defaultSchema","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","step","next","rejected","result","done","then","__generator","body","f","y","g","label","sent","trys","ops","verb","iterator","v","op","TypeError","pop","Application","documentElement","console","router","readyState","register","load","head","rest","definitions","unload","identifiers","getControllerForElementAndIdentifier","ClassPropertiesBlessing","classDefinition","TargetPropertiesBlessing","targetDefinition","_typeof","obj","ValuePropertiesBlessing","valueDefinitionPairs","propertyDescriptorMap","valueDefinitionPair","valueDescriptor","parseValueDefinitionPair","read","readers","write","writers","propertiesForValueDefinitionPair","_char","defaultValuesByType","valueDescriptorForTokenAndType","typeConstant","Boolean","Number","String","parseValueTypeConstant","number","string","array","JSON","parse","parseFloat","writeJSON","stringify","Controller","blessings","factory","userAgent","navigator","platform","gecko","ie_upto10","ie_11up","exec","edge","ie","ie_version","documentMode","webkit","qtwebkit","chrome","presto","safari","vendor","mac_geMountainLion","phantom","ios","android","mobile","mac","chromeOS","windows","presto_version","flipCtrlCmd","captureRightClick","classTest","cls","RegExp","range","rmClass","current","className","after","removeChildren","count","childNodes","removeChild","firstChild","removeChildrenAndAdd","parent","appendChild","elt","tag","style","createElement","cssText","createTextNode","eltP","child","parentNode","host","activeElt","activeElement","shadowRoot","addClass","joinClasses","as","createRange","end","endNode","setEnd","setStart","createTextRange","moveToElementText","collapse","moveEnd","moveStart","selectInput","select","args","copyObj","overwrite","prop","countColumn","tabSize","startIndex","startValue","search","nextTab","indexOf","selectionStart","selectionEnd","_e","Delayed","id","time","handler","onTimeout","self","Date","setTimeout","ms","clearTimeout","scrollerGap","Pass","sel_dontScroll","scroll","sel_mouse","origin","sel_move","findColumn","goal","pos","col","skipped","min","spaceStrs","spaceStr","lst","arr","out","nothing","createObj","base","props","inst","nonASCIISingleCaseWordChar","isWordCharBasic","ch","isWordChar","helper","source","isEmpty","extendingChars","isExtendingChar","charCodeAt","skipExtendingChars","str","dir","findFirst","pred","to","midF","mid","ceil","floor","bidiOther","getBidiPartAt","order","sticky","found","cur","bidiOrdering","lowTypes","arabicTypes","bidiRE","isNeutral","isStrong","countsAsLeft","countsAsNum","BidiSpan","level","direction","outerType","code","len","types","i$1","prev","i$2","type$1","i$3","prev$1","type$2","i$4","type$3","i$5","cur$1","type$4","i$6","end$1","before","replace$1","j$1","i$7","at","isRTL","j$2","splice","nstart","unshift","getOrder","line","text","noHandlers","on","emitter","attachEvent","_handlers","getHandlers","off","detachEvent","signal","handlers","signalDOMEvent","cm","override","preventDefault","defaultPrevented","e_defaultPrevented","codemirrorIgnore","signalCursorActivity","cursorActivity","curOp","cursorActivityHandlers","hasHandler","eventMixin","ctor","e_preventDefault","returnValue","e_stopPropagation","stopPropagation","cancelBubble","e_stop","e_target","srcElement","e_button","which","button","ctrlKey","zwspSupported","badBidiRects","dragAndDrop","div","zeroWidthElement","measure","offsetHeight","offsetWidth","hasBadBidiRects","txt","r0","getBoundingClientRect","r1","splitLinesAuto","nl","rt","hasSelection","getSelection","te","ownerDocument","selection","compareEndPoints","hasCopyEvent","oncopy","badZoomedRects","modes","mimeModes","defineMode","dependencies","resolveMode","spec","getMode","mfactory","modeObj","modeExtensions","exts","helperType","modeProps","prop$1","extendMode","copyState","state","nstate","val","innerMode","info","startState","a1","a2","StringStream","lineOracle","lastColumnPos","lastColumnValue","lineStart","getLine","doc","first","chunk","lines","children","sz","chunkSize","getBetween","iter","getLines","updateLineHeight","height","diff","lineNo","no","_lineAtHeight","h","outer","lh","isLine","lineNumberFor","lineNumberFormatter","firstLineNumber","Pos","cmp","equalCursorPos","copyPos","x","maxPos","minPos","clipLine","_clipPos","last","linelen","clipToLen","clipPosArray","eol","sol","peek","eat","eatWhile","eatSpace","skipToEnd","skipTo","backUp","column","indentation","pattern","consume","caseInsensitive","cased","substr","hideFirstChars","inner","lookAhead","oracle","baseToken","SavedContext","maxLookAhead","baseTokens","baseTokenPos","highlightLine","forceToEnd","st","modeGen","lineClasses","runMode","loop","overlay","overlays","i_end","opaque","styles","bgClass","textClass","getLineStyles","updateFrontier","getContextBefore","resetState","maxHighlightLength","stateAfter","save","styleClasses","highlightFrontier","modeFrontier","precise","display","minindent","minline","lim","indented","findStartLine","saved","fromSaved","processLine","viewFrom","viewTo","nextLine","startAt","stream","callBlankLine","readToken","blankLine","copy","Token","takeToken","asArray","extractLineClasses","output","lineClass","flattenSpans","curStart","curStyle","addModeClass","mName","sawReadOnlySpans","sawCollapsedSpans","MarkedSpan","marker","getMarkedSpanFor","spans","span","removeMarkedSpan","stretchSpansOverChange","change","full","oldFirst","markedSpans","oldLast","startCh","endCh","isInsert","old","nw","inclusiveLeft","insertLeft","endsAfter","inclusiveRight","markedSpansBefore","startsBefore","markedSpansAfter","sameLine","offset","span$1","clearEmptySpans","newMarkers","gapMarkers","gap","clearWhenEmpty","detachMarkedSpans","detachLine","attachMarkedSpans","attachLine","extraLeft","extraRight","compareCollapsedMarkers","lenDiff","aPos","bPos","fromCmp","toCmp","collapsedSpanAtSide","sps","sp","collapsed","collapsedSpanAtStart","collapsedSpanAtEnd","collapsedSpanAround","conflictingCollapsedRange","visualLine","merged","visualLineNo","lineN","vis","visualLineEndNo","lastLine","lineIsHidden","widgetNode","lineIsHiddenInner","_heightAtLine","lineObj","lineLength","found$1","findMaxLine","maxLine","maxLineLength","maxLineChanged","Line","estimateHeight","cleanUpLine","styleToClassCache","styleToClassCacheWithMode","interpretTokenStyle","cache","buildLineContent","lineView","builder","pre","trailingSpace","splitSpaces","getOption","addToken","buildToken","buildTokenBadBidi","insertLineContent","externalMeasured","maps","caches","lastChild","querySelector","defaultSpecialCharPlaceholder","title","startStyle","endStyle","css","displayText","trailingBefore","spaceBefore","special","specialChars","mustWrap","createDocumentFragment","lastIndex","txt$1","tabWidth","specialCharPlaceholder","fullStyle","attr","part","buildCollapsedSpan","ignoreWidget","widget","input","needsContentAttribute","setUneditable","allText","spanStyle","spanEndStyle","spanStartStyle","nextChange","Infinity","foundBookmarks","endStyles","upto","tokenText","LineView","visualLineContinued","hidden","buildViewArray","nextPos","view","operationGroup","orphanDelayedCallbacks","signalLater","list","delayedCallbacks","fireOrphanDelayed","delayed","updateLineForChanges","dims","changes","updateLineText","updateLineGutter","updateLineClasses","updateLineWidgets","ensureLineWrapped","replaceChild","zIndex","getLineContent","ext","built","background","wrap","insertBefore","updateLineBackground","wrapClass","gutter","gutterBackground","gutterClass","fixedGutter","fixedPos","gutterTotalWidth","markers","gutterMarkers","lineNumbers","wrap$1","gutterWrap","lineNumber","gutterLeft","lineNumInnerWidth","gutterSpecs","gutterWidth","alignable","isWidget","nextSibling","insertLineWidgets","buildLineElement","insertLineWidgetsFor","allowAbove","widgets","ws","handleMouseEvents","positionLineWidget","above","noHScroll","width","wrapperWidth","coverGutter","paddingLeft","position","marginLeft","widgetHeight","parentStyle","gutters","wrapper","clientWidth","eventInWidget","sizer","mover","paddingTop","lineSpace","offsetTop","paddingVert","paddingH","cachedPaddingH","getComputedStyle","currentStyle","parseInt","paddingRight","isNaN","scrollGap","nativeBarWidth","displayWidth","scroller","barWidth","displayHeight","clientHeight","barHeight","mapFromLineView","measureChar","bias","measureCharPrepared","prepareMeasureForLine","findViewForLine","findViewIndex","getDimensions","forceUpdate","lineMeasure","updateExternalMeasurement","rect","hasHeights","prepared","varHeight","wrapping","lineWrapping","curWidth","heights","rects","getClientRects","abs","bottom","top","ensureLineHeights","place","nodeAndOffsetInLineMap","coverStart","coverEnd","getUsefulRect","screen","logicalXDPI","deviceXDPI","normal","fromRange","hasBadZoomedRects","scaleX","scaleY","logicalYDPI","deviceYDPI","maybeUpdateRectForZooming","rSpan","charWidth","nullRect","rtop","rbot","bot","bogus","singleCursorHeightPerLine","rbottom","measureCharInner","measureText","mStart","mEnd","clearLineMeasurementCacheFor","clearLineMeasurementCache","externalMeasure","clearCaches","cachedCharWidth","cachedTextHeight","lineNumChars","pageScrollX","pageXOffset","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","coordsCharInner","rangeEnd","wrappedLineExtent","begin","wrappedLineExtentChar","boxIsAfter","box","ltr","_lineNo","ref","closestDist","endX","dist","baseX","chAround","boxAround","atLeft","atStart","textHeight","anchor","clientLeft","offsetLeft","compensateForHScroll","th","perLine","widgetsHeight","estimateLineHeights","est","estHeight","posFromMouse","liberal","forRect","space","clientX","clientY","e$1","colDiff","round","regChange","lendiff","updateLineNumbers","viewChanged","resetView","cut","viewCuttingPoint","cut$1","cutTop","cutBot","regLineChange","oldN","newN","countDirtyView","dirty","updateSelection","showSelection","prepareSelection","primary","curFragment","cursors","selFragment","sel","ranges","primIndex","empty","showCursorWhenSelecting","drawSelectionCursor","drawSelectionRange","cursor","cursorHeight","otherCursor","cmpCoords","fragment","padding","leftSide","rightSide","sizerWidth","docLTR","drawForLine","fromArg","toArg","lineLen","wrapX","side","extent","iterateBidiSections","fromPos","toPos","openStart","openEnd","openRight","topLeft","topRight","botLeft","botRight","sFrom","sTo","fromLine","toLine","singleVLine","leftEnd","rightStart","restartBlink","focused","clearInterval","blinker","cursorDiv","visibility","cursorBlinkRate","setInterval","ensureFocus","focus","onFocus","delayBlurEvent","delayingBlurEvent","onBlur","readOnly","selForContextMenu","reset","receivedFocus","shift","updateHeightsInViewport","prevBottom","lineDiv","updateWidgetHeight","chWidth","w","visibleLines","viewport","ensure","ensureFrom","ensureTo","calculateScrollPos","snapMargin","screentop","docBottom","atTop","atBottom","newTop","screenleft","screenw","tooWide","addToScrollTop","resolveScrollToPos","ensureCursorVisible","getCursor","scrollToPos","margin","cursorScrollMargin","scrollToCoords","scrollToCoordsRange","sPos","updateScrollTop","updateDisplaySimple","setScrollTop","startWorker","forceScroll","scrollHeight","scrollbars","setScrollLeft","isScroller","scrollWidth","alignHorizontally","measureForScrollbars","gutterW","docH","viewHeight","viewWidth","barLeft","docHeight","NativeScrollbars","vert","horiz","tabIndex","checkedZeroWidth","minHeight","minWidth","update","needsH","needsV","sWidth","totalHeight","totalWidth","zeroWidthHack","disableHoriz","enableZeroWidthBar","disableVert","pointerEvents","bar","delay","maybeDisable","elementFromPoint","NullScrollbars","updateScrollbars","startWidth","startHeight","updateScrollbarsInner","sizes","paddingBottom","heightForcer","borderBottom","scrollbarFiller","coverGutterNextToScrollbar","gutterFiller","scrollbarModel","initScrollbars","scrollbarStyle","axis","nextOpId","_startOperation","updateInput","typing","changeObjs","cursorActivityCalled","selectionChanged","updateMaxLine","ownsGroup","_endOperation","endCb","group","callbacks","fireCallbacksForOps","finishOperation","endOperation_R1","updatedDisplay","mustUpdate","updateDisplayIfNeeded","endOperation_R2","endOperation_W2","endOperation_finish","endOperations","scrollbarsClipped","marginBottom","borderRightWidth","maybeClipScrollbars","DisplayUpdate","barMeasure","adjustWidthTo","maxScrollLeft","preparedSelection","takeFocus","setDocumentHeight","postUpdateDisplay","wheelStartX","wheelStartY","doScroll","innerHeight","scrollNode","scrollIntoView","maybeScrollWindow","limit","changed","endCoords","scrollPos","startTop","startLeft","scrollPosIntoView","maybeHiddenMarkers","unhidden","maybeUnhiddenMarkers","finish","runInOp","operation","methodOp","docMethodOp","highlight","highlightWorker","workTime","changedLines","oldStyles","highlighted","oldCls","newCls","ischange","workDelay","force","visible","editorIsHidden","wrapperHeight","oldDisplayWidth","events","renderedView","maybeUpdateLineNumberWidth","viewportMargin","different","lastWrapHeight","lastWrapWidth","adjustView","toUpdate","selSnapshot","hasFocus","active","anchorNode","anchorOffset","focusNode","focusOffset","selectionSnapshot","updateNumbersFrom","container","rm","currentWheelTarget","updateNumber","patchDisplay","snapshot","nodeName","removeAllRanges","addRange","restoreSelection","selectionDiv","reportedViewFrom","reportedViewTo","updateGutterSpace","alignWidgets","comp","align","innerW","lineGutter","lineNumWidth","getGutters","sawLineNumbers","renderGutters","specs","gElt","updateGutters","Display","draggable","wheelDX","wheelDY","activeTouch","init","wheelSamples","wheelPixelsPerUnit","wheelEventDelta","dx","wheelDeltaX","dy","wheelDeltaY","HORIZONTAL_AXIS","VERTICAL_AXIS","wheelDelta","wheelEventPixels","delta","onScrollWheel","canScrollX","canScrollY","pixels","movedX","movedY","sample","Selection","equals","here","there","deepCopy","Range","somethingSelected","normalizeSelection","mayTouch","selectionsMayTouch","prim","inv","simpleSelection","changeEnd","adjustForChange","computeSelAfterChange","offsetPos","loadMode","modeOption","resetModeState","isWholeLineUpdate","wholeLineUpdateBefore","updateDoc","spansFor","updateLine","linesFor","firstLine","lastText","lastSpans","nlines","insert","remove","added","added$1","added$2","linkedDocs","sharedHistOnly","propagate","skip","sharedHist","linked","rel","shared","attachDoc","setDirectionClass","History","startGen","undone","undoDepth","lastModTime","lastSelTime","lastOp","lastSelOp","lastOrigin","lastSelOrigin","generation","maxGeneration","historyChangeFromChange","histChange","attachLocalSpans","clearSelectionEvents","addChangeToHistory","selAfter","opId","hist","history","historyEventDelay","lastChangeEvent","pushSelectionToHistory","addSelectionToHistory","selectionEventCanBeMerged","clearRedo","dest","existing","removeClearedSpans","explicitlyCleared","mergeOldSpans","getOldSpans","stretched","oldCur","stretchCur","copyHistoryArray","newGroup","instantiateSel","newChanges","extendRange","posBefore","extendSelection","setSelection","extendSelections","heads","replaceOneSelection","setSimpleSelection","setSelectionReplaceHistory","setSelectionNoUndo","NaN","filterSelectionChange","setSelectionInner","skipAtomicInSelection","reCheckSelection","mayClear","newAnchor","skipAtomic","newHead","skipAtomicInner","oldPos","preventCursorLeft","selectLeft","preventCursorRight","selectRight","atomic","near","movePos","far","cantEdit","selectAll","filterChange","canceled","cancel","makeChange","ignoreReadOnly","suppressEdits","mark","mk","newParts","dfrom","dto","removeReadOnlyRanges","makeChangeInner","makeChangeSingleDoc","rebased","rebaseHist","makeChangeFromHistory","allowSelectionOnly","suppress","antiChanges","returned","shiftDoc","distance","removed","recomputeMaxLength","checkWidthStart","retreatFrontier","changesHandler","changeHandler","makeChangeSingleDocInEditor","_replaceRange","splitLines","rebaseHistSelSingle","rebaseHistArray","sub","ok","copied","changeLine","handle","changeType","LeafChunk","BranchChunk","removeInner","insertInner","iterN","oldHeight","remaining","leaf","maybeSpill","me","sibling","myIndex","used","LineWidget","opt","adjustScrollWhenAboveVisible","this$1","oldH","nextMarkerId","TextMarker","_markText","cloneNode","isParent","SharedTextMarker","markTextShared","replacedWith","addToHistory","curLine","addMarkedSpan","clearOnEnter","clearHistory","withOp","visual","dHeight","findSharedMarkers","findMarks","clipPos","detachSharedMarkers","subMarker","nextDocId","Doc","lineSep","cleanGeneration","getValue","lineSeparator","setValue","replaceRange","getRange","getLineHandle","getLineNumber","getLineHandleVisualStart","lineCount","listSelections","setCursor","extendSelectionsBy","setSelections","addSelection","getSelections","replaceSelection","dup","replaceSelections","newSel","hint","oldPrev","newPrev","computeReplacedSel","undo","redo","undoSelection","redoSelection","setExtending","getExtending","historySize","markClean","changeGeneration","forceSplit","isClean","gen","getHistory","setHistory","histData","setGutterMarker","gutterID","clearGutter","lineInfo","addLineClass","where","removeLineClass","addLineWidget","insertAt","aboveVisible","removeLineWidget","markText","setBookmark","realOpts","findMarksAt","getAllMarks","posFromIndex","sepSize","indexFromPos","copyHistory","linkedDoc","mFrom","mTo","subMark","copySharedMarkers","unlinkDoc","CodeMirror","splitIds","iterLinkedDocs","getEditor","setDirection","eachLine","lastDrop","onDrop","clearDragCursor","files","dataTransfer","isReadOnly","FileReader","File","markAsReadAndPasteIfAllFilesAreRead","readTextFromFile","file","allowDropFileTypes","reader","onerror","onload","readAsText","draggingText","text$1","getData","selected","dragCursor","forEachCodeMirror","getElementsByClassName","byClass","editors","globalsRegistered","ensureGlobalHandlers","resizeTimer","onResize","setSize","keyNames","3","8","9","13","16","17","18","19","20","27","32","33","34","35","36","37","38","39","40","44","45","46","59","61","91","92","93","106","107","109","110","111","145","173","186","187","188","189","190","191","192","219","220","221","222","63232","63233","63234","63235","63272","63273","63275","63276","63277","63302","fromCharCode","keyMap","normalizeKeyName","alt","ctrl","cmd","mod","normalizeKeyMap","keymap","keyname","lookupKey","getKeyMap","fallthrough","isModifierKey","keyCode","addModifierNames","noShift","altKey","metaKey","shiftKey","keyName","altGraphKey","deleteNearSelection","compute","kill","toKill","replaced","moveCharLogically","moveLogically","endOfLine","visually","prep","targetTop","basic","pcDefault","emacsy","macDefault","commands","singleSelection","killLine","deleteLine","delLineLeft","delWrappedLineLeft","charCoords","coordsChar","delWrappedLineRight","rightPos","goDocStart","goDocEnd","goLineStart","goLineStartSmart","lineStartSmart","goLineEnd","visualLineEnd","lineEnd","goLineRight","cursorCoords","goLineLeft","goLineLeftSmart","goLineUp","moveV","goLineDown","goPageUp","goPageDown","goCharLeft","moveH","goCharRight","goColumnLeft","goColumnRight","goWordLeft","goGroupRight","goGroupLeft","goWordRight","delCharBefore","deleteH","delCharAfter","delWordBefore","delWordAfter","delGroupBefore","delGroupAfter","indentAuto","indentSelection","indentMore","indentLess","insertTab","insertSoftTab","spaces","defaultTab","execCommand","transposeChars","newlineAndIndent","sels","indentLine","openLine","toggleOverwrite","firstNonWS","inWS","doHandleBinding","bound","dropShift","ensurePolled","prevShift","stopSeq","dispatchKey","seq","keySeq","dispatchKeyInner","keyMaps","extraKeys","lookupKeyForEditor","handleKeyBinding","motion","lastStoppedKey","onKeyDown","getField","handled","up","showCrossHair","onKeyUp","onKeyPress","charCode","handleCharBinding","lastClick","lastDoubleClick","PastClick","onMouseDown","supportsTouch","clickInGutter","repeat","now","compare","clickRepeat","selectingText","handleMappedButton","contained","behavior","option","unit","addNew","moveOnDrag","configureMouse","dragDrop","moved","dragEnd","mouseMove","dragStart","preventScroll","e2","leftButtonStartDrag","ourRange","ourIndex","startSel","rangeForUnit","lastPos","extendTo","startCol","posCol","leftPos","oldRange","ranges$1","anchorLine","boundary","headIndex","usePart","bidiSimplify","editorSize","counter","move","buttons","curCount","leftButtonSelect","leftButtonDown","onContextMenu","findWordAt","gutterEvent","prevent","mX","mY","touches","lineBox","contextMenuInGutter","themeChanged","theme","Init","defaults","optionHandlers","dragDropChanged","funcs","dragFunctions","toggle","enter","over","leave","drop","wrappingChanged","inputStyles","inputStyle","pasteIncoming","cutIncoming","autofocus","word","touchFinished","prevTouch","finishTouch","farAway","touch","radiusX","radiusY","isMouseLikeTouchEvent","pageX","pageY","frag","onDragOver","setData","effectAllowed","setDragImage","img","src","_top","onDragStart","inp","registerEventHandlers","finishInit","initHooks","textRendering","how","aggressive","indent","curSpace","curSpaceString","indentUnit","indentString","indentWithTabs","pos$1","defineInitHook","lastCopied","setLastCopied","newLastCopied","applyTextInput","inserted","deleted","recent","paste","textLines","multiPaste","pasteLinesPerSelection","lineWise","changeEvent","triggerElectric","handlePaste","pasted","clipboardData","disableInput","electricChars","smartIndent","getModeAt","electricInput","copyableRanges","lineRange","disableBrowserMagic","field","spellcheck","autocorrect","autocapitalize","hiddenTextarea","border","_findPosH","origDir","lineDir","moveOnce","boundToLine","bidi","mv","getWrappedLineExtent","moveInStorageOrder","searchInVisualLine","getRes","res","nextCh","moveVisually","sawType","getHelper","hitSide","_findPosV","pageSize","moveAmount","ContentEditableInput","lastAnchorNode","lastAnchorOffset","lastFocusNode","lastFocusOffset","polling","composing","gracePeriod","readDOMTimeout","posToDOM","badPos","bad","domToPos","lineNode","locateNodeInLineView","textNode","topNode","nodeValue","curNode","textContent","previousSibling","dist$1","belongsToInput","onCopyCut","lineWiseCopyCut","clearData","kludge","hadFocus","showPrimarySelection","updateFromDOM","readFromDOMSoon","forceCompositionEnd","screenReaderLabelChanged","showMultipleSelections","curAnchor","curFocus","rng","rangeCount","getRangeAt","startGracePeriod","rememberSelection","selectionInEditor","commonAncestorContainer","blur","pollSelection","pollInterval","poll","scan","isInGutter","triggerOnKeyDown","pollContent","fromIndex","fromNode","toNode","toIndex","newText","closing","extraLinebreak","close","addText","walk","cmText","markerID","isBlock","domTextBetween","oldText","cutFront","cutEnd","oldTop","maxCutFront","newBot","oldBot","maxCutEnd","chFrom","chTo","contentEditable","readOnlyChanged","resetPosition","TextareaInput","prevInput","pollingFast","createField","textarea","prepareCopyCut","fastPoll","dispatchEvent","Event","_display","moveInputWithCursor","headPos","wrapOff","lineOff","teTop","teLeft","drawn","contextMenuPending","slowPoll","missed","same","resetSelectionOnContextMenu","oldScrollY","oldCSS","oldWrapperCSS","wrapperBox","offsetParent","scrollY","scrollTo","rehide","detectingSelectAll","prepareSelectAllHack","mouseup","extval","disabled","deflt","notOnInit","defineOption","newBreaks","getInputField","detach","attach","integer","defineOptions","helpers","setOption","getDoc","addKeyMap","removeKeyMap","addOverlay","score","priority","insertSorted","modeSpec","removeOverlay","newRanges","getTokenAt","getLineTokens","getTokenTypeAt","getHelpers","help","_global","getStateAfter","lineAtHeight","heightAtLine","defaultTextHeight","defaultCharWidth","getViewport","addWidget","vspace","hspace","triggerOnKeyPress","triggerOnKeyUp","triggerOnMouseDown","findPosH","amount","rtlMoveVisually","findPosV","goalColumn","goals","startChar","check","getScrollInfo","scrollToRange","interpret","startOperation","endOperation","swapDoc","phrase","phraseText","phrases","getWrapperElement","getScrollerElement","getGutterElement","registerHelper","registerGlobalHelper","predicate","addEditorMethods","dontDelegate","defineMIME","mime","defineExtension","func","defineDocExtension","fromTextArea","tabindex","placeholder","realSubmit","form","leaveSubmitMethodAlone","submit","wrappedSubmit","getTextArea","toTextArea","cmpPos","addLegacyProps","version","webpackPolyfill","paths","cmCfg","modeCfg","htmlMode","htmlModeMissing","highlightFormatting","maxBlockquoteDepth","taskLists","strikethrough","emoji","fencedCodeBlockHighlighting","fencedCodeBlockDefaultMode","xml","tokenTypeOverrides","tokenTypes","header","quote","list1","list2","list3","hr","image","imageAltText","imageMarker","formatting","linkInline","linkEmail","linkText","linkHref","em","strong","tokenType","hrRE","listRE","taskListRE","atxHeaderRE","allowAtxHeaderWithoutSpace","setextHeaderRE","textRE","fencedCodeRE","linkDefRE","punctuation","switchInline","inline","switchBlock","block","linkTitle","indentedCode","htmlBlock","exit","htmlState","tagStart","tokenize","isInText","inlineNormal","blockNormal","trailingSpaceNewLine","prevLine","thisLine","firstTokenOnLine","prevLineLineIsEmpty","prevLineIsIndentedCode","prevLineIsHr","prevLineIsList","maxNonCodeIndentation","listStack","lineIndentation","indentationDiff","allowsInlineContinuation","fencedCodeEnd","isHr","getType","setext","listType","taskList","fencedEndRE","localMode","findModeByName","mimes","localState","local","footnoteLink","md_inside","returnType","currListInd","hasExitedList","maxFencedEndInd","taskOpen","taskClosed","listMod","handleText","matchCh","regex","previousFormatting","formattingEscape","atts","substring","leftFlanking","rightFlanking","setEm","setStrong","retType","endChar","returnState","linkRE","footnoteLinkInside","footnoteUrl","textAfter","blockCommentStart","blockCommentEnd","closeBrackets","fold","htmlConfig","autoSelfClosers","implicitlyClosed","contextGrabbers","doNotIndent","allowUnquoted","allowMissing","caseFold","xmlConfig","allowMissingTagName","editorConf","config_","setStyle","config","inText","chain","parser","inBlock","doctype","depth","inTag","closure","baseState","isInAttribute","stringStartCol","terminator","startOfLine","noIndent","popContext","maybePopContext","nextTagName","parentTagName","tagNameState","closeTagNameState","attrState","matchClosing","closeState","closeStateErr","_stream","attrEqState","attrValueState","attrContinuedState","baseIndent","fullLine","multilineTagIndentPastTag","multilineTagIndentFactor","alignCDATA","tagAfter","grabbers","configuration","skipAttribute","xmlCurrentTag","xmlCurrentContext","cx","overlayMode","combine","basePos","baseCur","overlayPos","overlayCur","streamSeen","combineTokens","overlayToken","hooks","BehaveHooks","hookName","fn","theHook","Behave","userOpts","times","half","thisp","tab","newLine","opts","replaceTab","softTabs","autoOpen","autoStrip","autoIndent","fence","charSettings","open","canBreak","utils","_callHook","passData","theEditor","textVal","caretPos","editor","levelsDeep","caret","total","defineNewLine","ta","defineTabSize","OTabSize","MozTabSize","rangeDupeBookmark","duplicate","getBookmark","moveToBookmark","setSelectionRange","normalizedValue","textInputRange","endRange","textAreaElement","fenceRange","hacked","matchedFence","matchCase","isEven","levels","toDecrement","quoteMap","finalLevels","deepExtend","destination","addEvent","removeEvent","preventDefaultEvent","intercept","toReturn","tempStart","toIndent","edited","finalCursorPos","leftChar","rightChar","numTabs","ourIndent","closingBreak","charFuncs","theCode","listen","destroy","ender","modeInfo","alias","findModeByMIME","findModeByExtension","findModeByFileName","filename","dot","lastIndexOf","CodeMirrorSpellChecker","marked","isMac","anchorToExternalRegex","toggleBold","toggleItalic","drawLink","toggleHeadingSmaller","toggleHeadingBigger","drawImage","toggleBlockquote","toggleOrderedList","toggleUnorderedList","toggleCodeBlock","togglePreview","toggleStrikethrough","toggleHeading1","toggleHeading2","toggleHeading3","cleanBlock","drawTable","drawHorizontalRule","toggleSideBySide","toggleFullScreen","shortcuts","getBindingName","isMobile","opera","fixShortcut","createToolbarDropdown","enableTooltips","el","createToolbarButton","childrenIndex","childElement","toolbarBuiltInButtons","enableActions","markup","actionName","tooltip","createTooltip","noDisable","classList","noMobile","classNameParts","iconClasses","classNameIndex","classNamePart","icon","iconClassIndex","iconClass","innerHTML","onclick","createSep","getState","stat","ret","bold","italic","link","saved_overflow","codemirror","overflow","sidebyside","onToggleFullScreen","maxHeight","removeProperty","setPreviewMaxHeight","toolbar_div","toolbarElements","fullscreen","toolbarButton","_toggleBlock","blockStyles","fenceCharsToInsert","fencing_line","token_state","code_type","line_num","firstTok","lastTok","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","startPoint","endPoint","_cleanBlock","url","promptURLs","prompt","promptTexts","insertTexts","afterImageUploaded","imageName","uploadedImage","updateStatusBar","imageTexts","sbOnUploaded","sbInit","table","horizontalRule","preview","useSideBySideListener","noFullscreenItems","gui","toolbar","statusbar","removeNoFullscreenClass","sideBySideFullscreen","addNoFullscreenClass","previewNormal","sideBySideRenderingFunction","newValue","previewRender","previewClass","startEnd","currHeadingLevel","listRegexp","whitespacesRegexp","repl","_toggle","untoggleOnly","_getChar","_checkChar","start_chars","end_chars","humanFileSize","bytes","units","u","toFixed","_mergeProperties","wordCount","openBrowseFileWindow","timeFormat","locale","format","hour","minute","sbOnDragEnter","sbOnDrop","sbProgress","sizeUnits","errorMessages","noFileGiven","typeNotAllowed","fileTooLarge","importError","EasyMDE","autoDownloadFA","autoDownloadFontAwesome","styleSheets","href","getElementsByTagName","log","showIcons","status","uploadImage","plainText","markdown","parsingConfig","autosave","errorCallback","errorMessage","alert","imageMaxSize","imageAccept","unique_id","uniqueId","render","initialValue","foundSavedValue","imageUploadFunction","uploadImagesUsingCustomFunction","uploadImages","isLocalStorageAvailable","localStorage","setItem","removeItem","onSuccess","onError","names","uploadImageUsingCustomFunction","itemName","matchingClasses","markedOptions","renderingConfig","singleLineBreaks","breaks","codeSyntaxHighlighting","hljs","language","getLanguage","highlightAuto","setOptions","htmlText","sanitizerFunction","htmlDoc","DOMParser","parseFromString","listItems","listItem","listItemChild","HTMLInputElement","listStyleType","removeListStyleWhenCheckbox","linkString","fixedLinkString","addAnchorTargetBlank","_rendered","backdrop","spellChecker","gitHubSpice","codeMirrorInstance","styleSelectedText","nativeSpellcheck","forceSync","easyMDEContainer","cmWrapper","createToolbar","createStatusbar","enabled","_autosave_timeout","submit_delay","sideBySide","createSideBySide","temp_cm","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","imageUploadEndpoint","response","responseText","filePath","location","statusText","send","filledErrorMessage","borderTopWidth","previewMaxHeight","syncSideBySidePreviewScroll","cScroll","pScroll","ratio","onscroll","items","toolbarData","toolbarGuideIcon","hideIcons","nonSeparatorIconsFollow","item","toolbarTips","multiple","accept","opacity","onUpdate","onActivity","isPreviewActive","isSideBySideActive","isFullscreenActive","Rails","linkClickSelector","buttonClickSelector","exclude","inputChangeSelector","formSubmitSelector","formInputClickSelector","formDisableSelector","formEnableSelector","fileInputSelector","linkDisableSelector","buttonDisableSelector","cspNonce","meta","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","$","csrfParam","csrfToken","CSRFProtection","xhr","setRequestHeader","refreshCSRFTokens","param","CustomEvent","fire","params","evt","createEvent","initCustomEvent","bubbles","cancelable","stopEverything","eventType","AcceptHeaders","createXHR","prepareOptions","processResponse","html","json","script","ajax","getResponseHeader","success","complete","beforeSend","OPENED","dataType","crossDomain","withCredentials","onreadystatechange","DONE","isCrossDomain","originAnchor","urlAnchor","protocol","toArray","serializeElement","additionalParam","inputs","checked","encodeURIComponent","formElements","allowAction","handleConfirm","confirm","answer","callback","disableFormElement","disableFormElements","disableLinkElement","enableFormElement","enableFormElements","enableLinkElement","isXhrRedirect","handleDisabledElement","enableElement","disableElement","replacement","originalText","handleMethod","formContent","isRemote","handleRemote","enctype","formSubmitButtonClick","formNoValidate","preventInsignificantClick","insignificantMetaClick","jQuery","rails","ajaxPrefilter","originalOptions","_rails_loaded","Turbolinks","supported","pushState","requestAnimationFrame","visit","clearCache","setProgressBarDelay","copyObject","defer","throttle","dispatch","initEvent","uuid","random","Location","absoluteURL","hash","requestURL","getOrigin","getPath","getPathComponents","getLastPathComponent","getExtension","isHTML","isPrefixedBy","isEqualTo","toCacheKey","toJSON","valueOf","_t","HttpRequest","requestCanceled","requestTimedOut","requestFailed","requestLoaded","requestProgressed","referrer","NETWORK_FAILURE","TIMEOUT_FAILURE","timeout","notifyApplicationBeforeRequestStart","setProgress","requestStarted","abort","endRequest","requestCompletedWithResponse","failed","requestFailedWithStatusCode","notifyApplicationAfterRequestEnd","ontimeout","onabort","requestFinished","_t2","ProgressBar","trickle","stylesheetElement","createStylesheetElement","progressElement","createProgressElement","defaultCSS","show","installStylesheetElement","installProgressElement","startTrickling","hide","hiding","fadeProgressElement","uninstallProgressElement","stopTrickling","trickleInterval","_t3","BrowserAdapter","showProgressBar","progressBar","visitProposedToLocationWithAction","startVisitToLocationWithAction","visitStarted","issueRequest","changeHistory","loadCachedSnapshot","visitRequestStarted","hasCachedSnapshot","showProgressBarAfterDelay","visitRequestProgressed","visitRequestCompleted","loadResponse","visitRequestFailedWithStatusCode","reload","visitRequestFinished","hideProgressBar","visitCompleted","followRedirect","pageInvalidated","progressBarTimeout","progressBarDelay","_t4","onPageLoad","onPopState","shouldHandlePopState","turbolinks","restorationIdentifier","historyPoppedToLocationWithRestorationIdentifier","pageLoaded","pageIsLoaded","HeadDetails","outerHTML","tracked","fromHeadElement","hasElementWithKey","getTrackedElementSignature","getScriptElementsNotInDetails","getElementsMatchingTypeNotInDetails","getStylesheetElementsNotInDetails","getProvisionalElements","getMetaValue","findMetaElementByName","Snapshot","headDetails","bodyElement","fromHTMLString","fromHTMLElement","clone","getRootLocation","getSetting","getCacheControlValue","getElementForAnchor","getPermanentElements","getPermanentElementById","getPermanentElementsPresentInSnapshot","findFirstAutofocusableElement","hasAnchor","isPreviewable","isCacheable","isVisitable","Renderer","renderView","viewWillRender","newBody","viewRendered","invalidateView","viewInvalidated","createScriptElement","async","__super__","SnapshotRenderer","currentSnapshot","newSnapshot","isPreview","currentHeadDetails","newHeadDetails","currentBody","shouldRender","mergeHead","replaceBody","focusFirstAutofocusableElement","copyNewHeadStylesheetElements","copyNewHeadScriptElements","removeCurrentHeadProvisionalElements","copyNewHeadProvisionalElements","relocateCurrentBodyPermanentElements","activateNewBodyScriptElements","assignNewBody","replacePlaceholderElementsWithClonedPermanentElements","trackedElementsAreIdentical","getNewHeadStylesheetElements","getNewHeadScriptElements","getCurrentHeadProvisionalElements","getNewHeadProvisionalElements","getCurrentBodyPermanentElements","permanentElement","getNewBodyScriptElements","_t5","_t6","ErrorRenderer","replaceHeadAndBody","activateBodyScriptElements","getScriptElements","View","htmlElement","getSnapshot","markAsPreview","renderSnapshot","renderError","_t7","ScrollManager","onScroll","scrollToElement","scrollToPosition","updatePosition","scrollPositionChanged","SnapshotCache","snapshots","put","_t8","Visit","performScroll","adapter","timingMetrics","recordTimingMetric","cancelRender","fail","visitFailed","historyChanged","shouldIssueRequest","getCachedSnapshot","getCachedSnapshotForLocation","cacheSnapshot","visitRendered","redirectedToLocation","followedRedirect","replaceHistoryWithLocationAndRestorationIdentifier","scrolled","scrollToRestoredPosition","scrollToTop","scrollToAnchor","restorationData","scrollPosition","getTime","getTimingMetrics","snapshotCached","frame","cancelAnimationFrame","_t9","clickBubbled","clickCaptured","scrollManager","startHistory","disable","stopHistory","applicationAllowsVisitingLocation","locationIsVisitable","getRestorationDataForIdentifier","startVisit","pushHistoryWithLocationAndRestorationIdentifier","shouldCacheSnapshot","notifyApplicationBeforeCachingSnapshot","lastRenderedLocation","getCurrentRestorationData","notifyApplicationBeforeRender","currentVisit","notifyApplicationAfterRender","notifyApplicationAfterPageLoad","clickEventIsSignificant","getVisitableLinkForNode","getVisitableLocationForLink","applicationAllowsFollowingLinkToLocation","getActionForLink","notifyApplicationAfterClickingLinkToLocation","notifyApplicationBeforeVisitingLocation","notifyApplicationAfterVisitingLocation","timing","createVisit","isContentEditable","nodeIsVisitable","currentScript","webpackContext","req","webpackContextResolve","setCount","setAllCheckboxes","checkboxes","checkbox","hasCountTarget","selectedCheckboxes","countTarget","sourceTarget","dependentTargets","sourceCheckedTargets","dataset","showIf","sourceSelectedTargets","includes","sourceValueTargets","currentTarget","fieldTarget","displayTarget","outputTarget","$simplemde","markdownTarget","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","fullScreenRestore","setFullscreen","setNormal","clearPlaceholder","setPlaceholder","placeHolder","onCursorActivity","markedSelection","coverRange","CHUNK_SIZE","markedSelectionStyle","addAt","endLine","atEnd","doFold","noFold","ensureFlags","regexp","flags","ignoreCase","global","multiline","regexpFlags","maybeMultiline","searchRegexpForward","lastMatchIn","endMargin","newMatch","searchRegexpBackward","adjustPos","orig","folded","foldFunc","SearchCursor","query","atOccurrence","topString","cutFrom","endString","inside","normalize","findNext","findPrevious","getSearchCursor","urlRE","modeConfig","codeDepth","gfmOverlay","codeBlock","ateSpace","difference","markdownConfig","Typo","aff_loading","xhr_aff","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","setAffData","setup","setWordsData","_parseAFF","rule","ONLYINCOMPOUND","_parseDIC","ruleText","expressionText","character","loadedCallback","extension","dictionaryPath","getURL","__dirname","charset","promise","overrideMimeType","fs","existsSync","readFileSync","numEntries","lineParts","_removeAffixComments","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","lowercaseWord","ruleCodes","COMPOUNDMIN","flag","wordFlags","alphabet","suggest","memoizedLimit","replacementEntry","correctedWord","edits1","words","known_only","_edit","rv","ed1","weighted_corrections","ed1word","sorted_corrections","a_val","b_val","localeCompare","capitalization_scheme","working_limit","correct","_defineProperties","writable","_arrayLikeToArray","arr2","_createForOfIteratorHelperLoose","allowArrayLike","it","minLen","_unsupportedIterableToArray","createCommonjsModule","getDefaults","baseUrl","gfm","headerIds","headerPrefix","langPrefix","mangle","pedantic","renderer","sanitize","sanitizer","silent","smartLists","smartypants","tokenizer","walkTokens","xhtml","changeDefaults","newDefaults","escapeTest","escapeReplace","escapeTestNoEncode","escapeReplaceNoEncode","escapeReplacements","getEscapeReplacement","unescapeTest","unescape","nonWordAndColonTest","originIndependentUrl","baseUrls","justDomain","domain","resolveUrl","rtrim","relativeBase","suffLen","currChar","encode","getRegex","prot","decodeURIComponent","encodeURI","tableRow","cells","escaped","curr","defaults$1","rtrim$1","splitCells$1","_escape","findClosingBracket$1","outputLink","cap","raw","Tokenizer_1","Tokenizer","_proto","newline","lastToken","trimRight","codeBlockStyle","fences","matchIndentToCode","indentToCode","matchIndentInNode","indentCodeCompensation","lang","heading","nptable","blockquote","addBack","loose","istask","ischecked","bull","isordered","isparen","ordered","itemMatch","task","def","lheading","paragraph","escape","inLink","inRawBlock","lastParenIndex","linkLen","_escapes","reflink","links","nolink","maskedSrc","prevChar","endReg","endAst","endUnd","middle","codespan","hasNonSpaceChars","hasSpaceCharsOnBothEnds","startsWith","endsWith","br","autolink","prevCapZero","_backpedal","inlineText","noopTest$1","edit$1","merge$1","_paragraph","_label","_title","_tag","_comment","reflinkSearch","_punctuation","_blockSkip","_overlapSkip","blockSkip","overlapSkip","_scheme","_email","_attribute","_href","_extended_email","defaults$2","block$1","inline$1","Lexer_1","Lexer","lex","Constructor","protoProps","staticProps","blockTokens","errMsg","l2","row","inlineTokens","defaults$3","cleanUrl$1","escape$1","Renderer_1","_code","infostring","_html","slugger","slug","listitem","tablerow","tablecell","_text","TextRenderer_1","TextRenderer","Slugger_1","Slugger","seen","originalSlug","defaults$4","unescape$1","Parser_1","Parser","textRenderer","l3","cell","itemBody","parseInline","merge$2","checkSanitizeDeprecation$1","escape$2","defaults$5","err","pending","_tokens","use","_loop","prevRenderer","_key","_loop2","prevTokenizer","_len2","_key2","_step","_iterator","_step2","_iterator2","_step3","_iterator3","_step4","_iterator4","_cell","lexer","List","valueNames","subjectTarget","messageTarget","get_preview","containerTarget","csrf_token","bodyTarget","credentials","headers","add_link_warnings","linkTargets","add_link_warning","itemTarget","visibilityState","tab_to_activate","activate","navTargets","tabTargets","tabname","switchTarget","set_timezone","matched_timezone","tz_matches","cities","tz","client_timezone","resolvedOptions","timeZone","selectTarget","$behaveEditor","editorTarget","require","logicalName","identifierForContextKey","default","definitionForModuleAndIdentifier","definitionForModuleWithContextAndKey","definitionsFromContext"],"mappings":"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","file":"js/participant-b7681ac6a506af7ce38a.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 = 59);\n","var EventListener =\n/** @class */\nfunction () {\n function EventListener(eventTarget, eventName, eventOptions) {\n this.eventTarget = eventTarget;\n this.eventName = eventName;\n this.eventOptions = eventOptions;\n this.unorderedBindings = new Set();\n }\n\n EventListener.prototype.connect = function () {\n this.eventTarget.addEventListener(this.eventName, this, this.eventOptions);\n };\n\n EventListener.prototype.disconnect = function () {\n this.eventTarget.removeEventListener(this.eventName, this, this.eventOptions);\n }; // Binding observer delegate\n\n /** @hidden */\n\n\n EventListener.prototype.bindingConnected = function (binding) {\n this.unorderedBindings.add(binding);\n };\n /** @hidden */\n\n\n EventListener.prototype.bindingDisconnected = function (binding) {\n this.unorderedBindings[\"delete\"](binding);\n };\n\n EventListener.prototype.handleEvent = function (event) {\n var extendedEvent = extendEvent(event);\n\n for (var _i = 0, _a = this.bindings; _i < _a.length; _i++) {\n var binding = _a[_i];\n\n if (extendedEvent.immediatePropagationStopped) {\n break;\n } else {\n binding.handleEvent(extendedEvent);\n }\n }\n };\n\n Object.defineProperty(EventListener.prototype, \"bindings\", {\n get: function get() {\n return Array.from(this.unorderedBindings).sort(function (left, right) {\n var leftIndex = left.index,\n rightIndex = right.index;\n return leftIndex < rightIndex ? -1 : leftIndex > rightIndex ? 1 : 0;\n });\n },\n enumerable: false,\n configurable: true\n });\n return EventListener;\n}();\n\nexport { EventListener };\n\nfunction extendEvent(event) {\n if (\"immediatePropagationStopped\" in event) {\n return event;\n } else {\n var stopImmediatePropagation_1 = event.stopImmediatePropagation;\n return Object.assign(event, {\n immediatePropagationStopped: false,\n stopImmediatePropagation: function stopImmediatePropagation() {\n this.immediatePropagationStopped = true;\n stopImmediatePropagation_1.call(this);\n }\n });\n }\n}","import { EventListener } from \"./event_listener\";\n\nvar Dispatcher =\n/** @class */\nfunction () {\n function Dispatcher(application) {\n this.application = application;\n this.eventListenerMaps = new Map();\n this.started = false;\n }\n\n Dispatcher.prototype.start = function () {\n if (!this.started) {\n this.started = true;\n this.eventListeners.forEach(function (eventListener) {\n return eventListener.connect();\n });\n }\n };\n\n Dispatcher.prototype.stop = function () {\n if (this.started) {\n this.started = false;\n this.eventListeners.forEach(function (eventListener) {\n return eventListener.disconnect();\n });\n }\n };\n\n Object.defineProperty(Dispatcher.prototype, \"eventListeners\", {\n get: function get() {\n return Array.from(this.eventListenerMaps.values()).reduce(function (listeners, map) {\n return listeners.concat(Array.from(map.values()));\n }, []);\n },\n enumerable: false,\n configurable: true\n }); // Binding observer delegate\n\n /** @hidden */\n\n Dispatcher.prototype.bindingConnected = function (binding) {\n this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n };\n /** @hidden */\n\n\n Dispatcher.prototype.bindingDisconnected = function (binding) {\n this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n }; // Error handling\n\n\n Dispatcher.prototype.handleError = function (error, message, detail) {\n if (detail === void 0) {\n detail = {};\n }\n\n this.application.handleError(error, \"Error \" + message, detail);\n };\n\n Dispatcher.prototype.fetchEventListenerForBinding = function (binding) {\n var eventTarget = binding.eventTarget,\n eventName = binding.eventName,\n eventOptions = binding.eventOptions;\n return this.fetchEventListener(eventTarget, eventName, eventOptions);\n };\n\n Dispatcher.prototype.fetchEventListener = function (eventTarget, eventName, eventOptions) {\n var eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n var cacheKey = this.cacheKey(eventName, eventOptions);\n var eventListener = eventListenerMap.get(cacheKey);\n\n if (!eventListener) {\n eventListener = this.createEventListener(eventTarget, eventName, eventOptions);\n eventListenerMap.set(cacheKey, eventListener);\n }\n\n return eventListener;\n };\n\n Dispatcher.prototype.createEventListener = function (eventTarget, eventName, eventOptions) {\n var eventListener = new EventListener(eventTarget, eventName, eventOptions);\n\n if (this.started) {\n eventListener.connect();\n }\n\n return eventListener;\n };\n\n Dispatcher.prototype.fetchEventListenerMapForEventTarget = function (eventTarget) {\n var eventListenerMap = this.eventListenerMaps.get(eventTarget);\n\n if (!eventListenerMap) {\n eventListenerMap = new Map();\n this.eventListenerMaps.set(eventTarget, eventListenerMap);\n }\n\n return eventListenerMap;\n };\n\n Dispatcher.prototype.cacheKey = function (eventName, eventOptions) {\n var parts = [eventName];\n Object.keys(eventOptions).sort().forEach(function (key) {\n parts.push(\"\" + (eventOptions[key] ? \"\" : \"!\") + key);\n });\n return parts.join(\":\");\n };\n\n return Dispatcher;\n}();\n\nexport { Dispatcher };","// capture nos.: 12 23 4 43 1 5 56 7 768 9 98\nvar descriptorPattern = /^((.+?)(@(window|document))?->)?(.+?)(#([^:]+?))(:(.+))?$/;\nexport function parseActionDescriptorString(descriptorString) {\n var source = descriptorString.trim();\n var matches = source.match(descriptorPattern) || [];\n return {\n eventTarget: parseEventTarget(matches[4]),\n eventName: matches[2],\n eventOptions: matches[9] ? parseEventOptions(matches[9]) : {},\n identifier: matches[5],\n methodName: matches[7]\n };\n}\n\nfunction parseEventTarget(eventTargetName) {\n if (eventTargetName == \"window\") {\n return window;\n } else if (eventTargetName == \"document\") {\n return document;\n }\n}\n\nfunction parseEventOptions(eventOptions) {\n return eventOptions.split(\":\").reduce(function (options, token) {\n var _a;\n\n return Object.assign(options, (_a = {}, _a[token.replace(/^!/, \"\")] = !/^!/.test(token), _a));\n }, {});\n}\n\nexport function stringifyEventTarget(eventTarget) {\n if (eventTarget == window) {\n return \"window\";\n } else if (eventTarget == document) {\n return \"document\";\n }\n}","import { parseActionDescriptorString, stringifyEventTarget } from \"./action_descriptor\";\n\nvar Action =\n/** @class */\nfunction () {\n function Action(element, index, descriptor) {\n this.element = element;\n this.index = index;\n this.eventTarget = descriptor.eventTarget || element;\n this.eventName = descriptor.eventName || getDefaultEventNameForElement(element) || error(\"missing event name\");\n this.eventOptions = descriptor.eventOptions || {};\n this.identifier = descriptor.identifier || error(\"missing identifier\");\n this.methodName = descriptor.methodName || error(\"missing method name\");\n }\n\n Action.forToken = function (token) {\n return new this(token.element, token.index, parseActionDescriptorString(token.content));\n };\n\n Action.prototype.toString = function () {\n var eventNameSuffix = this.eventTargetName ? \"@\" + this.eventTargetName : \"\";\n return \"\" + this.eventName + eventNameSuffix + \"->\" + this.identifier + \"#\" + this.methodName;\n };\n\n Object.defineProperty(Action.prototype, \"eventTargetName\", {\n get: function get() {\n return stringifyEventTarget(this.eventTarget);\n },\n enumerable: false,\n configurable: true\n });\n return Action;\n}();\n\nexport { Action };\nvar defaultEventNames = {\n \"a\": function a(e) {\n return \"click\";\n },\n \"button\": function button(e) {\n return \"click\";\n },\n \"form\": function form(e) {\n return \"submit\";\n },\n \"input\": function input(e) {\n return e.getAttribute(\"type\") == \"submit\" ? \"click\" : \"input\";\n },\n \"select\": function select(e) {\n return \"change\";\n },\n \"textarea\": function textarea(e) {\n return \"input\";\n }\n};\nexport function getDefaultEventNameForElement(element) {\n var tagName = element.tagName.toLowerCase();\n\n if (tagName in defaultEventNames) {\n return defaultEventNames[tagName](element);\n }\n}\n\nfunction error(message) {\n throw new Error(message);\n}","var Binding =\n/** @class */\nfunction () {\n function Binding(context, action) {\n this.context = context;\n this.action = action;\n }\n\n Object.defineProperty(Binding.prototype, \"index\", {\n get: function get() {\n return this.action.index;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Binding.prototype, \"eventTarget\", {\n get: function get() {\n return this.action.eventTarget;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Binding.prototype, \"eventOptions\", {\n get: function get() {\n return this.action.eventOptions;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Binding.prototype, \"identifier\", {\n get: function get() {\n return this.context.identifier;\n },\n enumerable: false,\n configurable: true\n });\n\n Binding.prototype.handleEvent = function (event) {\n if (this.willBeInvokedByEvent(event)) {\n this.invokeWithEvent(event);\n }\n };\n\n Object.defineProperty(Binding.prototype, \"eventName\", {\n get: function get() {\n return this.action.eventName;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Binding.prototype, \"method\", {\n get: function get() {\n var method = this.controller[this.methodName];\n\n if (typeof method == \"function\") {\n return method;\n }\n\n throw new Error(\"Action \\\"\" + this.action + \"\\\" references undefined method \\\"\" + this.methodName + \"\\\"\");\n },\n enumerable: false,\n configurable: true\n });\n\n Binding.prototype.invokeWithEvent = function (event) {\n try {\n this.method.call(this.controller, event);\n } catch (error) {\n var _a = this,\n identifier = _a.identifier,\n controller = _a.controller,\n element = _a.element,\n index = _a.index;\n\n var detail = {\n identifier: identifier,\n controller: controller,\n element: element,\n index: index,\n event: event\n };\n this.context.handleError(error, \"invoking action \\\"\" + this.action + \"\\\"\", detail);\n }\n };\n\n Binding.prototype.willBeInvokedByEvent = function (event) {\n var eventTarget = event.target;\n\n if (this.element === eventTarget) {\n return true;\n } else if (eventTarget instanceof Element && this.element.contains(eventTarget)) {\n return this.scope.containsElement(eventTarget);\n } else {\n return this.scope.containsElement(this.action.element);\n }\n };\n\n Object.defineProperty(Binding.prototype, \"controller\", {\n get: function get() {\n return this.context.controller;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Binding.prototype, \"methodName\", {\n get: function get() {\n return this.action.methodName;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Binding.prototype, \"element\", {\n get: function get() {\n return this.scope.element;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Binding.prototype, \"scope\", {\n get: function get() {\n return this.context.scope;\n },\n enumerable: false,\n configurable: true\n });\n return Binding;\n}();\n\nexport { Binding };","var ElementObserver =\n/** @class */\nfunction () {\n function ElementObserver(element, delegate) {\n var _this = this;\n\n this.element = element;\n this.started = false;\n this.delegate = delegate;\n this.elements = new Set();\n this.mutationObserver = new MutationObserver(function (mutations) {\n return _this.processMutations(mutations);\n });\n }\n\n ElementObserver.prototype.start = function () {\n if (!this.started) {\n this.started = true;\n this.mutationObserver.observe(this.element, {\n attributes: true,\n childList: true,\n subtree: true\n });\n this.refresh();\n }\n };\n\n ElementObserver.prototype.stop = function () {\n if (this.started) {\n this.mutationObserver.takeRecords();\n this.mutationObserver.disconnect();\n this.started = false;\n }\n };\n\n ElementObserver.prototype.refresh = function () {\n if (this.started) {\n var matches = new Set(this.matchElementsInTree());\n\n for (var _i = 0, _a = Array.from(this.elements); _i < _a.length; _i++) {\n var element = _a[_i];\n\n if (!matches.has(element)) {\n this.removeElement(element);\n }\n }\n\n for (var _b = 0, _c = Array.from(matches); _b < _c.length; _b++) {\n var element = _c[_b];\n this.addElement(element);\n }\n }\n }; // Mutation record processing\n\n\n ElementObserver.prototype.processMutations = function (mutations) {\n if (this.started) {\n for (var _i = 0, mutations_1 = mutations; _i < mutations_1.length; _i++) {\n var mutation = mutations_1[_i];\n this.processMutation(mutation);\n }\n }\n };\n\n ElementObserver.prototype.processMutation = function (mutation) {\n if (mutation.type == \"attributes\") {\n this.processAttributeChange(mutation.target, mutation.attributeName);\n } else if (mutation.type == \"childList\") {\n this.processRemovedNodes(mutation.removedNodes);\n this.processAddedNodes(mutation.addedNodes);\n }\n };\n\n ElementObserver.prototype.processAttributeChange = function (node, attributeName) {\n var element = node;\n\n if (this.elements.has(element)) {\n if (this.delegate.elementAttributeChanged && this.matchElement(element)) {\n this.delegate.elementAttributeChanged(element, attributeName);\n } else {\n this.removeElement(element);\n }\n } else if (this.matchElement(element)) {\n this.addElement(element);\n }\n };\n\n ElementObserver.prototype.processRemovedNodes = function (nodes) {\n for (var _i = 0, _a = Array.from(nodes); _i < _a.length; _i++) {\n var node = _a[_i];\n var element = this.elementFromNode(node);\n\n if (element) {\n this.processTree(element, this.removeElement);\n }\n }\n };\n\n ElementObserver.prototype.processAddedNodes = function (nodes) {\n for (var _i = 0, _a = Array.from(nodes); _i < _a.length; _i++) {\n var node = _a[_i];\n var element = this.elementFromNode(node);\n\n if (element && this.elementIsActive(element)) {\n this.processTree(element, this.addElement);\n }\n }\n }; // Element matching\n\n\n ElementObserver.prototype.matchElement = function (element) {\n return this.delegate.matchElement(element);\n };\n\n ElementObserver.prototype.matchElementsInTree = function (tree) {\n if (tree === void 0) {\n tree = this.element;\n }\n\n return this.delegate.matchElementsInTree(tree);\n };\n\n ElementObserver.prototype.processTree = function (tree, processor) {\n for (var _i = 0, _a = this.matchElementsInTree(tree); _i < _a.length; _i++) {\n var element = _a[_i];\n processor.call(this, element);\n }\n };\n\n ElementObserver.prototype.elementFromNode = function (node) {\n if (node.nodeType == Node.ELEMENT_NODE) {\n return node;\n }\n };\n\n ElementObserver.prototype.elementIsActive = function (element) {\n if (element.isConnected != this.element.isConnected) {\n return false;\n } else {\n return this.element.contains(element);\n }\n }; // Element tracking\n\n\n ElementObserver.prototype.addElement = function (element) {\n if (!this.elements.has(element)) {\n if (this.elementIsActive(element)) {\n this.elements.add(element);\n\n if (this.delegate.elementMatched) {\n this.delegate.elementMatched(element);\n }\n }\n }\n };\n\n ElementObserver.prototype.removeElement = function (element) {\n if (this.elements.has(element)) {\n this.elements[\"delete\"](element);\n\n if (this.delegate.elementUnmatched) {\n this.delegate.elementUnmatched(element);\n }\n }\n };\n\n return ElementObserver;\n}();\n\nexport { ElementObserver };","import { ElementObserver } from \"./element_observer\";\n\nvar AttributeObserver =\n/** @class */\nfunction () {\n function AttributeObserver(element, attributeName, delegate) {\n this.attributeName = attributeName;\n this.delegate = delegate;\n this.elementObserver = new ElementObserver(element, this);\n }\n\n Object.defineProperty(AttributeObserver.prototype, \"element\", {\n get: function get() {\n return this.elementObserver.element;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(AttributeObserver.prototype, \"selector\", {\n get: function get() {\n return \"[\" + this.attributeName + \"]\";\n },\n enumerable: false,\n configurable: true\n });\n\n AttributeObserver.prototype.start = function () {\n this.elementObserver.start();\n };\n\n AttributeObserver.prototype.stop = function () {\n this.elementObserver.stop();\n };\n\n AttributeObserver.prototype.refresh = function () {\n this.elementObserver.refresh();\n };\n\n Object.defineProperty(AttributeObserver.prototype, \"started\", {\n get: function get() {\n return this.elementObserver.started;\n },\n enumerable: false,\n configurable: true\n }); // Element observer delegate\n\n AttributeObserver.prototype.matchElement = function (element) {\n return element.hasAttribute(this.attributeName);\n };\n\n AttributeObserver.prototype.matchElementsInTree = function (tree) {\n var match = this.matchElement(tree) ? [tree] : [];\n var matches = Array.from(tree.querySelectorAll(this.selector));\n return match.concat(matches);\n };\n\n AttributeObserver.prototype.elementMatched = function (element) {\n if (this.delegate.elementMatchedAttribute) {\n this.delegate.elementMatchedAttribute(element, this.attributeName);\n }\n };\n\n AttributeObserver.prototype.elementUnmatched = function (element) {\n if (this.delegate.elementUnmatchedAttribute) {\n this.delegate.elementUnmatchedAttribute(element, this.attributeName);\n }\n };\n\n AttributeObserver.prototype.elementAttributeChanged = function (element, attributeName) {\n if (this.delegate.elementAttributeValueChanged && this.attributeName == attributeName) {\n this.delegate.elementAttributeValueChanged(element, attributeName);\n }\n };\n\n return AttributeObserver;\n}();\n\nexport { AttributeObserver };","var StringMapObserver =\n/** @class */\nfunction () {\n function StringMapObserver(element, delegate) {\n var _this = this;\n\n this.element = element;\n this.delegate = delegate;\n this.started = false;\n this.stringMap = new Map();\n this.mutationObserver = new MutationObserver(function (mutations) {\n return _this.processMutations(mutations);\n });\n }\n\n StringMapObserver.prototype.start = function () {\n if (!this.started) {\n this.started = true;\n this.mutationObserver.observe(this.element, {\n attributes: true\n });\n this.refresh();\n }\n };\n\n StringMapObserver.prototype.stop = function () {\n if (this.started) {\n this.mutationObserver.takeRecords();\n this.mutationObserver.disconnect();\n this.started = false;\n }\n };\n\n StringMapObserver.prototype.refresh = function () {\n if (this.started) {\n for (var _i = 0, _a = this.knownAttributeNames; _i < _a.length; _i++) {\n var attributeName = _a[_i];\n this.refreshAttribute(attributeName);\n }\n }\n }; // Mutation record processing\n\n\n StringMapObserver.prototype.processMutations = function (mutations) {\n if (this.started) {\n for (var _i = 0, mutations_1 = mutations; _i < mutations_1.length; _i++) {\n var mutation = mutations_1[_i];\n this.processMutation(mutation);\n }\n }\n };\n\n StringMapObserver.prototype.processMutation = function (mutation) {\n var attributeName = mutation.attributeName;\n\n if (attributeName) {\n this.refreshAttribute(attributeName);\n }\n }; // State tracking\n\n\n StringMapObserver.prototype.refreshAttribute = function (attributeName) {\n var key = this.delegate.getStringMapKeyForAttribute(attributeName);\n\n if (key != null) {\n if (!this.stringMap.has(attributeName)) {\n this.stringMapKeyAdded(key, attributeName);\n }\n\n var value = this.element.getAttribute(attributeName);\n\n if (this.stringMap.get(attributeName) != value) {\n this.stringMapValueChanged(value, key);\n }\n\n if (value == null) {\n this.stringMap[\"delete\"](attributeName);\n this.stringMapKeyRemoved(key, attributeName);\n } else {\n this.stringMap.set(attributeName, value);\n }\n }\n };\n\n StringMapObserver.prototype.stringMapKeyAdded = function (key, attributeName) {\n if (this.delegate.stringMapKeyAdded) {\n this.delegate.stringMapKeyAdded(key, attributeName);\n }\n };\n\n StringMapObserver.prototype.stringMapValueChanged = function (value, key) {\n if (this.delegate.stringMapValueChanged) {\n this.delegate.stringMapValueChanged(value, key);\n }\n };\n\n StringMapObserver.prototype.stringMapKeyRemoved = function (key, attributeName) {\n if (this.delegate.stringMapKeyRemoved) {\n this.delegate.stringMapKeyRemoved(key, attributeName);\n }\n };\n\n Object.defineProperty(StringMapObserver.prototype, \"knownAttributeNames\", {\n get: function get() {\n return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)));\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(StringMapObserver.prototype, \"currentAttributeNames\", {\n get: function get() {\n return Array.from(this.element.attributes).map(function (attribute) {\n return attribute.name;\n });\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(StringMapObserver.prototype, \"recordedAttributeNames\", {\n get: function get() {\n return Array.from(this.stringMap.keys());\n },\n enumerable: false,\n configurable: true\n });\n return StringMapObserver;\n}();\n\nexport { StringMapObserver };","export function add(map, key, value) {\n fetch(map, key).add(value);\n}\nexport function del(map, key, value) {\n fetch(map, key)[\"delete\"](value);\n prune(map, key);\n}\nexport function fetch(map, key) {\n var values = map.get(key);\n\n if (!values) {\n values = new Set();\n map.set(key, values);\n }\n\n return values;\n}\nexport function prune(map, key) {\n var values = map.get(key);\n\n if (values != null && values.size == 0) {\n map[\"delete\"](key);\n }\n}","import { add, del } from \"./set_operations\";\n\nvar Multimap =\n/** @class */\nfunction () {\n function Multimap() {\n this.valuesByKey = new Map();\n }\n\n Object.defineProperty(Multimap.prototype, \"values\", {\n get: function get() {\n var sets = Array.from(this.valuesByKey.values());\n return sets.reduce(function (values, set) {\n return values.concat(Array.from(set));\n }, []);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Multimap.prototype, \"size\", {\n get: function get() {\n var sets = Array.from(this.valuesByKey.values());\n return sets.reduce(function (size, set) {\n return size + set.size;\n }, 0);\n },\n enumerable: false,\n configurable: true\n });\n\n Multimap.prototype.add = function (key, value) {\n add(this.valuesByKey, key, value);\n };\n\n Multimap.prototype[\"delete\"] = function (key, value) {\n del(this.valuesByKey, key, value);\n };\n\n Multimap.prototype.has = function (key, value) {\n var values = this.valuesByKey.get(key);\n return values != null && values.has(value);\n };\n\n Multimap.prototype.hasKey = function (key) {\n return this.valuesByKey.has(key);\n };\n\n Multimap.prototype.hasValue = function (value) {\n var sets = Array.from(this.valuesByKey.values());\n return sets.some(function (set) {\n return set.has(value);\n });\n };\n\n Multimap.prototype.getValuesForKey = function (key) {\n var values = this.valuesByKey.get(key);\n return values ? Array.from(values) : [];\n };\n\n Multimap.prototype.getKeysForValue = function (value) {\n return Array.from(this.valuesByKey).filter(function (_a) {\n var key = _a[0],\n values = _a[1];\n return values.has(value);\n }).map(function (_a) {\n var key = _a[0],\n values = _a[1];\n return key;\n });\n };\n\n return Multimap;\n}();\n\nexport { Multimap };","var __extends = this && this.__extends || function () {\n var _extendStatics = function extendStatics(d, b) {\n _extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) {\n if (b.hasOwnProperty(p)) d[p] = b[p];\n }\n };\n\n return _extendStatics(d, b);\n };\n\n return function (d, b) {\n _extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\n\nimport { Multimap } from \"./multimap\";\nimport { add, del } from \"./set_operations\";\n\nvar IndexedMultimap =\n/** @class */\nfunction (_super) {\n __extends(IndexedMultimap, _super);\n\n function IndexedMultimap() {\n var _this = _super.call(this) || this;\n\n _this.keysByValue = new Map();\n return _this;\n }\n\n Object.defineProperty(IndexedMultimap.prototype, \"values\", {\n get: function get() {\n return Array.from(this.keysByValue.keys());\n },\n enumerable: false,\n configurable: true\n });\n\n IndexedMultimap.prototype.add = function (key, value) {\n _super.prototype.add.call(this, key, value);\n\n add(this.keysByValue, value, key);\n };\n\n IndexedMultimap.prototype[\"delete\"] = function (key, value) {\n _super.prototype[\"delete\"].call(this, key, value);\n\n del(this.keysByValue, value, key);\n };\n\n IndexedMultimap.prototype.hasValue = function (value) {\n return this.keysByValue.has(value);\n };\n\n IndexedMultimap.prototype.getKeysForValue = function (value) {\n var set = this.keysByValue.get(value);\n return set ? Array.from(set) : [];\n };\n\n return IndexedMultimap;\n}(Multimap);\n\nexport { IndexedMultimap };","import { AttributeObserver } from \"./attribute_observer\";\nimport { Multimap } from \"@stimulus/multimap\";\n\nvar TokenListObserver =\n/** @class */\nfunction () {\n function TokenListObserver(element, attributeName, delegate) {\n this.attributeObserver = new AttributeObserver(element, attributeName, this);\n this.delegate = delegate;\n this.tokensByElement = new Multimap();\n }\n\n Object.defineProperty(TokenListObserver.prototype, \"started\", {\n get: function get() {\n return this.attributeObserver.started;\n },\n enumerable: false,\n configurable: true\n });\n\n TokenListObserver.prototype.start = function () {\n this.attributeObserver.start();\n };\n\n TokenListObserver.prototype.stop = function () {\n this.attributeObserver.stop();\n };\n\n TokenListObserver.prototype.refresh = function () {\n this.attributeObserver.refresh();\n };\n\n Object.defineProperty(TokenListObserver.prototype, \"element\", {\n get: function get() {\n return this.attributeObserver.element;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(TokenListObserver.prototype, \"attributeName\", {\n get: function get() {\n return this.attributeObserver.attributeName;\n },\n enumerable: false,\n configurable: true\n }); // Attribute observer delegate\n\n TokenListObserver.prototype.elementMatchedAttribute = function (element) {\n this.tokensMatched(this.readTokensForElement(element));\n };\n\n TokenListObserver.prototype.elementAttributeValueChanged = function (element) {\n var _a = this.refreshTokensForElement(element),\n unmatchedTokens = _a[0],\n matchedTokens = _a[1];\n\n this.tokensUnmatched(unmatchedTokens);\n this.tokensMatched(matchedTokens);\n };\n\n TokenListObserver.prototype.elementUnmatchedAttribute = function (element) {\n this.tokensUnmatched(this.tokensByElement.getValuesForKey(element));\n };\n\n TokenListObserver.prototype.tokensMatched = function (tokens) {\n var _this = this;\n\n tokens.forEach(function (token) {\n return _this.tokenMatched(token);\n });\n };\n\n TokenListObserver.prototype.tokensUnmatched = function (tokens) {\n var _this = this;\n\n tokens.forEach(function (token) {\n return _this.tokenUnmatched(token);\n });\n };\n\n TokenListObserver.prototype.tokenMatched = function (token) {\n this.delegate.tokenMatched(token);\n this.tokensByElement.add(token.element, token);\n };\n\n TokenListObserver.prototype.tokenUnmatched = function (token) {\n this.delegate.tokenUnmatched(token);\n this.tokensByElement[\"delete\"](token.element, token);\n };\n\n TokenListObserver.prototype.refreshTokensForElement = function (element) {\n var previousTokens = this.tokensByElement.getValuesForKey(element);\n var currentTokens = this.readTokensForElement(element);\n var firstDifferingIndex = zip(previousTokens, currentTokens).findIndex(function (_a) {\n var previousToken = _a[0],\n currentToken = _a[1];\n return !tokensAreEqual(previousToken, currentToken);\n });\n\n if (firstDifferingIndex == -1) {\n return [[], []];\n } else {\n return [previousTokens.slice(firstDifferingIndex), currentTokens.slice(firstDifferingIndex)];\n }\n };\n\n TokenListObserver.prototype.readTokensForElement = function (element) {\n var attributeName = this.attributeName;\n var tokenString = element.getAttribute(attributeName) || \"\";\n return parseTokenString(tokenString, element, attributeName);\n };\n\n return TokenListObserver;\n}();\n\nexport { TokenListObserver };\n\nfunction parseTokenString(tokenString, element, attributeName) {\n return tokenString.trim().split(/\\s+/).filter(function (content) {\n return content.length;\n }).map(function (content, index) {\n return {\n element: element,\n attributeName: attributeName,\n content: content,\n index: index\n };\n });\n}\n\nfunction zip(left, right) {\n var length = Math.max(left.length, right.length);\n return Array.from({\n length: length\n }, function (_, index) {\n return [left[index], right[index]];\n });\n}\n\nfunction tokensAreEqual(left, right) {\n return left && right && left.index == right.index && left.content == right.content;\n}","import { TokenListObserver } from \"./token_list_observer\";\n\nvar ValueListObserver =\n/** @class */\nfunction () {\n function ValueListObserver(element, attributeName, delegate) {\n this.tokenListObserver = new TokenListObserver(element, attributeName, this);\n this.delegate = delegate;\n this.parseResultsByToken = new WeakMap();\n this.valuesByTokenByElement = new WeakMap();\n }\n\n Object.defineProperty(ValueListObserver.prototype, \"started\", {\n get: function get() {\n return this.tokenListObserver.started;\n },\n enumerable: false,\n configurable: true\n });\n\n ValueListObserver.prototype.start = function () {\n this.tokenListObserver.start();\n };\n\n ValueListObserver.prototype.stop = function () {\n this.tokenListObserver.stop();\n };\n\n ValueListObserver.prototype.refresh = function () {\n this.tokenListObserver.refresh();\n };\n\n Object.defineProperty(ValueListObserver.prototype, \"element\", {\n get: function get() {\n return this.tokenListObserver.element;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ValueListObserver.prototype, \"attributeName\", {\n get: function get() {\n return this.tokenListObserver.attributeName;\n },\n enumerable: false,\n configurable: true\n });\n\n ValueListObserver.prototype.tokenMatched = function (token) {\n var element = token.element;\n var value = this.fetchParseResultForToken(token).value;\n\n if (value) {\n this.fetchValuesByTokenForElement(element).set(token, value);\n this.delegate.elementMatchedValue(element, value);\n }\n };\n\n ValueListObserver.prototype.tokenUnmatched = function (token) {\n var element = token.element;\n var value = this.fetchParseResultForToken(token).value;\n\n if (value) {\n this.fetchValuesByTokenForElement(element)[\"delete\"](token);\n this.delegate.elementUnmatchedValue(element, value);\n }\n };\n\n ValueListObserver.prototype.fetchParseResultForToken = function (token) {\n var parseResult = this.parseResultsByToken.get(token);\n\n if (!parseResult) {\n parseResult = this.parseToken(token);\n this.parseResultsByToken.set(token, parseResult);\n }\n\n return parseResult;\n };\n\n ValueListObserver.prototype.fetchValuesByTokenForElement = function (element) {\n var valuesByToken = this.valuesByTokenByElement.get(element);\n\n if (!valuesByToken) {\n valuesByToken = new Map();\n this.valuesByTokenByElement.set(element, valuesByToken);\n }\n\n return valuesByToken;\n };\n\n ValueListObserver.prototype.parseToken = function (token) {\n try {\n var value = this.delegate.parseValueForToken(token);\n return {\n value: value\n };\n } catch (error) {\n return {\n error: error\n };\n }\n };\n\n return ValueListObserver;\n}();\n\nexport { ValueListObserver };","import { Action } from \"./action\";\nimport { Binding } from \"./binding\";\nimport { ValueListObserver } from \"@stimulus/mutation-observers\";\n\nvar BindingObserver =\n/** @class */\nfunction () {\n function BindingObserver(context, delegate) {\n this.context = context;\n this.delegate = delegate;\n this.bindingsByAction = new Map();\n }\n\n BindingObserver.prototype.start = function () {\n if (!this.valueListObserver) {\n this.valueListObserver = new ValueListObserver(this.element, this.actionAttribute, this);\n this.valueListObserver.start();\n }\n };\n\n BindingObserver.prototype.stop = function () {\n if (this.valueListObserver) {\n this.valueListObserver.stop();\n delete this.valueListObserver;\n this.disconnectAllActions();\n }\n };\n\n Object.defineProperty(BindingObserver.prototype, \"element\", {\n get: function get() {\n return this.context.element;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(BindingObserver.prototype, \"identifier\", {\n get: function get() {\n return this.context.identifier;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(BindingObserver.prototype, \"actionAttribute\", {\n get: function get() {\n return this.schema.actionAttribute;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(BindingObserver.prototype, \"schema\", {\n get: function get() {\n return this.context.schema;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(BindingObserver.prototype, \"bindings\", {\n get: function get() {\n return Array.from(this.bindingsByAction.values());\n },\n enumerable: false,\n configurable: true\n });\n\n BindingObserver.prototype.connectAction = function (action) {\n var binding = new Binding(this.context, action);\n this.bindingsByAction.set(action, binding);\n this.delegate.bindingConnected(binding);\n };\n\n BindingObserver.prototype.disconnectAction = function (action) {\n var binding = this.bindingsByAction.get(action);\n\n if (binding) {\n this.bindingsByAction[\"delete\"](action);\n this.delegate.bindingDisconnected(binding);\n }\n };\n\n BindingObserver.prototype.disconnectAllActions = function () {\n var _this = this;\n\n this.bindings.forEach(function (binding) {\n return _this.delegate.bindingDisconnected(binding);\n });\n this.bindingsByAction.clear();\n }; // Value observer delegate\n\n\n BindingObserver.prototype.parseValueForToken = function (token) {\n var action = Action.forToken(token);\n\n if (action.identifier == this.identifier) {\n return action;\n }\n };\n\n BindingObserver.prototype.elementMatchedValue = function (element, action) {\n this.connectAction(action);\n };\n\n BindingObserver.prototype.elementUnmatchedValue = function (element, action) {\n this.disconnectAction(action);\n };\n\n return BindingObserver;\n}();\n\nexport { BindingObserver };","import { StringMapObserver } from \"@stimulus/mutation-observers\";\n\nvar ValueObserver =\n/** @class */\nfunction () {\n function ValueObserver(context, receiver) {\n this.context = context;\n this.receiver = receiver;\n this.stringMapObserver = new StringMapObserver(this.element, this);\n this.valueDescriptorMap = this.controller.valueDescriptorMap;\n this.invokeChangedCallbacksForDefaultValues();\n }\n\n ValueObserver.prototype.start = function () {\n this.stringMapObserver.start();\n };\n\n ValueObserver.prototype.stop = function () {\n this.stringMapObserver.stop();\n };\n\n Object.defineProperty(ValueObserver.prototype, \"element\", {\n get: function get() {\n return this.context.element;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ValueObserver.prototype, \"controller\", {\n get: function get() {\n return this.context.controller;\n },\n enumerable: false,\n configurable: true\n }); // String map observer delegate\n\n ValueObserver.prototype.getStringMapKeyForAttribute = function (attributeName) {\n if (attributeName in this.valueDescriptorMap) {\n return this.valueDescriptorMap[attributeName].name;\n }\n };\n\n ValueObserver.prototype.stringMapValueChanged = function (attributeValue, name) {\n this.invokeChangedCallbackForValue(name);\n };\n\n ValueObserver.prototype.invokeChangedCallbacksForDefaultValues = function () {\n for (var _i = 0, _a = this.valueDescriptors; _i < _a.length; _i++) {\n var _b = _a[_i],\n key = _b.key,\n name_1 = _b.name,\n defaultValue = _b.defaultValue;\n\n if (defaultValue != undefined && !this.controller.data.has(key)) {\n this.invokeChangedCallbackForValue(name_1);\n }\n }\n };\n\n ValueObserver.prototype.invokeChangedCallbackForValue = function (name) {\n var methodName = name + \"Changed\";\n var method = this.receiver[methodName];\n\n if (typeof method == \"function\") {\n var value = this.receiver[name];\n method.call(this.receiver, value);\n }\n };\n\n Object.defineProperty(ValueObserver.prototype, \"valueDescriptors\", {\n get: function get() {\n var valueDescriptorMap = this.valueDescriptorMap;\n return Object.keys(valueDescriptorMap).map(function (key) {\n return valueDescriptorMap[key];\n });\n },\n enumerable: false,\n configurable: true\n });\n return ValueObserver;\n}();\n\nexport { ValueObserver };","import { BindingObserver } from \"./binding_observer\";\nimport { ValueObserver } from \"./value_observer\";\n\nvar Context =\n/** @class */\nfunction () {\n function Context(module, scope) {\n this.module = module;\n this.scope = scope;\n this.controller = new module.controllerConstructor(this);\n this.bindingObserver = new BindingObserver(this, this.dispatcher);\n this.valueObserver = new ValueObserver(this, this.controller);\n\n try {\n this.controller.initialize();\n } catch (error) {\n this.handleError(error, \"initializing controller\");\n }\n }\n\n Context.prototype.connect = function () {\n this.bindingObserver.start();\n this.valueObserver.start();\n\n try {\n this.controller.connect();\n } catch (error) {\n this.handleError(error, \"connecting controller\");\n }\n };\n\n Context.prototype.disconnect = function () {\n try {\n this.controller.disconnect();\n } catch (error) {\n this.handleError(error, \"disconnecting controller\");\n }\n\n this.valueObserver.stop();\n this.bindingObserver.stop();\n };\n\n Object.defineProperty(Context.prototype, \"application\", {\n get: function get() {\n return this.module.application;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Context.prototype, \"identifier\", {\n get: function get() {\n return this.module.identifier;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Context.prototype, \"schema\", {\n get: function get() {\n return this.application.schema;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Context.prototype, \"dispatcher\", {\n get: function get() {\n return this.application.dispatcher;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Context.prototype, \"element\", {\n get: function get() {\n return this.scope.element;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Context.prototype, \"parentElement\", {\n get: function get() {\n return this.element.parentElement;\n },\n enumerable: false,\n configurable: true\n }); // Error handling\n\n Context.prototype.handleError = function (error, message, detail) {\n if (detail === void 0) {\n detail = {};\n }\n\n var _a = this,\n identifier = _a.identifier,\n controller = _a.controller,\n element = _a.element;\n\n detail = Object.assign({\n identifier: identifier,\n controller: controller,\n element: element\n }, detail);\n this.application.handleError(error, \"Error \" + message, detail);\n };\n\n return Context;\n}();\n\nexport { Context };","export function readInheritableStaticArrayValues(constructor, propertyName) {\n var ancestors = getAncestorsForConstructor(constructor);\n return Array.from(ancestors.reduce(function (values, constructor) {\n getOwnStaticArrayValues(constructor, propertyName).forEach(function (name) {\n return values.add(name);\n });\n return values;\n }, new Set()));\n}\nexport function readInheritableStaticObjectPairs(constructor, propertyName) {\n var ancestors = getAncestorsForConstructor(constructor);\n return ancestors.reduce(function (pairs, constructor) {\n pairs.push.apply(pairs, getOwnStaticObjectPairs(constructor, propertyName));\n return pairs;\n }, []);\n}\n\nfunction getAncestorsForConstructor(constructor) {\n var ancestors = [];\n\n while (constructor) {\n ancestors.push(constructor);\n constructor = Object.getPrototypeOf(constructor);\n }\n\n return ancestors.reverse();\n}\n\nfunction getOwnStaticArrayValues(constructor, propertyName) {\n var definition = constructor[propertyName];\n return Array.isArray(definition) ? definition : [];\n}\n\nfunction getOwnStaticObjectPairs(constructor, propertyName) {\n var definition = constructor[propertyName];\n return definition ? Object.keys(definition).map(function (key) {\n return [key, definition[key]];\n }) : [];\n}","var __extends = this && this.__extends || function () {\n var _extendStatics = function extendStatics(d, b) {\n _extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) {\n if (b.hasOwnProperty(p)) d[p] = b[p];\n }\n };\n\n return _extendStatics(d, b);\n };\n\n return function (d, b) {\n _extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\n\nvar __spreadArrays = this && this.__spreadArrays || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) {\n s += arguments[i].length;\n }\n\n for (var r = Array(s), k = 0, i = 0; i < il; i++) {\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) {\n r[k] = a[j];\n }\n }\n\n return r;\n};\n\nimport { readInheritableStaticArrayValues } from \"./inheritable_statics\";\n/** @hidden */\n\nexport function bless(constructor) {\n return shadow(constructor, getBlessedProperties(constructor));\n}\n\nfunction shadow(constructor, properties) {\n var shadowConstructor = extend(constructor);\n var shadowProperties = getShadowProperties(constructor.prototype, properties);\n Object.defineProperties(shadowConstructor.prototype, shadowProperties);\n return shadowConstructor;\n}\n\nfunction getBlessedProperties(constructor) {\n var blessings = readInheritableStaticArrayValues(constructor, \"blessings\");\n return blessings.reduce(function (blessedProperties, blessing) {\n var properties = blessing(constructor);\n\n for (var key in properties) {\n var descriptor = blessedProperties[key] || {};\n blessedProperties[key] = Object.assign(descriptor, properties[key]);\n }\n\n return blessedProperties;\n }, {});\n}\n\nfunction getShadowProperties(prototype, properties) {\n return getOwnKeys(properties).reduce(function (shadowProperties, key) {\n var _a;\n\n var descriptor = getShadowedDescriptor(prototype, properties, key);\n\n if (descriptor) {\n Object.assign(shadowProperties, (_a = {}, _a[key] = descriptor, _a));\n }\n\n return shadowProperties;\n }, {});\n}\n\nfunction getShadowedDescriptor(prototype, properties, key) {\n var shadowingDescriptor = Object.getOwnPropertyDescriptor(prototype, key);\n var shadowedByValue = shadowingDescriptor && \"value\" in shadowingDescriptor;\n\n if (!shadowedByValue) {\n var descriptor = Object.getOwnPropertyDescriptor(properties, key).value;\n\n if (shadowingDescriptor) {\n descriptor.get = shadowingDescriptor.get || descriptor.get;\n descriptor.set = shadowingDescriptor.set || descriptor.set;\n }\n\n return descriptor;\n }\n}\n\nvar getOwnKeys = function () {\n if (typeof Object.getOwnPropertySymbols == \"function\") {\n return function (object) {\n return __spreadArrays(Object.getOwnPropertyNames(object), Object.getOwnPropertySymbols(object));\n };\n } else {\n return Object.getOwnPropertyNames;\n }\n}();\n\nvar extend = function () {\n function extendWithReflect(constructor) {\n function extended() {\n var _newTarget = this && this instanceof extended ? this.constructor : void 0;\n\n return Reflect.construct(constructor, arguments, _newTarget);\n }\n\n extended.prototype = Object.create(constructor.prototype, {\n constructor: {\n value: extended\n }\n });\n Reflect.setPrototypeOf(extended, constructor);\n return extended;\n }\n\n function testReflectExtension() {\n var a = function a() {\n this.a.call(this);\n };\n\n var b = extendWithReflect(a);\n\n b.prototype.a = function () {};\n\n return new b();\n }\n\n try {\n testReflectExtension();\n return extendWithReflect;\n } catch (error) {\n return function (constructor) {\n return (\n /** @class */\n function (_super) {\n __extends(extended, _super);\n\n function extended() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n return extended;\n }(constructor)\n );\n };\n }\n}();","import { Context } from \"./context\";\nimport { blessDefinition } from \"./definition\";\n\nvar Module =\n/** @class */\nfunction () {\n function Module(application, definition) {\n this.application = application;\n this.definition = blessDefinition(definition);\n this.contextsByScope = new WeakMap();\n this.connectedContexts = new Set();\n }\n\n Object.defineProperty(Module.prototype, \"identifier\", {\n get: function get() {\n return this.definition.identifier;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Module.prototype, \"controllerConstructor\", {\n get: function get() {\n return this.definition.controllerConstructor;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Module.prototype, \"contexts\", {\n get: function get() {\n return Array.from(this.connectedContexts);\n },\n enumerable: false,\n configurable: true\n });\n\n Module.prototype.connectContextForScope = function (scope) {\n var context = this.fetchContextForScope(scope);\n this.connectedContexts.add(context);\n context.connect();\n };\n\n Module.prototype.disconnectContextForScope = function (scope) {\n var context = this.contextsByScope.get(scope);\n\n if (context) {\n this.connectedContexts[\"delete\"](context);\n context.disconnect();\n }\n };\n\n Module.prototype.fetchContextForScope = function (scope) {\n var context = this.contextsByScope.get(scope);\n\n if (!context) {\n context = new Context(this, scope);\n this.contextsByScope.set(scope, context);\n }\n\n return context;\n };\n\n return Module;\n}();\n\nexport { Module };","import { bless } from \"./blessing\";\n/** @hidden */\n\nexport function blessDefinition(definition) {\n return {\n identifier: definition.identifier,\n controllerConstructor: bless(definition.controllerConstructor)\n };\n}","var ClassMap =\n/** @class */\nfunction () {\n function ClassMap(scope) {\n this.scope = scope;\n }\n\n ClassMap.prototype.has = function (name) {\n return this.data.has(this.getDataKey(name));\n };\n\n ClassMap.prototype.get = function (name) {\n return this.data.get(this.getDataKey(name));\n };\n\n ClassMap.prototype.getAttributeName = function (name) {\n return this.data.getAttributeNameForKey(this.getDataKey(name));\n };\n\n ClassMap.prototype.getDataKey = function (name) {\n return name + \"-class\";\n };\n\n Object.defineProperty(ClassMap.prototype, \"data\", {\n get: function get() {\n return this.scope.data;\n },\n enumerable: false,\n configurable: true\n });\n return ClassMap;\n}();\n\nexport { ClassMap };","export function camelize(value) {\n return value.replace(/(?:[_-])([a-z0-9])/g, function (_, _char) {\n return _char.toUpperCase();\n });\n}\nexport function capitalize(value) {\n return value.charAt(0).toUpperCase() + value.slice(1);\n}\nexport function dasherize(value) {\n return value.replace(/([A-Z])/g, function (_, _char2) {\n return \"-\" + _char2.toLowerCase();\n });\n}","import { dasherize } from \"./string_helpers\";\n\nvar DataMap =\n/** @class */\nfunction () {\n function DataMap(scope) {\n this.scope = scope;\n }\n\n Object.defineProperty(DataMap.prototype, \"element\", {\n get: function get() {\n return this.scope.element;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(DataMap.prototype, \"identifier\", {\n get: function get() {\n return this.scope.identifier;\n },\n enumerable: false,\n configurable: true\n });\n\n DataMap.prototype.get = function (key) {\n var name = this.getAttributeNameForKey(key);\n return this.element.getAttribute(name);\n };\n\n DataMap.prototype.set = function (key, value) {\n var name = this.getAttributeNameForKey(key);\n this.element.setAttribute(name, value);\n return this.get(key);\n };\n\n DataMap.prototype.has = function (key) {\n var name = this.getAttributeNameForKey(key);\n return this.element.hasAttribute(name);\n };\n\n DataMap.prototype[\"delete\"] = function (key) {\n if (this.has(key)) {\n var name_1 = this.getAttributeNameForKey(key);\n this.element.removeAttribute(name_1);\n return true;\n } else {\n return false;\n }\n };\n\n DataMap.prototype.getAttributeNameForKey = function (key) {\n return \"data-\" + this.identifier + \"-\" + dasherize(key);\n };\n\n return DataMap;\n}();\n\nexport { DataMap };","var Guide =\n/** @class */\nfunction () {\n function Guide(logger) {\n this.warnedKeysByObject = new WeakMap();\n this.logger = logger;\n }\n\n Guide.prototype.warn = function (object, key, message) {\n var warnedKeys = this.warnedKeysByObject.get(object);\n\n if (!warnedKeys) {\n warnedKeys = new Set();\n this.warnedKeysByObject.set(object, warnedKeys);\n }\n\n if (!warnedKeys.has(key)) {\n warnedKeys.add(key);\n this.logger.warn(message, object);\n }\n };\n\n return Guide;\n}();\n\nexport { Guide };","/** @hidden */\nexport function attributeValueContainsToken(attributeName, token) {\n return \"[\" + attributeName + \"~=\\\"\" + token + \"\\\"]\";\n}","var __spreadArrays = this && this.__spreadArrays || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) {\n s += arguments[i].length;\n }\n\n for (var r = Array(s), k = 0, i = 0; i < il; i++) {\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) {\n r[k] = a[j];\n }\n }\n\n return r;\n};\n\nimport { attributeValueContainsToken } from \"./selectors\";\n\nvar TargetSet =\n/** @class */\nfunction () {\n function TargetSet(scope) {\n this.scope = scope;\n }\n\n Object.defineProperty(TargetSet.prototype, \"element\", {\n get: function get() {\n return this.scope.element;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(TargetSet.prototype, \"identifier\", {\n get: function get() {\n return this.scope.identifier;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(TargetSet.prototype, \"schema\", {\n get: function get() {\n return this.scope.schema;\n },\n enumerable: false,\n configurable: true\n });\n\n TargetSet.prototype.has = function (targetName) {\n return this.find(targetName) != null;\n };\n\n TargetSet.prototype.find = function () {\n var _this = this;\n\n var targetNames = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n targetNames[_i] = arguments[_i];\n }\n\n return targetNames.reduce(function (target, targetName) {\n return target || _this.findTarget(targetName) || _this.findLegacyTarget(targetName);\n }, undefined);\n };\n\n TargetSet.prototype.findAll = function () {\n var _this = this;\n\n var targetNames = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n targetNames[_i] = arguments[_i];\n }\n\n return targetNames.reduce(function (targets, targetName) {\n return __spreadArrays(targets, _this.findAllTargets(targetName), _this.findAllLegacyTargets(targetName));\n }, []);\n };\n\n TargetSet.prototype.findTarget = function (targetName) {\n var selector = this.getSelectorForTargetName(targetName);\n return this.scope.findElement(selector);\n };\n\n TargetSet.prototype.findAllTargets = function (targetName) {\n var selector = this.getSelectorForTargetName(targetName);\n return this.scope.findAllElements(selector);\n };\n\n TargetSet.prototype.getSelectorForTargetName = function (targetName) {\n var attributeName = \"data-\" + this.identifier + \"-target\";\n return attributeValueContainsToken(attributeName, targetName);\n };\n\n TargetSet.prototype.findLegacyTarget = function (targetName) {\n var selector = this.getLegacySelectorForTargetName(targetName);\n return this.deprecate(this.scope.findElement(selector), targetName);\n };\n\n TargetSet.prototype.findAllLegacyTargets = function (targetName) {\n var _this = this;\n\n var selector = this.getLegacySelectorForTargetName(targetName);\n return this.scope.findAllElements(selector).map(function (element) {\n return _this.deprecate(element, targetName);\n });\n };\n\n TargetSet.prototype.getLegacySelectorForTargetName = function (targetName) {\n var targetDescriptor = this.identifier + \".\" + targetName;\n return attributeValueContainsToken(this.schema.targetAttribute, targetDescriptor);\n };\n\n TargetSet.prototype.deprecate = function (element, targetName) {\n if (element) {\n var identifier = this.identifier;\n var attributeName = this.schema.targetAttribute;\n this.guide.warn(element, \"target:\" + targetName, \"Please replace \" + attributeName + \"=\\\"\" + identifier + \".\" + targetName + \"\\\" with data-\" + identifier + \"-target=\\\"\" + targetName + \"\\\". \" + (\"The \" + attributeName + \" attribute is deprecated and will be removed in a future version of Stimulus.\"));\n }\n\n return element;\n };\n\n Object.defineProperty(TargetSet.prototype, \"guide\", {\n get: function get() {\n return this.scope.guide;\n },\n enumerable: false,\n configurable: true\n });\n return TargetSet;\n}();\n\nexport { TargetSet };","var __spreadArrays = this && this.__spreadArrays || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) {\n s += arguments[i].length;\n }\n\n for (var r = Array(s), k = 0, i = 0; i < il; i++) {\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) {\n r[k] = a[j];\n }\n }\n\n return r;\n};\n\nimport { ClassMap } from \"./class_map\";\nimport { DataMap } from \"./data_map\";\nimport { Guide } from \"./guide\";\nimport { attributeValueContainsToken } from \"./selectors\";\nimport { TargetSet } from \"./target_set\";\n\nvar Scope =\n/** @class */\nfunction () {\n function Scope(schema, element, identifier, logger) {\n var _this = this;\n\n this.targets = new TargetSet(this);\n this.classes = new ClassMap(this);\n this.data = new DataMap(this);\n\n this.containsElement = function (element) {\n return element.closest(_this.controllerSelector) === _this.element;\n };\n\n this.schema = schema;\n this.element = element;\n this.identifier = identifier;\n this.guide = new Guide(logger);\n }\n\n Scope.prototype.findElement = function (selector) {\n return this.element.matches(selector) ? this.element : this.queryElements(selector).find(this.containsElement);\n };\n\n Scope.prototype.findAllElements = function (selector) {\n return __spreadArrays(this.element.matches(selector) ? [this.element] : [], this.queryElements(selector).filter(this.containsElement));\n };\n\n Scope.prototype.queryElements = function (selector) {\n return Array.from(this.element.querySelectorAll(selector));\n };\n\n Object.defineProperty(Scope.prototype, \"controllerSelector\", {\n get: function get() {\n return attributeValueContainsToken(this.schema.controllerAttribute, this.identifier);\n },\n enumerable: false,\n configurable: true\n });\n return Scope;\n}();\n\nexport { Scope };","import { ValueListObserver } from \"@stimulus/mutation-observers\";\n\nvar ScopeObserver =\n/** @class */\nfunction () {\n function ScopeObserver(element, schema, delegate) {\n this.element = element;\n this.schema = schema;\n this.delegate = delegate;\n this.valueListObserver = new ValueListObserver(this.element, this.controllerAttribute, this);\n this.scopesByIdentifierByElement = new WeakMap();\n this.scopeReferenceCounts = new WeakMap();\n }\n\n ScopeObserver.prototype.start = function () {\n this.valueListObserver.start();\n };\n\n ScopeObserver.prototype.stop = function () {\n this.valueListObserver.stop();\n };\n\n Object.defineProperty(ScopeObserver.prototype, \"controllerAttribute\", {\n get: function get() {\n return this.schema.controllerAttribute;\n },\n enumerable: false,\n configurable: true\n }); // Value observer delegate\n\n /** @hidden */\n\n ScopeObserver.prototype.parseValueForToken = function (token) {\n var element = token.element,\n identifier = token.content;\n var scopesByIdentifier = this.fetchScopesByIdentifierForElement(element);\n var scope = scopesByIdentifier.get(identifier);\n\n if (!scope) {\n scope = this.delegate.createScopeForElementAndIdentifier(element, identifier);\n scopesByIdentifier.set(identifier, scope);\n }\n\n return scope;\n };\n /** @hidden */\n\n\n ScopeObserver.prototype.elementMatchedValue = function (element, value) {\n var referenceCount = (this.scopeReferenceCounts.get(value) || 0) + 1;\n this.scopeReferenceCounts.set(value, referenceCount);\n\n if (referenceCount == 1) {\n this.delegate.scopeConnected(value);\n }\n };\n /** @hidden */\n\n\n ScopeObserver.prototype.elementUnmatchedValue = function (element, value) {\n var referenceCount = this.scopeReferenceCounts.get(value);\n\n if (referenceCount) {\n this.scopeReferenceCounts.set(value, referenceCount - 1);\n\n if (referenceCount == 1) {\n this.delegate.scopeDisconnected(value);\n }\n }\n };\n\n ScopeObserver.prototype.fetchScopesByIdentifierForElement = function (element) {\n var scopesByIdentifier = this.scopesByIdentifierByElement.get(element);\n\n if (!scopesByIdentifier) {\n scopesByIdentifier = new Map();\n this.scopesByIdentifierByElement.set(element, scopesByIdentifier);\n }\n\n return scopesByIdentifier;\n };\n\n return ScopeObserver;\n}();\n\nexport { ScopeObserver };","import { Module } from \"./module\";\nimport { Multimap } from \"@stimulus/multimap\";\nimport { Scope } from \"./scope\";\nimport { ScopeObserver } from \"./scope_observer\";\n\nvar Router =\n/** @class */\nfunction () {\n function Router(application) {\n this.application = application;\n this.scopeObserver = new ScopeObserver(this.element, this.schema, this);\n this.scopesByIdentifier = new Multimap();\n this.modulesByIdentifier = new Map();\n }\n\n Object.defineProperty(Router.prototype, \"element\", {\n get: function get() {\n return this.application.element;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Router.prototype, \"schema\", {\n get: function get() {\n return this.application.schema;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Router.prototype, \"logger\", {\n get: function get() {\n return this.application.logger;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Router.prototype, \"controllerAttribute\", {\n get: function get() {\n return this.schema.controllerAttribute;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Router.prototype, \"modules\", {\n get: function get() {\n return Array.from(this.modulesByIdentifier.values());\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Router.prototype, \"contexts\", {\n get: function get() {\n return this.modules.reduce(function (contexts, module) {\n return contexts.concat(module.contexts);\n }, []);\n },\n enumerable: false,\n configurable: true\n });\n\n Router.prototype.start = function () {\n this.scopeObserver.start();\n };\n\n Router.prototype.stop = function () {\n this.scopeObserver.stop();\n };\n\n Router.prototype.loadDefinition = function (definition) {\n this.unloadIdentifier(definition.identifier);\n var module = new Module(this.application, definition);\n this.connectModule(module);\n };\n\n Router.prototype.unloadIdentifier = function (identifier) {\n var module = this.modulesByIdentifier.get(identifier);\n\n if (module) {\n this.disconnectModule(module);\n }\n };\n\n Router.prototype.getContextForElementAndIdentifier = function (element, identifier) {\n var module = this.modulesByIdentifier.get(identifier);\n\n if (module) {\n return module.contexts.find(function (context) {\n return context.element == element;\n });\n }\n }; // Error handler delegate\n\n /** @hidden */\n\n\n Router.prototype.handleError = function (error, message, detail) {\n this.application.handleError(error, message, detail);\n }; // Scope observer delegate\n\n /** @hidden */\n\n\n Router.prototype.createScopeForElementAndIdentifier = function (element, identifier) {\n return new Scope(this.schema, element, identifier, this.logger);\n };\n /** @hidden */\n\n\n Router.prototype.scopeConnected = function (scope) {\n this.scopesByIdentifier.add(scope.identifier, scope);\n var module = this.modulesByIdentifier.get(scope.identifier);\n\n if (module) {\n module.connectContextForScope(scope);\n }\n };\n /** @hidden */\n\n\n Router.prototype.scopeDisconnected = function (scope) {\n this.scopesByIdentifier[\"delete\"](scope.identifier, scope);\n var module = this.modulesByIdentifier.get(scope.identifier);\n\n if (module) {\n module.disconnectContextForScope(scope);\n }\n }; // Modules\n\n\n Router.prototype.connectModule = function (module) {\n this.modulesByIdentifier.set(module.identifier, module);\n var scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n scopes.forEach(function (scope) {\n return module.connectContextForScope(scope);\n });\n };\n\n Router.prototype.disconnectModule = function (module) {\n this.modulesByIdentifier[\"delete\"](module.identifier);\n var scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n scopes.forEach(function (scope) {\n return module.disconnectContextForScope(scope);\n });\n };\n\n return Router;\n}();\n\nexport { Router };","export var defaultSchema = {\n controllerAttribute: \"data-controller\",\n actionAttribute: \"data-action\",\n targetAttribute: \"data-target\"\n};","var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function (resolve) {\n resolve(value);\n });\n }\n\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n\nvar __generator = this && this.__generator || function (thisArg, body) {\n var _ = {\n label: 0,\n sent: function sent() {\n if (t[0] & 1) throw t[1];\n return t[1];\n },\n trys: [],\n ops: []\n },\n f,\n y,\n t,\n g;\n return g = {\n next: verb(0),\n \"throw\": verb(1),\n \"return\": verb(2)\n }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function () {\n return this;\n }), g;\n\n function verb(n) {\n return function (v) {\n return step([n, v]);\n };\n }\n\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n\n while (_) {\n try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n\n switch (op[0]) {\n case 0:\n case 1:\n t = op;\n break;\n\n case 4:\n _.label++;\n return {\n value: op[1],\n done: false\n };\n\n case 5:\n _.label++;\n y = op[1];\n op = [0];\n continue;\n\n case 7:\n op = _.ops.pop();\n\n _.trys.pop();\n\n continue;\n\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n\n if (t && _.label < t[2]) {\n _.label = t[2];\n\n _.ops.push(op);\n\n break;\n }\n\n if (t[2]) _.ops.pop();\n\n _.trys.pop();\n\n continue;\n }\n\n op = body.call(thisArg, _);\n } catch (e) {\n op = [6, e];\n y = 0;\n } finally {\n f = t = 0;\n }\n }\n\n if (op[0] & 5) throw op[1];\n return {\n value: op[0] ? op[1] : void 0,\n done: true\n };\n }\n};\n\nvar __spreadArrays = this && this.__spreadArrays || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) {\n s += arguments[i].length;\n }\n\n for (var r = Array(s), k = 0, i = 0; i < il; i++) {\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) {\n r[k] = a[j];\n }\n }\n\n return r;\n};\n\nimport { Dispatcher } from \"./dispatcher\";\nimport { Router } from \"./router\";\nimport { defaultSchema } from \"./schema\";\n\nvar Application =\n/** @class */\nfunction () {\n function Application(element, schema) {\n if (element === void 0) {\n element = document.documentElement;\n }\n\n if (schema === void 0) {\n schema = defaultSchema;\n }\n\n this.logger = console;\n this.element = element;\n this.schema = schema;\n this.dispatcher = new Dispatcher(this);\n this.router = new Router(this);\n }\n\n Application.start = function (element, schema) {\n var application = new Application(element, schema);\n application.start();\n return application;\n };\n\n Application.prototype.start = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n return [4\n /*yield*/\n , domReady()];\n\n case 1:\n _a.sent();\n\n this.dispatcher.start();\n this.router.start();\n return [2\n /*return*/\n ];\n }\n });\n });\n };\n\n Application.prototype.stop = function () {\n this.dispatcher.stop();\n this.router.stop();\n };\n\n Application.prototype.register = function (identifier, controllerConstructor) {\n this.load({\n identifier: identifier,\n controllerConstructor: controllerConstructor\n });\n };\n\n Application.prototype.load = function (head) {\n var _this = this;\n\n var rest = [];\n\n for (var _i = 1; _i < arguments.length; _i++) {\n rest[_i - 1] = arguments[_i];\n }\n\n var definitions = Array.isArray(head) ? head : __spreadArrays([head], rest);\n definitions.forEach(function (definition) {\n return _this.router.loadDefinition(definition);\n });\n };\n\n Application.prototype.unload = function (head) {\n var _this = this;\n\n var rest = [];\n\n for (var _i = 1; _i < arguments.length; _i++) {\n rest[_i - 1] = arguments[_i];\n }\n\n var identifiers = Array.isArray(head) ? head : __spreadArrays([head], rest);\n identifiers.forEach(function (identifier) {\n return _this.router.unloadIdentifier(identifier);\n });\n };\n\n Object.defineProperty(Application.prototype, \"controllers\", {\n // Controllers\n get: function get() {\n return this.router.contexts.map(function (context) {\n return context.controller;\n });\n },\n enumerable: false,\n configurable: true\n });\n\n Application.prototype.getControllerForElementAndIdentifier = function (element, identifier) {\n var context = this.router.getContextForElementAndIdentifier(element, identifier);\n return context ? context.controller : null;\n }; // Error handling\n\n\n Application.prototype.handleError = function (error, message, detail) {\n this.logger.error(\"%s\\n\\n%o\\n\\n%o\", message, error, detail);\n };\n\n return Application;\n}();\n\nexport { Application };\n\nfunction domReady() {\n return new Promise(function (resolve) {\n if (document.readyState == \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", resolve);\n } else {\n resolve();\n }\n });\n}","import { readInheritableStaticArrayValues } from \"./inheritable_statics\";\nimport { capitalize } from \"./string_helpers\";\n/** @hidden */\n\nexport function ClassPropertiesBlessing(constructor) {\n var classes = readInheritableStaticArrayValues(constructor, \"classes\");\n return classes.reduce(function (properties, classDefinition) {\n return Object.assign(properties, propertiesForClassDefinition(classDefinition));\n }, {});\n}\n\nfunction propertiesForClassDefinition(key) {\n var _a;\n\n var name = key + \"Class\";\n return _a = {}, _a[name] = {\n get: function get() {\n var classes = this.classes;\n\n if (classes.has(key)) {\n return classes.get(key);\n } else {\n var attribute = classes.getAttributeName(key);\n throw new Error(\"Missing attribute \\\"\" + attribute + \"\\\"\");\n }\n }\n }, _a[\"has\" + capitalize(name)] = {\n get: function get() {\n return this.classes.has(key);\n }\n }, _a;\n}","import { readInheritableStaticArrayValues } from \"./inheritable_statics\";\nimport { capitalize } from \"./string_helpers\";\n/** @hidden */\n\nexport function TargetPropertiesBlessing(constructor) {\n var targets = readInheritableStaticArrayValues(constructor, \"targets\");\n return targets.reduce(function (properties, targetDefinition) {\n return Object.assign(properties, propertiesForTargetDefinition(targetDefinition));\n }, {});\n}\n\nfunction propertiesForTargetDefinition(name) {\n var _a;\n\n return _a = {}, _a[name + \"Target\"] = {\n get: function get() {\n var target = this.targets.find(name);\n\n if (target) {\n return target;\n } else {\n throw new Error(\"Missing target element \\\"\" + this.identifier + \".\" + name + \"\\\"\");\n }\n }\n }, _a[name + \"Targets\"] = {\n get: function get() {\n return this.targets.findAll(name);\n }\n }, _a[\"has\" + capitalize(name) + \"Target\"] = {\n get: function get() {\n return this.targets.has(name);\n }\n }, _a;\n}","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nimport { readInheritableStaticObjectPairs } from \"./inheritable_statics\";\nimport { camelize, capitalize, dasherize } from \"./string_helpers\";\n/** @hidden */\n\nexport function ValuePropertiesBlessing(constructor) {\n var valueDefinitionPairs = readInheritableStaticObjectPairs(constructor, \"values\");\n var propertyDescriptorMap = {\n valueDescriptorMap: {\n get: function get() {\n var _this = this;\n\n return valueDefinitionPairs.reduce(function (result, valueDefinitionPair) {\n var _a;\n\n var valueDescriptor = parseValueDefinitionPair(valueDefinitionPair);\n\n var attributeName = _this.data.getAttributeNameForKey(valueDescriptor.key);\n\n return Object.assign(result, (_a = {}, _a[attributeName] = valueDescriptor, _a));\n }, {});\n }\n }\n };\n return valueDefinitionPairs.reduce(function (properties, valueDefinitionPair) {\n return Object.assign(properties, propertiesForValueDefinitionPair(valueDefinitionPair));\n }, propertyDescriptorMap);\n}\n/** @hidden */\n\nexport function propertiesForValueDefinitionPair(valueDefinitionPair) {\n var _a;\n\n var definition = parseValueDefinitionPair(valueDefinitionPair);\n var type = definition.type,\n key = definition.key,\n name = definition.name;\n var read = readers[type],\n write = writers[type] || writers[\"default\"];\n return _a = {}, _a[name] = {\n get: function get() {\n var value = this.data.get(key);\n\n if (value !== null) {\n return read(value);\n } else {\n return definition.defaultValue;\n }\n },\n set: function set(value) {\n if (value === undefined) {\n this.data[\"delete\"](key);\n } else {\n this.data.set(key, write(value));\n }\n }\n }, _a[\"has\" + capitalize(name)] = {\n get: function get() {\n return this.data.has(key);\n }\n }, _a;\n}\n\nfunction parseValueDefinitionPair(_a) {\n var token = _a[0],\n typeConstant = _a[1];\n var type = parseValueTypeConstant(typeConstant);\n return valueDescriptorForTokenAndType(token, type);\n}\n\nfunction parseValueTypeConstant(typeConstant) {\n switch (typeConstant) {\n case Array:\n return \"array\";\n\n case Boolean:\n return \"boolean\";\n\n case Number:\n return \"number\";\n\n case Object:\n return \"object\";\n\n case String:\n return \"string\";\n }\n\n throw new Error(\"Unknown value type constant \\\"\" + typeConstant + \"\\\"\");\n}\n\nfunction valueDescriptorForTokenAndType(token, type) {\n var key = dasherize(token) + \"-value\";\n return {\n type: type,\n key: key,\n name: camelize(key),\n\n get defaultValue() {\n return defaultValuesByType[type];\n }\n\n };\n}\n\nvar defaultValuesByType = {\n get array() {\n return [];\n },\n\n \"boolean\": false,\n number: 0,\n\n get object() {\n return {};\n },\n\n string: \"\"\n};\nvar readers = {\n array: function array(value) {\n var array = JSON.parse(value);\n\n if (!Array.isArray(array)) {\n throw new TypeError(\"Expected array\");\n }\n\n return array;\n },\n \"boolean\": function boolean(value) {\n return !(value == \"0\" || value == \"false\");\n },\n number: function number(value) {\n return parseFloat(value);\n },\n object: function object(value) {\n var object = JSON.parse(value);\n\n if (object === null || _typeof(object) != \"object\" || Array.isArray(object)) {\n throw new TypeError(\"Expected object\");\n }\n\n return object;\n },\n string: function string(value) {\n return value;\n }\n};\nvar writers = {\n \"default\": writeString,\n array: writeJSON,\n object: writeJSON\n};\n\nfunction writeJSON(value) {\n return JSON.stringify(value);\n}\n\nfunction writeString(value) {\n return \"\" + value;\n}","import { ClassPropertiesBlessing } from \"./class_properties\";\nimport { TargetPropertiesBlessing } from \"./target_properties\";\nimport { ValuePropertiesBlessing } from \"./value_properties\";\n\nvar Controller =\n/** @class */\nfunction () {\n function Controller(context) {\n this.context = context;\n }\n\n Object.defineProperty(Controller.prototype, \"application\", {\n get: function get() {\n return this.context.application;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Controller.prototype, \"scope\", {\n get: function get() {\n return this.context.scope;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Controller.prototype, \"element\", {\n get: function get() {\n return this.scope.element;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Controller.prototype, \"identifier\", {\n get: function get() {\n return this.scope.identifier;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Controller.prototype, \"targets\", {\n get: function get() {\n return this.scope.targets;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Controller.prototype, \"classes\", {\n get: function get() {\n return this.scope.classes;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Controller.prototype, \"data\", {\n get: function get() {\n return this.scope.data;\n },\n enumerable: false,\n configurable: true\n });\n\n Controller.prototype.initialize = function () {// Override in your subclass to set up initial controller state\n };\n\n Controller.prototype.connect = function () {// Override in your subclass to respond when the controller is connected to the DOM\n };\n\n Controller.prototype.disconnect = function () {// Override in your subclass to respond when the controller is disconnected from the DOM\n };\n\n Controller.blessings = [ClassPropertiesBlessing, TargetPropertiesBlessing, ValuePropertiesBlessing];\n Controller.targets = [];\n Controller.values = {};\n return Controller;\n}();\n\nexport { Controller };","export * from \"@stimulus/core\";","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n// This is CodeMirror (https://codemirror.net), a code editor\n// implemented in JavaScript on top of the browser's DOM.\n//\n// You can find some technical background for some of the code below\n// at http://marijnhaverbeke.nl/blog/#cm-internals .\n(function (global, factory) {\n (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.CodeMirror = factory());\n})(this, function () {\n 'use strict'; // Kludges for bugs and behavior differences that can't be feature\n // detected are enabled based on userAgent etc sniffing.\n\n var userAgent = navigator.userAgent;\n var platform = navigator.platform;\n var gecko = /gecko\\/\\d/i.test(userAgent);\n var ie_upto10 = /MSIE \\d/.test(userAgent);\n var ie_11up = /Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(userAgent);\n var edge = /Edge\\/(\\d+)/.exec(userAgent);\n var ie = ie_upto10 || ie_11up || edge;\n var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : +(edge || ie_11up)[1]);\n var webkit = !edge && /WebKit\\//.test(userAgent);\n var qtwebkit = webkit && /Qt\\/\\d+\\.\\d+/.test(userAgent);\n var chrome = !edge && /Chrome\\//.test(userAgent);\n var presto = /Opera\\//.test(userAgent);\n var safari = /Apple Computer/.test(navigator.vendor);\n var mac_geMountainLion = /Mac OS X 1\\d\\D([8-9]|\\d\\d)\\D/.test(userAgent);\n var phantom = /PhantomJS/.test(userAgent);\n var ios = !edge && /AppleWebKit/.test(userAgent) && /Mobile\\/\\w+/.test(userAgent);\n var android = /Android/.test(userAgent); // This is woefully incomplete. Suggestions for alternative methods welcome.\n\n var mobile = ios || android || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent);\n var mac = ios || /Mac/.test(platform);\n var chromeOS = /\\bCrOS\\b/.test(userAgent);\n var windows = /win/i.test(platform);\n var presto_version = presto && userAgent.match(/Version\\/(\\d*\\.\\d*)/);\n\n if (presto_version) {\n presto_version = Number(presto_version[1]);\n }\n\n if (presto_version && presto_version >= 15) {\n presto = false;\n webkit = true;\n } // Some browsers use the wrong event properties to signal cmd/ctrl on OS X\n\n\n var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11));\n var captureRightClick = gecko || ie && ie_version >= 9;\n\n function classTest(cls) {\n return new RegExp(\"(^|\\\\s)\" + cls + \"(?:$|\\\\s)\\\\s*\");\n }\n\n var rmClass = function rmClass(node, cls) {\n var current = node.className;\n var match = classTest(cls).exec(current);\n\n if (match) {\n var after = current.slice(match.index + match[0].length);\n node.className = current.slice(0, match.index) + (after ? match[1] + after : \"\");\n }\n };\n\n function removeChildren(e) {\n for (var count = e.childNodes.length; count > 0; --count) {\n e.removeChild(e.firstChild);\n }\n\n return e;\n }\n\n function removeChildrenAndAdd(parent, e) {\n return removeChildren(parent).appendChild(e);\n }\n\n function elt(tag, content, className, style) {\n var e = document.createElement(tag);\n\n if (className) {\n e.className = className;\n }\n\n if (style) {\n e.style.cssText = style;\n }\n\n if (typeof content == \"string\") {\n e.appendChild(document.createTextNode(content));\n } else if (content) {\n for (var i = 0; i < content.length; ++i) {\n e.appendChild(content[i]);\n }\n }\n\n return e;\n } // wrapper for elt, which removes the elt from the accessibility tree\n\n\n function eltP(tag, content, className, style) {\n var e = elt(tag, content, className, style);\n e.setAttribute(\"role\", \"presentation\");\n return e;\n }\n\n var range;\n\n if (document.createRange) {\n range = function range(node, start, end, endNode) {\n var r = document.createRange();\n r.setEnd(endNode || node, end);\n r.setStart(node, start);\n return r;\n };\n } else {\n range = function range(node, start, end) {\n var r = document.body.createTextRange();\n\n try {\n r.moveToElementText(node.parentNode);\n } catch (e) {\n return r;\n }\n\n r.collapse(true);\n r.moveEnd(\"character\", end);\n r.moveStart(\"character\", start);\n return r;\n };\n }\n\n function contains(parent, child) {\n if (child.nodeType == 3) // Android browser always returns false when child is a textnode\n {\n child = child.parentNode;\n }\n\n if (parent.contains) {\n return parent.contains(child);\n }\n\n do {\n if (child.nodeType == 11) {\n child = child.host;\n }\n\n if (child == parent) {\n return true;\n }\n } while (child = child.parentNode);\n }\n\n function activeElt() {\n // IE and Edge may throw an \"Unspecified Error\" when accessing document.activeElement.\n // IE < 10 will throw when accessed while the page is loading or in an iframe.\n // IE > 9 and Edge will throw when accessed in an iframe if document.body is unavailable.\n var activeElement;\n\n try {\n activeElement = document.activeElement;\n } catch (e) {\n activeElement = document.body || null;\n }\n\n while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement) {\n activeElement = activeElement.shadowRoot.activeElement;\n }\n\n return activeElement;\n }\n\n function addClass(node, cls) {\n var current = node.className;\n\n if (!classTest(cls).test(current)) {\n node.className += (current ? \" \" : \"\") + cls;\n }\n }\n\n function joinClasses(a, b) {\n var as = a.split(\" \");\n\n for (var i = 0; i < as.length; i++) {\n if (as[i] && !classTest(as[i]).test(b)) {\n b += \" \" + as[i];\n }\n }\n\n return b;\n }\n\n var selectInput = function selectInput(node) {\n node.select();\n };\n\n if (ios) // Mobile Safari apparently has a bug where select() is broken.\n {\n selectInput = function selectInput(node) {\n node.selectionStart = 0;\n node.selectionEnd = node.value.length;\n };\n } else if (ie) // Suppress mysterious IE10 errors\n {\n selectInput = function selectInput(node) {\n try {\n node.select();\n } catch (_e) {}\n };\n }\n\n function bind(f) {\n var args = Array.prototype.slice.call(arguments, 1);\n return function () {\n return f.apply(null, args);\n };\n }\n\n function copyObj(obj, target, overwrite) {\n if (!target) {\n target = {};\n }\n\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop))) {\n target[prop] = obj[prop];\n }\n }\n\n return target;\n } // Counts the column offset in a string, taking tabs into account.\n // Used mostly to find indentation.\n\n\n function countColumn(string, end, tabSize, startIndex, startValue) {\n if (end == null) {\n end = string.search(/[^\\s\\u00a0]/);\n\n if (end == -1) {\n end = string.length;\n }\n }\n\n for (var i = startIndex || 0, n = startValue || 0;;) {\n var nextTab = string.indexOf(\"\\t\", i);\n\n if (nextTab < 0 || nextTab >= end) {\n return n + (end - i);\n }\n\n n += nextTab - i;\n n += tabSize - n % tabSize;\n i = nextTab + 1;\n }\n }\n\n var Delayed = function Delayed() {\n this.id = null;\n this.f = null;\n this.time = 0;\n this.handler = bind(this.onTimeout, this);\n };\n\n Delayed.prototype.onTimeout = function (self) {\n self.id = 0;\n\n if (self.time <= +new Date()) {\n self.f();\n } else {\n setTimeout(self.handler, self.time - +new Date());\n }\n };\n\n Delayed.prototype.set = function (ms, f) {\n this.f = f;\n var time = +new Date() + ms;\n\n if (!this.id || time < this.time) {\n clearTimeout(this.id);\n this.id = setTimeout(this.handler, ms);\n this.time = time;\n }\n };\n\n function indexOf(array, elt) {\n for (var i = 0; i < array.length; ++i) {\n if (array[i] == elt) {\n return i;\n }\n }\n\n return -1;\n } // Number of pixels added to scroller and sizer to hide scrollbar\n\n\n var scrollerGap = 50; // Returned or thrown by various protocols to signal 'I'm not\n // handling this'.\n\n var Pass = {\n toString: function toString() {\n return \"CodeMirror.Pass\";\n }\n }; // Reused option objects for setSelection & friends\n\n var sel_dontScroll = {\n scroll: false\n },\n sel_mouse = {\n origin: \"*mouse\"\n },\n sel_move = {\n origin: \"+move\"\n }; // The inverse of countColumn -- find the offset that corresponds to\n // a particular column.\n\n function findColumn(string, goal, tabSize) {\n for (var pos = 0, col = 0;;) {\n var nextTab = string.indexOf(\"\\t\", pos);\n\n if (nextTab == -1) {\n nextTab = string.length;\n }\n\n var skipped = nextTab - pos;\n\n if (nextTab == string.length || col + skipped >= goal) {\n return pos + Math.min(skipped, goal - col);\n }\n\n col += nextTab - pos;\n col += tabSize - col % tabSize;\n pos = nextTab + 1;\n\n if (col >= goal) {\n return pos;\n }\n }\n }\n\n var spaceStrs = [\"\"];\n\n function spaceStr(n) {\n while (spaceStrs.length <= n) {\n spaceStrs.push(lst(spaceStrs) + \" \");\n }\n\n return spaceStrs[n];\n }\n\n function lst(arr) {\n return arr[arr.length - 1];\n }\n\n function map(array, f) {\n var out = [];\n\n for (var i = 0; i < array.length; i++) {\n out[i] = f(array[i], i);\n }\n\n return out;\n }\n\n function insertSorted(array, value, score) {\n var pos = 0,\n priority = score(value);\n\n while (pos < array.length && score(array[pos]) <= priority) {\n pos++;\n }\n\n array.splice(pos, 0, value);\n }\n\n function nothing() {}\n\n function createObj(base, props) {\n var inst;\n\n if (Object.create) {\n inst = Object.create(base);\n } else {\n nothing.prototype = base;\n inst = new nothing();\n }\n\n if (props) {\n copyObj(props, inst);\n }\n\n return inst;\n }\n\n var nonASCIISingleCaseWordChar = /[\\u00df\\u0587\\u0590-\\u05f4\\u0600-\\u06ff\\u3040-\\u309f\\u30a0-\\u30ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\uac00-\\ud7af]/;\n\n function isWordCharBasic(ch) {\n return /\\w/.test(ch) || ch > \"\\x80\" && (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch));\n }\n\n function isWordChar(ch, helper) {\n if (!helper) {\n return isWordCharBasic(ch);\n }\n\n if (helper.source.indexOf(\"\\\\w\") > -1 && isWordCharBasic(ch)) {\n return true;\n }\n\n return helper.test(ch);\n }\n\n function isEmpty(obj) {\n for (var n in obj) {\n if (obj.hasOwnProperty(n) && obj[n]) {\n return false;\n }\n }\n\n return true;\n } // Extending unicode characters. A series of a non-extending char +\n // any number of extending chars is treated as a single unit as far\n // as editing and measuring is concerned. This is not fully correct,\n // since some scripts/fonts/browsers also treat other configurations\n // of code points as a group.\n\n\n var extendingChars = /[\\u0300-\\u036f\\u0483-\\u0489\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u065e\\u0670\\u06d6-\\u06dc\\u06de-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0900-\\u0902\\u093c\\u0941-\\u0948\\u094d\\u0951-\\u0955\\u0962\\u0963\\u0981\\u09bc\\u09be\\u09c1-\\u09c4\\u09cd\\u09d7\\u09e2\\u09e3\\u0a01\\u0a02\\u0a3c\\u0a41\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a70\\u0a71\\u0a75\\u0a81\\u0a82\\u0abc\\u0ac1-\\u0ac5\\u0ac7\\u0ac8\\u0acd\\u0ae2\\u0ae3\\u0b01\\u0b3c\\u0b3e\\u0b3f\\u0b41-\\u0b44\\u0b4d\\u0b56\\u0b57\\u0b62\\u0b63\\u0b82\\u0bbe\\u0bc0\\u0bcd\\u0bd7\\u0c3e-\\u0c40\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0cbc\\u0cbf\\u0cc2\\u0cc6\\u0ccc\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0d3e\\u0d41-\\u0d44\\u0d4d\\u0d57\\u0d62\\u0d63\\u0dca\\u0dcf\\u0dd2-\\u0dd4\\u0dd6\\u0ddf\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0eb1\\u0eb4-\\u0eb9\\u0ebb\\u0ebc\\u0ec8-\\u0ecd\\u0f18\\u0f19\\u0f35\\u0f37\\u0f39\\u0f71-\\u0f7e\\u0f80-\\u0f84\\u0f86\\u0f87\\u0f90-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102d-\\u1030\\u1032-\\u1037\\u1039\\u103a\\u103d\\u103e\\u1058\\u1059\\u105e-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108d\\u109d\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b7-\\u17bd\\u17c6\\u17c9-\\u17d3\\u17dd\\u180b-\\u180d\\u18a9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193b\\u1a17\\u1a18\\u1a56\\u1a58-\\u1a5e\\u1a60\\u1a62\\u1a65-\\u1a6c\\u1a73-\\u1a7c\\u1a7f\\u1b00-\\u1b03\\u1b34\\u1b36-\\u1b3a\\u1b3c\\u1b42\\u1b6b-\\u1b73\\u1b80\\u1b81\\u1ba2-\\u1ba5\\u1ba8\\u1ba9\\u1c2c-\\u1c33\\u1c36\\u1c37\\u1cd0-\\u1cd2\\u1cd4-\\u1ce0\\u1ce2-\\u1ce8\\u1ced\\u1dc0-\\u1de6\\u1dfd-\\u1dff\\u200c\\u200d\\u20d0-\\u20f0\\u2cef-\\u2cf1\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua66f-\\ua672\\ua67c\\ua67d\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua825\\ua826\\ua8c4\\ua8e0-\\ua8f1\\ua926-\\ua92d\\ua947-\\ua951\\ua980-\\ua982\\ua9b3\\ua9b6-\\ua9b9\\ua9bc\\uaa29-\\uaa2e\\uaa31\\uaa32\\uaa35\\uaa36\\uaa43\\uaa4c\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uabe5\\uabe8\\uabed\\udc00-\\udfff\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe26\\uff9e\\uff9f]/;\n\n function isExtendingChar(ch) {\n return ch.charCodeAt(0) >= 768 && extendingChars.test(ch);\n } // Returns a number from the range [`0`; `str.length`] unless `pos` is outside that range.\n\n\n function skipExtendingChars(str, pos, dir) {\n while ((dir < 0 ? pos > 0 : pos < str.length) && isExtendingChar(str.charAt(pos))) {\n pos += dir;\n }\n\n return pos;\n } // Returns the value from the range [`from`; `to`] that satisfies\n // `pred` and is closest to `from`. Assumes that at least `to`\n // satisfies `pred`. Supports `from` being greater than `to`.\n\n\n function findFirst(pred, from, to) {\n // At any point we are certain `to` satisfies `pred`, don't know\n // whether `from` does.\n var dir = from > to ? -1 : 1;\n\n for (;;) {\n if (from == to) {\n return from;\n }\n\n var midF = (from + to) / 2,\n mid = dir < 0 ? Math.ceil(midF) : Math.floor(midF);\n\n if (mid == from) {\n return pred(mid) ? from : to;\n }\n\n if (pred(mid)) {\n to = mid;\n } else {\n from = mid + dir;\n }\n }\n } // BIDI HELPERS\n\n\n function iterateBidiSections(order, from, to, f) {\n if (!order) {\n return f(from, to, \"ltr\", 0);\n }\n\n var found = false;\n\n for (var i = 0; i < order.length; ++i) {\n var part = order[i];\n\n if (part.from < to && part.to > from || from == to && part.to == from) {\n f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? \"rtl\" : \"ltr\", i);\n found = true;\n }\n }\n\n if (!found) {\n f(from, to, \"ltr\");\n }\n }\n\n var bidiOther = null;\n\n function getBidiPartAt(order, ch, sticky) {\n var found;\n bidiOther = null;\n\n for (var i = 0; i < order.length; ++i) {\n var cur = order[i];\n\n if (cur.from < ch && cur.to > ch) {\n return i;\n }\n\n if (cur.to == ch) {\n if (cur.from != cur.to && sticky == \"before\") {\n found = i;\n } else {\n bidiOther = i;\n }\n }\n\n if (cur.from == ch) {\n if (cur.from != cur.to && sticky != \"before\") {\n found = i;\n } else {\n bidiOther = i;\n }\n }\n }\n\n return found != null ? found : bidiOther;\n } // Bidirectional ordering algorithm\n // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm\n // that this (partially) implements.\n // One-char codes used for character types:\n // L (L): Left-to-Right\n // R (R): Right-to-Left\n // r (AL): Right-to-Left Arabic\n // 1 (EN): European Number\n // + (ES): European Number Separator\n // % (ET): European Number Terminator\n // n (AN): Arabic Number\n // , (CS): Common Number Separator\n // m (NSM): Non-Spacing Mark\n // b (BN): Boundary Neutral\n // s (B): Paragraph Separator\n // t (S): Segment Separator\n // w (WS): Whitespace\n // N (ON): Other Neutrals\n // Returns null if characters are ordered as they appear\n // (left-to-right), or an array of sections ({from, to, level}\n // objects) in the order in which they occur visually.\n\n\n var bidiOrdering = function () {\n // Character types for codepoints 0 to 0xff\n var lowTypes = \"bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN\"; // Character types for codepoints 0x600 to 0x6f9\n\n var arabicTypes = \"nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111\";\n\n function charType(code) {\n if (code <= 0xf7) {\n return lowTypes.charAt(code);\n } else if (0x590 <= code && code <= 0x5f4) {\n return \"R\";\n } else if (0x600 <= code && code <= 0x6f9) {\n return arabicTypes.charAt(code - 0x600);\n } else if (0x6ee <= code && code <= 0x8ac) {\n return \"r\";\n } else if (0x2000 <= code && code <= 0x200b) {\n return \"w\";\n } else if (code == 0x200c) {\n return \"b\";\n } else {\n return \"L\";\n }\n }\n\n var bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/;\n var isNeutral = /[stwN]/,\n isStrong = /[LRr]/,\n countsAsLeft = /[Lb1n]/,\n countsAsNum = /[1n]/;\n\n function BidiSpan(level, from, to) {\n this.level = level;\n this.from = from;\n this.to = to;\n }\n\n return function (str, direction) {\n var outerType = direction == \"ltr\" ? \"L\" : \"R\";\n\n if (str.length == 0 || direction == \"ltr\" && !bidiRE.test(str)) {\n return false;\n }\n\n var len = str.length,\n types = [];\n\n for (var i = 0; i < len; ++i) {\n types.push(charType(str.charCodeAt(i)));\n } // W1. Examine each non-spacing mark (NSM) in the level run, and\n // change the type of the NSM to the type of the previous\n // character. If the NSM is at the start of the level run, it will\n // get the type of sor.\n\n\n for (var i$1 = 0, prev = outerType; i$1 < len; ++i$1) {\n var type = types[i$1];\n\n if (type == \"m\") {\n types[i$1] = prev;\n } else {\n prev = type;\n }\n } // W2. Search backwards from each instance of a European number\n // until the first strong type (R, L, AL, or sor) is found. If an\n // AL is found, change the type of the European number to Arabic\n // number.\n // W3. Change all ALs to R.\n\n\n for (var i$2 = 0, cur = outerType; i$2 < len; ++i$2) {\n var type$1 = types[i$2];\n\n if (type$1 == \"1\" && cur == \"r\") {\n types[i$2] = \"n\";\n } else if (isStrong.test(type$1)) {\n cur = type$1;\n\n if (type$1 == \"r\") {\n types[i$2] = \"R\";\n }\n }\n } // W4. A single European separator between two European numbers\n // changes to a European number. A single common separator between\n // two numbers of the same type changes to that type.\n\n\n for (var i$3 = 1, prev$1 = types[0]; i$3 < len - 1; ++i$3) {\n var type$2 = types[i$3];\n\n if (type$2 == \"+\" && prev$1 == \"1\" && types[i$3 + 1] == \"1\") {\n types[i$3] = \"1\";\n } else if (type$2 == \",\" && prev$1 == types[i$3 + 1] && (prev$1 == \"1\" || prev$1 == \"n\")) {\n types[i$3] = prev$1;\n }\n\n prev$1 = type$2;\n } // W5. A sequence of European terminators adjacent to European\n // numbers changes to all European numbers.\n // W6. Otherwise, separators and terminators change to Other\n // Neutral.\n\n\n for (var i$4 = 0; i$4 < len; ++i$4) {\n var type$3 = types[i$4];\n\n if (type$3 == \",\") {\n types[i$4] = \"N\";\n } else if (type$3 == \"%\") {\n var end = void 0;\n\n for (end = i$4 + 1; end < len && types[end] == \"%\"; ++end) {}\n\n var replace = i$4 && types[i$4 - 1] == \"!\" || end < len && types[end] == \"1\" ? \"1\" : \"N\";\n\n for (var j = i$4; j < end; ++j) {\n types[j] = replace;\n }\n\n i$4 = end - 1;\n }\n } // W7. Search backwards from each instance of a European number\n // until the first strong type (R, L, or sor) is found. If an L is\n // found, then change the type of the European number to L.\n\n\n for (var i$5 = 0, cur$1 = outerType; i$5 < len; ++i$5) {\n var type$4 = types[i$5];\n\n if (cur$1 == \"L\" && type$4 == \"1\") {\n types[i$5] = \"L\";\n } else if (isStrong.test(type$4)) {\n cur$1 = type$4;\n }\n } // N1. A sequence of neutrals takes the direction of the\n // surrounding strong text if the text on both sides has the same\n // direction. European and Arabic numbers act as if they were R in\n // terms of their influence on neutrals. Start-of-level-run (sor)\n // and end-of-level-run (eor) are used at level run boundaries.\n // N2. Any remaining neutrals take the embedding direction.\n\n\n for (var i$6 = 0; i$6 < len; ++i$6) {\n if (isNeutral.test(types[i$6])) {\n var end$1 = void 0;\n\n for (end$1 = i$6 + 1; end$1 < len && isNeutral.test(types[end$1]); ++end$1) {}\n\n var before = (i$6 ? types[i$6 - 1] : outerType) == \"L\";\n var after = (end$1 < len ? types[end$1] : outerType) == \"L\";\n var replace$1 = before == after ? before ? \"L\" : \"R\" : outerType;\n\n for (var j$1 = i$6; j$1 < end$1; ++j$1) {\n types[j$1] = replace$1;\n }\n\n i$6 = end$1 - 1;\n }\n } // Here we depart from the documented algorithm, in order to avoid\n // building up an actual levels array. Since there are only three\n // levels (0, 1, 2) in an implementation that doesn't take\n // explicit embedding into account, we can build up the order on\n // the fly, without following the level-based algorithm.\n\n\n var order = [],\n m;\n\n for (var i$7 = 0; i$7 < len;) {\n if (countsAsLeft.test(types[i$7])) {\n var start = i$7;\n\n for (++i$7; i$7 < len && countsAsLeft.test(types[i$7]); ++i$7) {}\n\n order.push(new BidiSpan(0, start, i$7));\n } else {\n var pos = i$7,\n at = order.length,\n isRTL = direction == \"rtl\" ? 1 : 0;\n\n for (++i$7; i$7 < len && types[i$7] != \"L\"; ++i$7) {}\n\n for (var j$2 = pos; j$2 < i$7;) {\n if (countsAsNum.test(types[j$2])) {\n if (pos < j$2) {\n order.splice(at, 0, new BidiSpan(1, pos, j$2));\n at += isRTL;\n }\n\n var nstart = j$2;\n\n for (++j$2; j$2 < i$7 && countsAsNum.test(types[j$2]); ++j$2) {}\n\n order.splice(at, 0, new BidiSpan(2, nstart, j$2));\n at += isRTL;\n pos = j$2;\n } else {\n ++j$2;\n }\n }\n\n if (pos < i$7) {\n order.splice(at, 0, new BidiSpan(1, pos, i$7));\n }\n }\n }\n\n if (direction == \"ltr\") {\n if (order[0].level == 1 && (m = str.match(/^\\s+/))) {\n order[0].from = m[0].length;\n order.unshift(new BidiSpan(0, 0, m[0].length));\n }\n\n if (lst(order).level == 1 && (m = str.match(/\\s+$/))) {\n lst(order).to -= m[0].length;\n order.push(new BidiSpan(0, len - m[0].length, len));\n }\n }\n\n return direction == \"rtl\" ? order.reverse() : order;\n };\n }(); // Get the bidi ordering for the given line (and cache it). Returns\n // false for lines that are fully left-to-right, and an array of\n // BidiSpan objects otherwise.\n\n\n function getOrder(line, direction) {\n var order = line.order;\n\n if (order == null) {\n order = line.order = bidiOrdering(line.text, direction);\n }\n\n return order;\n } // EVENT HANDLING\n // Lightweight event framework. on/off also work on DOM nodes,\n // registering native DOM handlers.\n\n\n var noHandlers = [];\n\n var on = function on(emitter, type, f) {\n if (emitter.addEventListener) {\n emitter.addEventListener(type, f, false);\n } else if (emitter.attachEvent) {\n emitter.attachEvent(\"on\" + type, f);\n } else {\n var map = emitter._handlers || (emitter._handlers = {});\n map[type] = (map[type] || noHandlers).concat(f);\n }\n };\n\n function getHandlers(emitter, type) {\n return emitter._handlers && emitter._handlers[type] || noHandlers;\n }\n\n function off(emitter, type, f) {\n if (emitter.removeEventListener) {\n emitter.removeEventListener(type, f, false);\n } else if (emitter.detachEvent) {\n emitter.detachEvent(\"on\" + type, f);\n } else {\n var map = emitter._handlers,\n arr = map && map[type];\n\n if (arr) {\n var index = indexOf(arr, f);\n\n if (index > -1) {\n map[type] = arr.slice(0, index).concat(arr.slice(index + 1));\n }\n }\n }\n }\n\n function signal(emitter, type\n /*, values...*/\n ) {\n var handlers = getHandlers(emitter, type);\n\n if (!handlers.length) {\n return;\n }\n\n var args = Array.prototype.slice.call(arguments, 2);\n\n for (var i = 0; i < handlers.length; ++i) {\n handlers[i].apply(null, args);\n }\n } // The DOM events that CodeMirror handles can be overridden by\n // registering a (non-DOM) handler on the editor for the event name,\n // and preventDefault-ing the event in that handler.\n\n\n function signalDOMEvent(cm, e, override) {\n if (typeof e == \"string\") {\n e = {\n type: e,\n preventDefault: function preventDefault() {\n this.defaultPrevented = true;\n }\n };\n }\n\n signal(cm, override || e.type, cm, e);\n return e_defaultPrevented(e) || e.codemirrorIgnore;\n }\n\n function signalCursorActivity(cm) {\n var arr = cm._handlers && cm._handlers.cursorActivity;\n\n if (!arr) {\n return;\n }\n\n var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []);\n\n for (var i = 0; i < arr.length; ++i) {\n if (indexOf(set, arr[i]) == -1) {\n set.push(arr[i]);\n }\n }\n }\n\n function hasHandler(emitter, type) {\n return getHandlers(emitter, type).length > 0;\n } // Add on and off methods to a constructor's prototype, to make\n // registering events on such objects more convenient.\n\n\n function eventMixin(ctor) {\n ctor.prototype.on = function (type, f) {\n on(this, type, f);\n };\n\n ctor.prototype.off = function (type, f) {\n off(this, type, f);\n };\n } // Due to the fact that we still support jurassic IE versions, some\n // compatibility wrappers are needed.\n\n\n function e_preventDefault(e) {\n if (e.preventDefault) {\n e.preventDefault();\n } else {\n e.returnValue = false;\n }\n }\n\n function e_stopPropagation(e) {\n if (e.stopPropagation) {\n e.stopPropagation();\n } else {\n e.cancelBubble = true;\n }\n }\n\n function e_defaultPrevented(e) {\n return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false;\n }\n\n function e_stop(e) {\n e_preventDefault(e);\n e_stopPropagation(e);\n }\n\n function e_target(e) {\n return e.target || e.srcElement;\n }\n\n function e_button(e) {\n var b = e.which;\n\n if (b == null) {\n if (e.button & 1) {\n b = 1;\n } else if (e.button & 2) {\n b = 3;\n } else if (e.button & 4) {\n b = 2;\n }\n }\n\n if (mac && e.ctrlKey && b == 1) {\n b = 3;\n }\n\n return b;\n } // Detect drag-and-drop\n\n\n var dragAndDrop = function () {\n // There is *some* kind of drag-and-drop support in IE6-8, but I\n // couldn't get it to work yet.\n if (ie && ie_version < 9) {\n return false;\n }\n\n var div = elt('div');\n return \"draggable\" in div || \"dragDrop\" in div;\n }();\n\n var zwspSupported;\n\n function zeroWidthElement(measure) {\n if (zwspSupported == null) {\n var test = elt(\"span\", \"\\u200B\");\n removeChildrenAndAdd(measure, elt(\"span\", [test, document.createTextNode(\"x\")]));\n\n if (measure.firstChild.offsetHeight != 0) {\n zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8);\n }\n }\n\n var node = zwspSupported ? elt(\"span\", \"\\u200B\") : elt(\"span\", \"\\xA0\", null, \"display: inline-block; width: 1px; margin-right: -1px\");\n node.setAttribute(\"cm-text\", \"\");\n return node;\n } // Feature-detect IE's crummy client rect reporting for bidi text\n\n\n var badBidiRects;\n\n function hasBadBidiRects(measure) {\n if (badBidiRects != null) {\n return badBidiRects;\n }\n\n var txt = removeChildrenAndAdd(measure, document.createTextNode(\"A\\u062EA\"));\n var r0 = range(txt, 0, 1).getBoundingClientRect();\n var r1 = range(txt, 1, 2).getBoundingClientRect();\n removeChildren(measure);\n\n if (!r0 || r0.left == r0.right) {\n return false;\n } // Safari returns null in some cases (#2780)\n\n\n return badBidiRects = r1.right - r0.right < 3;\n } // See if \"\".split is the broken IE version, if so, provide an\n // alternative way to split lines.\n\n\n var splitLinesAuto = \"\\n\\nb\".split(/\\n/).length != 3 ? function (string) {\n var pos = 0,\n result = [],\n l = string.length;\n\n while (pos <= l) {\n var nl = string.indexOf(\"\\n\", pos);\n\n if (nl == -1) {\n nl = string.length;\n }\n\n var line = string.slice(pos, string.charAt(nl - 1) == \"\\r\" ? nl - 1 : nl);\n var rt = line.indexOf(\"\\r\");\n\n if (rt != -1) {\n result.push(line.slice(0, rt));\n pos += rt + 1;\n } else {\n result.push(line);\n pos = nl + 1;\n }\n }\n\n return result;\n } : function (string) {\n return string.split(/\\r\\n?|\\n/);\n };\n var hasSelection = window.getSelection ? function (te) {\n try {\n return te.selectionStart != te.selectionEnd;\n } catch (e) {\n return false;\n }\n } : function (te) {\n var range;\n\n try {\n range = te.ownerDocument.selection.createRange();\n } catch (e) {}\n\n if (!range || range.parentElement() != te) {\n return false;\n }\n\n return range.compareEndPoints(\"StartToEnd\", range) != 0;\n };\n\n var hasCopyEvent = function () {\n var e = elt(\"div\");\n\n if (\"oncopy\" in e) {\n return true;\n }\n\n e.setAttribute(\"oncopy\", \"return;\");\n return typeof e.oncopy == \"function\";\n }();\n\n var badZoomedRects = null;\n\n function hasBadZoomedRects(measure) {\n if (badZoomedRects != null) {\n return badZoomedRects;\n }\n\n var node = removeChildrenAndAdd(measure, elt(\"span\", \"x\"));\n var normal = node.getBoundingClientRect();\n var fromRange = range(node, 0, 1).getBoundingClientRect();\n return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1;\n } // Known modes, by name and by MIME\n\n\n var modes = {},\n mimeModes = {}; // Extra arguments are stored as the mode's dependencies, which is\n // used by (legacy) mechanisms like loadmode.js to automatically\n // load a mode. (Preferred mechanism is the require/define calls.)\n\n function defineMode(name, mode) {\n if (arguments.length > 2) {\n mode.dependencies = Array.prototype.slice.call(arguments, 2);\n }\n\n modes[name] = mode;\n }\n\n function defineMIME(mime, spec) {\n mimeModes[mime] = spec;\n } // Given a MIME type, a {name, ...options} config object, or a name\n // string, return a mode config object.\n\n\n function resolveMode(spec) {\n if (typeof spec == \"string\" && mimeModes.hasOwnProperty(spec)) {\n spec = mimeModes[spec];\n } else if (spec && typeof spec.name == \"string\" && mimeModes.hasOwnProperty(spec.name)) {\n var found = mimeModes[spec.name];\n\n if (typeof found == \"string\") {\n found = {\n name: found\n };\n }\n\n spec = createObj(found, spec);\n spec.name = found.name;\n } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+xml$/.test(spec)) {\n return resolveMode(\"application/xml\");\n } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+json$/.test(spec)) {\n return resolveMode(\"application/json\");\n }\n\n if (typeof spec == \"string\") {\n return {\n name: spec\n };\n } else {\n return spec || {\n name: \"null\"\n };\n }\n } // Given a mode spec (anything that resolveMode accepts), find and\n // initialize an actual mode object.\n\n\n function getMode(options, spec) {\n spec = resolveMode(spec);\n var mfactory = modes[spec.name];\n\n if (!mfactory) {\n return getMode(options, \"text/plain\");\n }\n\n var modeObj = mfactory(options, spec);\n\n if (modeExtensions.hasOwnProperty(spec.name)) {\n var exts = modeExtensions[spec.name];\n\n for (var prop in exts) {\n if (!exts.hasOwnProperty(prop)) {\n continue;\n }\n\n if (modeObj.hasOwnProperty(prop)) {\n modeObj[\"_\" + prop] = modeObj[prop];\n }\n\n modeObj[prop] = exts[prop];\n }\n }\n\n modeObj.name = spec.name;\n\n if (spec.helperType) {\n modeObj.helperType = spec.helperType;\n }\n\n if (spec.modeProps) {\n for (var prop$1 in spec.modeProps) {\n modeObj[prop$1] = spec.modeProps[prop$1];\n }\n }\n\n return modeObj;\n } // This can be used to attach properties to mode objects from\n // outside the actual mode definition.\n\n\n var modeExtensions = {};\n\n function extendMode(mode, properties) {\n var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : modeExtensions[mode] = {};\n copyObj(properties, exts);\n }\n\n function copyState(mode, state) {\n if (state === true) {\n return state;\n }\n\n if (mode.copyState) {\n return mode.copyState(state);\n }\n\n var nstate = {};\n\n for (var n in state) {\n var val = state[n];\n\n if (val instanceof Array) {\n val = val.concat([]);\n }\n\n nstate[n] = val;\n }\n\n return nstate;\n } // Given a mode and a state (for that mode), find the inner mode and\n // state at the position that the state refers to.\n\n\n function innerMode(mode, state) {\n var info;\n\n while (mode.innerMode) {\n info = mode.innerMode(state);\n\n if (!info || info.mode == mode) {\n break;\n }\n\n state = info.state;\n mode = info.mode;\n }\n\n return info || {\n mode: mode,\n state: state\n };\n }\n\n function startState(mode, a1, a2) {\n return mode.startState ? mode.startState(a1, a2) : true;\n } // STRING STREAM\n // Fed to the mode parsers, provides helper functions to make\n // parsers more succinct.\n\n\n var StringStream = function StringStream(string, tabSize, lineOracle) {\n this.pos = this.start = 0;\n this.string = string;\n this.tabSize = tabSize || 8;\n this.lastColumnPos = this.lastColumnValue = 0;\n this.lineStart = 0;\n this.lineOracle = lineOracle;\n };\n\n StringStream.prototype.eol = function () {\n return this.pos >= this.string.length;\n };\n\n StringStream.prototype.sol = function () {\n return this.pos == this.lineStart;\n };\n\n StringStream.prototype.peek = function () {\n return this.string.charAt(this.pos) || undefined;\n };\n\n StringStream.prototype.next = function () {\n if (this.pos < this.string.length) {\n return this.string.charAt(this.pos++);\n }\n };\n\n StringStream.prototype.eat = function (match) {\n var ch = this.string.charAt(this.pos);\n var ok;\n\n if (typeof match == \"string\") {\n ok = ch == match;\n } else {\n ok = ch && (match.test ? match.test(ch) : match(ch));\n }\n\n if (ok) {\n ++this.pos;\n return ch;\n }\n };\n\n StringStream.prototype.eatWhile = function (match) {\n var start = this.pos;\n\n while (this.eat(match)) {}\n\n return this.pos > start;\n };\n\n StringStream.prototype.eatSpace = function () {\n var start = this.pos;\n\n while (/[\\s\\u00a0]/.test(this.string.charAt(this.pos))) {\n ++this.pos;\n }\n\n return this.pos > start;\n };\n\n StringStream.prototype.skipToEnd = function () {\n this.pos = this.string.length;\n };\n\n StringStream.prototype.skipTo = function (ch) {\n var found = this.string.indexOf(ch, this.pos);\n\n if (found > -1) {\n this.pos = found;\n return true;\n }\n };\n\n StringStream.prototype.backUp = function (n) {\n this.pos -= n;\n };\n\n StringStream.prototype.column = function () {\n if (this.lastColumnPos < this.start) {\n this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue);\n this.lastColumnPos = this.start;\n }\n\n return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0);\n };\n\n StringStream.prototype.indentation = function () {\n return countColumn(this.string, null, this.tabSize) - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0);\n };\n\n StringStream.prototype.match = function (pattern, consume, caseInsensitive) {\n if (typeof pattern == \"string\") {\n var cased = function cased(str) {\n return caseInsensitive ? str.toLowerCase() : str;\n };\n\n var substr = this.string.substr(this.pos, pattern.length);\n\n if (cased(substr) == cased(pattern)) {\n if (consume !== false) {\n this.pos += pattern.length;\n }\n\n return true;\n }\n } else {\n var match = this.string.slice(this.pos).match(pattern);\n\n if (match && match.index > 0) {\n return null;\n }\n\n if (match && consume !== false) {\n this.pos += match[0].length;\n }\n\n return match;\n }\n };\n\n StringStream.prototype.current = function () {\n return this.string.slice(this.start, this.pos);\n };\n\n StringStream.prototype.hideFirstChars = function (n, inner) {\n this.lineStart += n;\n\n try {\n return inner();\n } finally {\n this.lineStart -= n;\n }\n };\n\n StringStream.prototype.lookAhead = function (n) {\n var oracle = this.lineOracle;\n return oracle && oracle.lookAhead(n);\n };\n\n StringStream.prototype.baseToken = function () {\n var oracle = this.lineOracle;\n return oracle && oracle.baseToken(this.pos);\n }; // Find the line object corresponding to the given line number.\n\n\n function getLine(doc, n) {\n n -= doc.first;\n\n if (n < 0 || n >= doc.size) {\n throw new Error(\"There is no line \" + (n + doc.first) + \" in the document.\");\n }\n\n var chunk = doc;\n\n while (!chunk.lines) {\n for (var i = 0;; ++i) {\n var child = chunk.children[i],\n sz = child.chunkSize();\n\n if (n < sz) {\n chunk = child;\n break;\n }\n\n n -= sz;\n }\n }\n\n return chunk.lines[n];\n } // Get the part of a document between two positions, as an array of\n // strings.\n\n\n function getBetween(doc, start, end) {\n var out = [],\n n = start.line;\n doc.iter(start.line, end.line + 1, function (line) {\n var text = line.text;\n\n if (n == end.line) {\n text = text.slice(0, end.ch);\n }\n\n if (n == start.line) {\n text = text.slice(start.ch);\n }\n\n out.push(text);\n ++n;\n });\n return out;\n } // Get the lines between from and to, as array of strings.\n\n\n function getLines(doc, from, to) {\n var out = [];\n doc.iter(from, to, function (line) {\n out.push(line.text);\n }); // iter aborts when callback returns truthy value\n\n return out;\n } // Update the height of a line, propagating the height change\n // upwards to parent nodes.\n\n\n function updateLineHeight(line, height) {\n var diff = height - line.height;\n\n if (diff) {\n for (var n = line; n; n = n.parent) {\n n.height += diff;\n }\n }\n } // Given a line object, find its line number by walking up through\n // its parent links.\n\n\n function lineNo(line) {\n if (line.parent == null) {\n return null;\n }\n\n var cur = line.parent,\n no = indexOf(cur.lines, line);\n\n for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) {\n for (var i = 0;; ++i) {\n if (chunk.children[i] == cur) {\n break;\n }\n\n no += chunk.children[i].chunkSize();\n }\n }\n\n return no + cur.first;\n } // Find the line at the given vertical position, using the height\n // information in the document tree.\n\n\n function _lineAtHeight(chunk, h) {\n var n = chunk.first;\n\n outer: do {\n for (var i$1 = 0; i$1 < chunk.children.length; ++i$1) {\n var child = chunk.children[i$1],\n ch = child.height;\n\n if (h < ch) {\n chunk = child;\n continue outer;\n }\n\n h -= ch;\n n += child.chunkSize();\n }\n\n return n;\n } while (!chunk.lines);\n\n var i = 0;\n\n for (; i < chunk.lines.length; ++i) {\n var line = chunk.lines[i],\n lh = line.height;\n\n if (h < lh) {\n break;\n }\n\n h -= lh;\n }\n\n return n + i;\n }\n\n function isLine(doc, l) {\n return l >= doc.first && l < doc.first + doc.size;\n }\n\n function lineNumberFor(options, i) {\n return String(options.lineNumberFormatter(i + options.firstLineNumber));\n } // A Pos instance represents a position within the text.\n\n\n function Pos(line, ch, sticky) {\n if (sticky === void 0) sticky = null;\n\n if (!(this instanceof Pos)) {\n return new Pos(line, ch, sticky);\n }\n\n this.line = line;\n this.ch = ch;\n this.sticky = sticky;\n } // Compare two positions, return 0 if they are the same, a negative\n // number when a is less, and a positive number otherwise.\n\n\n function cmp(a, b) {\n return a.line - b.line || a.ch - b.ch;\n }\n\n function equalCursorPos(a, b) {\n return a.sticky == b.sticky && cmp(a, b) == 0;\n }\n\n function copyPos(x) {\n return Pos(x.line, x.ch);\n }\n\n function maxPos(a, b) {\n return cmp(a, b) < 0 ? b : a;\n }\n\n function minPos(a, b) {\n return cmp(a, b) < 0 ? a : b;\n } // Most of the external API clips given positions to make sure they\n // actually exist within the document.\n\n\n function clipLine(doc, n) {\n return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1));\n }\n\n function _clipPos(doc, pos) {\n if (pos.line < doc.first) {\n return Pos(doc.first, 0);\n }\n\n var last = doc.first + doc.size - 1;\n\n if (pos.line > last) {\n return Pos(last, getLine(doc, last).text.length);\n }\n\n return clipToLen(pos, getLine(doc, pos.line).text.length);\n }\n\n function clipToLen(pos, linelen) {\n var ch = pos.ch;\n\n if (ch == null || ch > linelen) {\n return Pos(pos.line, linelen);\n } else if (ch < 0) {\n return Pos(pos.line, 0);\n } else {\n return pos;\n }\n }\n\n function clipPosArray(doc, array) {\n var out = [];\n\n for (var i = 0; i < array.length; i++) {\n out[i] = _clipPos(doc, array[i]);\n }\n\n return out;\n }\n\n var SavedContext = function SavedContext(state, lookAhead) {\n this.state = state;\n this.lookAhead = lookAhead;\n };\n\n var Context = function Context(doc, state, line, lookAhead) {\n this.state = state;\n this.doc = doc;\n this.line = line;\n this.maxLookAhead = lookAhead || 0;\n this.baseTokens = null;\n this.baseTokenPos = 1;\n };\n\n Context.prototype.lookAhead = function (n) {\n var line = this.doc.getLine(this.line + n);\n\n if (line != null && n > this.maxLookAhead) {\n this.maxLookAhead = n;\n }\n\n return line;\n };\n\n Context.prototype.baseToken = function (n) {\n if (!this.baseTokens) {\n return null;\n }\n\n while (this.baseTokens[this.baseTokenPos] <= n) {\n this.baseTokenPos += 2;\n }\n\n var type = this.baseTokens[this.baseTokenPos + 1];\n return {\n type: type && type.replace(/( |^)overlay .*/, \"\"),\n size: this.baseTokens[this.baseTokenPos] - n\n };\n };\n\n Context.prototype.nextLine = function () {\n this.line++;\n\n if (this.maxLookAhead > 0) {\n this.maxLookAhead--;\n }\n };\n\n Context.fromSaved = function (doc, saved, line) {\n if (saved instanceof SavedContext) {\n return new Context(doc, copyState(doc.mode, saved.state), line, saved.lookAhead);\n } else {\n return new Context(doc, copyState(doc.mode, saved), line);\n }\n };\n\n Context.prototype.save = function (copy) {\n var state = copy !== false ? copyState(this.doc.mode, this.state) : this.state;\n return this.maxLookAhead > 0 ? new SavedContext(state, this.maxLookAhead) : state;\n }; // Compute a style array (an array starting with a mode generation\n // -- for invalidation -- followed by pairs of end positions and\n // style strings), which is used to highlight the tokens on the\n // line.\n\n\n function highlightLine(cm, line, context, forceToEnd) {\n // A styles array always starts with a number identifying the\n // mode/overlays that it is based on (for easy invalidation).\n var st = [cm.state.modeGen],\n lineClasses = {}; // Compute the base array of styles\n\n runMode(cm, line.text, cm.doc.mode, context, function (end, style) {\n return st.push(end, style);\n }, lineClasses, forceToEnd);\n var state = context.state; // Run overlays, adjust style array.\n\n var loop = function loop(o) {\n context.baseTokens = st;\n var overlay = cm.state.overlays[o],\n i = 1,\n at = 0;\n context.state = true;\n runMode(cm, line.text, overlay.mode, context, function (end, style) {\n var start = i; // Ensure there's a token end at the current position, and that i points at it\n\n while (at < end) {\n var i_end = st[i];\n\n if (i_end > end) {\n st.splice(i, 1, end, st[i + 1], i_end);\n }\n\n i += 2;\n at = Math.min(end, i_end);\n }\n\n if (!style) {\n return;\n }\n\n if (overlay.opaque) {\n st.splice(start, i - start, end, \"overlay \" + style);\n i = start + 2;\n } else {\n for (; start < i; start += 2) {\n var cur = st[start + 1];\n st[start + 1] = (cur ? cur + \" \" : \"\") + \"overlay \" + style;\n }\n }\n }, lineClasses);\n context.state = state;\n context.baseTokens = null;\n context.baseTokenPos = 1;\n };\n\n for (var o = 0; o < cm.state.overlays.length; ++o) {\n loop(o);\n }\n\n return {\n styles: st,\n classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null\n };\n }\n\n function getLineStyles(cm, line, updateFrontier) {\n if (!line.styles || line.styles[0] != cm.state.modeGen) {\n var context = getContextBefore(cm, lineNo(line));\n var resetState = line.text.length > cm.options.maxHighlightLength && copyState(cm.doc.mode, context.state);\n var result = highlightLine(cm, line, context);\n\n if (resetState) {\n context.state = resetState;\n }\n\n line.stateAfter = context.save(!resetState);\n line.styles = result.styles;\n\n if (result.classes) {\n line.styleClasses = result.classes;\n } else if (line.styleClasses) {\n line.styleClasses = null;\n }\n\n if (updateFrontier === cm.doc.highlightFrontier) {\n cm.doc.modeFrontier = Math.max(cm.doc.modeFrontier, ++cm.doc.highlightFrontier);\n }\n }\n\n return line.styles;\n }\n\n function getContextBefore(cm, n, precise) {\n var doc = cm.doc,\n display = cm.display;\n\n if (!doc.mode.startState) {\n return new Context(doc, true, n);\n }\n\n var start = findStartLine(cm, n, precise);\n var saved = start > doc.first && getLine(doc, start - 1).stateAfter;\n var context = saved ? Context.fromSaved(doc, saved, start) : new Context(doc, startState(doc.mode), start);\n doc.iter(start, n, function (line) {\n processLine(cm, line.text, context);\n var pos = context.line;\n line.stateAfter = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo ? context.save() : null;\n context.nextLine();\n });\n\n if (precise) {\n doc.modeFrontier = context.line;\n }\n\n return context;\n } // Lightweight form of highlight -- proceed over this line and\n // update state, but don't save a style array. Used for lines that\n // aren't currently visible.\n\n\n function processLine(cm, text, context, startAt) {\n var mode = cm.doc.mode;\n var stream = new StringStream(text, cm.options.tabSize, context);\n stream.start = stream.pos = startAt || 0;\n\n if (text == \"\") {\n callBlankLine(mode, context.state);\n }\n\n while (!stream.eol()) {\n readToken(mode, stream, context.state);\n stream.start = stream.pos;\n }\n }\n\n function callBlankLine(mode, state) {\n if (mode.blankLine) {\n return mode.blankLine(state);\n }\n\n if (!mode.innerMode) {\n return;\n }\n\n var inner = innerMode(mode, state);\n\n if (inner.mode.blankLine) {\n return inner.mode.blankLine(inner.state);\n }\n }\n\n function readToken(mode, stream, state, inner) {\n for (var i = 0; i < 10; i++) {\n if (inner) {\n inner[0] = innerMode(mode, state).mode;\n }\n\n var style = mode.token(stream, state);\n\n if (stream.pos > stream.start) {\n return style;\n }\n }\n\n throw new Error(\"Mode \" + mode.name + \" failed to advance stream.\");\n }\n\n var Token = function Token(stream, type, state) {\n this.start = stream.start;\n this.end = stream.pos;\n this.string = stream.current();\n this.type = type || null;\n this.state = state;\n }; // Utility for getTokenAt and getLineTokens\n\n\n function takeToken(cm, pos, precise, asArray) {\n var doc = cm.doc,\n mode = doc.mode,\n style;\n pos = _clipPos(doc, pos);\n var line = getLine(doc, pos.line),\n context = getContextBefore(cm, pos.line, precise);\n var stream = new StringStream(line.text, cm.options.tabSize, context),\n tokens;\n\n if (asArray) {\n tokens = [];\n }\n\n while ((asArray || stream.pos < pos.ch) && !stream.eol()) {\n stream.start = stream.pos;\n style = readToken(mode, stream, context.state);\n\n if (asArray) {\n tokens.push(new Token(stream, style, copyState(doc.mode, context.state)));\n }\n }\n\n return asArray ? tokens : new Token(stream, style, context.state);\n }\n\n function extractLineClasses(type, output) {\n if (type) {\n for (;;) {\n var lineClass = type.match(/(?:^|\\s+)line-(background-)?(\\S+)/);\n\n if (!lineClass) {\n break;\n }\n\n type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length);\n var prop = lineClass[1] ? \"bgClass\" : \"textClass\";\n\n if (output[prop] == null) {\n output[prop] = lineClass[2];\n } else if (!new RegExp(\"(?:^|\\\\s)\" + lineClass[2] + \"(?:$|\\\\s)\").test(output[prop])) {\n output[prop] += \" \" + lineClass[2];\n }\n }\n }\n\n return type;\n } // Run the given mode's parser over a line, calling f for each token.\n\n\n function runMode(cm, text, mode, context, f, lineClasses, forceToEnd) {\n var flattenSpans = mode.flattenSpans;\n\n if (flattenSpans == null) {\n flattenSpans = cm.options.flattenSpans;\n }\n\n var curStart = 0,\n curStyle = null;\n var stream = new StringStream(text, cm.options.tabSize, context),\n style;\n var inner = cm.options.addModeClass && [null];\n\n if (text == \"\") {\n extractLineClasses(callBlankLine(mode, context.state), lineClasses);\n }\n\n while (!stream.eol()) {\n if (stream.pos > cm.options.maxHighlightLength) {\n flattenSpans = false;\n\n if (forceToEnd) {\n processLine(cm, text, context, stream.pos);\n }\n\n stream.pos = text.length;\n style = null;\n } else {\n style = extractLineClasses(readToken(mode, stream, context.state, inner), lineClasses);\n }\n\n if (inner) {\n var mName = inner[0].name;\n\n if (mName) {\n style = \"m-\" + (style ? mName + \" \" + style : mName);\n }\n }\n\n if (!flattenSpans || curStyle != style) {\n while (curStart < stream.start) {\n curStart = Math.min(stream.start, curStart + 5000);\n f(curStart, curStyle);\n }\n\n curStyle = style;\n }\n\n stream.start = stream.pos;\n }\n\n while (curStart < stream.pos) {\n // Webkit seems to refuse to render text nodes longer than 57444\n // characters, and returns inaccurate measurements in nodes\n // starting around 5000 chars.\n var pos = Math.min(stream.pos, curStart + 5000);\n f(pos, curStyle);\n curStart = pos;\n }\n } // Finds the line to start with when starting a parse. Tries to\n // find a line with a stateAfter, so that it can start with a\n // valid state. If that fails, it returns the line with the\n // smallest indentation, which tends to need the least context to\n // parse correctly.\n\n\n function findStartLine(cm, n, precise) {\n var minindent,\n minline,\n doc = cm.doc;\n var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100);\n\n for (var search = n; search > lim; --search) {\n if (search <= doc.first) {\n return doc.first;\n }\n\n var line = getLine(doc, search - 1),\n after = line.stateAfter;\n\n if (after && (!precise || search + (after instanceof SavedContext ? after.lookAhead : 0) <= doc.modeFrontier)) {\n return search;\n }\n\n var indented = countColumn(line.text, null, cm.options.tabSize);\n\n if (minline == null || minindent > indented) {\n minline = search - 1;\n minindent = indented;\n }\n }\n\n return minline;\n }\n\n function retreatFrontier(doc, n) {\n doc.modeFrontier = Math.min(doc.modeFrontier, n);\n\n if (doc.highlightFrontier < n - 10) {\n return;\n }\n\n var start = doc.first;\n\n for (var line = n - 1; line > start; line--) {\n var saved = getLine(doc, line).stateAfter; // change is on 3\n // state on line 1 looked ahead 2 -- so saw 3\n // test 1 + 2 < 3 should cover this\n\n if (saved && (!(saved instanceof SavedContext) || line + saved.lookAhead < n)) {\n start = line + 1;\n break;\n }\n }\n\n doc.highlightFrontier = Math.min(doc.highlightFrontier, start);\n } // Optimize some code when these features are not used.\n\n\n var sawReadOnlySpans = false,\n sawCollapsedSpans = false;\n\n function seeReadOnlySpans() {\n sawReadOnlySpans = true;\n }\n\n function seeCollapsedSpans() {\n sawCollapsedSpans = true;\n } // TEXTMARKER SPANS\n\n\n function MarkedSpan(marker, from, to) {\n this.marker = marker;\n this.from = from;\n this.to = to;\n } // Search an array of spans for a span matching the given marker.\n\n\n function getMarkedSpanFor(spans, marker) {\n if (spans) {\n for (var i = 0; i < spans.length; ++i) {\n var span = spans[i];\n\n if (span.marker == marker) {\n return span;\n }\n }\n }\n } // Remove a span from an array, returning undefined if no spans are\n // left (we don't store arrays for lines without spans).\n\n\n function removeMarkedSpan(spans, span) {\n var r;\n\n for (var i = 0; i < spans.length; ++i) {\n if (spans[i] != span) {\n (r || (r = [])).push(spans[i]);\n }\n }\n\n return r;\n } // Add a span to a line.\n\n\n function addMarkedSpan(line, span) {\n line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span];\n span.marker.attachLine(line);\n } // Used for the algorithm that adjusts markers for a change in the\n // document. These functions cut an array of spans at a given\n // character position, returning an array of remaining chunks (or\n // undefined if nothing remains).\n\n\n function markedSpansBefore(old, startCh, isInsert) {\n var nw;\n\n if (old) {\n for (var i = 0; i < old.length; ++i) {\n var span = old[i],\n marker = span.marker;\n var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh);\n\n if (startsBefore || span.from == startCh && marker.type == \"bookmark\" && (!isInsert || !span.marker.insertLeft)) {\n var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh);\n (nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to));\n }\n }\n }\n\n return nw;\n }\n\n function markedSpansAfter(old, endCh, isInsert) {\n var nw;\n\n if (old) {\n for (var i = 0; i < old.length; ++i) {\n var span = old[i],\n marker = span.marker;\n var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh);\n\n if (endsAfter || span.from == endCh && marker.type == \"bookmark\" && (!isInsert || span.marker.insertLeft)) {\n var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh);\n (nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh, span.to == null ? null : span.to - endCh));\n }\n }\n }\n\n return nw;\n } // Given a change object, compute the new set of marker spans that\n // cover the line in which the change took place. Removes spans\n // entirely within the change, reconnects spans belonging to the\n // same marker that appear on both sides of the change, and cuts off\n // spans partially within the change. Returns an array of span\n // arrays with one element for each line in (after) the change.\n\n\n function stretchSpansOverChange(doc, change) {\n if (change.full) {\n return null;\n }\n\n var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans;\n var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans;\n\n if (!oldFirst && !oldLast) {\n return null;\n }\n\n var startCh = change.from.ch,\n endCh = change.to.ch,\n isInsert = cmp(change.from, change.to) == 0; // Get the spans that 'stick out' on both sides\n\n var first = markedSpansBefore(oldFirst, startCh, isInsert);\n var last = markedSpansAfter(oldLast, endCh, isInsert); // Next, merge those two ends\n\n var sameLine = change.text.length == 1,\n offset = lst(change.text).length + (sameLine ? startCh : 0);\n\n if (first) {\n // Fix up .to properties of first\n for (var i = 0; i < first.length; ++i) {\n var span = first[i];\n\n if (span.to == null) {\n var found = getMarkedSpanFor(last, span.marker);\n\n if (!found) {\n span.to = startCh;\n } else if (sameLine) {\n span.to = found.to == null ? null : found.to + offset;\n }\n }\n }\n }\n\n if (last) {\n // Fix up .from in last (or move them into first in case of sameLine)\n for (var i$1 = 0; i$1 < last.length; ++i$1) {\n var span$1 = last[i$1];\n\n if (span$1.to != null) {\n span$1.to += offset;\n }\n\n if (span$1.from == null) {\n var found$1 = getMarkedSpanFor(first, span$1.marker);\n\n if (!found$1) {\n span$1.from = offset;\n\n if (sameLine) {\n (first || (first = [])).push(span$1);\n }\n }\n } else {\n span$1.from += offset;\n\n if (sameLine) {\n (first || (first = [])).push(span$1);\n }\n }\n }\n } // Make sure we didn't create any zero-length spans\n\n\n if (first) {\n first = clearEmptySpans(first);\n }\n\n if (last && last != first) {\n last = clearEmptySpans(last);\n }\n\n var newMarkers = [first];\n\n if (!sameLine) {\n // Fill gap with whole-line-spans\n var gap = change.text.length - 2,\n gapMarkers;\n\n if (gap > 0 && first) {\n for (var i$2 = 0; i$2 < first.length; ++i$2) {\n if (first[i$2].to == null) {\n (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i$2].marker, null, null));\n }\n }\n }\n\n for (var i$3 = 0; i$3 < gap; ++i$3) {\n newMarkers.push(gapMarkers);\n }\n\n newMarkers.push(last);\n }\n\n return newMarkers;\n } // Remove spans that are empty and don't have a clearWhenEmpty\n // option of false.\n\n\n function clearEmptySpans(spans) {\n for (var i = 0; i < spans.length; ++i) {\n var span = spans[i];\n\n if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false) {\n spans.splice(i--, 1);\n }\n }\n\n if (!spans.length) {\n return null;\n }\n\n return spans;\n } // Used to 'clip' out readOnly ranges when making a change.\n\n\n function removeReadOnlyRanges(doc, from, to) {\n var markers = null;\n doc.iter(from.line, to.line + 1, function (line) {\n if (line.markedSpans) {\n for (var i = 0; i < line.markedSpans.length; ++i) {\n var mark = line.markedSpans[i].marker;\n\n if (mark.readOnly && (!markers || indexOf(markers, mark) == -1)) {\n (markers || (markers = [])).push(mark);\n }\n }\n }\n });\n\n if (!markers) {\n return null;\n }\n\n var parts = [{\n from: from,\n to: to\n }];\n\n for (var i = 0; i < markers.length; ++i) {\n var mk = markers[i],\n m = mk.find(0);\n\n for (var j = 0; j < parts.length; ++j) {\n var p = parts[j];\n\n if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) {\n continue;\n }\n\n var newParts = [j, 1],\n dfrom = cmp(p.from, m.from),\n dto = cmp(p.to, m.to);\n\n if (dfrom < 0 || !mk.inclusiveLeft && !dfrom) {\n newParts.push({\n from: p.from,\n to: m.from\n });\n }\n\n if (dto > 0 || !mk.inclusiveRight && !dto) {\n newParts.push({\n from: m.to,\n to: p.to\n });\n }\n\n parts.splice.apply(parts, newParts);\n j += newParts.length - 3;\n }\n }\n\n return parts;\n } // Connect or disconnect spans from a line.\n\n\n function detachMarkedSpans(line) {\n var spans = line.markedSpans;\n\n if (!spans) {\n return;\n }\n\n for (var i = 0; i < spans.length; ++i) {\n spans[i].marker.detachLine(line);\n }\n\n line.markedSpans = null;\n }\n\n function attachMarkedSpans(line, spans) {\n if (!spans) {\n return;\n }\n\n for (var i = 0; i < spans.length; ++i) {\n spans[i].marker.attachLine(line);\n }\n\n line.markedSpans = spans;\n } // Helpers used when computing which overlapping collapsed span\n // counts as the larger one.\n\n\n function extraLeft(marker) {\n return marker.inclusiveLeft ? -1 : 0;\n }\n\n function extraRight(marker) {\n return marker.inclusiveRight ? 1 : 0;\n } // Returns a number indicating which of two overlapping collapsed\n // spans is larger (and thus includes the other). Falls back to\n // comparing ids when the spans cover exactly the same range.\n\n\n function compareCollapsedMarkers(a, b) {\n var lenDiff = a.lines.length - b.lines.length;\n\n if (lenDiff != 0) {\n return lenDiff;\n }\n\n var aPos = a.find(),\n bPos = b.find();\n var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b);\n\n if (fromCmp) {\n return -fromCmp;\n }\n\n var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b);\n\n if (toCmp) {\n return toCmp;\n }\n\n return b.id - a.id;\n } // Find out whether a line ends or starts in a collapsed span. If\n // so, return the marker for that span.\n\n\n function collapsedSpanAtSide(line, start) {\n var sps = sawCollapsedSpans && line.markedSpans,\n found;\n\n if (sps) {\n for (var sp = void 0, i = 0; i < sps.length; ++i) {\n sp = sps[i];\n\n if (sp.marker.collapsed && (start ? sp.from : sp.to) == null && (!found || compareCollapsedMarkers(found, sp.marker) < 0)) {\n found = sp.marker;\n }\n }\n }\n\n return found;\n }\n\n function collapsedSpanAtStart(line) {\n return collapsedSpanAtSide(line, true);\n }\n\n function collapsedSpanAtEnd(line) {\n return collapsedSpanAtSide(line, false);\n }\n\n function collapsedSpanAround(line, ch) {\n var sps = sawCollapsedSpans && line.markedSpans,\n found;\n\n if (sps) {\n for (var i = 0; i < sps.length; ++i) {\n var sp = sps[i];\n\n if (sp.marker.collapsed && (sp.from == null || sp.from < ch) && (sp.to == null || sp.to > ch) && (!found || compareCollapsedMarkers(found, sp.marker) < 0)) {\n found = sp.marker;\n }\n }\n }\n\n return found;\n } // Test whether there exists a collapsed span that partially\n // overlaps (covers the start or end, but not both) of a new span.\n // Such overlap is not allowed.\n\n\n function conflictingCollapsedRange(doc, lineNo, from, to, marker) {\n var line = getLine(doc, lineNo);\n var sps = sawCollapsedSpans && line.markedSpans;\n\n if (sps) {\n for (var i = 0; i < sps.length; ++i) {\n var sp = sps[i];\n\n if (!sp.marker.collapsed) {\n continue;\n }\n\n var found = sp.marker.find(0);\n var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker);\n var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker);\n\n if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) {\n continue;\n }\n\n if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) || fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0)) {\n return true;\n }\n }\n }\n } // A visual line is a line as drawn on the screen. Folding, for\n // example, can cause multiple logical lines to appear on the same\n // visual line. This finds the start of the visual line that the\n // given line is part of (usually that is the line itself).\n\n\n function visualLine(line) {\n var merged;\n\n while (merged = collapsedSpanAtStart(line)) {\n line = merged.find(-1, true).line;\n }\n\n return line;\n }\n\n function visualLineEnd(line) {\n var merged;\n\n while (merged = collapsedSpanAtEnd(line)) {\n line = merged.find(1, true).line;\n }\n\n return line;\n } // Returns an array of logical lines that continue the visual line\n // started by the argument, or undefined if there are no such lines.\n\n\n function visualLineContinued(line) {\n var merged, lines;\n\n while (merged = collapsedSpanAtEnd(line)) {\n line = merged.find(1, true).line;\n (lines || (lines = [])).push(line);\n }\n\n return lines;\n } // Get the line number of the start of the visual line that the\n // given line number is part of.\n\n\n function visualLineNo(doc, lineN) {\n var line = getLine(doc, lineN),\n vis = visualLine(line);\n\n if (line == vis) {\n return lineN;\n }\n\n return lineNo(vis);\n } // Get the line number of the start of the next visual line after\n // the given line.\n\n\n function visualLineEndNo(doc, lineN) {\n if (lineN > doc.lastLine()) {\n return lineN;\n }\n\n var line = getLine(doc, lineN),\n merged;\n\n if (!lineIsHidden(doc, line)) {\n return lineN;\n }\n\n while (merged = collapsedSpanAtEnd(line)) {\n line = merged.find(1, true).line;\n }\n\n return lineNo(line) + 1;\n } // Compute whether a line is hidden. Lines count as hidden when they\n // are part of a visual line that starts with another line, or when\n // they are entirely covered by collapsed, non-widget span.\n\n\n function lineIsHidden(doc, line) {\n var sps = sawCollapsedSpans && line.markedSpans;\n\n if (sps) {\n for (var sp = void 0, i = 0; i < sps.length; ++i) {\n sp = sps[i];\n\n if (!sp.marker.collapsed) {\n continue;\n }\n\n if (sp.from == null) {\n return true;\n }\n\n if (sp.marker.widgetNode) {\n continue;\n }\n\n if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp)) {\n return true;\n }\n }\n }\n }\n\n function lineIsHiddenInner(doc, line, span) {\n if (span.to == null) {\n var end = span.marker.find(1, true);\n return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker));\n }\n\n if (span.marker.inclusiveRight && span.to == line.text.length) {\n return true;\n }\n\n for (var sp = void 0, i = 0; i < line.markedSpans.length; ++i) {\n sp = line.markedSpans[i];\n\n if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to && (sp.to == null || sp.to != span.from) && (sp.marker.inclusiveLeft || span.marker.inclusiveRight) && lineIsHiddenInner(doc, line, sp)) {\n return true;\n }\n }\n } // Find the height above the given line.\n\n\n function _heightAtLine(lineObj) {\n lineObj = visualLine(lineObj);\n var h = 0,\n chunk = lineObj.parent;\n\n for (var i = 0; i < chunk.lines.length; ++i) {\n var line = chunk.lines[i];\n\n if (line == lineObj) {\n break;\n } else {\n h += line.height;\n }\n }\n\n for (var p = chunk.parent; p; chunk = p, p = chunk.parent) {\n for (var i$1 = 0; i$1 < p.children.length; ++i$1) {\n var cur = p.children[i$1];\n\n if (cur == chunk) {\n break;\n } else {\n h += cur.height;\n }\n }\n }\n\n return h;\n } // Compute the character length of a line, taking into account\n // collapsed ranges (see markText) that might hide parts, and join\n // other lines onto it.\n\n\n function lineLength(line) {\n if (line.height == 0) {\n return 0;\n }\n\n var len = line.text.length,\n merged,\n cur = line;\n\n while (merged = collapsedSpanAtStart(cur)) {\n var found = merged.find(0, true);\n cur = found.from.line;\n len += found.from.ch - found.to.ch;\n }\n\n cur = line;\n\n while (merged = collapsedSpanAtEnd(cur)) {\n var found$1 = merged.find(0, true);\n len -= cur.text.length - found$1.from.ch;\n cur = found$1.to.line;\n len += cur.text.length - found$1.to.ch;\n }\n\n return len;\n } // Find the longest line in the document.\n\n\n function findMaxLine(cm) {\n var d = cm.display,\n doc = cm.doc;\n d.maxLine = getLine(doc, doc.first);\n d.maxLineLength = lineLength(d.maxLine);\n d.maxLineChanged = true;\n doc.iter(function (line) {\n var len = lineLength(line);\n\n if (len > d.maxLineLength) {\n d.maxLineLength = len;\n d.maxLine = line;\n }\n });\n } // LINE DATA STRUCTURE\n // Line objects. These hold state related to a line, including\n // highlighting info (the styles array).\n\n\n var Line = function Line(text, markedSpans, estimateHeight) {\n this.text = text;\n attachMarkedSpans(this, markedSpans);\n this.height = estimateHeight ? estimateHeight(this) : 1;\n };\n\n Line.prototype.lineNo = function () {\n return lineNo(this);\n };\n\n eventMixin(Line); // Change the content (text, markers) of a line. Automatically\n // invalidates cached information and tries to re-estimate the\n // line's height.\n\n function updateLine(line, text, markedSpans, estimateHeight) {\n line.text = text;\n\n if (line.stateAfter) {\n line.stateAfter = null;\n }\n\n if (line.styles) {\n line.styles = null;\n }\n\n if (line.order != null) {\n line.order = null;\n }\n\n detachMarkedSpans(line);\n attachMarkedSpans(line, markedSpans);\n var estHeight = estimateHeight ? estimateHeight(line) : 1;\n\n if (estHeight != line.height) {\n updateLineHeight(line, estHeight);\n }\n } // Detach a line from the document tree and its markers.\n\n\n function cleanUpLine(line) {\n line.parent = null;\n detachMarkedSpans(line);\n } // Convert a style as returned by a mode (either null, or a string\n // containing one or more styles) to a CSS style. This is cached,\n // and also looks for line-wide styles.\n\n\n var styleToClassCache = {},\n styleToClassCacheWithMode = {};\n\n function interpretTokenStyle(style, options) {\n if (!style || /^\\s*$/.test(style)) {\n return null;\n }\n\n var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache;\n return cache[style] || (cache[style] = style.replace(/\\S+/g, \"cm-$&\"));\n } // Render the DOM representation of the text of a line. Also builds\n // up a 'line map', which points at the DOM nodes that represent\n // specific stretches of text, and is used by the measuring code.\n // The returned object contains the DOM node, this map, and\n // information about line-wide styles that were set by the mode.\n\n\n function buildLineContent(cm, lineView) {\n // The padding-right forces the element to have a 'border', which\n // is needed on Webkit to be able to get line-level bounding\n // rectangles for it (in measureChar).\n var content = eltP(\"span\", null, null, webkit ? \"padding-right: .1px\" : null);\n var builder = {\n pre: eltP(\"pre\", [content], \"CodeMirror-line\"),\n content: content,\n col: 0,\n pos: 0,\n cm: cm,\n trailingSpace: false,\n splitSpaces: cm.getOption(\"lineWrapping\")\n };\n lineView.measure = {}; // Iterate over the logical lines that make up this visual line.\n\n for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) {\n var line = i ? lineView.rest[i - 1] : lineView.line,\n order = void 0;\n builder.pos = 0;\n builder.addToken = buildToken; // Optionally wire in some hacks into the token-rendering\n // algorithm, to deal with browser quirks.\n\n if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line, cm.doc.direction))) {\n builder.addToken = buildTokenBadBidi(builder.addToken, order);\n }\n\n builder.map = [];\n var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line);\n insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate));\n\n if (line.styleClasses) {\n if (line.styleClasses.bgClass) {\n builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || \"\");\n }\n\n if (line.styleClasses.textClass) {\n builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || \"\");\n }\n } // Ensure at least a single node is present, for measuring.\n\n\n if (builder.map.length == 0) {\n builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure)));\n } // Store the map and a cache object for the current logical line\n\n\n if (i == 0) {\n lineView.measure.map = builder.map;\n lineView.measure.cache = {};\n } else {\n (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map);\n (lineView.measure.caches || (lineView.measure.caches = [])).push({});\n }\n } // See issue #2901\n\n\n if (webkit) {\n var last = builder.content.lastChild;\n\n if (/\\bcm-tab\\b/.test(last.className) || last.querySelector && last.querySelector(\".cm-tab\")) {\n builder.content.className = \"cm-tab-wrap-hack\";\n }\n }\n\n signal(cm, \"renderLine\", cm, lineView.line, builder.pre);\n\n if (builder.pre.className) {\n builder.textClass = joinClasses(builder.pre.className, builder.textClass || \"\");\n }\n\n return builder;\n }\n\n function defaultSpecialCharPlaceholder(ch) {\n var token = elt(\"span\", \"\\u2022\", \"cm-invalidchar\");\n token.title = \"\\\\u\" + ch.charCodeAt(0).toString(16);\n token.setAttribute(\"aria-label\", token.title);\n return token;\n } // Build up the DOM representation for a single token, and add it to\n // the line map. Takes care to render special characters separately.\n\n\n function buildToken(builder, text, style, startStyle, endStyle, css, attributes) {\n if (!text) {\n return;\n }\n\n var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text;\n var special = builder.cm.state.specialChars,\n mustWrap = false;\n var content;\n\n if (!special.test(text)) {\n builder.col += text.length;\n content = document.createTextNode(displayText);\n builder.map.push(builder.pos, builder.pos + text.length, content);\n\n if (ie && ie_version < 9) {\n mustWrap = true;\n }\n\n builder.pos += text.length;\n } else {\n content = document.createDocumentFragment();\n var pos = 0;\n\n while (true) {\n special.lastIndex = pos;\n var m = special.exec(text);\n var skipped = m ? m.index - pos : text.length - pos;\n\n if (skipped) {\n var txt = document.createTextNode(displayText.slice(pos, pos + skipped));\n\n if (ie && ie_version < 9) {\n content.appendChild(elt(\"span\", [txt]));\n } else {\n content.appendChild(txt);\n }\n\n builder.map.push(builder.pos, builder.pos + skipped, txt);\n builder.col += skipped;\n builder.pos += skipped;\n }\n\n if (!m) {\n break;\n }\n\n pos += skipped + 1;\n var txt$1 = void 0;\n\n if (m[0] == \"\\t\") {\n var tabSize = builder.cm.options.tabSize,\n tabWidth = tabSize - builder.col % tabSize;\n txt$1 = content.appendChild(elt(\"span\", spaceStr(tabWidth), \"cm-tab\"));\n txt$1.setAttribute(\"role\", \"presentation\");\n txt$1.setAttribute(\"cm-text\", \"\\t\");\n builder.col += tabWidth;\n } else if (m[0] == \"\\r\" || m[0] == \"\\n\") {\n txt$1 = content.appendChild(elt(\"span\", m[0] == \"\\r\" ? \"\\u240D\" : \"\\u2424\", \"cm-invalidchar\"));\n txt$1.setAttribute(\"cm-text\", m[0]);\n builder.col += 1;\n } else {\n txt$1 = builder.cm.options.specialCharPlaceholder(m[0]);\n txt$1.setAttribute(\"cm-text\", m[0]);\n\n if (ie && ie_version < 9) {\n content.appendChild(elt(\"span\", [txt$1]));\n } else {\n content.appendChild(txt$1);\n }\n\n builder.col += 1;\n }\n\n builder.map.push(builder.pos, builder.pos + 1, txt$1);\n builder.pos++;\n }\n }\n\n builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32;\n\n if (style || startStyle || endStyle || mustWrap || css) {\n var fullStyle = style || \"\";\n\n if (startStyle) {\n fullStyle += startStyle;\n }\n\n if (endStyle) {\n fullStyle += endStyle;\n }\n\n var token = elt(\"span\", [content], fullStyle, css);\n\n if (attributes) {\n for (var attr in attributes) {\n if (attributes.hasOwnProperty(attr) && attr != \"style\" && attr != \"class\") {\n token.setAttribute(attr, attributes[attr]);\n }\n }\n }\n\n return builder.content.appendChild(token);\n }\n\n builder.content.appendChild(content);\n } // Change some spaces to NBSP to prevent the browser from collapsing\n // trailing spaces at the end of a line when rendering text (issue #1362).\n\n\n function splitSpaces(text, trailingBefore) {\n if (text.length > 1 && !/ /.test(text)) {\n return text;\n }\n\n var spaceBefore = trailingBefore,\n result = \"\";\n\n for (var i = 0; i < text.length; i++) {\n var ch = text.charAt(i);\n\n if (ch == \" \" && spaceBefore && (i == text.length - 1 || text.charCodeAt(i + 1) == 32)) {\n ch = \"\\xA0\";\n }\n\n result += ch;\n spaceBefore = ch == \" \";\n }\n\n return result;\n } // Work around nonsense dimensions being reported for stretches of\n // right-to-left text.\n\n\n function buildTokenBadBidi(inner, order) {\n return function (builder, text, style, startStyle, endStyle, css, attributes) {\n style = style ? style + \" cm-force-border\" : \"cm-force-border\";\n var start = builder.pos,\n end = start + text.length;\n\n for (;;) {\n // Find the part that overlaps with the start of this text\n var part = void 0;\n\n for (var i = 0; i < order.length; i++) {\n part = order[i];\n\n if (part.to > start && part.from <= start) {\n break;\n }\n }\n\n if (part.to >= end) {\n return inner(builder, text, style, startStyle, endStyle, css, attributes);\n }\n\n inner(builder, text.slice(0, part.to - start), style, startStyle, null, css, attributes);\n startStyle = null;\n text = text.slice(part.to - start);\n start = part.to;\n }\n };\n }\n\n function buildCollapsedSpan(builder, size, marker, ignoreWidget) {\n var widget = !ignoreWidget && marker.widgetNode;\n\n if (widget) {\n builder.map.push(builder.pos, builder.pos + size, widget);\n }\n\n if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) {\n if (!widget) {\n widget = builder.content.appendChild(document.createElement(\"span\"));\n }\n\n widget.setAttribute(\"cm-marker\", marker.id);\n }\n\n if (widget) {\n builder.cm.display.input.setUneditable(widget);\n builder.content.appendChild(widget);\n }\n\n builder.pos += size;\n builder.trailingSpace = false;\n } // Outputs a number of spans to make up a line, taking highlighting\n // and marked text into account.\n\n\n function insertLineContent(line, builder, styles) {\n var spans = line.markedSpans,\n allText = line.text,\n at = 0;\n\n if (!spans) {\n for (var i$1 = 1; i$1 < styles.length; i$1 += 2) {\n builder.addToken(builder, allText.slice(at, at = styles[i$1]), interpretTokenStyle(styles[i$1 + 1], builder.cm.options));\n }\n\n return;\n }\n\n var len = allText.length,\n pos = 0,\n i = 1,\n text = \"\",\n style,\n css;\n var nextChange = 0,\n spanStyle,\n spanEndStyle,\n spanStartStyle,\n collapsed,\n attributes;\n\n for (;;) {\n if (nextChange == pos) {\n // Update current marker set\n spanStyle = spanEndStyle = spanStartStyle = css = \"\";\n attributes = null;\n collapsed = null;\n nextChange = Infinity;\n var foundBookmarks = [],\n endStyles = void 0;\n\n for (var j = 0; j < spans.length; ++j) {\n var sp = spans[j],\n m = sp.marker;\n\n if (m.type == \"bookmark\" && sp.from == pos && m.widgetNode) {\n foundBookmarks.push(m);\n } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) {\n if (sp.to != null && sp.to != pos && nextChange > sp.to) {\n nextChange = sp.to;\n spanEndStyle = \"\";\n }\n\n if (m.className) {\n spanStyle += \" \" + m.className;\n }\n\n if (m.css) {\n css = (css ? css + \";\" : \"\") + m.css;\n }\n\n if (m.startStyle && sp.from == pos) {\n spanStartStyle += \" \" + m.startStyle;\n }\n\n if (m.endStyle && sp.to == nextChange) {\n (endStyles || (endStyles = [])).push(m.endStyle, sp.to);\n } // support for the old title property\n // https://github.com/codemirror/CodeMirror/pull/5673\n\n\n if (m.title) {\n (attributes || (attributes = {})).title = m.title;\n }\n\n if (m.attributes) {\n for (var attr in m.attributes) {\n (attributes || (attributes = {}))[attr] = m.attributes[attr];\n }\n }\n\n if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0)) {\n collapsed = sp;\n }\n } else if (sp.from > pos && nextChange > sp.from) {\n nextChange = sp.from;\n }\n }\n\n if (endStyles) {\n for (var j$1 = 0; j$1 < endStyles.length; j$1 += 2) {\n if (endStyles[j$1 + 1] == nextChange) {\n spanEndStyle += \" \" + endStyles[j$1];\n }\n }\n }\n\n if (!collapsed || collapsed.from == pos) {\n for (var j$2 = 0; j$2 < foundBookmarks.length; ++j$2) {\n buildCollapsedSpan(builder, 0, foundBookmarks[j$2]);\n }\n }\n\n if (collapsed && (collapsed.from || 0) == pos) {\n buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos, collapsed.marker, collapsed.from == null);\n\n if (collapsed.to == null) {\n return;\n }\n\n if (collapsed.to == pos) {\n collapsed = false;\n }\n }\n }\n\n if (pos >= len) {\n break;\n }\n\n var upto = Math.min(len, nextChange);\n\n while (true) {\n if (text) {\n var end = pos + text.length;\n\n if (!collapsed) {\n var tokenText = end > upto ? text.slice(0, upto - pos) : text;\n builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle, spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : \"\", css, attributes);\n }\n\n if (end >= upto) {\n text = text.slice(upto - pos);\n pos = upto;\n break;\n }\n\n pos = end;\n spanStartStyle = \"\";\n }\n\n text = allText.slice(at, at = styles[i++]);\n style = interpretTokenStyle(styles[i++], builder.cm.options);\n }\n }\n } // These objects are used to represent the visible (currently drawn)\n // part of the document. A LineView may correspond to multiple\n // logical lines, if those are connected by collapsed ranges.\n\n\n function LineView(doc, line, lineN) {\n // The starting line\n this.line = line; // Continuing lines, if any\n\n this.rest = visualLineContinued(line); // Number of logical lines in this visual line\n\n this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1;\n this.node = this.text = null;\n this.hidden = lineIsHidden(doc, line);\n } // Create a range of LineView objects for the given lines.\n\n\n function buildViewArray(cm, from, to) {\n var array = [],\n nextPos;\n\n for (var pos = from; pos < to; pos = nextPos) {\n var view = new LineView(cm.doc, getLine(cm.doc, pos), pos);\n nextPos = pos + view.size;\n array.push(view);\n }\n\n return array;\n }\n\n var operationGroup = null;\n\n function pushOperation(op) {\n if (operationGroup) {\n operationGroup.ops.push(op);\n } else {\n op.ownsGroup = operationGroup = {\n ops: [op],\n delayedCallbacks: []\n };\n }\n }\n\n function fireCallbacksForOps(group) {\n // Calls delayed callbacks and cursorActivity handlers until no\n // new ones appear\n var callbacks = group.delayedCallbacks,\n i = 0;\n\n do {\n for (; i < callbacks.length; i++) {\n callbacks[i].call(null);\n }\n\n for (var j = 0; j < group.ops.length; j++) {\n var op = group.ops[j];\n\n if (op.cursorActivityHandlers) {\n while (op.cursorActivityCalled < op.cursorActivityHandlers.length) {\n op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm);\n }\n }\n }\n } while (i < callbacks.length);\n }\n\n function finishOperation(op, endCb) {\n var group = op.ownsGroup;\n\n if (!group) {\n return;\n }\n\n try {\n fireCallbacksForOps(group);\n } finally {\n operationGroup = null;\n endCb(group);\n }\n }\n\n var orphanDelayedCallbacks = null; // Often, we want to signal events at a point where we are in the\n // middle of some work, but don't want the handler to start calling\n // other methods on the editor, which might be in an inconsistent\n // state or simply not expect any other events to happen.\n // signalLater looks whether there are any handlers, and schedules\n // them to be executed when the last operation ends, or, if no\n // operation is active, when a timeout fires.\n\n function signalLater(emitter, type\n /*, values...*/\n ) {\n var arr = getHandlers(emitter, type);\n\n if (!arr.length) {\n return;\n }\n\n var args = Array.prototype.slice.call(arguments, 2),\n list;\n\n if (operationGroup) {\n list = operationGroup.delayedCallbacks;\n } else if (orphanDelayedCallbacks) {\n list = orphanDelayedCallbacks;\n } else {\n list = orphanDelayedCallbacks = [];\n setTimeout(fireOrphanDelayed, 0);\n }\n\n var loop = function loop(i) {\n list.push(function () {\n return arr[i].apply(null, args);\n });\n };\n\n for (var i = 0; i < arr.length; ++i) {\n loop(i);\n }\n }\n\n function fireOrphanDelayed() {\n var delayed = orphanDelayedCallbacks;\n orphanDelayedCallbacks = null;\n\n for (var i = 0; i < delayed.length; ++i) {\n delayed[i]();\n }\n } // When an aspect of a line changes, a string is added to\n // lineView.changes. This updates the relevant part of the line's\n // DOM structure.\n\n\n function updateLineForChanges(cm, lineView, lineN, dims) {\n for (var j = 0; j < lineView.changes.length; j++) {\n var type = lineView.changes[j];\n\n if (type == \"text\") {\n updateLineText(cm, lineView);\n } else if (type == \"gutter\") {\n updateLineGutter(cm, lineView, lineN, dims);\n } else if (type == \"class\") {\n updateLineClasses(cm, lineView);\n } else if (type == \"widget\") {\n updateLineWidgets(cm, lineView, dims);\n }\n }\n\n lineView.changes = null;\n } // Lines with gutter elements, widgets or a background class need to\n // be wrapped, and have the extra elements added to the wrapper div\n\n\n function ensureLineWrapped(lineView) {\n if (lineView.node == lineView.text) {\n lineView.node = elt(\"div\", null, null, \"position: relative\");\n\n if (lineView.text.parentNode) {\n lineView.text.parentNode.replaceChild(lineView.node, lineView.text);\n }\n\n lineView.node.appendChild(lineView.text);\n\n if (ie && ie_version < 8) {\n lineView.node.style.zIndex = 2;\n }\n }\n\n return lineView.node;\n }\n\n function updateLineBackground(cm, lineView) {\n var cls = lineView.bgClass ? lineView.bgClass + \" \" + (lineView.line.bgClass || \"\") : lineView.line.bgClass;\n\n if (cls) {\n cls += \" CodeMirror-linebackground\";\n }\n\n if (lineView.background) {\n if (cls) {\n lineView.background.className = cls;\n } else {\n lineView.background.parentNode.removeChild(lineView.background);\n lineView.background = null;\n }\n } else if (cls) {\n var wrap = ensureLineWrapped(lineView);\n lineView.background = wrap.insertBefore(elt(\"div\", null, cls), wrap.firstChild);\n cm.display.input.setUneditable(lineView.background);\n }\n } // Wrapper around buildLineContent which will reuse the structure\n // in display.externalMeasured when possible.\n\n\n function getLineContent(cm, lineView) {\n var ext = cm.display.externalMeasured;\n\n if (ext && ext.line == lineView.line) {\n cm.display.externalMeasured = null;\n lineView.measure = ext.measure;\n return ext.built;\n }\n\n return buildLineContent(cm, lineView);\n } // Redraw the line's text. Interacts with the background and text\n // classes because the mode may output tokens that influence these\n // classes.\n\n\n function updateLineText(cm, lineView) {\n var cls = lineView.text.className;\n var built = getLineContent(cm, lineView);\n\n if (lineView.text == lineView.node) {\n lineView.node = built.pre;\n }\n\n lineView.text.parentNode.replaceChild(built.pre, lineView.text);\n lineView.text = built.pre;\n\n if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) {\n lineView.bgClass = built.bgClass;\n lineView.textClass = built.textClass;\n updateLineClasses(cm, lineView);\n } else if (cls) {\n lineView.text.className = cls;\n }\n }\n\n function updateLineClasses(cm, lineView) {\n updateLineBackground(cm, lineView);\n\n if (lineView.line.wrapClass) {\n ensureLineWrapped(lineView).className = lineView.line.wrapClass;\n } else if (lineView.node != lineView.text) {\n lineView.node.className = \"\";\n }\n\n var textClass = lineView.textClass ? lineView.textClass + \" \" + (lineView.line.textClass || \"\") : lineView.line.textClass;\n lineView.text.className = textClass || \"\";\n }\n\n function updateLineGutter(cm, lineView, lineN, dims) {\n if (lineView.gutter) {\n lineView.node.removeChild(lineView.gutter);\n lineView.gutter = null;\n }\n\n if (lineView.gutterBackground) {\n lineView.node.removeChild(lineView.gutterBackground);\n lineView.gutterBackground = null;\n }\n\n if (lineView.line.gutterClass) {\n var wrap = ensureLineWrapped(lineView);\n lineView.gutterBackground = elt(\"div\", null, \"CodeMirror-gutter-background \" + lineView.line.gutterClass, \"left: \" + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + \"px; width: \" + dims.gutterTotalWidth + \"px\");\n cm.display.input.setUneditable(lineView.gutterBackground);\n wrap.insertBefore(lineView.gutterBackground, lineView.text);\n }\n\n var markers = lineView.line.gutterMarkers;\n\n if (cm.options.lineNumbers || markers) {\n var wrap$1 = ensureLineWrapped(lineView);\n var gutterWrap = lineView.gutter = elt(\"div\", null, \"CodeMirror-gutter-wrapper\", \"left: \" + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + \"px\");\n cm.display.input.setUneditable(gutterWrap);\n wrap$1.insertBefore(gutterWrap, lineView.text);\n\n if (lineView.line.gutterClass) {\n gutterWrap.className += \" \" + lineView.line.gutterClass;\n }\n\n if (cm.options.lineNumbers && (!markers || !markers[\"CodeMirror-linenumbers\"])) {\n lineView.lineNumber = gutterWrap.appendChild(elt(\"div\", lineNumberFor(cm.options, lineN), \"CodeMirror-linenumber CodeMirror-gutter-elt\", \"left: \" + dims.gutterLeft[\"CodeMirror-linenumbers\"] + \"px; width: \" + cm.display.lineNumInnerWidth + \"px\"));\n }\n\n if (markers) {\n for (var k = 0; k < cm.display.gutterSpecs.length; ++k) {\n var id = cm.display.gutterSpecs[k].className,\n found = markers.hasOwnProperty(id) && markers[id];\n\n if (found) {\n gutterWrap.appendChild(elt(\"div\", [found], \"CodeMirror-gutter-elt\", \"left: \" + dims.gutterLeft[id] + \"px; width: \" + dims.gutterWidth[id] + \"px\"));\n }\n }\n }\n }\n }\n\n function updateLineWidgets(cm, lineView, dims) {\n if (lineView.alignable) {\n lineView.alignable = null;\n }\n\n var isWidget = classTest(\"CodeMirror-linewidget\");\n\n for (var node = lineView.node.firstChild, next = void 0; node; node = next) {\n next = node.nextSibling;\n\n if (isWidget.test(node.className)) {\n lineView.node.removeChild(node);\n }\n }\n\n insertLineWidgets(cm, lineView, dims);\n } // Build a line's DOM representation from scratch\n\n\n function buildLineElement(cm, lineView, lineN, dims) {\n var built = getLineContent(cm, lineView);\n lineView.text = lineView.node = built.pre;\n\n if (built.bgClass) {\n lineView.bgClass = built.bgClass;\n }\n\n if (built.textClass) {\n lineView.textClass = built.textClass;\n }\n\n updateLineClasses(cm, lineView);\n updateLineGutter(cm, lineView, lineN, dims);\n insertLineWidgets(cm, lineView, dims);\n return lineView.node;\n } // A lineView may contain multiple logical lines (when merged by\n // collapsed spans). The widgets for all of them need to be drawn.\n\n\n function insertLineWidgets(cm, lineView, dims) {\n insertLineWidgetsFor(cm, lineView.line, lineView, dims, true);\n\n if (lineView.rest) {\n for (var i = 0; i < lineView.rest.length; i++) {\n insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false);\n }\n }\n }\n\n function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) {\n if (!line.widgets) {\n return;\n }\n\n var wrap = ensureLineWrapped(lineView);\n\n for (var i = 0, ws = line.widgets; i < ws.length; ++i) {\n var widget = ws[i],\n node = elt(\"div\", [widget.node], \"CodeMirror-linewidget\" + (widget.className ? \" \" + widget.className : \"\"));\n\n if (!widget.handleMouseEvents) {\n node.setAttribute(\"cm-ignore-events\", \"true\");\n }\n\n positionLineWidget(widget, node, lineView, dims);\n cm.display.input.setUneditable(node);\n\n if (allowAbove && widget.above) {\n wrap.insertBefore(node, lineView.gutter || lineView.text);\n } else {\n wrap.appendChild(node);\n }\n\n signalLater(widget, \"redraw\");\n }\n }\n\n function positionLineWidget(widget, node, lineView, dims) {\n if (widget.noHScroll) {\n (lineView.alignable || (lineView.alignable = [])).push(node);\n var width = dims.wrapperWidth;\n node.style.left = dims.fixedPos + \"px\";\n\n if (!widget.coverGutter) {\n width -= dims.gutterTotalWidth;\n node.style.paddingLeft = dims.gutterTotalWidth + \"px\";\n }\n\n node.style.width = width + \"px\";\n }\n\n if (widget.coverGutter) {\n node.style.zIndex = 5;\n node.style.position = \"relative\";\n\n if (!widget.noHScroll) {\n node.style.marginLeft = -dims.gutterTotalWidth + \"px\";\n }\n }\n }\n\n function widgetHeight(widget) {\n if (widget.height != null) {\n return widget.height;\n }\n\n var cm = widget.doc.cm;\n\n if (!cm) {\n return 0;\n }\n\n if (!contains(document.body, widget.node)) {\n var parentStyle = \"position: relative;\";\n\n if (widget.coverGutter) {\n parentStyle += \"margin-left: -\" + cm.display.gutters.offsetWidth + \"px;\";\n }\n\n if (widget.noHScroll) {\n parentStyle += \"width: \" + cm.display.wrapper.clientWidth + \"px;\";\n }\n\n removeChildrenAndAdd(cm.display.measure, elt(\"div\", [widget.node], null, parentStyle));\n }\n\n return widget.height = widget.node.parentNode.offsetHeight;\n } // Return true when the given mouse event happened in a widget\n\n\n function eventInWidget(display, e) {\n for (var n = e_target(e); n != display.wrapper; n = n.parentNode) {\n if (!n || n.nodeType == 1 && n.getAttribute(\"cm-ignore-events\") == \"true\" || n.parentNode == display.sizer && n != display.mover) {\n return true;\n }\n }\n } // POSITION MEASUREMENT\n\n\n function paddingTop(display) {\n return display.lineSpace.offsetTop;\n }\n\n function paddingVert(display) {\n return display.mover.offsetHeight - display.lineSpace.offsetHeight;\n }\n\n function paddingH(display) {\n if (display.cachedPaddingH) {\n return display.cachedPaddingH;\n }\n\n var e = removeChildrenAndAdd(display.measure, elt(\"pre\", \"x\", \"CodeMirror-line-like\"));\n var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle;\n var data = {\n left: parseInt(style.paddingLeft),\n right: parseInt(style.paddingRight)\n };\n\n if (!isNaN(data.left) && !isNaN(data.right)) {\n display.cachedPaddingH = data;\n }\n\n return data;\n }\n\n function scrollGap(cm) {\n return scrollerGap - cm.display.nativeBarWidth;\n }\n\n function displayWidth(cm) {\n return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth;\n }\n\n function displayHeight(cm) {\n return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight;\n } // Ensure the lineView.wrapping.heights array is populated. This is\n // an array of bottom offsets for the lines that make up a drawn\n // line. When lineWrapping is on, there might be more than one\n // height.\n\n\n function ensureLineHeights(cm, lineView, rect) {\n var wrapping = cm.options.lineWrapping;\n var curWidth = wrapping && displayWidth(cm);\n\n if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) {\n var heights = lineView.measure.heights = [];\n\n if (wrapping) {\n lineView.measure.width = curWidth;\n var rects = lineView.text.firstChild.getClientRects();\n\n for (var i = 0; i < rects.length - 1; i++) {\n var cur = rects[i],\n next = rects[i + 1];\n\n if (Math.abs(cur.bottom - next.bottom) > 2) {\n heights.push((cur.bottom + next.top) / 2 - rect.top);\n }\n }\n }\n\n heights.push(rect.bottom - rect.top);\n }\n } // Find a line map (mapping character offsets to text nodes) and a\n // measurement cache for the given line number. (A line view might\n // contain multiple lines when collapsed ranges are present.)\n\n\n function mapFromLineView(lineView, line, lineN) {\n if (lineView.line == line) {\n return {\n map: lineView.measure.map,\n cache: lineView.measure.cache\n };\n }\n\n for (var i = 0; i < lineView.rest.length; i++) {\n if (lineView.rest[i] == line) {\n return {\n map: lineView.measure.maps[i],\n cache: lineView.measure.caches[i]\n };\n }\n }\n\n for (var i$1 = 0; i$1 < lineView.rest.length; i$1++) {\n if (lineNo(lineView.rest[i$1]) > lineN) {\n return {\n map: lineView.measure.maps[i$1],\n cache: lineView.measure.caches[i$1],\n before: true\n };\n }\n }\n } // Render a line into the hidden node display.externalMeasured. Used\n // when measurement is needed for a line that's not in the viewport.\n\n\n function updateExternalMeasurement(cm, line) {\n line = visualLine(line);\n var lineN = lineNo(line);\n var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN);\n view.lineN = lineN;\n var built = view.built = buildLineContent(cm, view);\n view.text = built.pre;\n removeChildrenAndAdd(cm.display.lineMeasure, built.pre);\n return view;\n } // Get a {top, bottom, left, right} box (in line-local coordinates)\n // for a given character.\n\n\n function measureChar(cm, line, ch, bias) {\n return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias);\n } // Find a line view that corresponds to the given line number.\n\n\n function findViewForLine(cm, lineN) {\n if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo) {\n return cm.display.view[findViewIndex(cm, lineN)];\n }\n\n var ext = cm.display.externalMeasured;\n\n if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size) {\n return ext;\n }\n } // Measurement can be split in two steps, the set-up work that\n // applies to the whole line, and the measurement of the actual\n // character. Functions like coordsChar, that need to do a lot of\n // measurements in a row, can thus ensure that the set-up work is\n // only done once.\n\n\n function prepareMeasureForLine(cm, line) {\n var lineN = lineNo(line);\n var view = findViewForLine(cm, lineN);\n\n if (view && !view.text) {\n view = null;\n } else if (view && view.changes) {\n updateLineForChanges(cm, view, lineN, getDimensions(cm));\n cm.curOp.forceUpdate = true;\n }\n\n if (!view) {\n view = updateExternalMeasurement(cm, line);\n }\n\n var info = mapFromLineView(view, line, lineN);\n return {\n line: line,\n view: view,\n rect: null,\n map: info.map,\n cache: info.cache,\n before: info.before,\n hasHeights: false\n };\n } // Given a prepared measurement object, measures the position of an\n // actual character (or fetches it from the cache).\n\n\n function measureCharPrepared(cm, prepared, ch, bias, varHeight) {\n if (prepared.before) {\n ch = -1;\n }\n\n var key = ch + (bias || \"\"),\n found;\n\n if (prepared.cache.hasOwnProperty(key)) {\n found = prepared.cache[key];\n } else {\n if (!prepared.rect) {\n prepared.rect = prepared.view.text.getBoundingClientRect();\n }\n\n if (!prepared.hasHeights) {\n ensureLineHeights(cm, prepared.view, prepared.rect);\n prepared.hasHeights = true;\n }\n\n found = measureCharInner(cm, prepared, ch, bias);\n\n if (!found.bogus) {\n prepared.cache[key] = found;\n }\n }\n\n return {\n left: found.left,\n right: found.right,\n top: varHeight ? found.rtop : found.top,\n bottom: varHeight ? found.rbottom : found.bottom\n };\n }\n\n var nullRect = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n\n function nodeAndOffsetInLineMap(map, ch, bias) {\n var node, start, end, collapse, mStart, mEnd; // First, search the line map for the text node corresponding to,\n // or closest to, the target character.\n\n for (var i = 0; i < map.length; i += 3) {\n mStart = map[i];\n mEnd = map[i + 1];\n\n if (ch < mStart) {\n start = 0;\n end = 1;\n collapse = \"left\";\n } else if (ch < mEnd) {\n start = ch - mStart;\n end = start + 1;\n } else if (i == map.length - 3 || ch == mEnd && map[i + 3] > ch) {\n end = mEnd - mStart;\n start = end - 1;\n\n if (ch >= mEnd) {\n collapse = \"right\";\n }\n }\n\n if (start != null) {\n node = map[i + 2];\n\n if (mStart == mEnd && bias == (node.insertLeft ? \"left\" : \"right\")) {\n collapse = bias;\n }\n\n if (bias == \"left\" && start == 0) {\n while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) {\n node = map[(i -= 3) + 2];\n collapse = \"left\";\n }\n }\n\n if (bias == \"right\" && start == mEnd - mStart) {\n while (i < map.length - 3 && map[i + 3] == map[i + 4] && !map[i + 5].insertLeft) {\n node = map[(i += 3) + 2];\n collapse = \"right\";\n }\n }\n\n break;\n }\n }\n\n return {\n node: node,\n start: start,\n end: end,\n collapse: collapse,\n coverStart: mStart,\n coverEnd: mEnd\n };\n }\n\n function getUsefulRect(rects, bias) {\n var rect = nullRect;\n\n if (bias == \"left\") {\n for (var i = 0; i < rects.length; i++) {\n if ((rect = rects[i]).left != rect.right) {\n break;\n }\n }\n } else {\n for (var i$1 = rects.length - 1; i$1 >= 0; i$1--) {\n if ((rect = rects[i$1]).left != rect.right) {\n break;\n }\n }\n }\n\n return rect;\n }\n\n function measureCharInner(cm, prepared, ch, bias) {\n var place = nodeAndOffsetInLineMap(prepared.map, ch, bias);\n var node = place.node,\n start = place.start,\n end = place.end,\n collapse = place.collapse;\n var rect;\n\n if (node.nodeType == 3) {\n // If it is a text node, use a range to retrieve the coordinates.\n for (var i$1 = 0; i$1 < 4; i$1++) {\n // Retry a maximum of 4 times when nonsense rectangles are returned\n while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) {\n --start;\n }\n\n while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) {\n ++end;\n }\n\n if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart) {\n rect = node.parentNode.getBoundingClientRect();\n } else {\n rect = getUsefulRect(range(node, start, end).getClientRects(), bias);\n }\n\n if (rect.left || rect.right || start == 0) {\n break;\n }\n\n end = start;\n start = start - 1;\n collapse = \"right\";\n }\n\n if (ie && ie_version < 11) {\n rect = maybeUpdateRectForZooming(cm.display.measure, rect);\n }\n } else {\n // If it is a widget, simply get the box for the whole widget.\n if (start > 0) {\n collapse = bias = \"right\";\n }\n\n var rects;\n\n if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1) {\n rect = rects[bias == \"right\" ? rects.length - 1 : 0];\n } else {\n rect = node.getBoundingClientRect();\n }\n }\n\n if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) {\n var rSpan = node.parentNode.getClientRects()[0];\n\n if (rSpan) {\n rect = {\n left: rSpan.left,\n right: rSpan.left + charWidth(cm.display),\n top: rSpan.top,\n bottom: rSpan.bottom\n };\n } else {\n rect = nullRect;\n }\n }\n\n var rtop = rect.top - prepared.rect.top,\n rbot = rect.bottom - prepared.rect.top;\n var mid = (rtop + rbot) / 2;\n var heights = prepared.view.measure.heights;\n var i = 0;\n\n for (; i < heights.length - 1; i++) {\n if (mid < heights[i]) {\n break;\n }\n }\n\n var top = i ? heights[i - 1] : 0,\n bot = heights[i];\n var result = {\n left: (collapse == \"right\" ? rect.right : rect.left) - prepared.rect.left,\n right: (collapse == \"left\" ? rect.left : rect.right) - prepared.rect.left,\n top: top,\n bottom: bot\n };\n\n if (!rect.left && !rect.right) {\n result.bogus = true;\n }\n\n if (!cm.options.singleCursorHeightPerLine) {\n result.rtop = rtop;\n result.rbottom = rbot;\n }\n\n return result;\n } // Work around problem with bounding client rects on ranges being\n // returned incorrectly when zoomed on IE10 and below.\n\n\n function maybeUpdateRectForZooming(measure, rect) {\n if (!window.screen || screen.logicalXDPI == null || screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure)) {\n return rect;\n }\n\n var scaleX = screen.logicalXDPI / screen.deviceXDPI;\n var scaleY = screen.logicalYDPI / screen.deviceYDPI;\n return {\n left: rect.left * scaleX,\n right: rect.right * scaleX,\n top: rect.top * scaleY,\n bottom: rect.bottom * scaleY\n };\n }\n\n function clearLineMeasurementCacheFor(lineView) {\n if (lineView.measure) {\n lineView.measure.cache = {};\n lineView.measure.heights = null;\n\n if (lineView.rest) {\n for (var i = 0; i < lineView.rest.length; i++) {\n lineView.measure.caches[i] = {};\n }\n }\n }\n }\n\n function clearLineMeasurementCache(cm) {\n cm.display.externalMeasure = null;\n removeChildren(cm.display.lineMeasure);\n\n for (var i = 0; i < cm.display.view.length; i++) {\n clearLineMeasurementCacheFor(cm.display.view[i]);\n }\n }\n\n function clearCaches(cm) {\n clearLineMeasurementCache(cm);\n cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null;\n\n if (!cm.options.lineWrapping) {\n cm.display.maxLineChanged = true;\n }\n\n cm.display.lineNumChars = null;\n }\n\n function pageScrollX() {\n // Work around https://bugs.chromium.org/p/chromium/issues/detail?id=489206\n // which causes page_Offset and bounding client rects to use\n // different reference viewports and invalidate our calculations.\n if (chrome && android) {\n return -(document.body.getBoundingClientRect().left - parseInt(getComputedStyle(document.body).marginLeft));\n }\n\n return window.pageXOffset || (document.documentElement || document.body).scrollLeft;\n }\n\n function pageScrollY() {\n if (chrome && android) {\n return -(document.body.getBoundingClientRect().top - parseInt(getComputedStyle(document.body).marginTop));\n }\n\n return window.pageYOffset || (document.documentElement || document.body).scrollTop;\n }\n\n function widgetTopHeight(lineObj) {\n var height = 0;\n\n if (lineObj.widgets) {\n for (var i = 0; i < lineObj.widgets.length; ++i) {\n if (lineObj.widgets[i].above) {\n height += widgetHeight(lineObj.widgets[i]);\n }\n }\n }\n\n return height;\n } // Converts a {top, bottom, left, right} box from line-local\n // coordinates into another coordinate system. Context may be one of\n // \"line\", \"div\" (display.lineDiv), \"local\"./null (editor), \"window\",\n // or \"page\".\n\n\n function intoCoordSystem(cm, lineObj, rect, context, includeWidgets) {\n if (!includeWidgets) {\n var height = widgetTopHeight(lineObj);\n rect.top += height;\n rect.bottom += height;\n }\n\n if (context == \"line\") {\n return rect;\n }\n\n if (!context) {\n context = \"local\";\n }\n\n var yOff = _heightAtLine(lineObj);\n\n if (context == \"local\") {\n yOff += paddingTop(cm.display);\n } else {\n yOff -= cm.display.viewOffset;\n }\n\n if (context == \"page\" || context == \"window\") {\n var lOff = cm.display.lineSpace.getBoundingClientRect();\n yOff += lOff.top + (context == \"window\" ? 0 : pageScrollY());\n var xOff = lOff.left + (context == \"window\" ? 0 : pageScrollX());\n rect.left += xOff;\n rect.right += xOff;\n }\n\n rect.top += yOff;\n rect.bottom += yOff;\n return rect;\n } // Coverts a box from \"div\" coords to another coordinate system.\n // Context may be \"window\", \"page\", \"div\", or \"local\"./null.\n\n\n function fromCoordSystem(cm, coords, context) {\n if (context == \"div\") {\n return coords;\n }\n\n var left = coords.left,\n top = coords.top; // First move into \"page\" coordinate system\n\n if (context == \"page\") {\n left -= pageScrollX();\n top -= pageScrollY();\n } else if (context == \"local\" || !context) {\n var localBox = cm.display.sizer.getBoundingClientRect();\n left += localBox.left;\n top += localBox.top;\n }\n\n var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect();\n return {\n left: left - lineSpaceBox.left,\n top: top - lineSpaceBox.top\n };\n }\n\n function _charCoords(cm, pos, context, lineObj, bias) {\n if (!lineObj) {\n lineObj = getLine(cm.doc, pos.line);\n }\n\n return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context);\n } // Returns a box for a given cursor position, which may have an\n // 'other' property containing the position of the secondary cursor\n // on a bidi boundary.\n // A cursor Pos(line, char, \"before\") is on the same visual line as `char - 1`\n // and after `char - 1` in writing order of `char - 1`\n // A cursor Pos(line, char, \"after\") is on the same visual line as `char`\n // and before `char` in writing order of `char`\n // Examples (upper-case letters are RTL, lower-case are LTR):\n // Pos(0, 1, ...)\n // before after\n // ab a|b a|b\n // aB a|B aB|\n // Ab |Ab A|b\n // AB B|A B|A\n // Every position after the last character on a line is considered to stick\n // to the last character on the line.\n\n\n function _cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) {\n lineObj = lineObj || getLine(cm.doc, pos.line);\n\n if (!preparedMeasure) {\n preparedMeasure = prepareMeasureForLine(cm, lineObj);\n }\n\n function get(ch, right) {\n var m = measureCharPrepared(cm, preparedMeasure, ch, right ? \"right\" : \"left\", varHeight);\n\n if (right) {\n m.left = m.right;\n } else {\n m.right = m.left;\n }\n\n return intoCoordSystem(cm, lineObj, m, context);\n }\n\n var order = getOrder(lineObj, cm.doc.direction),\n ch = pos.ch,\n sticky = pos.sticky;\n\n if (ch >= lineObj.text.length) {\n ch = lineObj.text.length;\n sticky = \"before\";\n } else if (ch <= 0) {\n ch = 0;\n sticky = \"after\";\n }\n\n if (!order) {\n return get(sticky == \"before\" ? ch - 1 : ch, sticky == \"before\");\n }\n\n function getBidi(ch, partPos, invert) {\n var part = order[partPos],\n right = part.level == 1;\n return get(invert ? ch - 1 : ch, right != invert);\n }\n\n var partPos = getBidiPartAt(order, ch, sticky);\n var other = bidiOther;\n var val = getBidi(ch, partPos, sticky == \"before\");\n\n if (other != null) {\n val.other = getBidi(ch, other, sticky != \"before\");\n }\n\n return val;\n } // Used to cheaply estimate the coordinates for a position. Used for\n // intermediate scroll updates.\n\n\n function estimateCoords(cm, pos) {\n var left = 0;\n pos = _clipPos(cm.doc, pos);\n\n if (!cm.options.lineWrapping) {\n left = charWidth(cm.display) * pos.ch;\n }\n\n var lineObj = getLine(cm.doc, pos.line);\n var top = _heightAtLine(lineObj) + paddingTop(cm.display);\n return {\n left: left,\n right: left,\n top: top,\n bottom: top + lineObj.height\n };\n } // Positions returned by coordsChar contain some extra information.\n // xRel is the relative x position of the input coordinates compared\n // to the found position (so xRel > 0 means the coordinates are to\n // the right of the character position, for example). When outside\n // is true, that means the coordinates lie outside the line's\n // vertical range.\n\n\n function PosWithInfo(line, ch, sticky, outside, xRel) {\n var pos = Pos(line, ch, sticky);\n pos.xRel = xRel;\n\n if (outside) {\n pos.outside = outside;\n }\n\n return pos;\n } // Compute the character position closest to the given coordinates.\n // Input must be lineSpace-local (\"div\" coordinate system).\n\n\n function _coordsChar(cm, x, y) {\n var doc = cm.doc;\n y += cm.display.viewOffset;\n\n if (y < 0) {\n return PosWithInfo(doc.first, 0, null, -1, -1);\n }\n\n var lineN = _lineAtHeight(doc, y),\n last = doc.first + doc.size - 1;\n\n if (lineN > last) {\n return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, null, 1, 1);\n }\n\n if (x < 0) {\n x = 0;\n }\n\n var lineObj = getLine(doc, lineN);\n\n for (;;) {\n var found = coordsCharInner(cm, lineObj, lineN, x, y);\n var collapsed = collapsedSpanAround(lineObj, found.ch + (found.xRel > 0 || found.outside > 0 ? 1 : 0));\n\n if (!collapsed) {\n return found;\n }\n\n var rangeEnd = collapsed.find(1);\n\n if (rangeEnd.line == lineN) {\n return rangeEnd;\n }\n\n lineObj = getLine(doc, lineN = rangeEnd.line);\n }\n }\n\n function wrappedLineExtent(cm, lineObj, preparedMeasure, y) {\n y -= widgetTopHeight(lineObj);\n var end = lineObj.text.length;\n var begin = findFirst(function (ch) {\n return measureCharPrepared(cm, preparedMeasure, ch - 1).bottom <= y;\n }, end, 0);\n end = findFirst(function (ch) {\n return measureCharPrepared(cm, preparedMeasure, ch).top > y;\n }, begin, end);\n return {\n begin: begin,\n end: end\n };\n }\n\n function wrappedLineExtentChar(cm, lineObj, preparedMeasure, target) {\n if (!preparedMeasure) {\n preparedMeasure = prepareMeasureForLine(cm, lineObj);\n }\n\n var targetTop = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, target), \"line\").top;\n return wrappedLineExtent(cm, lineObj, preparedMeasure, targetTop);\n } // Returns true if the given side of a box is after the given\n // coordinates, in top-to-bottom, left-to-right order.\n\n\n function boxIsAfter(box, x, y, left) {\n return box.bottom <= y ? false : box.top > y ? true : (left ? box.left : box.right) > x;\n }\n\n function coordsCharInner(cm, lineObj, lineNo, x, y) {\n // Move y into line-local coordinate space\n y -= _heightAtLine(lineObj);\n var preparedMeasure = prepareMeasureForLine(cm, lineObj); // When directly calling `measureCharPrepared`, we have to adjust\n // for the widgets at this line.\n\n var widgetHeight = widgetTopHeight(lineObj);\n var begin = 0,\n end = lineObj.text.length,\n ltr = true;\n var order = getOrder(lineObj, cm.doc.direction); // If the line isn't plain left-to-right text, first figure out\n // which bidi section the coordinates fall into.\n\n if (order) {\n var part = (cm.options.lineWrapping ? coordsBidiPartWrapped : coordsBidiPart)(cm, lineObj, lineNo, preparedMeasure, order, x, y);\n ltr = part.level != 1; // The awkward -1 offsets are needed because findFirst (called\n // on these below) will treat its first bound as inclusive,\n // second as exclusive, but we want to actually address the\n // characters in the part's range\n\n begin = ltr ? part.from : part.to - 1;\n end = ltr ? part.to : part.from - 1;\n } // A binary search to find the first character whose bounding box\n // starts after the coordinates. If we run across any whose box wrap\n // the coordinates, store that.\n\n\n var chAround = null,\n boxAround = null;\n var ch = findFirst(function (ch) {\n var box = measureCharPrepared(cm, preparedMeasure, ch);\n box.top += widgetHeight;\n box.bottom += widgetHeight;\n\n if (!boxIsAfter(box, x, y, false)) {\n return false;\n }\n\n if (box.top <= y && box.left <= x) {\n chAround = ch;\n boxAround = box;\n }\n\n return true;\n }, begin, end);\n var baseX,\n sticky,\n outside = false; // If a box around the coordinates was found, use that\n\n if (boxAround) {\n // Distinguish coordinates nearer to the left or right side of the box\n var atLeft = x - boxAround.left < boxAround.right - x,\n atStart = atLeft == ltr;\n ch = chAround + (atStart ? 0 : 1);\n sticky = atStart ? \"after\" : \"before\";\n baseX = atLeft ? boxAround.left : boxAround.right;\n } else {\n // (Adjust for extended bound, if necessary.)\n if (!ltr && (ch == end || ch == begin)) {\n ch++;\n } // To determine which side to associate with, get the box to the\n // left of the character and compare it's vertical position to the\n // coordinates\n\n\n sticky = ch == 0 ? \"after\" : ch == lineObj.text.length ? \"before\" : measureCharPrepared(cm, preparedMeasure, ch - (ltr ? 1 : 0)).bottom + widgetHeight <= y == ltr ? \"after\" : \"before\"; // Now get accurate coordinates for this place, in order to get a\n // base X position\n\n var coords = _cursorCoords(cm, Pos(lineNo, ch, sticky), \"line\", lineObj, preparedMeasure);\n\n baseX = coords.left;\n outside = y < coords.top ? -1 : y >= coords.bottom ? 1 : 0;\n }\n\n ch = skipExtendingChars(lineObj.text, ch, 1);\n return PosWithInfo(lineNo, ch, sticky, outside, x - baseX);\n }\n\n function coordsBidiPart(cm, lineObj, lineNo, preparedMeasure, order, x, y) {\n // Bidi parts are sorted left-to-right, and in a non-line-wrapping\n // situation, we can take this ordering to correspond to the visual\n // ordering. This finds the first part whose end is after the given\n // coordinates.\n var index = findFirst(function (i) {\n var part = order[i],\n ltr = part.level != 1;\n return boxIsAfter(_cursorCoords(cm, Pos(lineNo, ltr ? part.to : part.from, ltr ? \"before\" : \"after\"), \"line\", lineObj, preparedMeasure), x, y, true);\n }, 0, order.length - 1);\n var part = order[index]; // If this isn't the first part, the part's start is also after\n // the coordinates, and the coordinates aren't on the same line as\n // that start, move one part back.\n\n if (index > 0) {\n var ltr = part.level != 1;\n\n var start = _cursorCoords(cm, Pos(lineNo, ltr ? part.from : part.to, ltr ? \"after\" : \"before\"), \"line\", lineObj, preparedMeasure);\n\n if (boxIsAfter(start, x, y, true) && start.top > y) {\n part = order[index - 1];\n }\n }\n\n return part;\n }\n\n function coordsBidiPartWrapped(cm, lineObj, _lineNo, preparedMeasure, order, x, y) {\n // In a wrapped line, rtl text on wrapping boundaries can do things\n // that don't correspond to the ordering in our `order` array at\n // all, so a binary search doesn't work, and we want to return a\n // part that only spans one line so that the binary search in\n // coordsCharInner is safe. As such, we first find the extent of the\n // wrapped line, and then do a flat search in which we discard any\n // spans that aren't on the line.\n var ref = wrappedLineExtent(cm, lineObj, preparedMeasure, y);\n var begin = ref.begin;\n var end = ref.end;\n\n if (/\\s/.test(lineObj.text.charAt(end - 1))) {\n end--;\n }\n\n var part = null,\n closestDist = null;\n\n for (var i = 0; i < order.length; i++) {\n var p = order[i];\n\n if (p.from >= end || p.to <= begin) {\n continue;\n }\n\n var ltr = p.level != 1;\n var endX = measureCharPrepared(cm, preparedMeasure, ltr ? Math.min(end, p.to) - 1 : Math.max(begin, p.from)).right; // Weigh against spans ending before this, so that they are only\n // picked if nothing ends after\n\n var dist = endX < x ? x - endX + 1e9 : endX - x;\n\n if (!part || closestDist > dist) {\n part = p;\n closestDist = dist;\n }\n }\n\n if (!part) {\n part = order[order.length - 1];\n } // Clip the part to the wrapped line.\n\n\n if (part.from < begin) {\n part = {\n from: begin,\n to: part.to,\n level: part.level\n };\n }\n\n if (part.to > end) {\n part = {\n from: part.from,\n to: end,\n level: part.level\n };\n }\n\n return part;\n }\n\n var measureText; // Compute the default text height.\n\n function textHeight(display) {\n if (display.cachedTextHeight != null) {\n return display.cachedTextHeight;\n }\n\n if (measureText == null) {\n measureText = elt(\"pre\", null, \"CodeMirror-line-like\"); // Measure a bunch of lines, for browsers that compute\n // fractional heights.\n\n for (var i = 0; i < 49; ++i) {\n measureText.appendChild(document.createTextNode(\"x\"));\n measureText.appendChild(elt(\"br\"));\n }\n\n measureText.appendChild(document.createTextNode(\"x\"));\n }\n\n removeChildrenAndAdd(display.measure, measureText);\n var height = measureText.offsetHeight / 50;\n\n if (height > 3) {\n display.cachedTextHeight = height;\n }\n\n removeChildren(display.measure);\n return height || 1;\n } // Compute the default character width.\n\n\n function charWidth(display) {\n if (display.cachedCharWidth != null) {\n return display.cachedCharWidth;\n }\n\n var anchor = elt(\"span\", \"xxxxxxxxxx\");\n var pre = elt(\"pre\", [anchor], \"CodeMirror-line-like\");\n removeChildrenAndAdd(display.measure, pre);\n var rect = anchor.getBoundingClientRect(),\n width = (rect.right - rect.left) / 10;\n\n if (width > 2) {\n display.cachedCharWidth = width;\n }\n\n return width || 10;\n } // Do a bulk-read of the DOM positions and sizes needed to draw the\n // view, so that we don't interleave reading and writing to the DOM.\n\n\n function getDimensions(cm) {\n var d = cm.display,\n left = {},\n width = {};\n var gutterLeft = d.gutters.clientLeft;\n\n for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) {\n var id = cm.display.gutterSpecs[i].className;\n left[id] = n.offsetLeft + n.clientLeft + gutterLeft;\n width[id] = n.clientWidth;\n }\n\n return {\n fixedPos: compensateForHScroll(d),\n gutterTotalWidth: d.gutters.offsetWidth,\n gutterLeft: left,\n gutterWidth: width,\n wrapperWidth: d.wrapper.clientWidth\n };\n } // Computes display.scroller.scrollLeft + display.gutters.offsetWidth,\n // but using getBoundingClientRect to get a sub-pixel-accurate\n // result.\n\n\n function compensateForHScroll(display) {\n return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left;\n } // Returns a function that estimates the height of a line, to use as\n // first approximation until the line becomes visible (and is thus\n // properly measurable).\n\n\n function estimateHeight(cm) {\n var th = textHeight(cm.display),\n wrapping = cm.options.lineWrapping;\n var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3);\n return function (line) {\n if (lineIsHidden(cm.doc, line)) {\n return 0;\n }\n\n var widgetsHeight = 0;\n\n if (line.widgets) {\n for (var i = 0; i < line.widgets.length; i++) {\n if (line.widgets[i].height) {\n widgetsHeight += line.widgets[i].height;\n }\n }\n }\n\n if (wrapping) {\n return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th;\n } else {\n return widgetsHeight + th;\n }\n };\n }\n\n function estimateLineHeights(cm) {\n var doc = cm.doc,\n est = estimateHeight(cm);\n doc.iter(function (line) {\n var estHeight = est(line);\n\n if (estHeight != line.height) {\n updateLineHeight(line, estHeight);\n }\n });\n } // Given a mouse event, find the corresponding position. If liberal\n // is false, it checks whether a gutter or scrollbar was clicked,\n // and returns null if it was. forRect is used by rectangular\n // selections, and tries to estimate a character position even for\n // coordinates beyond the right of the text.\n\n\n function posFromMouse(cm, e, liberal, forRect) {\n var display = cm.display;\n\n if (!liberal && e_target(e).getAttribute(\"cm-not-content\") == \"true\") {\n return null;\n }\n\n var x,\n y,\n space = display.lineSpace.getBoundingClientRect(); // Fails unpredictably on IE[67] when mouse is dragged around quickly.\n\n try {\n x = e.clientX - space.left;\n y = e.clientY - space.top;\n } catch (e$1) {\n return null;\n }\n\n var coords = _coordsChar(cm, x, y),\n line;\n\n if (forRect && coords.xRel > 0 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) {\n var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length;\n coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff));\n }\n\n return coords;\n } // Find the view element corresponding to a given line. Return null\n // when the line isn't visible.\n\n\n function findViewIndex(cm, n) {\n if (n >= cm.display.viewTo) {\n return null;\n }\n\n n -= cm.display.viewFrom;\n\n if (n < 0) {\n return null;\n }\n\n var view = cm.display.view;\n\n for (var i = 0; i < view.length; i++) {\n n -= view[i].size;\n\n if (n < 0) {\n return i;\n }\n }\n } // Updates the display.view data structure for a given change to the\n // document. From and to are in pre-change coordinates. Lendiff is\n // the amount of lines added or subtracted by the change. This is\n // used for changes that span multiple lines, or change the way\n // lines are divided into visual lines. regLineChange (below)\n // registers single-line changes.\n\n\n function regChange(cm, from, to, lendiff) {\n if (from == null) {\n from = cm.doc.first;\n }\n\n if (to == null) {\n to = cm.doc.first + cm.doc.size;\n }\n\n if (!lendiff) {\n lendiff = 0;\n }\n\n var display = cm.display;\n\n if (lendiff && to < display.viewTo && (display.updateLineNumbers == null || display.updateLineNumbers > from)) {\n display.updateLineNumbers = from;\n }\n\n cm.curOp.viewChanged = true;\n\n if (from >= display.viewTo) {\n // Change after\n if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo) {\n resetView(cm);\n }\n } else if (to <= display.viewFrom) {\n // Change before\n if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) {\n resetView(cm);\n } else {\n display.viewFrom += lendiff;\n display.viewTo += lendiff;\n }\n } else if (from <= display.viewFrom && to >= display.viewTo) {\n // Full overlap\n resetView(cm);\n } else if (from <= display.viewFrom) {\n // Top overlap\n var cut = viewCuttingPoint(cm, to, to + lendiff, 1);\n\n if (cut) {\n display.view = display.view.slice(cut.index);\n display.viewFrom = cut.lineN;\n display.viewTo += lendiff;\n } else {\n resetView(cm);\n }\n } else if (to >= display.viewTo) {\n // Bottom overlap\n var cut$1 = viewCuttingPoint(cm, from, from, -1);\n\n if (cut$1) {\n display.view = display.view.slice(0, cut$1.index);\n display.viewTo = cut$1.lineN;\n } else {\n resetView(cm);\n }\n } else {\n // Gap in the middle\n var cutTop = viewCuttingPoint(cm, from, from, -1);\n var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1);\n\n if (cutTop && cutBot) {\n display.view = display.view.slice(0, cutTop.index).concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN)).concat(display.view.slice(cutBot.index));\n display.viewTo += lendiff;\n } else {\n resetView(cm);\n }\n }\n\n var ext = display.externalMeasured;\n\n if (ext) {\n if (to < ext.lineN) {\n ext.lineN += lendiff;\n } else if (from < ext.lineN + ext.size) {\n display.externalMeasured = null;\n }\n }\n } // Register a change to a single line. Type must be one of \"text\",\n // \"gutter\", \"class\", \"widget\"\n\n\n function regLineChange(cm, line, type) {\n cm.curOp.viewChanged = true;\n var display = cm.display,\n ext = cm.display.externalMeasured;\n\n if (ext && line >= ext.lineN && line < ext.lineN + ext.size) {\n display.externalMeasured = null;\n }\n\n if (line < display.viewFrom || line >= display.viewTo) {\n return;\n }\n\n var lineView = display.view[findViewIndex(cm, line)];\n\n if (lineView.node == null) {\n return;\n }\n\n var arr = lineView.changes || (lineView.changes = []);\n\n if (indexOf(arr, type) == -1) {\n arr.push(type);\n }\n } // Clear the view.\n\n\n function resetView(cm) {\n cm.display.viewFrom = cm.display.viewTo = cm.doc.first;\n cm.display.view = [];\n cm.display.viewOffset = 0;\n }\n\n function viewCuttingPoint(cm, oldN, newN, dir) {\n var index = findViewIndex(cm, oldN),\n diff,\n view = cm.display.view;\n\n if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size) {\n return {\n index: index,\n lineN: newN\n };\n }\n\n var n = cm.display.viewFrom;\n\n for (var i = 0; i < index; i++) {\n n += view[i].size;\n }\n\n if (n != oldN) {\n if (dir > 0) {\n if (index == view.length - 1) {\n return null;\n }\n\n diff = n + view[index].size - oldN;\n index++;\n } else {\n diff = n - oldN;\n }\n\n oldN += diff;\n newN += diff;\n }\n\n while (visualLineNo(cm.doc, newN) != newN) {\n if (index == (dir < 0 ? 0 : view.length - 1)) {\n return null;\n }\n\n newN += dir * view[index - (dir < 0 ? 1 : 0)].size;\n index += dir;\n }\n\n return {\n index: index,\n lineN: newN\n };\n } // Force the view to cover a given range, adding empty view element\n // or clipping off existing ones as needed.\n\n\n function adjustView(cm, from, to) {\n var display = cm.display,\n view = display.view;\n\n if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) {\n display.view = buildViewArray(cm, from, to);\n display.viewFrom = from;\n } else {\n if (display.viewFrom > from) {\n display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view);\n } else if (display.viewFrom < from) {\n display.view = display.view.slice(findViewIndex(cm, from));\n }\n\n display.viewFrom = from;\n\n if (display.viewTo < to) {\n display.view = display.view.concat(buildViewArray(cm, display.viewTo, to));\n } else if (display.viewTo > to) {\n display.view = display.view.slice(0, findViewIndex(cm, to));\n }\n }\n\n display.viewTo = to;\n } // Count the number of lines in the view whose DOM representation is\n // out of date (or nonexistent).\n\n\n function countDirtyView(cm) {\n var view = cm.display.view,\n dirty = 0;\n\n for (var i = 0; i < view.length; i++) {\n var lineView = view[i];\n\n if (!lineView.hidden && (!lineView.node || lineView.changes)) {\n ++dirty;\n }\n }\n\n return dirty;\n }\n\n function updateSelection(cm) {\n cm.display.input.showSelection(cm.display.input.prepareSelection());\n }\n\n function prepareSelection(cm, primary) {\n if (primary === void 0) primary = true;\n var doc = cm.doc,\n result = {};\n var curFragment = result.cursors = document.createDocumentFragment();\n var selFragment = result.selection = document.createDocumentFragment();\n\n for (var i = 0; i < doc.sel.ranges.length; i++) {\n if (!primary && i == doc.sel.primIndex) {\n continue;\n }\n\n var range = doc.sel.ranges[i];\n\n if (range.from().line >= cm.display.viewTo || range.to().line < cm.display.viewFrom) {\n continue;\n }\n\n var collapsed = range.empty();\n\n if (collapsed || cm.options.showCursorWhenSelecting) {\n drawSelectionCursor(cm, range.head, curFragment);\n }\n\n if (!collapsed) {\n drawSelectionRange(cm, range, selFragment);\n }\n }\n\n return result;\n } // Draws a cursor for the given range\n\n\n function drawSelectionCursor(cm, head, output) {\n var pos = _cursorCoords(cm, head, \"div\", null, null, !cm.options.singleCursorHeightPerLine);\n\n var cursor = output.appendChild(elt(\"div\", \"\\xA0\", \"CodeMirror-cursor\"));\n cursor.style.left = pos.left + \"px\";\n cursor.style.top = pos.top + \"px\";\n cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + \"px\";\n\n if (pos.other) {\n // Secondary cursor, shown when on a 'jump' in bi-directional text\n var otherCursor = output.appendChild(elt(\"div\", \"\\xA0\", \"CodeMirror-cursor CodeMirror-secondarycursor\"));\n otherCursor.style.display = \"\";\n otherCursor.style.left = pos.other.left + \"px\";\n otherCursor.style.top = pos.other.top + \"px\";\n otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + \"px\";\n }\n }\n\n function cmpCoords(a, b) {\n return a.top - b.top || a.left - b.left;\n } // Draws the given range as a highlighted selection\n\n\n function drawSelectionRange(cm, range, output) {\n var display = cm.display,\n doc = cm.doc;\n var fragment = document.createDocumentFragment();\n var padding = paddingH(cm.display),\n leftSide = padding.left;\n var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right;\n var docLTR = doc.direction == \"ltr\";\n\n function add(left, top, width, bottom) {\n if (top < 0) {\n top = 0;\n }\n\n top = Math.round(top);\n bottom = Math.round(bottom);\n fragment.appendChild(elt(\"div\", null, \"CodeMirror-selected\", \"position: absolute; left: \" + left + \"px;\\n top: \" + top + \"px; width: \" + (width == null ? rightSide - left : width) + \"px;\\n height: \" + (bottom - top) + \"px\"));\n }\n\n function drawForLine(line, fromArg, toArg) {\n var lineObj = getLine(doc, line);\n var lineLen = lineObj.text.length;\n var start, end;\n\n function coords(ch, bias) {\n return _charCoords(cm, Pos(line, ch), \"div\", lineObj, bias);\n }\n\n function wrapX(pos, dir, side) {\n var extent = wrappedLineExtentChar(cm, lineObj, null, pos);\n var prop = dir == \"ltr\" == (side == \"after\") ? \"left\" : \"right\";\n var ch = side == \"after\" ? extent.begin : extent.end - (/\\s/.test(lineObj.text.charAt(extent.end - 1)) ? 2 : 1);\n return coords(ch, prop)[prop];\n }\n\n var order = getOrder(lineObj, doc.direction);\n iterateBidiSections(order, fromArg || 0, toArg == null ? lineLen : toArg, function (from, to, dir, i) {\n var ltr = dir == \"ltr\";\n var fromPos = coords(from, ltr ? \"left\" : \"right\");\n var toPos = coords(to - 1, ltr ? \"right\" : \"left\");\n var openStart = fromArg == null && from == 0,\n openEnd = toArg == null && to == lineLen;\n var first = i == 0,\n last = !order || i == order.length - 1;\n\n if (toPos.top - fromPos.top <= 3) {\n // Single line\n var openLeft = (docLTR ? openStart : openEnd) && first;\n var openRight = (docLTR ? openEnd : openStart) && last;\n var left = openLeft ? leftSide : (ltr ? fromPos : toPos).left;\n var right = openRight ? rightSide : (ltr ? toPos : fromPos).right;\n add(left, fromPos.top, right - left, fromPos.bottom);\n } else {\n // Multiple lines\n var topLeft, topRight, botLeft, botRight;\n\n if (ltr) {\n topLeft = docLTR && openStart && first ? leftSide : fromPos.left;\n topRight = docLTR ? rightSide : wrapX(from, dir, \"before\");\n botLeft = docLTR ? leftSide : wrapX(to, dir, \"after\");\n botRight = docLTR && openEnd && last ? rightSide : toPos.right;\n } else {\n topLeft = !docLTR ? leftSide : wrapX(from, dir, \"before\");\n topRight = !docLTR && openStart && first ? rightSide : fromPos.right;\n botLeft = !docLTR && openEnd && last ? leftSide : toPos.left;\n botRight = !docLTR ? rightSide : wrapX(to, dir, \"after\");\n }\n\n add(topLeft, fromPos.top, topRight - topLeft, fromPos.bottom);\n\n if (fromPos.bottom < toPos.top) {\n add(leftSide, fromPos.bottom, null, toPos.top);\n }\n\n add(botLeft, toPos.top, botRight - botLeft, toPos.bottom);\n }\n\n if (!start || cmpCoords(fromPos, start) < 0) {\n start = fromPos;\n }\n\n if (cmpCoords(toPos, start) < 0) {\n start = toPos;\n }\n\n if (!end || cmpCoords(fromPos, end) < 0) {\n end = fromPos;\n }\n\n if (cmpCoords(toPos, end) < 0) {\n end = toPos;\n }\n });\n return {\n start: start,\n end: end\n };\n }\n\n var sFrom = range.from(),\n sTo = range.to();\n\n if (sFrom.line == sTo.line) {\n drawForLine(sFrom.line, sFrom.ch, sTo.ch);\n } else {\n var fromLine = getLine(doc, sFrom.line),\n toLine = getLine(doc, sTo.line);\n var singleVLine = visualLine(fromLine) == visualLine(toLine);\n var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end;\n var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start;\n\n if (singleVLine) {\n if (leftEnd.top < rightStart.top - 2) {\n add(leftEnd.right, leftEnd.top, null, leftEnd.bottom);\n add(leftSide, rightStart.top, rightStart.left, rightStart.bottom);\n } else {\n add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom);\n }\n }\n\n if (leftEnd.bottom < rightStart.top) {\n add(leftSide, leftEnd.bottom, null, rightStart.top);\n }\n }\n\n output.appendChild(fragment);\n } // Cursor-blinking\n\n\n function restartBlink(cm) {\n if (!cm.state.focused) {\n return;\n }\n\n var display = cm.display;\n clearInterval(display.blinker);\n var on = true;\n display.cursorDiv.style.visibility = \"\";\n\n if (cm.options.cursorBlinkRate > 0) {\n display.blinker = setInterval(function () {\n return display.cursorDiv.style.visibility = (on = !on) ? \"\" : \"hidden\";\n }, cm.options.cursorBlinkRate);\n } else if (cm.options.cursorBlinkRate < 0) {\n display.cursorDiv.style.visibility = \"hidden\";\n }\n }\n\n function ensureFocus(cm) {\n if (!cm.state.focused) {\n cm.display.input.focus();\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 onBlur(cm);\n }\n }, 100);\n }\n\n function onFocus(cm, e) {\n if (cm.state.delayingBlurEvent) {\n cm.state.delayingBlurEvent = false;\n }\n\n if (cm.options.readOnly == \"nocursor\") {\n return;\n }\n\n if (!cm.state.focused) {\n signal(cm, \"focus\", cm, e);\n cm.state.focused = true;\n addClass(cm.display.wrapper, \"CodeMirror-focused\"); // This test prevents this from firing when a context\n // menu is closed (since the input reset would kill the\n // select-all detection hack)\n\n if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) {\n cm.display.input.reset();\n\n if (webkit) {\n setTimeout(function () {\n return cm.display.input.reset(true);\n }, 20);\n } // Issue #1730\n\n }\n\n cm.display.input.receivedFocus();\n }\n\n restartBlink(cm);\n }\n\n function onBlur(cm, e) {\n if (cm.state.delayingBlurEvent) {\n return;\n }\n\n if (cm.state.focused) {\n signal(cm, \"blur\", cm, e);\n cm.state.focused = false;\n rmClass(cm.display.wrapper, \"CodeMirror-focused\");\n }\n\n clearInterval(cm.display.blinker);\n setTimeout(function () {\n if (!cm.state.focused) {\n cm.display.shift = false;\n }\n }, 150);\n } // Read the actual heights of the rendered lines, and update their\n // stored heights to match.\n\n\n function updateHeightsInViewport(cm) {\n var display = cm.display;\n var prevBottom = display.lineDiv.offsetTop;\n\n for (var i = 0; i < display.view.length; i++) {\n var cur = display.view[i],\n wrapping = cm.options.lineWrapping;\n var height = void 0,\n width = 0;\n\n if (cur.hidden) {\n continue;\n }\n\n if (ie && ie_version < 8) {\n var bot = cur.node.offsetTop + cur.node.offsetHeight;\n height = bot - prevBottom;\n prevBottom = bot;\n } else {\n var box = cur.node.getBoundingClientRect();\n height = box.bottom - box.top; // Check that lines don't extend past the right of the current\n // editor width\n\n if (!wrapping && cur.text.firstChild) {\n width = cur.text.firstChild.getBoundingClientRect().right - box.left - 1;\n }\n }\n\n var diff = cur.line.height - height;\n\n if (diff > .005 || diff < -.005) {\n updateLineHeight(cur.line, height);\n updateWidgetHeight(cur.line);\n\n if (cur.rest) {\n for (var j = 0; j < cur.rest.length; j++) {\n updateWidgetHeight(cur.rest[j]);\n }\n }\n }\n\n if (width > cm.display.sizerWidth) {\n var chWidth = Math.ceil(width / charWidth(cm.display));\n\n if (chWidth > cm.display.maxLineLength) {\n cm.display.maxLineLength = chWidth;\n cm.display.maxLine = cur.line;\n cm.display.maxLineChanged = true;\n }\n }\n }\n } // Read and store the height of line widgets associated with the\n // given line.\n\n\n function updateWidgetHeight(line) {\n if (line.widgets) {\n for (var i = 0; i < line.widgets.length; ++i) {\n var w = line.widgets[i],\n parent = w.node.parentNode;\n\n if (parent) {\n w.height = parent.offsetHeight;\n }\n }\n }\n } // Compute the lines that are visible in a given viewport (defaults\n // the the current scroll position). viewport may contain top,\n // height, and ensure (see op.scrollToPos) properties.\n\n\n function visibleLines(display, doc, viewport) {\n var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop;\n top = Math.floor(top - paddingTop(display));\n var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight;\n\n var from = _lineAtHeight(doc, top),\n to = _lineAtHeight(doc, bottom); // Ensure is a {from: {line, ch}, to: {line, ch}} object, and\n // forces those lines into the viewport (if possible).\n\n\n if (viewport && viewport.ensure) {\n var ensureFrom = viewport.ensure.from.line,\n ensureTo = viewport.ensure.to.line;\n\n if (ensureFrom < from) {\n from = ensureFrom;\n to = _lineAtHeight(doc, _heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight);\n } else if (Math.min(ensureTo, doc.lastLine()) >= to) {\n from = _lineAtHeight(doc, _heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight);\n to = ensureTo;\n }\n }\n\n return {\n from: from,\n to: Math.max(to, from + 1)\n };\n } // SCROLLING THINGS INTO VIEW\n // If an editor sits on the top or bottom of the window, partially\n // scrolled out of view, this ensures that the cursor is visible.\n\n\n function maybeScrollWindow(cm, rect) {\n if (signalDOMEvent(cm, \"scrollCursorIntoView\")) {\n return;\n }\n\n var display = cm.display,\n box = display.sizer.getBoundingClientRect(),\n doScroll = null;\n\n if (rect.top + box.top < 0) {\n doScroll = true;\n } else if (rect.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) {\n doScroll = false;\n }\n\n if (doScroll != null && !phantom) {\n var scrollNode = elt(\"div\", \"\\u200B\", null, \"position: absolute;\\n top: \" + (rect.top - display.viewOffset - paddingTop(cm.display)) + \"px;\\n height: \" + (rect.bottom - rect.top + scrollGap(cm) + display.barHeight) + \"px;\\n left: \" + rect.left + \"px; width: \" + Math.max(2, rect.right - rect.left) + \"px;\");\n cm.display.lineSpace.appendChild(scrollNode);\n scrollNode.scrollIntoView(doScroll);\n cm.display.lineSpace.removeChild(scrollNode);\n }\n } // Scroll a given position into view (immediately), verifying that\n // it actually became visible (as line heights are accurately\n // measured, the position of something may 'drift' during drawing).\n\n\n function scrollPosIntoView(cm, pos, end, margin) {\n if (margin == null) {\n margin = 0;\n }\n\n var rect;\n\n if (!cm.options.lineWrapping && pos == end) {\n // Set pos and end to the cursor positions around the character pos sticks to\n // If pos.sticky == \"before\", that is around pos.ch - 1, otherwise around pos.ch\n // If pos == Pos(_, 0, \"before\"), pos and end are unchanged\n pos = pos.ch ? Pos(pos.line, pos.sticky == \"before\" ? pos.ch - 1 : pos.ch, \"after\") : pos;\n end = pos.sticky == \"before\" ? Pos(pos.line, pos.ch + 1, \"before\") : pos;\n }\n\n for (var limit = 0; limit < 5; limit++) {\n var changed = false;\n\n var coords = _cursorCoords(cm, pos);\n\n var endCoords = !end || end == pos ? coords : _cursorCoords(cm, end);\n rect = {\n left: Math.min(coords.left, endCoords.left),\n top: Math.min(coords.top, endCoords.top) - margin,\n right: Math.max(coords.left, endCoords.left),\n bottom: Math.max(coords.bottom, endCoords.bottom) + margin\n };\n var scrollPos = calculateScrollPos(cm, rect);\n var startTop = cm.doc.scrollTop,\n startLeft = cm.doc.scrollLeft;\n\n if (scrollPos.scrollTop != null) {\n updateScrollTop(cm, scrollPos.scrollTop);\n\n if (Math.abs(cm.doc.scrollTop - startTop) > 1) {\n changed = true;\n }\n }\n\n if (scrollPos.scrollLeft != null) {\n setScrollLeft(cm, scrollPos.scrollLeft);\n\n if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) {\n changed = true;\n }\n }\n\n if (!changed) {\n break;\n }\n }\n\n return rect;\n } // Scroll a given set of coordinates into view (immediately).\n\n\n function scrollIntoView(cm, rect) {\n var scrollPos = calculateScrollPos(cm, rect);\n\n if (scrollPos.scrollTop != null) {\n updateScrollTop(cm, scrollPos.scrollTop);\n }\n\n if (scrollPos.scrollLeft != null) {\n setScrollLeft(cm, scrollPos.scrollLeft);\n }\n } // Calculate a new scroll position needed to scroll the given\n // rectangle into view. Returns an object with scrollTop and\n // scrollLeft properties. When these are undefined, the\n // vertical/horizontal position does not need to be adjusted.\n\n\n function calculateScrollPos(cm, rect) {\n var display = cm.display,\n snapMargin = textHeight(cm.display);\n\n if (rect.top < 0) {\n rect.top = 0;\n }\n\n var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop;\n var screen = displayHeight(cm),\n result = {};\n\n if (rect.bottom - rect.top > screen) {\n rect.bottom = rect.top + screen;\n }\n\n var docBottom = cm.doc.height + paddingVert(display);\n var atTop = rect.top < snapMargin,\n atBottom = rect.bottom > docBottom - snapMargin;\n\n if (rect.top < screentop) {\n result.scrollTop = atTop ? 0 : rect.top;\n } else if (rect.bottom > screentop + screen) {\n var newTop = Math.min(rect.top, (atBottom ? docBottom : rect.bottom) - screen);\n\n if (newTop != screentop) {\n result.scrollTop = newTop;\n }\n }\n\n var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft;\n var screenw = displayWidth(cm) - (cm.options.fixedGutter ? display.gutters.offsetWidth : 0);\n var tooWide = rect.right - rect.left > screenw;\n\n if (tooWide) {\n rect.right = rect.left + screenw;\n }\n\n if (rect.left < 10) {\n result.scrollLeft = 0;\n } else if (rect.left < screenleft) {\n result.scrollLeft = Math.max(0, rect.left - (tooWide ? 0 : 10));\n } else if (rect.right > screenw + screenleft - 3) {\n result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw;\n }\n\n return result;\n } // Store a relative adjustment to the scroll position in the current\n // operation (to be applied when the operation finishes).\n\n\n function addToScrollTop(cm, top) {\n if (top == null) {\n return;\n }\n\n resolveScrollToPos(cm);\n cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top;\n } // Make sure that at the end of the operation the current cursor is\n // shown.\n\n\n function ensureCursorVisible(cm) {\n resolveScrollToPos(cm);\n var cur = cm.getCursor();\n cm.curOp.scrollToPos = {\n from: cur,\n to: cur,\n margin: cm.options.cursorScrollMargin\n };\n }\n\n function scrollToCoords(cm, x, y) {\n if (x != null || y != null) {\n resolveScrollToPos(cm);\n }\n\n if (x != null) {\n cm.curOp.scrollLeft = x;\n }\n\n if (y != null) {\n cm.curOp.scrollTop = y;\n }\n }\n\n function scrollToRange(cm, range) {\n resolveScrollToPos(cm);\n cm.curOp.scrollToPos = range;\n } // When an operation has its scrollToPos property set, and another\n // scroll action is applied before the end of the operation, this\n // 'simulates' scrolling that position into view in a cheap way, so\n // that the effect of intermediate scroll commands is not ignored.\n\n\n function resolveScrollToPos(cm) {\n var range = cm.curOp.scrollToPos;\n\n if (range) {\n cm.curOp.scrollToPos = null;\n var from = estimateCoords(cm, range.from),\n to = estimateCoords(cm, range.to);\n scrollToCoordsRange(cm, from, to, range.margin);\n }\n }\n\n function scrollToCoordsRange(cm, from, to, margin) {\n var sPos = calculateScrollPos(cm, {\n left: Math.min(from.left, to.left),\n top: Math.min(from.top, to.top) - margin,\n right: Math.max(from.right, to.right),\n bottom: Math.max(from.bottom, to.bottom) + margin\n });\n scrollToCoords(cm, sPos.scrollLeft, sPos.scrollTop);\n } // Sync the scrollable area and scrollbars, ensure the viewport\n // covers the visible area.\n\n\n function updateScrollTop(cm, val) {\n if (Math.abs(cm.doc.scrollTop - val) < 2) {\n return;\n }\n\n if (!gecko) {\n updateDisplaySimple(cm, {\n top: val\n });\n }\n\n setScrollTop(cm, val, true);\n\n if (gecko) {\n updateDisplaySimple(cm);\n }\n\n startWorker(cm, 100);\n }\n\n function setScrollTop(cm, val, forceScroll) {\n val = Math.max(0, Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight, val));\n\n if (cm.display.scroller.scrollTop == val && !forceScroll) {\n return;\n }\n\n cm.doc.scrollTop = val;\n cm.display.scrollbars.setScrollTop(val);\n\n if (cm.display.scroller.scrollTop != val) {\n cm.display.scroller.scrollTop = val;\n }\n } // Sync scroller and scrollbar, ensure the gutter elements are\n // aligned.\n\n\n function setScrollLeft(cm, val, isScroller, forceScroll) {\n val = Math.max(0, Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth));\n\n if ((isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) && !forceScroll) {\n return;\n }\n\n cm.doc.scrollLeft = val;\n alignHorizontally(cm);\n\n if (cm.display.scroller.scrollLeft != val) {\n cm.display.scroller.scrollLeft = val;\n }\n\n cm.display.scrollbars.setScrollLeft(val);\n } // SCROLLBARS\n // Prepare DOM reads needed to update the scrollbars. Done in one\n // shot to minimize update/measure roundtrips.\n\n\n function measureForScrollbars(cm) {\n var d = cm.display,\n gutterW = d.gutters.offsetWidth;\n var docH = Math.round(cm.doc.height + paddingVert(cm.display));\n return {\n clientHeight: d.scroller.clientHeight,\n viewHeight: d.wrapper.clientHeight,\n scrollWidth: d.scroller.scrollWidth,\n clientWidth: d.scroller.clientWidth,\n viewWidth: d.wrapper.clientWidth,\n barLeft: cm.options.fixedGutter ? gutterW : 0,\n docHeight: docH,\n scrollHeight: docH + scrollGap(cm) + d.barHeight,\n nativeBarWidth: d.nativeBarWidth,\n gutterWidth: gutterW\n };\n }\n\n var NativeScrollbars = function NativeScrollbars(place, scroll, cm) {\n this.cm = cm;\n var vert = this.vert = elt(\"div\", [elt(\"div\", null, null, \"min-width: 1px\")], \"CodeMirror-vscrollbar\");\n var horiz = this.horiz = elt(\"div\", [elt(\"div\", null, null, \"height: 100%; min-height: 1px\")], \"CodeMirror-hscrollbar\");\n vert.tabIndex = horiz.tabIndex = -1;\n place(vert);\n place(horiz);\n on(vert, \"scroll\", function () {\n if (vert.clientHeight) {\n scroll(vert.scrollTop, \"vertical\");\n }\n });\n on(horiz, \"scroll\", function () {\n if (horiz.clientWidth) {\n scroll(horiz.scrollLeft, \"horizontal\");\n }\n });\n this.checkedZeroWidth = false; // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8).\n\n if (ie && ie_version < 8) {\n this.horiz.style.minHeight = this.vert.style.minWidth = \"18px\";\n }\n };\n\n NativeScrollbars.prototype.update = function (measure) {\n var needsH = measure.scrollWidth > measure.clientWidth + 1;\n var needsV = measure.scrollHeight > measure.clientHeight + 1;\n var sWidth = measure.nativeBarWidth;\n\n if (needsV) {\n this.vert.style.display = \"block\";\n this.vert.style.bottom = needsH ? sWidth + \"px\" : \"0\";\n var totalHeight = measure.viewHeight - (needsH ? sWidth : 0); // A bug in IE8 can cause this value to be negative, so guard it.\n\n this.vert.firstChild.style.height = Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + \"px\";\n } else {\n this.vert.style.display = \"\";\n this.vert.firstChild.style.height = \"0\";\n }\n\n if (needsH) {\n this.horiz.style.display = \"block\";\n this.horiz.style.right = needsV ? sWidth + \"px\" : \"0\";\n this.horiz.style.left = measure.barLeft + \"px\";\n var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0);\n this.horiz.firstChild.style.width = Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + \"px\";\n } else {\n this.horiz.style.display = \"\";\n this.horiz.firstChild.style.width = \"0\";\n }\n\n if (!this.checkedZeroWidth && measure.clientHeight > 0) {\n if (sWidth == 0) {\n this.zeroWidthHack();\n }\n\n this.checkedZeroWidth = true;\n }\n\n return {\n right: needsV ? sWidth : 0,\n bottom: needsH ? sWidth : 0\n };\n };\n\n NativeScrollbars.prototype.setScrollLeft = function (pos) {\n if (this.horiz.scrollLeft != pos) {\n this.horiz.scrollLeft = pos;\n }\n\n if (this.disableHoriz) {\n this.enableZeroWidthBar(this.horiz, this.disableHoriz, \"horiz\");\n }\n };\n\n NativeScrollbars.prototype.setScrollTop = function (pos) {\n if (this.vert.scrollTop != pos) {\n this.vert.scrollTop = pos;\n }\n\n if (this.disableVert) {\n this.enableZeroWidthBar(this.vert, this.disableVert, \"vert\");\n }\n };\n\n NativeScrollbars.prototype.zeroWidthHack = function () {\n var w = mac && !mac_geMountainLion ? \"12px\" : \"18px\";\n this.horiz.style.height = this.vert.style.width = w;\n this.horiz.style.pointerEvents = this.vert.style.pointerEvents = \"none\";\n this.disableHoriz = new Delayed();\n this.disableVert = new Delayed();\n };\n\n NativeScrollbars.prototype.enableZeroWidthBar = function (bar, delay, type) {\n bar.style.pointerEvents = \"auto\";\n\n function maybeDisable() {\n // To find out whether the scrollbar is still visible, we\n // check whether the element under the pixel in the bottom\n // right corner of the scrollbar box is the scrollbar box\n // itself (when the bar is still visible) or its filler child\n // (when the bar is hidden). If it is still visible, we keep\n // it enabled, if it's hidden, we disable pointer events.\n var box = bar.getBoundingClientRect();\n var elt = type == \"vert\" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2) : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1);\n\n if (elt != bar) {\n bar.style.pointerEvents = \"none\";\n } else {\n delay.set(1000, maybeDisable);\n }\n }\n\n delay.set(1000, maybeDisable);\n };\n\n NativeScrollbars.prototype.clear = function () {\n var parent = this.horiz.parentNode;\n parent.removeChild(this.horiz);\n parent.removeChild(this.vert);\n };\n\n var NullScrollbars = function NullScrollbars() {};\n\n NullScrollbars.prototype.update = function () {\n return {\n bottom: 0,\n right: 0\n };\n };\n\n NullScrollbars.prototype.setScrollLeft = function () {};\n\n NullScrollbars.prototype.setScrollTop = function () {};\n\n NullScrollbars.prototype.clear = function () {};\n\n function updateScrollbars(cm, measure) {\n if (!measure) {\n measure = measureForScrollbars(cm);\n }\n\n var startWidth = cm.display.barWidth,\n startHeight = cm.display.barHeight;\n updateScrollbarsInner(cm, measure);\n\n for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) {\n if (startWidth != cm.display.barWidth && cm.options.lineWrapping) {\n updateHeightsInViewport(cm);\n }\n\n updateScrollbarsInner(cm, measureForScrollbars(cm));\n startWidth = cm.display.barWidth;\n startHeight = cm.display.barHeight;\n }\n } // Re-synchronize the fake scrollbars with the actual size of the\n // content.\n\n\n function updateScrollbarsInner(cm, measure) {\n var d = cm.display;\n var sizes = d.scrollbars.update(measure);\n d.sizer.style.paddingRight = (d.barWidth = sizes.right) + \"px\";\n d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + \"px\";\n d.heightForcer.style.borderBottom = sizes.bottom + \"px solid transparent\";\n\n if (sizes.right && sizes.bottom) {\n d.scrollbarFiller.style.display = \"block\";\n d.scrollbarFiller.style.height = sizes.bottom + \"px\";\n d.scrollbarFiller.style.width = sizes.right + \"px\";\n } else {\n d.scrollbarFiller.style.display = \"\";\n }\n\n if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) {\n d.gutterFiller.style.display = \"block\";\n d.gutterFiller.style.height = sizes.bottom + \"px\";\n d.gutterFiller.style.width = measure.gutterWidth + \"px\";\n } else {\n d.gutterFiller.style.display = \"\";\n }\n }\n\n var scrollbarModel = {\n \"native\": NativeScrollbars,\n \"null\": NullScrollbars\n };\n\n function initScrollbars(cm) {\n if (cm.display.scrollbars) {\n cm.display.scrollbars.clear();\n\n if (cm.display.scrollbars.addClass) {\n rmClass(cm.display.wrapper, cm.display.scrollbars.addClass);\n }\n }\n\n cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](function (node) {\n cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller); // Prevent clicks in the scrollbars from killing focus\n\n on(node, \"mousedown\", function () {\n if (cm.state.focused) {\n setTimeout(function () {\n return cm.display.input.focus();\n }, 0);\n }\n });\n node.setAttribute(\"cm-not-content\", \"true\");\n }, function (pos, axis) {\n if (axis == \"horizontal\") {\n setScrollLeft(cm, pos);\n } else {\n updateScrollTop(cm, pos);\n }\n }, cm);\n\n if (cm.display.scrollbars.addClass) {\n addClass(cm.display.wrapper, cm.display.scrollbars.addClass);\n }\n } // Operations are used to wrap a series of changes to the editor\n // state in such a way that each change won't have to update the\n // cursor and display (which would be awkward, slow, and\n // error-prone). Instead, display updates are batched and then all\n // combined and executed at once.\n\n\n var nextOpId = 0; // Start a new operation.\n\n function _startOperation(cm) {\n cm.curOp = {\n cm: cm,\n viewChanged: false,\n // Flag that indicates that lines might need to be redrawn\n startHeight: cm.doc.height,\n // Used to detect need to update scrollbar\n forceUpdate: false,\n // Used to force a redraw\n updateInput: 0,\n // Whether to reset the input textarea\n typing: false,\n // Whether this reset should be careful to leave existing text (for compositing)\n changeObjs: null,\n // Accumulated changes, for firing change events\n cursorActivityHandlers: null,\n // Set of handlers to fire cursorActivity on\n cursorActivityCalled: 0,\n // Tracks which cursorActivity handlers have been called already\n selectionChanged: false,\n // Whether the selection needs to be redrawn\n updateMaxLine: false,\n // Set when the widest line needs to be determined anew\n scrollLeft: null,\n scrollTop: null,\n // Intermediate scroll position, not pushed to DOM yet\n scrollToPos: null,\n // Used to scroll to a specific position\n focus: false,\n id: ++nextOpId // Unique ID\n\n };\n pushOperation(cm.curOp);\n } // Finish an operation, updating the display and signalling delayed events\n\n\n function _endOperation(cm) {\n var op = cm.curOp;\n\n if (op) {\n finishOperation(op, function (group) {\n for (var i = 0; i < group.ops.length; i++) {\n group.ops[i].cm.curOp = null;\n }\n\n endOperations(group);\n });\n }\n } // The DOM updates done when an operation finishes are batched so\n // that the minimum number of relayouts are required.\n\n\n function endOperations(group) {\n var ops = group.ops;\n\n for (var i = 0; i < ops.length; i++) // Read DOM\n {\n endOperation_R1(ops[i]);\n }\n\n for (var i$1 = 0; i$1 < ops.length; i$1++) // Write DOM (maybe)\n {\n endOperation_W1(ops[i$1]);\n }\n\n for (var i$2 = 0; i$2 < ops.length; i$2++) // Read DOM\n {\n endOperation_R2(ops[i$2]);\n }\n\n for (var i$3 = 0; i$3 < ops.length; i$3++) // Write DOM (maybe)\n {\n endOperation_W2(ops[i$3]);\n }\n\n for (var i$4 = 0; i$4 < ops.length; i$4++) // Read DOM\n {\n endOperation_finish(ops[i$4]);\n }\n }\n\n function endOperation_R1(op) {\n var cm = op.cm,\n display = cm.display;\n maybeClipScrollbars(cm);\n\n if (op.updateMaxLine) {\n findMaxLine(cm);\n }\n\n op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null || op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom || op.scrollToPos.to.line >= display.viewTo) || display.maxLineChanged && cm.options.lineWrapping;\n op.update = op.mustUpdate && new DisplayUpdate(cm, op.mustUpdate && {\n top: op.scrollTop,\n ensure: op.scrollToPos\n }, op.forceUpdate);\n }\n\n function endOperation_W1(op) {\n op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update);\n }\n\n function endOperation_R2(op) {\n var cm = op.cm,\n display = cm.display;\n\n if (op.updatedDisplay) {\n updateHeightsInViewport(cm);\n }\n\n op.barMeasure = measureForScrollbars(cm); // If the max line changed since it was last measured, measure it,\n // and ensure the document's width matches it.\n // updateDisplay_W2 will use these properties to do the actual resizing\n\n if (display.maxLineChanged && !cm.options.lineWrapping) {\n op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3;\n cm.display.sizerWidth = op.adjustWidthTo;\n op.barMeasure.scrollWidth = Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth);\n op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm));\n }\n\n if (op.updatedDisplay || op.selectionChanged) {\n op.preparedSelection = display.input.prepareSelection();\n }\n }\n\n function endOperation_W2(op) {\n var cm = op.cm;\n\n if (op.adjustWidthTo != null) {\n cm.display.sizer.style.minWidth = op.adjustWidthTo + \"px\";\n\n if (op.maxScrollLeft < cm.doc.scrollLeft) {\n setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true);\n }\n\n cm.display.maxLineChanged = false;\n }\n\n var takeFocus = op.focus && op.focus == activeElt();\n\n if (op.preparedSelection) {\n cm.display.input.showSelection(op.preparedSelection, takeFocus);\n }\n\n if (op.updatedDisplay || op.startHeight != cm.doc.height) {\n updateScrollbars(cm, op.barMeasure);\n }\n\n if (op.updatedDisplay) {\n setDocumentHeight(cm, op.barMeasure);\n }\n\n if (op.selectionChanged) {\n restartBlink(cm);\n }\n\n if (cm.state.focused && op.updateInput) {\n cm.display.input.reset(op.typing);\n }\n\n if (takeFocus) {\n ensureFocus(op.cm);\n }\n }\n\n function endOperation_finish(op) {\n var cm = op.cm,\n display = cm.display,\n doc = cm.doc;\n\n if (op.updatedDisplay) {\n postUpdateDisplay(cm, op.update);\n } // Abort mouse wheel delta measurement, when scrolling explicitly\n\n\n if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos)) {\n display.wheelStartX = display.wheelStartY = null;\n } // Propagate the scroll position to the actual DOM scroller\n\n\n if (op.scrollTop != null) {\n setScrollTop(cm, op.scrollTop, op.forceScroll);\n }\n\n if (op.scrollLeft != null) {\n setScrollLeft(cm, op.scrollLeft, true, true);\n } // If we need to scroll a specific position into view, do so.\n\n\n if (op.scrollToPos) {\n var rect = scrollPosIntoView(cm, _clipPos(doc, op.scrollToPos.from), _clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin);\n maybeScrollWindow(cm, rect);\n } // Fire events for markers that are hidden/unidden by editing or\n // undoing\n\n\n var hidden = op.maybeHiddenMarkers,\n unhidden = op.maybeUnhiddenMarkers;\n\n if (hidden) {\n for (var i = 0; i < hidden.length; ++i) {\n if (!hidden[i].lines.length) {\n signal(hidden[i], \"hide\");\n }\n }\n }\n\n if (unhidden) {\n for (var i$1 = 0; i$1 < unhidden.length; ++i$1) {\n if (unhidden[i$1].lines.length) {\n signal(unhidden[i$1], \"unhide\");\n }\n }\n }\n\n if (display.wrapper.offsetHeight) {\n doc.scrollTop = cm.display.scroller.scrollTop;\n } // Fire change events, and delayed event handlers\n\n\n if (op.changeObjs) {\n signal(cm, \"changes\", cm, op.changeObjs);\n }\n\n if (op.update) {\n op.update.finish();\n }\n } // Run the given function in an operation\n\n\n function runInOp(cm, f) {\n if (cm.curOp) {\n return f();\n }\n\n _startOperation(cm);\n\n try {\n return f();\n } finally {\n _endOperation(cm);\n }\n } // Wraps a function in an operation. Returns the wrapped function.\n\n\n function operation(cm, f) {\n return function () {\n if (cm.curOp) {\n return f.apply(cm, arguments);\n }\n\n _startOperation(cm);\n\n try {\n return f.apply(cm, arguments);\n } finally {\n _endOperation(cm);\n }\n };\n } // Used to add methods to editor and doc instances, wrapping them in\n // operations.\n\n\n function methodOp(f) {\n return function () {\n if (this.curOp) {\n return f.apply(this, arguments);\n }\n\n _startOperation(this);\n\n try {\n return f.apply(this, arguments);\n } finally {\n _endOperation(this);\n }\n };\n }\n\n function docMethodOp(f) {\n return function () {\n var cm = this.cm;\n\n if (!cm || cm.curOp) {\n return f.apply(this, arguments);\n }\n\n _startOperation(cm);\n\n try {\n return f.apply(this, arguments);\n } finally {\n _endOperation(cm);\n }\n };\n } // HIGHLIGHT WORKER\n\n\n function startWorker(cm, time) {\n if (cm.doc.highlightFrontier < cm.display.viewTo) {\n cm.state.highlight.set(time, bind(highlightWorker, cm));\n }\n }\n\n function highlightWorker(cm) {\n var doc = cm.doc;\n\n if (doc.highlightFrontier >= cm.display.viewTo) {\n return;\n }\n\n var end = +new Date() + cm.options.workTime;\n var context = getContextBefore(cm, doc.highlightFrontier);\n var changedLines = [];\n doc.iter(context.line, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function (line) {\n if (context.line >= cm.display.viewFrom) {\n // Visible\n var oldStyles = line.styles;\n var resetState = line.text.length > cm.options.maxHighlightLength ? copyState(doc.mode, context.state) : null;\n var highlighted = highlightLine(cm, line, context, true);\n\n if (resetState) {\n context.state = resetState;\n }\n\n line.styles = highlighted.styles;\n var oldCls = line.styleClasses,\n newCls = highlighted.classes;\n\n if (newCls) {\n line.styleClasses = newCls;\n } else if (oldCls) {\n line.styleClasses = null;\n }\n\n var ischange = !oldStyles || oldStyles.length != line.styles.length || oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass);\n\n for (var i = 0; !ischange && i < oldStyles.length; ++i) {\n ischange = oldStyles[i] != line.styles[i];\n }\n\n if (ischange) {\n changedLines.push(context.line);\n }\n\n line.stateAfter = context.save();\n context.nextLine();\n } else {\n if (line.text.length <= cm.options.maxHighlightLength) {\n processLine(cm, line.text, context);\n }\n\n line.stateAfter = context.line % 5 == 0 ? context.save() : null;\n context.nextLine();\n }\n\n if (+new Date() > end) {\n startWorker(cm, cm.options.workDelay);\n return true;\n }\n });\n doc.highlightFrontier = context.line;\n doc.modeFrontier = Math.max(doc.modeFrontier, context.line);\n\n if (changedLines.length) {\n runInOp(cm, function () {\n for (var i = 0; i < changedLines.length; i++) {\n regLineChange(cm, changedLines[i], \"text\");\n }\n });\n }\n } // DISPLAY DRAWING\n\n\n var DisplayUpdate = function DisplayUpdate(cm, viewport, force) {\n var display = cm.display;\n this.viewport = viewport; // Store some values that we'll need later (but don't want to force a relayout for)\n\n this.visible = visibleLines(display, cm.doc, viewport);\n this.editorIsHidden = !display.wrapper.offsetWidth;\n this.wrapperHeight = display.wrapper.clientHeight;\n this.wrapperWidth = display.wrapper.clientWidth;\n this.oldDisplayWidth = displayWidth(cm);\n this.force = force;\n this.dims = getDimensions(cm);\n this.events = [];\n };\n\n DisplayUpdate.prototype.signal = function (emitter, type) {\n if (hasHandler(emitter, type)) {\n this.events.push(arguments);\n }\n };\n\n DisplayUpdate.prototype.finish = function () {\n for (var i = 0; i < this.events.length; i++) {\n signal.apply(null, this.events[i]);\n }\n };\n\n function maybeClipScrollbars(cm) {\n var display = cm.display;\n\n if (!display.scrollbarsClipped && display.scroller.offsetWidth) {\n display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth;\n display.heightForcer.style.height = scrollGap(cm) + \"px\";\n display.sizer.style.marginBottom = -display.nativeBarWidth + \"px\";\n display.sizer.style.borderRightWidth = scrollGap(cm) + \"px\";\n display.scrollbarsClipped = true;\n }\n }\n\n function selectionSnapshot(cm) {\n if (cm.hasFocus()) {\n return null;\n }\n\n var active = activeElt();\n\n if (!active || !contains(cm.display.lineDiv, active)) {\n return null;\n }\n\n var result = {\n activeElt: active\n };\n\n if (window.getSelection) {\n var sel = window.getSelection();\n\n if (sel.anchorNode && sel.extend && contains(cm.display.lineDiv, sel.anchorNode)) {\n result.anchorNode = sel.anchorNode;\n result.anchorOffset = sel.anchorOffset;\n result.focusNode = sel.focusNode;\n result.focusOffset = sel.focusOffset;\n }\n }\n\n return result;\n }\n\n function restoreSelection(snapshot) {\n if (!snapshot || !snapshot.activeElt || snapshot.activeElt == activeElt()) {\n return;\n }\n\n snapshot.activeElt.focus();\n\n if (!/^(INPUT|TEXTAREA)$/.test(snapshot.activeElt.nodeName) && snapshot.anchorNode && contains(document.body, snapshot.anchorNode) && contains(document.body, snapshot.focusNode)) {\n var sel = window.getSelection(),\n range = document.createRange();\n range.setEnd(snapshot.anchorNode, snapshot.anchorOffset);\n range.collapse(false);\n sel.removeAllRanges();\n sel.addRange(range);\n sel.extend(snapshot.focusNode, snapshot.focusOffset);\n }\n } // Does the actual updating of the line display. Bails out\n // (returning false) when there is nothing to be done and forced is\n // false.\n\n\n function updateDisplayIfNeeded(cm, update) {\n var display = cm.display,\n doc = cm.doc;\n\n if (update.editorIsHidden) {\n resetView(cm);\n return false;\n } // Bail out if the visible area is already rendered and nothing changed.\n\n\n if (!update.force && update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo && (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) && display.renderedView == display.view && countDirtyView(cm) == 0) {\n return false;\n }\n\n if (maybeUpdateLineNumberWidth(cm)) {\n resetView(cm);\n update.dims = getDimensions(cm);\n } // Compute a suitable new viewport (from & to)\n\n\n var end = doc.first + doc.size;\n var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first);\n var to = Math.min(end, update.visible.to + cm.options.viewportMargin);\n\n if (display.viewFrom < from && from - display.viewFrom < 20) {\n from = Math.max(doc.first, display.viewFrom);\n }\n\n if (display.viewTo > to && display.viewTo - to < 20) {\n to = Math.min(end, display.viewTo);\n }\n\n if (sawCollapsedSpans) {\n from = visualLineNo(cm.doc, from);\n to = visualLineEndNo(cm.doc, to);\n }\n\n var different = from != display.viewFrom || to != display.viewTo || display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth;\n adjustView(cm, from, to);\n display.viewOffset = _heightAtLine(getLine(cm.doc, display.viewFrom)); // Position the mover div to align with the current scroll position\n\n cm.display.mover.style.top = display.viewOffset + \"px\";\n var toUpdate = countDirtyView(cm);\n\n if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view && (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo)) {\n return false;\n } // For big changes, we hide the enclosing element during the\n // update, since that speeds up the operations on most browsers.\n\n\n var selSnapshot = selectionSnapshot(cm);\n\n if (toUpdate > 4) {\n display.lineDiv.style.display = \"none\";\n }\n\n patchDisplay(cm, display.updateLineNumbers, update.dims);\n\n if (toUpdate > 4) {\n display.lineDiv.style.display = \"\";\n }\n\n display.renderedView = display.view; // There might have been a widget with a focused element that got\n // hidden or updated, if so re-focus it.\n\n restoreSelection(selSnapshot); // Prevent selection and cursors from interfering with the scroll\n // width and height.\n\n removeChildren(display.cursorDiv);\n removeChildren(display.selectionDiv);\n display.gutters.style.height = display.sizer.style.minHeight = 0;\n\n if (different) {\n display.lastWrapHeight = update.wrapperHeight;\n display.lastWrapWidth = update.wrapperWidth;\n startWorker(cm, 400);\n }\n\n display.updateLineNumbers = null;\n return true;\n }\n\n function postUpdateDisplay(cm, update) {\n var viewport = update.viewport;\n\n for (var first = true;; first = false) {\n if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) {\n // Clip forced viewport to actual scrollable area.\n if (viewport && viewport.top != null) {\n viewport = {\n top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)\n };\n } // Updated line heights might result in the drawn area not\n // actually covering the viewport. Keep looping until it does.\n\n\n update.visible = visibleLines(cm.display, cm.doc, viewport);\n\n if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo) {\n break;\n }\n } else if (first) {\n update.visible = visibleLines(cm.display, cm.doc, viewport);\n }\n\n if (!updateDisplayIfNeeded(cm, update)) {\n break;\n }\n\n updateHeightsInViewport(cm);\n var barMeasure = measureForScrollbars(cm);\n updateSelection(cm);\n updateScrollbars(cm, barMeasure);\n setDocumentHeight(cm, barMeasure);\n update.force = false;\n }\n\n update.signal(cm, \"update\", cm);\n\n if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) {\n update.signal(cm, \"viewportChange\", cm, cm.display.viewFrom, cm.display.viewTo);\n cm.display.reportedViewFrom = cm.display.viewFrom;\n cm.display.reportedViewTo = cm.display.viewTo;\n }\n }\n\n function updateDisplaySimple(cm, viewport) {\n var update = new DisplayUpdate(cm, viewport);\n\n if (updateDisplayIfNeeded(cm, update)) {\n updateHeightsInViewport(cm);\n postUpdateDisplay(cm, update);\n var barMeasure = measureForScrollbars(cm);\n updateSelection(cm);\n updateScrollbars(cm, barMeasure);\n setDocumentHeight(cm, barMeasure);\n update.finish();\n }\n } // Sync the actual display DOM structure with display.view, removing\n // nodes for lines that are no longer in view, and creating the ones\n // that are not there yet, and updating the ones that are out of\n // date.\n\n\n function patchDisplay(cm, updateNumbersFrom, dims) {\n var display = cm.display,\n lineNumbers = cm.options.lineNumbers;\n var container = display.lineDiv,\n cur = container.firstChild;\n\n function rm(node) {\n var next = node.nextSibling; // Works around a throw-scroll bug in OS X Webkit\n\n if (webkit && mac && cm.display.currentWheelTarget == node) {\n node.style.display = \"none\";\n } else {\n node.parentNode.removeChild(node);\n }\n\n return next;\n }\n\n var view = display.view,\n lineN = display.viewFrom; // Loop over the elements in the view, syncing cur (the DOM nodes\n // in display.lineDiv) with the view as we go.\n\n for (var i = 0; i < view.length; i++) {\n var lineView = view[i];\n if (lineView.hidden) ;else if (!lineView.node || lineView.node.parentNode != container) {\n // Not drawn yet\n var node = buildLineElement(cm, lineView, lineN, dims);\n container.insertBefore(node, cur);\n } else {\n // Already drawn\n while (cur != lineView.node) {\n cur = rm(cur);\n }\n\n var updateNumber = lineNumbers && updateNumbersFrom != null && updateNumbersFrom <= lineN && lineView.lineNumber;\n\n if (lineView.changes) {\n if (indexOf(lineView.changes, \"gutter\") > -1) {\n updateNumber = false;\n }\n\n updateLineForChanges(cm, lineView, lineN, dims);\n }\n\n if (updateNumber) {\n removeChildren(lineView.lineNumber);\n lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN)));\n }\n\n cur = lineView.node.nextSibling;\n }\n lineN += lineView.size;\n }\n\n while (cur) {\n cur = rm(cur);\n }\n }\n\n function updateGutterSpace(display) {\n var width = display.gutters.offsetWidth;\n display.sizer.style.marginLeft = width + \"px\";\n }\n\n function setDocumentHeight(cm, measure) {\n cm.display.sizer.style.minHeight = measure.docHeight + \"px\";\n cm.display.heightForcer.style.top = measure.docHeight + \"px\";\n cm.display.gutters.style.height = measure.docHeight + cm.display.barHeight + scrollGap(cm) + \"px\";\n } // Re-align line numbers and gutter marks to compensate for\n // horizontal scrolling.\n\n\n function alignHorizontally(cm) {\n var display = cm.display,\n view = display.view;\n\n if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) {\n return;\n }\n\n var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft;\n var gutterW = display.gutters.offsetWidth,\n left = comp + \"px\";\n\n for (var i = 0; i < view.length; i++) {\n if (!view[i].hidden) {\n if (cm.options.fixedGutter) {\n if (view[i].gutter) {\n view[i].gutter.style.left = left;\n }\n\n if (view[i].gutterBackground) {\n view[i].gutterBackground.style.left = left;\n }\n }\n\n var align = view[i].alignable;\n\n if (align) {\n for (var j = 0; j < align.length; j++) {\n align[j].style.left = left;\n }\n }\n }\n }\n\n if (cm.options.fixedGutter) {\n display.gutters.style.left = comp + gutterW + \"px\";\n }\n } // Used to ensure that the line number gutter is still the right\n // size for the current document size. Returns true when an update\n // is needed.\n\n\n function maybeUpdateLineNumberWidth(cm) {\n if (!cm.options.lineNumbers) {\n return false;\n }\n\n var doc = cm.doc,\n last = lineNumberFor(cm.options, doc.first + doc.size - 1),\n display = cm.display;\n\n if (last.length != display.lineNumChars) {\n var test = display.measure.appendChild(elt(\"div\", [elt(\"div\", last)], \"CodeMirror-linenumber CodeMirror-gutter-elt\"));\n var innerW = test.firstChild.offsetWidth,\n padding = test.offsetWidth - innerW;\n display.lineGutter.style.width = \"\";\n display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1;\n display.lineNumWidth = display.lineNumInnerWidth + padding;\n display.lineNumChars = display.lineNumInnerWidth ? last.length : -1;\n display.lineGutter.style.width = display.lineNumWidth + \"px\";\n updateGutterSpace(cm.display);\n return true;\n }\n\n return false;\n }\n\n function getGutters(gutters, lineNumbers) {\n var result = [],\n sawLineNumbers = false;\n\n for (var i = 0; i < gutters.length; i++) {\n var name = gutters[i],\n style = null;\n\n if (typeof name != \"string\") {\n style = name.style;\n name = name.className;\n }\n\n if (name == \"CodeMirror-linenumbers\") {\n if (!lineNumbers) {\n continue;\n } else {\n sawLineNumbers = true;\n }\n }\n\n result.push({\n className: name,\n style: style\n });\n }\n\n if (lineNumbers && !sawLineNumbers) {\n result.push({\n className: \"CodeMirror-linenumbers\",\n style: null\n });\n }\n\n return result;\n } // Rebuild the gutter elements, ensure the margin to the left of the\n // code matches their width.\n\n\n function renderGutters(display) {\n var gutters = display.gutters,\n specs = display.gutterSpecs;\n removeChildren(gutters);\n display.lineGutter = null;\n\n for (var i = 0; i < specs.length; ++i) {\n var ref = specs[i];\n var className = ref.className;\n var style = ref.style;\n var gElt = gutters.appendChild(elt(\"div\", null, \"CodeMirror-gutter \" + className));\n\n if (style) {\n gElt.style.cssText = style;\n }\n\n if (className == \"CodeMirror-linenumbers\") {\n display.lineGutter = gElt;\n gElt.style.width = (display.lineNumWidth || 1) + \"px\";\n }\n }\n\n gutters.style.display = specs.length ? \"\" : \"none\";\n updateGutterSpace(display);\n }\n\n function updateGutters(cm) {\n renderGutters(cm.display);\n regChange(cm);\n alignHorizontally(cm);\n } // The display handles the DOM integration, both for input reading\n // and content drawing. It holds references to DOM nodes and\n // display-related state.\n\n\n function Display(place, doc, input, options) {\n var d = this;\n this.input = input; // Covers bottom-right square when both scrollbars are present.\n\n d.scrollbarFiller = elt(\"div\", null, \"CodeMirror-scrollbar-filler\");\n d.scrollbarFiller.setAttribute(\"cm-not-content\", \"true\"); // Covers bottom of gutter when coverGutterNextToScrollbar is on\n // and h scrollbar is present.\n\n d.gutterFiller = elt(\"div\", null, \"CodeMirror-gutter-filler\");\n d.gutterFiller.setAttribute(\"cm-not-content\", \"true\"); // Will contain the actual code, positioned to cover the viewport.\n\n d.lineDiv = eltP(\"div\", null, \"CodeMirror-code\"); // Elements are added to these to represent selection and cursors.\n\n d.selectionDiv = elt(\"div\", null, null, \"position: relative; z-index: 1\");\n d.cursorDiv = elt(\"div\", null, \"CodeMirror-cursors\"); // A visibility: hidden element used to find the size of things.\n\n d.measure = elt(\"div\", null, \"CodeMirror-measure\"); // When lines outside of the viewport are measured, they are drawn in this.\n\n d.lineMeasure = elt(\"div\", null, \"CodeMirror-measure\"); // Wraps everything that needs to exist inside the vertically-padded coordinate system\n\n d.lineSpace = eltP(\"div\", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv], null, \"position: relative; outline: none\");\n var lines = eltP(\"div\", [d.lineSpace], \"CodeMirror-lines\"); // Moved around its parent to cover visible view.\n\n d.mover = elt(\"div\", [lines], null, \"position: relative\"); // Set to the height of the document, allowing scrolling.\n\n d.sizer = elt(\"div\", [d.mover], \"CodeMirror-sizer\");\n d.sizerWidth = null; // Behavior of elts with overflow: auto and padding is\n // inconsistent across browsers. This is used to ensure the\n // scrollable area is big enough.\n\n d.heightForcer = elt(\"div\", null, null, \"position: absolute; height: \" + scrollerGap + \"px; width: 1px;\"); // Will contain the gutters, if any.\n\n d.gutters = elt(\"div\", null, \"CodeMirror-gutters\");\n d.lineGutter = null; // Actual scrollable element.\n\n d.scroller = elt(\"div\", [d.sizer, d.heightForcer, d.gutters], \"CodeMirror-scroll\");\n d.scroller.setAttribute(\"tabIndex\", \"-1\"); // The element in which the editor lives.\n\n d.wrapper = elt(\"div\", [d.scrollbarFiller, d.gutterFiller, d.scroller], \"CodeMirror\"); // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported)\n\n if (ie && ie_version < 8) {\n d.gutters.style.zIndex = -1;\n d.scroller.style.paddingRight = 0;\n }\n\n if (!webkit && !(gecko && mobile)) {\n d.scroller.draggable = true;\n }\n\n if (place) {\n if (place.appendChild) {\n place.appendChild(d.wrapper);\n } else {\n place(d.wrapper);\n }\n } // Current rendered range (may be bigger than the view window).\n\n\n d.viewFrom = d.viewTo = doc.first;\n d.reportedViewFrom = d.reportedViewTo = doc.first; // Information about the rendered lines.\n\n d.view = [];\n d.renderedView = null; // Holds info about a single rendered line when it was rendered\n // for measurement, while not in view.\n\n d.externalMeasured = null; // Empty space (in pixels) above the view\n\n d.viewOffset = 0;\n d.lastWrapHeight = d.lastWrapWidth = 0;\n d.updateLineNumbers = null;\n d.nativeBarWidth = d.barHeight = d.barWidth = 0;\n d.scrollbarsClipped = false; // Used to only resize the line number gutter when necessary (when\n // the amount of lines crosses a boundary that makes its width change)\n\n d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null; // Set to true when a non-horizontal-scrolling line widget is\n // added. As an optimization, line widget aligning is skipped when\n // this is false.\n\n d.alignWidgets = false;\n d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null; // Tracks the maximum line length so that the horizontal scrollbar\n // can be kept static when scrolling.\n\n d.maxLine = null;\n d.maxLineLength = 0;\n d.maxLineChanged = false; // Used for measuring wheel scrolling granularity\n\n d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null; // True when shift is held down.\n\n d.shift = false; // Used to track whether anything happened since the context menu\n // was opened.\n\n d.selForContextMenu = null;\n d.activeTouch = null;\n d.gutterSpecs = getGutters(options.gutters, options.lineNumbers);\n renderGutters(d);\n input.init(d);\n } // Since the delta values reported on mouse wheel events are\n // unstandardized between browsers and even browser versions, and\n // generally horribly unpredictable, this code starts by measuring\n // the scroll effect that the first few mouse wheel events have,\n // and, from that, detects the way it can convert deltas to pixel\n // offsets afterwards.\n //\n // The reason we want to know the amount a wheel event will scroll\n // is that it gives us a chance to update the display before the\n // actual scrolling happens, reducing flickering.\n\n\n var wheelSamples = 0,\n wheelPixelsPerUnit = null; // Fill in a browser-detected starting value on browsers where we\n // know one. These don't have to be accurate -- the result of them\n // being wrong would just be a slight flicker on the first wheel\n // scroll (if it is large enough).\n\n if (ie) {\n wheelPixelsPerUnit = -.53;\n } else if (gecko) {\n wheelPixelsPerUnit = 15;\n } else if (chrome) {\n wheelPixelsPerUnit = -.7;\n } else if (safari) {\n wheelPixelsPerUnit = -1 / 3;\n }\n\n function wheelEventDelta(e) {\n var dx = e.wheelDeltaX,\n dy = e.wheelDeltaY;\n\n if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) {\n dx = e.detail;\n }\n\n if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) {\n dy = e.detail;\n } else if (dy == null) {\n dy = e.wheelDelta;\n }\n\n return {\n x: dx,\n y: dy\n };\n }\n\n function wheelEventPixels(e) {\n var delta = wheelEventDelta(e);\n delta.x *= wheelPixelsPerUnit;\n delta.y *= wheelPixelsPerUnit;\n return delta;\n }\n\n function onScrollWheel(cm, e) {\n var delta = wheelEventDelta(e),\n dx = delta.x,\n dy = delta.y;\n var display = cm.display,\n scroll = display.scroller; // Quit if there's nothing to scroll here\n\n var canScrollX = scroll.scrollWidth > scroll.clientWidth;\n var canScrollY = scroll.scrollHeight > scroll.clientHeight;\n\n if (!(dx && canScrollX || dy && canScrollY)) {\n return;\n } // Webkit browsers on OS X abort momentum scrolls when the target\n // of the scroll event is removed from the scrollable element.\n // This hack (see related code in patchDisplay) makes sure the\n // element is kept around.\n\n\n if (dy && mac && webkit) {\n outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) {\n for (var i = 0; i < view.length; i++) {\n if (view[i].node == cur) {\n cm.display.currentWheelTarget = cur;\n break outer;\n }\n }\n }\n } // On some browsers, horizontal scrolling will cause redraws to\n // happen before the gutter has been realigned, causing it to\n // wriggle around in a most unseemly way. When we have an\n // estimated pixels/delta value, we just handle horizontal\n // scrolling entirely here. It'll be slightly off from native, but\n // better than glitching out.\n\n\n if (dx && !gecko && !presto && wheelPixelsPerUnit != null) {\n if (dy && canScrollY) {\n updateScrollTop(cm, Math.max(0, scroll.scrollTop + dy * wheelPixelsPerUnit));\n }\n\n setScrollLeft(cm, Math.max(0, scroll.scrollLeft + dx * wheelPixelsPerUnit)); // Only prevent default scrolling if vertical scrolling is\n // actually possible. Otherwise, it causes vertical scroll\n // jitter on OSX trackpads when deltaX is small and deltaY\n // is large (issue #3579)\n\n if (!dy || dy && canScrollY) {\n e_preventDefault(e);\n }\n\n display.wheelStartX = null; // Abort measurement, if in progress\n\n return;\n } // 'Project' the visible viewport to cover the area that is being\n // scrolled into view (if we know enough to estimate it).\n\n\n if (dy && wheelPixelsPerUnit != null) {\n var pixels = dy * wheelPixelsPerUnit;\n var top = cm.doc.scrollTop,\n bot = top + display.wrapper.clientHeight;\n\n if (pixels < 0) {\n top = Math.max(0, top + pixels - 50);\n } else {\n bot = Math.min(cm.doc.height, bot + pixels + 50);\n }\n\n updateDisplaySimple(cm, {\n top: top,\n bottom: bot\n });\n }\n\n if (wheelSamples < 20) {\n if (display.wheelStartX == null) {\n display.wheelStartX = scroll.scrollLeft;\n display.wheelStartY = scroll.scrollTop;\n display.wheelDX = dx;\n display.wheelDY = dy;\n setTimeout(function () {\n if (display.wheelStartX == null) {\n return;\n }\n\n var movedX = scroll.scrollLeft - display.wheelStartX;\n var movedY = scroll.scrollTop - display.wheelStartY;\n var sample = movedY && display.wheelDY && movedY / display.wheelDY || movedX && display.wheelDX && movedX / display.wheelDX;\n display.wheelStartX = display.wheelStartY = null;\n\n if (!sample) {\n return;\n }\n\n wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1);\n ++wheelSamples;\n }, 200);\n } else {\n display.wheelDX += dx;\n display.wheelDY += dy;\n }\n }\n } // Selection objects are immutable. A new one is created every time\n // the selection changes. A selection is one or more non-overlapping\n // (and non-touching) ranges, sorted, and an integer that indicates\n // which one is the primary selection (the one that's scrolled into\n // view, that getCursor returns, etc).\n\n\n var Selection = function Selection(ranges, primIndex) {\n this.ranges = ranges;\n this.primIndex = primIndex;\n };\n\n Selection.prototype.primary = function () {\n return this.ranges[this.primIndex];\n };\n\n Selection.prototype.equals = function (other) {\n if (other == this) {\n return true;\n }\n\n if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) {\n return false;\n }\n\n for (var i = 0; i < this.ranges.length; i++) {\n var here = this.ranges[i],\n there = other.ranges[i];\n\n if (!equalCursorPos(here.anchor, there.anchor) || !equalCursorPos(here.head, there.head)) {\n return false;\n }\n }\n\n return true;\n };\n\n Selection.prototype.deepCopy = function () {\n var out = [];\n\n for (var i = 0; i < this.ranges.length; i++) {\n out[i] = new Range(copyPos(this.ranges[i].anchor), copyPos(this.ranges[i].head));\n }\n\n return new Selection(out, this.primIndex);\n };\n\n Selection.prototype.somethingSelected = function () {\n for (var i = 0; i < this.ranges.length; i++) {\n if (!this.ranges[i].empty()) {\n return true;\n }\n }\n\n return false;\n };\n\n Selection.prototype.contains = function (pos, end) {\n if (!end) {\n end = pos;\n }\n\n for (var i = 0; i < this.ranges.length; i++) {\n var range = this.ranges[i];\n\n if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0) {\n return i;\n }\n }\n\n return -1;\n };\n\n var Range = function Range(anchor, head) {\n this.anchor = anchor;\n this.head = head;\n };\n\n Range.prototype.from = function () {\n return minPos(this.anchor, this.head);\n };\n\n Range.prototype.to = function () {\n return maxPos(this.anchor, this.head);\n };\n\n Range.prototype.empty = function () {\n return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch;\n }; // Take an unsorted, potentially overlapping set of ranges, and\n // build a selection out of it. 'Consumes' ranges array (modifying\n // it).\n\n\n function normalizeSelection(cm, ranges, primIndex) {\n var mayTouch = cm && cm.options.selectionsMayTouch;\n var prim = ranges[primIndex];\n ranges.sort(function (a, b) {\n return cmp(a.from(), b.from());\n });\n primIndex = indexOf(ranges, prim);\n\n for (var i = 1; i < ranges.length; i++) {\n var cur = ranges[i],\n prev = ranges[i - 1];\n var diff = cmp(prev.to(), cur.from());\n\n if (mayTouch && !cur.empty() ? diff > 0 : diff >= 0) {\n var from = minPos(prev.from(), cur.from()),\n to = maxPos(prev.to(), cur.to());\n var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head;\n\n if (i <= primIndex) {\n --primIndex;\n }\n\n ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to));\n }\n }\n\n return new Selection(ranges, primIndex);\n }\n\n function simpleSelection(anchor, head) {\n return new Selection([new Range(anchor, head || anchor)], 0);\n } // Compute the position of the end of a change (its 'to' property\n // refers to the pre-change end).\n\n\n function changeEnd(change) {\n if (!change.text) {\n return change.to;\n }\n\n return Pos(change.from.line + change.text.length - 1, lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0));\n } // Adjust a position to refer to the post-change position of the\n // same text, or the end of the change if the change covers it.\n\n\n function adjustForChange(pos, change) {\n if (cmp(pos, change.from) < 0) {\n return pos;\n }\n\n if (cmp(pos, change.to) <= 0) {\n return changeEnd(change);\n }\n\n var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1,\n ch = pos.ch;\n\n if (pos.line == change.to.line) {\n ch += changeEnd(change).ch - change.to.ch;\n }\n\n return Pos(line, ch);\n }\n\n function computeSelAfterChange(doc, change) {\n var out = [];\n\n for (var i = 0; i < doc.sel.ranges.length; i++) {\n var range = doc.sel.ranges[i];\n out.push(new Range(adjustForChange(range.anchor, change), adjustForChange(range.head, change)));\n }\n\n return normalizeSelection(doc.cm, out, doc.sel.primIndex);\n }\n\n function offsetPos(pos, old, nw) {\n if (pos.line == old.line) {\n return Pos(nw.line, pos.ch - old.ch + nw.ch);\n } else {\n return Pos(nw.line + (pos.line - old.line), pos.ch);\n }\n } // Used by replaceSelections to allow moving the selection to the\n // start or around the replaced test. Hint may be \"start\" or \"around\".\n\n\n function computeReplacedSel(doc, changes, hint) {\n var out = [];\n var oldPrev = Pos(doc.first, 0),\n newPrev = oldPrev;\n\n for (var i = 0; i < changes.length; i++) {\n var change = changes[i];\n var from = offsetPos(change.from, oldPrev, newPrev);\n var to = offsetPos(changeEnd(change), oldPrev, newPrev);\n oldPrev = change.to;\n newPrev = to;\n\n if (hint == \"around\") {\n var range = doc.sel.ranges[i],\n inv = cmp(range.head, range.anchor) < 0;\n out[i] = new Range(inv ? to : from, inv ? from : to);\n } else {\n out[i] = new Range(from, from);\n }\n }\n\n return new Selection(out, doc.sel.primIndex);\n } // Used to get the editor into a consistent state again when options change.\n\n\n function loadMode(cm) {\n cm.doc.mode = getMode(cm.options, cm.doc.modeOption);\n resetModeState(cm);\n }\n\n function resetModeState(cm) {\n cm.doc.iter(function (line) {\n if (line.stateAfter) {\n line.stateAfter = null;\n }\n\n if (line.styles) {\n line.styles = null;\n }\n });\n cm.doc.modeFrontier = cm.doc.highlightFrontier = cm.doc.first;\n startWorker(cm, 100);\n cm.state.modeGen++;\n\n if (cm.curOp) {\n regChange(cm);\n }\n } // DOCUMENT DATA STRUCTURE\n // By default, updates that start and end at the beginning of a line\n // are treated specially, in order to make the association of line\n // widgets and marker elements with the text behave more intuitive.\n\n\n function isWholeLineUpdate(doc, change) {\n return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == \"\" && (!doc.cm || doc.cm.options.wholeLineUpdateBefore);\n } // Perform a change on the document data structure.\n\n\n function updateDoc(doc, change, markedSpans, estimateHeight) {\n function spansFor(n) {\n return markedSpans ? markedSpans[n] : null;\n }\n\n function update(line, text, spans) {\n updateLine(line, text, spans, estimateHeight);\n signalLater(line, \"change\", line, change);\n }\n\n function linesFor(start, end) {\n var result = [];\n\n for (var i = start; i < end; ++i) {\n result.push(new Line(text[i], spansFor(i), estimateHeight));\n }\n\n return result;\n }\n\n var from = change.from,\n to = change.to,\n text = change.text;\n var firstLine = getLine(doc, from.line),\n lastLine = getLine(doc, to.line);\n var lastText = lst(text),\n lastSpans = spansFor(text.length - 1),\n nlines = to.line - from.line; // Adjust the line structure\n\n if (change.full) {\n doc.insert(0, linesFor(0, text.length));\n doc.remove(text.length, doc.size - text.length);\n } else if (isWholeLineUpdate(doc, change)) {\n // This is a whole-line replace. Treated specially to make\n // sure line objects move the way they are supposed to.\n var added = linesFor(0, text.length - 1);\n update(lastLine, lastLine.text, lastSpans);\n\n if (nlines) {\n doc.remove(from.line, nlines);\n }\n\n if (added.length) {\n doc.insert(from.line, added);\n }\n } else if (firstLine == lastLine) {\n if (text.length == 1) {\n update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans);\n } else {\n var added$1 = linesFor(1, text.length - 1);\n added$1.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight));\n update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n doc.insert(from.line + 1, added$1);\n }\n } else if (text.length == 1) {\n update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0));\n doc.remove(from.line + 1, nlines);\n } else {\n update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans);\n var added$2 = linesFor(1, text.length - 1);\n\n if (nlines > 1) {\n doc.remove(from.line + 1, nlines - 1);\n }\n\n doc.insert(from.line + 1, added$2);\n }\n\n signalLater(doc, \"change\", doc, change);\n } // Call f for all linked documents.\n\n\n function linkedDocs(doc, f, sharedHistOnly) {\n function propagate(doc, skip, sharedHist) {\n if (doc.linked) {\n for (var i = 0; i < doc.linked.length; ++i) {\n var rel = doc.linked[i];\n\n if (rel.doc == skip) {\n continue;\n }\n\n var shared = sharedHist && rel.sharedHist;\n\n if (sharedHistOnly && !shared) {\n continue;\n }\n\n f(rel.doc, shared);\n propagate(rel.doc, doc, shared);\n }\n }\n }\n\n propagate(doc, null, true);\n } // Attach a document to an editor.\n\n\n function attachDoc(cm, doc) {\n if (doc.cm) {\n throw new Error(\"This document is already in use.\");\n }\n\n cm.doc = doc;\n doc.cm = cm;\n estimateLineHeights(cm);\n loadMode(cm);\n setDirectionClass(cm);\n\n if (!cm.options.lineWrapping) {\n findMaxLine(cm);\n }\n\n cm.options.mode = doc.modeOption;\n regChange(cm);\n }\n\n function setDirectionClass(cm) {\n (cm.doc.direction == \"rtl\" ? addClass : rmClass)(cm.display.lineDiv, \"CodeMirror-rtl\");\n }\n\n function directionChanged(cm) {\n runInOp(cm, function () {\n setDirectionClass(cm);\n regChange(cm);\n });\n }\n\n function History(startGen) {\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 = Infinity; // Used to track when changes can be merged into a single undo\n // event\n\n this.lastModTime = this.lastSelTime = 0;\n this.lastOp = this.lastSelOp = null;\n this.lastOrigin = this.lastSelOrigin = null; // Used by the isClean() method\n\n this.generation = this.maxGeneration = startGen || 1;\n } // Create a history change event from an updateDoc-style change\n // object.\n\n\n function historyChangeFromChange(doc, change) {\n var histChange = {\n from: copyPos(change.from),\n to: changeEnd(change),\n text: getBetween(doc, change.from, change.to)\n };\n attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);\n linkedDocs(doc, function (doc) {\n return attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);\n }, true);\n return histChange;\n } // Pop all selection events off the end of a history array. Stop at\n // a change event.\n\n\n function clearSelectionEvents(array) {\n while (array.length) {\n var last = lst(array);\n\n if (last.ranges) {\n array.pop();\n } else {\n break;\n }\n }\n } // Find the top change event in the history. Pop off selection\n // events that are in the way.\n\n\n function lastChangeEvent(hist, force) {\n if (force) {\n clearSelectionEvents(hist.done);\n return lst(hist.done);\n } else if (hist.done.length && !lst(hist.done).ranges) {\n return lst(hist.done);\n } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) {\n hist.done.pop();\n return lst(hist.done);\n }\n } // Register a change in the history. Merges changes that are within\n // a single operation, or are close together with an origin that\n // allows merging (starting with \"+\") into a single event.\n\n\n function addChangeToHistory(doc, change, selAfter, opId) {\n var hist = doc.history;\n hist.undone.length = 0;\n var time = +new Date(),\n cur;\n var last;\n\n if ((hist.lastOp == opId || hist.lastOrigin == change.origin && change.origin && (change.origin.charAt(0) == \"+\" && hist.lastModTime > time - (doc.cm ? doc.cm.options.historyEventDelay : 500) || change.origin.charAt(0) == \"*\")) && (cur = lastChangeEvent(hist, hist.lastOp == opId))) {\n // Merge this change into the last event\n last = lst(cur.changes);\n\n if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) {\n // Optimized case for simple insertion -- don't want to add\n // new changesets for every character typed\n last.to = changeEnd(change);\n } else {\n // Add new sub-event\n cur.changes.push(historyChangeFromChange(doc, change));\n }\n } else {\n // Can not be merged, start a new event.\n var before = lst(hist.done);\n\n if (!before || !before.ranges) {\n pushSelectionToHistory(doc.sel, hist.done);\n }\n\n cur = {\n changes: [historyChangeFromChange(doc, change)],\n generation: hist.generation\n };\n hist.done.push(cur);\n\n while (hist.done.length > hist.undoDepth) {\n hist.done.shift();\n\n if (!hist.done[0].ranges) {\n hist.done.shift();\n }\n }\n }\n\n hist.done.push(selAfter);\n hist.generation = ++hist.maxGeneration;\n hist.lastModTime = hist.lastSelTime = time;\n hist.lastOp = hist.lastSelOp = opId;\n hist.lastOrigin = hist.lastSelOrigin = change.origin;\n\n if (!last) {\n signal(doc, \"historyAdded\");\n }\n }\n\n function selectionEventCanBeMerged(doc, origin, prev, sel) {\n var ch = origin.charAt(0);\n return ch == \"*\" || ch == \"+\" && prev.ranges.length == sel.ranges.length && prev.somethingSelected() == sel.somethingSelected() && new Date() - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500);\n } // Called whenever the selection changes, sets the new selection as\n // the pending selection in the history, and pushes the old pending\n // selection into the 'done' array when it was significantly\n // different (in number of selected ranges, emptiness, or time).\n\n\n function addSelectionToHistory(doc, sel, opId, options) {\n var hist = doc.history,\n origin = options && options.origin; // A new event is started when the previous origin does not match\n // the current, or the origins don't allow matching. Origins\n // starting with * are always merged, those starting with + are\n // merged when similar and close together in time.\n\n if (opId == hist.lastSelOp || origin && hist.lastSelOrigin == origin && (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin || selectionEventCanBeMerged(doc, origin, lst(hist.done), sel))) {\n hist.done[hist.done.length - 1] = sel;\n } else {\n pushSelectionToHistory(sel, hist.done);\n }\n\n hist.lastSelTime = +new Date();\n hist.lastSelOrigin = origin;\n hist.lastSelOp = opId;\n\n if (options && options.clearRedo !== false) {\n clearSelectionEvents(hist.undone);\n }\n }\n\n function pushSelectionToHistory(sel, dest) {\n var top = lst(dest);\n\n if (!(top && top.ranges && top.equals(sel))) {\n dest.push(sel);\n }\n } // Used to store marked span information in the history.\n\n\n function attachLocalSpans(doc, change, from, to) {\n var existing = change[\"spans_\" + doc.id],\n n = 0;\n doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function (line) {\n if (line.markedSpans) {\n (existing || (existing = change[\"spans_\" + doc.id] = {}))[n] = line.markedSpans;\n }\n\n ++n;\n });\n } // When un/re-doing restores text containing marked spans, those\n // that have been explicitly cleared should not be restored.\n\n\n function removeClearedSpans(spans) {\n if (!spans) {\n return null;\n }\n\n var out;\n\n for (var i = 0; i < spans.length; ++i) {\n if (spans[i].marker.explicitlyCleared) {\n if (!out) {\n out = spans.slice(0, i);\n }\n } else if (out) {\n out.push(spans[i]);\n }\n }\n\n return !out ? spans : out.length ? out : null;\n } // Retrieve and filter the old marked spans stored in a change event.\n\n\n function getOldSpans(doc, change) {\n var found = change[\"spans_\" + doc.id];\n\n if (!found) {\n return null;\n }\n\n var nw = [];\n\n for (var i = 0; i < change.text.length; ++i) {\n nw.push(removeClearedSpans(found[i]));\n }\n\n return nw;\n } // Used for un/re-doing changes from the history. Combines the\n // result of computing the existing spans with the set of spans that\n // existed in the history (so that deleting around a span and then\n // undoing brings back the span).\n\n\n function mergeOldSpans(doc, change) {\n var old = getOldSpans(doc, change);\n var stretched = stretchSpansOverChange(doc, change);\n\n if (!old) {\n return stretched;\n }\n\n if (!stretched) {\n return old;\n }\n\n for (var i = 0; i < old.length; ++i) {\n var oldCur = old[i],\n stretchCur = stretched[i];\n\n if (oldCur && stretchCur) {\n spans: for (var j = 0; j < stretchCur.length; ++j) {\n var span = stretchCur[j];\n\n for (var k = 0; k < oldCur.length; ++k) {\n if (oldCur[k].marker == span.marker) {\n continue spans;\n }\n }\n\n oldCur.push(span);\n }\n } else if (stretchCur) {\n old[i] = stretchCur;\n }\n }\n\n return old;\n } // Used both to provide a JSON-safe object in .getHistory, and, when\n // detaching a document, to split the history in two\n\n\n function copyHistoryArray(events, newGroup, instantiateSel) {\n var copy = [];\n\n for (var i = 0; i < events.length; ++i) {\n var event = events[i];\n\n if (event.ranges) {\n copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event);\n continue;\n }\n\n var changes = event.changes,\n newChanges = [];\n copy.push({\n changes: newChanges\n });\n\n for (var j = 0; j < changes.length; ++j) {\n var change = changes[j],\n m = void 0;\n newChanges.push({\n from: change.from,\n to: change.to,\n text: change.text\n });\n\n if (newGroup) {\n for (var prop in change) {\n if (m = prop.match(/^spans_(\\d+)$/)) {\n if (indexOf(newGroup, Number(m[1])) > -1) {\n lst(newChanges)[prop] = change[prop];\n delete change[prop];\n }\n }\n }\n }\n }\n }\n\n return copy;\n } // The 'scroll' parameter given to many of these indicated whether\n // the new cursor position should be scrolled into view after\n // modifying the selection.\n // If shift is held or the extend flag is set, extends a range to\n // include a given position (and optionally a second position).\n // Otherwise, simply returns the range between the given positions.\n // Used for cursor motion and such.\n\n\n function extendRange(range, head, other, extend) {\n if (extend) {\n var anchor = range.anchor;\n\n if (other) {\n var posBefore = cmp(head, anchor) < 0;\n\n if (posBefore != cmp(other, anchor) < 0) {\n anchor = head;\n head = other;\n } else if (posBefore != cmp(head, other) < 0) {\n head = other;\n }\n }\n\n return new Range(anchor, head);\n } else {\n return new Range(other || head, head);\n }\n } // Extend the primary selection range, discard the rest.\n\n\n function extendSelection(doc, head, other, options, extend) {\n if (extend == null) {\n extend = doc.cm && (doc.cm.display.shift || doc.extend);\n }\n\n setSelection(doc, new Selection([extendRange(doc.sel.primary(), head, other, extend)], 0), options);\n } // Extend all selections (pos is an array of selections with length\n // equal the number of selections)\n\n\n function extendSelections(doc, heads, options) {\n var out = [];\n var extend = doc.cm && (doc.cm.display.shift || doc.extend);\n\n for (var i = 0; i < doc.sel.ranges.length; i++) {\n out[i] = extendRange(doc.sel.ranges[i], heads[i], null, extend);\n }\n\n var newSel = normalizeSelection(doc.cm, out, doc.sel.primIndex);\n setSelection(doc, newSel, options);\n } // Updates a single range in the selection.\n\n\n function replaceOneSelection(doc, i, range, options) {\n var ranges = doc.sel.ranges.slice(0);\n ranges[i] = range;\n setSelection(doc, normalizeSelection(doc.cm, ranges, doc.sel.primIndex), options);\n } // Reset the selection to a single range.\n\n\n function setSimpleSelection(doc, anchor, head, options) {\n setSelection(doc, simpleSelection(anchor, head), options);\n } // Give beforeSelectionChange handlers a change to influence a\n // selection update.\n\n\n function filterSelectionChange(doc, sel, options) {\n var obj = {\n ranges: sel.ranges,\n update: function update(ranges) {\n this.ranges = [];\n\n for (var i = 0; i < ranges.length; i++) {\n this.ranges[i] = new Range(_clipPos(doc, ranges[i].anchor), _clipPos(doc, ranges[i].head));\n }\n },\n origin: options && options.origin\n };\n signal(doc, \"beforeSelectionChange\", doc, obj);\n\n if (doc.cm) {\n signal(doc.cm, \"beforeSelectionChange\", doc.cm, obj);\n }\n\n if (obj.ranges != sel.ranges) {\n return normalizeSelection(doc.cm, obj.ranges, obj.ranges.length - 1);\n } else {\n return sel;\n }\n }\n\n function setSelectionReplaceHistory(doc, sel, options) {\n var done = doc.history.done,\n last = lst(done);\n\n if (last && last.ranges) {\n done[done.length - 1] = sel;\n setSelectionNoUndo(doc, sel, options);\n } else {\n setSelection(doc, sel, options);\n }\n } // Set a new selection.\n\n\n function setSelection(doc, sel, options) {\n setSelectionNoUndo(doc, sel, options);\n addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options);\n }\n\n function setSelectionNoUndo(doc, sel, options) {\n if (hasHandler(doc, \"beforeSelectionChange\") || doc.cm && hasHandler(doc.cm, \"beforeSelectionChange\")) {\n sel = filterSelectionChange(doc, sel, options);\n }\n\n var bias = options && options.bias || (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1);\n setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true));\n\n if (!(options && options.scroll === false) && doc.cm) {\n ensureCursorVisible(doc.cm);\n }\n }\n\n function setSelectionInner(doc, sel) {\n if (sel.equals(doc.sel)) {\n return;\n }\n\n doc.sel = sel;\n\n if (doc.cm) {\n doc.cm.curOp.updateInput = 1;\n doc.cm.curOp.selectionChanged = true;\n signalCursorActivity(doc.cm);\n }\n\n signalLater(doc, \"cursorActivity\", doc);\n } // Verify that the selection does not partially select any atomic\n // marked ranges.\n\n\n function reCheckSelection(doc) {\n setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false));\n } // Return a selection that does not partially select any atomic\n // ranges.\n\n\n function skipAtomicInSelection(doc, sel, bias, mayClear) {\n var out;\n\n for (var i = 0; i < sel.ranges.length; i++) {\n var range = sel.ranges[i];\n var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i];\n var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear);\n var newHead = skipAtomic(doc, range.head, old && old.head, bias, mayClear);\n\n if (out || newAnchor != range.anchor || newHead != range.head) {\n if (!out) {\n out = sel.ranges.slice(0, i);\n }\n\n out[i] = new Range(newAnchor, newHead);\n }\n }\n\n return out ? normalizeSelection(doc.cm, out, sel.primIndex) : sel;\n }\n\n function skipAtomicInner(doc, pos, oldPos, dir, mayClear) {\n var line = getLine(doc, pos.line);\n\n if (line.markedSpans) {\n for (var i = 0; i < line.markedSpans.length; ++i) {\n var sp = line.markedSpans[i],\n m = sp.marker; // Determine if we should prevent the cursor being placed to the left/right of an atomic marker\n // Historically this was determined using the inclusiveLeft/Right option, but the new way to control it\n // is with selectLeft/Right\n\n var preventCursorLeft = \"selectLeft\" in m ? !m.selectLeft : m.inclusiveLeft;\n var preventCursorRight = \"selectRight\" in m ? !m.selectRight : m.inclusiveRight;\n\n if ((sp.from == null || (preventCursorLeft ? sp.from <= pos.ch : sp.from < pos.ch)) && (sp.to == null || (preventCursorRight ? sp.to >= pos.ch : sp.to > pos.ch))) {\n if (mayClear) {\n signal(m, \"beforeCursorEnter\");\n\n if (m.explicitlyCleared) {\n if (!line.markedSpans) {\n break;\n } else {\n --i;\n continue;\n }\n }\n }\n\n if (!m.atomic) {\n continue;\n }\n\n if (oldPos) {\n var near = m.find(dir < 0 ? 1 : -1),\n diff = void 0;\n\n if (dir < 0 ? preventCursorRight : preventCursorLeft) {\n near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null);\n }\n\n if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0)) {\n return skipAtomicInner(doc, near, pos, dir, mayClear);\n }\n }\n\n var far = m.find(dir < 0 ? -1 : 1);\n\n if (dir < 0 ? preventCursorLeft : preventCursorRight) {\n far = movePos(doc, far, dir, far.line == pos.line ? line : null);\n }\n\n return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null;\n }\n }\n }\n\n return pos;\n } // Ensure a given position is not inside an atomic range.\n\n\n function skipAtomic(doc, pos, oldPos, bias, mayClear) {\n var dir = bias || 1;\n var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) || !mayClear && skipAtomicInner(doc, pos, oldPos, dir, true) || skipAtomicInner(doc, pos, oldPos, -dir, mayClear) || !mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true);\n\n if (!found) {\n doc.cantEdit = true;\n return Pos(doc.first, 0);\n }\n\n return found;\n }\n\n function movePos(doc, pos, dir, line) {\n if (dir < 0 && pos.ch == 0) {\n if (pos.line > doc.first) {\n return _clipPos(doc, Pos(pos.line - 1));\n } else {\n return null;\n }\n } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) {\n if (pos.line < doc.first + doc.size - 1) {\n return Pos(pos.line + 1, 0);\n } else {\n return null;\n }\n } else {\n return new Pos(pos.line, pos.ch + dir);\n }\n }\n\n function selectAll(cm) {\n cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll);\n } // UPDATING\n // Allow \"beforeChange\" event handlers to influence a change\n\n\n function filterChange(doc, change, update) {\n var obj = {\n canceled: false,\n from: change.from,\n to: change.to,\n text: change.text,\n origin: change.origin,\n cancel: function cancel() {\n return obj.canceled = true;\n }\n };\n\n if (update) {\n obj.update = function (from, to, text, origin) {\n if (from) {\n obj.from = _clipPos(doc, from);\n }\n\n if (to) {\n obj.to = _clipPos(doc, to);\n }\n\n if (text) {\n obj.text = text;\n }\n\n if (origin !== undefined) {\n obj.origin = origin;\n }\n };\n }\n\n signal(doc, \"beforeChange\", doc, obj);\n\n if (doc.cm) {\n signal(doc.cm, \"beforeChange\", doc.cm, obj);\n }\n\n if (obj.canceled) {\n if (doc.cm) {\n doc.cm.curOp.updateInput = 2;\n }\n\n return null;\n }\n\n return {\n from: obj.from,\n to: obj.to,\n text: obj.text,\n origin: obj.origin\n };\n } // Apply a change to a document, and add it to the document's\n // history, and propagating it to all linked documents.\n\n\n function makeChange(doc, change, ignoreReadOnly) {\n if (doc.cm) {\n if (!doc.cm.curOp) {\n return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly);\n }\n\n if (doc.cm.state.suppressEdits) {\n return;\n }\n }\n\n if (hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\")) {\n change = filterChange(doc, change, true);\n\n if (!change) {\n return;\n }\n } // Possibly split or suppress the update based on the presence\n // of read-only spans in its range.\n\n\n var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to);\n\n if (split) {\n for (var i = split.length - 1; i >= 0; --i) {\n makeChangeInner(doc, {\n from: split[i].from,\n to: split[i].to,\n text: i ? [\"\"] : change.text,\n origin: change.origin\n });\n }\n } else {\n makeChangeInner(doc, change);\n }\n }\n\n function makeChangeInner(doc, change) {\n if (change.text.length == 1 && change.text[0] == \"\" && cmp(change.from, change.to) == 0) {\n return;\n }\n\n var selAfter = computeSelAfterChange(doc, change);\n addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN);\n makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change));\n var rebased = [];\n linkedDocs(doc, function (doc, sharedHist) {\n if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n rebaseHist(doc.history, change);\n rebased.push(doc.history);\n }\n\n makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change));\n });\n } // Revert a change stored in a document's history.\n\n\n function makeChangeFromHistory(doc, type, allowSelectionOnly) {\n var suppress = doc.cm && doc.cm.state.suppressEdits;\n\n if (suppress && !allowSelectionOnly) {\n return;\n }\n\n var hist = doc.history,\n event,\n selAfter = doc.sel;\n var source = type == \"undo\" ? hist.done : hist.undone,\n dest = type == \"undo\" ? hist.undone : hist.done; // Verify that there is a useable event (so that ctrl-z won't\n // needlessly clear selection events)\n\n var i = 0;\n\n for (; i < source.length; i++) {\n event = source[i];\n\n if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges) {\n break;\n }\n }\n\n if (i == source.length) {\n return;\n }\n\n hist.lastOrigin = hist.lastSelOrigin = null;\n\n for (;;) {\n event = source.pop();\n\n if (event.ranges) {\n pushSelectionToHistory(event, dest);\n\n if (allowSelectionOnly && !event.equals(doc.sel)) {\n setSelection(doc, event, {\n clearRedo: false\n });\n return;\n }\n\n selAfter = event;\n } else if (suppress) {\n source.push(event);\n return;\n } else {\n break;\n }\n } // Build up a reverse change object to add to the opposite history\n // stack (redo when undoing, and vice versa).\n\n\n var antiChanges = [];\n pushSelectionToHistory(selAfter, dest);\n dest.push({\n changes: antiChanges,\n generation: hist.generation\n });\n hist.generation = event.generation || ++hist.maxGeneration;\n var filter = hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\");\n\n var loop = function loop(i) {\n var change = event.changes[i];\n change.origin = type;\n\n if (filter && !filterChange(doc, change, false)) {\n source.length = 0;\n return {};\n }\n\n antiChanges.push(historyChangeFromChange(doc, change));\n var after = i ? computeSelAfterChange(doc, change) : lst(source);\n makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change));\n\n if (!i && doc.cm) {\n doc.cm.scrollIntoView({\n from: change.from,\n to: changeEnd(change)\n });\n }\n\n var rebased = []; // Propagate to the linked documents\n\n linkedDocs(doc, function (doc, sharedHist) {\n if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n rebaseHist(doc.history, change);\n rebased.push(doc.history);\n }\n\n makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change));\n });\n };\n\n for (var i$1 = event.changes.length - 1; i$1 >= 0; --i$1) {\n var returned = loop(i$1);\n if (returned) return returned.v;\n }\n } // Sub-views need their line numbers shifted when text is added\n // above or below them in the parent document.\n\n\n function shiftDoc(doc, distance) {\n if (distance == 0) {\n return;\n }\n\n doc.first += distance;\n doc.sel = new Selection(map(doc.sel.ranges, function (range) {\n return new Range(Pos(range.anchor.line + distance, range.anchor.ch), Pos(range.head.line + distance, range.head.ch));\n }), doc.sel.primIndex);\n\n if (doc.cm) {\n regChange(doc.cm, doc.first, doc.first - distance, distance);\n\n for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++) {\n regLineChange(doc.cm, l, \"gutter\");\n }\n }\n } // More lower-level change function, handling only a single document\n // (not linked ones).\n\n\n function makeChangeSingleDoc(doc, change, selAfter, spans) {\n if (doc.cm && !doc.cm.curOp) {\n return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans);\n }\n\n if (change.to.line < doc.first) {\n shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line));\n return;\n }\n\n if (change.from.line > doc.lastLine()) {\n return;\n } // Clip the change to the size of this doc\n\n\n if (change.from.line < doc.first) {\n var shift = change.text.length - 1 - (doc.first - change.from.line);\n shiftDoc(doc, shift);\n change = {\n from: Pos(doc.first, 0),\n to: Pos(change.to.line + shift, change.to.ch),\n text: [lst(change.text)],\n origin: change.origin\n };\n }\n\n var last = doc.lastLine();\n\n if (change.to.line > last) {\n change = {\n from: change.from,\n to: Pos(last, getLine(doc, last).text.length),\n text: [change.text[0]],\n origin: change.origin\n };\n }\n\n change.removed = getBetween(doc, change.from, change.to);\n\n if (!selAfter) {\n selAfter = computeSelAfterChange(doc, change);\n }\n\n if (doc.cm) {\n makeChangeSingleDocInEditor(doc.cm, change, spans);\n } else {\n updateDoc(doc, change, spans);\n }\n\n setSelectionNoUndo(doc, selAfter, sel_dontScroll);\n\n if (doc.cantEdit && skipAtomic(doc, Pos(doc.firstLine(), 0))) {\n doc.cantEdit = false;\n }\n } // Handle the interaction of a change to a document with the editor\n // that this document is part of.\n\n\n function makeChangeSingleDocInEditor(cm, change, spans) {\n var doc = cm.doc,\n display = cm.display,\n from = change.from,\n to = change.to;\n var recomputeMaxLength = false,\n checkWidthStart = from.line;\n\n if (!cm.options.lineWrapping) {\n checkWidthStart = lineNo(visualLine(getLine(doc, from.line)));\n doc.iter(checkWidthStart, to.line + 1, function (line) {\n if (line == display.maxLine) {\n recomputeMaxLength = true;\n return true;\n }\n });\n }\n\n if (doc.sel.contains(change.from, change.to) > -1) {\n signalCursorActivity(cm);\n }\n\n updateDoc(doc, change, spans, estimateHeight(cm));\n\n if (!cm.options.lineWrapping) {\n doc.iter(checkWidthStart, from.line + change.text.length, function (line) {\n var len = lineLength(line);\n\n if (len > display.maxLineLength) {\n display.maxLine = line;\n display.maxLineLength = len;\n display.maxLineChanged = true;\n recomputeMaxLength = false;\n }\n });\n\n if (recomputeMaxLength) {\n cm.curOp.updateMaxLine = true;\n }\n }\n\n retreatFrontier(doc, from.line);\n startWorker(cm, 400);\n var lendiff = change.text.length - (to.line - from.line) - 1; // Remember that these lines changed, for updating the display\n\n if (change.full) {\n regChange(cm);\n } else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change)) {\n regLineChange(cm, from.line, \"text\");\n } else {\n regChange(cm, from.line, to.line + 1, lendiff);\n }\n\n var changesHandler = hasHandler(cm, \"changes\"),\n changeHandler = hasHandler(cm, \"change\");\n\n if (changeHandler || changesHandler) {\n var obj = {\n from: from,\n to: to,\n text: change.text,\n removed: change.removed,\n origin: change.origin\n };\n\n if (changeHandler) {\n signalLater(cm, \"change\", cm, obj);\n }\n\n if (changesHandler) {\n (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj);\n }\n }\n\n cm.display.selForContextMenu = null;\n }\n\n function _replaceRange(doc, code, from, to, origin) {\n var assign;\n\n if (!to) {\n to = from;\n }\n\n if (cmp(to, from) < 0) {\n assign = [to, from], from = assign[0], to = assign[1];\n }\n\n if (typeof code == \"string\") {\n code = doc.splitLines(code);\n }\n\n makeChange(doc, {\n from: from,\n to: to,\n text: code,\n origin: origin\n });\n } // Rebasing/resetting history to deal with externally-sourced changes\n\n\n function rebaseHistSelSingle(pos, from, to, diff) {\n if (to < pos.line) {\n pos.line += diff;\n } else if (from < pos.line) {\n pos.line = from;\n pos.ch = 0;\n }\n } // Tries to rebase an array of history events given a change in the\n // document. If the change touches the same lines as the event, the\n // event, and everything 'behind' it, is discarded. If the change is\n // before the event, the event's positions are updated. Uses a\n // copy-on-write scheme for the positions, to avoid having to\n // reallocate them all on every rebase, but also avoid problems with\n // shared position objects being unsafely updated.\n\n\n function rebaseHistArray(array, from, to, diff) {\n for (var i = 0; i < array.length; ++i) {\n var sub = array[i],\n ok = true;\n\n if (sub.ranges) {\n if (!sub.copied) {\n sub = array[i] = sub.deepCopy();\n sub.copied = true;\n }\n\n for (var j = 0; j < sub.ranges.length; j++) {\n rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff);\n rebaseHistSelSingle(sub.ranges[j].head, from, to, diff);\n }\n\n continue;\n }\n\n for (var j$1 = 0; j$1 < sub.changes.length; ++j$1) {\n var cur = sub.changes[j$1];\n\n if (to < cur.from.line) {\n cur.from = Pos(cur.from.line + diff, cur.from.ch);\n cur.to = Pos(cur.to.line + diff, cur.to.ch);\n } else if (from <= cur.to.line) {\n ok = false;\n break;\n }\n }\n\n if (!ok) {\n array.splice(0, i + 1);\n i = 0;\n }\n }\n }\n\n function rebaseHist(hist, change) {\n var from = change.from.line,\n to = change.to.line,\n diff = change.text.length - (to - from) - 1;\n rebaseHistArray(hist.done, from, to, diff);\n rebaseHistArray(hist.undone, from, to, diff);\n } // Utility for applying a change to a line by handle or number,\n // returning the number and optionally registering the line as\n // changed.\n\n\n function changeLine(doc, handle, changeType, op) {\n var no = handle,\n line = handle;\n\n if (typeof handle == \"number\") {\n line = getLine(doc, clipLine(doc, handle));\n } else {\n no = lineNo(handle);\n }\n\n if (no == null) {\n return null;\n }\n\n if (op(line, no) && doc.cm) {\n regLineChange(doc.cm, no, changeType);\n }\n\n return line;\n } // The document is represented as a BTree consisting of leaves, with\n // chunk of lines in them, and branches, with up to ten leaves or\n // other branch nodes below them. The top node is always a branch\n // node, and is the document object itself (meaning it has\n // additional methods and properties).\n //\n // All nodes have parent links. The tree is used both to go from\n // line numbers to line objects, and to go from objects to numbers.\n // It also indexes by height, and is used to convert between height\n // and line object, and to find the total height of the document.\n //\n // See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html\n\n\n function LeafChunk(lines) {\n this.lines = lines;\n this.parent = null;\n var height = 0;\n\n for (var i = 0; i < lines.length; ++i) {\n lines[i].parent = this;\n height += lines[i].height;\n }\n\n this.height = height;\n }\n\n LeafChunk.prototype = {\n chunkSize: function chunkSize() {\n return this.lines.length;\n },\n // Remove the n lines at offset 'at'.\n removeInner: function removeInner(at, n) {\n for (var i = at, e = at + n; i < e; ++i) {\n var line = this.lines[i];\n this.height -= line.height;\n cleanUpLine(line);\n signalLater(line, \"delete\");\n }\n\n this.lines.splice(at, n);\n },\n // Helper used to collapse a small branch into a single leaf.\n collapse: function collapse(lines) {\n lines.push.apply(lines, this.lines);\n },\n // Insert the given array of lines at offset 'at', count them as\n // having the given height.\n insertInner: function insertInner(at, lines, height) {\n this.height += height;\n this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at));\n\n for (var i = 0; i < lines.length; ++i) {\n lines[i].parent = this;\n }\n },\n // Used to iterate over a part of the tree.\n iterN: function iterN(at, n, op) {\n for (var e = at + n; at < e; ++at) {\n if (op(this.lines[at])) {\n return true;\n }\n }\n }\n };\n\n function BranchChunk(children) {\n this.children = children;\n var size = 0,\n height = 0;\n\n for (var i = 0; i < children.length; ++i) {\n var ch = children[i];\n size += ch.chunkSize();\n height += ch.height;\n ch.parent = this;\n }\n\n this.size = size;\n this.height = height;\n this.parent = null;\n }\n\n BranchChunk.prototype = {\n chunkSize: function chunkSize() {\n return this.size;\n },\n removeInner: function removeInner(at, n) {\n this.size -= n;\n\n for (var i = 0; i < this.children.length; ++i) {\n var child = this.children[i],\n sz = child.chunkSize();\n\n if (at < sz) {\n var rm = Math.min(n, sz - at),\n oldHeight = child.height;\n child.removeInner(at, rm);\n this.height -= oldHeight - child.height;\n\n if (sz == rm) {\n this.children.splice(i--, 1);\n child.parent = null;\n }\n\n if ((n -= rm) == 0) {\n break;\n }\n\n at = 0;\n } else {\n at -= sz;\n }\n } // If the result is smaller than 25 lines, ensure that it is a\n // single leaf node.\n\n\n if (this.size - n < 25 && (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) {\n var lines = [];\n this.collapse(lines);\n this.children = [new LeafChunk(lines)];\n this.children[0].parent = this;\n }\n },\n collapse: function collapse(lines) {\n for (var i = 0; i < this.children.length; ++i) {\n this.children[i].collapse(lines);\n }\n },\n insertInner: function insertInner(at, lines, height) {\n this.size += lines.length;\n this.height += height;\n\n for (var i = 0; i < this.children.length; ++i) {\n var child = this.children[i],\n sz = child.chunkSize();\n\n if (at <= sz) {\n child.insertInner(at, lines, height);\n\n if (child.lines && child.lines.length > 50) {\n // To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced.\n // Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest.\n var remaining = child.lines.length % 25 + 25;\n\n for (var pos = remaining; pos < child.lines.length;) {\n var leaf = new LeafChunk(child.lines.slice(pos, pos += 25));\n child.height -= leaf.height;\n this.children.splice(++i, 0, leaf);\n leaf.parent = this;\n }\n\n child.lines = child.lines.slice(0, remaining);\n this.maybeSpill();\n }\n\n break;\n }\n\n at -= sz;\n }\n },\n // When a node has grown, check whether it should be split.\n maybeSpill: function maybeSpill() {\n if (this.children.length <= 10) {\n return;\n }\n\n var me = this;\n\n do {\n var spilled = me.children.splice(me.children.length - 5, 5);\n var sibling = new BranchChunk(spilled);\n\n if (!me.parent) {\n // Become the parent node\n var copy = new BranchChunk(me.children);\n copy.parent = me;\n me.children = [copy, sibling];\n me = copy;\n } else {\n me.size -= sibling.size;\n me.height -= sibling.height;\n var myIndex = indexOf(me.parent.children, me);\n me.parent.children.splice(myIndex + 1, 0, sibling);\n }\n\n sibling.parent = me.parent;\n } while (me.children.length > 10);\n\n me.parent.maybeSpill();\n },\n iterN: function iterN(at, n, op) {\n for (var i = 0; i < this.children.length; ++i) {\n var child = this.children[i],\n sz = child.chunkSize();\n\n if (at < sz) {\n var used = Math.min(n, sz - at);\n\n if (child.iterN(at, used, op)) {\n return true;\n }\n\n if ((n -= used) == 0) {\n break;\n }\n\n at = 0;\n } else {\n at -= sz;\n }\n }\n }\n }; // Line widgets are block elements displayed above or below a line.\n\n var LineWidget = function LineWidget(doc, node, options) {\n if (options) {\n for (var opt in options) {\n if (options.hasOwnProperty(opt)) {\n this[opt] = options[opt];\n }\n }\n }\n\n this.doc = doc;\n this.node = node;\n };\n\n LineWidget.prototype.clear = function () {\n var cm = this.doc.cm,\n ws = this.line.widgets,\n line = this.line,\n no = lineNo(line);\n\n if (no == null || !ws) {\n return;\n }\n\n for (var i = 0; i < ws.length; ++i) {\n if (ws[i] == this) {\n ws.splice(i--, 1);\n }\n }\n\n if (!ws.length) {\n line.widgets = null;\n }\n\n var height = widgetHeight(this);\n updateLineHeight(line, Math.max(0, line.height - height));\n\n if (cm) {\n runInOp(cm, function () {\n adjustScrollWhenAboveVisible(cm, line, -height);\n regLineChange(cm, no, \"widget\");\n });\n signalLater(cm, \"lineWidgetCleared\", cm, this, no);\n }\n };\n\n LineWidget.prototype.changed = function () {\n var this$1 = this;\n var oldH = this.height,\n cm = this.doc.cm,\n line = this.line;\n this.height = null;\n var diff = widgetHeight(this) - oldH;\n\n if (!diff) {\n return;\n }\n\n if (!lineIsHidden(this.doc, line)) {\n updateLineHeight(line, line.height + diff);\n }\n\n if (cm) {\n runInOp(cm, function () {\n cm.curOp.forceUpdate = true;\n adjustScrollWhenAboveVisible(cm, line, diff);\n signalLater(cm, \"lineWidgetChanged\", cm, this$1, lineNo(line));\n });\n }\n };\n\n eventMixin(LineWidget);\n\n function adjustScrollWhenAboveVisible(cm, line, diff) {\n if (_heightAtLine(line) < (cm.curOp && cm.curOp.scrollTop || cm.doc.scrollTop)) {\n addToScrollTop(cm, diff);\n }\n }\n\n function addLineWidget(doc, handle, node, options) {\n var widget = new LineWidget(doc, node, options);\n var cm = doc.cm;\n\n if (cm && widget.noHScroll) {\n cm.display.alignWidgets = true;\n }\n\n changeLine(doc, handle, \"widget\", function (line) {\n var widgets = line.widgets || (line.widgets = []);\n\n if (widget.insertAt == null) {\n widgets.push(widget);\n } else {\n widgets.splice(Math.min(widgets.length - 1, Math.max(0, widget.insertAt)), 0, widget);\n }\n\n widget.line = line;\n\n if (cm && !lineIsHidden(doc, line)) {\n var aboveVisible = _heightAtLine(line) < doc.scrollTop;\n updateLineHeight(line, line.height + widgetHeight(widget));\n\n if (aboveVisible) {\n addToScrollTop(cm, widget.height);\n }\n\n cm.curOp.forceUpdate = true;\n }\n\n return true;\n });\n\n if (cm) {\n signalLater(cm, \"lineWidgetAdded\", cm, widget, typeof handle == \"number\" ? handle : lineNo(handle));\n }\n\n return widget;\n } // TEXTMARKERS\n // Created with markText and setBookmark methods. A TextMarker is a\n // handle that can be used to clear or find a marked position in the\n // document. Line objects hold arrays (markedSpans) containing\n // {from, to, marker} object pointing to such marker objects, and\n // indicating that such a marker is present on that line. Multiple\n // lines may point to the same marker when it spans across lines.\n // The spans will have null for their from/to properties when the\n // marker continues beyond the start/end of the line. Markers have\n // links back to the lines they currently touch.\n // Collapsed markers have unique ids, in order to be able to order\n // them, which is needed for uniquely determining an outer marker\n // when they overlap (they may nest, but not partially overlap).\n\n\n var nextMarkerId = 0;\n\n var TextMarker = function TextMarker(doc, type) {\n this.lines = [];\n this.type = type;\n this.doc = doc;\n this.id = ++nextMarkerId;\n }; // Clear the marker.\n\n\n TextMarker.prototype.clear = function () {\n if (this.explicitlyCleared) {\n return;\n }\n\n var cm = this.doc.cm,\n withOp = cm && !cm.curOp;\n\n if (withOp) {\n _startOperation(cm);\n }\n\n if (hasHandler(this, \"clear\")) {\n var found = this.find();\n\n if (found) {\n signalLater(this, \"clear\", found.from, found.to);\n }\n }\n\n var min = null,\n max = null;\n\n for (var i = 0; i < this.lines.length; ++i) {\n var line = this.lines[i];\n var span = getMarkedSpanFor(line.markedSpans, this);\n\n if (cm && !this.collapsed) {\n regLineChange(cm, lineNo(line), \"text\");\n } else if (cm) {\n if (span.to != null) {\n max = lineNo(line);\n }\n\n if (span.from != null) {\n min = lineNo(line);\n }\n }\n\n line.markedSpans = removeMarkedSpan(line.markedSpans, span);\n\n if (span.from == null && this.collapsed && !lineIsHidden(this.doc, line) && cm) {\n updateLineHeight(line, textHeight(cm.display));\n }\n }\n\n if (cm && this.collapsed && !cm.options.lineWrapping) {\n for (var i$1 = 0; i$1 < this.lines.length; ++i$1) {\n var visual = visualLine(this.lines[i$1]),\n len = lineLength(visual);\n\n if (len > cm.display.maxLineLength) {\n cm.display.maxLine = visual;\n cm.display.maxLineLength = len;\n cm.display.maxLineChanged = true;\n }\n }\n }\n\n if (min != null && cm && this.collapsed) {\n regChange(cm, min, max + 1);\n }\n\n this.lines.length = 0;\n this.explicitlyCleared = true;\n\n if (this.atomic && this.doc.cantEdit) {\n this.doc.cantEdit = false;\n\n if (cm) {\n reCheckSelection(cm.doc);\n }\n }\n\n if (cm) {\n signalLater(cm, \"markerCleared\", cm, this, min, max);\n }\n\n if (withOp) {\n _endOperation(cm);\n }\n\n if (this.parent) {\n this.parent.clear();\n }\n }; // Find the position of the marker in the document. Returns a {from,\n // to} object by default. Side can be passed to get a specific side\n // -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the\n // Pos objects returned contain a line object, rather than a line\n // number (used to prevent looking up the same line twice).\n\n\n TextMarker.prototype.find = function (side, lineObj) {\n if (side == null && this.type == \"bookmark\") {\n side = 1;\n }\n\n var from, to;\n\n for (var i = 0; i < this.lines.length; ++i) {\n var line = this.lines[i];\n var span = getMarkedSpanFor(line.markedSpans, this);\n\n if (span.from != null) {\n from = Pos(lineObj ? line : lineNo(line), span.from);\n\n if (side == -1) {\n return from;\n }\n }\n\n if (span.to != null) {\n to = Pos(lineObj ? line : lineNo(line), span.to);\n\n if (side == 1) {\n return to;\n }\n }\n }\n\n return from && {\n from: from,\n to: to\n };\n }; // Signals that the marker's widget changed, and surrounding layout\n // should be recomputed.\n\n\n TextMarker.prototype.changed = function () {\n var this$1 = this;\n var pos = this.find(-1, true),\n widget = this,\n cm = this.doc.cm;\n\n if (!pos || !cm) {\n return;\n }\n\n runInOp(cm, function () {\n var line = pos.line,\n lineN = lineNo(pos.line);\n var view = findViewForLine(cm, lineN);\n\n if (view) {\n clearLineMeasurementCacheFor(view);\n cm.curOp.selectionChanged = cm.curOp.forceUpdate = true;\n }\n\n cm.curOp.updateMaxLine = true;\n\n if (!lineIsHidden(widget.doc, line) && widget.height != null) {\n var oldHeight = widget.height;\n widget.height = null;\n var dHeight = widgetHeight(widget) - oldHeight;\n\n if (dHeight) {\n updateLineHeight(line, line.height + dHeight);\n }\n }\n\n signalLater(cm, \"markerChanged\", cm, this$1);\n });\n };\n\n TextMarker.prototype.attachLine = function (line) {\n if (!this.lines.length && this.doc.cm) {\n var op = this.doc.cm.curOp;\n\n if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1) {\n (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this);\n }\n }\n\n this.lines.push(line);\n };\n\n TextMarker.prototype.detachLine = function (line) {\n this.lines.splice(indexOf(this.lines, line), 1);\n\n if (!this.lines.length && this.doc.cm) {\n var op = this.doc.cm.curOp;\n (op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this);\n }\n };\n\n eventMixin(TextMarker); // Create a marker, wire it up to the right lines, and\n\n function _markText(doc, from, to, options, type) {\n // Shared markers (across linked documents) are handled separately\n // (markTextShared will call out to this again, once per\n // document).\n if (options && options.shared) {\n return markTextShared(doc, from, to, options, type);\n } // Ensure we are in an operation.\n\n\n if (doc.cm && !doc.cm.curOp) {\n return operation(doc.cm, _markText)(doc, from, to, options, type);\n }\n\n var marker = new TextMarker(doc, type),\n diff = cmp(from, to);\n\n if (options) {\n copyObj(options, marker, false);\n } // Don't connect empty markers unless clearWhenEmpty is false\n\n\n if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false) {\n return marker;\n }\n\n if (marker.replacedWith) {\n // Showing up as a widget implies collapsed (widget replaces text)\n marker.collapsed = true;\n marker.widgetNode = eltP(\"span\", [marker.replacedWith], \"CodeMirror-widget\");\n\n if (!options.handleMouseEvents) {\n marker.widgetNode.setAttribute(\"cm-ignore-events\", \"true\");\n }\n\n if (options.insertLeft) {\n marker.widgetNode.insertLeft = true;\n }\n }\n\n if (marker.collapsed) {\n if (conflictingCollapsedRange(doc, from.line, from, to, marker) || from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker)) {\n throw new Error(\"Inserting collapsed marker partially overlapping an existing one\");\n }\n\n seeCollapsedSpans();\n }\n\n if (marker.addToHistory) {\n addChangeToHistory(doc, {\n from: from,\n to: to,\n origin: \"markText\"\n }, doc.sel, NaN);\n }\n\n var curLine = from.line,\n cm = doc.cm,\n updateMaxLine;\n doc.iter(curLine, to.line + 1, function (line) {\n if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine) {\n updateMaxLine = true;\n }\n\n if (marker.collapsed && curLine != from.line) {\n updateLineHeight(line, 0);\n }\n\n addMarkedSpan(line, new MarkedSpan(marker, curLine == from.line ? from.ch : null, curLine == to.line ? to.ch : null));\n ++curLine;\n }); // lineIsHidden depends on the presence of the spans, so needs a second pass\n\n if (marker.collapsed) {\n doc.iter(from.line, to.line + 1, function (line) {\n if (lineIsHidden(doc, line)) {\n updateLineHeight(line, 0);\n }\n });\n }\n\n if (marker.clearOnEnter) {\n on(marker, \"beforeCursorEnter\", function () {\n return marker.clear();\n });\n }\n\n if (marker.readOnly) {\n seeReadOnlySpans();\n\n if (doc.history.done.length || doc.history.undone.length) {\n doc.clearHistory();\n }\n }\n\n if (marker.collapsed) {\n marker.id = ++nextMarkerId;\n marker.atomic = true;\n }\n\n if (cm) {\n // Sync editor state\n if (updateMaxLine) {\n cm.curOp.updateMaxLine = true;\n }\n\n if (marker.collapsed) {\n regChange(cm, from.line, to.line + 1);\n } else if (marker.className || marker.startStyle || marker.endStyle || marker.css || marker.attributes || marker.title) {\n for (var i = from.line; i <= to.line; i++) {\n regLineChange(cm, i, \"text\");\n }\n }\n\n if (marker.atomic) {\n reCheckSelection(cm.doc);\n }\n\n signalLater(cm, \"markerAdded\", cm, marker);\n }\n\n return marker;\n } // SHARED TEXTMARKERS\n // A shared marker spans multiple linked documents. It is\n // implemented as a meta-marker-object controlling multiple normal\n // markers.\n\n\n var SharedTextMarker = function SharedTextMarker(markers, primary) {\n this.markers = markers;\n this.primary = primary;\n\n for (var i = 0; i < markers.length; ++i) {\n markers[i].parent = this;\n }\n };\n\n SharedTextMarker.prototype.clear = function () {\n if (this.explicitlyCleared) {\n return;\n }\n\n this.explicitlyCleared = true;\n\n for (var i = 0; i < this.markers.length; ++i) {\n this.markers[i].clear();\n }\n\n signalLater(this, \"clear\");\n };\n\n SharedTextMarker.prototype.find = function (side, lineObj) {\n return this.primary.find(side, lineObj);\n };\n\n eventMixin(SharedTextMarker);\n\n function markTextShared(doc, from, to, options, type) {\n options = copyObj(options);\n options.shared = false;\n var markers = [_markText(doc, from, to, options, type)],\n primary = markers[0];\n var widget = options.widgetNode;\n linkedDocs(doc, function (doc) {\n if (widget) {\n options.widgetNode = widget.cloneNode(true);\n }\n\n markers.push(_markText(doc, _clipPos(doc, from), _clipPos(doc, to), options, type));\n\n for (var i = 0; i < doc.linked.length; ++i) {\n if (doc.linked[i].isParent) {\n return;\n }\n }\n\n primary = lst(markers);\n });\n return new SharedTextMarker(markers, primary);\n }\n\n function findSharedMarkers(doc) {\n return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function (m) {\n return m.parent;\n });\n }\n\n function copySharedMarkers(doc, markers) {\n for (var i = 0; i < markers.length; i++) {\n var marker = markers[i],\n pos = marker.find();\n var mFrom = doc.clipPos(pos.from),\n mTo = doc.clipPos(pos.to);\n\n if (cmp(mFrom, mTo)) {\n var subMark = _markText(doc, mFrom, mTo, marker.primary, marker.primary.type);\n\n marker.markers.push(subMark);\n subMark.parent = marker;\n }\n }\n }\n\n function detachSharedMarkers(markers) {\n var loop = function loop(i) {\n var marker = markers[i],\n linked = [marker.primary.doc];\n linkedDocs(marker.primary.doc, function (d) {\n return linked.push(d);\n });\n\n for (var j = 0; j < marker.markers.length; j++) {\n var subMarker = marker.markers[j];\n\n if (indexOf(linked, subMarker.doc) == -1) {\n subMarker.parent = null;\n marker.markers.splice(j--, 1);\n }\n }\n };\n\n for (var i = 0; i < markers.length; i++) {\n loop(i);\n }\n }\n\n var nextDocId = 0;\n\n var Doc = function Doc(text, mode, firstLine, lineSep, direction) {\n if (!(this instanceof Doc)) {\n return new Doc(text, mode, firstLine, lineSep, direction);\n }\n\n if (firstLine == null) {\n firstLine = 0;\n }\n\n BranchChunk.call(this, [new LeafChunk([new Line(\"\", null)])]);\n this.first = firstLine;\n this.scrollTop = this.scrollLeft = 0;\n this.cantEdit = false;\n this.cleanGeneration = 1;\n this.modeFrontier = this.highlightFrontier = firstLine;\n var start = Pos(firstLine, 0);\n this.sel = simpleSelection(start);\n this.history = new History(null);\n this.id = ++nextDocId;\n this.modeOption = mode;\n this.lineSep = lineSep;\n this.direction = direction == \"rtl\" ? \"rtl\" : \"ltr\";\n this.extend = false;\n\n if (typeof text == \"string\") {\n text = this.splitLines(text);\n }\n\n updateDoc(this, {\n from: start,\n to: start,\n text: text\n });\n setSelection(this, simpleSelection(start), sel_dontScroll);\n };\n\n Doc.prototype = createObj(BranchChunk.prototype, {\n constructor: Doc,\n // Iterate over the document. Supports two forms -- with only one\n // argument, it calls that for each line in the document. With\n // three, it iterates over the range given by the first two (with\n // the second being non-inclusive).\n iter: function iter(from, to, op) {\n if (op) {\n this.iterN(from - this.first, to - from, op);\n } else {\n this.iterN(this.first, this.first + this.size, from);\n }\n },\n // Non-public interface for adding and removing lines.\n insert: function insert(at, lines) {\n var height = 0;\n\n for (var i = 0; i < lines.length; ++i) {\n height += lines[i].height;\n }\n\n this.insertInner(at - this.first, lines, height);\n },\n remove: function remove(at, n) {\n this.removeInner(at - this.first, n);\n },\n // From here, the methods are part of the public interface. Most\n // are also available from CodeMirror (editor) instances.\n getValue: function getValue(lineSep) {\n var lines = getLines(this, this.first, this.first + this.size);\n\n if (lineSep === false) {\n return lines;\n }\n\n return lines.join(lineSep || this.lineSeparator());\n },\n setValue: docMethodOp(function (code) {\n var top = Pos(this.first, 0),\n last = this.first + this.size - 1;\n makeChange(this, {\n from: top,\n to: Pos(last, getLine(this, last).text.length),\n text: this.splitLines(code),\n origin: \"setValue\",\n full: true\n }, true);\n\n if (this.cm) {\n scrollToCoords(this.cm, 0, 0);\n }\n\n setSelection(this, simpleSelection(top), sel_dontScroll);\n }),\n replaceRange: function replaceRange(code, from, to, origin) {\n from = _clipPos(this, from);\n to = to ? _clipPos(this, to) : from;\n\n _replaceRange(this, code, from, to, origin);\n },\n getRange: function getRange(from, to, lineSep) {\n var lines = getBetween(this, _clipPos(this, from), _clipPos(this, to));\n\n if (lineSep === false) {\n return lines;\n }\n\n return lines.join(lineSep || this.lineSeparator());\n },\n getLine: function getLine(line) {\n var l = this.getLineHandle(line);\n return l && l.text;\n },\n getLineHandle: function getLineHandle(line) {\n if (isLine(this, line)) {\n return getLine(this, line);\n }\n },\n getLineNumber: function getLineNumber(line) {\n return lineNo(line);\n },\n getLineHandleVisualStart: function getLineHandleVisualStart(line) {\n if (typeof line == \"number\") {\n line = getLine(this, line);\n }\n\n return visualLine(line);\n },\n lineCount: function lineCount() {\n return this.size;\n },\n firstLine: function firstLine() {\n return this.first;\n },\n lastLine: function lastLine() {\n return this.first + this.size - 1;\n },\n clipPos: function clipPos(pos) {\n return _clipPos(this, pos);\n },\n getCursor: function getCursor(start) {\n var range = this.sel.primary(),\n pos;\n\n if (start == null || start == \"head\") {\n pos = range.head;\n } else if (start == \"anchor\") {\n pos = range.anchor;\n } else if (start == \"end\" || start == \"to\" || start === false) {\n pos = range.to();\n } else {\n pos = range.from();\n }\n\n return pos;\n },\n listSelections: function listSelections() {\n return this.sel.ranges;\n },\n somethingSelected: function somethingSelected() {\n return this.sel.somethingSelected();\n },\n setCursor: docMethodOp(function (line, ch, options) {\n setSimpleSelection(this, _clipPos(this, typeof line == \"number\" ? Pos(line, ch || 0) : line), null, options);\n }),\n setSelection: docMethodOp(function (anchor, head, options) {\n setSimpleSelection(this, _clipPos(this, anchor), _clipPos(this, head || anchor), options);\n }),\n extendSelection: docMethodOp(function (head, other, options) {\n extendSelection(this, _clipPos(this, head), other && _clipPos(this, other), options);\n }),\n extendSelections: docMethodOp(function (heads, options) {\n extendSelections(this, clipPosArray(this, heads), options);\n }),\n extendSelectionsBy: docMethodOp(function (f, options) {\n var heads = map(this.sel.ranges, f);\n extendSelections(this, clipPosArray(this, heads), options);\n }),\n setSelections: docMethodOp(function (ranges, primary, options) {\n if (!ranges.length) {\n return;\n }\n\n var out = [];\n\n for (var i = 0; i < ranges.length; i++) {\n out[i] = new Range(_clipPos(this, ranges[i].anchor), _clipPos(this, ranges[i].head));\n }\n\n if (primary == null) {\n primary = Math.min(ranges.length - 1, this.sel.primIndex);\n }\n\n setSelection(this, normalizeSelection(this.cm, out, primary), options);\n }),\n addSelection: docMethodOp(function (anchor, head, options) {\n var ranges = this.sel.ranges.slice(0);\n ranges.push(new Range(_clipPos(this, anchor), _clipPos(this, head || anchor)));\n setSelection(this, normalizeSelection(this.cm, ranges, ranges.length - 1), options);\n }),\n getSelection: function getSelection(lineSep) {\n var ranges = this.sel.ranges,\n lines;\n\n for (var i = 0; i < ranges.length; i++) {\n var sel = getBetween(this, ranges[i].from(), ranges[i].to());\n lines = lines ? lines.concat(sel) : sel;\n }\n\n if (lineSep === false) {\n return lines;\n } else {\n return lines.join(lineSep || this.lineSeparator());\n }\n },\n getSelections: function getSelections(lineSep) {\n var parts = [],\n ranges = this.sel.ranges;\n\n for (var i = 0; i < ranges.length; i++) {\n var sel = getBetween(this, ranges[i].from(), ranges[i].to());\n\n if (lineSep !== false) {\n sel = sel.join(lineSep || this.lineSeparator());\n }\n\n parts[i] = sel;\n }\n\n return parts;\n },\n replaceSelection: function replaceSelection(code, collapse, origin) {\n var dup = [];\n\n for (var i = 0; i < this.sel.ranges.length; i++) {\n dup[i] = code;\n }\n\n this.replaceSelections(dup, collapse, origin || \"+input\");\n },\n replaceSelections: docMethodOp(function (code, collapse, origin) {\n var changes = [],\n sel = this.sel;\n\n for (var i = 0; i < sel.ranges.length; i++) {\n var range = sel.ranges[i];\n changes[i] = {\n from: range.from(),\n to: range.to(),\n text: this.splitLines(code[i]),\n origin: origin\n };\n }\n\n var newSel = collapse && collapse != \"end\" && computeReplacedSel(this, changes, collapse);\n\n for (var i$1 = changes.length - 1; i$1 >= 0; i$1--) {\n makeChange(this, changes[i$1]);\n }\n\n if (newSel) {\n setSelectionReplaceHistory(this, newSel);\n } else if (this.cm) {\n ensureCursorVisible(this.cm);\n }\n }),\n undo: docMethodOp(function () {\n makeChangeFromHistory(this, \"undo\");\n }),\n redo: docMethodOp(function () {\n makeChangeFromHistory(this, \"redo\");\n }),\n undoSelection: docMethodOp(function () {\n makeChangeFromHistory(this, \"undo\", true);\n }),\n redoSelection: docMethodOp(function () {\n makeChangeFromHistory(this, \"redo\", true);\n }),\n setExtending: function setExtending(val) {\n this.extend = val;\n },\n getExtending: function getExtending() {\n return this.extend;\n },\n historySize: function historySize() {\n var hist = this.history,\n done = 0,\n undone = 0;\n\n for (var i = 0; i < hist.done.length; i++) {\n if (!hist.done[i].ranges) {\n ++done;\n }\n }\n\n for (var i$1 = 0; i$1 < hist.undone.length; i$1++) {\n if (!hist.undone[i$1].ranges) {\n ++undone;\n }\n }\n\n return {\n undo: done,\n redo: undone\n };\n },\n clearHistory: function clearHistory() {\n var this$1 = this;\n this.history = new History(this.history.maxGeneration);\n linkedDocs(this, function (doc) {\n return doc.history = this$1.history;\n }, true);\n },\n markClean: function markClean() {\n this.cleanGeneration = this.changeGeneration(true);\n },\n changeGeneration: function changeGeneration(forceSplit) {\n if (forceSplit) {\n this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null;\n }\n\n return this.history.generation;\n },\n isClean: function isClean(gen) {\n return this.history.generation == (gen || this.cleanGeneration);\n },\n getHistory: function getHistory() {\n return {\n done: copyHistoryArray(this.history.done),\n undone: copyHistoryArray(this.history.undone)\n };\n },\n setHistory: function setHistory(histData) {\n var hist = this.history = new History(this.history.maxGeneration);\n hist.done = copyHistoryArray(histData.done.slice(0), null, true);\n hist.undone = copyHistoryArray(histData.undone.slice(0), null, true);\n },\n setGutterMarker: docMethodOp(function (line, gutterID, value) {\n return changeLine(this, line, \"gutter\", function (line) {\n var markers = line.gutterMarkers || (line.gutterMarkers = {});\n markers[gutterID] = value;\n\n if (!value && isEmpty(markers)) {\n line.gutterMarkers = null;\n }\n\n return true;\n });\n }),\n clearGutter: docMethodOp(function (gutterID) {\n var this$1 = this;\n this.iter(function (line) {\n if (line.gutterMarkers && line.gutterMarkers[gutterID]) {\n changeLine(this$1, line, \"gutter\", function () {\n line.gutterMarkers[gutterID] = null;\n\n if (isEmpty(line.gutterMarkers)) {\n line.gutterMarkers = null;\n }\n\n return true;\n });\n }\n });\n }),\n lineInfo: function lineInfo(line) {\n var n;\n\n if (typeof line == \"number\") {\n if (!isLine(this, line)) {\n return null;\n }\n\n n = line;\n line = getLine(this, line);\n\n if (!line) {\n return null;\n }\n } else {\n n = lineNo(line);\n\n if (n == null) {\n return null;\n }\n }\n\n return {\n line: n,\n handle: line,\n text: line.text,\n gutterMarkers: line.gutterMarkers,\n textClass: line.textClass,\n bgClass: line.bgClass,\n wrapClass: line.wrapClass,\n widgets: line.widgets\n };\n },\n addLineClass: docMethodOp(function (handle, where, cls) {\n return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", function (line) {\n var prop = where == \"text\" ? \"textClass\" : where == \"background\" ? \"bgClass\" : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n\n if (!line[prop]) {\n line[prop] = cls;\n } else if (classTest(cls).test(line[prop])) {\n return false;\n } else {\n line[prop] += \" \" + cls;\n }\n\n return true;\n });\n }),\n removeLineClass: docMethodOp(function (handle, where, cls) {\n return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", function (line) {\n var prop = where == \"text\" ? \"textClass\" : where == \"background\" ? \"bgClass\" : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n var cur = line[prop];\n\n if (!cur) {\n return false;\n } else if (cls == null) {\n line[prop] = null;\n } else {\n var found = cur.match(classTest(cls));\n\n if (!found) {\n return false;\n }\n\n var end = found.index + found[0].length;\n line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? \"\" : \" \") + cur.slice(end) || null;\n }\n\n return true;\n });\n }),\n addLineWidget: docMethodOp(function (handle, node, options) {\n return addLineWidget(this, handle, node, options);\n }),\n removeLineWidget: function removeLineWidget(widget) {\n widget.clear();\n },\n markText: function markText(from, to, options) {\n return _markText(this, _clipPos(this, from), _clipPos(this, to), options, options && options.type || \"range\");\n },\n setBookmark: function setBookmark(pos, options) {\n var realOpts = {\n replacedWith: options && (options.nodeType == null ? options.widget : options),\n insertLeft: options && options.insertLeft,\n clearWhenEmpty: false,\n shared: options && options.shared,\n handleMouseEvents: options && options.handleMouseEvents\n };\n pos = _clipPos(this, pos);\n return _markText(this, pos, pos, realOpts, \"bookmark\");\n },\n findMarksAt: function findMarksAt(pos) {\n pos = _clipPos(this, pos);\n var markers = [],\n spans = getLine(this, pos.line).markedSpans;\n\n if (spans) {\n for (var i = 0; i < spans.length; ++i) {\n var span = spans[i];\n\n if ((span.from == null || span.from <= pos.ch) && (span.to == null || span.to >= pos.ch)) {\n markers.push(span.marker.parent || span.marker);\n }\n }\n }\n\n return markers;\n },\n findMarks: function findMarks(from, to, filter) {\n from = _clipPos(this, from);\n to = _clipPos(this, to);\n var found = [],\n lineNo = from.line;\n this.iter(from.line, to.line + 1, function (line) {\n var spans = line.markedSpans;\n\n if (spans) {\n for (var i = 0; i < spans.length; i++) {\n var span = spans[i];\n\n if (!(span.to != null && lineNo == from.line && from.ch >= span.to || span.from == null && lineNo != from.line || span.from != null && lineNo == to.line && span.from >= to.ch) && (!filter || filter(span.marker))) {\n found.push(span.marker.parent || span.marker);\n }\n }\n }\n\n ++lineNo;\n });\n return found;\n },\n getAllMarks: function getAllMarks() {\n var markers = [];\n this.iter(function (line) {\n var sps = line.markedSpans;\n\n if (sps) {\n for (var i = 0; i < sps.length; ++i) {\n if (sps[i].from != null) {\n markers.push(sps[i].marker);\n }\n }\n }\n });\n return markers;\n },\n posFromIndex: function posFromIndex(off) {\n var ch,\n lineNo = this.first,\n sepSize = this.lineSeparator().length;\n this.iter(function (line) {\n var sz = line.text.length + sepSize;\n\n if (sz > off) {\n ch = off;\n return true;\n }\n\n off -= sz;\n ++lineNo;\n });\n return _clipPos(this, Pos(lineNo, ch));\n },\n indexFromPos: function indexFromPos(coords) {\n coords = _clipPos(this, coords);\n var index = coords.ch;\n\n if (coords.line < this.first || coords.ch < 0) {\n return 0;\n }\n\n var sepSize = this.lineSeparator().length;\n this.iter(this.first, coords.line, function (line) {\n // iter aborts when callback returns a truthy value\n index += line.text.length + sepSize;\n });\n return index;\n },\n copy: function copy(copyHistory) {\n var doc = new Doc(getLines(this, this.first, this.first + this.size), this.modeOption, this.first, this.lineSep, this.direction);\n doc.scrollTop = this.scrollTop;\n doc.scrollLeft = this.scrollLeft;\n doc.sel = this.sel;\n doc.extend = false;\n\n if (copyHistory) {\n doc.history.undoDepth = this.history.undoDepth;\n doc.setHistory(this.getHistory());\n }\n\n return doc;\n },\n linkedDoc: function linkedDoc(options) {\n if (!options) {\n options = {};\n }\n\n var from = this.first,\n to = this.first + this.size;\n\n if (options.from != null && options.from > from) {\n from = options.from;\n }\n\n if (options.to != null && options.to < to) {\n to = options.to;\n }\n\n var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep, this.direction);\n\n if (options.sharedHist) {\n copy.history = this.history;\n }\n\n (this.linked || (this.linked = [])).push({\n doc: copy,\n sharedHist: options.sharedHist\n });\n copy.linked = [{\n doc: this,\n isParent: true,\n sharedHist: options.sharedHist\n }];\n copySharedMarkers(copy, findSharedMarkers(this));\n return copy;\n },\n unlinkDoc: function unlinkDoc(other) {\n if (other instanceof CodeMirror) {\n other = other.doc;\n }\n\n if (this.linked) {\n for (var i = 0; i < this.linked.length; ++i) {\n var link = this.linked[i];\n\n if (link.doc != other) {\n continue;\n }\n\n this.linked.splice(i, 1);\n other.unlinkDoc(this);\n detachSharedMarkers(findSharedMarkers(this));\n break;\n }\n } // If the histories were shared, split them again\n\n\n if (other.history == this.history) {\n var splitIds = [other.id];\n linkedDocs(other, function (doc) {\n return splitIds.push(doc.id);\n }, true);\n other.history = new History(null);\n other.history.done = copyHistoryArray(this.history.done, splitIds);\n other.history.undone = copyHistoryArray(this.history.undone, splitIds);\n }\n },\n iterLinkedDocs: function iterLinkedDocs(f) {\n linkedDocs(this, f);\n },\n getMode: function getMode() {\n return this.mode;\n },\n getEditor: function getEditor() {\n return this.cm;\n },\n splitLines: function splitLines(str) {\n if (this.lineSep) {\n return str.split(this.lineSep);\n }\n\n return splitLinesAuto(str);\n },\n lineSeparator: function lineSeparator() {\n return this.lineSep || \"\\n\";\n },\n setDirection: docMethodOp(function (dir) {\n if (dir != \"rtl\") {\n dir = \"ltr\";\n }\n\n if (dir == this.direction) {\n return;\n }\n\n this.direction = dir;\n this.iter(function (line) {\n return line.order = null;\n });\n\n if (this.cm) {\n directionChanged(this.cm);\n }\n })\n }); // Public alias.\n\n Doc.prototype.eachLine = Doc.prototype.iter; // Kludge to work around strange IE behavior where it'll sometimes\n // re-fire a series of drag-related events right after the drop (#1551)\n\n var lastDrop = 0;\n\n function onDrop(e) {\n var cm = this;\n clearDragCursor(cm);\n\n if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) {\n return;\n }\n\n e_preventDefault(e);\n\n if (ie) {\n lastDrop = +new Date();\n }\n\n var pos = posFromMouse(cm, e, true),\n files = e.dataTransfer.files;\n\n if (!pos || cm.isReadOnly()) {\n return;\n } // Might be a file drop, in which case we simply extract the text\n // and insert it.\n\n\n if (files && files.length && window.FileReader && window.File) {\n var n = files.length,\n text = Array(n),\n read = 0;\n\n var markAsReadAndPasteIfAllFilesAreRead = function markAsReadAndPasteIfAllFilesAreRead() {\n if (++read == n) {\n operation(cm, function () {\n pos = _clipPos(cm.doc, pos);\n var change = {\n from: pos,\n to: pos,\n text: cm.doc.splitLines(text.filter(function (t) {\n return t != null;\n }).join(cm.doc.lineSeparator())),\n origin: \"paste\"\n };\n makeChange(cm.doc, change);\n setSelectionReplaceHistory(cm.doc, simpleSelection(_clipPos(cm.doc, pos), _clipPos(cm.doc, changeEnd(change))));\n })();\n }\n };\n\n var readTextFromFile = function readTextFromFile(file, i) {\n if (cm.options.allowDropFileTypes && indexOf(cm.options.allowDropFileTypes, file.type) == -1) {\n markAsReadAndPasteIfAllFilesAreRead();\n return;\n }\n\n var reader = new FileReader();\n\n reader.onerror = function () {\n return markAsReadAndPasteIfAllFilesAreRead();\n };\n\n reader.onload = function () {\n var content = reader.result;\n\n if (/[\\x00-\\x08\\x0e-\\x1f]{2}/.test(content)) {\n markAsReadAndPasteIfAllFilesAreRead();\n return;\n }\n\n text[i] = content;\n markAsReadAndPasteIfAllFilesAreRead();\n };\n\n reader.readAsText(file);\n };\n\n for (var i = 0; i < files.length; i++) {\n readTextFromFile(files[i], i);\n }\n } else {\n // Normal drop\n // Don't do a replace if the drop happened inside of the selected text.\n if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) {\n cm.state.draggingText(e); // Ensure the editor is re-focused\n\n setTimeout(function () {\n return cm.display.input.focus();\n }, 20);\n return;\n }\n\n try {\n var text$1 = e.dataTransfer.getData(\"Text\");\n\n if (text$1) {\n var selected;\n\n if (cm.state.draggingText && !cm.state.draggingText.copy) {\n selected = cm.listSelections();\n }\n\n setSelectionNoUndo(cm.doc, simpleSelection(pos, pos));\n\n if (selected) {\n for (var i$1 = 0; i$1 < selected.length; ++i$1) {\n _replaceRange(cm.doc, \"\", selected[i$1].anchor, selected[i$1].head, \"drag\");\n }\n }\n\n cm.replaceSelection(text$1, \"around\", \"paste\");\n cm.display.input.focus();\n }\n } catch (e$1) {}\n }\n }\n\n function onDragStart(cm, e) {\n if (ie && (!cm.state.draggingText || +new Date() - lastDrop < 100)) {\n e_stop(e);\n return;\n }\n\n if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) {\n return;\n }\n\n e.dataTransfer.setData(\"Text\", cm.getSelection());\n e.dataTransfer.effectAllowed = \"copyMove\"; // Use dummy image instead of default browsers image.\n // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there.\n\n if (e.dataTransfer.setDragImage && !safari) {\n var img = elt(\"img\", null, null, \"position: fixed; left: 0; top: 0;\");\n img.src = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n\n if (presto) {\n img.width = img.height = 1;\n cm.display.wrapper.appendChild(img); // Force a relayout, or Opera won't use our image for some obscure reason\n\n img._top = img.offsetTop;\n }\n\n e.dataTransfer.setDragImage(img, 0, 0);\n\n if (presto) {\n img.parentNode.removeChild(img);\n }\n }\n }\n\n function onDragOver(cm, e) {\n var pos = posFromMouse(cm, e);\n\n if (!pos) {\n return;\n }\n\n var frag = document.createDocumentFragment();\n drawSelectionCursor(cm, pos, frag);\n\n if (!cm.display.dragCursor) {\n cm.display.dragCursor = elt(\"div\", null, \"CodeMirror-cursors CodeMirror-dragcursors\");\n cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv);\n }\n\n removeChildrenAndAdd(cm.display.dragCursor, frag);\n }\n\n function clearDragCursor(cm) {\n if (cm.display.dragCursor) {\n cm.display.lineSpace.removeChild(cm.display.dragCursor);\n cm.display.dragCursor = null;\n }\n } // These must be handled carefully, because naively registering a\n // handler for each editor will cause the editors to never be\n // garbage collected.\n\n\n function forEachCodeMirror(f) {\n if (!document.getElementsByClassName) {\n return;\n }\n\n var byClass = document.getElementsByClassName(\"CodeMirror\"),\n editors = [];\n\n for (var i = 0; i < byClass.length; i++) {\n var cm = byClass[i].CodeMirror;\n\n if (cm) {\n editors.push(cm);\n }\n }\n\n if (editors.length) {\n editors[0].operation(function () {\n for (var i = 0; i < editors.length; i++) {\n f(editors[i]);\n }\n });\n }\n }\n\n var globalsRegistered = false;\n\n function ensureGlobalHandlers() {\n if (globalsRegistered) {\n return;\n }\n\n registerGlobalHandlers();\n globalsRegistered = true;\n }\n\n function registerGlobalHandlers() {\n // When the window resizes, we need to refresh active editors.\n var resizeTimer;\n on(window, \"resize\", function () {\n if (resizeTimer == null) {\n resizeTimer = setTimeout(function () {\n resizeTimer = null;\n forEachCodeMirror(onResize);\n }, 100);\n }\n }); // When the window loses focus, we want to show the editor as blurred\n\n on(window, \"blur\", function () {\n return forEachCodeMirror(onBlur);\n });\n } // Called when the window resizes\n\n\n function onResize(cm) {\n var d = cm.display; // Might be a text scaling operation, clear size caches.\n\n d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;\n d.scrollbarsClipped = false;\n cm.setSize();\n }\n\n var keyNames = {\n 3: \"Pause\",\n 8: \"Backspace\",\n 9: \"Tab\",\n 13: \"Enter\",\n 16: \"Shift\",\n 17: \"Ctrl\",\n 18: \"Alt\",\n 19: \"Pause\",\n 20: \"CapsLock\",\n 27: \"Esc\",\n 32: \"Space\",\n 33: \"PageUp\",\n 34: \"PageDown\",\n 35: \"End\",\n 36: \"Home\",\n 37: \"Left\",\n 38: \"Up\",\n 39: \"Right\",\n 40: \"Down\",\n 44: \"PrintScrn\",\n 45: \"Insert\",\n 46: \"Delete\",\n 59: \";\",\n 61: \"=\",\n 91: \"Mod\",\n 92: \"Mod\",\n 93: \"Mod\",\n 106: \"*\",\n 107: \"=\",\n 109: \"-\",\n 110: \".\",\n 111: \"/\",\n 145: \"ScrollLock\",\n 173: \"-\",\n 186: \";\",\n 187: \"=\",\n 188: \",\",\n 189: \"-\",\n 190: \".\",\n 191: \"/\",\n 192: \"`\",\n 219: \"[\",\n 220: \"\\\\\",\n 221: \"]\",\n 222: \"'\",\n 63232: \"Up\",\n 63233: \"Down\",\n 63234: \"Left\",\n 63235: \"Right\",\n 63272: \"Delete\",\n 63273: \"Home\",\n 63275: \"End\",\n 63276: \"PageUp\",\n 63277: \"PageDown\",\n 63302: \"Insert\"\n }; // Number keys\n\n for (var i = 0; i < 10; i++) {\n keyNames[i + 48] = keyNames[i + 96] = String(i);\n } // Alphabetic keys\n\n\n for (var i$1 = 65; i$1 <= 90; i$1++) {\n keyNames[i$1] = String.fromCharCode(i$1);\n } // Function keys\n\n\n for (var i$2 = 1; i$2 <= 12; i$2++) {\n keyNames[i$2 + 111] = keyNames[i$2 + 63235] = \"F\" + i$2;\n }\n\n var keyMap = {};\n keyMap.basic = {\n \"Left\": \"goCharLeft\",\n \"Right\": \"goCharRight\",\n \"Up\": \"goLineUp\",\n \"Down\": \"goLineDown\",\n \"End\": \"goLineEnd\",\n \"Home\": \"goLineStartSmart\",\n \"PageUp\": \"goPageUp\",\n \"PageDown\": \"goPageDown\",\n \"Delete\": \"delCharAfter\",\n \"Backspace\": \"delCharBefore\",\n \"Shift-Backspace\": \"delCharBefore\",\n \"Tab\": \"defaultTab\",\n \"Shift-Tab\": \"indentAuto\",\n \"Enter\": \"newlineAndIndent\",\n \"Insert\": \"toggleOverwrite\",\n \"Esc\": \"singleSelection\"\n }; // Note that the save and find-related commands aren't defined by\n // default. User code or addons can define them. Unknown commands\n // are simply ignored.\n\n keyMap.pcDefault = {\n \"Ctrl-A\": \"selectAll\",\n \"Ctrl-D\": \"deleteLine\",\n \"Ctrl-Z\": \"undo\",\n \"Shift-Ctrl-Z\": \"redo\",\n \"Ctrl-Y\": \"redo\",\n \"Ctrl-Home\": \"goDocStart\",\n \"Ctrl-End\": \"goDocEnd\",\n \"Ctrl-Up\": \"goLineUp\",\n \"Ctrl-Down\": \"goLineDown\",\n \"Ctrl-Left\": \"goGroupLeft\",\n \"Ctrl-Right\": \"goGroupRight\",\n \"Alt-Left\": \"goLineStart\",\n \"Alt-Right\": \"goLineEnd\",\n \"Ctrl-Backspace\": \"delGroupBefore\",\n \"Ctrl-Delete\": \"delGroupAfter\",\n \"Ctrl-S\": \"save\",\n \"Ctrl-F\": \"find\",\n \"Ctrl-G\": \"findNext\",\n \"Shift-Ctrl-G\": \"findPrev\",\n \"Shift-Ctrl-F\": \"replace\",\n \"Shift-Ctrl-R\": \"replaceAll\",\n \"Ctrl-[\": \"indentLess\",\n \"Ctrl-]\": \"indentMore\",\n \"Ctrl-U\": \"undoSelection\",\n \"Shift-Ctrl-U\": \"redoSelection\",\n \"Alt-U\": \"redoSelection\",\n \"fallthrough\": \"basic\"\n }; // Very basic readline/emacs-style bindings, which are standard on Mac.\n\n keyMap.emacsy = {\n \"Ctrl-F\": \"goCharRight\",\n \"Ctrl-B\": \"goCharLeft\",\n \"Ctrl-P\": \"goLineUp\",\n \"Ctrl-N\": \"goLineDown\",\n \"Alt-F\": \"goWordRight\",\n \"Alt-B\": \"goWordLeft\",\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-D\": \"delWordAfter\",\n \"Alt-Backspace\": \"delWordBefore\",\n \"Ctrl-K\": \"killLine\",\n \"Ctrl-T\": \"transposeChars\",\n \"Ctrl-O\": \"openLine\"\n };\n keyMap.macDefault = {\n \"Cmd-A\": \"selectAll\",\n \"Cmd-D\": \"deleteLine\",\n \"Cmd-Z\": \"undo\",\n \"Shift-Cmd-Z\": \"redo\",\n \"Cmd-Y\": \"redo\",\n \"Cmd-Home\": \"goDocStart\",\n \"Cmd-Up\": \"goDocStart\",\n \"Cmd-End\": \"goDocEnd\",\n \"Cmd-Down\": \"goDocEnd\",\n \"Alt-Left\": \"goGroupLeft\",\n \"Alt-Right\": \"goGroupRight\",\n \"Cmd-Left\": \"goLineLeft\",\n \"Cmd-Right\": \"goLineRight\",\n \"Alt-Backspace\": \"delGroupBefore\",\n \"Ctrl-Alt-Backspace\": \"delGroupAfter\",\n \"Alt-Delete\": \"delGroupAfter\",\n \"Cmd-S\": \"save\",\n \"Cmd-F\": \"find\",\n \"Cmd-G\": \"findNext\",\n \"Shift-Cmd-G\": \"findPrev\",\n \"Cmd-Alt-F\": \"replace\",\n \"Shift-Cmd-Alt-F\": \"replaceAll\",\n \"Cmd-[\": \"indentLess\",\n \"Cmd-]\": \"indentMore\",\n \"Cmd-Backspace\": \"delWrappedLineLeft\",\n \"Cmd-Delete\": \"delWrappedLineRight\",\n \"Cmd-U\": \"undoSelection\",\n \"Shift-Cmd-U\": \"redoSelection\",\n \"Ctrl-Up\": \"goDocStart\",\n \"Ctrl-Down\": \"goDocEnd\",\n \"fallthrough\": [\"basic\", \"emacsy\"]\n };\n keyMap[\"default\"] = mac ? keyMap.macDefault : keyMap.pcDefault; // KEYMAP DISPATCH\n\n function normalizeKeyName(name) {\n var parts = name.split(/-(?!$)/);\n name = parts[parts.length - 1];\n var alt, ctrl, shift, cmd;\n\n for (var i = 0; i < parts.length - 1; i++) {\n var mod = parts[i];\n\n if (/^(cmd|meta|m)$/i.test(mod)) {\n cmd = true;\n } else if (/^a(lt)?$/i.test(mod)) {\n alt = true;\n } else if (/^(c|ctrl|control)$/i.test(mod)) {\n ctrl = true;\n } else if (/^s(hift)?$/i.test(mod)) {\n shift = true;\n } else {\n throw new Error(\"Unrecognized modifier name: \" + mod);\n }\n }\n\n if (alt) {\n name = \"Alt-\" + name;\n }\n\n if (ctrl) {\n name = \"Ctrl-\" + name;\n }\n\n if (cmd) {\n name = \"Cmd-\" + name;\n }\n\n if (shift) {\n name = \"Shift-\" + name;\n }\n\n return name;\n } // This is a kludge to keep keymaps mostly working as raw objects\n // (backwards compatibility) while at the same time support features\n // like normalization and multi-stroke key bindings. It compiles a\n // new normalized keymap, and then updates the old object to reflect\n // this.\n\n\n function normalizeKeyMap(keymap) {\n var copy = {};\n\n for (var keyname in keymap) {\n if (keymap.hasOwnProperty(keyname)) {\n var value = keymap[keyname];\n\n if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) {\n continue;\n }\n\n if (value == \"...\") {\n delete keymap[keyname];\n continue;\n }\n\n var keys = map(keyname.split(\" \"), normalizeKeyName);\n\n for (var i = 0; i < keys.length; i++) {\n var val = void 0,\n name = void 0;\n\n if (i == keys.length - 1) {\n name = keys.join(\" \");\n val = value;\n } else {\n name = keys.slice(0, i + 1).join(\" \");\n val = \"...\";\n }\n\n var prev = copy[name];\n\n if (!prev) {\n copy[name] = val;\n } else if (prev != val) {\n throw new Error(\"Inconsistent bindings for \" + name);\n }\n }\n\n delete keymap[keyname];\n }\n }\n\n for (var prop in copy) {\n keymap[prop] = copy[prop];\n }\n\n return keymap;\n }\n\n function lookupKey(key, map, handle, context) {\n map = getKeyMap(map);\n var found = map.call ? map.call(key, context) : map[key];\n\n if (found === false) {\n return \"nothing\";\n }\n\n if (found === \"...\") {\n return \"multi\";\n }\n\n if (found != null && handle(found)) {\n return \"handled\";\n }\n\n if (map.fallthrough) {\n if (Object.prototype.toString.call(map.fallthrough) != \"[object Array]\") {\n return lookupKey(key, map.fallthrough, handle, context);\n }\n\n for (var i = 0; i < map.fallthrough.length; i++) {\n var result = lookupKey(key, map.fallthrough[i], handle, context);\n\n if (result) {\n return result;\n }\n }\n }\n } // Modifier key presses don't count as 'real' key presses for the\n // purpose of keymap fallthrough.\n\n\n function isModifierKey(value) {\n var name = typeof value == \"string\" ? value : keyNames[value.keyCode];\n return name == \"Ctrl\" || name == \"Alt\" || name == \"Shift\" || name == \"Mod\";\n }\n\n function addModifierNames(name, event, noShift) {\n var base = name;\n\n if (event.altKey && base != \"Alt\") {\n name = \"Alt-\" + name;\n }\n\n if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != \"Ctrl\") {\n name = \"Ctrl-\" + name;\n }\n\n if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != \"Cmd\") {\n name = \"Cmd-\" + name;\n }\n\n if (!noShift && event.shiftKey && base != \"Shift\") {\n name = \"Shift-\" + name;\n }\n\n return name;\n } // Look up the name of a key as indicated by an event object.\n\n\n function keyName(event, noShift) {\n if (presto && event.keyCode == 34 && event[\"char\"]) {\n return false;\n }\n\n var name = keyNames[event.keyCode];\n\n if (name == null || event.altGraphKey) {\n return false;\n } // Ctrl-ScrollLock has keyCode 3, same as Ctrl-Pause,\n // so we'll use event.code when available (Chrome 48+, FF 38+, Safari 10.1+)\n\n\n if (event.keyCode == 3 && event.code) {\n name = event.code;\n }\n\n return addModifierNames(name, event, noShift);\n }\n\n function getKeyMap(val) {\n return typeof val == \"string\" ? keyMap[val] : val;\n } // Helper for deleting text near the selection(s), used to implement\n // backspace, delete, and similar functionality.\n\n\n function deleteNearSelection(cm, compute) {\n var ranges = cm.doc.sel.ranges,\n kill = []; // Build up a set of ranges to kill first, merging overlapping\n // ranges.\n\n for (var i = 0; i < ranges.length; i++) {\n var toKill = compute(ranges[i]);\n\n while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) {\n var replaced = kill.pop();\n\n if (cmp(replaced.from, toKill.from) < 0) {\n toKill.from = replaced.from;\n break;\n }\n }\n\n kill.push(toKill);\n } // Next, remove those actual ranges.\n\n\n runInOp(cm, function () {\n for (var i = kill.length - 1; i >= 0; i--) {\n _replaceRange(cm.doc, \"\", kill[i].from, kill[i].to, \"+delete\");\n }\n\n ensureCursorVisible(cm);\n });\n }\n\n function moveCharLogically(line, ch, dir) {\n var target = skipExtendingChars(line.text, ch + dir, dir);\n return target < 0 || target > line.text.length ? null : target;\n }\n\n function moveLogically(line, start, dir) {\n var ch = moveCharLogically(line, start.ch, dir);\n return ch == null ? null : new Pos(start.line, ch, dir < 0 ? \"after\" : \"before\");\n }\n\n function endOfLine(visually, cm, lineObj, lineNo, dir) {\n if (visually) {\n if (cm.doc.direction == \"rtl\") {\n dir = -dir;\n }\n\n var order = getOrder(lineObj, cm.doc.direction);\n\n if (order) {\n var part = dir < 0 ? lst(order) : order[0];\n var moveInStorageOrder = dir < 0 == (part.level == 1);\n var sticky = moveInStorageOrder ? \"after\" : \"before\";\n var ch; // With a wrapped rtl chunk (possibly spanning multiple bidi parts),\n // it could be that the last bidi part is not on the last visual line,\n // since visual lines contain content order-consecutive chunks.\n // Thus, in rtl, we are looking for the first (content-order) character\n // in the rtl chunk that is on the last line (that is, the same line\n // as the last (content-order) character).\n\n if (part.level > 0 || cm.doc.direction == \"rtl\") {\n var prep = prepareMeasureForLine(cm, lineObj);\n ch = dir < 0 ? lineObj.text.length - 1 : 0;\n var targetTop = measureCharPrepared(cm, prep, ch).top;\n ch = findFirst(function (ch) {\n return measureCharPrepared(cm, prep, ch).top == targetTop;\n }, dir < 0 == (part.level == 1) ? part.from : part.to - 1, ch);\n\n if (sticky == \"before\") {\n ch = moveCharLogically(lineObj, ch, 1);\n }\n } else {\n ch = dir < 0 ? part.to : part.from;\n }\n\n return new Pos(lineNo, ch, sticky);\n }\n }\n\n return new Pos(lineNo, dir < 0 ? lineObj.text.length : 0, dir < 0 ? \"before\" : \"after\");\n }\n\n function moveVisually(cm, line, start, dir) {\n var bidi = getOrder(line, cm.doc.direction);\n\n if (!bidi) {\n return moveLogically(line, start, dir);\n }\n\n if (start.ch >= line.text.length) {\n start.ch = line.text.length;\n start.sticky = \"before\";\n } else if (start.ch <= 0) {\n start.ch = 0;\n start.sticky = \"after\";\n }\n\n var partPos = getBidiPartAt(bidi, start.ch, start.sticky),\n part = bidi[partPos];\n\n if (cm.doc.direction == \"ltr\" && part.level % 2 == 0 && (dir > 0 ? part.to > start.ch : part.from < start.ch)) {\n // Case 1: We move within an ltr part in an ltr editor. Even with wrapped lines,\n // nothing interesting happens.\n return moveLogically(line, start, dir);\n }\n\n var mv = function mv(pos, dir) {\n return moveCharLogically(line, pos instanceof Pos ? pos.ch : pos, dir);\n };\n\n var prep;\n\n var getWrappedLineExtent = function getWrappedLineExtent(ch) {\n if (!cm.options.lineWrapping) {\n return {\n begin: 0,\n end: line.text.length\n };\n }\n\n prep = prep || prepareMeasureForLine(cm, line);\n return wrappedLineExtentChar(cm, line, prep, ch);\n };\n\n var wrappedLineExtent = getWrappedLineExtent(start.sticky == \"before\" ? mv(start, -1) : start.ch);\n\n if (cm.doc.direction == \"rtl\" || part.level == 1) {\n var moveInStorageOrder = part.level == 1 == dir < 0;\n var ch = mv(start, moveInStorageOrder ? 1 : -1);\n\n if (ch != null && (!moveInStorageOrder ? ch >= part.from && ch >= wrappedLineExtent.begin : ch <= part.to && ch <= wrappedLineExtent.end)) {\n // Case 2: We move within an rtl part or in an rtl editor on the same visual line\n var sticky = moveInStorageOrder ? \"before\" : \"after\";\n return new Pos(start.line, ch, sticky);\n }\n } // Case 3: Could not move within this bidi part in this visual line, so leave\n // the current bidi part\n\n\n var searchInVisualLine = function searchInVisualLine(partPos, dir, wrappedLineExtent) {\n var getRes = function getRes(ch, moveInStorageOrder) {\n return moveInStorageOrder ? new Pos(start.line, mv(ch, 1), \"before\") : new Pos(start.line, ch, \"after\");\n };\n\n for (; partPos >= 0 && partPos < bidi.length; partPos += dir) {\n var part = bidi[partPos];\n var moveInStorageOrder = dir > 0 == (part.level != 1);\n var ch = moveInStorageOrder ? wrappedLineExtent.begin : mv(wrappedLineExtent.end, -1);\n\n if (part.from <= ch && ch < part.to) {\n return getRes(ch, moveInStorageOrder);\n }\n\n ch = moveInStorageOrder ? part.from : mv(part.to, -1);\n\n if (wrappedLineExtent.begin <= ch && ch < wrappedLineExtent.end) {\n return getRes(ch, moveInStorageOrder);\n }\n }\n }; // Case 3a: Look for other bidi parts on the same visual line\n\n\n var res = searchInVisualLine(partPos + dir, dir, wrappedLineExtent);\n\n if (res) {\n return res;\n } // Case 3b: Look for other bidi parts on the next visual line\n\n\n var nextCh = dir > 0 ? wrappedLineExtent.end : mv(wrappedLineExtent.begin, -1);\n\n if (nextCh != null && !(dir > 0 && nextCh == line.text.length)) {\n res = searchInVisualLine(dir > 0 ? 0 : bidi.length - 1, dir, getWrappedLineExtent(nextCh));\n\n if (res) {\n return res;\n }\n } // Case 4: Nowhere to move\n\n\n return null;\n } // Commands are parameter-less actions that can be performed on an\n // editor, mostly used for keybindings.\n\n\n var commands = {\n selectAll: selectAll,\n singleSelection: function singleSelection(cm) {\n return cm.setSelection(cm.getCursor(\"anchor\"), cm.getCursor(\"head\"), sel_dontScroll);\n },\n killLine: function killLine(cm) {\n return deleteNearSelection(cm, function (range) {\n if (range.empty()) {\n var len = getLine(cm.doc, range.head.line).text.length;\n\n if (range.head.ch == len && range.head.line < cm.lastLine()) {\n return {\n from: range.head,\n to: Pos(range.head.line + 1, 0)\n };\n } else {\n return {\n from: range.head,\n to: Pos(range.head.line, len)\n };\n }\n } else {\n return {\n from: range.from(),\n to: range.to()\n };\n }\n });\n },\n deleteLine: function deleteLine(cm) {\n return deleteNearSelection(cm, function (range) {\n return {\n from: Pos(range.from().line, 0),\n to: _clipPos(cm.doc, Pos(range.to().line + 1, 0))\n };\n });\n },\n delLineLeft: function delLineLeft(cm) {\n return deleteNearSelection(cm, function (range) {\n return {\n from: Pos(range.from().line, 0),\n to: range.from()\n };\n });\n },\n delWrappedLineLeft: function delWrappedLineLeft(cm) {\n return deleteNearSelection(cm, function (range) {\n var top = cm.charCoords(range.head, \"div\").top + 5;\n var leftPos = cm.coordsChar({\n left: 0,\n top: top\n }, \"div\");\n return {\n from: leftPos,\n to: range.from()\n };\n });\n },\n delWrappedLineRight: function delWrappedLineRight(cm) {\n return deleteNearSelection(cm, function (range) {\n var top = cm.charCoords(range.head, \"div\").top + 5;\n var rightPos = cm.coordsChar({\n left: cm.display.lineDiv.offsetWidth + 100,\n top: top\n }, \"div\");\n return {\n from: range.from(),\n to: rightPos\n };\n });\n },\n undo: function undo(cm) {\n return cm.undo();\n },\n redo: function redo(cm) {\n return cm.redo();\n },\n undoSelection: function undoSelection(cm) {\n return cm.undoSelection();\n },\n redoSelection: function redoSelection(cm) {\n return cm.redoSelection();\n },\n goDocStart: function goDocStart(cm) {\n return cm.extendSelection(Pos(cm.firstLine(), 0));\n },\n goDocEnd: function goDocEnd(cm) {\n return cm.extendSelection(Pos(cm.lastLine()));\n },\n goLineStart: function goLineStart(cm) {\n return cm.extendSelectionsBy(function (range) {\n return lineStart(cm, range.head.line);\n }, {\n origin: \"+move\",\n bias: 1\n });\n },\n goLineStartSmart: function goLineStartSmart(cm) {\n return cm.extendSelectionsBy(function (range) {\n return lineStartSmart(cm, range.head);\n }, {\n origin: \"+move\",\n bias: 1\n });\n },\n goLineEnd: function goLineEnd(cm) {\n return cm.extendSelectionsBy(function (range) {\n return lineEnd(cm, range.head.line);\n }, {\n origin: \"+move\",\n bias: -1\n });\n },\n goLineRight: function goLineRight(cm) {\n return cm.extendSelectionsBy(function (range) {\n var top = cm.cursorCoords(range.head, \"div\").top + 5;\n return cm.coordsChar({\n left: cm.display.lineDiv.offsetWidth + 100,\n top: top\n }, \"div\");\n }, sel_move);\n },\n goLineLeft: function goLineLeft(cm) {\n return cm.extendSelectionsBy(function (range) {\n var top = cm.cursorCoords(range.head, \"div\").top + 5;\n return cm.coordsChar({\n left: 0,\n top: top\n }, \"div\");\n }, sel_move);\n },\n goLineLeftSmart: function goLineLeftSmart(cm) {\n return cm.extendSelectionsBy(function (range) {\n var top = cm.cursorCoords(range.head, \"div\").top + 5;\n var pos = cm.coordsChar({\n left: 0,\n top: top\n }, \"div\");\n\n if (pos.ch < cm.getLine(pos.line).search(/\\S/)) {\n return lineStartSmart(cm, range.head);\n }\n\n return pos;\n }, sel_move);\n },\n goLineUp: function goLineUp(cm) {\n return cm.moveV(-1, \"line\");\n },\n goLineDown: function goLineDown(cm) {\n return cm.moveV(1, \"line\");\n },\n goPageUp: function goPageUp(cm) {\n return cm.moveV(-1, \"page\");\n },\n goPageDown: function goPageDown(cm) {\n return cm.moveV(1, \"page\");\n },\n goCharLeft: function goCharLeft(cm) {\n return cm.moveH(-1, \"char\");\n },\n goCharRight: function goCharRight(cm) {\n return cm.moveH(1, \"char\");\n },\n goColumnLeft: function goColumnLeft(cm) {\n return cm.moveH(-1, \"column\");\n },\n goColumnRight: function goColumnRight(cm) {\n return cm.moveH(1, \"column\");\n },\n goWordLeft: function goWordLeft(cm) {\n return cm.moveH(-1, \"word\");\n },\n goGroupRight: function goGroupRight(cm) {\n return cm.moveH(1, \"group\");\n },\n goGroupLeft: function goGroupLeft(cm) {\n return cm.moveH(-1, \"group\");\n },\n goWordRight: function goWordRight(cm) {\n return cm.moveH(1, \"word\");\n },\n delCharBefore: function delCharBefore(cm) {\n return cm.deleteH(-1, \"char\");\n },\n delCharAfter: function delCharAfter(cm) {\n return cm.deleteH(1, \"char\");\n },\n delWordBefore: function delWordBefore(cm) {\n return cm.deleteH(-1, \"word\");\n },\n delWordAfter: function delWordAfter(cm) {\n return cm.deleteH(1, \"word\");\n },\n delGroupBefore: function delGroupBefore(cm) {\n return cm.deleteH(-1, \"group\");\n },\n delGroupAfter: function delGroupAfter(cm) {\n return cm.deleteH(1, \"group\");\n },\n indentAuto: function indentAuto(cm) {\n return cm.indentSelection(\"smart\");\n },\n indentMore: function indentMore(cm) {\n return cm.indentSelection(\"add\");\n },\n indentLess: function indentLess(cm) {\n return cm.indentSelection(\"subtract\");\n },\n insertTab: function insertTab(cm) {\n return cm.replaceSelection(\"\\t\");\n },\n insertSoftTab: function insertSoftTab(cm) {\n var spaces = [],\n ranges = cm.listSelections(),\n tabSize = cm.options.tabSize;\n\n for (var i = 0; i < ranges.length; i++) {\n var pos = ranges[i].from();\n var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize);\n spaces.push(spaceStr(tabSize - col % tabSize));\n }\n\n cm.replaceSelections(spaces);\n },\n defaultTab: function defaultTab(cm) {\n if (cm.somethingSelected()) {\n cm.indentSelection(\"add\");\n } else {\n cm.execCommand(\"insertTab\");\n }\n },\n // Swap the two chars left and right of each selection's head.\n // Move cursor behind the two swapped characters afterwards.\n //\n // Doesn't consider line feeds a character.\n // Doesn't scan more than one line above to find a character.\n // Doesn't do anything on an empty line.\n // Doesn't do anything with non-empty selections.\n transposeChars: function transposeChars(cm) {\n return runInOp(cm, function () {\n var ranges = cm.listSelections(),\n newSel = [];\n\n for (var i = 0; i < ranges.length; i++) {\n if (!ranges[i].empty()) {\n continue;\n }\n\n var cur = ranges[i].head,\n line = getLine(cm.doc, cur.line).text;\n\n if (line) {\n if (cur.ch == line.length) {\n cur = new Pos(cur.line, cur.ch - 1);\n }\n\n if (cur.ch > 0) {\n cur = new Pos(cur.line, cur.ch + 1);\n cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2), Pos(cur.line, cur.ch - 2), cur, \"+transpose\");\n } else if (cur.line > cm.doc.first) {\n var prev = getLine(cm.doc, cur.line - 1).text;\n\n if (prev) {\n cur = new Pos(cur.line, 1);\n cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() + prev.charAt(prev.length - 1), Pos(cur.line - 1, prev.length - 1), cur, \"+transpose\");\n }\n }\n }\n\n newSel.push(new Range(cur, cur));\n }\n\n cm.setSelections(newSel);\n });\n },\n newlineAndIndent: function newlineAndIndent(cm) {\n return runInOp(cm, function () {\n var sels = cm.listSelections();\n\n for (var i = sels.length - 1; i >= 0; i--) {\n cm.replaceRange(cm.doc.lineSeparator(), sels[i].anchor, sels[i].head, \"+input\");\n }\n\n sels = cm.listSelections();\n\n for (var i$1 = 0; i$1 < sels.length; i$1++) {\n cm.indentLine(sels[i$1].from().line, null, true);\n }\n\n ensureCursorVisible(cm);\n });\n },\n openLine: function openLine(cm) {\n return cm.replaceSelection(\"\\n\", \"start\");\n },\n toggleOverwrite: function toggleOverwrite(cm) {\n return cm.toggleOverwrite();\n }\n };\n\n function lineStart(cm, lineN) {\n var line = getLine(cm.doc, lineN);\n var visual = visualLine(line);\n\n if (visual != line) {\n lineN = lineNo(visual);\n }\n\n return endOfLine(true, cm, visual, lineN, 1);\n }\n\n function lineEnd(cm, lineN) {\n var line = getLine(cm.doc, lineN);\n var visual = visualLineEnd(line);\n\n if (visual != line) {\n lineN = lineNo(visual);\n }\n\n return endOfLine(true, cm, line, lineN, -1);\n }\n\n function lineStartSmart(cm, pos) {\n var start = lineStart(cm, pos.line);\n var line = getLine(cm.doc, start.line);\n var order = getOrder(line, cm.doc.direction);\n\n if (!order || order[0].level == 0) {\n var firstNonWS = Math.max(start.ch, line.text.search(/\\S/));\n var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch;\n return Pos(start.line, inWS ? 0 : firstNonWS, start.sticky);\n }\n\n return start;\n } // Run a handler that was bound to a key.\n\n\n function doHandleBinding(cm, bound, dropShift) {\n if (typeof bound == \"string\") {\n bound = commands[bound];\n\n if (!bound) {\n return false;\n }\n } // Ensure previous input has been read, so that the handler sees a\n // consistent view of the document\n\n\n cm.display.input.ensurePolled();\n var prevShift = cm.display.shift,\n done = false;\n\n try {\n if (cm.isReadOnly()) {\n cm.state.suppressEdits = true;\n }\n\n if (dropShift) {\n cm.display.shift = false;\n }\n\n done = bound(cm) != Pass;\n } finally {\n cm.display.shift = prevShift;\n cm.state.suppressEdits = false;\n }\n\n return done;\n }\n\n function lookupKeyForEditor(cm, name, handle) {\n for (var i = 0; i < cm.state.keyMaps.length; i++) {\n var result = lookupKey(name, cm.state.keyMaps[i], handle, cm);\n\n if (result) {\n return result;\n }\n }\n\n return cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm) || lookupKey(name, cm.options.keyMap, handle, cm);\n } // Note that, despite the name, this function is also used to check\n // for bound mouse clicks.\n\n\n var stopSeq = new Delayed();\n\n function dispatchKey(cm, name, e, handle) {\n var seq = cm.state.keySeq;\n\n if (seq) {\n if (isModifierKey(name)) {\n return \"handled\";\n }\n\n if (/\\'$/.test(name)) {\n cm.state.keySeq = null;\n } else {\n stopSeq.set(50, function () {\n if (cm.state.keySeq == seq) {\n cm.state.keySeq = null;\n cm.display.input.reset();\n }\n });\n }\n\n if (dispatchKeyInner(cm, seq + \" \" + name, e, handle)) {\n return true;\n }\n }\n\n return dispatchKeyInner(cm, name, e, handle);\n }\n\n function dispatchKeyInner(cm, name, e, handle) {\n var result = lookupKeyForEditor(cm, name, handle);\n\n if (result == \"multi\") {\n cm.state.keySeq = name;\n }\n\n if (result == \"handled\") {\n signalLater(cm, \"keyHandled\", cm, name, e);\n }\n\n if (result == \"handled\" || result == \"multi\") {\n e_preventDefault(e);\n restartBlink(cm);\n }\n\n return !!result;\n } // Handle a key from the keydown event.\n\n\n function handleKeyBinding(cm, e) {\n var name = keyName(e, true);\n\n if (!name) {\n return false;\n }\n\n if (e.shiftKey && !cm.state.keySeq) {\n // First try to resolve full name (including 'Shift-'). Failing\n // that, see if there is a cursor-motion command (starting with\n // 'go') bound to the keyname without 'Shift-'.\n return dispatchKey(cm, \"Shift-\" + name, e, function (b) {\n return doHandleBinding(cm, b, true);\n }) || dispatchKey(cm, name, e, function (b) {\n if (typeof b == \"string\" ? /^go[A-Z]/.test(b) : b.motion) {\n return doHandleBinding(cm, b);\n }\n });\n } else {\n return dispatchKey(cm, name, e, function (b) {\n return doHandleBinding(cm, b);\n });\n }\n } // Handle a key from the keypress event\n\n\n function handleCharBinding(cm, e, ch) {\n return dispatchKey(cm, \"'\" + ch + \"'\", e, function (b) {\n return doHandleBinding(cm, b, true);\n });\n }\n\n var lastStoppedKey = null;\n\n function onKeyDown(e) {\n var cm = this;\n\n if (e.target && e.target != cm.display.input.getField()) {\n return;\n }\n\n cm.curOp.focus = activeElt();\n\n if (signalDOMEvent(cm, e)) {\n return;\n } // IE does strange things with escape.\n\n\n if (ie && ie_version < 11 && e.keyCode == 27) {\n e.returnValue = false;\n }\n\n var code = e.keyCode;\n cm.display.shift = code == 16 || e.shiftKey;\n var handled = handleKeyBinding(cm, e);\n\n if (presto) {\n lastStoppedKey = handled ? code : null; // Opera has no cut event... we try to at least catch the key combo\n\n if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey)) {\n cm.replaceSelection(\"\", null, \"cut\");\n }\n }\n\n if (gecko && !mac && !handled && code == 46 && e.shiftKey && !e.ctrlKey && document.execCommand) {\n document.execCommand(\"cut\");\n } // Turn mouse into crosshair when Alt is held on Mac.\n\n\n if (code == 18 && !/\\bCodeMirror-crosshair\\b/.test(cm.display.lineDiv.className)) {\n showCrossHair(cm);\n }\n }\n\n function showCrossHair(cm) {\n var lineDiv = cm.display.lineDiv;\n addClass(lineDiv, \"CodeMirror-crosshair\");\n\n function up(e) {\n if (e.keyCode == 18 || !e.altKey) {\n rmClass(lineDiv, \"CodeMirror-crosshair\");\n off(document, \"keyup\", up);\n off(document, \"mouseover\", up);\n }\n }\n\n on(document, \"keyup\", up);\n on(document, \"mouseover\", up);\n }\n\n function onKeyUp(e) {\n if (e.keyCode == 16) {\n this.doc.sel.shift = false;\n }\n\n signalDOMEvent(this, e);\n }\n\n function onKeyPress(e) {\n var cm = this;\n\n if (e.target && e.target != cm.display.input.getField()) {\n return;\n }\n\n if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) {\n return;\n }\n\n var keyCode = e.keyCode,\n charCode = e.charCode;\n\n if (presto && keyCode == lastStoppedKey) {\n lastStoppedKey = null;\n e_preventDefault(e);\n return;\n }\n\n if (presto && (!e.which || e.which < 10) && handleKeyBinding(cm, e)) {\n return;\n }\n\n var ch = String.fromCharCode(charCode == null ? keyCode : charCode); // Some browsers fire keypress events for backspace\n\n if (ch == \"\\x08\") {\n return;\n }\n\n if (handleCharBinding(cm, e, ch)) {\n return;\n }\n\n cm.display.input.onKeyPress(e);\n }\n\n var DOUBLECLICK_DELAY = 400;\n\n var PastClick = function PastClick(time, pos, button) {\n this.time = time;\n this.pos = pos;\n this.button = button;\n };\n\n PastClick.prototype.compare = function (time, pos, button) {\n return this.time + DOUBLECLICK_DELAY > time && cmp(pos, this.pos) == 0 && button == this.button;\n };\n\n var lastClick, lastDoubleClick;\n\n function clickRepeat(pos, button) {\n var now = +new Date();\n\n if (lastDoubleClick && lastDoubleClick.compare(now, pos, button)) {\n lastClick = lastDoubleClick = null;\n return \"triple\";\n } else if (lastClick && lastClick.compare(now, pos, button)) {\n lastDoubleClick = new PastClick(now, pos, button);\n lastClick = null;\n return \"double\";\n } else {\n lastClick = new PastClick(now, pos, button);\n lastDoubleClick = null;\n return \"single\";\n }\n } // A mouse down can be a single click, double click, triple click,\n // start of selection drag, start of text drag, new cursor\n // (ctrl-click), rectangle drag (alt-drag), or xwin\n // middle-click-paste. Or it might be a click on something we should\n // not interfere with, such as a scrollbar or widget.\n\n\n function onMouseDown(e) {\n var cm = this,\n display = cm.display;\n\n if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) {\n return;\n }\n\n display.input.ensurePolled();\n display.shift = e.shiftKey;\n\n if (eventInWidget(display, e)) {\n if (!webkit) {\n // Briefly turn off draggability, to allow widgets to do\n // normal dragging things.\n display.scroller.draggable = false;\n setTimeout(function () {\n return display.scroller.draggable = true;\n }, 100);\n }\n\n return;\n }\n\n if (clickInGutter(cm, e)) {\n return;\n }\n\n var pos = posFromMouse(cm, e),\n button = e_button(e),\n repeat = pos ? clickRepeat(pos, button) : \"single\";\n window.focus(); // #3261: make sure, that we're not starting a second selection\n\n if (button == 1 && cm.state.selectingText) {\n cm.state.selectingText(e);\n }\n\n if (pos && handleMappedButton(cm, button, pos, repeat, e)) {\n return;\n }\n\n if (button == 1) {\n if (pos) {\n leftButtonDown(cm, pos, repeat, e);\n } else if (e_target(e) == display.scroller) {\n e_preventDefault(e);\n }\n } else if (button == 2) {\n if (pos) {\n extendSelection(cm.doc, pos);\n }\n\n setTimeout(function () {\n return display.input.focus();\n }, 20);\n } else if (button == 3) {\n if (captureRightClick) {\n cm.display.input.onContextMenu(e);\n } else {\n delayBlurEvent(cm);\n }\n }\n }\n\n function handleMappedButton(cm, button, pos, repeat, event) {\n var name = \"Click\";\n\n if (repeat == \"double\") {\n name = \"Double\" + name;\n } else if (repeat == \"triple\") {\n name = \"Triple\" + name;\n }\n\n name = (button == 1 ? \"Left\" : button == 2 ? \"Middle\" : \"Right\") + name;\n return dispatchKey(cm, addModifierNames(name, event), event, function (bound) {\n if (typeof bound == \"string\") {\n bound = commands[bound];\n }\n\n if (!bound) {\n return false;\n }\n\n var done = false;\n\n try {\n if (cm.isReadOnly()) {\n cm.state.suppressEdits = true;\n }\n\n done = bound(cm, pos) != Pass;\n } finally {\n cm.state.suppressEdits = false;\n }\n\n return done;\n });\n }\n\n function configureMouse(cm, repeat, event) {\n var option = cm.getOption(\"configureMouse\");\n var value = option ? option(cm, repeat, event) : {};\n\n if (value.unit == null) {\n var rect = chromeOS ? event.shiftKey && event.metaKey : event.altKey;\n value.unit = rect ? \"rectangle\" : repeat == \"single\" ? \"char\" : repeat == \"double\" ? \"word\" : \"line\";\n }\n\n if (value.extend == null || cm.doc.extend) {\n value.extend = cm.doc.extend || event.shiftKey;\n }\n\n if (value.addNew == null) {\n value.addNew = mac ? event.metaKey : event.ctrlKey;\n }\n\n if (value.moveOnDrag == null) {\n value.moveOnDrag = !(mac ? event.altKey : event.ctrlKey);\n }\n\n return value;\n }\n\n function leftButtonDown(cm, pos, repeat, event) {\n if (ie) {\n setTimeout(bind(ensureFocus, cm), 0);\n } else {\n cm.curOp.focus = activeElt();\n }\n\n var behavior = configureMouse(cm, repeat, event);\n var sel = cm.doc.sel,\n contained;\n\n if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() && repeat == \"single\" && (contained = sel.contains(pos)) > -1 && (cmp((contained = sel.ranges[contained]).from(), pos) < 0 || pos.xRel > 0) && (cmp(contained.to(), pos) > 0 || pos.xRel < 0)) {\n leftButtonStartDrag(cm, event, pos, behavior);\n } else {\n leftButtonSelect(cm, event, pos, behavior);\n }\n } // Start a text drag. When it ends, see if any dragging actually\n // happen, and treat as a click if it didn't.\n\n\n function leftButtonStartDrag(cm, event, pos, behavior) {\n var display = cm.display,\n moved = false;\n var dragEnd = operation(cm, function (e) {\n if (webkit) {\n display.scroller.draggable = false;\n }\n\n cm.state.draggingText = false;\n off(display.wrapper.ownerDocument, \"mouseup\", dragEnd);\n off(display.wrapper.ownerDocument, \"mousemove\", mouseMove);\n off(display.scroller, \"dragstart\", dragStart);\n off(display.scroller, \"drop\", dragEnd);\n\n if (!moved) {\n e_preventDefault(e);\n\n if (!behavior.addNew) {\n extendSelection(cm.doc, pos, null, null, behavior.extend);\n } // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081)\n\n\n if (webkit && !safari || ie && ie_version == 9) {\n setTimeout(function () {\n display.wrapper.ownerDocument.body.focus({\n preventScroll: true\n });\n display.input.focus();\n }, 20);\n } else {\n display.input.focus();\n }\n }\n });\n\n var mouseMove = function mouseMove(e2) {\n moved = moved || Math.abs(event.clientX - e2.clientX) + Math.abs(event.clientY - e2.clientY) >= 10;\n };\n\n var dragStart = function dragStart() {\n return moved = true;\n }; // Let the drag handler handle this.\n\n\n if (webkit) {\n display.scroller.draggable = true;\n }\n\n cm.state.draggingText = dragEnd;\n dragEnd.copy = !behavior.moveOnDrag; // IE's approach to draggable\n\n if (display.scroller.dragDrop) {\n display.scroller.dragDrop();\n }\n\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 delayBlurEvent(cm);\n setTimeout(function () {\n return display.input.focus();\n }, 20);\n }\n\n function rangeForUnit(cm, pos, unit) {\n if (unit == \"char\") {\n return new Range(pos, pos);\n }\n\n if (unit == \"word\") {\n return cm.findWordAt(pos);\n }\n\n if (unit == \"line\") {\n return new Range(Pos(pos.line, 0), _clipPos(cm.doc, Pos(pos.line + 1, 0)));\n }\n\n var result = unit(cm, pos);\n return new Range(result.from, result.to);\n } // Normal selection, as opposed to text dragging.\n\n\n function leftButtonSelect(cm, event, start, behavior) {\n var display = cm.display,\n doc = cm.doc;\n e_preventDefault(event);\n var ourRange,\n ourIndex,\n startSel = doc.sel,\n ranges = startSel.ranges;\n\n if (behavior.addNew && !behavior.extend) {\n ourIndex = doc.sel.contains(start);\n\n if (ourIndex > -1) {\n ourRange = ranges[ourIndex];\n } else {\n ourRange = new Range(start, start);\n }\n } else {\n ourRange = doc.sel.primary();\n ourIndex = doc.sel.primIndex;\n }\n\n if (behavior.unit == \"rectangle\") {\n if (!behavior.addNew) {\n ourRange = new Range(start, start);\n }\n\n start = posFromMouse(cm, event, true, true);\n ourIndex = -1;\n } else {\n var range = rangeForUnit(cm, start, behavior.unit);\n\n if (behavior.extend) {\n ourRange = extendRange(ourRange, range.anchor, range.head, behavior.extend);\n } else {\n ourRange = range;\n }\n }\n\n if (!behavior.addNew) {\n ourIndex = 0;\n setSelection(doc, new Selection([ourRange], 0), sel_mouse);\n startSel = doc.sel;\n } else if (ourIndex == -1) {\n ourIndex = ranges.length;\n setSelection(doc, normalizeSelection(cm, ranges.concat([ourRange]), ourIndex), {\n scroll: false,\n origin: \"*mouse\"\n });\n } else if (ranges.length > 1 && ranges[ourIndex].empty() && behavior.unit == \"char\" && !behavior.extend) {\n setSelection(doc, normalizeSelection(cm, ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0), {\n scroll: false,\n origin: \"*mouse\"\n });\n startSel = doc.sel;\n } else {\n replaceOneSelection(doc, ourIndex, ourRange, sel_mouse);\n }\n\n var lastPos = start;\n\n function extendTo(pos) {\n if (cmp(lastPos, pos) == 0) {\n return;\n }\n\n lastPos = pos;\n\n if (behavior.unit == \"rectangle\") {\n var ranges = [],\n tabSize = cm.options.tabSize;\n var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize);\n var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize);\n var left = Math.min(startCol, posCol),\n right = Math.max(startCol, posCol);\n\n for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line)); line <= end; line++) {\n var text = getLine(doc, line).text,\n leftPos = findColumn(text, left, tabSize);\n\n if (left == right) {\n ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos)));\n } else if (text.length > leftPos) {\n ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize))));\n }\n }\n\n if (!ranges.length) {\n ranges.push(new Range(start, start));\n }\n\n setSelection(doc, normalizeSelection(cm, startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex), {\n origin: \"*mouse\",\n scroll: false\n });\n cm.scrollIntoView(pos);\n } else {\n var oldRange = ourRange;\n var range = rangeForUnit(cm, pos, behavior.unit);\n var anchor = oldRange.anchor,\n head;\n\n if (cmp(range.anchor, anchor) > 0) {\n head = range.head;\n anchor = minPos(oldRange.from(), range.anchor);\n } else {\n head = range.anchor;\n anchor = maxPos(oldRange.to(), range.head);\n }\n\n var ranges$1 = startSel.ranges.slice(0);\n ranges$1[ourIndex] = bidiSimplify(cm, new Range(_clipPos(doc, anchor), head));\n setSelection(doc, normalizeSelection(cm, ranges$1, ourIndex), sel_mouse);\n }\n }\n\n var editorSize = display.wrapper.getBoundingClientRect(); // Used to ensure timeout re-tries don't fire when another extend\n // happened in the meantime (clearTimeout isn't reliable -- at\n // least on Chrome, the timeouts still happen even when cleared,\n // if the clear happens after their scheduled firing time).\n\n var counter = 0;\n\n function extend(e) {\n var curCount = ++counter;\n var cur = posFromMouse(cm, e, true, behavior.unit == \"rectangle\");\n\n if (!cur) {\n return;\n }\n\n if (cmp(cur, lastPos) != 0) {\n cm.curOp.focus = activeElt();\n extendTo(cur);\n var visible = visibleLines(display, doc);\n\n if (cur.line >= visible.to || cur.line < visible.from) {\n setTimeout(operation(cm, function () {\n if (counter == curCount) {\n extend(e);\n }\n }), 150);\n }\n } else {\n var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0;\n\n if (outside) {\n setTimeout(operation(cm, function () {\n if (counter != curCount) {\n return;\n }\n\n display.scroller.scrollTop += outside;\n extend(e);\n }), 50);\n }\n }\n }\n\n function done(e) {\n cm.state.selectingText = false;\n counter = Infinity; // If e is null or undefined we interpret this as someone trying\n // to explicitly cancel the selection rather than the user\n // letting go of the mouse button.\n\n if (e) {\n e_preventDefault(e);\n display.input.focus();\n }\n\n off(display.wrapper.ownerDocument, \"mousemove\", move);\n off(display.wrapper.ownerDocument, \"mouseup\", up);\n doc.history.lastSelOrigin = null;\n }\n\n var move = operation(cm, function (e) {\n if (e.buttons === 0 || !e_button(e)) {\n done(e);\n } else {\n extend(e);\n }\n });\n var up = operation(cm, done);\n cm.state.selectingText = up;\n on(display.wrapper.ownerDocument, \"mousemove\", move);\n on(display.wrapper.ownerDocument, \"mouseup\", up);\n } // Used when mouse-selecting to adjust the anchor to the proper side\n // of a bidi jump depending on the visual position of the head.\n\n\n function bidiSimplify(cm, range) {\n var anchor = range.anchor;\n var head = range.head;\n var anchorLine = getLine(cm.doc, anchor.line);\n\n if (cmp(anchor, head) == 0 && anchor.sticky == head.sticky) {\n return range;\n }\n\n var order = getOrder(anchorLine);\n\n if (!order) {\n return range;\n }\n\n var index = getBidiPartAt(order, anchor.ch, anchor.sticky),\n part = order[index];\n\n if (part.from != anchor.ch && part.to != anchor.ch) {\n return range;\n }\n\n var boundary = index + (part.from == anchor.ch == (part.level != 1) ? 0 : 1);\n\n if (boundary == 0 || boundary == order.length) {\n return range;\n } // Compute the relative visual position of the head compared to the\n // anchor (<0 is to the left, >0 to the right)\n\n\n var leftSide;\n\n if (head.line != anchor.line) {\n leftSide = (head.line - anchor.line) * (cm.doc.direction == \"ltr\" ? 1 : -1) > 0;\n } else {\n var headIndex = getBidiPartAt(order, head.ch, head.sticky);\n var dir = headIndex - index || (head.ch - anchor.ch) * (part.level == 1 ? -1 : 1);\n\n if (headIndex == boundary - 1 || headIndex == boundary) {\n leftSide = dir < 0;\n } else {\n leftSide = dir > 0;\n }\n }\n\n var usePart = order[boundary + (leftSide ? -1 : 0)];\n var from = leftSide == (usePart.level == 1);\n var ch = from ? usePart.from : usePart.to,\n sticky = from ? \"after\" : \"before\";\n return anchor.ch == ch && anchor.sticky == sticky ? range : new Range(new Pos(anchor.line, ch, sticky), head);\n } // Determines whether an event happened in the gutter, and fires the\n // handlers for the corresponding event.\n\n\n function gutterEvent(cm, e, type, prevent) {\n var mX, mY;\n\n if (e.touches) {\n mX = e.touches[0].clientX;\n mY = e.touches[0].clientY;\n } else {\n try {\n mX = e.clientX;\n mY = e.clientY;\n } catch (e$1) {\n return false;\n }\n }\n\n if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) {\n return false;\n }\n\n if (prevent) {\n e_preventDefault(e);\n }\n\n var display = cm.display;\n var lineBox = display.lineDiv.getBoundingClientRect();\n\n if (mY > lineBox.bottom || !hasHandler(cm, type)) {\n return e_defaultPrevented(e);\n }\n\n mY -= lineBox.top - display.viewOffset;\n\n for (var i = 0; i < cm.display.gutterSpecs.length; ++i) {\n var g = display.gutters.childNodes[i];\n\n if (g && g.getBoundingClientRect().right >= mX) {\n var line = _lineAtHeight(cm.doc, mY);\n\n var gutter = cm.display.gutterSpecs[i];\n signal(cm, type, cm, line, gutter.className, e);\n return e_defaultPrevented(e);\n }\n }\n }\n\n function clickInGutter(cm, e) {\n return gutterEvent(cm, e, \"gutterClick\", true);\n } // CONTEXT MENU HANDLING\n // To make the context menu work, we need to briefly unhide the\n // textarea (making it as unobtrusive as possible) to let the\n // right-click take effect on it.\n\n\n function onContextMenu(cm, e) {\n if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) {\n return;\n }\n\n if (signalDOMEvent(cm, e, \"contextmenu\")) {\n return;\n }\n\n if (!captureRightClick) {\n cm.display.input.onContextMenu(e);\n }\n }\n\n function contextMenuInGutter(cm, e) {\n if (!hasHandler(cm, \"gutterContextMenu\")) {\n return false;\n }\n\n return gutterEvent(cm, e, \"gutterContextMenu\", false);\n }\n\n function themeChanged(cm) {\n cm.display.wrapper.className = cm.display.wrapper.className.replace(/\\s*cm-s-\\S+/g, \"\") + cm.options.theme.replace(/(^|\\s)\\s*/g, \" cm-s-\");\n clearCaches(cm);\n }\n\n var Init = {\n toString: function toString() {\n return \"CodeMirror.Init\";\n }\n };\n var defaults = {};\n var optionHandlers = {};\n\n function defineOptions(CodeMirror) {\n var optionHandlers = CodeMirror.optionHandlers;\n\n function option(name, deflt, handle, notOnInit) {\n CodeMirror.defaults[name] = deflt;\n\n if (handle) {\n optionHandlers[name] = notOnInit ? function (cm, val, old) {\n if (old != Init) {\n handle(cm, val, old);\n }\n } : handle;\n }\n }\n\n CodeMirror.defineOption = option; // Passed to option handlers when there is no old value.\n\n CodeMirror.Init = Init; // These two are, on init, called from the constructor because they\n // have to be initialized before the editor can start at all.\n\n option(\"value\", \"\", function (cm, val) {\n return cm.setValue(val);\n }, true);\n option(\"mode\", null, function (cm, val) {\n cm.doc.modeOption = val;\n loadMode(cm);\n }, true);\n option(\"indentUnit\", 2, loadMode, true);\n option(\"indentWithTabs\", false);\n option(\"smartIndent\", true);\n option(\"tabSize\", 4, function (cm) {\n resetModeState(cm);\n clearCaches(cm);\n regChange(cm);\n }, true);\n option(\"lineSeparator\", null, function (cm, val) {\n cm.doc.lineSep = val;\n\n if (!val) {\n return;\n }\n\n var newBreaks = [],\n lineNo = cm.doc.first;\n cm.doc.iter(function (line) {\n for (var pos = 0;;) {\n var found = line.text.indexOf(val, pos);\n\n if (found == -1) {\n break;\n }\n\n pos = found + val.length;\n newBreaks.push(Pos(lineNo, found));\n }\n\n lineNo++;\n });\n\n for (var i = newBreaks.length - 1; i >= 0; i--) {\n _replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length));\n }\n });\n option(\"specialChars\", /[\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u061c\\u200b-\\u200c\\u200e\\u200f\\u2028\\u2029\\ufeff\\ufff9-\\ufffc]/g, function (cm, val, old) {\n cm.state.specialChars = new RegExp(val.source + (val.test(\"\\t\") ? \"\" : \"|\\t\"), \"g\");\n\n if (old != Init) {\n cm.refresh();\n }\n });\n option(\"specialCharPlaceholder\", defaultSpecialCharPlaceholder, function (cm) {\n return cm.refresh();\n }, true);\n option(\"electricChars\", true);\n option(\"inputStyle\", mobile ? \"contenteditable\" : \"textarea\", function () {\n throw new Error(\"inputStyle can not (yet) be changed in a running editor\"); // FIXME\n }, true);\n option(\"spellcheck\", false, function (cm, val) {\n return cm.getInputField().spellcheck = val;\n }, true);\n option(\"autocorrect\", false, function (cm, val) {\n return cm.getInputField().autocorrect = val;\n }, true);\n option(\"autocapitalize\", false, function (cm, val) {\n return cm.getInputField().autocapitalize = val;\n }, true);\n option(\"rtlMoveVisually\", !windows);\n option(\"wholeLineUpdateBefore\", true);\n option(\"theme\", \"default\", function (cm) {\n themeChanged(cm);\n updateGutters(cm);\n }, true);\n option(\"keyMap\", \"default\", function (cm, val, old) {\n var next = getKeyMap(val);\n var prev = old != Init && getKeyMap(old);\n\n if (prev && prev.detach) {\n prev.detach(cm, next);\n }\n\n if (next.attach) {\n next.attach(cm, prev || null);\n }\n });\n option(\"extraKeys\", null);\n option(\"configureMouse\", null);\n option(\"lineWrapping\", false, wrappingChanged, true);\n option(\"gutters\", [], function (cm, val) {\n cm.display.gutterSpecs = getGutters(val, cm.options.lineNumbers);\n updateGutters(cm);\n }, true);\n option(\"fixedGutter\", true, function (cm, val) {\n cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + \"px\" : \"0\";\n cm.refresh();\n }, true);\n option(\"coverGutterNextToScrollbar\", false, function (cm) {\n return updateScrollbars(cm);\n }, true);\n option(\"scrollbarStyle\", \"native\", function (cm) {\n initScrollbars(cm);\n updateScrollbars(cm);\n cm.display.scrollbars.setScrollTop(cm.doc.scrollTop);\n cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft);\n }, true);\n option(\"lineNumbers\", false, function (cm, val) {\n cm.display.gutterSpecs = getGutters(cm.options.gutters, val);\n updateGutters(cm);\n }, true);\n option(\"firstLineNumber\", 1, updateGutters, true);\n option(\"lineNumberFormatter\", function (integer) {\n return integer;\n }, updateGutters, true);\n option(\"showCursorWhenSelecting\", false, updateSelection, true);\n option(\"resetSelectionOnContextMenu\", true);\n option(\"lineWiseCopyCut\", true);\n option(\"pasteLinesPerSelection\", true);\n option(\"selectionsMayTouch\", false);\n option(\"readOnly\", false, function (cm, val) {\n if (val == \"nocursor\") {\n onBlur(cm);\n cm.display.input.blur();\n }\n\n cm.display.input.readOnlyChanged(val);\n });\n option(\"screenReaderLabel\", null, function (cm, val) {\n val = val === '' ? null : val;\n cm.display.input.screenReaderLabelChanged(val);\n });\n option(\"disableInput\", false, function (cm, val) {\n if (!val) {\n cm.display.input.reset();\n }\n }, true);\n option(\"dragDrop\", true, dragDropChanged);\n option(\"allowDropFileTypes\", null);\n option(\"cursorBlinkRate\", 530);\n option(\"cursorScrollMargin\", 0);\n option(\"cursorHeight\", 1, updateSelection, true);\n option(\"singleCursorHeightPerLine\", true, updateSelection, true);\n option(\"workTime\", 100);\n option(\"workDelay\", 100);\n option(\"flattenSpans\", true, resetModeState, true);\n option(\"addModeClass\", false, resetModeState, true);\n option(\"pollInterval\", 100);\n option(\"undoDepth\", 200, function (cm, val) {\n return cm.doc.history.undoDepth = val;\n });\n option(\"historyEventDelay\", 1250);\n option(\"viewportMargin\", 10, function (cm) {\n return cm.refresh();\n }, true);\n option(\"maxHighlightLength\", 10000, resetModeState, true);\n option(\"moveInputWithCursor\", true, function (cm, val) {\n if (!val) {\n cm.display.input.resetPosition();\n }\n });\n option(\"tabindex\", null, function (cm, val) {\n return cm.display.input.getField().tabIndex = val || \"\";\n });\n option(\"autofocus\", null);\n option(\"direction\", \"ltr\", function (cm, val) {\n return cm.doc.setDirection(val);\n }, true);\n option(\"phrases\", null);\n }\n\n function dragDropChanged(cm, value, old) {\n var wasOn = old && old != Init;\n\n if (!value != !wasOn) {\n var funcs = cm.display.dragFunctions;\n var toggle = value ? on : off;\n toggle(cm.display.scroller, \"dragstart\", funcs.start);\n toggle(cm.display.scroller, \"dragenter\", funcs.enter);\n toggle(cm.display.scroller, \"dragover\", funcs.over);\n toggle(cm.display.scroller, \"dragleave\", funcs.leave);\n toggle(cm.display.scroller, \"drop\", funcs.drop);\n }\n }\n\n function wrappingChanged(cm) {\n if (cm.options.lineWrapping) {\n addClass(cm.display.wrapper, \"CodeMirror-wrap\");\n cm.display.sizer.style.minWidth = \"\";\n cm.display.sizerWidth = null;\n } else {\n rmClass(cm.display.wrapper, \"CodeMirror-wrap\");\n findMaxLine(cm);\n }\n\n estimateLineHeights(cm);\n regChange(cm);\n clearCaches(cm);\n setTimeout(function () {\n return updateScrollbars(cm);\n }, 100);\n } // A CodeMirror instance represents an editor. This is the object\n // that user code is usually dealing with.\n\n\n function CodeMirror(place, options) {\n var this$1 = this;\n\n if (!(this instanceof CodeMirror)) {\n return new CodeMirror(place, options);\n }\n\n this.options = options = options ? copyObj(options) : {}; // Determine effective options based on given values and defaults.\n\n copyObj(defaults, options, false);\n var doc = options.value;\n\n if (typeof doc == \"string\") {\n doc = new Doc(doc, options.mode, null, options.lineSeparator, options.direction);\n } else if (options.mode) {\n doc.modeOption = options.mode;\n }\n\n this.doc = doc;\n var input = new CodeMirror.inputStyles[options.inputStyle](this);\n var display = this.display = new Display(place, doc, input, options);\n display.wrapper.CodeMirror = this;\n themeChanged(this);\n\n if (options.lineWrapping) {\n this.display.wrapper.className += \" CodeMirror-wrap\";\n }\n\n initScrollbars(this);\n this.state = {\n keyMaps: [],\n // stores maps added by addKeyMap\n overlays: [],\n // highlighting overlays, as added by addOverlay\n modeGen: 0,\n // bumped when mode/overlay changes, used to invalidate highlighting info\n overwrite: false,\n delayingBlurEvent: false,\n focused: false,\n suppressEdits: false,\n // used to disable editing during key handlers when in readOnly mode\n pasteIncoming: -1,\n cutIncoming: -1,\n // help recognize paste/cut edits in input.poll\n selectingText: false,\n draggingText: false,\n highlight: new Delayed(),\n // stores highlight worker timeout\n keySeq: null,\n // Unfinished key sequence\n specialChars: null\n };\n\n if (options.autofocus && !mobile) {\n display.input.focus();\n } // Override magic textarea content restore that IE sometimes does\n // on our hidden textarea on reload\n\n\n if (ie && ie_version < 11) {\n setTimeout(function () {\n return this$1.display.input.reset(true);\n }, 20);\n }\n\n registerEventHandlers(this);\n ensureGlobalHandlers();\n\n _startOperation(this);\n\n this.curOp.forceUpdate = true;\n attachDoc(this, doc);\n\n if (options.autofocus && !mobile || this.hasFocus()) {\n setTimeout(bind(onFocus, this), 20);\n } else {\n onBlur(this);\n }\n\n for (var opt in optionHandlers) {\n if (optionHandlers.hasOwnProperty(opt)) {\n optionHandlers[opt](this, options[opt], Init);\n }\n }\n\n maybeUpdateLineNumberWidth(this);\n\n if (options.finishInit) {\n options.finishInit(this);\n }\n\n for (var i = 0; i < initHooks.length; ++i) {\n initHooks[i](this);\n }\n\n _endOperation(this); // Suppress optimizelegibility in Webkit, since it breaks text\n // measuring on line wrapping boundaries.\n\n\n if (webkit && options.lineWrapping && getComputedStyle(display.lineDiv).textRendering == \"optimizelegibility\") {\n display.lineDiv.style.textRendering = \"auto\";\n }\n } // The default configuration options.\n\n\n CodeMirror.defaults = defaults; // Functions to run when options are changed.\n\n CodeMirror.optionHandlers = optionHandlers; // Attach the necessary event handlers when initializing the editor\n\n function registerEventHandlers(cm) {\n var d = cm.display;\n on(d.scroller, \"mousedown\", operation(cm, onMouseDown)); // Older IE's will not fire a second mousedown for a double click\n\n if (ie && ie_version < 11) {\n on(d.scroller, \"dblclick\", operation(cm, function (e) {\n if (signalDOMEvent(cm, e)) {\n return;\n }\n\n var pos = posFromMouse(cm, e);\n\n if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) {\n return;\n }\n\n e_preventDefault(e);\n var word = cm.findWordAt(pos);\n extendSelection(cm.doc, word.anchor, word.head);\n }));\n } else {\n on(d.scroller, \"dblclick\", function (e) {\n return signalDOMEvent(cm, e) || e_preventDefault(e);\n });\n } // Some browsers fire contextmenu *after* opening the menu, at\n // which point we can't mess with it anymore. Context menu is\n // handled in onMouseDown for these browsers.\n\n\n on(d.scroller, \"contextmenu\", function (e) {\n return onContextMenu(cm, e);\n });\n on(d.input.getField(), \"contextmenu\", function (e) {\n if (!d.scroller.contains(e.target)) {\n onContextMenu(cm, e);\n }\n }); // Used to suppress mouse event handling when a touch happens\n\n var touchFinished,\n prevTouch = {\n end: 0\n };\n\n function finishTouch() {\n if (d.activeTouch) {\n touchFinished = setTimeout(function () {\n return d.activeTouch = null;\n }, 1000);\n prevTouch = d.activeTouch;\n prevTouch.end = +new Date();\n }\n }\n\n function isMouseLikeTouchEvent(e) {\n if (e.touches.length != 1) {\n return false;\n }\n\n var touch = e.touches[0];\n return touch.radiusX <= 1 && touch.radiusY <= 1;\n }\n\n function farAway(touch, other) {\n if (other.left == null) {\n return true;\n }\n\n var dx = other.left - touch.left,\n dy = other.top - touch.top;\n return dx * dx + dy * dy > 20 * 20;\n }\n\n on(d.scroller, \"touchstart\", function (e) {\n if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e) && !clickInGutter(cm, e)) {\n d.input.ensurePolled();\n clearTimeout(touchFinished);\n var now = +new Date();\n d.activeTouch = {\n start: now,\n moved: false,\n prev: now - prevTouch.end <= 300 ? prevTouch : null\n };\n\n if (e.touches.length == 1) {\n d.activeTouch.left = e.touches[0].pageX;\n d.activeTouch.top = e.touches[0].pageY;\n }\n }\n });\n on(d.scroller, \"touchmove\", function () {\n if (d.activeTouch) {\n d.activeTouch.moved = true;\n }\n });\n on(d.scroller, \"touchend\", function (e) {\n var touch = d.activeTouch;\n\n if (touch && !eventInWidget(d, e) && touch.left != null && !touch.moved && new Date() - touch.start < 300) {\n var pos = cm.coordsChar(d.activeTouch, \"page\"),\n range;\n\n if (!touch.prev || farAway(touch, touch.prev)) // Single tap\n {\n range = new Range(pos, pos);\n } else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap\n {\n range = cm.findWordAt(pos);\n } else // Triple tap\n {\n range = new Range(Pos(pos.line, 0), _clipPos(cm.doc, Pos(pos.line + 1, 0)));\n }\n\n cm.setSelection(range.anchor, range.head);\n cm.focus();\n e_preventDefault(e);\n }\n\n finishTouch();\n });\n on(d.scroller, \"touchcancel\", finishTouch); // Sync scrolling between fake scrollbars and real scrollable\n // area, ensure viewport is updated when scrolling.\n\n on(d.scroller, \"scroll\", function () {\n if (d.scroller.clientHeight) {\n updateScrollTop(cm, d.scroller.scrollTop);\n setScrollLeft(cm, d.scroller.scrollLeft, true);\n signal(cm, \"scroll\", cm);\n }\n }); // Listen to wheel events in order to try and update the viewport on time.\n\n on(d.scroller, \"mousewheel\", function (e) {\n return onScrollWheel(cm, e);\n });\n on(d.scroller, \"DOMMouseScroll\", function (e) {\n return onScrollWheel(cm, e);\n }); // Prevent wrapper from ever scrolling\n\n on(d.wrapper, \"scroll\", function () {\n return d.wrapper.scrollTop = d.wrapper.scrollLeft = 0;\n });\n d.dragFunctions = {\n enter: function enter(e) {\n if (!signalDOMEvent(cm, e)) {\n e_stop(e);\n }\n },\n over: function over(e) {\n if (!signalDOMEvent(cm, e)) {\n onDragOver(cm, e);\n e_stop(e);\n }\n },\n start: function start(e) {\n return onDragStart(cm, e);\n },\n drop: operation(cm, onDrop),\n leave: function leave(e) {\n if (!signalDOMEvent(cm, e)) {\n clearDragCursor(cm);\n }\n }\n };\n var inp = d.input.getField();\n on(inp, \"keyup\", function (e) {\n return onKeyUp.call(cm, e);\n });\n on(inp, \"keydown\", operation(cm, onKeyDown));\n on(inp, \"keypress\", operation(cm, onKeyPress));\n on(inp, \"focus\", function (e) {\n return onFocus(cm, e);\n });\n on(inp, \"blur\", function (e) {\n return onBlur(cm, e);\n });\n }\n\n var initHooks = [];\n\n CodeMirror.defineInitHook = function (f) {\n return initHooks.push(f);\n }; // Indent the given line. The how parameter can be \"smart\",\n // \"add\"/null, \"subtract\", or \"prev\". When aggressive is false\n // (typically set to true for forced single-line indents), empty\n // lines are not indented, and places where the mode returns Pass\n // are left alone.\n\n\n function indentLine(cm, n, how, aggressive) {\n var doc = cm.doc,\n state;\n\n if (how == null) {\n how = \"add\";\n }\n\n if (how == \"smart\") {\n // Fall back to \"prev\" when the mode doesn't have an indentation\n // method.\n if (!doc.mode.indent) {\n how = \"prev\";\n } else {\n state = getContextBefore(cm, n).state;\n }\n }\n\n var tabSize = cm.options.tabSize;\n var line = getLine(doc, n),\n curSpace = countColumn(line.text, null, tabSize);\n\n if (line.stateAfter) {\n line.stateAfter = null;\n }\n\n var curSpaceString = line.text.match(/^\\s*/)[0],\n indentation;\n\n if (!aggressive && !/\\S/.test(line.text)) {\n indentation = 0;\n how = \"not\";\n } else if (how == \"smart\") {\n indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text);\n\n if (indentation == Pass || indentation > 150) {\n if (!aggressive) {\n return;\n }\n\n how = \"prev\";\n }\n }\n\n if (how == \"prev\") {\n if (n > doc.first) {\n indentation = countColumn(getLine(doc, n - 1).text, null, tabSize);\n } else {\n indentation = 0;\n }\n } else if (how == \"add\") {\n indentation = curSpace + cm.options.indentUnit;\n } else if (how == \"subtract\") {\n indentation = curSpace - cm.options.indentUnit;\n } else if (typeof how == \"number\") {\n indentation = curSpace + how;\n }\n\n indentation = Math.max(0, indentation);\n var indentString = \"\",\n pos = 0;\n\n if (cm.options.indentWithTabs) {\n for (var i = Math.floor(indentation / tabSize); i; --i) {\n pos += tabSize;\n indentString += \"\\t\";\n }\n }\n\n if (pos < indentation) {\n indentString += spaceStr(indentation - pos);\n }\n\n if (indentString != curSpaceString) {\n _replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), \"+input\");\n\n line.stateAfter = null;\n return true;\n } else {\n // Ensure that, if the cursor was in the whitespace at the start\n // of the line, it is moved to the end of that space.\n for (var i$1 = 0; i$1 < doc.sel.ranges.length; i$1++) {\n var range = doc.sel.ranges[i$1];\n\n if (range.head.line == n && range.head.ch < curSpaceString.length) {\n var pos$1 = Pos(n, curSpaceString.length);\n replaceOneSelection(doc, i$1, new Range(pos$1, pos$1));\n break;\n }\n }\n }\n } // This will be set to a {lineWise: bool, text: [string]} object, so\n // that, when pasting, we know what kind of selections the copied\n // text was made out of.\n\n\n var lastCopied = null;\n\n function setLastCopied(newLastCopied) {\n lastCopied = newLastCopied;\n }\n\n function applyTextInput(cm, inserted, deleted, sel, origin) {\n var doc = cm.doc;\n cm.display.shift = false;\n\n if (!sel) {\n sel = doc.sel;\n }\n\n var recent = +new Date() - 200;\n var paste = origin == \"paste\" || cm.state.pasteIncoming > recent;\n var textLines = splitLinesAuto(inserted),\n multiPaste = null; // When pasting N lines into N selections, insert one line per selection\n\n if (paste && sel.ranges.length > 1) {\n if (lastCopied && lastCopied.text.join(\"\\n\") == inserted) {\n if (sel.ranges.length % lastCopied.text.length == 0) {\n multiPaste = [];\n\n for (var i = 0; i < lastCopied.text.length; i++) {\n multiPaste.push(doc.splitLines(lastCopied.text[i]));\n }\n }\n } else if (textLines.length == sel.ranges.length && cm.options.pasteLinesPerSelection) {\n multiPaste = map(textLines, function (l) {\n return [l];\n });\n }\n }\n\n var updateInput = cm.curOp.updateInput; // Normal behavior is to insert the new text into every selection\n\n for (var i$1 = sel.ranges.length - 1; i$1 >= 0; i$1--) {\n var range = sel.ranges[i$1];\n var from = range.from(),\n to = range.to();\n\n if (range.empty()) {\n if (deleted && deleted > 0) // Handle deletion\n {\n from = Pos(from.line, from.ch - deleted);\n } else if (cm.state.overwrite && !paste) // Handle overwrite\n {\n to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length));\n } else if (paste && lastCopied && lastCopied.lineWise && lastCopied.text.join(\"\\n\") == inserted) {\n from = to = Pos(from.line, 0);\n }\n }\n\n var changeEvent = {\n from: from,\n to: to,\n text: multiPaste ? multiPaste[i$1 % multiPaste.length] : textLines,\n origin: origin || (paste ? \"paste\" : cm.state.cutIncoming > recent ? \"cut\" : \"+input\")\n };\n makeChange(cm.doc, changeEvent);\n signalLater(cm, \"inputRead\", cm, changeEvent);\n }\n\n if (inserted && !paste) {\n triggerElectric(cm, inserted);\n }\n\n ensureCursorVisible(cm);\n\n if (cm.curOp.updateInput < 2) {\n cm.curOp.updateInput = updateInput;\n }\n\n cm.curOp.typing = true;\n cm.state.pasteIncoming = cm.state.cutIncoming = -1;\n }\n\n function handlePaste(e, cm) {\n var pasted = e.clipboardData && e.clipboardData.getData(\"Text\");\n\n if (pasted) {\n e.preventDefault();\n\n if (!cm.isReadOnly() && !cm.options.disableInput) {\n runInOp(cm, function () {\n return applyTextInput(cm, pasted, 0, null, \"paste\");\n });\n }\n\n return true;\n }\n }\n\n function triggerElectric(cm, inserted) {\n // When an 'electric' character is inserted, immediately trigger a reindent\n if (!cm.options.electricChars || !cm.options.smartIndent) {\n return;\n }\n\n var sel = cm.doc.sel;\n\n for (var i = sel.ranges.length - 1; i >= 0; i--) {\n var range = sel.ranges[i];\n\n if (range.head.ch > 100 || i && sel.ranges[i - 1].head.line == range.head.line) {\n continue;\n }\n\n var mode = cm.getModeAt(range.head);\n var indented = false;\n\n if (mode.electricChars) {\n for (var j = 0; j < mode.electricChars.length; j++) {\n if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) {\n indented = indentLine(cm, range.head.line, \"smart\");\n break;\n }\n }\n } else if (mode.electricInput) {\n if (mode.electricInput.test(getLine(cm.doc, range.head.line).text.slice(0, range.head.ch))) {\n indented = indentLine(cm, range.head.line, \"smart\");\n }\n }\n\n if (indented) {\n signalLater(cm, \"electricInput\", cm, range.head.line);\n }\n }\n }\n\n function copyableRanges(cm) {\n var text = [],\n ranges = [];\n\n for (var i = 0; i < cm.doc.sel.ranges.length; i++) {\n var line = cm.doc.sel.ranges[i].head.line;\n var lineRange = {\n anchor: Pos(line, 0),\n head: Pos(line + 1, 0)\n };\n ranges.push(lineRange);\n text.push(cm.getRange(lineRange.anchor, lineRange.head));\n }\n\n return {\n text: text,\n ranges: ranges\n };\n }\n\n function disableBrowserMagic(field, spellcheck, autocorrect, autocapitalize) {\n field.setAttribute(\"autocorrect\", autocorrect ? \"\" : \"off\");\n field.setAttribute(\"autocapitalize\", autocapitalize ? \"\" : \"off\");\n field.setAttribute(\"spellcheck\", !!spellcheck);\n }\n\n function hiddenTextarea() {\n var te = elt(\"textarea\", null, null, \"position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none\");\n var div = elt(\"div\", [te], null, \"overflow: hidden; position: relative; width: 3px; height: 0px;\"); // The textarea is kept positioned near the cursor to prevent the\n // fact that it'll be scrolled into view on input from scrolling\n // our fake cursor out of view. On webkit, when wrap=off, paste is\n // very slow. So make the area wide instead.\n\n if (webkit) {\n te.style.width = \"1000px\";\n } else {\n te.setAttribute(\"wrap\", \"off\");\n } // If border: 0; -- iOS fails to open keyboard (issue #1287)\n\n\n if (ios) {\n te.style.border = \"1px solid black\";\n }\n\n disableBrowserMagic(te);\n return div;\n } // The publicly visible API. Note that methodOp(f) means\n // 'wrap f in an operation, performed on its `this` parameter'.\n // This is not the complete set of editor methods. Most of the\n // methods defined on the Doc type are also injected into\n // CodeMirror.prototype, for backwards compatibility and\n // convenience.\n\n\n function addEditorMethods(CodeMirror) {\n var optionHandlers = CodeMirror.optionHandlers;\n var helpers = CodeMirror.helpers = {};\n CodeMirror.prototype = {\n constructor: CodeMirror,\n focus: function focus() {\n window.focus();\n this.display.input.focus();\n },\n setOption: function setOption(option, value) {\n var options = this.options,\n old = options[option];\n\n if (options[option] == value && option != \"mode\") {\n return;\n }\n\n options[option] = value;\n\n if (optionHandlers.hasOwnProperty(option)) {\n operation(this, optionHandlers[option])(this, value, old);\n }\n\n signal(this, \"optionChange\", this, option);\n },\n getOption: function getOption(option) {\n return this.options[option];\n },\n getDoc: function getDoc() {\n return this.doc;\n },\n addKeyMap: function addKeyMap(map, bottom) {\n this.state.keyMaps[bottom ? \"push\" : \"unshift\"](getKeyMap(map));\n },\n removeKeyMap: function removeKeyMap(map) {\n var maps = this.state.keyMaps;\n\n for (var i = 0; i < maps.length; ++i) {\n if (maps[i] == map || maps[i].name == map) {\n maps.splice(i, 1);\n return true;\n }\n }\n },\n addOverlay: methodOp(function (spec, options) {\n var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec);\n\n if (mode.startState) {\n throw new Error(\"Overlays may not be stateful.\");\n }\n\n insertSorted(this.state.overlays, {\n mode: mode,\n modeSpec: spec,\n opaque: options && options.opaque,\n priority: options && options.priority || 0\n }, function (overlay) {\n return overlay.priority;\n });\n this.state.modeGen++;\n regChange(this);\n }),\n removeOverlay: methodOp(function (spec) {\n var overlays = this.state.overlays;\n\n for (var i = 0; i < overlays.length; ++i) {\n var cur = overlays[i].modeSpec;\n\n if (cur == spec || typeof spec == \"string\" && cur.name == spec) {\n overlays.splice(i, 1);\n this.state.modeGen++;\n regChange(this);\n return;\n }\n }\n }),\n indentLine: methodOp(function (n, dir, aggressive) {\n if (typeof dir != \"string\" && typeof dir != \"number\") {\n if (dir == null) {\n dir = this.options.smartIndent ? \"smart\" : \"prev\";\n } else {\n dir = dir ? \"add\" : \"subtract\";\n }\n }\n\n if (isLine(this.doc, n)) {\n indentLine(this, n, dir, aggressive);\n }\n }),\n indentSelection: methodOp(function (how) {\n var ranges = this.doc.sel.ranges,\n end = -1;\n\n for (var i = 0; i < ranges.length; i++) {\n var range = ranges[i];\n\n if (!range.empty()) {\n var from = range.from(),\n to = range.to();\n var start = Math.max(end, from.line);\n end = Math.min(this.lastLine(), to.line - (to.ch ? 0 : 1)) + 1;\n\n for (var j = start; j < end; ++j) {\n indentLine(this, j, how);\n }\n\n var newRanges = this.doc.sel.ranges;\n\n if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0) {\n replaceOneSelection(this.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll);\n }\n } else if (range.head.line > end) {\n indentLine(this, range.head.line, how, true);\n end = range.head.line;\n\n if (i == this.doc.sel.primIndex) {\n ensureCursorVisible(this);\n }\n }\n }\n }),\n // Fetch the parser token for a given character. Useful for hacks\n // that want to inspect the mode state (say, for completion).\n getTokenAt: function getTokenAt(pos, precise) {\n return takeToken(this, pos, precise);\n },\n getLineTokens: function getLineTokens(line, precise) {\n return takeToken(this, Pos(line), precise, true);\n },\n getTokenTypeAt: function getTokenTypeAt(pos) {\n pos = _clipPos(this.doc, pos);\n var styles = getLineStyles(this, getLine(this.doc, pos.line));\n var before = 0,\n after = (styles.length - 1) / 2,\n ch = pos.ch;\n var type;\n\n if (ch == 0) {\n type = styles[2];\n } else {\n for (;;) {\n var mid = before + after >> 1;\n\n if ((mid ? styles[mid * 2 - 1] : 0) >= ch) {\n after = mid;\n } else if (styles[mid * 2 + 1] < ch) {\n before = mid + 1;\n } else {\n type = styles[mid * 2 + 2];\n break;\n }\n }\n }\n\n var cut = type ? type.indexOf(\"overlay \") : -1;\n return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1);\n },\n getModeAt: function getModeAt(pos) {\n var mode = this.doc.mode;\n\n if (!mode.innerMode) {\n return mode;\n }\n\n return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode;\n },\n getHelper: function getHelper(pos, type) {\n return this.getHelpers(pos, type)[0];\n },\n getHelpers: function getHelpers(pos, type) {\n var found = [];\n\n if (!helpers.hasOwnProperty(type)) {\n return found;\n }\n\n var help = helpers[type],\n mode = this.getModeAt(pos);\n\n if (typeof mode[type] == \"string\") {\n if (help[mode[type]]) {\n found.push(help[mode[type]]);\n }\n } else if (mode[type]) {\n for (var i = 0; i < mode[type].length; i++) {\n var val = help[mode[type][i]];\n\n if (val) {\n found.push(val);\n }\n }\n } else if (mode.helperType && help[mode.helperType]) {\n found.push(help[mode.helperType]);\n } else if (help[mode.name]) {\n found.push(help[mode.name]);\n }\n\n for (var i$1 = 0; i$1 < help._global.length; i$1++) {\n var cur = help._global[i$1];\n\n if (cur.pred(mode, this) && indexOf(found, cur.val) == -1) {\n found.push(cur.val);\n }\n }\n\n return found;\n },\n getStateAfter: function getStateAfter(line, precise) {\n var doc = this.doc;\n line = clipLine(doc, line == null ? doc.first + doc.size - 1 : line);\n return getContextBefore(this, line + 1, precise).state;\n },\n cursorCoords: function cursorCoords(start, mode) {\n var pos,\n range = this.doc.sel.primary();\n\n if (start == null) {\n pos = range.head;\n } else if (_typeof(start) == \"object\") {\n pos = _clipPos(this.doc, start);\n } else {\n pos = start ? range.from() : range.to();\n }\n\n return _cursorCoords(this, pos, mode || \"page\");\n },\n charCoords: function charCoords(pos, mode) {\n return _charCoords(this, _clipPos(this.doc, pos), mode || \"page\");\n },\n coordsChar: function coordsChar(coords, mode) {\n coords = fromCoordSystem(this, coords, mode || \"page\");\n return _coordsChar(this, coords.left, coords.top);\n },\n lineAtHeight: function lineAtHeight(height, mode) {\n height = fromCoordSystem(this, {\n top: height,\n left: 0\n }, mode || \"page\").top;\n return _lineAtHeight(this.doc, height + this.display.viewOffset);\n },\n heightAtLine: function heightAtLine(line, mode, includeWidgets) {\n var end = false,\n lineObj;\n\n if (typeof line == \"number\") {\n var last = this.doc.first + this.doc.size - 1;\n\n if (line < this.doc.first) {\n line = this.doc.first;\n } else if (line > last) {\n line = last;\n end = true;\n }\n\n lineObj = getLine(this.doc, line);\n } else {\n lineObj = line;\n }\n\n return intoCoordSystem(this, lineObj, {\n top: 0,\n left: 0\n }, mode || \"page\", includeWidgets || end).top + (end ? this.doc.height - _heightAtLine(lineObj) : 0);\n },\n defaultTextHeight: function defaultTextHeight() {\n return textHeight(this.display);\n },\n defaultCharWidth: function defaultCharWidth() {\n return charWidth(this.display);\n },\n getViewport: function getViewport() {\n return {\n from: this.display.viewFrom,\n to: this.display.viewTo\n };\n },\n addWidget: function addWidget(pos, node, scroll, vert, horiz) {\n var display = this.display;\n pos = _cursorCoords(this, _clipPos(this.doc, pos));\n var top = pos.bottom,\n left = pos.left;\n node.style.position = \"absolute\";\n node.setAttribute(\"cm-ignore-events\", \"true\");\n this.display.input.setUneditable(node);\n display.sizer.appendChild(node);\n\n if (vert == \"over\") {\n top = pos.top;\n } else if (vert == \"above\" || vert == \"near\") {\n var vspace = Math.max(display.wrapper.clientHeight, this.doc.height),\n hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth); // Default to positioning above (if specified and possible); otherwise default to positioning below\n\n if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight) {\n top = pos.top - node.offsetHeight;\n } else if (pos.bottom + node.offsetHeight <= vspace) {\n top = pos.bottom;\n }\n\n if (left + node.offsetWidth > hspace) {\n left = hspace - node.offsetWidth;\n }\n }\n\n node.style.top = top + \"px\";\n node.style.left = node.style.right = \"\";\n\n if (horiz == \"right\") {\n left = display.sizer.clientWidth - node.offsetWidth;\n node.style.right = \"0px\";\n } else {\n if (horiz == \"left\") {\n left = 0;\n } else if (horiz == \"middle\") {\n left = (display.sizer.clientWidth - node.offsetWidth) / 2;\n }\n\n node.style.left = left + \"px\";\n }\n\n if (scroll) {\n scrollIntoView(this, {\n left: left,\n top: top,\n right: left + node.offsetWidth,\n bottom: top + node.offsetHeight\n });\n }\n },\n triggerOnKeyDown: methodOp(onKeyDown),\n triggerOnKeyPress: methodOp(onKeyPress),\n triggerOnKeyUp: onKeyUp,\n triggerOnMouseDown: methodOp(onMouseDown),\n execCommand: function execCommand(cmd) {\n if (commands.hasOwnProperty(cmd)) {\n return commands[cmd].call(null, this);\n }\n },\n triggerElectric: methodOp(function (text) {\n triggerElectric(this, text);\n }),\n findPosH: function findPosH(from, amount, unit, visually) {\n var dir = 1;\n\n if (amount < 0) {\n dir = -1;\n amount = -amount;\n }\n\n var cur = _clipPos(this.doc, from);\n\n for (var i = 0; i < amount; ++i) {\n cur = _findPosH(this.doc, cur, dir, unit, visually);\n\n if (cur.hitSide) {\n break;\n }\n }\n\n return cur;\n },\n moveH: methodOp(function (dir, unit) {\n var this$1 = this;\n this.extendSelectionsBy(function (range) {\n if (this$1.display.shift || this$1.doc.extend || range.empty()) {\n return _findPosH(this$1.doc, range.head, dir, unit, this$1.options.rtlMoveVisually);\n } else {\n return dir < 0 ? range.from() : range.to();\n }\n }, sel_move);\n }),\n deleteH: methodOp(function (dir, unit) {\n var sel = this.doc.sel,\n doc = this.doc;\n\n if (sel.somethingSelected()) {\n doc.replaceSelection(\"\", null, \"+delete\");\n } else {\n deleteNearSelection(this, function (range) {\n var other = _findPosH(doc, range.head, dir, unit, false);\n\n return dir < 0 ? {\n from: other,\n to: range.head\n } : {\n from: range.head,\n to: other\n };\n });\n }\n }),\n findPosV: function findPosV(from, amount, unit, goalColumn) {\n var dir = 1,\n x = goalColumn;\n\n if (amount < 0) {\n dir = -1;\n amount = -amount;\n }\n\n var cur = _clipPos(this.doc, from);\n\n for (var i = 0; i < amount; ++i) {\n var coords = _cursorCoords(this, cur, \"div\");\n\n if (x == null) {\n x = coords.left;\n } else {\n coords.left = x;\n }\n\n cur = _findPosV(this, coords, dir, unit);\n\n if (cur.hitSide) {\n break;\n }\n }\n\n return cur;\n },\n moveV: methodOp(function (dir, unit) {\n var this$1 = this;\n var doc = this.doc,\n goals = [];\n var collapse = !this.display.shift && !doc.extend && doc.sel.somethingSelected();\n doc.extendSelectionsBy(function (range) {\n if (collapse) {\n return dir < 0 ? range.from() : range.to();\n }\n\n var headPos = _cursorCoords(this$1, range.head, \"div\");\n\n if (range.goalColumn != null) {\n headPos.left = range.goalColumn;\n }\n\n goals.push(headPos.left);\n\n var pos = _findPosV(this$1, headPos, dir, unit);\n\n if (unit == \"page\" && range == doc.sel.primary()) {\n addToScrollTop(this$1, _charCoords(this$1, pos, \"div\").top - headPos.top);\n }\n\n return pos;\n }, sel_move);\n\n if (goals.length) {\n for (var i = 0; i < doc.sel.ranges.length; i++) {\n doc.sel.ranges[i].goalColumn = goals[i];\n }\n }\n }),\n // Find the word at the given position (as returned by coordsChar).\n findWordAt: function findWordAt(pos) {\n var doc = this.doc,\n line = getLine(doc, pos.line).text;\n var start = pos.ch,\n end = pos.ch;\n\n if (line) {\n var helper = this.getHelper(pos, \"wordChars\");\n\n if ((pos.sticky == \"before\" || end == line.length) && start) {\n --start;\n } else {\n ++end;\n }\n\n var startChar = line.charAt(start);\n var check = isWordChar(startChar, helper) ? function (ch) {\n return isWordChar(ch, helper);\n } : /\\s/.test(startChar) ? function (ch) {\n return /\\s/.test(ch);\n } : function (ch) {\n return !/\\s/.test(ch) && !isWordChar(ch);\n };\n\n while (start > 0 && check(line.charAt(start - 1))) {\n --start;\n }\n\n while (end < line.length && check(line.charAt(end))) {\n ++end;\n }\n }\n\n return new Range(Pos(pos.line, start), Pos(pos.line, end));\n },\n toggleOverwrite: function toggleOverwrite(value) {\n if (value != null && value == this.state.overwrite) {\n return;\n }\n\n if (this.state.overwrite = !this.state.overwrite) {\n addClass(this.display.cursorDiv, \"CodeMirror-overwrite\");\n } else {\n rmClass(this.display.cursorDiv, \"CodeMirror-overwrite\");\n }\n\n signal(this, \"overwriteToggle\", this, this.state.overwrite);\n },\n hasFocus: function hasFocus() {\n return this.display.input.getField() == activeElt();\n },\n isReadOnly: function isReadOnly() {\n return !!(this.options.readOnly || this.doc.cantEdit);\n },\n scrollTo: methodOp(function (x, y) {\n scrollToCoords(this, x, y);\n }),\n getScrollInfo: function getScrollInfo() {\n var scroller = this.display.scroller;\n return {\n left: scroller.scrollLeft,\n top: scroller.scrollTop,\n height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight,\n width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth,\n clientHeight: displayHeight(this),\n clientWidth: displayWidth(this)\n };\n },\n scrollIntoView: methodOp(function (range, margin) {\n if (range == null) {\n range = {\n from: this.doc.sel.primary().head,\n to: null\n };\n\n if (margin == null) {\n margin = this.options.cursorScrollMargin;\n }\n } else if (typeof range == \"number\") {\n range = {\n from: Pos(range, 0),\n to: null\n };\n } else if (range.from == null) {\n range = {\n from: range,\n to: null\n };\n }\n\n if (!range.to) {\n range.to = range.from;\n }\n\n range.margin = margin || 0;\n\n if (range.from.line != null) {\n scrollToRange(this, range);\n } else {\n scrollToCoordsRange(this, range.from, range.to, range.margin);\n }\n }),\n setSize: methodOp(function (width, height) {\n var this$1 = this;\n\n var interpret = function interpret(val) {\n return typeof val == \"number\" || /^\\d+$/.test(String(val)) ? val + \"px\" : val;\n };\n\n if (width != null) {\n this.display.wrapper.style.width = interpret(width);\n }\n\n if (height != null) {\n this.display.wrapper.style.height = interpret(height);\n }\n\n if (this.options.lineWrapping) {\n clearLineMeasurementCache(this);\n }\n\n var lineNo = this.display.viewFrom;\n this.doc.iter(lineNo, this.display.viewTo, function (line) {\n if (line.widgets) {\n for (var i = 0; i < line.widgets.length; i++) {\n if (line.widgets[i].noHScroll) {\n regLineChange(this$1, lineNo, \"widget\");\n break;\n }\n }\n }\n\n ++lineNo;\n });\n this.curOp.forceUpdate = true;\n signal(this, \"refresh\", this);\n }),\n operation: function operation(f) {\n return runInOp(this, f);\n },\n startOperation: function startOperation() {\n return _startOperation(this);\n },\n endOperation: function endOperation() {\n return _endOperation(this);\n },\n refresh: methodOp(function () {\n var oldHeight = this.display.cachedTextHeight;\n regChange(this);\n this.curOp.forceUpdate = true;\n clearCaches(this);\n scrollToCoords(this, this.doc.scrollLeft, this.doc.scrollTop);\n updateGutterSpace(this.display);\n\n if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5 || this.options.lineWrapping) {\n estimateLineHeights(this);\n }\n\n signal(this, \"refresh\", this);\n }),\n swapDoc: methodOp(function (doc) {\n var old = this.doc;\n old.cm = null; // Cancel the current text selection if any (#5821)\n\n if (this.state.selectingText) {\n this.state.selectingText();\n }\n\n attachDoc(this, doc);\n clearCaches(this);\n this.display.input.reset();\n scrollToCoords(this, doc.scrollLeft, doc.scrollTop);\n this.curOp.forceScroll = true;\n signalLater(this, \"swapDoc\", this, old);\n return old;\n }),\n phrase: function phrase(phraseText) {\n var phrases = this.options.phrases;\n return phrases && Object.prototype.hasOwnProperty.call(phrases, phraseText) ? phrases[phraseText] : phraseText;\n },\n getInputField: function getInputField() {\n return this.display.input.getField();\n },\n getWrapperElement: function getWrapperElement() {\n return this.display.wrapper;\n },\n getScrollerElement: function getScrollerElement() {\n return this.display.scroller;\n },\n getGutterElement: function getGutterElement() {\n return this.display.gutters;\n }\n };\n eventMixin(CodeMirror);\n\n CodeMirror.registerHelper = function (type, name, value) {\n if (!helpers.hasOwnProperty(type)) {\n helpers[type] = CodeMirror[type] = {\n _global: []\n };\n }\n\n helpers[type][name] = value;\n };\n\n CodeMirror.registerGlobalHelper = function (type, name, predicate, value) {\n CodeMirror.registerHelper(type, name, value);\n\n helpers[type]._global.push({\n pred: predicate,\n val: value\n });\n };\n } // Used for horizontal relative motion. Dir is -1 or 1 (left or\n // right), unit can be \"char\", \"column\" (like char, but doesn't\n // cross line boundaries), \"word\" (across next word), or \"group\" (to\n // the start of next group of word or non-word-non-whitespace\n // chars). The visually param controls whether, in right-to-left\n // text, direction 1 means to move towards the next index in the\n // string, or towards the character to the right of the current\n // position. The resulting position will have a hitSide=true\n // property if it reached the end of the document.\n\n\n function _findPosH(doc, pos, dir, unit, visually) {\n var oldPos = pos;\n var origDir = dir;\n var lineObj = getLine(doc, pos.line);\n var lineDir = visually && doc.direction == \"rtl\" ? -dir : dir;\n\n function findNextLine() {\n var l = pos.line + lineDir;\n\n if (l < doc.first || l >= doc.first + doc.size) {\n return false;\n }\n\n pos = new Pos(l, pos.ch, pos.sticky);\n return lineObj = getLine(doc, l);\n }\n\n function moveOnce(boundToLine) {\n var next;\n\n if (visually) {\n next = moveVisually(doc.cm, lineObj, pos, dir);\n } else {\n next = moveLogically(lineObj, pos, dir);\n }\n\n if (next == null) {\n if (!boundToLine && findNextLine()) {\n pos = endOfLine(visually, doc.cm, lineObj, pos.line, lineDir);\n } else {\n return false;\n }\n } else {\n pos = next;\n }\n\n return true;\n }\n\n if (unit == \"char\") {\n moveOnce();\n } else if (unit == \"column\") {\n moveOnce(true);\n } else if (unit == \"word\" || unit == \"group\") {\n var sawType = null,\n group = unit == \"group\";\n var helper = doc.cm && doc.cm.getHelper(pos, \"wordChars\");\n\n for (var first = true;; first = false) {\n if (dir < 0 && !moveOnce(!first)) {\n break;\n }\n\n var cur = lineObj.text.charAt(pos.ch) || \"\\n\";\n var type = isWordChar(cur, helper) ? \"w\" : group && cur == \"\\n\" ? \"n\" : !group || /\\s/.test(cur) ? null : \"p\";\n\n if (group && !first && !type) {\n type = \"s\";\n }\n\n if (sawType && sawType != type) {\n if (dir < 0) {\n dir = 1;\n moveOnce();\n pos.sticky = \"after\";\n }\n\n break;\n }\n\n if (type) {\n sawType = type;\n }\n\n if (dir > 0 && !moveOnce(!first)) {\n break;\n }\n }\n }\n\n var result = skipAtomic(doc, pos, oldPos, origDir, true);\n\n if (equalCursorPos(oldPos, result)) {\n result.hitSide = true;\n }\n\n return result;\n } // For relative vertical movement. Dir may be -1 or 1. Unit can be\n // \"page\" or \"line\". The resulting position will have a hitSide=true\n // property if it reached the end of the document.\n\n\n function _findPosV(cm, pos, dir, unit) {\n var doc = cm.doc,\n x = pos.left,\n y;\n\n if (unit == \"page\") {\n var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight);\n var moveAmount = Math.max(pageSize - .5 * textHeight(cm.display), 3);\n y = (dir > 0 ? pos.bottom : pos.top) + dir * moveAmount;\n } else if (unit == \"line\") {\n y = dir > 0 ? pos.bottom + 3 : pos.top - 3;\n }\n\n var target;\n\n for (;;) {\n target = _coordsChar(cm, x, y);\n\n if (!target.outside) {\n break;\n }\n\n if (dir < 0 ? y <= 0 : y >= doc.height) {\n target.hitSide = true;\n break;\n }\n\n y += dir * 5;\n }\n\n return target;\n } // CONTENTEDITABLE INPUT STYLE\n\n\n var ContentEditableInput = function ContentEditableInput(cm) {\n this.cm = cm;\n this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null;\n this.polling = new Delayed();\n this.composing = null;\n this.gracePeriod = false;\n this.readDOMTimeout = null;\n };\n\n ContentEditableInput.prototype.init = function (display) {\n var this$1 = this;\n var input = this,\n cm = input.cm;\n var div = input.div = display.lineDiv;\n disableBrowserMagic(div, cm.options.spellcheck, cm.options.autocorrect, cm.options.autocapitalize);\n\n function belongsToInput(e) {\n for (var t = e.target; t; t = t.parentNode) {\n if (t == div) {\n return true;\n }\n\n if (/\\bCodeMirror-(?:line)?widget\\b/.test(t.className)) {\n break;\n }\n }\n\n return false;\n }\n\n on(div, \"paste\", function (e) {\n if (!belongsToInput(e) || signalDOMEvent(cm, e) || handlePaste(e, cm)) {\n return;\n } // IE doesn't fire input events, so we schedule a read for the pasted content in this way\n\n\n if (ie_version <= 11) {\n setTimeout(operation(cm, function () {\n return this$1.updateFromDOM();\n }), 20);\n }\n });\n on(div, \"compositionstart\", function (e) {\n this$1.composing = {\n data: e.data,\n done: false\n };\n });\n on(div, \"compositionupdate\", function (e) {\n if (!this$1.composing) {\n this$1.composing = {\n data: e.data,\n done: false\n };\n }\n });\n on(div, \"compositionend\", function (e) {\n if (this$1.composing) {\n if (e.data != this$1.composing.data) {\n this$1.readFromDOMSoon();\n }\n\n this$1.composing.done = true;\n }\n });\n on(div, \"touchstart\", function () {\n return input.forceCompositionEnd();\n });\n on(div, \"input\", function () {\n if (!this$1.composing) {\n this$1.readFromDOMSoon();\n }\n });\n\n function onCopyCut(e) {\n if (!belongsToInput(e) || signalDOMEvent(cm, e)) {\n return;\n }\n\n if (cm.somethingSelected()) {\n setLastCopied({\n lineWise: false,\n text: cm.getSelections()\n });\n\n if (e.type == \"cut\") {\n cm.replaceSelection(\"\", null, \"cut\");\n }\n } else if (!cm.options.lineWiseCopyCut) {\n return;\n } else {\n var ranges = copyableRanges(cm);\n setLastCopied({\n lineWise: true,\n text: ranges.text\n });\n\n if (e.type == \"cut\") {\n cm.operation(function () {\n cm.setSelections(ranges.ranges, 0, sel_dontScroll);\n cm.replaceSelection(\"\", null, \"cut\");\n });\n }\n }\n\n if (e.clipboardData) {\n e.clipboardData.clearData();\n var content = lastCopied.text.join(\"\\n\"); // iOS exposes the clipboard API, but seems to discard content inserted into it\n\n e.clipboardData.setData(\"Text\", content);\n\n if (e.clipboardData.getData(\"Text\") == content) {\n e.preventDefault();\n return;\n }\n } // Old-fashioned briefly-focus-a-textarea hack\n\n\n var kludge = hiddenTextarea(),\n te = kludge.firstChild;\n cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild);\n te.value = lastCopied.text.join(\"\\n\");\n var hadFocus = document.activeElement;\n selectInput(te);\n setTimeout(function () {\n cm.display.lineSpace.removeChild(kludge);\n hadFocus.focus();\n\n if (hadFocus == div) {\n input.showPrimarySelection();\n }\n }, 50);\n }\n\n on(div, \"copy\", onCopyCut);\n on(div, \"cut\", onCopyCut);\n };\n\n ContentEditableInput.prototype.screenReaderLabelChanged = function (label) {\n // Label for screenreaders, accessibility\n if (label) {\n this.div.setAttribute('aria-label', label);\n } else {\n this.div.removeAttribute('aria-label');\n }\n };\n\n ContentEditableInput.prototype.prepareSelection = function () {\n var result = prepareSelection(this.cm, false);\n result.focus = document.activeElement == this.div;\n return result;\n };\n\n ContentEditableInput.prototype.showSelection = function (info, takeFocus) {\n if (!info || !this.cm.display.view.length) {\n return;\n }\n\n if (info.focus || takeFocus) {\n this.showPrimarySelection();\n }\n\n this.showMultipleSelections(info);\n };\n\n ContentEditableInput.prototype.getSelection = function () {\n return this.cm.display.wrapper.ownerDocument.getSelection();\n };\n\n ContentEditableInput.prototype.showPrimarySelection = function () {\n var sel = this.getSelection(),\n cm = this.cm,\n prim = cm.doc.sel.primary();\n var from = prim.from(),\n to = prim.to();\n\n if (cm.display.viewTo == cm.display.viewFrom || from.line >= cm.display.viewTo || to.line < cm.display.viewFrom) {\n sel.removeAllRanges();\n return;\n }\n\n var curAnchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);\n var curFocus = domToPos(cm, sel.focusNode, sel.focusOffset);\n\n if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad && cmp(minPos(curAnchor, curFocus), from) == 0 && cmp(maxPos(curAnchor, curFocus), to) == 0) {\n return;\n }\n\n var view = cm.display.view;\n var start = from.line >= cm.display.viewFrom && posToDOM(cm, from) || {\n node: view[0].measure.map[2],\n offset: 0\n };\n var end = to.line < cm.display.viewTo && posToDOM(cm, to);\n\n if (!end) {\n var measure = view[view.length - 1].measure;\n var map = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map;\n end = {\n node: map[map.length - 1],\n offset: map[map.length - 2] - map[map.length - 3]\n };\n }\n\n if (!start || !end) {\n sel.removeAllRanges();\n return;\n }\n\n var old = sel.rangeCount && sel.getRangeAt(0),\n rng;\n\n try {\n rng = range(start.node, start.offset, end.offset, end.node);\n } catch (e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible\n\n\n if (rng) {\n if (!gecko && cm.state.focused) {\n sel.collapse(start.node, start.offset);\n\n if (!rng.collapsed) {\n sel.removeAllRanges();\n sel.addRange(rng);\n }\n } else {\n sel.removeAllRanges();\n sel.addRange(rng);\n }\n\n if (old && sel.anchorNode == null) {\n sel.addRange(old);\n } else if (gecko) {\n this.startGracePeriod();\n }\n }\n\n this.rememberSelection();\n };\n\n ContentEditableInput.prototype.startGracePeriod = function () {\n var this$1 = this;\n clearTimeout(this.gracePeriod);\n this.gracePeriod = setTimeout(function () {\n this$1.gracePeriod = false;\n\n if (this$1.selectionChanged()) {\n this$1.cm.operation(function () {\n return this$1.cm.curOp.selectionChanged = true;\n });\n }\n }, 20);\n };\n\n ContentEditableInput.prototype.showMultipleSelections = function (info) {\n removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors);\n removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection);\n };\n\n ContentEditableInput.prototype.rememberSelection = function () {\n var sel = this.getSelection();\n this.lastAnchorNode = sel.anchorNode;\n this.lastAnchorOffset = sel.anchorOffset;\n this.lastFocusNode = sel.focusNode;\n this.lastFocusOffset = sel.focusOffset;\n };\n\n ContentEditableInput.prototype.selectionInEditor = function () {\n var sel = this.getSelection();\n\n if (!sel.rangeCount) {\n return false;\n }\n\n var node = sel.getRangeAt(0).commonAncestorContainer;\n return contains(this.div, node);\n };\n\n ContentEditableInput.prototype.focus = function () {\n if (this.cm.options.readOnly != \"nocursor\") {\n if (!this.selectionInEditor() || document.activeElement != this.div) {\n this.showSelection(this.prepareSelection(), true);\n }\n\n this.div.focus();\n }\n };\n\n ContentEditableInput.prototype.blur = function () {\n this.div.blur();\n };\n\n ContentEditableInput.prototype.getField = function () {\n return this.div;\n };\n\n ContentEditableInput.prototype.supportsTouch = function () {\n return true;\n };\n\n ContentEditableInput.prototype.receivedFocus = function () {\n var input = this;\n\n if (this.selectionInEditor()) {\n this.pollSelection();\n } else {\n runInOp(this.cm, function () {\n return input.cm.curOp.selectionChanged = true;\n });\n }\n\n function poll() {\n if (input.cm.state.focused) {\n input.pollSelection();\n input.polling.set(input.cm.options.pollInterval, poll);\n }\n }\n\n this.polling.set(this.cm.options.pollInterval, poll);\n };\n\n ContentEditableInput.prototype.selectionChanged = function () {\n var sel = this.getSelection();\n return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset || sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset;\n };\n\n ContentEditableInput.prototype.pollSelection = function () {\n if (this.readDOMTimeout != null || this.gracePeriod || !this.selectionChanged()) {\n return;\n }\n\n var sel = this.getSelection(),\n cm = this.cm; // On Android Chrome (version 56, at least), backspacing into an\n // uneditable block element will put the cursor in that element,\n // and then, because it's not editable, hide the virtual keyboard.\n // Because Android doesn't allow us to actually detect backspace\n // presses in a sane way, this code checks for when that happens\n // and simulates a backspace press in this case.\n\n if (android && chrome && this.cm.display.gutterSpecs.length && isInGutter(sel.anchorNode)) {\n this.cm.triggerOnKeyDown({\n type: \"keydown\",\n keyCode: 8,\n preventDefault: Math.abs\n });\n this.blur();\n this.focus();\n return;\n }\n\n if (this.composing) {\n return;\n }\n\n this.rememberSelection();\n var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);\n var head = domToPos(cm, sel.focusNode, sel.focusOffset);\n\n if (anchor && head) {\n runInOp(cm, function () {\n setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll);\n\n if (anchor.bad || head.bad) {\n cm.curOp.selectionChanged = true;\n }\n });\n }\n };\n\n ContentEditableInput.prototype.pollContent = function () {\n if (this.readDOMTimeout != null) {\n clearTimeout(this.readDOMTimeout);\n this.readDOMTimeout = null;\n }\n\n var cm = this.cm,\n display = cm.display,\n sel = cm.doc.sel.primary();\n var from = sel.from(),\n to = sel.to();\n\n if (from.ch == 0 && from.line > cm.firstLine()) {\n from = Pos(from.line - 1, getLine(cm.doc, from.line - 1).length);\n }\n\n if (to.ch == getLine(cm.doc, to.line).text.length && to.line < cm.lastLine()) {\n to = Pos(to.line + 1, 0);\n }\n\n if (from.line < display.viewFrom || to.line > display.viewTo - 1) {\n return false;\n }\n\n var fromIndex, fromLine, fromNode;\n\n if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) {\n fromLine = lineNo(display.view[0].line);\n fromNode = display.view[0].node;\n } else {\n fromLine = lineNo(display.view[fromIndex].line);\n fromNode = display.view[fromIndex - 1].node.nextSibling;\n }\n\n var toIndex = findViewIndex(cm, to.line);\n var toLine, toNode;\n\n if (toIndex == display.view.length - 1) {\n toLine = display.viewTo - 1;\n toNode = display.lineDiv.lastChild;\n } else {\n toLine = lineNo(display.view[toIndex + 1].line) - 1;\n toNode = display.view[toIndex + 1].node.previousSibling;\n }\n\n if (!fromNode) {\n return false;\n }\n\n var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine));\n var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length));\n\n while (newText.length > 1 && oldText.length > 1) {\n if (lst(newText) == lst(oldText)) {\n newText.pop();\n oldText.pop();\n toLine--;\n } else if (newText[0] == oldText[0]) {\n newText.shift();\n oldText.shift();\n fromLine++;\n } else {\n break;\n }\n }\n\n var cutFront = 0,\n cutEnd = 0;\n var newTop = newText[0],\n oldTop = oldText[0],\n maxCutFront = Math.min(newTop.length, oldTop.length);\n\n while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront)) {\n ++cutFront;\n }\n\n var newBot = lst(newText),\n oldBot = lst(oldText);\n var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0), oldBot.length - (oldText.length == 1 ? cutFront : 0));\n\n while (cutEnd < maxCutEnd && newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) {\n ++cutEnd;\n } // Try to move start of change to start of selection if ambiguous\n\n\n if (newText.length == 1 && oldText.length == 1 && fromLine == from.line) {\n while (cutFront && cutFront > from.ch && newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) {\n cutFront--;\n cutEnd++;\n }\n }\n\n newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd).replace(/^\\u200b+/, \"\");\n newText[0] = newText[0].slice(cutFront).replace(/\\u200b+$/, \"\");\n var chFrom = Pos(fromLine, cutFront);\n var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0);\n\n if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) {\n _replaceRange(cm.doc, newText, chFrom, chTo, \"+input\");\n\n return true;\n }\n };\n\n ContentEditableInput.prototype.ensurePolled = function () {\n this.forceCompositionEnd();\n };\n\n ContentEditableInput.prototype.reset = function () {\n this.forceCompositionEnd();\n };\n\n ContentEditableInput.prototype.forceCompositionEnd = function () {\n if (!this.composing) {\n return;\n }\n\n clearTimeout(this.readDOMTimeout);\n this.composing = null;\n this.updateFromDOM();\n this.div.blur();\n this.div.focus();\n };\n\n ContentEditableInput.prototype.readFromDOMSoon = function () {\n var this$1 = this;\n\n if (this.readDOMTimeout != null) {\n return;\n }\n\n this.readDOMTimeout = setTimeout(function () {\n this$1.readDOMTimeout = null;\n\n if (this$1.composing) {\n if (this$1.composing.done) {\n this$1.composing = null;\n } else {\n return;\n }\n }\n\n this$1.updateFromDOM();\n }, 80);\n };\n\n ContentEditableInput.prototype.updateFromDOM = function () {\n var this$1 = this;\n\n if (this.cm.isReadOnly() || !this.pollContent()) {\n runInOp(this.cm, function () {\n return regChange(this$1.cm);\n });\n }\n };\n\n ContentEditableInput.prototype.setUneditable = function (node) {\n node.contentEditable = \"false\";\n };\n\n ContentEditableInput.prototype.onKeyPress = function (e) {\n if (e.charCode == 0 || this.composing) {\n return;\n }\n\n e.preventDefault();\n\n if (!this.cm.isReadOnly()) {\n operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0);\n }\n };\n\n ContentEditableInput.prototype.readOnlyChanged = function (val) {\n this.div.contentEditable = String(val != \"nocursor\");\n };\n\n ContentEditableInput.prototype.onContextMenu = function () {};\n\n ContentEditableInput.prototype.resetPosition = function () {};\n\n ContentEditableInput.prototype.needsContentAttribute = true;\n\n function posToDOM(cm, pos) {\n var view = findViewForLine(cm, pos.line);\n\n if (!view || view.hidden) {\n return null;\n }\n\n var line = getLine(cm.doc, pos.line);\n var info = mapFromLineView(view, line, pos.line);\n var order = getOrder(line, cm.doc.direction),\n side = \"left\";\n\n if (order) {\n var partPos = getBidiPartAt(order, pos.ch);\n side = partPos % 2 ? \"right\" : \"left\";\n }\n\n var result = nodeAndOffsetInLineMap(info.map, pos.ch, side);\n result.offset = result.collapse == \"right\" ? result.end : result.start;\n return result;\n }\n\n function isInGutter(node) {\n for (var scan = node; scan; scan = scan.parentNode) {\n if (/CodeMirror-gutter-wrapper/.test(scan.className)) {\n return true;\n }\n }\n\n return false;\n }\n\n function badPos(pos, bad) {\n if (bad) {\n pos.bad = true;\n }\n\n return pos;\n }\n\n function domTextBetween(cm, from, to, fromLine, toLine) {\n var text = \"\",\n closing = false,\n lineSep = cm.doc.lineSeparator(),\n extraLinebreak = false;\n\n function recognizeMarker(id) {\n return function (marker) {\n return marker.id == id;\n };\n }\n\n function close() {\n if (closing) {\n text += lineSep;\n\n if (extraLinebreak) {\n text += lineSep;\n }\n\n closing = extraLinebreak = false;\n }\n }\n\n function addText(str) {\n if (str) {\n close();\n text += str;\n }\n }\n\n function walk(node) {\n if (node.nodeType == 1) {\n var cmText = node.getAttribute(\"cm-text\");\n\n if (cmText) {\n addText(cmText);\n return;\n }\n\n var markerID = node.getAttribute(\"cm-marker\"),\n range;\n\n if (markerID) {\n var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID));\n\n if (found.length && (range = found[0].find(0))) {\n addText(getBetween(cm.doc, range.from, range.to).join(lineSep));\n }\n\n return;\n }\n\n if (node.getAttribute(\"contenteditable\") == \"false\") {\n return;\n }\n\n var isBlock = /^(pre|div|p|li|table|br)$/i.test(node.nodeName);\n\n if (!/^br$/i.test(node.nodeName) && node.textContent.length == 0) {\n return;\n }\n\n if (isBlock) {\n close();\n }\n\n for (var i = 0; i < node.childNodes.length; i++) {\n walk(node.childNodes[i]);\n }\n\n if (/^(pre|p)$/i.test(node.nodeName)) {\n extraLinebreak = true;\n }\n\n if (isBlock) {\n closing = true;\n }\n } else if (node.nodeType == 3) {\n addText(node.nodeValue.replace(/\\u200b/g, \"\").replace(/\\u00a0/g, \" \"));\n }\n }\n\n for (;;) {\n walk(from);\n\n if (from == to) {\n break;\n }\n\n from = from.nextSibling;\n extraLinebreak = false;\n }\n\n return text;\n }\n\n function domToPos(cm, node, offset) {\n var lineNode;\n\n if (node == cm.display.lineDiv) {\n lineNode = cm.display.lineDiv.childNodes[offset];\n\n if (!lineNode) {\n return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true);\n }\n\n node = null;\n offset = 0;\n } else {\n for (lineNode = node;; lineNode = lineNode.parentNode) {\n if (!lineNode || lineNode == cm.display.lineDiv) {\n return null;\n }\n\n if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) {\n break;\n }\n }\n }\n\n for (var i = 0; i < cm.display.view.length; i++) {\n var lineView = cm.display.view[i];\n\n if (lineView.node == lineNode) {\n return locateNodeInLineView(lineView, node, offset);\n }\n }\n }\n\n function locateNodeInLineView(lineView, node, offset) {\n var wrapper = lineView.text.firstChild,\n bad = false;\n\n if (!node || !contains(wrapper, node)) {\n return badPos(Pos(lineNo(lineView.line), 0), true);\n }\n\n if (node == wrapper) {\n bad = true;\n node = wrapper.childNodes[offset];\n offset = 0;\n\n if (!node) {\n var line = lineView.rest ? lst(lineView.rest) : lineView.line;\n return badPos(Pos(lineNo(line), line.text.length), bad);\n }\n }\n\n var textNode = node.nodeType == 3 ? node : null,\n topNode = node;\n\n if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) {\n textNode = node.firstChild;\n\n if (offset) {\n offset = textNode.nodeValue.length;\n }\n }\n\n while (topNode.parentNode != wrapper) {\n topNode = topNode.parentNode;\n }\n\n var measure = lineView.measure,\n maps = measure.maps;\n\n function find(textNode, topNode, offset) {\n for (var i = -1; i < (maps ? maps.length : 0); i++) {\n var map = i < 0 ? measure.map : maps[i];\n\n for (var j = 0; j < map.length; j += 3) {\n var curNode = map[j + 2];\n\n if (curNode == textNode || curNode == topNode) {\n var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]);\n var ch = map[j] + offset;\n\n if (offset < 0 || curNode != textNode) {\n ch = map[j + (offset ? 1 : 0)];\n }\n\n return Pos(line, ch);\n }\n }\n }\n }\n\n var found = find(textNode, topNode, offset);\n\n if (found) {\n return badPos(found, bad);\n } // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems\n\n\n for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) {\n found = find(after, after.firstChild, 0);\n\n if (found) {\n return badPos(Pos(found.line, found.ch - dist), bad);\n } else {\n dist += after.textContent.length;\n }\n }\n\n for (var before = topNode.previousSibling, dist$1 = offset; before; before = before.previousSibling) {\n found = find(before, before.firstChild, -1);\n\n if (found) {\n return badPos(Pos(found.line, found.ch + dist$1), bad);\n } else {\n dist$1 += before.textContent.length;\n }\n }\n } // TEXTAREA INPUT STYLE\n\n\n var TextareaInput = function TextareaInput(cm) {\n this.cm = cm; // See input.poll and input.reset\n\n this.prevInput = \"\"; // Flag that indicates whether we expect input to appear real soon\n // now (after some event like 'keypress' or 'input') and are\n // polling intensively.\n\n this.pollingFast = false; // Self-resetting timeout for the poller\n\n this.polling = new Delayed(); // Used to work around IE issue with selection being forgotten when focus moves away from textarea\n\n this.hasSelection = false;\n this.composing = null;\n };\n\n TextareaInput.prototype.init = function (display) {\n var this$1 = this;\n var input = this,\n cm = this.cm;\n this.createField(display);\n var te = this.textarea;\n display.wrapper.insertBefore(this.wrapper, display.wrapper.firstChild); // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore)\n\n if (ios) {\n te.style.width = \"0px\";\n }\n\n on(te, \"input\", function () {\n if (ie && ie_version >= 9 && this$1.hasSelection) {\n this$1.hasSelection = null;\n }\n\n input.poll();\n });\n on(te, \"paste\", function (e) {\n if (signalDOMEvent(cm, e) || handlePaste(e, cm)) {\n return;\n }\n\n cm.state.pasteIncoming = +new Date();\n input.fastPoll();\n });\n\n function prepareCopyCut(e) {\n if (signalDOMEvent(cm, e)) {\n return;\n }\n\n if (cm.somethingSelected()) {\n setLastCopied({\n lineWise: false,\n text: cm.getSelections()\n });\n } else if (!cm.options.lineWiseCopyCut) {\n return;\n } else {\n var ranges = copyableRanges(cm);\n setLastCopied({\n lineWise: true,\n text: ranges.text\n });\n\n if (e.type == \"cut\") {\n cm.setSelections(ranges.ranges, null, sel_dontScroll);\n } else {\n input.prevInput = \"\";\n te.value = ranges.text.join(\"\\n\");\n selectInput(te);\n }\n }\n\n if (e.type == \"cut\") {\n cm.state.cutIncoming = +new Date();\n }\n }\n\n on(te, \"cut\", prepareCopyCut);\n on(te, \"copy\", prepareCopyCut);\n on(display.scroller, \"paste\", function (e) {\n if (eventInWidget(display, e) || signalDOMEvent(cm, e)) {\n return;\n }\n\n if (!te.dispatchEvent) {\n cm.state.pasteIncoming = +new Date();\n input.focus();\n return;\n } // Pass the `paste` event to the textarea so it's handled by its event listener.\n\n\n var event = new Event(\"paste\");\n event.clipboardData = e.clipboardData;\n te.dispatchEvent(event);\n }); // Prevent normal selection in the editor (we handle our own)\n\n on(display.lineSpace, \"selectstart\", function (e) {\n if (!eventInWidget(display, e)) {\n e_preventDefault(e);\n }\n });\n on(te, \"compositionstart\", function () {\n var start = cm.getCursor(\"from\");\n\n if (input.composing) {\n input.composing.range.clear();\n }\n\n input.composing = {\n start: start,\n range: cm.markText(start, cm.getCursor(\"to\"), {\n className: \"CodeMirror-composing\"\n })\n };\n });\n on(te, \"compositionend\", function () {\n if (input.composing) {\n input.poll();\n input.composing.range.clear();\n input.composing = null;\n }\n });\n };\n\n TextareaInput.prototype.createField = function (_display) {\n // Wraps and hides input textarea\n this.wrapper = hiddenTextarea(); // The semihidden textarea that is focused when the editor is\n // focused, and receives input.\n\n this.textarea = this.wrapper.firstChild;\n };\n\n TextareaInput.prototype.screenReaderLabelChanged = function (label) {\n // Label for screenreaders, accessibility\n if (label) {\n this.textarea.setAttribute('aria-label', label);\n } else {\n this.textarea.removeAttribute('aria-label');\n }\n };\n\n TextareaInput.prototype.prepareSelection = function () {\n // Redraw the selection and/or cursor\n var cm = this.cm,\n display = cm.display,\n doc = cm.doc;\n var result = prepareSelection(cm); // Move the hidden textarea near the cursor to prevent scrolling artifacts\n\n if (cm.options.moveInputWithCursor) {\n var headPos = _cursorCoords(cm, doc.sel.primary().head, \"div\");\n\n var wrapOff = display.wrapper.getBoundingClientRect(),\n lineOff = display.lineDiv.getBoundingClientRect();\n result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10, headPos.top + lineOff.top - wrapOff.top));\n result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10, headPos.left + lineOff.left - wrapOff.left));\n }\n\n return result;\n };\n\n TextareaInput.prototype.showSelection = function (drawn) {\n var cm = this.cm,\n display = cm.display;\n removeChildrenAndAdd(display.cursorDiv, drawn.cursors);\n removeChildrenAndAdd(display.selectionDiv, drawn.selection);\n\n if (drawn.teTop != null) {\n this.wrapper.style.top = drawn.teTop + \"px\";\n this.wrapper.style.left = drawn.teLeft + \"px\";\n }\n }; // Reset the input to correspond to the selection (or to be empty,\n // when not typing and nothing is selected)\n\n\n TextareaInput.prototype.reset = function (typing) {\n if (this.contextMenuPending || this.composing) {\n return;\n }\n\n var cm = this.cm;\n\n if (cm.somethingSelected()) {\n this.prevInput = \"\";\n var content = cm.getSelection();\n this.textarea.value = content;\n\n if (cm.state.focused) {\n selectInput(this.textarea);\n }\n\n if (ie && ie_version >= 9) {\n this.hasSelection = content;\n }\n } else if (!typing) {\n this.prevInput = this.textarea.value = \"\";\n\n if (ie && ie_version >= 9) {\n this.hasSelection = null;\n }\n }\n };\n\n TextareaInput.prototype.getField = function () {\n return this.textarea;\n };\n\n TextareaInput.prototype.supportsTouch = function () {\n return false;\n };\n\n TextareaInput.prototype.focus = function () {\n if (this.cm.options.readOnly != \"nocursor\" && (!mobile || activeElt() != this.textarea)) {\n try {\n this.textarea.focus();\n } catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM\n\n }\n };\n\n TextareaInput.prototype.blur = function () {\n this.textarea.blur();\n };\n\n TextareaInput.prototype.resetPosition = function () {\n this.wrapper.style.top = this.wrapper.style.left = 0;\n };\n\n TextareaInput.prototype.receivedFocus = function () {\n this.slowPoll();\n }; // Poll for input changes, using the normal rate of polling. This\n // runs as long as the editor is focused.\n\n\n TextareaInput.prototype.slowPoll = function () {\n var this$1 = this;\n\n if (this.pollingFast) {\n return;\n }\n\n this.polling.set(this.cm.options.pollInterval, function () {\n this$1.poll();\n\n if (this$1.cm.state.focused) {\n this$1.slowPoll();\n }\n });\n }; // When an event has just come in that is likely to add or change\n // something in the input textarea, we poll faster, to ensure that\n // the change appears on the screen quickly.\n\n\n TextareaInput.prototype.fastPoll = function () {\n var missed = false,\n input = this;\n input.pollingFast = true;\n\n function p() {\n var changed = input.poll();\n\n if (!changed && !missed) {\n missed = true;\n input.polling.set(60, p);\n } else {\n input.pollingFast = false;\n input.slowPoll();\n }\n }\n\n input.polling.set(20, p);\n }; // Read input from the textarea, and update the document to match.\n // When something is selected, it is present in the textarea, and\n // selected (unless it is huge, in which case a placeholder is\n // used). When nothing is selected, the cursor sits after previously\n // seen text (can be empty), which is stored in prevInput (we must\n // not reset the textarea when typing, because that breaks IME).\n\n\n TextareaInput.prototype.poll = function () {\n var this$1 = this;\n var cm = this.cm,\n input = this.textarea,\n prevInput = this.prevInput; // Since this is called a *lot*, try to bail out as cheaply as\n // possible when it is clear that nothing happened. hasSelection\n // will be the case when there is a lot of text in the textarea,\n // in which case reading its value would be expensive.\n\n if (this.contextMenuPending || !cm.state.focused || hasSelection(input) && !prevInput && !this.composing || cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq) {\n return false;\n }\n\n var text = input.value; // If nothing changed, bail.\n\n if (text == prevInput && !cm.somethingSelected()) {\n return false;\n } // Work around nonsensical selection resetting in IE9/10, and\n // inexplicable appearance of private area unicode characters on\n // some key combos in Mac (#2689).\n\n\n if (ie && ie_version >= 9 && this.hasSelection === text || mac && /[\\uf700-\\uf7ff]/.test(text)) {\n cm.display.input.reset();\n return false;\n }\n\n if (cm.doc.sel == cm.display.selForContextMenu) {\n var first = text.charCodeAt(0);\n\n if (first == 0x200b && !prevInput) {\n prevInput = \"\\u200B\";\n }\n\n if (first == 0x21da) {\n this.reset();\n return this.cm.execCommand(\"undo\");\n }\n } // Find the part of the input that is actually new\n\n\n var same = 0,\n l = Math.min(prevInput.length, text.length);\n\n while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) {\n ++same;\n }\n\n runInOp(cm, function () {\n applyTextInput(cm, text.slice(same), prevInput.length - same, null, this$1.composing ? \"*compose\" : null); // Don't leave long text in the textarea, since it makes further polling slow\n\n if (text.length > 1000 || text.indexOf(\"\\n\") > -1) {\n input.value = this$1.prevInput = \"\";\n } else {\n this$1.prevInput = text;\n }\n\n if (this$1.composing) {\n this$1.composing.range.clear();\n this$1.composing.range = cm.markText(this$1.composing.start, cm.getCursor(\"to\"), {\n className: \"CodeMirror-composing\"\n });\n }\n });\n return true;\n };\n\n TextareaInput.prototype.ensurePolled = function () {\n if (this.pollingFast && this.poll()) {\n this.pollingFast = false;\n }\n };\n\n TextareaInput.prototype.onKeyPress = function () {\n if (ie && ie_version >= 9) {\n this.hasSelection = null;\n }\n\n this.fastPoll();\n };\n\n TextareaInput.prototype.onContextMenu = function (e) {\n var input = this,\n cm = input.cm,\n display = cm.display,\n te = input.textarea;\n\n if (input.contextMenuPending) {\n input.contextMenuPending();\n }\n\n var pos = posFromMouse(cm, e),\n scrollPos = display.scroller.scrollTop;\n\n if (!pos || presto) {\n return;\n } // Opera is difficult.\n // Reset the current text selection only if the click is done outside of the selection\n // and 'resetSelectionOnContextMenu' option is true.\n\n\n var reset = cm.options.resetSelectionOnContextMenu;\n\n if (reset && cm.doc.sel.contains(pos) == -1) {\n operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll);\n }\n\n var oldCSS = te.style.cssText,\n oldWrapperCSS = input.wrapper.style.cssText;\n var wrapperBox = input.wrapper.offsetParent.getBoundingClientRect();\n input.wrapper.style.cssText = \"position: static\";\n te.style.cssText = \"position: absolute; width: 30px; height: 30px;\\n top: \" + (e.clientY - wrapperBox.top - 5) + \"px; left: \" + (e.clientX - wrapperBox.left - 5) + \"px;\\n z-index: 1000; background: \" + (ie ? \"rgba(255, 255, 255, .05)\" : \"transparent\") + \";\\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);\";\n var oldScrollY;\n\n if (webkit) {\n oldScrollY = window.scrollY;\n } // Work around Chrome issue (#2712)\n\n\n display.input.focus();\n\n if (webkit) {\n window.scrollTo(null, oldScrollY);\n }\n\n display.input.reset(); // Adds \"Select all\" to context menu in FF\n\n if (!cm.somethingSelected()) {\n te.value = input.prevInput = \" \";\n }\n\n input.contextMenuPending = rehide;\n display.selForContextMenu = cm.doc.sel;\n clearTimeout(display.detectingSelectAll); // Select-all will be greyed out if there's nothing to select, so\n // this adds a zero-width space so that we can later check whether\n // it got selected.\n\n function prepareSelectAllHack() {\n if (te.selectionStart != null) {\n var selected = cm.somethingSelected();\n var extval = \"\\u200B\" + (selected ? te.value : \"\");\n te.value = \"\\u21DA\"; // Used to catch context-menu undo\n\n te.value = extval;\n input.prevInput = selected ? \"\" : \"\\u200B\";\n te.selectionStart = 1;\n te.selectionEnd = extval.length; // Re-set this, in case some other handler touched the\n // selection in the meantime.\n\n display.selForContextMenu = cm.doc.sel;\n }\n }\n\n function rehide() {\n if (input.contextMenuPending != rehide) {\n return;\n }\n\n input.contextMenuPending = false;\n input.wrapper.style.cssText = oldWrapperCSS;\n te.style.cssText = oldCSS;\n\n if (ie && ie_version < 9) {\n display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos);\n } // Try to detect the user choosing select-all\n\n\n if (te.selectionStart != null) {\n if (!ie || ie && ie_version < 9) {\n prepareSelectAllHack();\n }\n\n var i = 0,\n poll = function poll() {\n if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 && te.selectionEnd > 0 && input.prevInput == \"\\u200B\") {\n operation(cm, selectAll)(cm);\n } else if (i++ < 10) {\n display.detectingSelectAll = setTimeout(poll, 500);\n } else {\n display.selForContextMenu = null;\n display.input.reset();\n }\n };\n\n display.detectingSelectAll = setTimeout(poll, 200);\n }\n }\n\n if (ie && ie_version >= 9) {\n prepareSelectAllHack();\n }\n\n if (captureRightClick) {\n e_stop(e);\n\n var mouseup = function mouseup() {\n off(window, \"mouseup\", mouseup);\n setTimeout(rehide, 20);\n };\n\n on(window, \"mouseup\", mouseup);\n } else {\n setTimeout(rehide, 50);\n }\n };\n\n TextareaInput.prototype.readOnlyChanged = function (val) {\n if (!val) {\n this.reset();\n }\n\n this.textarea.disabled = val == \"nocursor\";\n };\n\n TextareaInput.prototype.setUneditable = function () {};\n\n TextareaInput.prototype.needsContentAttribute = false;\n\n function fromTextArea(textarea, options) {\n options = options ? copyObj(options) : {};\n options.value = textarea.value;\n\n if (!options.tabindex && textarea.tabIndex) {\n options.tabindex = textarea.tabIndex;\n }\n\n if (!options.placeholder && textarea.placeholder) {\n options.placeholder = textarea.placeholder;\n } // Set autofocus to true if this textarea is focused, or if it has\n // autofocus and no other element is focused.\n\n\n if (options.autofocus == null) {\n var hasFocus = activeElt();\n options.autofocus = hasFocus == textarea || textarea.getAttribute(\"autofocus\") != null && hasFocus == document.body;\n }\n\n function save() {\n textarea.value = cm.getValue();\n }\n\n var realSubmit;\n\n if (textarea.form) {\n on(textarea.form, \"submit\", save); // Deplorable hack to make the submit method do the right thing.\n\n if (!options.leaveSubmitMethodAlone) {\n var form = textarea.form;\n realSubmit = form.submit;\n\n try {\n var wrappedSubmit = form.submit = function () {\n save();\n form.submit = realSubmit;\n form.submit();\n form.submit = wrappedSubmit;\n };\n } catch (e) {}\n }\n }\n\n options.finishInit = function (cm) {\n cm.save = save;\n\n cm.getTextArea = function () {\n return textarea;\n };\n\n cm.toTextArea = function () {\n cm.toTextArea = isNaN; // Prevent this from being ran twice\n\n save();\n textarea.parentNode.removeChild(cm.getWrapperElement());\n textarea.style.display = \"\";\n\n if (textarea.form) {\n off(textarea.form, \"submit\", save);\n\n if (!options.leaveSubmitMethodAlone && typeof textarea.form.submit == \"function\") {\n textarea.form.submit = realSubmit;\n }\n }\n };\n };\n\n textarea.style.display = \"none\";\n var cm = CodeMirror(function (node) {\n return textarea.parentNode.insertBefore(node, textarea.nextSibling);\n }, options);\n return cm;\n }\n\n function addLegacyProps(CodeMirror) {\n CodeMirror.off = off;\n CodeMirror.on = on;\n CodeMirror.wheelEventPixels = wheelEventPixels;\n CodeMirror.Doc = Doc;\n CodeMirror.splitLines = splitLinesAuto;\n CodeMirror.countColumn = countColumn;\n CodeMirror.findColumn = findColumn;\n CodeMirror.isWordChar = isWordCharBasic;\n CodeMirror.Pass = Pass;\n CodeMirror.signal = signal;\n CodeMirror.Line = Line;\n CodeMirror.changeEnd = changeEnd;\n CodeMirror.scrollbarModel = scrollbarModel;\n CodeMirror.Pos = Pos;\n CodeMirror.cmpPos = cmp;\n CodeMirror.modes = modes;\n CodeMirror.mimeModes = mimeModes;\n CodeMirror.resolveMode = resolveMode;\n CodeMirror.getMode = getMode;\n CodeMirror.modeExtensions = modeExtensions;\n CodeMirror.extendMode = extendMode;\n CodeMirror.copyState = copyState;\n CodeMirror.startState = startState;\n CodeMirror.innerMode = innerMode;\n CodeMirror.commands = commands;\n CodeMirror.keyMap = keyMap;\n CodeMirror.keyName = keyName;\n CodeMirror.isModifierKey = isModifierKey;\n CodeMirror.lookupKey = lookupKey;\n CodeMirror.normalizeKeyMap = normalizeKeyMap;\n CodeMirror.StringStream = StringStream;\n CodeMirror.SharedTextMarker = SharedTextMarker;\n CodeMirror.TextMarker = TextMarker;\n CodeMirror.LineWidget = LineWidget;\n CodeMirror.e_preventDefault = e_preventDefault;\n CodeMirror.e_stopPropagation = e_stopPropagation;\n CodeMirror.e_stop = e_stop;\n CodeMirror.addClass = addClass;\n CodeMirror.contains = contains;\n CodeMirror.rmClass = rmClass;\n CodeMirror.keyNames = keyNames;\n } // EDITOR CONSTRUCTOR\n\n\n defineOptions(CodeMirror);\n addEditorMethods(CodeMirror); // Set up methods on CodeMirror's prototype to redirect to the editor's document.\n\n var dontDelegate = \"iter insert remove copy getEditor constructor\".split(\" \");\n\n for (var prop in Doc.prototype) {\n if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0) {\n CodeMirror.prototype[prop] = function (method) {\n return function () {\n return method.apply(this.doc, arguments);\n };\n }(Doc.prototype[prop]);\n }\n }\n\n eventMixin(Doc);\n CodeMirror.inputStyles = {\n \"textarea\": TextareaInput,\n \"contenteditable\": ContentEditableInput\n }; // Extra arguments are stored as the mode's dependencies, which is\n // used by (legacy) mechanisms like loadmode.js to automatically\n // load a mode. (Preferred mechanism is the require/define calls.)\n\n CodeMirror.defineMode = function (name\n /*, mode, …*/\n ) {\n if (!CodeMirror.defaults.mode && name != \"null\") {\n CodeMirror.defaults.mode = name;\n }\n\n defineMode.apply(this, arguments);\n };\n\n CodeMirror.defineMIME = defineMIME; // Minimal default mode.\n\n CodeMirror.defineMode(\"null\", function () {\n return {\n token: function token(stream) {\n return stream.skipToEnd();\n }\n };\n });\n CodeMirror.defineMIME(\"text/plain\", \"null\"); // EXTENSIONS\n\n CodeMirror.defineExtension = function (name, func) {\n CodeMirror.prototype[name] = func;\n };\n\n CodeMirror.defineDocExtension = function (name, func) {\n Doc.prototype[name] = func;\n };\n\n CodeMirror.fromTextArea = fromTextArea;\n addLegacyProps(CodeMirror);\n CodeMirror.version = \"5.55.0\";\n return CodeMirror;\n});","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n(function (mod) {\n if ((typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) == \"object\" && (typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"), require(\"../xml/xml\"), require(\"../meta\"));else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\", \"../xml/xml\", \"../meta\"], mod);else // Plain browser env\n mod(CodeMirror);\n})(function (CodeMirror) {\n \"use strict\";\n\n CodeMirror.defineMode(\"markdown\", function (cmCfg, modeCfg) {\n var htmlMode = CodeMirror.getMode(cmCfg, \"text/html\");\n var htmlModeMissing = htmlMode.name == \"null\";\n\n function getMode(name) {\n if (CodeMirror.findModeByName) {\n var found = CodeMirror.findModeByName(name);\n if (found) name = found.mime || found.mimes[0];\n }\n\n var mode = CodeMirror.getMode(cmCfg, name);\n return mode.name == \"null\" ? null : mode;\n } // Should characters that affect highlighting be highlighted separate?\n // Does not include characters that will be output (such as `1.` and `-` for lists)\n\n\n if (modeCfg.highlightFormatting === undefined) modeCfg.highlightFormatting = false; // Maximum number of nested blockquotes. Set to 0 for infinite nesting.\n // Excess `>` will emit `error` token.\n\n if (modeCfg.maxBlockquoteDepth === undefined) modeCfg.maxBlockquoteDepth = 0; // Turn on task lists? (\"- [ ] \" and \"- [x] \")\n\n if (modeCfg.taskLists === undefined) modeCfg.taskLists = false; // Turn on strikethrough syntax\n\n if (modeCfg.strikethrough === undefined) modeCfg.strikethrough = false;\n if (modeCfg.emoji === undefined) modeCfg.emoji = false;\n if (modeCfg.fencedCodeBlockHighlighting === undefined) modeCfg.fencedCodeBlockHighlighting = true;\n if (modeCfg.fencedCodeBlockDefaultMode === undefined) modeCfg.fencedCodeBlockDefaultMode = 'text/plain';\n if (modeCfg.xml === undefined) modeCfg.xml = true; // Allow token types to be overridden by user-provided token types.\n\n if (modeCfg.tokenTypeOverrides === undefined) modeCfg.tokenTypeOverrides = {};\n var tokenTypes = {\n header: \"header\",\n code: \"comment\",\n quote: \"quote\",\n list1: \"variable-2\",\n list2: \"variable-3\",\n list3: \"keyword\",\n hr: \"hr\",\n image: \"image\",\n imageAltText: \"image-alt-text\",\n imageMarker: \"image-marker\",\n formatting: \"formatting\",\n linkInline: \"link\",\n linkEmail: \"link\",\n linkText: \"link\",\n linkHref: \"string\",\n em: \"em\",\n strong: \"strong\",\n strikethrough: \"strikethrough\",\n emoji: \"builtin\"\n };\n\n for (var tokenType in tokenTypes) {\n if (tokenTypes.hasOwnProperty(tokenType) && modeCfg.tokenTypeOverrides[tokenType]) {\n tokenTypes[tokenType] = modeCfg.tokenTypeOverrides[tokenType];\n }\n }\n\n var hrRE = /^([*\\-_])(?:\\s*\\1){2,}\\s*$/,\n listRE = /^(?:[*\\-+]|^[0-9]+([.)]))\\s+/,\n taskListRE = /^\\[(x| )\\](?=\\s)/i // Must follow listRE\n ,\n atxHeaderRE = modeCfg.allowAtxHeaderWithoutSpace ? /^(#+)/ : /^(#+)(?: |$)/,\n setextHeaderRE = /^ {0,3}(?:\\={1,}|-{2,})\\s*$/,\n textRE = /^[^#!\\[\\]*_\\\\<>` \"'(~:]+/,\n fencedCodeRE = /^(~~~+|```+)[ \\t]*([\\w\\/+#-]*)[^\\n`]*$/,\n linkDefRE = /^\\s*\\[[^\\]]+?\\]:.*$/ // naive link-definition\n ,\n punctuation = /[!\"#$%&'()*+,\\-.\\/:;<=>?@\\[\\\\\\]^_`{|}~\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0AF0\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E42\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC9\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDF3C-\\uDF3E]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]/,\n expandedTab = \" \"; // CommonMark specifies tab as 4 spaces\n\n function switchInline(stream, state, f) {\n state.f = state.inline = f;\n return f(stream, state);\n }\n\n function switchBlock(stream, state, f) {\n state.f = state.block = f;\n return f(stream, state);\n }\n\n function lineIsEmpty(line) {\n return !line || !/\\S/.test(line.string);\n } // Blocks\n\n\n function blankLine(state) {\n // Reset linkTitle state\n state.linkTitle = false;\n state.linkHref = false;\n state.linkText = false; // Reset EM state\n\n state.em = false; // Reset STRONG state\n\n state.strong = false; // Reset strikethrough state\n\n state.strikethrough = false; // Reset state.quote\n\n state.quote = 0; // Reset state.indentedCode\n\n state.indentedCode = false;\n\n if (state.f == htmlBlock) {\n var exit = htmlModeMissing;\n\n if (!exit) {\n var inner = CodeMirror.innerMode(htmlMode, state.htmlState);\n exit = inner.mode.name == \"xml\" && inner.state.tagStart === null && !inner.state.context && inner.state.tokenize.isInText;\n }\n\n if (exit) {\n state.f = inlineNormal;\n state.block = blockNormal;\n state.htmlState = null;\n }\n } // Reset state.trailingSpace\n\n\n state.trailingSpace = 0;\n state.trailingSpaceNewLine = false; // Mark this line as blank\n\n state.prevLine = state.thisLine;\n state.thisLine = {\n stream: null\n };\n return null;\n }\n\n function blockNormal(stream, state) {\n var firstTokenOnLine = stream.column() === state.indentation;\n var prevLineLineIsEmpty = lineIsEmpty(state.prevLine.stream);\n var prevLineIsIndentedCode = state.indentedCode;\n var prevLineIsHr = state.prevLine.hr;\n var prevLineIsList = state.list !== false;\n var maxNonCodeIndentation = (state.listStack[state.listStack.length - 1] || 0) + 3;\n state.indentedCode = false;\n var lineIndentation = state.indentation; // compute once per line (on first token)\n\n if (state.indentationDiff === null) {\n state.indentationDiff = state.indentation;\n\n if (prevLineIsList) {\n state.list = null; // While this list item's marker's indentation is less than the deepest\n // list item's content's indentation,pop the deepest list item\n // indentation off the stack, and update block indentation state\n\n while (lineIndentation < state.listStack[state.listStack.length - 1]) {\n state.listStack.pop();\n\n if (state.listStack.length) {\n state.indentation = state.listStack[state.listStack.length - 1]; // less than the first list's indent -> the line is no longer a list\n } else {\n state.list = false;\n }\n }\n\n if (state.list !== false) {\n state.indentationDiff = lineIndentation - state.listStack[state.listStack.length - 1];\n }\n }\n } // not comprehensive (currently only for setext detection purposes)\n\n\n var allowsInlineContinuation = !prevLineLineIsEmpty && !prevLineIsHr && !state.prevLine.header && (!prevLineIsList || !prevLineIsIndentedCode) && !state.prevLine.fencedCodeEnd;\n var isHr = (state.list === false || prevLineIsHr || prevLineLineIsEmpty) && state.indentation <= maxNonCodeIndentation && stream.match(hrRE);\n var match = null;\n\n if (state.indentationDiff >= 4 && (prevLineIsIndentedCode || state.prevLine.fencedCodeEnd || state.prevLine.header || prevLineLineIsEmpty)) {\n stream.skipToEnd();\n state.indentedCode = true;\n return tokenTypes.code;\n } else if (stream.eatSpace()) {\n return null;\n } else if (firstTokenOnLine && state.indentation <= maxNonCodeIndentation && (match = stream.match(atxHeaderRE)) && match[1].length <= 6) {\n state.quote = 0;\n state.header = match[1].length;\n state.thisLine.header = true;\n if (modeCfg.highlightFormatting) state.formatting = \"header\";\n state.f = state.inline;\n return getType(state);\n } else if (state.indentation <= maxNonCodeIndentation && stream.eat('>')) {\n state.quote = firstTokenOnLine ? 1 : state.quote + 1;\n if (modeCfg.highlightFormatting) state.formatting = \"quote\";\n stream.eatSpace();\n return getType(state);\n } else if (!isHr && !state.setext && firstTokenOnLine && state.indentation <= maxNonCodeIndentation && (match = stream.match(listRE))) {\n var listType = match[1] ? \"ol\" : \"ul\";\n state.indentation = lineIndentation + stream.current().length;\n state.list = true;\n state.quote = 0; // Add this list item's content's indentation to the stack\n\n state.listStack.push(state.indentation); // Reset inline styles which shouldn't propagate aross list items\n\n state.em = false;\n state.strong = false;\n state.code = false;\n state.strikethrough = false;\n\n if (modeCfg.taskLists && stream.match(taskListRE, false)) {\n state.taskList = true;\n }\n\n state.f = state.inline;\n if (modeCfg.highlightFormatting) state.formatting = [\"list\", \"list-\" + listType];\n return getType(state);\n } else if (firstTokenOnLine && state.indentation <= maxNonCodeIndentation && (match = stream.match(fencedCodeRE, true))) {\n state.quote = 0;\n state.fencedEndRE = new RegExp(match[1] + \"+ *$\"); // try switching mode\n\n state.localMode = modeCfg.fencedCodeBlockHighlighting && getMode(match[2] || modeCfg.fencedCodeBlockDefaultMode);\n if (state.localMode) state.localState = CodeMirror.startState(state.localMode);\n state.f = state.block = local;\n if (modeCfg.highlightFormatting) state.formatting = \"code-block\";\n state.code = -1;\n return getType(state); // SETEXT has lowest block-scope precedence after HR, so check it after\n // the others (code, blockquote, list...)\n } else if ( // if setext set, indicates line after ---/===\n state.setext || // line before ---/===\n (!allowsInlineContinuation || !prevLineIsList) && !state.quote && state.list === false && !state.code && !isHr && !linkDefRE.test(stream.string) && (match = stream.lookAhead(1)) && (match = match.match(setextHeaderRE))) {\n if (!state.setext) {\n state.header = match[0].charAt(0) == '=' ? 1 : 2;\n state.setext = state.header;\n } else {\n state.header = state.setext; // has no effect on type so we can reset it now\n\n state.setext = 0;\n stream.skipToEnd();\n if (modeCfg.highlightFormatting) state.formatting = \"header\";\n }\n\n state.thisLine.header = true;\n state.f = state.inline;\n return getType(state);\n } else if (isHr) {\n stream.skipToEnd();\n state.hr = true;\n state.thisLine.hr = true;\n return tokenTypes.hr;\n } else if (stream.peek() === '[') {\n return switchInline(stream, state, footnoteLink);\n }\n\n return switchInline(stream, state, state.inline);\n }\n\n function htmlBlock(stream, state) {\n var style = htmlMode.token(stream, state.htmlState);\n\n if (!htmlModeMissing) {\n var inner = CodeMirror.innerMode(htmlMode, state.htmlState);\n\n if (inner.mode.name == \"xml\" && inner.state.tagStart === null && !inner.state.context && inner.state.tokenize.isInText || state.md_inside && stream.current().indexOf(\">\") > -1) {\n state.f = inlineNormal;\n state.block = blockNormal;\n state.htmlState = null;\n }\n }\n\n return style;\n }\n\n function local(stream, state) {\n var currListInd = state.listStack[state.listStack.length - 1] || 0;\n var hasExitedList = state.indentation < currListInd;\n var maxFencedEndInd = currListInd + 3;\n\n if (state.fencedEndRE && state.indentation <= maxFencedEndInd && (hasExitedList || stream.match(state.fencedEndRE))) {\n if (modeCfg.highlightFormatting) state.formatting = \"code-block\";\n var returnType;\n if (!hasExitedList) returnType = getType(state);\n state.localMode = state.localState = null;\n state.block = blockNormal;\n state.f = inlineNormal;\n state.fencedEndRE = null;\n state.code = 0;\n state.thisLine.fencedCodeEnd = true;\n if (hasExitedList) return switchBlock(stream, state, state.block);\n return returnType;\n } else if (state.localMode) {\n return state.localMode.token(stream, state.localState);\n } else {\n stream.skipToEnd();\n return tokenTypes.code;\n }\n } // Inline\n\n\n function getType(state) {\n var styles = [];\n\n if (state.formatting) {\n styles.push(tokenTypes.formatting);\n if (typeof state.formatting === \"string\") state.formatting = [state.formatting];\n\n for (var i = 0; i < state.formatting.length; i++) {\n styles.push(tokenTypes.formatting + \"-\" + state.formatting[i]);\n\n if (state.formatting[i] === \"header\") {\n styles.push(tokenTypes.formatting + \"-\" + state.formatting[i] + \"-\" + state.header);\n } // Add `formatting-quote` and `formatting-quote-#` for blockquotes\n // Add `error` instead if the maximum blockquote nesting depth is passed\n\n\n if (state.formatting[i] === \"quote\") {\n if (!modeCfg.maxBlockquoteDepth || modeCfg.maxBlockquoteDepth >= state.quote) {\n styles.push(tokenTypes.formatting + \"-\" + state.formatting[i] + \"-\" + state.quote);\n } else {\n styles.push(\"error\");\n }\n }\n }\n }\n\n if (state.taskOpen) {\n styles.push(\"meta\");\n return styles.length ? styles.join(' ') : null;\n }\n\n if (state.taskClosed) {\n styles.push(\"property\");\n return styles.length ? styles.join(' ') : null;\n }\n\n if (state.linkHref) {\n styles.push(tokenTypes.linkHref, \"url\");\n } else {\n // Only apply inline styles to non-url text\n if (state.strong) {\n styles.push(tokenTypes.strong);\n }\n\n if (state.em) {\n styles.push(tokenTypes.em);\n }\n\n if (state.strikethrough) {\n styles.push(tokenTypes.strikethrough);\n }\n\n if (state.emoji) {\n styles.push(tokenTypes.emoji);\n }\n\n if (state.linkText) {\n styles.push(tokenTypes.linkText);\n }\n\n if (state.code) {\n styles.push(tokenTypes.code);\n }\n\n if (state.image) {\n styles.push(tokenTypes.image);\n }\n\n if (state.imageAltText) {\n styles.push(tokenTypes.imageAltText, \"link\");\n }\n\n if (state.imageMarker) {\n styles.push(tokenTypes.imageMarker);\n }\n }\n\n if (state.header) {\n styles.push(tokenTypes.header, tokenTypes.header + \"-\" + state.header);\n }\n\n if (state.quote) {\n styles.push(tokenTypes.quote); // Add `quote-#` where the maximum for `#` is modeCfg.maxBlockquoteDepth\n\n if (!modeCfg.maxBlockquoteDepth || modeCfg.maxBlockquoteDepth >= state.quote) {\n styles.push(tokenTypes.quote + \"-\" + state.quote);\n } else {\n styles.push(tokenTypes.quote + \"-\" + modeCfg.maxBlockquoteDepth);\n }\n }\n\n if (state.list !== false) {\n var listMod = (state.listStack.length - 1) % 3;\n\n if (!listMod) {\n styles.push(tokenTypes.list1);\n } else if (listMod === 1) {\n styles.push(tokenTypes.list2);\n } else {\n styles.push(tokenTypes.list3);\n }\n }\n\n if (state.trailingSpaceNewLine) {\n styles.push(\"trailing-space-new-line\");\n } else if (state.trailingSpace) {\n styles.push(\"trailing-space-\" + (state.trailingSpace % 2 ? \"a\" : \"b\"));\n }\n\n return styles.length ? styles.join(' ') : null;\n }\n\n function handleText(stream, state) {\n if (stream.match(textRE, true)) {\n return getType(state);\n }\n\n return undefined;\n }\n\n function inlineNormal(stream, state) {\n var style = state.text(stream, state);\n if (typeof style !== 'undefined') return style;\n\n if (state.list) {\n // List marker (*, +, -, 1., etc)\n state.list = null;\n return getType(state);\n }\n\n if (state.taskList) {\n var taskOpen = stream.match(taskListRE, true)[1] === \" \";\n if (taskOpen) state.taskOpen = true;else state.taskClosed = true;\n if (modeCfg.highlightFormatting) state.formatting = \"task\";\n state.taskList = false;\n return getType(state);\n }\n\n state.taskOpen = false;\n state.taskClosed = false;\n\n if (state.header && stream.match(/^#+$/, true)) {\n if (modeCfg.highlightFormatting) state.formatting = \"header\";\n return getType(state);\n }\n\n var ch = stream.next(); // Matches link titles present on next line\n\n if (state.linkTitle) {\n state.linkTitle = false;\n var matchCh = ch;\n\n if (ch === '(') {\n matchCh = ')';\n }\n\n matchCh = (matchCh + '').replace(/([.?*+^\\[\\]\\\\(){}|-])/g, \"\\\\$1\");\n var regex = '^\\\\s*(?:[^' + matchCh + '\\\\\\\\]+|\\\\\\\\\\\\\\\\|\\\\\\\\.)' + matchCh;\n\n if (stream.match(new RegExp(regex), true)) {\n return tokenTypes.linkHref;\n }\n } // If this block is changed, it may need to be updated in GFM mode\n\n\n if (ch === '`') {\n var previousFormatting = state.formatting;\n if (modeCfg.highlightFormatting) state.formatting = \"code\";\n stream.eatWhile('`');\n var count = stream.current().length;\n\n if (state.code == 0 && (!state.quote || count == 1)) {\n state.code = count;\n return getType(state);\n } else if (count == state.code) {\n // Must be exact\n var t = getType(state);\n state.code = 0;\n return t;\n } else {\n state.formatting = previousFormatting;\n return getType(state);\n }\n } else if (state.code) {\n return getType(state);\n }\n\n if (ch === '\\\\') {\n stream.next();\n\n if (modeCfg.highlightFormatting) {\n var type = getType(state);\n var formattingEscape = tokenTypes.formatting + \"-escape\";\n return type ? type + \" \" + formattingEscape : formattingEscape;\n }\n }\n\n if (ch === '!' && stream.match(/\\[[^\\]]*\\] ?(?:\\(|\\[)/, false)) {\n state.imageMarker = true;\n state.image = true;\n if (modeCfg.highlightFormatting) state.formatting = \"image\";\n return getType(state);\n }\n\n if (ch === '[' && state.imageMarker && stream.match(/[^\\]]*\\](\\(.*?\\)| ?\\[.*?\\])/, false)) {\n state.imageMarker = false;\n state.imageAltText = true;\n if (modeCfg.highlightFormatting) state.formatting = \"image\";\n return getType(state);\n }\n\n if (ch === ']' && state.imageAltText) {\n if (modeCfg.highlightFormatting) state.formatting = \"image\";\n var type = getType(state);\n state.imageAltText = false;\n state.image = false;\n state.inline = state.f = linkHref;\n return type;\n }\n\n if (ch === '[' && !state.image) {\n if (state.linkText && stream.match(/^.*?\\]/)) return getType(state);\n state.linkText = true;\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n return getType(state);\n }\n\n if (ch === ']' && state.linkText) {\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n var type = getType(state);\n state.linkText = false;\n state.inline = state.f = stream.match(/\\(.*?\\)| ?\\[.*?\\]/, false) ? linkHref : inlineNormal;\n return type;\n }\n\n if (ch === '<' && stream.match(/^(https?|ftps?):\\/\\/(?:[^\\\\>]|\\\\.)+>/, false)) {\n state.f = state.inline = linkInline;\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n var type = getType(state);\n\n if (type) {\n type += \" \";\n } else {\n type = \"\";\n }\n\n return type + tokenTypes.linkInline;\n }\n\n if (ch === '<' && stream.match(/^[^> \\\\]+@(?:[^\\\\>]|\\\\.)+>/, false)) {\n state.f = state.inline = linkInline;\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n var type = getType(state);\n\n if (type) {\n type += \" \";\n } else {\n type = \"\";\n }\n\n return type + tokenTypes.linkEmail;\n }\n\n if (modeCfg.xml && ch === '<' && stream.match(/^(!--|\\?|!\\[CDATA\\[|[a-z][a-z0-9-]*(?:\\s+[a-z_:.\\-]+(?:\\s*=\\s*[^>]+)?)*\\s*(?:>|$))/i, false)) {\n var end = stream.string.indexOf(\">\", stream.pos);\n\n if (end != -1) {\n var atts = stream.string.substring(stream.start, end);\n if (/markdown\\s*=\\s*('|\"){0,1}1('|\"){0,1}/.test(atts)) state.md_inside = true;\n }\n\n stream.backUp(1);\n state.htmlState = CodeMirror.startState(htmlMode);\n return switchBlock(stream, state, htmlBlock);\n }\n\n if (modeCfg.xml && ch === '<' && stream.match(/^\\/\\w*?>/)) {\n state.md_inside = false;\n return \"tag\";\n } else if (ch === \"*\" || ch === \"_\") {\n var len = 1,\n before = stream.pos == 1 ? \" \" : stream.string.charAt(stream.pos - 2);\n\n while (len < 3 && stream.eat(ch)) {\n len++;\n }\n\n var after = stream.peek() || \" \"; // See http://spec.commonmark.org/0.27/#emphasis-and-strong-emphasis\n\n var leftFlanking = !/\\s/.test(after) && (!punctuation.test(after) || /\\s/.test(before) || punctuation.test(before));\n var rightFlanking = !/\\s/.test(before) && (!punctuation.test(before) || /\\s/.test(after) || punctuation.test(after));\n var setEm = null,\n setStrong = null;\n\n if (len % 2) {\n // Em\n if (!state.em && leftFlanking && (ch === \"*\" || !rightFlanking || punctuation.test(before))) setEm = true;else if (state.em == ch && rightFlanking && (ch === \"*\" || !leftFlanking || punctuation.test(after))) setEm = false;\n }\n\n if (len > 1) {\n // Strong\n if (!state.strong && leftFlanking && (ch === \"*\" || !rightFlanking || punctuation.test(before))) setStrong = true;else if (state.strong == ch && rightFlanking && (ch === \"*\" || !leftFlanking || punctuation.test(after))) setStrong = false;\n }\n\n if (setStrong != null || setEm != null) {\n if (modeCfg.highlightFormatting) state.formatting = setEm == null ? \"strong\" : setStrong == null ? \"em\" : \"strong em\";\n if (setEm === true) state.em = ch;\n if (setStrong === true) state.strong = ch;\n var t = getType(state);\n if (setEm === false) state.em = false;\n if (setStrong === false) state.strong = false;\n return t;\n }\n } else if (ch === ' ') {\n if (stream.eat('*') || stream.eat('_')) {\n // Probably surrounded by spaces\n if (stream.peek() === ' ') {\n // Surrounded by spaces, ignore\n return getType(state);\n } else {\n // Not surrounded by spaces, back up pointer\n stream.backUp(1);\n }\n }\n }\n\n if (modeCfg.strikethrough) {\n if (ch === '~' && stream.eatWhile(ch)) {\n if (state.strikethrough) {\n // Remove strikethrough\n if (modeCfg.highlightFormatting) state.formatting = \"strikethrough\";\n var t = getType(state);\n state.strikethrough = false;\n return t;\n } else if (stream.match(/^[^\\s]/, false)) {\n // Add strikethrough\n state.strikethrough = true;\n if (modeCfg.highlightFormatting) state.formatting = \"strikethrough\";\n return getType(state);\n }\n } else if (ch === ' ') {\n if (stream.match(/^~~/, true)) {\n // Probably surrounded by space\n if (stream.peek() === ' ') {\n // Surrounded by spaces, ignore\n return getType(state);\n } else {\n // Not surrounded by spaces, back up pointer\n stream.backUp(2);\n }\n }\n }\n }\n\n if (modeCfg.emoji && ch === \":\" && stream.match(/^(?:[a-z_\\d+][a-z_\\d+-]*|\\-[a-z_\\d+][a-z_\\d+-]*):/)) {\n state.emoji = true;\n if (modeCfg.highlightFormatting) state.formatting = \"emoji\";\n var retType = getType(state);\n state.emoji = false;\n return retType;\n }\n\n if (ch === ' ') {\n if (stream.match(/^ +$/, false)) {\n state.trailingSpace++;\n } else if (state.trailingSpace) {\n state.trailingSpaceNewLine = true;\n }\n }\n\n return getType(state);\n }\n\n function linkInline(stream, state) {\n var ch = stream.next();\n\n if (ch === \">\") {\n state.f = state.inline = inlineNormal;\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n var type = getType(state);\n\n if (type) {\n type += \" \";\n } else {\n type = \"\";\n }\n\n return type + tokenTypes.linkInline;\n }\n\n stream.match(/^[^>]+/, true);\n return tokenTypes.linkInline;\n }\n\n function linkHref(stream, state) {\n // Check if space, and return NULL if so (to avoid marking the space)\n if (stream.eatSpace()) {\n return null;\n }\n\n var ch = stream.next();\n\n if (ch === '(' || ch === '[') {\n state.f = state.inline = getLinkHrefInside(ch === \"(\" ? \")\" : \"]\");\n if (modeCfg.highlightFormatting) state.formatting = \"link-string\";\n state.linkHref = true;\n return getType(state);\n }\n\n return 'error';\n }\n\n var linkRE = {\n \")\": /^(?:[^\\\\\\(\\)]|\\\\.|\\((?:[^\\\\\\(\\)]|\\\\.)*\\))*?(?=\\))/,\n \"]\": /^(?:[^\\\\\\[\\]]|\\\\.|\\[(?:[^\\\\\\[\\]]|\\\\.)*\\])*?(?=\\])/\n };\n\n function getLinkHrefInside(endChar) {\n return function (stream, state) {\n var ch = stream.next();\n\n if (ch === endChar) {\n state.f = state.inline = inlineNormal;\n if (modeCfg.highlightFormatting) state.formatting = \"link-string\";\n var returnState = getType(state);\n state.linkHref = false;\n return returnState;\n }\n\n stream.match(linkRE[endChar]);\n state.linkHref = true;\n return getType(state);\n };\n }\n\n function footnoteLink(stream, state) {\n if (stream.match(/^([^\\]\\\\]|\\\\.)*\\]:/, false)) {\n state.f = footnoteLinkInside;\n stream.next(); // Consume [\n\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n state.linkText = true;\n return getType(state);\n }\n\n return switchInline(stream, state, inlineNormal);\n }\n\n function footnoteLinkInside(stream, state) {\n if (stream.match(/^\\]:/, true)) {\n state.f = state.inline = footnoteUrl;\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n var returnType = getType(state);\n state.linkText = false;\n return returnType;\n }\n\n stream.match(/^([^\\]\\\\]|\\\\.)+/, true);\n return tokenTypes.linkText;\n }\n\n function footnoteUrl(stream, state) {\n // Check if space, and return NULL if so (to avoid marking the space)\n if (stream.eatSpace()) {\n return null;\n } // Match URL\n\n\n stream.match(/^[^\\s]+/, true); // Check for link title\n\n if (stream.peek() === undefined) {\n // End of line, set flag to check next line\n state.linkTitle = true;\n } else {\n // More content on line, check if link title\n stream.match(/^(?:\\s+(?:\"(?:[^\"\\\\]|\\\\\\\\|\\\\.)+\"|'(?:[^'\\\\]|\\\\\\\\|\\\\.)+'|\\((?:[^)\\\\]|\\\\\\\\|\\\\.)+\\)))?/, true);\n }\n\n state.f = state.inline = inlineNormal;\n return tokenTypes.linkHref + \" url\";\n }\n\n var mode = {\n startState: function startState() {\n return {\n f: blockNormal,\n prevLine: {\n stream: null\n },\n thisLine: {\n stream: null\n },\n block: blockNormal,\n htmlState: null,\n indentation: 0,\n inline: inlineNormal,\n text: handleText,\n formatting: false,\n linkText: false,\n linkHref: false,\n linkTitle: false,\n code: 0,\n em: false,\n strong: false,\n header: 0,\n setext: 0,\n hr: false,\n taskList: false,\n list: false,\n listStack: [],\n quote: 0,\n trailingSpace: 0,\n trailingSpaceNewLine: false,\n strikethrough: false,\n emoji: false,\n fencedEndRE: null\n };\n },\n copyState: function copyState(s) {\n return {\n f: s.f,\n prevLine: s.prevLine,\n thisLine: s.thisLine,\n block: s.block,\n htmlState: s.htmlState && CodeMirror.copyState(htmlMode, s.htmlState),\n indentation: s.indentation,\n localMode: s.localMode,\n localState: s.localMode ? CodeMirror.copyState(s.localMode, s.localState) : null,\n inline: s.inline,\n text: s.text,\n formatting: false,\n linkText: s.linkText,\n linkTitle: s.linkTitle,\n linkHref: s.linkHref,\n code: s.code,\n em: s.em,\n strong: s.strong,\n strikethrough: s.strikethrough,\n emoji: s.emoji,\n header: s.header,\n setext: s.setext,\n hr: s.hr,\n taskList: s.taskList,\n list: s.list,\n listStack: s.listStack.slice(0),\n quote: s.quote,\n indentedCode: s.indentedCode,\n trailingSpace: s.trailingSpace,\n trailingSpaceNewLine: s.trailingSpaceNewLine,\n md_inside: s.md_inside,\n fencedEndRE: s.fencedEndRE\n };\n },\n token: function token(stream, state) {\n // Reset state.formatting\n state.formatting = false;\n\n if (stream != state.thisLine.stream) {\n state.header = 0;\n state.hr = false;\n\n if (stream.match(/^\\s*$/, true)) {\n blankLine(state);\n return null;\n }\n\n state.prevLine = state.thisLine;\n state.thisLine = {\n stream: stream // Reset state.taskList\n\n };\n state.taskList = false; // Reset state.trailingSpace\n\n state.trailingSpace = 0;\n state.trailingSpaceNewLine = false;\n\n if (!state.localState) {\n state.f = state.block;\n\n if (state.f != htmlBlock) {\n var indentation = stream.match(/^\\s*/, true)[0].replace(/\\t/g, expandedTab).length;\n state.indentation = indentation;\n state.indentationDiff = null;\n if (indentation > 0) return null;\n }\n }\n }\n\n return state.f(stream, state);\n },\n innerMode: function innerMode(state) {\n if (state.block == htmlBlock) return {\n state: state.htmlState,\n mode: htmlMode\n };\n if (state.localState) return {\n state: state.localState,\n mode: state.localMode\n };\n return {\n state: state,\n mode: mode\n };\n },\n indent: function indent(state, textAfter, line) {\n if (state.block == htmlBlock && htmlMode.indent) return htmlMode.indent(state.htmlState, textAfter, line);\n if (state.localState && state.localMode.indent) return state.localMode.indent(state.localState, textAfter, line);\n return CodeMirror.Pass;\n },\n blankLine: blankLine,\n getType: getType,\n blockCommentStart: \"\",\n closeBrackets: \"()[]{}''\\\"\\\"``\",\n fold: \"markdown\"\n };\n return mode;\n }, \"xml\");\n CodeMirror.defineMIME(\"text/markdown\", \"markdown\");\n CodeMirror.defineMIME(\"text/x-markdown\", \"markdown\");\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n(function (mod) {\n if ((typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) == \"object\" && (typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);else // Plain browser env\n mod(CodeMirror);\n})(function (CodeMirror) {\n \"use strict\";\n\n var htmlConfig = {\n autoSelfClosers: {\n 'area': true,\n 'base': true,\n 'br': true,\n 'col': true,\n 'command': true,\n 'embed': true,\n 'frame': true,\n 'hr': true,\n 'img': true,\n 'input': true,\n 'keygen': true,\n 'link': true,\n 'meta': true,\n 'param': true,\n 'source': true,\n 'track': true,\n 'wbr': true,\n 'menuitem': true\n },\n implicitlyClosed: {\n 'dd': true,\n 'li': true,\n 'optgroup': true,\n 'option': true,\n 'p': true,\n 'rp': true,\n 'rt': true,\n 'tbody': true,\n 'td': true,\n 'tfoot': true,\n 'th': true,\n 'tr': true\n },\n contextGrabbers: {\n 'dd': {\n 'dd': true,\n 'dt': true\n },\n 'dt': {\n 'dd': true,\n 'dt': true\n },\n 'li': {\n 'li': true\n },\n 'option': {\n 'option': true,\n 'optgroup': true\n },\n 'optgroup': {\n 'optgroup': true\n },\n 'p': {\n 'address': true,\n 'article': true,\n 'aside': true,\n 'blockquote': true,\n 'dir': true,\n 'div': true,\n 'dl': true,\n 'fieldset': true,\n 'footer': true,\n 'form': true,\n 'h1': true,\n 'h2': true,\n 'h3': true,\n 'h4': true,\n 'h5': true,\n 'h6': true,\n 'header': true,\n 'hgroup': true,\n 'hr': true,\n 'menu': true,\n 'nav': true,\n 'ol': true,\n 'p': true,\n 'pre': true,\n 'section': true,\n 'table': true,\n 'ul': true\n },\n 'rp': {\n 'rp': true,\n 'rt': true\n },\n 'rt': {\n 'rp': true,\n 'rt': true\n },\n 'tbody': {\n 'tbody': true,\n 'tfoot': true\n },\n 'td': {\n 'td': true,\n 'th': true\n },\n 'tfoot': {\n 'tbody': true\n },\n 'th': {\n 'td': true,\n 'th': true\n },\n 'thead': {\n 'tbody': true,\n 'tfoot': true\n },\n 'tr': {\n 'tr': true\n }\n },\n doNotIndent: {\n \"pre\": true\n },\n allowUnquoted: true,\n allowMissing: true,\n caseFold: true\n };\n var xmlConfig = {\n autoSelfClosers: {},\n implicitlyClosed: {},\n contextGrabbers: {},\n doNotIndent: {},\n allowUnquoted: false,\n allowMissing: false,\n allowMissingTagName: false,\n caseFold: false\n };\n CodeMirror.defineMode(\"xml\", function (editorConf, config_) {\n var indentUnit = editorConf.indentUnit;\n var config = {};\n var defaults = config_.htmlMode ? htmlConfig : xmlConfig;\n\n for (var prop in defaults) {\n config[prop] = defaults[prop];\n }\n\n for (var prop in config_) {\n config[prop] = config_[prop];\n } // Return variables for tokenizers\n\n\n var type, setStyle;\n\n function inText(stream, state) {\n function chain(parser) {\n state.tokenize = parser;\n return parser(stream, state);\n }\n\n var ch = stream.next();\n\n if (ch == \"<\") {\n if (stream.eat(\"!\")) {\n if (stream.eat(\"[\")) {\n if (stream.match(\"CDATA[\")) return chain(inBlock(\"atom\", \"]]>\"));else return null;\n } else if (stream.match(\"--\")) {\n return chain(inBlock(\"comment\", \"-->\"));\n } else if (stream.match(\"DOCTYPE\", true, true)) {\n stream.eatWhile(/[\\w\\._\\-]/);\n return chain(doctype(1));\n } else {\n return null;\n }\n } else if (stream.eat(\"?\")) {\n stream.eatWhile(/[\\w\\._\\-]/);\n state.tokenize = inBlock(\"meta\", \"?>\");\n return \"meta\";\n } else {\n type = stream.eat(\"/\") ? \"closeTag\" : \"openTag\";\n state.tokenize = inTag;\n return \"tag bracket\";\n }\n } else if (ch == \"&\") {\n var ok;\n\n if (stream.eat(\"#\")) {\n if (stream.eat(\"x\")) {\n ok = stream.eatWhile(/[a-fA-F\\d]/) && stream.eat(\";\");\n } else {\n ok = stream.eatWhile(/[\\d]/) && stream.eat(\";\");\n }\n } else {\n ok = stream.eatWhile(/[\\w\\.\\-:]/) && stream.eat(\";\");\n }\n\n return ok ? \"atom\" : \"error\";\n } else {\n stream.eatWhile(/[^&<]/);\n return null;\n }\n }\n\n inText.isInText = true;\n\n function inTag(stream, state) {\n var ch = stream.next();\n\n if (ch == \">\" || ch == \"/\" && stream.eat(\">\")) {\n state.tokenize = inText;\n type = ch == \">\" ? \"endTag\" : \"selfcloseTag\";\n return \"tag bracket\";\n } else if (ch == \"=\") {\n type = \"equals\";\n return null;\n } else if (ch == \"<\") {\n state.tokenize = inText;\n state.state = baseState;\n state.tagName = state.tagStart = null;\n var next = state.tokenize(stream, state);\n return next ? next + \" tag error\" : \"tag error\";\n } else if (/[\\'\\\"]/.test(ch)) {\n state.tokenize = inAttribute(ch);\n state.stringStartCol = stream.column();\n return state.tokenize(stream, state);\n } else {\n stream.match(/^[^\\s\\u00a0=<>\\\"\\']*[^\\s\\u00a0=<>\\\"\\'\\/]/);\n return \"word\";\n }\n }\n\n function inAttribute(quote) {\n var closure = function closure(stream, state) {\n while (!stream.eol()) {\n if (stream.next() == quote) {\n state.tokenize = inTag;\n break;\n }\n }\n\n return \"string\";\n };\n\n closure.isInAttribute = true;\n return closure;\n }\n\n function inBlock(style, terminator) {\n return function (stream, state) {\n while (!stream.eol()) {\n if (stream.match(terminator)) {\n state.tokenize = inText;\n break;\n }\n\n stream.next();\n }\n\n return style;\n };\n }\n\n function doctype(depth) {\n return function (stream, state) {\n var ch;\n\n while ((ch = stream.next()) != null) {\n if (ch == \"<\") {\n state.tokenize = doctype(depth + 1);\n return state.tokenize(stream, state);\n } else if (ch == \">\") {\n if (depth == 1) {\n state.tokenize = inText;\n break;\n } else {\n state.tokenize = doctype(depth - 1);\n return state.tokenize(stream, state);\n }\n }\n }\n\n return \"meta\";\n };\n }\n\n function Context(state, tagName, startOfLine) {\n this.prev = state.context;\n this.tagName = tagName;\n this.indent = state.indented;\n this.startOfLine = startOfLine;\n if (config.doNotIndent.hasOwnProperty(tagName) || state.context && state.context.noIndent) this.noIndent = true;\n }\n\n function popContext(state) {\n if (state.context) state.context = state.context.prev;\n }\n\n function maybePopContext(state, nextTagName) {\n var parentTagName;\n\n while (true) {\n if (!state.context) {\n return;\n }\n\n parentTagName = state.context.tagName;\n\n if (!config.contextGrabbers.hasOwnProperty(parentTagName) || !config.contextGrabbers[parentTagName].hasOwnProperty(nextTagName)) {\n return;\n }\n\n popContext(state);\n }\n }\n\n function baseState(type, stream, state) {\n if (type == \"openTag\") {\n state.tagStart = stream.column();\n return tagNameState;\n } else if (type == \"closeTag\") {\n return closeTagNameState;\n } else {\n return baseState;\n }\n }\n\n function tagNameState(type, stream, state) {\n if (type == \"word\") {\n state.tagName = stream.current();\n setStyle = \"tag\";\n return attrState;\n } else if (config.allowMissingTagName && type == \"endTag\") {\n setStyle = \"tag bracket\";\n return attrState(type, stream, state);\n } else {\n setStyle = \"error\";\n return tagNameState;\n }\n }\n\n function closeTagNameState(type, stream, state) {\n if (type == \"word\") {\n var tagName = stream.current();\n if (state.context && state.context.tagName != tagName && config.implicitlyClosed.hasOwnProperty(state.context.tagName)) popContext(state);\n\n if (state.context && state.context.tagName == tagName || config.matchClosing === false) {\n setStyle = \"tag\";\n return closeState;\n } else {\n setStyle = \"tag error\";\n return closeStateErr;\n }\n } else if (config.allowMissingTagName && type == \"endTag\") {\n setStyle = \"tag bracket\";\n return closeState(type, stream, state);\n } else {\n setStyle = \"error\";\n return closeStateErr;\n }\n }\n\n function closeState(type, _stream, state) {\n if (type != \"endTag\") {\n setStyle = \"error\";\n return closeState;\n }\n\n popContext(state);\n return baseState;\n }\n\n function closeStateErr(type, stream, state) {\n setStyle = \"error\";\n return closeState(type, stream, state);\n }\n\n function attrState(type, _stream, state) {\n if (type == \"word\") {\n setStyle = \"attribute\";\n return attrEqState;\n } else if (type == \"endTag\" || type == \"selfcloseTag\") {\n var tagName = state.tagName,\n tagStart = state.tagStart;\n state.tagName = state.tagStart = null;\n\n if (type == \"selfcloseTag\" || config.autoSelfClosers.hasOwnProperty(tagName)) {\n maybePopContext(state, tagName);\n } else {\n maybePopContext(state, tagName);\n state.context = new Context(state, tagName, tagStart == state.indented);\n }\n\n return baseState;\n }\n\n setStyle = \"error\";\n return attrState;\n }\n\n function attrEqState(type, stream, state) {\n if (type == \"equals\") return attrValueState;\n if (!config.allowMissing) setStyle = \"error\";\n return attrState(type, stream, state);\n }\n\n function attrValueState(type, stream, state) {\n if (type == \"string\") return attrContinuedState;\n\n if (type == \"word\" && config.allowUnquoted) {\n setStyle = \"string\";\n return attrState;\n }\n\n setStyle = \"error\";\n return attrState(type, stream, state);\n }\n\n function attrContinuedState(type, stream, state) {\n if (type == \"string\") return attrContinuedState;\n return attrState(type, stream, state);\n }\n\n return {\n startState: function startState(baseIndent) {\n var state = {\n tokenize: inText,\n state: baseState,\n indented: baseIndent || 0,\n tagName: null,\n tagStart: null,\n context: null\n };\n if (baseIndent != null) state.baseIndent = baseIndent;\n return state;\n },\n token: function token(stream, state) {\n if (!state.tagName && stream.sol()) state.indented = stream.indentation();\n if (stream.eatSpace()) return null;\n type = null;\n var style = state.tokenize(stream, state);\n\n if ((style || type) && style != \"comment\") {\n setStyle = null;\n state.state = state.state(type || style, stream, state);\n if (setStyle) style = setStyle == \"error\" ? style + \" error\" : setStyle;\n }\n\n return style;\n },\n indent: function indent(state, textAfter, fullLine) {\n var context = state.context; // Indent multi-line strings (e.g. css).\n\n if (state.tokenize.isInAttribute) {\n if (state.tagStart == state.indented) return state.stringStartCol + 1;else return state.indented + indentUnit;\n }\n\n if (context && context.noIndent) return CodeMirror.Pass;\n if (state.tokenize != inTag && state.tokenize != inText) return fullLine ? fullLine.match(/^(\\s*)/)[0].length : 0; // Indent the starts of attribute names.\n\n if (state.tagName) {\n if (config.multilineTagIndentPastTag !== false) return state.tagStart + state.tagName.length + 2;else return state.tagStart + indentUnit * (config.multilineTagIndentFactor || 1);\n }\n\n if (config.alignCDATA && /$/,\n blockCommentStart: \"\",\n configuration: config.htmlMode ? \"html\" : \"xml\",\n helperType: config.htmlMode ? \"html\" : \"xml\",\n skipAttribute: function skipAttribute(state) {\n if (state.state == attrValueState) state.state = attrState;\n },\n xmlCurrentTag: function xmlCurrentTag(state) {\n return state.tagName ? {\n name: state.tagName,\n close: state.type == \"closeTag\"\n } : null;\n },\n xmlCurrentContext: function xmlCurrentContext(state) {\n var context = [];\n\n for (var cx = state.context; cx; cx = cx.prev) {\n if (cx.tagName) context.push(cx.tagName);\n }\n\n return context.reverse();\n }\n };\n });\n CodeMirror.defineMIME(\"text/xml\", \"xml\");\n CodeMirror.defineMIME(\"application/xml\", \"xml\");\n if (!CodeMirror.mimeModes.hasOwnProperty(\"text/html\")) CodeMirror.defineMIME(\"text/html\", {\n name: \"xml\",\n htmlMode: true\n });\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n// Utility function that allows modes to be combined. The mode given\n// as the base argument takes care of most of the normal mode\n// functionality, but a second (typically simple) mode is used, which\n// can override the style of text. Both modes get to parse all of the\n// text, but when both assign a non-null style to a piece of code, the\n// overlay wins, unless the combine argument was true and not overridden,\n// or state.overlay.combineTokens was true, in which case the styles are\n// combined.\n(function (mod) {\n if ((typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) == \"object\" && (typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);else // Plain browser env\n mod(CodeMirror);\n})(function (CodeMirror) {\n \"use strict\";\n\n CodeMirror.overlayMode = function (base, overlay, combine) {\n return {\n startState: function startState() {\n return {\n base: CodeMirror.startState(base),\n overlay: CodeMirror.startState(overlay),\n basePos: 0,\n baseCur: null,\n overlayPos: 0,\n overlayCur: null,\n streamSeen: null\n };\n },\n copyState: function copyState(state) {\n return {\n base: CodeMirror.copyState(base, state.base),\n overlay: CodeMirror.copyState(overlay, state.overlay),\n basePos: state.basePos,\n baseCur: null,\n overlayPos: state.overlayPos,\n overlayCur: null\n };\n },\n token: function token(stream, state) {\n if (stream != state.streamSeen || Math.min(state.basePos, state.overlayPos) < stream.start) {\n state.streamSeen = stream;\n state.basePos = state.overlayPos = stream.start;\n }\n\n if (stream.start == state.basePos) {\n state.baseCur = base.token(stream, state.base);\n state.basePos = stream.pos;\n }\n\n if (stream.start == state.overlayPos) {\n stream.pos = stream.start;\n state.overlayCur = overlay.token(stream, state.overlay);\n state.overlayPos = stream.pos;\n }\n\n stream.pos = Math.min(state.basePos, state.overlayPos); // state.overlay.combineTokens always takes precedence over combine,\n // unless set to null\n\n if (state.overlayCur == null) return state.baseCur;else if (state.baseCur != null && state.overlay.combineTokens || combine && state.overlay.combineTokens == null) return state.baseCur + \" \" + state.overlayCur;else return state.overlayCur;\n },\n indent: base.indent && function (state, textAfter, line) {\n return base.indent(state.base, textAfter, line);\n },\n electricChars: base.electricChars,\n innerMode: function innerMode(state) {\n return {\n state: state.base,\n mode: base\n };\n },\n blankLine: function blankLine(state) {\n var baseToken, overlayToken;\n if (base.blankLine) baseToken = base.blankLine(state.base);\n if (overlay.blankLine) overlayToken = overlay.blankLine(state.overlay);\n return overlayToken == null ? baseToken : combine && baseToken != null ? baseToken + \" \" + overlayToken : overlayToken;\n }\n };\n };\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*\r\n * Behave.js\r\n *\r\n * Copyright 2013, Jacob Kelley - http://jakiestfu.com/\r\n * Released under the MIT Licence\r\n * http://opensource.org/licenses/MIT\r\n *\r\n * Github: http://github.com/jakiestfu/Behave.js/\r\n * Version: 1.5\r\n */\n(function (undefined) {\n 'use strict';\n\n var BehaveHooks = BehaveHooks || function () {\n var hooks = {};\n return {\n add: function add(hookName, fn) {\n if (_typeof(hookName) == \"object\") {\n var i;\n\n for (i = 0; i < hookName.length; i++) {\n var theHook = hookName[i];\n\n if (!hooks[theHook]) {\n hooks[theHook] = [];\n }\n\n hooks[theHook].push(fn);\n }\n } else {\n if (!hooks[hookName]) {\n hooks[hookName] = [];\n }\n\n hooks[hookName].push(fn);\n }\n },\n get: function get(hookName) {\n if (hooks[hookName]) {\n return hooks[hookName];\n }\n }\n };\n }(),\n Behave = Behave || function (userOpts) {\n if (typeof String.prototype.repeat !== 'function') {\n String.prototype.repeat = function (times) {\n if (times < 1) {\n return '';\n }\n\n if (times % 2) {\n return this.repeat(times - 1) + this;\n }\n\n var half = this.repeat(times / 2);\n return half + half;\n };\n }\n\n if (typeof Array.prototype.filter !== 'function') {\n Array.prototype.filter = function (func\n /*, thisp */\n ) {\n if (this === null) {\n throw new TypeError();\n }\n\n var t = Object(this),\n len = t.length >>> 0;\n\n if (typeof func != \"function\") {\n throw new TypeError();\n }\n\n var res = [],\n thisp = arguments[1];\n\n for (var i = 0; i < len; i++) {\n if (i in t) {\n var val = t[i];\n\n if (func.call(thisp, val, i, t)) {\n res.push(val);\n }\n }\n }\n\n return res;\n };\n }\n\n var defaults = {\n textarea: null,\n replaceTab: true,\n softTabs: true,\n tabSize: 4,\n autoOpen: true,\n overwrite: true,\n autoStrip: true,\n autoIndent: true,\n fence: false\n },\n tab,\n newLine,\n charSettings = {\n keyMap: [{\n open: \"\\\"\",\n close: \"\\\"\",\n canBreak: false\n }, {\n open: \"'\",\n close: \"'\",\n canBreak: false\n }, {\n open: \"(\",\n close: \")\",\n canBreak: false\n }, {\n open: \"[\",\n close: \"]\",\n canBreak: true\n }, {\n open: \"{\",\n close: \"}\",\n canBreak: true\n }]\n },\n utils = {\n _callHook: function _callHook(hookName, passData) {\n var hooks = BehaveHooks.get(hookName);\n passData = typeof passData == \"boolean\" && passData === false ? false : true;\n\n if (hooks) {\n if (passData) {\n var theEditor = defaults.textarea,\n textVal = theEditor.value,\n caretPos = utils.cursor.get(),\n i;\n\n for (i = 0; i < hooks.length; i++) {\n hooks[i].call(undefined, {\n editor: {\n element: theEditor,\n text: textVal,\n levelsDeep: utils.levelsDeep()\n },\n caret: {\n pos: caretPos\n },\n lines: {\n current: utils.cursor.getLine(textVal, caretPos),\n total: utils.editor.getLines(textVal)\n }\n });\n }\n } else {\n for (i = 0; i < hooks.length; i++) {\n hooks[i].call(undefined);\n }\n }\n }\n },\n defineNewLine: function defineNewLine() {\n var ta = document.createElement('textarea');\n ta.value = \"\\n\";\n\n if (ta.value.length == 2) {\n newLine = \"\\r\\n\";\n } else {\n newLine = \"\\n\";\n }\n },\n defineTabSize: function defineTabSize(tabSize) {\n if (typeof defaults.textarea.style.OTabSize != \"undefined\") {\n defaults.textarea.style.OTabSize = tabSize;\n return;\n }\n\n if (typeof defaults.textarea.style.MozTabSize != \"undefined\") {\n defaults.textarea.style.MozTabSize = tabSize;\n return;\n }\n\n if (typeof defaults.textarea.style.tabSize != \"undefined\") {\n defaults.textarea.style.tabSize = tabSize;\n return;\n }\n },\n cursor: {\n getLine: function getLine(textVal, pos) {\n return textVal.substring(0, pos).split(\"\\n\").length;\n },\n get: function get() {\n if (typeof document.createElement('textarea').selectionStart === \"number\") {\n return defaults.textarea.selectionStart;\n } else if (document.selection) {\n var caretPos = 0,\n range = defaults.textarea.createTextRange(),\n rangeDupe = document.selection.createRange().duplicate(),\n rangeDupeBookmark = rangeDupe.getBookmark();\n range.moveToBookmark(rangeDupeBookmark);\n\n while (range.moveStart('character', -1) !== 0) {\n caretPos++;\n }\n\n return caretPos;\n }\n },\n set: function set(start, end) {\n if (!end) {\n end = start;\n }\n\n if (defaults.textarea.setSelectionRange) {\n defaults.textarea.focus();\n defaults.textarea.setSelectionRange(start, end);\n } else if (defaults.textarea.createTextRange) {\n var range = defaults.textarea.createTextRange();\n range.collapse(true);\n range.moveEnd('character', end);\n range.moveStart('character', start);\n range.select();\n }\n },\n selection: function selection() {\n var textAreaElement = defaults.textarea,\n start = 0,\n end = 0,\n normalizedValue,\n range,\n textInputRange,\n len,\n endRange;\n\n if (typeof textAreaElement.selectionStart == \"number\" && typeof textAreaElement.selectionEnd == \"number\") {\n start = textAreaElement.selectionStart;\n end = textAreaElement.selectionEnd;\n } else {\n range = document.selection.createRange();\n\n if (range && range.parentElement() == textAreaElement) {\n normalizedValue = utils.editor.get();\n len = normalizedValue.length;\n textInputRange = textAreaElement.createTextRange();\n textInputRange.moveToBookmark(range.getBookmark());\n endRange = textAreaElement.createTextRange();\n endRange.collapse(false);\n\n if (textInputRange.compareEndPoints(\"StartToEnd\", endRange) > -1) {\n start = end = len;\n } else {\n start = -textInputRange.moveStart(\"character\", -len);\n start += normalizedValue.slice(0, start).split(newLine).length - 1;\n\n if (textInputRange.compareEndPoints(\"EndToEnd\", endRange) > -1) {\n end = len;\n } else {\n end = -textInputRange.moveEnd(\"character\", -len);\n end += normalizedValue.slice(0, end).split(newLine).length - 1;\n }\n }\n }\n }\n\n return start == end ? false : {\n start: start,\n end: end\n };\n }\n },\n editor: {\n getLines: function getLines(textVal) {\n return textVal.split(\"\\n\").length;\n },\n get: function get() {\n return defaults.textarea.value.replace(/\\r/g, '');\n },\n set: function set(data) {\n defaults.textarea.value = data;\n }\n },\n fenceRange: function fenceRange() {\n if (typeof defaults.fence == \"string\") {\n var data = utils.editor.get(),\n pos = utils.cursor.get(),\n hacked = 0,\n matchedFence = data.indexOf(defaults.fence),\n matchCase = 0;\n\n while (matchedFence >= 0) {\n matchCase++;\n\n if (pos < matchedFence + hacked) {\n break;\n }\n\n hacked += matchedFence + defaults.fence.length;\n data = data.substring(matchedFence + defaults.fence.length);\n matchedFence = data.indexOf(defaults.fence);\n }\n\n if (hacked < pos && matchedFence + hacked > pos && matchCase % 2 === 0) {\n return true;\n }\n\n return false;\n } else {\n return true;\n }\n },\n isEven: function isEven(_this, i) {\n return i % 2;\n },\n levelsDeep: function levelsDeep() {\n var pos = utils.cursor.get(),\n val = utils.editor.get();\n var left = val.substring(0, pos),\n levels = 0,\n i,\n j;\n\n for (i = 0; i < left.length; i++) {\n for (j = 0; j < charSettings.keyMap.length; j++) {\n if (charSettings.keyMap[j].canBreak) {\n if (charSettings.keyMap[j].open == left.charAt(i)) {\n levels++;\n }\n\n if (charSettings.keyMap[j].close == left.charAt(i)) {\n levels--;\n }\n }\n }\n }\n\n var toDecrement = 0,\n quoteMap = [\"'\", \"\\\"\"];\n\n for (i = 0; i < charSettings.keyMap.length; i++) {\n if (charSettings.keyMap[i].canBreak) {\n for (j in quoteMap) {\n toDecrement += left.split(quoteMap[j]).filter(utils.isEven).join('').split(charSettings.keyMap[i].open).length - 1;\n }\n }\n }\n\n var finalLevels = levels - toDecrement;\n return finalLevels >= 0 ? finalLevels : 0;\n },\n deepExtend: function deepExtend(destination, source) {\n for (var property in source) {\n if (source[property] && source[property].constructor && source[property].constructor === Object) {\n destination[property] = destination[property] || {};\n utils.deepExtend(destination[property], source[property]);\n } else {\n destination[property] = source[property];\n }\n }\n\n return destination;\n },\n addEvent: function addEvent(element, eventName, func) {\n if (element.addEventListener) {\n element.addEventListener(eventName, func, false);\n } else if (element.attachEvent) {\n element.attachEvent(\"on\" + eventName, func);\n }\n },\n removeEvent: function addEvent(element, eventName, func) {\n if (element.addEventListener) {\n element.removeEventListener(eventName, func, false);\n } else if (element.attachEvent) {\n element.detachEvent(\"on\" + eventName, func);\n }\n },\n preventDefaultEvent: function preventDefaultEvent(e) {\n if (e.preventDefault) {\n e.preventDefault();\n } else {\n e.returnValue = false;\n }\n }\n },\n intercept = {\n tabKey: function tabKey(e) {\n if (!utils.fenceRange()) {\n return;\n }\n\n if (e.keyCode == 9) {\n utils.preventDefaultEvent(e);\n var toReturn = true;\n\n utils._callHook('tab:before');\n\n var selection = utils.cursor.selection(),\n pos = utils.cursor.get(),\n val = utils.editor.get();\n\n if (selection) {\n var tempStart = selection.start;\n\n while (tempStart--) {\n if (val.charAt(tempStart) == \"\\n\") {\n selection.start = tempStart + 1;\n break;\n }\n }\n\n var toIndent = val.substring(selection.start, selection.end),\n lines = toIndent.split(\"\\n\"),\n i;\n\n if (e.shiftKey) {\n for (i = 0; i < lines.length; i++) {\n if (lines[i].substring(0, tab.length) == tab) {\n lines[i] = lines[i].substring(tab.length);\n }\n }\n\n toIndent = lines.join(\"\\n\");\n utils.editor.set(val.substring(0, selection.start) + toIndent + val.substring(selection.end));\n utils.cursor.set(selection.start, selection.start + toIndent.length);\n } else {\n for (i in lines) {\n lines[i] = tab + lines[i];\n }\n\n toIndent = lines.join(\"\\n\");\n utils.editor.set(val.substring(0, selection.start) + toIndent + val.substring(selection.end));\n utils.cursor.set(selection.start, selection.start + toIndent.length);\n }\n } else {\n var left = val.substring(0, pos),\n right = val.substring(pos),\n edited = left + tab + right;\n\n if (e.shiftKey) {\n if (val.substring(pos - tab.length, pos) == tab) {\n edited = val.substring(0, pos - tab.length) + right;\n utils.editor.set(edited);\n utils.cursor.set(pos - tab.length);\n }\n } else {\n utils.editor.set(edited);\n utils.cursor.set(pos + tab.length);\n toReturn = false;\n }\n }\n\n utils._callHook('tab:after');\n }\n\n return toReturn;\n },\n enterKey: function enterKey(e) {\n if (!utils.fenceRange()) {\n return;\n }\n\n if (e.keyCode == 13) {\n utils.preventDefaultEvent(e);\n\n utils._callHook('enter:before');\n\n var pos = utils.cursor.get(),\n val = utils.editor.get(),\n left = val.substring(0, pos),\n right = val.substring(pos),\n leftChar = left.charAt(left.length - 1),\n rightChar = right.charAt(0),\n numTabs = utils.levelsDeep(),\n ourIndent = \"\",\n closingBreak = \"\",\n finalCursorPos,\n i;\n\n if (!numTabs) {\n finalCursorPos = 1;\n } else {\n while (numTabs--) {\n ourIndent += tab;\n }\n\n ourIndent = ourIndent;\n finalCursorPos = ourIndent.length + 1;\n\n for (i = 0; i < charSettings.keyMap.length; i++) {\n if (charSettings.keyMap[i].open == leftChar && charSettings.keyMap[i].close == rightChar) {\n closingBreak = newLine;\n }\n }\n }\n\n var edited = left + newLine + ourIndent + closingBreak + ourIndent.substring(0, ourIndent.length - tab.length) + right;\n utils.editor.set(edited);\n utils.cursor.set(pos + finalCursorPos);\n\n utils._callHook('enter:after');\n }\n },\n deleteKey: function deleteKey(e) {\n if (!utils.fenceRange()) {\n return;\n }\n\n if (e.keyCode == 8) {\n utils.preventDefaultEvent(e);\n\n utils._callHook('delete:before');\n\n var pos = utils.cursor.get(),\n val = utils.editor.get(),\n left = val.substring(0, pos),\n right = val.substring(pos),\n leftChar = left.charAt(left.length - 1),\n rightChar = right.charAt(0),\n i;\n\n if (utils.cursor.selection() === false) {\n for (i = 0; i < charSettings.keyMap.length; i++) {\n if (charSettings.keyMap[i].open == leftChar && charSettings.keyMap[i].close == rightChar) {\n var edited = val.substring(0, pos - 1) + val.substring(pos + 1);\n utils.editor.set(edited);\n utils.cursor.set(pos - 1);\n return;\n }\n }\n\n var edited = val.substring(0, pos - 1) + val.substring(pos);\n utils.editor.set(edited);\n utils.cursor.set(pos - 1);\n } else {\n var sel = utils.cursor.selection(),\n edited = val.substring(0, sel.start) + val.substring(sel.end);\n utils.editor.set(edited);\n utils.cursor.set(pos);\n }\n\n utils._callHook('delete:after');\n }\n }\n },\n charFuncs = {\n openedChar: function openedChar(_char, e) {\n utils.preventDefaultEvent(e);\n\n utils._callHook('openChar:before');\n\n var pos = utils.cursor.get(),\n val = utils.editor.get(),\n left = val.substring(0, pos),\n right = val.substring(pos),\n edited = left + _char.open + _char.close + right;\n defaults.textarea.value = edited;\n utils.cursor.set(pos + 1);\n\n utils._callHook('openChar:after');\n },\n closedChar: function closedChar(_char, e) {\n var pos = utils.cursor.get(),\n val = utils.editor.get(),\n toOverwrite = val.substring(pos, pos + 1);\n\n if (toOverwrite == _char.close) {\n utils.preventDefaultEvent(e);\n\n utils._callHook('closeChar:before');\n\n utils.cursor.set(utils.cursor.get() + 1);\n\n utils._callHook('closeChar:after');\n\n return true;\n }\n\n return false;\n }\n },\n action = {\n filter: function filter(e) {\n if (!utils.fenceRange()) {\n return;\n }\n\n var theCode = e.which || e.keyCode;\n\n if (theCode == 39 || theCode == 40 && e.which === 0) {\n return;\n }\n\n var _char = String.fromCharCode(theCode),\n i;\n\n for (i = 0; i < charSettings.keyMap.length; i++) {\n if (charSettings.keyMap[i].close == _char) {\n var didClose = defaults.overwrite && charFuncs.closedChar(charSettings.keyMap[i], e);\n\n if (!didClose && charSettings.keyMap[i].open == _char && defaults.autoOpen) {\n charFuncs.openedChar(charSettings.keyMap[i], e);\n }\n } else if (charSettings.keyMap[i].open == _char && defaults.autoOpen) {\n charFuncs.openedChar(charSettings.keyMap[i], e);\n }\n }\n },\n listen: function listen() {\n if (defaults.replaceTab) {\n utils.addEvent(defaults.textarea, 'keydown', intercept.tabKey);\n }\n\n if (defaults.autoIndent) {\n utils.addEvent(defaults.textarea, 'keydown', intercept.enterKey);\n }\n\n if (defaults.autoStrip) {\n utils.addEvent(defaults.textarea, 'keydown', intercept.deleteKey);\n }\n\n utils.addEvent(defaults.textarea, 'keypress', action.filter);\n utils.addEvent(defaults.textarea, 'keydown', function () {\n utils._callHook('keydown');\n });\n utils.addEvent(defaults.textarea, 'keyup', function () {\n utils._callHook('keyup');\n });\n }\n },\n init = function init(opts) {\n if (opts.textarea) {\n utils._callHook('init:before', false);\n\n utils.deepExtend(defaults, opts);\n utils.defineNewLine();\n\n if (defaults.softTabs) {\n tab = \" \".repeat(defaults.tabSize);\n } else {\n tab = \"\\t\";\n utils.defineTabSize(defaults.tabSize);\n }\n\n action.listen();\n\n utils._callHook('init:after', false);\n }\n };\n\n this.destroy = function () {\n utils.removeEvent(defaults.textarea, 'keydown', intercept.tabKey);\n utils.removeEvent(defaults.textarea, 'keydown', intercept.enterKey);\n utils.removeEvent(defaults.textarea, 'keydown', intercept.deleteKey);\n utils.removeEvent(defaults.textarea, 'keypress', action.filter);\n };\n\n init(userOpts);\n };\n\n if (typeof module !== 'undefined' && module.exports) {\n module.exports = Behave;\n }\n\n if (typeof ender === 'undefined') {\n this.Behave = Behave;\n this.BehaveHooks = BehaveHooks;\n }\n\n if (typeof define === \"function\" && define.amd) {\n define(\"behave\", [], function () {\n return Behave;\n });\n }\n}).call(this);","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n(function (mod) {\n if ((typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) == \"object\" && (typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) == \"object\") // CommonJS\n mod(require(\"../lib/codemirror\"));else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../lib/codemirror\"], mod);else // Plain browser env\n mod(CodeMirror);\n})(function (CodeMirror) {\n \"use strict\";\n\n CodeMirror.modeInfo = [{\n name: \"APL\",\n mime: \"text/apl\",\n mode: \"apl\",\n ext: [\"dyalog\", \"apl\"]\n }, {\n name: \"PGP\",\n mimes: [\"application/pgp\", \"application/pgp-encrypted\", \"application/pgp-keys\", \"application/pgp-signature\"],\n mode: \"asciiarmor\",\n ext: [\"asc\", \"pgp\", \"sig\"]\n }, {\n name: \"ASN.1\",\n mime: \"text/x-ttcn-asn\",\n mode: \"asn.1\",\n ext: [\"asn\", \"asn1\"]\n }, {\n name: \"Asterisk\",\n mime: \"text/x-asterisk\",\n mode: \"asterisk\",\n file: /^extensions\\.conf$/i\n }, {\n name: \"Brainfuck\",\n mime: \"text/x-brainfuck\",\n mode: \"brainfuck\",\n ext: [\"b\", \"bf\"]\n }, {\n name: \"C\",\n mime: \"text/x-csrc\",\n mode: \"clike\",\n ext: [\"c\", \"h\", \"ino\"]\n }, {\n name: \"C++\",\n mime: \"text/x-c++src\",\n mode: \"clike\",\n ext: [\"cpp\", \"c++\", \"cc\", \"cxx\", \"hpp\", \"h++\", \"hh\", \"hxx\"],\n alias: [\"cpp\"]\n }, {\n name: \"Cobol\",\n mime: \"text/x-cobol\",\n mode: \"cobol\",\n ext: [\"cob\", \"cpy\"]\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 }, {\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 }]; // Ensure all modes have a mime property for backwards compatibility\n\n for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n var info = CodeMirror.modeInfo[i];\n if (info.mimes) info.mime = info.mimes[0];\n }\n\n CodeMirror.findModeByMIME = function (mime) {\n mime = mime.toLowerCase();\n\n for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n var info = CodeMirror.modeInfo[i];\n if (info.mime == mime) return info;\n if (info.mimes) for (var j = 0; j < info.mimes.length; j++) {\n if (info.mimes[j] == mime) return info;\n }\n }\n\n if (/\\+xml$/.test(mime)) return CodeMirror.findModeByMIME(\"application/xml\");\n if (/\\+json$/.test(mime)) return CodeMirror.findModeByMIME(\"application/json\");\n };\n\n CodeMirror.findModeByExtension = function (ext) {\n ext = ext.toLowerCase();\n\n for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n var info = CodeMirror.modeInfo[i];\n if (info.ext) for (var j = 0; j < info.ext.length; j++) {\n if (info.ext[j] == ext) return info;\n }\n }\n };\n\n CodeMirror.findModeByFileName = function (filename) {\n for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n var info = CodeMirror.modeInfo[i];\n if (info.file && info.file.test(filename)) return info;\n }\n\n var dot = filename.lastIndexOf(\".\");\n var ext = dot > -1 && filename.substring(dot + 1, filename.length);\n if (ext) return CodeMirror.findModeByExtension(ext);\n };\n\n CodeMirror.findModeByName = function (name) {\n name = name.toLowerCase();\n\n for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n var info = CodeMirror.modeInfo[i];\n if (info.name.toLowerCase() == name) return info;\n if (info.alias) for (var j = 0; j < info.alias.length; j++) {\n if (info.alias[j].toLowerCase() == name) return info;\n }\n }\n };\n});","'use strict';\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar CodeMirror = require('codemirror');\n\nrequire('codemirror/addon/edit/continuelist.js');\n\nrequire('./codemirror/tablist');\n\nrequire('codemirror/addon/display/fullscreen.js');\n\nrequire('codemirror/mode/markdown/markdown.js');\n\nrequire('codemirror/addon/mode/overlay.js');\n\nrequire('codemirror/addon/display/placeholder.js');\n\nrequire('codemirror/addon/selection/mark-selection.js');\n\nrequire('codemirror/addon/search/searchcursor.js');\n\nrequire('codemirror/mode/gfm/gfm.js');\n\nrequire('codemirror/mode/xml/xml.js');\n\nvar CodeMirrorSpellChecker = require('codemirror-spell-checker');\n\nvar marked = require('marked/lib/marked'); // Some variables\n\n\nvar isMac = /Mac/.test(navigator.platform);\nvar anchorToExternalRegex = new RegExp(/()+?/g); // Mapping of actions that can be bound to keyboard shortcuts or toolbar buttons\n\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 '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 '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};\n\nvar getBindingName = function getBindingName(f) {\n for (var key in bindings) {\n if (bindings[key] === f) {\n return key;\n }\n }\n\n return null;\n};\n\nvar isMobile = function isMobile() {\n var check = false;\n\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\n return check;\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 */\n\n\nfunction addAnchorTargetBlank(htmlText) {\n var match;\n\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\n if (linkString.indexOf('target=') === -1) {\n var fixedLinkString = linkString.replace(/>$/, ' target=\"_blank\">');\n htmlText = htmlText.replace(linkString, fixedLinkString);\n }\n }\n\n return htmlText;\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 */\n\n\nfunction removeListStyleWhenCheckbox(htmlText) {\n var parser = new DOMParser();\n var htmlDoc = parser.parseFromString(htmlText, 'text/html');\n var listItems = htmlDoc.getElementsByTagName('li');\n\n for (var i = 0; i < listItems.length; i++) {\n var listItem = listItems[i];\n\n for (var j = 0; j < listItem.children.length; j++) {\n var listItemChild = listItem.children[j];\n\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\n return htmlDoc.documentElement.innerHTML;\n}\n/**\n * Fix shortcut. Mac use Command, others use Ctrl.\n */\n\n\nfunction fixShortcut(name) {\n if (isMac) {\n name = name.replace('Ctrl', 'Cmd');\n } else {\n name = name.replace('Cmd', 'Ctrl');\n }\n\n return name;\n}\n/**\n * Create dropdown block\n */\n\n\nfunction createToolbarDropdown(options, enableTooltips, shortcuts, parent) {\n var el = createToolbarButton(options, false, enableTooltips, shortcuts, 'button', parent);\n el.className += ' easymde-dropdown';\n var content = document.createElement('div');\n content.className = 'easymde-dropdown-content';\n\n for (var childrenIndex = 0; childrenIndex < options.children.length; childrenIndex++) {\n var child = options.children[childrenIndex];\n var childElement;\n\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\n content.appendChild(childElement);\n }\n\n el.appendChild(content);\n return el;\n}\n/**\n * Create button element for toolbar.\n */\n\n\nfunction createToolbarButton(options, enableActions, enableTooltips, shortcuts, markup, parent) {\n options = options || {};\n var el = document.createElement(markup);\n el.className = options.name;\n el.setAttribute('type', markup);\n enableTooltips = enableTooltips == undefined ? true : enableTooltips; // Properly hande custom shortcuts\n\n if (options.name && options.name in shortcuts) {\n bindings[options.name] = options.action;\n }\n\n if (options.title && enableTooltips) {\n el.title = createTooltip(options.title, options.action, shortcuts);\n\n if (isMac) {\n el.title = el.title.replace('Ctrl', '⌘');\n el.title = el.title.replace('Alt', '⌥');\n }\n }\n\n if (options.noDisable) {\n el.classList.add('no-disable');\n }\n\n if (options.noMobile) {\n el.classList.add('no-mobile');\n } // Prevent errors if there is no class name in custom options\n\n\n var classNameParts = [];\n\n if (typeof options.className !== 'undefined') {\n classNameParts = options.className.split(' ');\n } // Provide backwards compatibility with simple-markdown-editor by adding custom classes to the button.\n\n\n var iconClasses = [];\n\n for (var classNameIndex = 0; classNameIndex < classNameParts.length; classNameIndex++) {\n var classNamePart = classNameParts[classNameIndex]; // Split icon classes from the button.\n // Regex will detect \"fa\", \"fas\", \"fa-something\" and \"fa-some-icon-1\", but not \"fanfare\".\n\n if (classNamePart.match(/^fa([srlb]|(-[\\w-]*)|$)/)) {\n iconClasses.push(classNamePart);\n } else {\n el.classList.add(classNamePart);\n }\n }\n\n el.tabIndex = -1; // Create icon element and append as a child to the button\n\n var icon = document.createElement('i');\n\n for (var iconClassIndex = 0; iconClassIndex < iconClasses.length; iconClassIndex++) {\n var iconClass = iconClasses[iconClassIndex];\n icon.classList.add(iconClass);\n }\n\n el.appendChild(icon); // If there is a custom icon markup set, use that\n\n if (typeof options.icon !== 'undefined') {\n el.innerHTML = options.icon;\n }\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\n return el;\n}\n\nfunction createSep() {\n var el = document.createElement('i');\n el.className = 'separator';\n el.innerHTML = '|';\n return el;\n}\n\nfunction createTooltip(title, action, shortcuts) {\n var actionName;\n var tooltip = title;\n\n if (action) {\n actionName = getBindingName(action);\n\n if (shortcuts[actionName]) {\n tooltip += ' (' + fixShortcut(shortcuts[actionName]) + ')';\n }\n }\n\n return tooltip;\n}\n/**\n * The state of CodeMirror at the given position.\n */\n\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\n for (var i = 0; i < types.length; i++) {\n data = types[i];\n\n if (data === 'strong') {\n ret.bold = true;\n } else if (data === 'variable-2') {\n text = cm.getLine(pos.line);\n\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') {\n ret.link = true;\n } else if (data === 'tag') {\n ret.image = true;\n } else if (data.match(/^header(-[1-6])?$/)) {\n ret[data.replace('header', 'heading')] = true;\n }\n }\n\n return ret;\n} // Saved overflow setting\n\n\nvar saved_overflow = '';\n/**\n * Toggle full screen of the editor.\n */\n\nfunction toggleFullScreen(editor) {\n // Set fullscreen\n var cm = editor.codemirror;\n cm.setOption('fullScreen', !cm.getOption('fullScreen')); // Prevent scrolling on body during fullscreen active\n\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 } // Hide side by side if needed\n\n\n var sidebyside = cm.getWrapperElement().nextSibling;\n if (/editor-preview-active-side/.test(sidebyside.className)) toggleSideBySide(editor);\n\n if (editor.options.onToggleFullScreen) {\n editor.options.onToggleFullScreen(cm.getOption('fullScreen') || false);\n } // Remove or set maxHeight\n\n\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 } // Update toolbar class\n\n\n if (!/fullscreen/.test(editor.toolbar_div.className)) {\n editor.toolbar_div.className += ' fullscreen';\n } else {\n editor.toolbar_div.className = editor.toolbar_div.className.replace(/\\s*fullscreen\\b/, '');\n } // Update toolbar button\n\n\n if (editor.toolbarElements && editor.toolbarElements.fullscreen) {\n var toolbarButton = editor.toolbarElements.fullscreen;\n\n if (!/active/.test(toolbarButton.className)) {\n toolbarButton.className += ' active';\n } else {\n toolbarButton.className = toolbarButton.className.replace(/\\s*active\\s*/g, '');\n }\n }\n}\n/**\n * Action for toggling bold.\n */\n\n\nfunction toggleBold(editor) {\n _toggleBlock(editor, 'bold', editor.options.blockStyles.bold);\n}\n/**\n * Action for toggling italic.\n */\n\n\nfunction toggleItalic(editor) {\n _toggleBlock(editor, 'italic', editor.options.blockStyles.italic);\n}\n/**\n * Action for toggling strikethrough.\n */\n\n\nfunction toggleStrikethrough(editor) {\n _toggleBlock(editor, 'strikethrough', '~~');\n}\n/**\n * Action for toggling code block.\n */\n\n\nfunction toggleCodeBlock(editor) {\n var fenceCharsToInsert = editor.options.blockStyles.code;\n\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\n return line.styles && line.styles[2] && line.styles[2].indexOf('formatting-code-block') !== -1;\n }\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\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\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\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\n if (sel_multi) {\n end_line_sel++;\n } // handle last char including \\n or not\n\n\n if (sel_multi && cur_end.ch === 0) {\n repl_end = fenceCharsToInsert + '\\n';\n end_line_sel--;\n }\n\n _replaceSelection(cm, false, [repl_start, repl_end]);\n\n cm.setSelection({\n line: start_line_sel,\n ch: 0\n }, {\n line: end_line_sel,\n ch: 0\n });\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\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\n if (cur_start !== cur_end) {\n cur_end.ch--;\n }\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 // 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\n if (fencing_line(line)) {\n break;\n }\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; // check for selection going up against fenced lines, in which case we don't want to add more fencing\n\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\n if (fencing_line(cm.getLineHandle(cur_end.line))) {\n end_text = '';\n end_line = cur_end.line;\n\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\n if (cur_end.ch === 0) {\n // full last line selected, putting cursor at beginning of next\n end_line -= 1;\n }\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\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\n if (fencing_line(line)) {\n break;\n }\n }\n }\n\n if (block_end === undefined) {\n lineCount = cm.lineCount();\n\n for (block_end = search_from; block_end < lineCount; block_end++) {\n line = cm.getLineHandle(block_end);\n\n if (fencing_line(line)) {\n break;\n }\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\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\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\n lineCount = cm.lineCount();\n\n for (block_end = cur_start.line; block_end < lineCount; block_end++) {\n line = cm.getLineHandle(block_end);\n\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 } // 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\n\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\n if (next_line_indented) {\n cm.replaceRange('\\n', {\n line: block_end + 1,\n ch: 0\n });\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\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 * Action for toggling blockquote.\n */\n\n\nfunction toggleBlockquote(editor) {\n var cm = editor.codemirror;\n\n _toggleLine(cm, 'quote');\n}\n/**\n * Action for toggling heading size: normal -> h1 -> h2 -> h3 -> h4 -> h5 -> h6 -> normal\n */\n\n\nfunction toggleHeadingSmaller(editor) {\n var cm = editor.codemirror;\n\n _toggleHeading(cm, 'smaller');\n}\n/**\n * Action for toggling heading size: normal -> h6 -> h5 -> h4 -> h3 -> h2 -> h1 -> normal\n */\n\n\nfunction toggleHeadingBigger(editor) {\n var cm = editor.codemirror;\n\n _toggleHeading(cm, 'bigger');\n}\n/**\n * Action for toggling heading size 1\n */\n\n\nfunction toggleHeading1(editor) {\n var cm = editor.codemirror;\n\n _toggleHeading(cm, undefined, 1);\n}\n/**\n * Action for toggling heading size 2\n */\n\n\nfunction toggleHeading2(editor) {\n var cm = editor.codemirror;\n\n _toggleHeading(cm, undefined, 2);\n}\n/**\n * Action for toggling heading size 3\n */\n\n\nfunction toggleHeading3(editor) {\n var cm = editor.codemirror;\n\n _toggleHeading(cm, undefined, 3);\n}\n/**\n * Action for toggling ul.\n */\n\n\nfunction toggleUnorderedList(editor) {\n var cm = editor.codemirror;\n\n _toggleLine(cm, 'unordered-list');\n}\n/**\n * Action for toggling ol.\n */\n\n\nfunction toggleOrderedList(editor) {\n var cm = editor.codemirror;\n\n _toggleLine(cm, 'ordered-list');\n}\n/**\n * Action for clean block (remove headline, list, blockquote code, markers)\n */\n\n\nfunction cleanBlock(editor) {\n var cm = editor.codemirror;\n\n _cleanBlock(cm);\n}\n/**\n * Action for drawing a link.\n */\n\n\nfunction drawLink(editor) {\n var cm = editor.codemirror;\n var stat = getState(cm);\n var options = editor.options;\n var url = 'https://';\n\n if (options.promptURLs) {\n url = prompt(options.promptTexts.link, 'https://');\n\n if (!url) {\n return false;\n }\n }\n\n _replaceSelection(cm, stat.link, options.insertTexts.link, url);\n}\n/**\n * Action for drawing an img.\n */\n\n\nfunction drawImage(editor) {\n var cm = editor.codemirror;\n var stat = getState(cm);\n var options = editor.options;\n var url = 'https://';\n\n if (options.promptURLs) {\n url = prompt(options.promptTexts.image, 'https://');\n\n if (!url) {\n return false;\n }\n }\n\n _replaceSelection(cm, stat.image, options.insertTexts.image, url);\n}\n/**\n * Action for opening the browse-file window to upload an image to a server.\n * @param editor {EasyMDE} The EasyMDE object\n */\n\n\nfunction drawUploadedImage(editor) {\n // TODO: Draw the image template with a fake url? ie: '![](importing foo.png...)'\n editor.openBrowseFileWindow();\n}\n/**\n * Action executed after an image have been successfully imported on the server.\n * @param editor {EasyMDE} The EasyMDE object\n * @param url {string} The url of the uploaded image\n */\n\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\n _replaceSelection(cm, stat.image, options.insertTexts.uploadedImage, url); // show uploaded image filename for 1000ms\n\n\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 * Action for drawing a table.\n */\n\n\nfunction drawTable(editor) {\n var cm = editor.codemirror;\n var stat = getState(cm);\n var options = editor.options;\n\n _replaceSelection(cm, stat.table, options.insertTexts.table);\n}\n/**\n * Action for drawing a horizontal rule.\n */\n\n\nfunction drawHorizontalRule(editor) {\n var cm = editor.codemirror;\n var stat = getState(cm);\n var options = editor.options;\n\n _replaceSelection(cm, stat.image, options.insertTexts.horizontalRule);\n}\n/**\n * Undo action.\n */\n\n\nfunction undo(editor) {\n var cm = editor.codemirror;\n cm.undo();\n cm.focus();\n}\n/**\n * Redo action.\n */\n\n\nfunction redo(editor) {\n var cm = editor.codemirror;\n cm.redo();\n cm.focus();\n}\n/**\n * Toggle side by side preview\n */\n\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 noFullscreenItems = [wrapper.parentNode, // easyMDEContainer\n editor.gui.toolbar, wrapper, preview, editor.gui.statusbar];\n\n function addNoFullscreenClass(el) {\n el.className += ' sided--no-fullscreen';\n }\n\n function removeNoFullscreenClass(el) {\n el.className = el.className.replace(/\\s*sided--no-fullscreen\\s*/g, '');\n }\n\n if (/editor-preview-active-side/.test(preview.className)) {\n if (cm.getOption('sideBySideNoFullscreen')) {\n cm.setOption('sideBySideNoFullscreen', false);\n noFullscreenItems.forEach(function (el) {\n removeNoFullscreenClass(el);\n });\n }\n\n preview.className = preview.className.replace(/\\s*editor-preview-active-side\\s*/g, '');\n if (toolbarButton) toolbarButton.className = toolbarButton.className.replace(/\\s*active\\s*/g, '');\n wrapper.className = wrapper.className.replace(/\\s*CodeMirror-sided\\s*/g, ' ');\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 cm.setOption('sideBySideNoFullscreen', true);\n noFullscreenItems.forEach(function (el) {\n addNoFullscreenClass(el);\n });\n } else {\n toggleFullScreen(editor);\n }\n }\n\n preview.className += ' editor-preview-active-side';\n }, 1);\n if (toolbarButton) toolbarButton.className += ' active';\n wrapper.className += ' CodeMirror-sided';\n useSideBySideListener = true;\n } // Hide normal preview if active\n\n\n var previewNormal = wrapper.lastChild;\n\n if (/editor-preview-active/.test(previewNormal.className)) {\n previewNormal.className = previewNormal.className.replace(/\\s*editor-preview-active\\s*/g, '');\n var toolbar = editor.toolbarElements.preview;\n var toolbar_div = editor.toolbar_div;\n toolbar.className = toolbar.className.replace(/\\s*active\\s*/g, '');\n toolbar_div.className = toolbar_div.className.replace(/\\s*disabled-for-preview*/g, '');\n }\n\n var sideBySideRenderingFunction = function sideBySideRenderingFunction() {\n var newValue = editor.options.previewRender(editor.value(), preview);\n\n if (newValue != null) {\n preview.innerHTML = newValue;\n }\n };\n\n if (!cm.sideBySideRenderingFunction) {\n cm.sideBySideRenderingFunction = sideBySideRenderingFunction;\n }\n\n if (useSideBySideListener) {\n var newValue = editor.options.previewRender(editor.value(), preview);\n\n if (newValue != null) {\n preview.innerHTML = newValue;\n }\n\n cm.on('update', cm.sideBySideRenderingFunction);\n } else {\n cm.off('update', cm.sideBySideRenderingFunction);\n } // Refresh to fix selection being off (#309)\n\n\n cm.refresh();\n}\n/**\n * Preview action.\n */\n\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; // Turn off side by side if needed\n\n var sidebyside = cm.getWrapperElement().nextSibling;\n if (/editor-preview-active-side/.test(sidebyside.className)) toggleSideBySide(editor);\n\n if (!preview || !/editor-preview-full/.test(preview.className)) {\n preview = document.createElement('div');\n preview.className = 'editor-preview-full';\n\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.className += ' ' + editor.options.previewClass[i];\n }\n } else if (typeof editor.options.previewClass === 'string') {\n preview.className += ' ' + editor.options.previewClass;\n }\n }\n\n wrapper.appendChild(preview);\n }\n\n if (/editor-preview-active/.test(preview.className)) {\n preview.className = preview.className.replace(/\\s*editor-preview-active\\s*/g, '');\n\n if (toolbar) {\n toolbar.className = toolbar.className.replace(/\\s*active\\s*/g, '');\n toolbar_div.className = toolbar_div.className.replace(/\\s*disabled-for-preview*/g, '');\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.className += ' editor-preview-active';\n }, 1);\n\n if (toolbar) {\n toolbar.className += ' active';\n toolbar_div.className += ' disabled-for-preview';\n }\n }\n\n preview.innerHTML = editor.options.previewRender(editor.value(), preview);\n}\n\nfunction _replaceSelection(cm, active, startEnd, url) {\n if (/editor-preview-active/.test(cm.getWrapperElement().lastChild.className)) 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\n if (url) {\n start = start.replace('#url#', url); // url is in start for upload-image\n\n end = end.replace('#url#', url);\n }\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\n if (startPoint !== endPoint) {\n endPoint.ch += start.length;\n }\n }\n\n cm.setSelection(startPoint, endPoint);\n cm.focus();\n}\n\nfunction _toggleHeading(cm, direction, size) {\n if (/editor-preview-active/.test(cm.getWrapperElement().lastChild.className)) return;\n var startPoint = cm.getCursor('start');\n var endPoint = cm.getCursor('end');\n\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\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 (size == 1) {\n if (currHeadingLevel <= 0) {\n text = '# ' + text;\n } else if (currHeadingLevel == size) {\n text = text.substr(currHeadingLevel + 1);\n } else {\n text = '# ' + text.substr(currHeadingLevel + 1);\n }\n } else if (size == 2) {\n if (currHeadingLevel <= 0) {\n text = '## ' + text;\n } else if (currHeadingLevel == size) {\n text = text.substr(currHeadingLevel + 1);\n } else {\n text = '## ' + text.substr(currHeadingLevel + 1);\n }\n } else {\n if (currHeadingLevel <= 0) {\n text = '### ' + text;\n } else if (currHeadingLevel == size) {\n text = text.substr(currHeadingLevel + 1);\n } else {\n text = '### ' + text.substr(currHeadingLevel + 1);\n }\n }\n }\n\n cm.replaceRange(text, {\n line: i,\n ch: 0\n }, {\n line: i,\n ch: 99999999999999\n });\n })(i);\n }\n\n cm.focus();\n}\n\nfunction _toggleLine(cm, name) {\n if (/editor-preview-active/.test(cm.getWrapperElement().lastChild.className)) 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\n var _getChar = function _getChar(name, i) {\n var map = {\n 'quote': '>',\n 'unordered-list': '*',\n 'ordered-list': '%%i.'\n };\n return map[name].replace('%%i', i);\n };\n\n var _checkChar = function _checkChar(name, _char) {\n var map = {\n 'quote': '>',\n 'unordered-list': '*',\n 'ordered-list': '\\\\d+.'\n };\n var rt = new RegExp(map[name]);\n return _char && rt.test(_char);\n };\n\n var _toggle = function _toggle(name, text, untoggleOnly) {\n var arr = listRegexp.exec(text);\n\n var _char2 = _getChar(name, line);\n\n if (arr !== null) {\n if (_checkChar(name, arr[2])) {\n _char2 = '';\n }\n\n text = arr[1] + _char2 + arr[3] + text.replace(whitespacesRegexp, '').replace(repl[name], '$1');\n } else if (untoggleOnly == false) {\n text = _char2 + ' ' + text;\n }\n\n return text;\n };\n\n var line = 1;\n\n for (var i = startPoint.line; i <= endPoint.line; i++) {\n (function (i) {\n var text = cm.getLine(i);\n\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\n text = _toggle(name, text, false);\n line += 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\n cm.focus();\n}\n\nfunction _toggleBlock(editor, type, start_chars, end_chars) {\n if (/editor-preview-active/.test(editor.codemirror.getWrapperElement().lastChild.className)) return;\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\n if (stat[type]) {\n text = cm.getLine(startPoint.line);\n start = text.slice(0, startPoint.ch);\n end = text.slice(startPoint.ch);\n\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\n cm.replaceRange(start + end, {\n line: startPoint.line,\n ch: 0\n }, {\n line: startPoint.line,\n ch: 99999999999999\n });\n\n if (type == 'bold' || type == 'strikethrough') {\n startPoint.ch -= 2;\n\n if (startPoint !== endPoint) {\n endPoint.ch -= 2;\n }\n } else if (type == 'italic') {\n startPoint.ch -= 1;\n\n if (startPoint !== endPoint) {\n endPoint.ch -= 1;\n }\n }\n } else {\n text = cm.getSelection();\n\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\n cm.replaceSelection(start + text + end);\n startPoint.ch += start_chars.length;\n endPoint.ch = startPoint.ch + text.length;\n }\n\n cm.setSelection(startPoint, endPoint);\n cm.focus();\n}\n\nfunction _cleanBlock(cm) {\n if (/editor-preview-active/.test(cm.getWrapperElement().lastChild.className)) return;\n var startPoint = cm.getCursor('start');\n var endPoint = cm.getCursor('end');\n var text;\n\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 * Convert a number of bytes to a human-readable file size.\n * @param bytes {integer} A number of bytes, as integer. Ex: 421137\n * @param units {number[]} An array of human-readable units, ie. ['b', 'Kb', 'Mb']\n * @returns string A human-readable file size. Ex: '412Kb'\n */\n\n\nfunction humanFileSize(bytes, units) {\n if (Math.abs(bytes) < 1024) {\n return '' + bytes + units[0];\n }\n\n var u = 0;\n\n do {\n bytes /= 1024;\n ++u;\n } while (Math.abs(bytes) >= 1024 && u < units.length);\n\n return '' + bytes.toFixed(1) + units[u];\n} // Merge the properties of one object into another.\n\n\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\n return target;\n} // Merge an arbitrary number of objects into one.\n\n\nfunction extend(target) {\n for (var i = 1; i < arguments.length; i++) {\n target = _mergeProperties(target, arguments[i]);\n }\n\n return target;\n}\n/* The right word count in respect for CJK. */\n\n\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\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\n return count;\n}\n\nvar toolbarBuiltInButtons = {\n 'bold': {\n name: 'bold',\n action: toggleBold,\n className: 'fa fa-bold',\n title: 'Bold',\n \"default\": true\n },\n 'italic': {\n name: 'italic',\n action: toggleItalic,\n className: 'fa fa-italic',\n title: 'Italic',\n \"default\": true\n },\n 'strikethrough': {\n name: 'strikethrough',\n action: toggleStrikethrough,\n className: 'fa fa-strikethrough',\n title: 'Strikethrough'\n },\n 'heading': {\n name: 'heading',\n action: toggleHeadingSmaller,\n className: 'fa fa-header fa-heading',\n title: 'Heading',\n \"default\": true\n },\n 'heading-smaller': {\n name: 'heading-smaller',\n action: toggleHeadingSmaller,\n className: 'fa fa-header fa-heading header-smaller',\n title: 'Smaller Heading'\n },\n 'heading-bigger': {\n name: 'heading-bigger',\n action: toggleHeadingBigger,\n className: 'fa fa-header fa-heading header-bigger',\n title: 'Bigger Heading'\n },\n 'heading-1': {\n name: 'heading-1',\n action: toggleHeading1,\n className: 'fa fa-header fa-heading header-1',\n title: 'Big Heading'\n },\n 'heading-2': {\n name: 'heading-2',\n action: toggleHeading2,\n className: 'fa fa-header fa-heading header-2',\n title: 'Medium Heading'\n },\n 'heading-3': {\n name: 'heading-3',\n action: toggleHeading3,\n className: 'fa fa-header fa-heading header-3',\n title: 'Small Heading'\n },\n 'separator-1': {\n name: 'separator-1'\n },\n 'code': {\n name: 'code',\n action: toggleCodeBlock,\n className: 'fa fa-code',\n title: 'Code'\n },\n 'quote': {\n name: 'quote',\n action: toggleBlockquote,\n className: 'fa fa-quote-left',\n title: 'Quote',\n \"default\": true\n },\n 'unordered-list': {\n name: 'unordered-list',\n action: toggleUnorderedList,\n className: 'fa fa-list-ul',\n title: 'Generic List',\n \"default\": true\n },\n 'ordered-list': {\n name: 'ordered-list',\n action: toggleOrderedList,\n className: 'fa fa-list-ol',\n title: 'Numbered List',\n \"default\": true\n },\n 'clean-block': {\n name: 'clean-block',\n action: cleanBlock,\n className: 'fa fa-eraser',\n title: 'Clean block'\n },\n 'separator-2': {\n name: 'separator-2'\n },\n 'link': {\n name: 'link',\n action: drawLink,\n className: 'fa fa-link',\n title: 'Create Link',\n \"default\": true\n },\n 'image': {\n name: 'image',\n action: drawImage,\n className: 'fa fa-image',\n title: 'Insert Image',\n \"default\": true\n },\n 'upload-image': {\n name: 'upload-image',\n action: drawUploadedImage,\n className: 'fa fa-image',\n title: 'Import an image'\n },\n 'table': {\n name: 'table',\n action: drawTable,\n className: 'fa fa-table',\n title: 'Insert Table'\n },\n 'horizontal-rule': {\n name: 'horizontal-rule',\n action: drawHorizontalRule,\n className: 'fa fa-minus',\n title: 'Insert Horizontal Line'\n },\n 'separator-3': {\n name: 'separator-3'\n },\n 'preview': {\n name: 'preview',\n action: togglePreview,\n className: 'fa fa-eye',\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: 'fa fa-columns',\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: 'fa fa-arrows-alt',\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: 'fa fa-question-circle',\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: 'fa fa-undo',\n noDisable: true,\n title: 'Undo'\n },\n 'redo': {\n name: 'redo',\n action: redo,\n className: 'fa fa-repeat fa-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 * Texts displayed to the user (mainly on the status bar) for the import image\n * feature. Can be used for customization or internationalization.\n */\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 * Errors displayed to the user, using the `errorCallback` option. Can be used for\n * customization or internationalization.\n */\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 * Interface of EasyMDE.\n */\n\nfunction EasyMDE(options) {\n // Handle options parameter\n options = options || {}; // Used later to refer to it\"s parent\n\n options.parent = this; // Check if Font Awesome needs to be auto downloaded\n\n var autoDownloadFA = true;\n\n if (options.autoDownloadFontAwesome === false) {\n autoDownloadFA = false;\n }\n\n if (options.autoDownloadFontAwesome !== true) {\n var styleSheets = document.styleSheets;\n\n for (var i = 0; i < styleSheets.length; i++) {\n if (!styleSheets[i].href) continue;\n\n if (styleSheets[i].href.indexOf('//maxcdn.bootstrapcdn.com/font-awesome/') > -1) {\n autoDownloadFA = false;\n }\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 } // Find the textarea to use\n\n\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 } // Handle toolbar\n\n\n if (options.toolbar === undefined) {\n // Initialize\n options.toolbar = []; // Loop over the built in buttons, to get the preferred order\n\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\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 } // Editor preview styling class.\n\n\n if (!Object.prototype.hasOwnProperty.call(options, 'previewClass')) {\n options.previewClass = 'editor-preview';\n } // Handle status bar\n\n\n if (!Object.prototype.hasOwnProperty.call(options, 'status')) {\n options.status = ['autosave', 'lines', 'words', 'cursor'];\n\n if (options.uploadImage) {\n options.status.unshift('upload-image');\n }\n } // Add default preview rendering function\n\n\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 } // Set default options for parsing config\n\n\n options.parsingConfig = extend({\n highlightFormatting: true // needed for toggleCodeBlock to detect types of code\n\n }, options.parsingConfig || {}); // Merging the insertTexts, with the given options\n\n options.insertTexts = extend({}, insertTexts, options.insertTexts || {}); // Merging the promptTexts, with the given options\n\n options.promptTexts = extend({}, promptTexts, options.promptTexts || {}); // Merging the blockStyles, with the given options\n\n options.blockStyles = extend({}, blockStyles, options.blockStyles || {});\n\n if (options.autosave != undefined) {\n // Merging the Autosave timeFormat, with the given options\n options.autosave.timeFormat = extend({}, timeFormat, options.autosave.timeFormat || {});\n } // Merging the shortcuts, with the given options\n\n\n options.shortcuts = extend({}, shortcuts, options.shortcuts || {});\n options.minHeight = options.minHeight || '300px';\n options.maxHeight = options.maxHeight || undefined;\n\n options.errorCallback = options.errorCallback || function (errorMessage) {\n alert(errorMessage);\n }; // Import-image default configuration\n\n\n options.uploadImage = options.uploadImage || false;\n options.imageMaxSize = options.imageMaxSize || 2097152; // 1024 * 1024 * 2\n\n options.imageAccept = options.imageAccept || 'image/png, image/jpeg';\n options.imageTexts = extend({}, imageTexts, options.imageTexts || {});\n options.errorMessages = extend({}, errorMessages, options.errorMessages || {}); // Change unique_id to uniqueId for backwards compatibility\n\n if (options.autosave != undefined && options.autosave.unique_id != undefined && options.autosave.unique_id != '') options.autosave.uniqueId = options.autosave.unique_id; // Update this options\n\n this.options = options; // Auto render\n\n this.render(); // 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\n if (options.initialValue && (!this.options.autosave || this.options.autosave.foundSavedValue !== true)) {\n this.value(options.initialValue);\n }\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\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 * 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 */\n\n\nEasyMDE.prototype.uploadImages = function (files, onSuccess, onError) {\n if (files.length === 0) {\n return;\n }\n\n var names = [];\n\n for (var i = 0; i < files.length; i++) {\n names.push(files[i].name);\n this.uploadImage(files[i], onSuccess, onError);\n }\n\n this.updateStatusBar('upload-image', this.options.imageTexts.sbOnDrop.replace('#images_names#', names.join(', ')));\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 */\n\n\nEasyMDE.prototype.uploadImagesUsingCustomFunction = function (imageUploadFunction, files) {\n if (files.length === 0) {\n return;\n }\n\n var names = [];\n\n for (var i = 0; i < files.length; i++) {\n names.push(files[i].name);\n this.uploadImageUsingCustomFunction(imageUploadFunction, files[i]);\n }\n\n this.updateStatusBar('upload-image', this.options.imageTexts.sbOnDrop.replace('#images_names#', names.join(', ')));\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 */\n\n\nEasyMDE.prototype.updateStatusBar = function (itemName, content) {\n var matchingClasses = this.gui.statusbar.getElementsByClassName(itemName);\n\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 * Default markdown render.\n */\n\n\nEasyMDE.prototype.markdown = function (text) {\n if (marked) {\n // Initialize\n var markedOptions;\n\n if (this.options && this.options.renderingConfig && this.options.renderingConfig.markedOptions) {\n markedOptions = this.options.renderingConfig.markedOptions;\n } else {\n markedOptions = {};\n } // Update options\n\n\n if (this.options && this.options.renderingConfig && this.options.renderingConfig.singleLineBreaks === false) {\n markedOptions.breaks = false;\n } else {\n markedOptions.breaks = true;\n }\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 /* Check if HLJS loaded */\n\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 } // Set options\n\n\n marked.setOptions(markedOptions); // Convert the markdown to HTML\n\n var htmlText = marked(text); // Sanitize HTML\n\n if (this.options.renderingConfig && typeof this.options.renderingConfig.sanitizerFunction === 'function') {\n htmlText = this.options.renderingConfig.sanitizerFunction.call(this, htmlText);\n } // Edit the HTML anchors to add 'target=\"_blank\"' by default.\n\n\n htmlText = addAnchorTargetBlank(htmlText); // Remove list-style when rendering checkboxes\n\n htmlText = removeListStyleWhenCheckbox(htmlText);\n return htmlText;\n }\n};\n/**\n * Render editor to the given element.\n */\n\n\nEasyMDE.prototype.render = function (el) {\n if (!el) {\n el = this.element || document.getElementsByTagName('textarea')[0];\n }\n\n if (this._rendered && this._rendered === el) {\n // Already rendered.\n return;\n }\n\n this.element = el;\n var options = this.options;\n var self = this;\n var keyMaps = {};\n\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\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\n keyMaps['Enter'] = 'newlineAndIndentContinueMarkdownList';\n keyMaps['Tab'] = 'tabAndIndentMarkdownList';\n keyMaps['Shift-Tab'] = 'shiftTabAndUnindentMarkdownList';\n\n keyMaps['Esc'] = function (cm) {\n if (cm.getOption('fullScreen')) toggleFullScreen(self);\n };\n\n document.addEventListener('keydown', function (e) {\n e = e || window.event;\n\n if (e.keyCode == 27) {\n if (self.codemirror.getOption('fullScreen')) toggleFullScreen(self);\n }\n }, false);\n var mode, backdrop;\n\n if (options.spellChecker !== false) {\n mode = 'spell-checker';\n backdrop = options.parsingConfig;\n backdrop.name = 'gfm';\n backdrop.gitHubSpice = false;\n CodeMirrorSpellChecker({\n codeMirrorInstance: CodeMirror\n });\n } else {\n mode = options.parsingConfig;\n mode.name = 'gfm';\n mode.gitHubSpice = false;\n } // eslint-disable-next-line no-unused-vars\n\n\n function configureMouse(cm, repeat, event) {\n return {\n addNew: false\n };\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: false,\n autofocus: options.autofocus === true ? true : false,\n extraKeys: keyMaps,\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 configureMouse: configureMouse,\n inputStyle: options.inputStyle != undefined ? options.inputStyle : isMobile() ? 'contenteditable' : 'textarea',\n spellcheck: options.nativeSpellcheck != undefined ? options.nativeSpellcheck : true\n });\n this.codemirror.getScrollerElement().style.minHeight = options.minHeight;\n\n if (typeof options.maxHeight !== 'undefined') {\n this.codemirror.getScrollerElement().style.height = options.maxHeight;\n }\n\n if (options.forceSync === true) {\n var cm = this.codemirror;\n cm.on('change', function () {\n cm.save();\n });\n }\n\n this.gui = {}; // Wrap Codemirror with container before create toolbar, etc,\n // to use with sideBySideFullscreen option.\n\n var easyMDEContainer = document.createElement('div');\n easyMDEContainer.classList.add('EasyMDEContainer');\n var cmWrapper = this.codemirror.getWrapperElement();\n cmWrapper.parentNode.insertBefore(easyMDEContainer, cmWrapper);\n easyMDEContainer.appendChild(cmWrapper);\n\n if (options.toolbar !== false) {\n this.gui.toolbar = this.createToolbar();\n }\n\n if (options.status !== false) {\n this.gui.statusbar = this.createStatusbar();\n }\n\n if (options.autosave != undefined && options.autosave.enabled === true) {\n this.autosave(); // use to load localstorage content\n\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\n this.gui.sideBySide = this.createSideBySide();\n this._rendered = this.element; // Fixes CodeMirror bug (#344)\n\n var temp_cm = this.codemirror;\n setTimeout(function () {\n temp_cm.refresh();\n }.bind(temp_cm), 0);\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.\n\n\nfunction isLocalStorageAvailable() {\n if ((typeof localStorage === \"undefined\" ? \"undefined\" : _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\n return true;\n}\n\nEasyMDE.prototype.autosave = function () {\n if (isLocalStorageAvailable()) {\n var easyMDE = this;\n\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\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\n this.options.autosave.binded = true;\n }\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\n this.options.autosave.loaded = true;\n }\n\n var value = easyMDE.value();\n\n if (value !== '') {\n localStorage.setItem('smde_' + this.options.autosave.uniqueId, value);\n } else {\n localStorage.removeItem('smde_' + this.options.autosave.uniqueId);\n }\n\n var el = document.getElementById('autosaved');\n\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};\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\n localStorage.removeItem('smde_' + this.options.autosave.uniqueId);\n } else {\n console.log('EasyMDE: localStorage not available, cannot autosave');\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 */\n\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\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\n imageInput.removeEventListener('change', onChange);\n }\n\n imageInput.addEventListener('change', onChange);\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 */\n\n\nEasyMDE.prototype.uploadImage = function (file, onSuccess, onError) {\n var self = this;\n\n onSuccess = onSuccess || function onSuccess(imageUrl) {\n afterImageUploaded(self, imageUrl);\n };\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); // run custom error handler\n\n if (onError && typeof onError === 'function') {\n onError(errorMessage);\n } // run error handler from options, this alerts the message.\n\n\n self.options.errorCallback(errorMessage);\n }\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\n if (file.size > this.options.imageMaxSize) {\n onErrorSup(fillErrorMessage(this.options.errorMessages.fileTooLarge));\n return;\n }\n\n var formData = new FormData();\n formData.append('image', file); // insert CSRF token if provided in config.\n\n if (self.options.imageCSRFToken) {\n formData.append('csrfmiddlewaretoken', self.options.imageCSRFToken);\n }\n\n var request = new XMLHttpRequest();\n\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\n request.open('POST', this.options.imageUploadEndpoint);\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\n if (this.status === 200 && response && !response.error && response.data && response.data.filePath) {\n onSuccess(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\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\n request.send(formData);\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 */\n\n\nEasyMDE.prototype.uploadImageUsingCustomFunction = function (imageUploadFunction, file) {\n var self = this;\n\n function onSuccess(imageUrl) {\n afterImageUploaded(self, imageUrl);\n }\n\n function onError(errorMessage) {\n var filledErrorMessage = fillErrorMessage(errorMessage); // show error on status bar and reset after 10000ms\n\n self.updateStatusBar('upload-image', filledErrorMessage);\n setTimeout(function () {\n self.updateStatusBar('upload-image', self.options.imageTexts.sbInit);\n }, 10000); // run error handler from options, this alerts the message.\n\n self.options.errorCallback(filledErrorMessage);\n }\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\n imageUploadFunction(file, onSuccess, onError);\n};\n\nEasyMDE.prototype.setPreviewMaxHeight = function () {\n var cm = this.codemirror;\n var wrapper = cm.getWrapperElement();\n var preview = wrapper.nextSibling; // Calc preview max height\n\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};\n\nEasyMDE.prototype.createSideBySide = function () {\n var cm = this.codemirror;\n var wrapper = cm.getWrapperElement();\n var preview = wrapper.nextSibling;\n\n if (!preview || !/editor-preview-side/.test(preview.className)) {\n preview = document.createElement('div');\n preview.className = 'editor-preview-side';\n\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.className += ' ' + this.options.previewClass[i];\n }\n } else if (typeof this.options.previewClass === 'string') {\n preview.className += ' ' + this.options.previewClass;\n }\n }\n\n wrapper.parentNode.insertBefore(preview, wrapper.nextSibling);\n }\n\n if (typeof this.options.maxHeight !== 'undefined') {\n this.setPreviewMaxHeight();\n }\n\n if (this.options.syncSideBySidePreviewScroll === false) return preview; // Syncs scroll editor -> preview\n\n var cScroll = false;\n var pScroll = false;\n cm.on('scroll', function (v) {\n if (cScroll) {\n cScroll = false;\n return;\n }\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 }); // Syncs scroll preview -> editor\n\n preview.onscroll = function () {\n if (pScroll) {\n pScroll = false;\n return;\n }\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\n return preview;\n};\n\nEasyMDE.prototype.createToolbar = function (items) {\n items = items || this.options.toolbar;\n\n if (!items || items.length === 0) {\n return;\n }\n\n var i;\n\n for (i = 0; i < items.length; i++) {\n if (toolbarBuiltInButtons[items[i]] != undefined) {\n items[i] = toolbarBuiltInButtons[items[i]];\n }\n }\n\n var bar = document.createElement('div');\n bar.className = 'editor-toolbar';\n var self = this;\n var toolbarData = {};\n self.toolbar = items;\n\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; // Fullscreen does not work well on mobile devices (even tablets)\n // In the future, hopefully this can be resolved\n\n if ((items[i].name == 'fullscreen' || items[i].name == 'side-by-side') && isMobile()) continue; // Don't include trailing separators\n\n if (items[i] === '|') {\n var nonSeparatorIconsFollow = false;\n\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\n if (!nonSeparatorIconsFollow) continue;\n } // Create the icon and append to the toolbar\n\n\n (function (item) {\n var el;\n\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\n toolbarData[item.name || item] = el;\n bar.appendChild(el); // Create the input element (ie. ), used among\n // with the 'import-image' icon to open the browse-file window.\n\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\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\n for (var key in toolbarData) {\n (function (key) {\n var el = toolbarData[key];\n\n if (stat[key]) {\n el.className += ' active';\n } else if (key != 'fullscreen' && key != 'side-by-side') {\n el.className = el.className.replace(/\\s*active\\s*/g, '');\n }\n })(key);\n }\n });\n var cmWrapper = cm.getWrapperElement();\n cmWrapper.parentNode.insertBefore(bar, cmWrapper);\n return bar;\n};\n\nEasyMDE.prototype.createStatusbar = function (status) {\n // Initialize\n status = status || this.options.status;\n var options = this.options;\n var cm = this.codemirror; // Make sure the status variable is valid\n\n if (!status || status.length === 0) {\n return;\n } // Set up the built-in items\n\n\n var items = [];\n var i, onUpdate, onActivity, defaultValue;\n\n for (i = 0; i < status.length; i++) {\n // Reset some values\n onUpdate = undefined;\n onActivity = undefined;\n defaultValue = undefined; // Handle if custom or not\n\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\n if (name === 'words') {\n defaultValue = function defaultValue(el) {\n el.innerHTML = wordCount(cm.getValue());\n };\n\n onUpdate = function onUpdate(el) {\n el.innerHTML = wordCount(cm.getValue());\n };\n } else if (name === 'lines') {\n defaultValue = function defaultValue(el) {\n el.innerHTML = cm.lineCount();\n };\n\n onUpdate = function onUpdate(el) {\n el.innerHTML = cm.lineCount();\n };\n } else if (name === 'cursor') {\n defaultValue = function defaultValue(el) {\n el.innerHTML = '0:0';\n };\n\n onActivity = function onActivity(el) {\n var pos = cm.getCursor();\n el.innerHTML = pos.line + ':' + pos.ch;\n };\n } else if (name === 'autosave') {\n defaultValue = function defaultValue(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 defaultValue(el) {\n el.innerHTML = options.imageTexts.sbInit;\n };\n }\n\n items.push({\n className: name,\n defaultValue: defaultValue,\n onUpdate: onUpdate,\n onActivity: onActivity\n });\n }\n } // Create element for the status bar\n\n\n var bar = document.createElement('div');\n bar.className = 'editor-statusbar'; // Create a new span for each item\n\n for (i = 0; i < items.length; i++) {\n // Store in temporary variable\n var item = items[i]; // Create span element\n\n var el = document.createElement('span');\n el.className = item.className; // Ensure the defaultValue is a function\n\n if (typeof item.defaultValue === 'function') {\n item.defaultValue(el);\n } // Ensure the onUpdate is a function\n\n\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\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 } // Append the item to the status bar\n\n\n bar.appendChild(el);\n } // Insert the status bar into the DOM\n\n\n var cmWrapper = this.codemirror.getWrapperElement();\n cmWrapper.parentNode.insertBefore(bar, cmWrapper.nextSibling);\n return bar;\n};\n/**\n * Get or set the text content.\n */\n\n\nEasyMDE.prototype.value = function (val) {\n var cm = this.codemirror;\n\n if (val === undefined) {\n return cm.getValue();\n } else {\n cm.getDoc().setValue(val);\n\n if (this.isPreviewActive()) {\n var wrapper = cm.getWrapperElement();\n var preview = wrapper.lastChild;\n preview.innerHTML = this.options.previewRender(val, preview);\n }\n\n return this;\n }\n};\n/**\n * Bind static methods for exports.\n */\n\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.toggleCodeBlock = toggleCodeBlock;\nEasyMDE.toggleUnorderedList = toggleUnorderedList;\nEasyMDE.toggleOrderedList = toggleOrderedList;\nEasyMDE.cleanBlock = cleanBlock;\nEasyMDE.drawLink = drawLink;\nEasyMDE.drawImage = drawImage;\nEasyMDE.drawTable = drawTable;\nEasyMDE.drawHorizontalRule = drawHorizontalRule;\nEasyMDE.undo = undo;\nEasyMDE.redo = redo;\nEasyMDE.togglePreview = togglePreview;\nEasyMDE.toggleSideBySide = toggleSideBySide;\nEasyMDE.toggleFullScreen = toggleFullScreen;\n/**\n * Bind instance methods for exports.\n */\n\nEasyMDE.prototype.toggleBold = function () {\n toggleBold(this);\n};\n\nEasyMDE.prototype.toggleItalic = function () {\n toggleItalic(this);\n};\n\nEasyMDE.prototype.toggleStrikethrough = function () {\n toggleStrikethrough(this);\n};\n\nEasyMDE.prototype.toggleBlockquote = function () {\n toggleBlockquote(this);\n};\n\nEasyMDE.prototype.toggleHeadingSmaller = function () {\n toggleHeadingSmaller(this);\n};\n\nEasyMDE.prototype.toggleHeadingBigger = function () {\n toggleHeadingBigger(this);\n};\n\nEasyMDE.prototype.toggleHeading1 = function () {\n toggleHeading1(this);\n};\n\nEasyMDE.prototype.toggleHeading2 = function () {\n toggleHeading2(this);\n};\n\nEasyMDE.prototype.toggleHeading3 = function () {\n toggleHeading3(this);\n};\n\nEasyMDE.prototype.toggleCodeBlock = function () {\n toggleCodeBlock(this);\n};\n\nEasyMDE.prototype.toggleUnorderedList = function () {\n toggleUnorderedList(this);\n};\n\nEasyMDE.prototype.toggleOrderedList = function () {\n toggleOrderedList(this);\n};\n\nEasyMDE.prototype.cleanBlock = function () {\n cleanBlock(this);\n};\n\nEasyMDE.prototype.drawLink = function () {\n drawLink(this);\n};\n\nEasyMDE.prototype.drawImage = function () {\n drawImage(this);\n};\n\nEasyMDE.prototype.drawTable = function () {\n drawTable(this);\n};\n\nEasyMDE.prototype.drawHorizontalRule = function () {\n drawHorizontalRule(this);\n};\n\nEasyMDE.prototype.undo = function () {\n undo(this);\n};\n\nEasyMDE.prototype.redo = function () {\n redo(this);\n};\n\nEasyMDE.prototype.togglePreview = function () {\n togglePreview(this);\n};\n\nEasyMDE.prototype.toggleSideBySide = function () {\n toggleSideBySide(this);\n};\n\nEasyMDE.prototype.toggleFullScreen = function () {\n toggleFullScreen(this);\n};\n\nEasyMDE.prototype.isPreviewActive = function () {\n var cm = this.codemirror;\n var wrapper = cm.getWrapperElement();\n var preview = wrapper.lastChild;\n return /editor-preview-active/.test(preview.className);\n};\n\nEasyMDE.prototype.isSideBySideActive = function () {\n var cm = this.codemirror;\n var wrapper = cm.getWrapperElement();\n var preview = wrapper.nextSibling;\n return /editor-preview-active-side/.test(preview.className);\n};\n\nEasyMDE.prototype.isFullscreenActive = function () {\n var cm = this.codemirror;\n return cm.getOption('fullScreen');\n};\n\nEasyMDE.prototype.getState = function () {\n var cm = this.codemirror;\n return getState(cm);\n};\n\nEasyMDE.prototype.toTextArea = function () {\n var cm = this.codemirror;\n var wrapper = cm.getWrapperElement();\n\n if (wrapper.parentNode) {\n if (this.gui.toolbar) {\n wrapper.parentNode.removeChild(this.gui.toolbar);\n }\n\n if (this.gui.statusbar) {\n wrapper.parentNode.removeChild(this.gui.statusbar);\n }\n\n if (this.gui.sideBySide) {\n wrapper.parentNode.removeChild(this.gui.sideBySide);\n }\n }\n\n cm.toTextArea();\n\n if (this.autosaveTimeoutId) {\n clearTimeout(this.autosaveTimeoutId);\n this.autosaveTimeoutId = undefined;\n this.clearAutosavedValue();\n }\n};\n\nmodule.exports = EasyMDE;","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*\nUnobtrusive JavaScript\nhttps://github.com/rails/rails/blob/master/actionview/app/assets/javascripts\nReleased under the MIT license\n */\n(function () {\n var context = this;\n (function () {\n (function () {\n this.Rails = {\n linkClickSelector: 'a[data-confirm], a[data-method], a[data-remote]:not([disabled]), a[data-disable-with], a[data-disable]',\n buttonClickSelector: {\n selector: 'button[data-remote]:not([form]), button[data-confirm]:not([form])',\n exclude: 'form button'\n },\n inputChangeSelector: 'select[data-remote], input[data-remote], textarea[data-remote]',\n formSubmitSelector: 'form',\n formInputClickSelector: 'form input[type=submit], form input[type=image], form button[type=submit], form button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])',\n formDisableSelector: 'input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled',\n formEnableSelector: 'input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled',\n fileInputSelector: 'input[name][type=file]:not([disabled])',\n linkDisableSelector: 'a[data-disable-with], a[data-disable]',\n buttonDisableSelector: 'button[data-remote][data-disable-with], button[data-remote][data-disable]'\n };\n }).call(this);\n }).call(context);\n var Rails = context.Rails;\n (function () {\n (function () {\n var cspNonce;\n\n cspNonce = Rails.cspNonce = function () {\n var meta;\n meta = document.querySelector('meta[name=csp-nonce]');\n return meta && meta.content;\n };\n }).call(this);\n (function () {\n var expando, m;\n m = Element.prototype.matches || Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector;\n\n Rails.matches = function (element, selector) {\n if (selector.exclude != null) {\n return m.call(element, selector.selector) && !m.call(element, selector.exclude);\n } else {\n return m.call(element, selector);\n }\n };\n\n expando = '_ujsData';\n\n Rails.getData = function (element, key) {\n var ref;\n return (ref = element[expando]) != null ? ref[key] : void 0;\n };\n\n Rails.setData = function (element, key, value) {\n if (element[expando] == null) {\n element[expando] = {};\n }\n\n return element[expando][key] = value;\n };\n\n Rails.$ = function (selector) {\n return Array.prototype.slice.call(document.querySelectorAll(selector));\n };\n }).call(this);\n (function () {\n var $, csrfParam, csrfToken;\n $ = Rails.$;\n\n csrfToken = Rails.csrfToken = function () {\n var meta;\n meta = document.querySelector('meta[name=csrf-token]');\n return meta && meta.content;\n };\n\n csrfParam = Rails.csrfParam = function () {\n var meta;\n meta = document.querySelector('meta[name=csrf-param]');\n return meta && meta.content;\n };\n\n Rails.CSRFProtection = function (xhr) {\n var token;\n token = csrfToken();\n\n if (token != null) {\n return xhr.setRequestHeader('X-CSRF-Token', token);\n }\n };\n\n Rails.refreshCSRFTokens = function () {\n var param, token;\n token = csrfToken();\n param = csrfParam();\n\n if (token != null && param != null) {\n return $('form input[name=\"' + param + '\"]').forEach(function (input) {\n return input.value = token;\n });\n }\n };\n }).call(this);\n (function () {\n var CustomEvent, fire, matches, preventDefault;\n matches = Rails.matches;\n CustomEvent = window.CustomEvent;\n\n if (typeof CustomEvent !== 'function') {\n CustomEvent = function CustomEvent(event, params) {\n var evt;\n evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n preventDefault = CustomEvent.prototype.preventDefault;\n\n CustomEvent.prototype.preventDefault = function () {\n var result;\n result = preventDefault.call(this);\n\n if (this.cancelable && !this.defaultPrevented) {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function get() {\n return true;\n }\n });\n }\n\n return result;\n };\n }\n\n fire = Rails.fire = function (obj, name, data) {\n var event;\n event = new CustomEvent(name, {\n bubbles: true,\n cancelable: true,\n detail: data\n });\n obj.dispatchEvent(event);\n return !event.defaultPrevented;\n };\n\n Rails.stopEverything = function (e) {\n fire(e.target, 'ujs:everythingStopped');\n e.preventDefault();\n e.stopPropagation();\n return e.stopImmediatePropagation();\n };\n\n Rails.delegate = function (element, selector, eventType, handler) {\n return element.addEventListener(eventType, function (e) {\n var target;\n target = e.target;\n\n while (!(!(target instanceof Element) || matches(target, selector))) {\n target = target.parentNode;\n }\n\n if (target instanceof Element && handler.call(target, e) === false) {\n e.preventDefault();\n return e.stopPropagation();\n }\n });\n };\n }).call(this);\n (function () {\n var AcceptHeaders, CSRFProtection, createXHR, cspNonce, fire, prepareOptions, processResponse;\n cspNonce = Rails.cspNonce, CSRFProtection = Rails.CSRFProtection, fire = Rails.fire;\n AcceptHeaders = {\n '*': '*/*',\n text: 'text/plain',\n html: 'text/html',\n xml: 'application/xml, text/xml',\n json: 'application/json, text/javascript',\n script: 'text/javascript, application/javascript, application/ecmascript, application/x-ecmascript'\n };\n\n Rails.ajax = function (options) {\n var xhr;\n options = prepareOptions(options);\n xhr = createXHR(options, function () {\n var ref, response;\n response = processResponse((ref = xhr.response) != null ? ref : xhr.responseText, xhr.getResponseHeader('Content-Type'));\n\n if (Math.floor(xhr.status / 100) === 2) {\n if (typeof options.success === \"function\") {\n options.success(response, xhr.statusText, xhr);\n }\n } else {\n if (typeof options.error === \"function\") {\n options.error(response, xhr.statusText, xhr);\n }\n }\n\n return typeof options.complete === \"function\" ? options.complete(xhr, xhr.statusText) : void 0;\n });\n\n if (options.beforeSend != null && !options.beforeSend(xhr, options)) {\n return false;\n }\n\n if (xhr.readyState === XMLHttpRequest.OPENED) {\n return xhr.send(options.data);\n }\n };\n\n prepareOptions = function prepareOptions(options) {\n options.url = options.url || location.href;\n options.type = options.type.toUpperCase();\n\n if (options.type === 'GET' && options.data) {\n if (options.url.indexOf('?') < 0) {\n options.url += '?' + options.data;\n } else {\n options.url += '&' + options.data;\n }\n }\n\n if (AcceptHeaders[options.dataType] == null) {\n options.dataType = '*';\n }\n\n options.accept = AcceptHeaders[options.dataType];\n\n if (options.dataType !== '*') {\n options.accept += ', */*; q=0.01';\n }\n\n return options;\n };\n\n createXHR = function createXHR(options, done) {\n var xhr;\n xhr = new XMLHttpRequest();\n xhr.open(options.type, options.url, true);\n xhr.setRequestHeader('Accept', options.accept);\n\n if (typeof options.data === 'string') {\n xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');\n }\n\n if (!options.crossDomain) {\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n }\n\n CSRFProtection(xhr);\n xhr.withCredentials = !!options.withCredentials;\n\n xhr.onreadystatechange = function () {\n if (xhr.readyState === XMLHttpRequest.DONE) {\n return done(xhr);\n }\n };\n\n return xhr;\n };\n\n processResponse = function processResponse(response, type) {\n var parser, script;\n\n if (typeof response === 'string' && typeof type === 'string') {\n if (type.match(/\\bjson\\b/)) {\n try {\n response = JSON.parse(response);\n } catch (error) {}\n } else if (type.match(/\\b(?:java|ecma)script\\b/)) {\n script = document.createElement('script');\n script.setAttribute('nonce', cspNonce());\n script.text = response;\n document.head.appendChild(script).parentNode.removeChild(script);\n } else if (type.match(/\\bxml\\b/)) {\n parser = new DOMParser();\n type = type.replace(/;.+/, '');\n\n try {\n response = parser.parseFromString(response, type);\n } catch (error) {}\n }\n }\n\n return response;\n };\n\n Rails.href = function (element) {\n return element.href;\n };\n\n Rails.isCrossDomain = function (url) {\n var e, originAnchor, urlAnchor;\n originAnchor = document.createElement('a');\n originAnchor.href = location.href;\n urlAnchor = document.createElement('a');\n\n try {\n urlAnchor.href = url;\n return !((!urlAnchor.protocol || urlAnchor.protocol === ':') && !urlAnchor.host || originAnchor.protocol + '//' + originAnchor.host === urlAnchor.protocol + '//' + urlAnchor.host);\n } catch (error) {\n e = error;\n return true;\n }\n };\n }).call(this);\n (function () {\n var matches, toArray;\n matches = Rails.matches;\n\n toArray = function toArray(e) {\n return Array.prototype.slice.call(e);\n };\n\n Rails.serializeElement = function (element, additionalParam) {\n var inputs, params;\n inputs = [element];\n\n if (matches(element, 'form')) {\n inputs = toArray(element.elements);\n }\n\n params = [];\n inputs.forEach(function (input) {\n if (!input.name || input.disabled) {\n return;\n }\n\n if (matches(input, 'select')) {\n return toArray(input.options).forEach(function (option) {\n if (option.selected) {\n return params.push({\n name: input.name,\n value: option.value\n });\n }\n });\n } else if (input.checked || ['radio', 'checkbox', 'submit'].indexOf(input.type) === -1) {\n return params.push({\n name: input.name,\n value: input.value\n });\n }\n });\n\n if (additionalParam) {\n params.push(additionalParam);\n }\n\n return params.map(function (param) {\n if (param.name != null) {\n return encodeURIComponent(param.name) + \"=\" + encodeURIComponent(param.value);\n } else {\n return param;\n }\n }).join('&');\n };\n\n Rails.formElements = function (form, selector) {\n if (matches(form, 'form')) {\n return toArray(form.elements).filter(function (el) {\n return matches(el, selector);\n });\n } else {\n return toArray(form.querySelectorAll(selector));\n }\n };\n }).call(this);\n (function () {\n var allowAction, fire, stopEverything;\n fire = Rails.fire, stopEverything = Rails.stopEverything;\n\n Rails.handleConfirm = function (e) {\n if (!allowAction(this)) {\n return stopEverything(e);\n }\n };\n\n Rails.confirm = function (message, element) {\n return confirm(message);\n };\n\n allowAction = function allowAction(element) {\n var answer, callback, message;\n message = element.getAttribute('data-confirm');\n\n if (!message) {\n return true;\n }\n\n answer = false;\n\n if (fire(element, 'confirm')) {\n try {\n answer = Rails.confirm(message, element);\n } catch (error) {}\n\n callback = fire(element, 'confirm:complete', [answer]);\n }\n\n return answer && callback;\n };\n }).call(this);\n (function () {\n var disableFormElement, disableFormElements, disableLinkElement, enableFormElement, enableFormElements, enableLinkElement, formElements, getData, isXhrRedirect, matches, setData, stopEverything;\n matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, stopEverything = Rails.stopEverything, formElements = Rails.formElements;\n\n Rails.handleDisabledElement = function (e) {\n var element;\n element = this;\n\n if (element.disabled) {\n return stopEverything(e);\n }\n };\n\n Rails.enableElement = function (e) {\n var element;\n\n if (e instanceof Event) {\n if (isXhrRedirect(e)) {\n return;\n }\n\n element = e.target;\n } else {\n element = e;\n }\n\n if (matches(element, Rails.linkDisableSelector)) {\n return enableLinkElement(element);\n } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formEnableSelector)) {\n return enableFormElement(element);\n } else if (matches(element, Rails.formSubmitSelector)) {\n return enableFormElements(element);\n }\n };\n\n Rails.disableElement = function (e) {\n var element;\n element = e instanceof Event ? e.target : e;\n\n if (matches(element, Rails.linkDisableSelector)) {\n return disableLinkElement(element);\n } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formDisableSelector)) {\n return disableFormElement(element);\n } else if (matches(element, Rails.formSubmitSelector)) {\n return disableFormElements(element);\n }\n };\n\n disableLinkElement = function disableLinkElement(element) {\n var replacement;\n\n if (getData(element, 'ujs:disabled')) {\n return;\n }\n\n replacement = element.getAttribute('data-disable-with');\n\n if (replacement != null) {\n setData(element, 'ujs:enable-with', element.innerHTML);\n element.innerHTML = replacement;\n }\n\n element.addEventListener('click', stopEverything);\n return setData(element, 'ujs:disabled', true);\n };\n\n enableLinkElement = function enableLinkElement(element) {\n var originalText;\n originalText = getData(element, 'ujs:enable-with');\n\n if (originalText != null) {\n element.innerHTML = originalText;\n setData(element, 'ujs:enable-with', null);\n }\n\n element.removeEventListener('click', stopEverything);\n return setData(element, 'ujs:disabled', null);\n };\n\n disableFormElements = function disableFormElements(form) {\n return formElements(form, Rails.formDisableSelector).forEach(disableFormElement);\n };\n\n disableFormElement = function disableFormElement(element) {\n var replacement;\n\n if (getData(element, 'ujs:disabled')) {\n return;\n }\n\n replacement = element.getAttribute('data-disable-with');\n\n if (replacement != null) {\n if (matches(element, 'button')) {\n setData(element, 'ujs:enable-with', element.innerHTML);\n element.innerHTML = replacement;\n } else {\n setData(element, 'ujs:enable-with', element.value);\n element.value = replacement;\n }\n }\n\n element.disabled = true;\n return setData(element, 'ujs:disabled', true);\n };\n\n enableFormElements = function enableFormElements(form) {\n return formElements(form, Rails.formEnableSelector).forEach(enableFormElement);\n };\n\n enableFormElement = function enableFormElement(element) {\n var originalText;\n originalText = getData(element, 'ujs:enable-with');\n\n if (originalText != null) {\n if (matches(element, 'button')) {\n element.innerHTML = originalText;\n } else {\n element.value = originalText;\n }\n\n setData(element, 'ujs:enable-with', null);\n }\n\n element.disabled = false;\n return setData(element, 'ujs:disabled', null);\n };\n\n isXhrRedirect = function isXhrRedirect(event) {\n var ref, xhr;\n xhr = (ref = event.detail) != null ? ref[0] : void 0;\n return (xhr != null ? xhr.getResponseHeader(\"X-Xhr-Redirect\") : void 0) != null;\n };\n }).call(this);\n (function () {\n var stopEverything;\n stopEverything = Rails.stopEverything;\n\n Rails.handleMethod = function (e) {\n var csrfParam, csrfToken, form, formContent, href, link, method;\n link = this;\n method = link.getAttribute('data-method');\n\n if (!method) {\n return;\n }\n\n href = Rails.href(link);\n csrfToken = Rails.csrfToken();\n csrfParam = Rails.csrfParam();\n form = document.createElement('form');\n formContent = \"\";\n\n if (csrfParam != null && csrfToken != null && !Rails.isCrossDomain(href)) {\n formContent += \"\";\n }\n\n formContent += '';\n form.method = 'post';\n form.action = href;\n form.target = link.target;\n form.innerHTML = formContent;\n form.style.display = 'none';\n document.body.appendChild(form);\n form.querySelector('[type=\"submit\"]').click();\n return stopEverything(e);\n };\n }).call(this);\n (function () {\n var ajax,\n fire,\n getData,\n isCrossDomain,\n isRemote,\n matches,\n serializeElement,\n setData,\n stopEverything,\n slice = [].slice;\n matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, fire = Rails.fire, stopEverything = Rails.stopEverything, ajax = Rails.ajax, isCrossDomain = Rails.isCrossDomain, serializeElement = Rails.serializeElement;\n\n isRemote = function isRemote(element) {\n var value;\n value = element.getAttribute('data-remote');\n return value != null && value !== 'false';\n };\n\n Rails.handleRemote = function (e) {\n var button, data, dataType, element, method, url, withCredentials;\n element = this;\n\n if (!isRemote(element)) {\n return true;\n }\n\n if (!fire(element, 'ajax:before')) {\n fire(element, 'ajax:stopped');\n return false;\n }\n\n withCredentials = element.getAttribute('data-with-credentials');\n dataType = element.getAttribute('data-type') || 'script';\n\n if (matches(element, Rails.formSubmitSelector)) {\n button = getData(element, 'ujs:submit-button');\n method = getData(element, 'ujs:submit-button-formmethod') || element.method;\n url = getData(element, 'ujs:submit-button-formaction') || element.getAttribute('action') || location.href;\n\n if (method.toUpperCase() === 'GET') {\n url = url.replace(/\\?.*$/, '');\n }\n\n if (element.enctype === 'multipart/form-data') {\n data = new FormData(element);\n\n if (button != null) {\n data.append(button.name, button.value);\n }\n } else {\n data = serializeElement(element, button);\n }\n\n setData(element, 'ujs:submit-button', null);\n setData(element, 'ujs:submit-button-formmethod', null);\n setData(element, 'ujs:submit-button-formaction', null);\n } else if (matches(element, Rails.buttonClickSelector) || matches(element, Rails.inputChangeSelector)) {\n method = element.getAttribute('data-method');\n url = element.getAttribute('data-url');\n data = serializeElement(element, element.getAttribute('data-params'));\n } else {\n method = element.getAttribute('data-method');\n url = Rails.href(element);\n data = element.getAttribute('data-params');\n }\n\n ajax({\n type: method || 'GET',\n url: url,\n data: data,\n dataType: dataType,\n beforeSend: function beforeSend(xhr, options) {\n if (fire(element, 'ajax:beforeSend', [xhr, options])) {\n return fire(element, 'ajax:send', [xhr]);\n } else {\n fire(element, 'ajax:stopped');\n return false;\n }\n },\n success: function success() {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:success', args);\n },\n error: function error() {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:error', args);\n },\n complete: function complete() {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:complete', args);\n },\n crossDomain: isCrossDomain(url),\n withCredentials: withCredentials != null && withCredentials !== 'false'\n });\n return stopEverything(e);\n };\n\n Rails.formSubmitButtonClick = function (e) {\n var button, form;\n button = this;\n form = button.form;\n\n if (!form) {\n return;\n }\n\n if (button.name) {\n setData(form, 'ujs:submit-button', {\n name: button.name,\n value: button.value\n });\n }\n\n setData(form, 'ujs:formnovalidate-button', button.formNoValidate);\n setData(form, 'ujs:submit-button-formaction', button.getAttribute('formaction'));\n return setData(form, 'ujs:submit-button-formmethod', button.getAttribute('formmethod'));\n };\n\n Rails.preventInsignificantClick = function (e) {\n var data, insignificantMetaClick, link, metaClick, method, primaryMouseKey;\n link = this;\n method = (link.getAttribute('data-method') || 'GET').toUpperCase();\n data = link.getAttribute('data-params');\n metaClick = e.metaKey || e.ctrlKey;\n insignificantMetaClick = metaClick && method === 'GET' && !data;\n primaryMouseKey = e.button === 0;\n\n if (!primaryMouseKey || insignificantMetaClick) {\n return e.stopImmediatePropagation();\n }\n };\n }).call(this);\n (function () {\n var $, CSRFProtection, delegate, disableElement, enableElement, fire, formSubmitButtonClick, getData, handleConfirm, handleDisabledElement, handleMethod, handleRemote, preventInsignificantClick, refreshCSRFTokens;\n fire = Rails.fire, delegate = Rails.delegate, getData = Rails.getData, $ = Rails.$, refreshCSRFTokens = Rails.refreshCSRFTokens, CSRFProtection = Rails.CSRFProtection, enableElement = Rails.enableElement, disableElement = Rails.disableElement, handleDisabledElement = Rails.handleDisabledElement, handleConfirm = Rails.handleConfirm, preventInsignificantClick = Rails.preventInsignificantClick, handleRemote = Rails.handleRemote, formSubmitButtonClick = Rails.formSubmitButtonClick, handleMethod = Rails.handleMethod;\n\n if (typeof jQuery !== \"undefined\" && jQuery !== null && jQuery.ajax != null) {\n if (jQuery.rails) {\n throw new Error('If you load both jquery_ujs and rails-ujs, use rails-ujs only.');\n }\n\n jQuery.rails = Rails;\n jQuery.ajaxPrefilter(function (options, originalOptions, xhr) {\n if (!options.crossDomain) {\n return CSRFProtection(xhr);\n }\n });\n }\n\n Rails.start = function () {\n if (window._rails_loaded) {\n throw new Error('rails-ujs has already been loaded!');\n }\n\n window.addEventListener('pageshow', function () {\n $(Rails.formEnableSelector).forEach(function (el) {\n if (getData(el, 'ujs:disabled')) {\n return enableElement(el);\n }\n });\n return $(Rails.linkDisableSelector).forEach(function (el) {\n if (getData(el, 'ujs:disabled')) {\n return enableElement(el);\n }\n });\n });\n delegate(document, Rails.linkDisableSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.linkDisableSelector, 'ajax:stopped', enableElement);\n delegate(document, Rails.buttonDisableSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.buttonDisableSelector, 'ajax:stopped', enableElement);\n delegate(document, Rails.linkClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.linkClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.linkClickSelector, 'click', handleConfirm);\n delegate(document, Rails.linkClickSelector, 'click', disableElement);\n delegate(document, Rails.linkClickSelector, 'click', handleRemote);\n delegate(document, Rails.linkClickSelector, 'click', handleMethod);\n delegate(document, Rails.buttonClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.buttonClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.buttonClickSelector, 'click', handleConfirm);\n delegate(document, Rails.buttonClickSelector, 'click', disableElement);\n delegate(document, Rails.buttonClickSelector, 'click', handleRemote);\n delegate(document, Rails.inputChangeSelector, 'change', handleDisabledElement);\n delegate(document, Rails.inputChangeSelector, 'change', handleConfirm);\n delegate(document, Rails.inputChangeSelector, 'change', handleRemote);\n delegate(document, Rails.formSubmitSelector, 'submit', handleDisabledElement);\n delegate(document, Rails.formSubmitSelector, 'submit', handleConfirm);\n delegate(document, Rails.formSubmitSelector, 'submit', handleRemote);\n delegate(document, Rails.formSubmitSelector, 'submit', function (e) {\n return setTimeout(function () {\n return disableElement(e);\n }, 13);\n });\n delegate(document, Rails.formSubmitSelector, 'ajax:send', disableElement);\n delegate(document, Rails.formSubmitSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.formInputClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.formInputClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.formInputClickSelector, 'click', handleConfirm);\n delegate(document, Rails.formInputClickSelector, 'click', formSubmitButtonClick);\n document.addEventListener('DOMContentLoaded', refreshCSRFTokens);\n return window._rails_loaded = true;\n };\n\n if (window.Rails === Rails && fire(document, 'rails:attachBindings')) {\n Rails.start();\n }\n }).call(this);\n }).call(this);\n\n if ((typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) === \"object\" && module.exports) {\n module.exports = Rails;\n } else if (typeof define === \"function\" && define.amd) {\n define(Rails);\n }\n}).call(this);","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*\nTurbolinks 5.2.0\nCopyright © 2018 Basecamp, LLC\n */\n(function () {\n var t = this;\n (function () {\n (function () {\n this.Turbolinks = {\n supported: function () {\n return null != window.history.pushState && null != window.requestAnimationFrame && null != window.addEventListener;\n }(),\n visit: function visit(t, r) {\n return e.controller.visit(t, r);\n },\n clearCache: function clearCache() {\n return e.controller.clearCache();\n },\n setProgressBarDelay: function setProgressBarDelay(t) {\n return e.controller.setProgressBarDelay(t);\n }\n };\n }).call(this);\n }).call(t);\n var e = t.Turbolinks;\n (function () {\n (function () {\n var t,\n r,\n n,\n o = [].slice;\n e.copyObject = function (t) {\n var e, r, n;\n r = {};\n\n for (e in t) {\n n = t[e], r[e] = n;\n }\n\n return r;\n }, e.closest = function (e, r) {\n return t.call(e, r);\n }, t = function () {\n var t, e;\n return t = document.documentElement, null != (e = t.closest) ? e : function (t) {\n var e;\n\n for (e = this; e;) {\n if (e.nodeType === Node.ELEMENT_NODE && r.call(e, t)) return e;\n e = e.parentNode;\n }\n };\n }(), e.defer = function (t) {\n return setTimeout(t, 1);\n }, e.throttle = function (t) {\n var e;\n return e = null, function () {\n var r;\n return r = 1 <= arguments.length ? o.call(arguments, 0) : [], null != e ? e : e = requestAnimationFrame(function (n) {\n return function () {\n return e = null, t.apply(n, r);\n };\n }(this));\n };\n }, e.dispatch = function (t, e) {\n var r, o, i, s, a, u;\n return a = null != e ? e : {}, u = a.target, r = a.cancelable, o = a.data, i = document.createEvent(\"Events\"), i.initEvent(t, !0, r === !0), i.data = null != o ? o : {}, i.cancelable && !n && (s = i.preventDefault, i.preventDefault = function () {\n return this.defaultPrevented || Object.defineProperty(this, \"defaultPrevented\", {\n get: function get() {\n return !0;\n }\n }), s.call(this);\n }), (null != u ? u : document).dispatchEvent(i), i;\n }, n = function () {\n var t;\n return t = document.createEvent(\"Events\"), t.initEvent(\"test\", !0, !0), t.preventDefault(), t.defaultPrevented;\n }(), e.match = function (t, e) {\n return r.call(t, e);\n }, r = function () {\n var t, e, r, n;\n return t = document.documentElement, null != (e = null != (r = null != (n = t.matchesSelector) ? n : t.webkitMatchesSelector) ? r : t.msMatchesSelector) ? e : t.mozMatchesSelector;\n }(), e.uuid = function () {\n var t, e, r;\n\n for (r = \"\", t = e = 1; 36 >= e; t = ++e) {\n r += 9 === t || 14 === t || 19 === t || 24 === t ? \"-\" : 15 === t ? \"4\" : 20 === t ? (Math.floor(4 * Math.random()) + 8).toString(16) : Math.floor(15 * Math.random()).toString(16);\n }\n\n return r;\n };\n }).call(this), function () {\n e.Location = function () {\n function t(t) {\n var e, r;\n null == t && (t = \"\"), r = document.createElement(\"a\"), r.href = t.toString(), this.absoluteURL = r.href, e = r.hash.length, 2 > e ? this.requestURL = this.absoluteURL : (this.requestURL = this.absoluteURL.slice(0, -e), this.anchor = r.hash.slice(1));\n }\n\n var e, r, n, o;\n return t.wrap = function (t) {\n return t instanceof this ? t : new this(t);\n }, t.prototype.getOrigin = function () {\n return this.absoluteURL.split(\"/\", 3).join(\"/\");\n }, t.prototype.getPath = function () {\n var t, e;\n return null != (t = null != (e = this.requestURL.match(/\\/\\/[^\\/]*(\\/[^?;]*)/)) ? e[1] : void 0) ? t : \"/\";\n }, t.prototype.getPathComponents = function () {\n return this.getPath().split(\"/\").slice(1);\n }, t.prototype.getLastPathComponent = function () {\n return this.getPathComponents().slice(-1)[0];\n }, t.prototype.getExtension = function () {\n var t, e;\n return null != (t = null != (e = this.getLastPathComponent().match(/\\.[^.]*$/)) ? e[0] : void 0) ? t : \"\";\n }, t.prototype.isHTML = function () {\n return this.getExtension().match(/^(?:|\\.(?:htm|html|xhtml))$/);\n }, t.prototype.isPrefixedBy = function (t) {\n var e;\n return e = r(t), this.isEqualTo(t) || o(this.absoluteURL, e);\n }, t.prototype.isEqualTo = function (t) {\n return this.absoluteURL === (null != t ? t.absoluteURL : void 0);\n }, t.prototype.toCacheKey = function () {\n return this.requestURL;\n }, t.prototype.toJSON = function () {\n return this.absoluteURL;\n }, t.prototype.toString = function () {\n return this.absoluteURL;\n }, t.prototype.valueOf = function () {\n return this.absoluteURL;\n }, r = function r(t) {\n return e(t.getOrigin() + t.getPath());\n }, e = function e(t) {\n return n(t, \"/\") ? t : t + \"/\";\n }, o = function o(t, e) {\n return t.slice(0, e.length) === e;\n }, n = function n(t, e) {\n return t.slice(-e.length) === e;\n }, t;\n }();\n }.call(this), function () {\n var t = function t(_t, e) {\n return function () {\n return _t.apply(e, arguments);\n };\n };\n\n e.HttpRequest = function () {\n function r(r, n, o) {\n this.delegate = r, this.requestCanceled = t(this.requestCanceled, this), this.requestTimedOut = t(this.requestTimedOut, this), this.requestFailed = t(this.requestFailed, this), this.requestLoaded = t(this.requestLoaded, this), this.requestProgressed = t(this.requestProgressed, this), this.url = e.Location.wrap(n).requestURL, this.referrer = e.Location.wrap(o).absoluteURL, this.createXHR();\n }\n\n return r.NETWORK_FAILURE = 0, r.TIMEOUT_FAILURE = -1, r.timeout = 60, r.prototype.send = function () {\n var t;\n return this.xhr && !this.sent ? (this.notifyApplicationBeforeRequestStart(), this.setProgress(0), this.xhr.send(), this.sent = !0, \"function\" == typeof (t = this.delegate).requestStarted ? t.requestStarted() : void 0) : void 0;\n }, r.prototype.cancel = function () {\n return this.xhr && this.sent ? this.xhr.abort() : void 0;\n }, r.prototype.requestProgressed = function (t) {\n return t.lengthComputable ? this.setProgress(t.loaded / t.total) : void 0;\n }, r.prototype.requestLoaded = function () {\n return this.endRequest(function (t) {\n return function () {\n var e;\n return 200 <= (e = t.xhr.status) && 300 > e ? t.delegate.requestCompletedWithResponse(t.xhr.responseText, t.xhr.getResponseHeader(\"Turbolinks-Location\")) : (t.failed = !0, t.delegate.requestFailedWithStatusCode(t.xhr.status, t.xhr.responseText));\n };\n }(this));\n }, r.prototype.requestFailed = function () {\n return this.endRequest(function (t) {\n return function () {\n return t.failed = !0, t.delegate.requestFailedWithStatusCode(t.constructor.NETWORK_FAILURE);\n };\n }(this));\n }, r.prototype.requestTimedOut = function () {\n return this.endRequest(function (t) {\n return function () {\n return t.failed = !0, t.delegate.requestFailedWithStatusCode(t.constructor.TIMEOUT_FAILURE);\n };\n }(this));\n }, r.prototype.requestCanceled = function () {\n return this.endRequest();\n }, r.prototype.notifyApplicationBeforeRequestStart = function () {\n return e.dispatch(\"turbolinks:request-start\", {\n data: {\n url: this.url,\n xhr: this.xhr\n }\n });\n }, r.prototype.notifyApplicationAfterRequestEnd = function () {\n return e.dispatch(\"turbolinks:request-end\", {\n data: {\n url: this.url,\n xhr: this.xhr\n }\n });\n }, r.prototype.createXHR = function () {\n return this.xhr = new XMLHttpRequest(), this.xhr.open(\"GET\", this.url, !0), this.xhr.timeout = 1e3 * this.constructor.timeout, this.xhr.setRequestHeader(\"Accept\", \"text/html, application/xhtml+xml\"), this.xhr.setRequestHeader(\"Turbolinks-Referrer\", this.referrer), this.xhr.onprogress = this.requestProgressed, this.xhr.onload = this.requestLoaded, this.xhr.onerror = this.requestFailed, this.xhr.ontimeout = this.requestTimedOut, this.xhr.onabort = this.requestCanceled;\n }, r.prototype.endRequest = function (t) {\n return this.xhr ? (this.notifyApplicationAfterRequestEnd(), null != t && t.call(this), this.destroy()) : void 0;\n }, r.prototype.setProgress = function (t) {\n var e;\n return this.progress = t, \"function\" == typeof (e = this.delegate).requestProgressed ? e.requestProgressed(this.progress) : void 0;\n }, r.prototype.destroy = function () {\n var t;\n return this.setProgress(1), \"function\" == typeof (t = this.delegate).requestFinished && t.requestFinished(), this.delegate = null, this.xhr = null;\n }, r;\n }();\n }.call(this), function () {\n var t = function t(_t2, e) {\n return function () {\n return _t2.apply(e, arguments);\n };\n };\n\n e.ProgressBar = function () {\n function e() {\n this.trickle = t(this.trickle, this), this.stylesheetElement = this.createStylesheetElement(), this.progressElement = this.createProgressElement();\n }\n\n var r;\n return r = 300, e.defaultCSS = \".turbolinks-progress-bar {\\n position: fixed;\\n display: block;\\n top: 0;\\n left: 0;\\n height: 3px;\\n background: #0076ff;\\n z-index: 9999;\\n transition: width \" + r + \"ms ease-out, opacity \" + r / 2 + \"ms \" + r / 2 + \"ms ease-in;\\n transform: translate3d(0, 0, 0);\\n}\", e.prototype.show = function () {\n return this.visible ? void 0 : (this.visible = !0, this.installStylesheetElement(), this.installProgressElement(), this.startTrickling());\n }, e.prototype.hide = function () {\n return this.visible && !this.hiding ? (this.hiding = !0, this.fadeProgressElement(function (t) {\n return function () {\n return t.uninstallProgressElement(), t.stopTrickling(), t.visible = !1, t.hiding = !1;\n };\n }(this))) : void 0;\n }, e.prototype.setValue = function (t) {\n return this.value = t, this.refresh();\n }, e.prototype.installStylesheetElement = function () {\n return document.head.insertBefore(this.stylesheetElement, document.head.firstChild);\n }, e.prototype.installProgressElement = function () {\n return this.progressElement.style.width = 0, this.progressElement.style.opacity = 1, document.documentElement.insertBefore(this.progressElement, document.body), this.refresh();\n }, e.prototype.fadeProgressElement = function (t) {\n return this.progressElement.style.opacity = 0, setTimeout(t, 1.5 * r);\n }, e.prototype.uninstallProgressElement = function () {\n return this.progressElement.parentNode ? document.documentElement.removeChild(this.progressElement) : void 0;\n }, e.prototype.startTrickling = function () {\n return null != this.trickleInterval ? this.trickleInterval : this.trickleInterval = setInterval(this.trickle, r);\n }, e.prototype.stopTrickling = function () {\n return clearInterval(this.trickleInterval), this.trickleInterval = null;\n }, e.prototype.trickle = function () {\n return this.setValue(this.value + Math.random() / 100);\n }, e.prototype.refresh = function () {\n return requestAnimationFrame(function (t) {\n return function () {\n return t.progressElement.style.width = 10 + 90 * t.value + \"%\";\n };\n }(this));\n }, e.prototype.createStylesheetElement = function () {\n var t;\n return t = document.createElement(\"style\"), t.type = \"text/css\", t.textContent = this.constructor.defaultCSS, t;\n }, e.prototype.createProgressElement = function () {\n var t;\n return t = document.createElement(\"div\"), t.className = \"turbolinks-progress-bar\", t;\n }, e;\n }();\n }.call(this), function () {\n var t = function t(_t3, e) {\n return function () {\n return _t3.apply(e, arguments);\n };\n };\n\n e.BrowserAdapter = function () {\n function r(r) {\n this.controller = r, this.showProgressBar = t(this.showProgressBar, this), this.progressBar = new e.ProgressBar();\n }\n\n var n, o, i;\n return i = e.HttpRequest, n = i.NETWORK_FAILURE, o = i.TIMEOUT_FAILURE, r.prototype.visitProposedToLocationWithAction = function (t, e) {\n return this.controller.startVisitToLocationWithAction(t, e);\n }, r.prototype.visitStarted = function (t) {\n return t.issueRequest(), t.changeHistory(), t.loadCachedSnapshot();\n }, r.prototype.visitRequestStarted = function (t) {\n return this.progressBar.setValue(0), t.hasCachedSnapshot() || \"restore\" !== t.action ? this.showProgressBarAfterDelay() : this.showProgressBar();\n }, r.prototype.visitRequestProgressed = function (t) {\n return this.progressBar.setValue(t.progress);\n }, r.prototype.visitRequestCompleted = function (t) {\n return t.loadResponse();\n }, r.prototype.visitRequestFailedWithStatusCode = function (t, e) {\n switch (e) {\n case n:\n case o:\n return this.reload();\n\n default:\n return t.loadResponse();\n }\n }, r.prototype.visitRequestFinished = function (t) {\n return this.hideProgressBar();\n }, r.prototype.visitCompleted = function (t) {\n return t.followRedirect();\n }, r.prototype.pageInvalidated = function () {\n return this.reload();\n }, r.prototype.showProgressBarAfterDelay = function () {\n return this.progressBarTimeout = setTimeout(this.showProgressBar, this.controller.progressBarDelay);\n }, r.prototype.showProgressBar = function () {\n return this.progressBar.show();\n }, r.prototype.hideProgressBar = function () {\n return this.progressBar.hide(), clearTimeout(this.progressBarTimeout);\n }, r.prototype.reload = function () {\n return window.location.reload();\n }, r;\n }();\n }.call(this), function () {\n var t = function t(_t4, e) {\n return function () {\n return _t4.apply(e, arguments);\n };\n };\n\n e.History = function () {\n function r(e) {\n this.delegate = e, this.onPageLoad = t(this.onPageLoad, this), this.onPopState = t(this.onPopState, this);\n }\n\n return r.prototype.start = function () {\n return this.started ? void 0 : (addEventListener(\"popstate\", this.onPopState, !1), addEventListener(\"load\", this.onPageLoad, !1), this.started = !0);\n }, r.prototype.stop = function () {\n return this.started ? (removeEventListener(\"popstate\", this.onPopState, !1), removeEventListener(\"load\", this.onPageLoad, !1), this.started = !1) : void 0;\n }, r.prototype.push = function (t, r) {\n return t = e.Location.wrap(t), this.update(\"push\", t, r);\n }, r.prototype.replace = function (t, r) {\n return t = e.Location.wrap(t), this.update(\"replace\", t, r);\n }, r.prototype.onPopState = function (t) {\n var r, n, o, i;\n return this.shouldHandlePopState() && (i = null != (n = t.state) ? n.turbolinks : void 0) ? (r = e.Location.wrap(window.location), o = i.restorationIdentifier, this.delegate.historyPoppedToLocationWithRestorationIdentifier(r, o)) : void 0;\n }, r.prototype.onPageLoad = function (t) {\n return e.defer(function (t) {\n return function () {\n return t.pageLoaded = !0;\n };\n }(this));\n }, r.prototype.shouldHandlePopState = function () {\n return this.pageIsLoaded();\n }, r.prototype.pageIsLoaded = function () {\n return this.pageLoaded || \"complete\" === document.readyState;\n }, r.prototype.update = function (t, e, r) {\n var n;\n return n = {\n turbolinks: {\n restorationIdentifier: r\n }\n }, history[t + \"State\"](n, null, e);\n }, r;\n }();\n }.call(this), function () {\n e.HeadDetails = function () {\n function t(t) {\n var e, r, n, s, a, u;\n\n for (this.elements = {}, n = 0, a = t.length; a > n; n++) {\n u = t[n], u.nodeType === Node.ELEMENT_NODE && (s = u.outerHTML, r = null != (e = this.elements)[s] ? e[s] : e[s] = {\n type: i(u),\n tracked: o(u),\n elements: []\n }, r.elements.push(u));\n }\n }\n\n var e, r, n, o, i;\n return t.fromHeadElement = function (t) {\n var e;\n return new this(null != (e = null != t ? t.childNodes : void 0) ? e : []);\n }, t.prototype.hasElementWithKey = function (t) {\n return t in this.elements;\n }, t.prototype.getTrackedElementSignature = function () {\n var t, e;\n return function () {\n var r, n;\n r = this.elements, n = [];\n\n for (t in r) {\n e = r[t].tracked, e && n.push(t);\n }\n\n return n;\n }.call(this).join(\"\");\n }, t.prototype.getScriptElementsNotInDetails = function (t) {\n return this.getElementsMatchingTypeNotInDetails(\"script\", t);\n }, t.prototype.getStylesheetElementsNotInDetails = function (t) {\n return this.getElementsMatchingTypeNotInDetails(\"stylesheet\", t);\n }, t.prototype.getElementsMatchingTypeNotInDetails = function (t, e) {\n var r, n, o, i, s, a;\n o = this.elements, s = [];\n\n for (n in o) {\n i = o[n], a = i.type, r = i.elements, a !== t || e.hasElementWithKey(n) || s.push(r[0]);\n }\n\n return s;\n }, t.prototype.getProvisionalElements = function () {\n var t, e, r, n, o, i, s;\n r = [], n = this.elements;\n\n for (e in n) {\n o = n[e], s = o.type, i = o.tracked, t = o.elements, null != s || i ? t.length > 1 && r.push.apply(r, t.slice(1)) : r.push.apply(r, t);\n }\n\n return r;\n }, t.prototype.getMetaValue = function (t) {\n var e;\n return null != (e = this.findMetaElementByName(t)) ? e.getAttribute(\"content\") : void 0;\n }, t.prototype.findMetaElementByName = function (t) {\n var r, n, o, i;\n r = void 0, i = this.elements;\n\n for (o in i) {\n n = i[o].elements, e(n[0], t) && (r = n[0]);\n }\n\n return r;\n }, i = function i(t) {\n return r(t) ? \"script\" : n(t) ? \"stylesheet\" : void 0;\n }, o = function o(t) {\n return \"reload\" === t.getAttribute(\"data-turbolinks-track\");\n }, r = function r(t) {\n var e;\n return e = t.tagName.toLowerCase(), \"script\" === e;\n }, n = function n(t) {\n var e;\n return e = t.tagName.toLowerCase(), \"style\" === e || \"link\" === e && \"stylesheet\" === t.getAttribute(\"rel\");\n }, e = function e(t, _e) {\n var r;\n return r = t.tagName.toLowerCase(), \"meta\" === r && t.getAttribute(\"name\") === _e;\n }, t;\n }();\n }.call(this), function () {\n e.Snapshot = function () {\n function t(t, e) {\n this.headDetails = t, this.bodyElement = e;\n }\n\n return t.wrap = function (t) {\n return t instanceof this ? t : \"string\" == typeof t ? this.fromHTMLString(t) : this.fromHTMLElement(t);\n }, t.fromHTMLString = function (t) {\n var e;\n return e = document.createElement(\"html\"), e.innerHTML = t, this.fromHTMLElement(e);\n }, t.fromHTMLElement = function (t) {\n var r, n, o, i;\n return o = t.querySelector(\"head\"), r = null != (i = t.querySelector(\"body\")) ? i : document.createElement(\"body\"), n = e.HeadDetails.fromHeadElement(o), new this(n, r);\n }, t.prototype.clone = function () {\n return new this.constructor(this.headDetails, this.bodyElement.cloneNode(!0));\n }, t.prototype.getRootLocation = function () {\n var t, r;\n return r = null != (t = this.getSetting(\"root\")) ? t : \"/\", new e.Location(r);\n }, t.prototype.getCacheControlValue = function () {\n return this.getSetting(\"cache-control\");\n }, t.prototype.getElementForAnchor = function (t) {\n try {\n return this.bodyElement.querySelector(\"[id='\" + t + \"'], a[name='\" + t + \"']\");\n } catch (e) {}\n }, t.prototype.getPermanentElements = function () {\n return this.bodyElement.querySelectorAll(\"[id][data-turbolinks-permanent]\");\n }, t.prototype.getPermanentElementById = function (t) {\n return this.bodyElement.querySelector(\"#\" + t + \"[data-turbolinks-permanent]\");\n }, t.prototype.getPermanentElementsPresentInSnapshot = function (t) {\n var e, r, n, o, i;\n\n for (o = this.getPermanentElements(), i = [], r = 0, n = o.length; n > r; r++) {\n e = o[r], t.getPermanentElementById(e.id) && i.push(e);\n }\n\n return i;\n }, t.prototype.findFirstAutofocusableElement = function () {\n return this.bodyElement.querySelector(\"[autofocus]\");\n }, t.prototype.hasAnchor = function (t) {\n return null != this.getElementForAnchor(t);\n }, t.prototype.isPreviewable = function () {\n return \"no-preview\" !== this.getCacheControlValue();\n }, t.prototype.isCacheable = function () {\n return \"no-cache\" !== this.getCacheControlValue();\n }, t.prototype.isVisitable = function () {\n return \"reload\" !== this.getSetting(\"visit-control\");\n }, t.prototype.getSetting = function (t) {\n return this.headDetails.getMetaValue(\"turbolinks-\" + t);\n }, t;\n }();\n }.call(this), function () {\n var t = [].slice;\n\n e.Renderer = function () {\n function e() {}\n\n var r;\n return e.render = function () {\n var e, r, n, o;\n return n = arguments[0], r = arguments[1], e = 3 <= arguments.length ? t.call(arguments, 2) : [], o = function (t, e, r) {\n r.prototype = t.prototype;\n var n = new r(),\n o = t.apply(n, e);\n return Object(o) === o ? o : n;\n }(this, e, function () {}), o.delegate = n, o.render(r), o;\n }, e.prototype.renderView = function (t) {\n return this.delegate.viewWillRender(this.newBody), t(), this.delegate.viewRendered(this.newBody);\n }, e.prototype.invalidateView = function () {\n return this.delegate.viewInvalidated();\n }, e.prototype.createScriptElement = function (t) {\n var e;\n return \"false\" === t.getAttribute(\"data-turbolinks-eval\") ? t : (e = document.createElement(\"script\"), e.textContent = t.textContent, e.async = !1, r(e, t), e);\n }, r = function r(t, e) {\n var r, n, o, i, s, a, u;\n\n for (i = e.attributes, a = [], r = 0, n = i.length; n > r; r++) {\n s = i[r], o = s.name, u = s.value, a.push(t.setAttribute(o, u));\n }\n\n return a;\n }, e;\n }();\n }.call(this), function () {\n var t,\n r,\n n = function n(t, e) {\n function r() {\n this.constructor = t;\n }\n\n for (var n in e) {\n o.call(e, n) && (t[n] = e[n]);\n }\n\n return r.prototype = e.prototype, t.prototype = new r(), t.__super__ = e.prototype, t;\n },\n o = {}.hasOwnProperty;\n\n e.SnapshotRenderer = function (e) {\n function o(t, e, r) {\n this.currentSnapshot = t, this.newSnapshot = e, this.isPreview = r, this.currentHeadDetails = this.currentSnapshot.headDetails, this.newHeadDetails = this.newSnapshot.headDetails, this.currentBody = this.currentSnapshot.bodyElement, this.newBody = this.newSnapshot.bodyElement;\n }\n\n return n(o, e), o.prototype.render = function (t) {\n return this.shouldRender() ? (this.mergeHead(), this.renderView(function (e) {\n return function () {\n return e.replaceBody(), e.isPreview || e.focusFirstAutofocusableElement(), t();\n };\n }(this))) : this.invalidateView();\n }, o.prototype.mergeHead = function () {\n return this.copyNewHeadStylesheetElements(), this.copyNewHeadScriptElements(), this.removeCurrentHeadProvisionalElements(), this.copyNewHeadProvisionalElements();\n }, o.prototype.replaceBody = function () {\n var t;\n return t = this.relocateCurrentBodyPermanentElements(), this.activateNewBodyScriptElements(), this.assignNewBody(), this.replacePlaceholderElementsWithClonedPermanentElements(t);\n }, o.prototype.shouldRender = function () {\n return this.newSnapshot.isVisitable() && this.trackedElementsAreIdentical();\n }, o.prototype.trackedElementsAreIdentical = function () {\n return this.currentHeadDetails.getTrackedElementSignature() === this.newHeadDetails.getTrackedElementSignature();\n }, o.prototype.copyNewHeadStylesheetElements = function () {\n var t, e, r, n, o;\n\n for (n = this.getNewHeadStylesheetElements(), o = [], e = 0, r = n.length; r > e; e++) {\n t = n[e], o.push(document.head.appendChild(t));\n }\n\n return o;\n }, o.prototype.copyNewHeadScriptElements = function () {\n var t, e, r, n, o;\n\n for (n = this.getNewHeadScriptElements(), o = [], e = 0, r = n.length; r > e; e++) {\n t = n[e], o.push(document.head.appendChild(this.createScriptElement(t)));\n }\n\n return o;\n }, o.prototype.removeCurrentHeadProvisionalElements = function () {\n var t, e, r, n, o;\n\n for (n = this.getCurrentHeadProvisionalElements(), o = [], e = 0, r = n.length; r > e; e++) {\n t = n[e], o.push(document.head.removeChild(t));\n }\n\n return o;\n }, o.prototype.copyNewHeadProvisionalElements = function () {\n var t, e, r, n, o;\n\n for (n = this.getNewHeadProvisionalElements(), o = [], e = 0, r = n.length; r > e; e++) {\n t = n[e], o.push(document.head.appendChild(t));\n }\n\n return o;\n }, o.prototype.relocateCurrentBodyPermanentElements = function () {\n var e, n, o, i, s, a, u;\n\n for (a = this.getCurrentBodyPermanentElements(), u = [], e = 0, n = a.length; n > e; e++) {\n i = a[e], s = t(i), o = this.newSnapshot.getPermanentElementById(i.id), r(i, s.element), r(o, i), u.push(s);\n }\n\n return u;\n }, o.prototype.replacePlaceholderElementsWithClonedPermanentElements = function (t) {\n var e, n, o, i, s, a, u;\n\n for (u = [], o = 0, i = t.length; i > o; o++) {\n a = t[o], n = a.element, s = a.permanentElement, e = s.cloneNode(!0), u.push(r(n, e));\n }\n\n return u;\n }, o.prototype.activateNewBodyScriptElements = function () {\n var t, e, n, o, i, s;\n\n for (i = this.getNewBodyScriptElements(), s = [], e = 0, o = i.length; o > e; e++) {\n n = i[e], t = this.createScriptElement(n), s.push(r(n, t));\n }\n\n return s;\n }, o.prototype.assignNewBody = function () {\n return document.body = this.newBody;\n }, o.prototype.focusFirstAutofocusableElement = function () {\n var t;\n return null != (t = this.newSnapshot.findFirstAutofocusableElement()) ? t.focus() : void 0;\n }, o.prototype.getNewHeadStylesheetElements = function () {\n return this.newHeadDetails.getStylesheetElementsNotInDetails(this.currentHeadDetails);\n }, o.prototype.getNewHeadScriptElements = function () {\n return this.newHeadDetails.getScriptElementsNotInDetails(this.currentHeadDetails);\n }, o.prototype.getCurrentHeadProvisionalElements = function () {\n return this.currentHeadDetails.getProvisionalElements();\n }, o.prototype.getNewHeadProvisionalElements = function () {\n return this.newHeadDetails.getProvisionalElements();\n }, o.prototype.getCurrentBodyPermanentElements = function () {\n return this.currentSnapshot.getPermanentElementsPresentInSnapshot(this.newSnapshot);\n }, o.prototype.getNewBodyScriptElements = function () {\n return this.newBody.querySelectorAll(\"script\");\n }, o;\n }(e.Renderer), t = function t(_t5) {\n var e;\n return e = document.createElement(\"meta\"), e.setAttribute(\"name\", \"turbolinks-permanent-placeholder\"), e.setAttribute(\"content\", _t5.id), {\n element: e,\n permanentElement: _t5\n };\n }, r = function r(t, e) {\n var r;\n return (r = t.parentNode) ? r.replaceChild(e, t) : void 0;\n };\n }.call(this), function () {\n var t = function t(_t6, e) {\n function n() {\n this.constructor = _t6;\n }\n\n for (var o in e) {\n r.call(e, o) && (_t6[o] = e[o]);\n }\n\n return n.prototype = e.prototype, _t6.prototype = new n(), _t6.__super__ = e.prototype, _t6;\n },\n r = {}.hasOwnProperty;\n\n e.ErrorRenderer = function (e) {\n function r(t) {\n var e;\n e = document.createElement(\"html\"), e.innerHTML = t, this.newHead = e.querySelector(\"head\"), this.newBody = e.querySelector(\"body\");\n }\n\n return t(r, e), r.prototype.render = function (t) {\n return this.renderView(function (e) {\n return function () {\n return e.replaceHeadAndBody(), e.activateBodyScriptElements(), t();\n };\n }(this));\n }, r.prototype.replaceHeadAndBody = function () {\n var t, e;\n return e = document.head, t = document.body, e.parentNode.replaceChild(this.newHead, e), t.parentNode.replaceChild(this.newBody, t);\n }, r.prototype.activateBodyScriptElements = function () {\n var t, e, r, n, o, i;\n\n for (n = this.getScriptElements(), i = [], e = 0, r = n.length; r > e; e++) {\n o = n[e], t = this.createScriptElement(o), i.push(o.parentNode.replaceChild(t, o));\n }\n\n return i;\n }, r.prototype.getScriptElements = function () {\n return document.documentElement.querySelectorAll(\"script\");\n }, r;\n }(e.Renderer);\n }.call(this), function () {\n e.View = function () {\n function t(t) {\n this.delegate = t, this.htmlElement = document.documentElement;\n }\n\n return t.prototype.getRootLocation = function () {\n return this.getSnapshot().getRootLocation();\n }, t.prototype.getElementForAnchor = function (t) {\n return this.getSnapshot().getElementForAnchor(t);\n }, t.prototype.getSnapshot = function () {\n return e.Snapshot.fromHTMLElement(this.htmlElement);\n }, t.prototype.render = function (t, e) {\n var r, n, o;\n return o = t.snapshot, r = t.error, n = t.isPreview, this.markAsPreview(n), null != o ? this.renderSnapshot(o, n, e) : this.renderError(r, e);\n }, t.prototype.markAsPreview = function (t) {\n return t ? this.htmlElement.setAttribute(\"data-turbolinks-preview\", \"\") : this.htmlElement.removeAttribute(\"data-turbolinks-preview\");\n }, t.prototype.renderSnapshot = function (t, r, n) {\n return e.SnapshotRenderer.render(this.delegate, n, this.getSnapshot(), e.Snapshot.wrap(t), r);\n }, t.prototype.renderError = function (t, r) {\n return e.ErrorRenderer.render(this.delegate, r, t);\n }, t;\n }();\n }.call(this), function () {\n var t = function t(_t7, e) {\n return function () {\n return _t7.apply(e, arguments);\n };\n };\n\n e.ScrollManager = function () {\n function r(r) {\n this.delegate = r, this.onScroll = t(this.onScroll, this), this.onScroll = e.throttle(this.onScroll);\n }\n\n return r.prototype.start = function () {\n return this.started ? void 0 : (addEventListener(\"scroll\", this.onScroll, !1), this.onScroll(), this.started = !0);\n }, r.prototype.stop = function () {\n return this.started ? (removeEventListener(\"scroll\", this.onScroll, !1), this.started = !1) : void 0;\n }, r.prototype.scrollToElement = function (t) {\n return t.scrollIntoView();\n }, r.prototype.scrollToPosition = function (t) {\n var e, r;\n return e = t.x, r = t.y, window.scrollTo(e, r);\n }, r.prototype.onScroll = function (t) {\n return this.updatePosition({\n x: window.pageXOffset,\n y: window.pageYOffset\n });\n }, r.prototype.updatePosition = function (t) {\n var e;\n return this.position = t, null != (e = this.delegate) ? e.scrollPositionChanged(this.position) : void 0;\n }, r;\n }();\n }.call(this), function () {\n e.SnapshotCache = function () {\n function t(t) {\n this.size = t, this.keys = [], this.snapshots = {};\n }\n\n var r;\n return t.prototype.has = function (t) {\n var e;\n return e = r(t), e in this.snapshots;\n }, t.prototype.get = function (t) {\n var e;\n if (this.has(t)) return e = this.read(t), this.touch(t), e;\n }, t.prototype.put = function (t, e) {\n return this.write(t, e), this.touch(t), e;\n }, t.prototype.read = function (t) {\n var e;\n return e = r(t), this.snapshots[e];\n }, t.prototype.write = function (t, e) {\n var n;\n return n = r(t), this.snapshots[n] = e;\n }, t.prototype.touch = function (t) {\n var e, n;\n return n = r(t), e = this.keys.indexOf(n), e > -1 && this.keys.splice(e, 1), this.keys.unshift(n), this.trim();\n }, t.prototype.trim = function () {\n var t, e, r, n, o;\n\n for (n = this.keys.splice(this.size), o = [], t = 0, r = n.length; r > t; t++) {\n e = n[t], o.push(delete this.snapshots[e]);\n }\n\n return o;\n }, r = function r(t) {\n return e.Location.wrap(t).toCacheKey();\n }, t;\n }();\n }.call(this), function () {\n var t = function t(_t8, e) {\n return function () {\n return _t8.apply(e, arguments);\n };\n };\n\n e.Visit = function () {\n function r(r, n, o) {\n this.controller = r, this.action = o, this.performScroll = t(this.performScroll, this), this.identifier = e.uuid(), this.location = e.Location.wrap(n), this.adapter = this.controller.adapter, this.state = \"initialized\", this.timingMetrics = {};\n }\n\n var n;\n return r.prototype.start = function () {\n return \"initialized\" === this.state ? (this.recordTimingMetric(\"visitStart\"), this.state = \"started\", this.adapter.visitStarted(this)) : void 0;\n }, r.prototype.cancel = function () {\n var t;\n return \"started\" === this.state ? (null != (t = this.request) && t.cancel(), this.cancelRender(), this.state = \"canceled\") : void 0;\n }, r.prototype.complete = function () {\n var t;\n return \"started\" === this.state ? (this.recordTimingMetric(\"visitEnd\"), this.state = \"completed\", \"function\" == typeof (t = this.adapter).visitCompleted && t.visitCompleted(this), this.controller.visitCompleted(this)) : void 0;\n }, r.prototype.fail = function () {\n var t;\n return \"started\" === this.state ? (this.state = \"failed\", \"function\" == typeof (t = this.adapter).visitFailed ? t.visitFailed(this) : void 0) : void 0;\n }, r.prototype.changeHistory = function () {\n var t, e;\n return this.historyChanged ? void 0 : (t = this.location.isEqualTo(this.referrer) ? \"replace\" : this.action, e = n(t), this.controller[e](this.location, this.restorationIdentifier), this.historyChanged = !0);\n }, r.prototype.issueRequest = function () {\n return this.shouldIssueRequest() && null == this.request ? (this.progress = 0, this.request = new e.HttpRequest(this, this.location, this.referrer), this.request.send()) : void 0;\n }, r.prototype.getCachedSnapshot = function () {\n var t;\n return !(t = this.controller.getCachedSnapshotForLocation(this.location)) || null != this.location.anchor && !t.hasAnchor(this.location.anchor) || \"restore\" !== this.action && !t.isPreviewable() ? void 0 : t;\n }, r.prototype.hasCachedSnapshot = function () {\n return null != this.getCachedSnapshot();\n }, r.prototype.loadCachedSnapshot = function () {\n var t, e;\n return (e = this.getCachedSnapshot()) ? (t = this.shouldIssueRequest(), this.render(function () {\n var r;\n return this.cacheSnapshot(), this.controller.render({\n snapshot: e,\n isPreview: t\n }, this.performScroll), \"function\" == typeof (r = this.adapter).visitRendered && r.visitRendered(this), t ? void 0 : this.complete();\n })) : void 0;\n }, r.prototype.loadResponse = function () {\n return null != this.response ? this.render(function () {\n var t, e;\n return this.cacheSnapshot(), this.request.failed ? (this.controller.render({\n error: this.response\n }, this.performScroll), \"function\" == typeof (t = this.adapter).visitRendered && t.visitRendered(this), this.fail()) : (this.controller.render({\n snapshot: this.response\n }, this.performScroll), \"function\" == typeof (e = this.adapter).visitRendered && e.visitRendered(this), this.complete());\n }) : void 0;\n }, r.prototype.followRedirect = function () {\n return this.redirectedToLocation && !this.followedRedirect ? (this.location = this.redirectedToLocation, this.controller.replaceHistoryWithLocationAndRestorationIdentifier(this.redirectedToLocation, this.restorationIdentifier), this.followedRedirect = !0) : void 0;\n }, r.prototype.requestStarted = function () {\n var t;\n return this.recordTimingMetric(\"requestStart\"), \"function\" == typeof (t = this.adapter).visitRequestStarted ? t.visitRequestStarted(this) : void 0;\n }, r.prototype.requestProgressed = function (t) {\n var e;\n return this.progress = t, \"function\" == typeof (e = this.adapter).visitRequestProgressed ? e.visitRequestProgressed(this) : void 0;\n }, r.prototype.requestCompletedWithResponse = function (t, r) {\n return this.response = t, null != r && (this.redirectedToLocation = e.Location.wrap(r)), this.adapter.visitRequestCompleted(this);\n }, r.prototype.requestFailedWithStatusCode = function (t, e) {\n return this.response = e, this.adapter.visitRequestFailedWithStatusCode(this, t);\n }, r.prototype.requestFinished = function () {\n var t;\n return this.recordTimingMetric(\"requestEnd\"), \"function\" == typeof (t = this.adapter).visitRequestFinished ? t.visitRequestFinished(this) : void 0;\n }, r.prototype.performScroll = function () {\n return this.scrolled ? void 0 : (\"restore\" === this.action ? this.scrollToRestoredPosition() || this.scrollToTop() : this.scrollToAnchor() || this.scrollToTop(), this.scrolled = !0);\n }, r.prototype.scrollToRestoredPosition = function () {\n var t, e;\n return t = null != (e = this.restorationData) ? e.scrollPosition : void 0, null != t ? (this.controller.scrollToPosition(t), !0) : void 0;\n }, r.prototype.scrollToAnchor = function () {\n return null != this.location.anchor ? (this.controller.scrollToAnchor(this.location.anchor), !0) : void 0;\n }, r.prototype.scrollToTop = function () {\n return this.controller.scrollToPosition({\n x: 0,\n y: 0\n });\n }, r.prototype.recordTimingMetric = function (t) {\n var e;\n return null != (e = this.timingMetrics)[t] ? e[t] : e[t] = new Date().getTime();\n }, r.prototype.getTimingMetrics = function () {\n return e.copyObject(this.timingMetrics);\n }, n = function n(t) {\n switch (t) {\n case \"replace\":\n return \"replaceHistoryWithLocationAndRestorationIdentifier\";\n\n case \"advance\":\n case \"restore\":\n return \"pushHistoryWithLocationAndRestorationIdentifier\";\n }\n }, r.prototype.shouldIssueRequest = function () {\n return \"restore\" === this.action ? !this.hasCachedSnapshot() : !0;\n }, r.prototype.cacheSnapshot = function () {\n return this.snapshotCached ? void 0 : (this.controller.cacheSnapshot(), this.snapshotCached = !0);\n }, r.prototype.render = function (t) {\n return this.cancelRender(), this.frame = requestAnimationFrame(function (e) {\n return function () {\n return e.frame = null, t.call(e);\n };\n }(this));\n }, r.prototype.cancelRender = function () {\n return this.frame ? cancelAnimationFrame(this.frame) : void 0;\n }, r;\n }();\n }.call(this), function () {\n var t = function t(_t9, e) {\n return function () {\n return _t9.apply(e, arguments);\n };\n };\n\n e.Controller = function () {\n function r() {\n this.clickBubbled = t(this.clickBubbled, this), this.clickCaptured = t(this.clickCaptured, this), this.pageLoaded = t(this.pageLoaded, this), this.history = new e.History(this), this.view = new e.View(this), this.scrollManager = new e.ScrollManager(this), this.restorationData = {}, this.clearCache(), this.setProgressBarDelay(500);\n }\n\n return r.prototype.start = function () {\n return e.supported && !this.started ? (addEventListener(\"click\", this.clickCaptured, !0), addEventListener(\"DOMContentLoaded\", this.pageLoaded, !1), this.scrollManager.start(), this.startHistory(), this.started = !0, this.enabled = !0) : void 0;\n }, r.prototype.disable = function () {\n return this.enabled = !1;\n }, r.prototype.stop = function () {\n return this.started ? (removeEventListener(\"click\", this.clickCaptured, !0), removeEventListener(\"DOMContentLoaded\", this.pageLoaded, !1), this.scrollManager.stop(), this.stopHistory(), this.started = !1) : void 0;\n }, r.prototype.clearCache = function () {\n return this.cache = new e.SnapshotCache(10);\n }, r.prototype.visit = function (t, r) {\n var n, o;\n return null == r && (r = {}), t = e.Location.wrap(t), this.applicationAllowsVisitingLocation(t) ? this.locationIsVisitable(t) ? (n = null != (o = r.action) ? o : \"advance\", this.adapter.visitProposedToLocationWithAction(t, n)) : window.location = t : void 0;\n }, r.prototype.startVisitToLocationWithAction = function (t, r, n) {\n var o;\n return e.supported ? (o = this.getRestorationDataForIdentifier(n), this.startVisit(t, r, {\n restorationData: o\n })) : window.location = t;\n }, r.prototype.setProgressBarDelay = function (t) {\n return this.progressBarDelay = t;\n }, r.prototype.startHistory = function () {\n return this.location = e.Location.wrap(window.location), this.restorationIdentifier = e.uuid(), this.history.start(), this.history.replace(this.location, this.restorationIdentifier);\n }, r.prototype.stopHistory = function () {\n return this.history.stop();\n }, r.prototype.pushHistoryWithLocationAndRestorationIdentifier = function (t, r) {\n return this.restorationIdentifier = r, this.location = e.Location.wrap(t), this.history.push(this.location, this.restorationIdentifier);\n }, r.prototype.replaceHistoryWithLocationAndRestorationIdentifier = function (t, r) {\n return this.restorationIdentifier = r, this.location = e.Location.wrap(t), this.history.replace(this.location, this.restorationIdentifier);\n }, r.prototype.historyPoppedToLocationWithRestorationIdentifier = function (t, r) {\n var n;\n return this.restorationIdentifier = r, this.enabled ? (n = this.getRestorationDataForIdentifier(this.restorationIdentifier), this.startVisit(t, \"restore\", {\n restorationIdentifier: this.restorationIdentifier,\n restorationData: n,\n historyChanged: !0\n }), this.location = e.Location.wrap(t)) : this.adapter.pageInvalidated();\n }, r.prototype.getCachedSnapshotForLocation = function (t) {\n var e;\n return null != (e = this.cache.get(t)) ? e.clone() : void 0;\n }, r.prototype.shouldCacheSnapshot = function () {\n return this.view.getSnapshot().isCacheable();\n }, r.prototype.cacheSnapshot = function () {\n var t, r;\n return this.shouldCacheSnapshot() ? (this.notifyApplicationBeforeCachingSnapshot(), r = this.view.getSnapshot(), t = this.lastRenderedLocation, e.defer(function (e) {\n return function () {\n return e.cache.put(t, r.clone());\n };\n }(this))) : void 0;\n }, r.prototype.scrollToAnchor = function (t) {\n var e;\n return (e = this.view.getElementForAnchor(t)) ? this.scrollToElement(e) : this.scrollToPosition({\n x: 0,\n y: 0\n });\n }, r.prototype.scrollToElement = function (t) {\n return this.scrollManager.scrollToElement(t);\n }, r.prototype.scrollToPosition = function (t) {\n return this.scrollManager.scrollToPosition(t);\n }, r.prototype.scrollPositionChanged = function (t) {\n var e;\n return e = this.getCurrentRestorationData(), e.scrollPosition = t;\n }, r.prototype.render = function (t, e) {\n return this.view.render(t, e);\n }, r.prototype.viewInvalidated = function () {\n return this.adapter.pageInvalidated();\n }, r.prototype.viewWillRender = function (t) {\n return this.notifyApplicationBeforeRender(t);\n }, r.prototype.viewRendered = function () {\n return this.lastRenderedLocation = this.currentVisit.location, this.notifyApplicationAfterRender();\n }, r.prototype.pageLoaded = function () {\n return this.lastRenderedLocation = this.location, this.notifyApplicationAfterPageLoad();\n }, r.prototype.clickCaptured = function () {\n return removeEventListener(\"click\", this.clickBubbled, !1), addEventListener(\"click\", this.clickBubbled, !1);\n }, r.prototype.clickBubbled = function (t) {\n var e, r, n;\n return this.enabled && this.clickEventIsSignificant(t) && (r = this.getVisitableLinkForNode(t.target)) && (n = this.getVisitableLocationForLink(r)) && this.applicationAllowsFollowingLinkToLocation(r, n) ? (t.preventDefault(), e = this.getActionForLink(r), this.visit(n, {\n action: e\n })) : void 0;\n }, r.prototype.applicationAllowsFollowingLinkToLocation = function (t, e) {\n var r;\n return r = this.notifyApplicationAfterClickingLinkToLocation(t, e), !r.defaultPrevented;\n }, r.prototype.applicationAllowsVisitingLocation = function (t) {\n var e;\n return e = this.notifyApplicationBeforeVisitingLocation(t), !e.defaultPrevented;\n }, r.prototype.notifyApplicationAfterClickingLinkToLocation = function (t, r) {\n return e.dispatch(\"turbolinks:click\", {\n target: t,\n data: {\n url: r.absoluteURL\n },\n cancelable: !0\n });\n }, r.prototype.notifyApplicationBeforeVisitingLocation = function (t) {\n return e.dispatch(\"turbolinks:before-visit\", {\n data: {\n url: t.absoluteURL\n },\n cancelable: !0\n });\n }, r.prototype.notifyApplicationAfterVisitingLocation = function (t) {\n return e.dispatch(\"turbolinks:visit\", {\n data: {\n url: t.absoluteURL\n }\n });\n }, r.prototype.notifyApplicationBeforeCachingSnapshot = function () {\n return e.dispatch(\"turbolinks:before-cache\");\n }, r.prototype.notifyApplicationBeforeRender = function (t) {\n return e.dispatch(\"turbolinks:before-render\", {\n data: {\n newBody: t\n }\n });\n }, r.prototype.notifyApplicationAfterRender = function () {\n return e.dispatch(\"turbolinks:render\");\n }, r.prototype.notifyApplicationAfterPageLoad = function (t) {\n return null == t && (t = {}), e.dispatch(\"turbolinks:load\", {\n data: {\n url: this.location.absoluteURL,\n timing: t\n }\n });\n }, r.prototype.startVisit = function (t, e, r) {\n var n;\n return null != (n = this.currentVisit) && n.cancel(), this.currentVisit = this.createVisit(t, e, r), this.currentVisit.start(), this.notifyApplicationAfterVisitingLocation(t);\n }, r.prototype.createVisit = function (t, r, n) {\n var o, i, s, a, u;\n return i = null != n ? n : {}, a = i.restorationIdentifier, s = i.restorationData, o = i.historyChanged, u = new e.Visit(this, t, r), u.restorationIdentifier = null != a ? a : e.uuid(), u.restorationData = e.copyObject(s), u.historyChanged = o, u.referrer = this.location, u;\n }, r.prototype.visitCompleted = function (t) {\n return this.notifyApplicationAfterPageLoad(t.getTimingMetrics());\n }, r.prototype.clickEventIsSignificant = function (t) {\n return !(t.defaultPrevented || t.target.isContentEditable || t.which > 1 || t.altKey || t.ctrlKey || t.metaKey || t.shiftKey);\n }, r.prototype.getVisitableLinkForNode = function (t) {\n return this.nodeIsVisitable(t) ? e.closest(t, \"a[href]:not([target]):not([download])\") : void 0;\n }, r.prototype.getVisitableLocationForLink = function (t) {\n var r;\n return r = new e.Location(t.getAttribute(\"href\")), this.locationIsVisitable(r) ? r : void 0;\n }, r.prototype.getActionForLink = function (t) {\n var e;\n return null != (e = t.getAttribute(\"data-turbolinks-action\")) ? e : \"advance\";\n }, r.prototype.nodeIsVisitable = function (t) {\n var r;\n return (r = e.closest(t, \"[data-turbolinks]\")) ? \"false\" !== r.getAttribute(\"data-turbolinks\") : !0;\n }, r.prototype.locationIsVisitable = function (t) {\n return t.isPrefixedBy(this.view.getRootLocation()) && t.isHTML();\n }, r.prototype.getCurrentRestorationData = function () {\n return this.getRestorationDataForIdentifier(this.restorationIdentifier);\n }, r.prototype.getRestorationDataForIdentifier = function (t) {\n var e;\n return null != (e = this.restorationData)[t] ? e[t] : e[t] = {};\n }, r;\n }();\n }.call(this), function () {\n !function () {\n var t, e;\n if ((t = e = document.currentScript) && !e.hasAttribute(\"data-turbolinks-suppress-warning\")) for (; t = t.parentNode;) {\n if (t === document.body) return console.warn(\"You are loading Turbolinks from a