{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/markdown-it/lib/common/utils.js","webpack:///./node_modules/codemirror/lib/codemirror.js","webpack:///./node_modules/@stimulus/core/dist/src/event_listener.js","webpack:///./node_modules/@stimulus/core/dist/src/dispatcher.js","webpack:///./node_modules/@stimulus/core/dist/src/action_descriptor.js","webpack:///./node_modules/@stimulus/core/dist/src/action.js","webpack:///./node_modules/@stimulus/core/dist/src/binding.js","webpack:///./node_modules/@stimulus/mutation-observers/dist/src/element_observer.js","webpack:///./node_modules/@stimulus/mutation-observers/dist/src/attribute_observer.js","webpack:///./node_modules/@stimulus/multimap/dist/src/set_operations.js","webpack:///./node_modules/@stimulus/multimap/dist/src/multimap.js","webpack:///./node_modules/@stimulus/multimap/dist/src/indexed_multimap.js","webpack:///./node_modules/@stimulus/mutation-observers/dist/src/token_list_observer.js","webpack:///./node_modules/@stimulus/mutation-observers/dist/src/value_list_observer.js","webpack:///./node_modules/@stimulus/core/dist/src/binding_observer.js","webpack:///./node_modules/@stimulus/core/dist/src/context.js","webpack:///./node_modules/@stimulus/core/dist/src/definition.js","webpack:///./node_modules/@stimulus/core/dist/src/module.js","webpack:///./node_modules/@stimulus/core/dist/src/data_map.js","webpack:///./node_modules/@stimulus/core/dist/src/selectors.js","webpack:///./node_modules/@stimulus/core/dist/src/target_set.js","webpack:///./node_modules/@stimulus/core/dist/src/scope.js","webpack:///./node_modules/@stimulus/core/dist/src/scope_observer.js","webpack:///./node_modules/@stimulus/core/dist/src/router.js","webpack:///./node_modules/@stimulus/core/dist/src/schema.js","webpack:///./node_modules/@stimulus/core/dist/src/application.js","webpack:///./node_modules/@stimulus/core/dist/src/target_properties.js","webpack:///./node_modules/@stimulus/core/dist/src/controller.js","webpack:///./node_modules/uc.micro/categories/P/regex.js","webpack:///./node_modules/markdown-it/lib/ruler.js","webpack:///./node_modules/markdown-it/lib/token.js","webpack:///./node_modules/@rails/ujs/lib/assets/compiled/rails-ujs.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/markdown-it/lib/common/entities.js","webpack:///./node_modules/mdurl/index.js","webpack:///./node_modules/uc.micro/properties/Any/regex.js","webpack:///./node_modules/uc.micro/categories/Cc/regex.js","webpack:///./node_modules/uc.micro/categories/Z/regex.js","webpack:///./node_modules/markdown-it/lib/common/html_re.js","webpack:///./node_modules/markdown-it/lib/rules_inline/strikethrough.js","webpack:///./node_modules/markdown-it/lib/rules_inline/emphasis.js","webpack:///./node_modules/sortablejs/modular/sortable.esm.js","webpack:///./node_modules/easymde/src/js/easymde.js","webpack:///./node_modules/@rails/activestorage/app/assets/javascripts/activestorage.js","webpack:///./node_modules/turbolinks/dist/turbolinks.js","webpack:///./app/javascript/controllers sync _controller\\.js$","webpack:///./app/javascript/controllers/drag_controller.js","webpack:///./app/javascript/controllers/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/mode/meta.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:///./node_modules/markdown-it/index.js","webpack:///./node_modules/markdown-it/lib/index.js","webpack:///./node_modules/mdurl/encode.js","webpack:///./node_modules/mdurl/decode.js","webpack:///./node_modules/mdurl/format.js","webpack:///./node_modules/mdurl/parse.js","webpack:///./node_modules/uc.micro/index.js","webpack:///./node_modules/uc.micro/categories/Cf/regex.js","webpack:///./node_modules/markdown-it/lib/helpers/index.js","webpack:///./node_modules/markdown-it/lib/helpers/parse_link_label.js","webpack:///./node_modules/markdown-it/lib/helpers/parse_link_destination.js","webpack:///./node_modules/markdown-it/lib/helpers/parse_link_title.js","webpack:///./node_modules/markdown-it/lib/renderer.js","webpack:///./node_modules/markdown-it/lib/parser_core.js","webpack:///./node_modules/markdown-it/lib/rules_core/normalize.js","webpack:///./node_modules/markdown-it/lib/rules_core/block.js","webpack:///./node_modules/markdown-it/lib/rules_core/inline.js","webpack:///./node_modules/markdown-it/lib/rules_core/linkify.js","webpack:///./node_modules/markdown-it/lib/rules_core/replacements.js","webpack:///./node_modules/markdown-it/lib/rules_core/smartquotes.js","webpack:///./node_modules/markdown-it/lib/rules_core/state_core.js","webpack:///./node_modules/markdown-it/lib/parser_block.js","webpack:///./node_modules/markdown-it/lib/rules_block/table.js","webpack:///./node_modules/markdown-it/lib/rules_block/code.js","webpack:///./node_modules/markdown-it/lib/rules_block/fence.js","webpack:///./node_modules/markdown-it/lib/rules_block/blockquote.js","webpack:///./node_modules/markdown-it/lib/rules_block/hr.js","webpack:///./node_modules/markdown-it/lib/rules_block/list.js","webpack:///./node_modules/markdown-it/lib/rules_block/reference.js","webpack:///./node_modules/markdown-it/lib/rules_block/heading.js","webpack:///./node_modules/markdown-it/lib/rules_block/lheading.js","webpack:///./node_modules/markdown-it/lib/rules_block/html_block.js","webpack:///./node_modules/markdown-it/lib/common/html_blocks.js","webpack:///./node_modules/markdown-it/lib/rules_block/paragraph.js","webpack:///./node_modules/markdown-it/lib/rules_block/state_block.js","webpack:///./node_modules/markdown-it/lib/parser_inline.js","webpack:///./node_modules/markdown-it/lib/rules_inline/text.js","webpack:///./node_modules/markdown-it/lib/rules_inline/newline.js","webpack:///./node_modules/markdown-it/lib/rules_inline/escape.js","webpack:///./node_modules/markdown-it/lib/rules_inline/backticks.js","webpack:///./node_modules/markdown-it/lib/rules_inline/link.js","webpack:///./node_modules/markdown-it/lib/rules_inline/image.js","webpack:///./node_modules/markdown-it/lib/rules_inline/autolink.js","webpack:///./node_modules/markdown-it/lib/rules_inline/html_inline.js","webpack:///./node_modules/markdown-it/lib/rules_inline/entity.js","webpack:///./node_modules/markdown-it/lib/rules_inline/balance_pairs.js","webpack:///./node_modules/markdown-it/lib/rules_inline/text_collapse.js","webpack:///./node_modules/markdown-it/lib/rules_inline/state_inline.js","webpack:///./node_modules/linkify-it/index.js","webpack:///./node_modules/linkify-it/lib/re.js","webpack:///./node_modules/node-libs-browser/node_modules/punycode/punycode.js","webpack:///(webpack)/buildin/module.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/markdown-it/lib/presets/default.js","webpack:///./node_modules/markdown-it/lib/presets/zero.js","webpack:///./node_modules/markdown-it/lib/presets/commonmark.js","webpack:///./app/javascript/controllers/flash_controller.js","webpack:///./app/javascript/controllers/index.js","webpack:///./node_modules/@stimulus/webpack-helpers/dist/index.js","webpack:///./app/javascript/packs/application.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","_hasOwnProperty","has","isValidEntityCode","fromCodePoint","surrogate1","surrogate2","String","fromCharCode","UNESCAPE_MD_RE","UNESCAPE_ALL_RE","RegExp","source","DIGITAL_ENTITY_TEST_RE","entities","HTML_ESCAPE_TEST_RE","HTML_ESCAPE_REPLACE_RE","HTML_REPLACEMENTS","replaceUnsafeChar","ch","REGEXP_ESCAPE_RE","UNICODE_PUNCT_RE","lib","mdurl","ucmicro","assign","obj","sources","Array","slice","arguments","forEach","TypeError","keys","isString","toString","_class","unescapeMd","str","indexOf","replace","unescapeAll","match","escaped","entity","code","charCodeAt","test","toLowerCase","parseInt","replaceEntityPattern","escapeHtml","arrayReplaceAt","src","pos","newElements","concat","isSpace","isWhiteSpace","isMdAsciiPunct","isPunctChar","escapeRE","normalizeReference","trim","toUpperCase","userAgent","navigator","platform","gecko","ie_upto10","ie_11up","exec","edge","ie","ie_version","document","documentMode","webkit","qtwebkit","chrome","presto","safari","vendor","mac_geMountainLion","phantom","ios","android","mobile","mac","chromeOS","windows","presto_version","Number","flipCtrlCmd","captureRightClick","classTest","cls","range","rmClass","node","current","className","after","index","length","removeChildren","e","count","childNodes","removeChild","firstChild","removeChildrenAndAdd","parent","appendChild","elt","tag","content","style","createElement","cssText","createTextNode","eltP","setAttribute","contains","child","nodeType","parentNode","host","activeElt","activeElement","body","shadowRoot","addClass","joinClasses","a","b","as","split","createRange","start","end","endNode","setEnd","setStart","createTextRange","moveToElementText","collapse","moveEnd","moveStart","selectInput","select","f","args","apply","copyObj","target","overwrite","prop","countColumn","string","tabSize","startIndex","startValue","search","nextTab","selectionStart","selectionEnd","_e","Delayed","this","id","time","handler","onTimeout","array","self","Date","setTimeout","set","ms","clearTimeout","scrollerGap","Pass","sel_dontScroll","scroll","sel_mouse","origin","sel_move","findColumn","goal","col","skipped","Math","min","spaceStrs","spaceStr","push","lst","arr","map","out","insertSorted","score","priority","splice","nothing","createObj","base","props","inst","nonASCIISingleCaseWordChar","isWordCharBasic","isWordChar","helper","isEmpty","extendingChars","isExtendingChar","skipExtendingChars","dir","charAt","findFirst","pred","from","to","midF","mid","ceil","floor","iterateBidiSections","order","found","part","max","level","bidiOther","getBidiPartAt","sticky","cur","bidiOrdering","lowTypes","arabicTypes","charType","bidiRE","isNeutral","isStrong","countsAsLeft","countsAsNum","BidiSpan","direction","outerType","len","types","i$1","prev","type","i$2","type$1","i$3","prev$1","type$2","i$4","type$3","j","i$5","cur$1","type$4","i$6","end$1","before","replace$1","j$1","i$7","at","isRTL","j$2","nstart","unshift","reverse","getOrder","line","text","noHandlers","on","emitter","addEventListener","attachEvent","_handlers","getHandlers","off","removeEventListener","detachEvent","signal","handlers","signalDOMEvent","cm","override","preventDefault","defaultPrevented","e_defaultPrevented","codemirrorIgnore","signalCursorActivity","cursorActivity","curOp","cursorActivityHandlers","hasHandler","eventMixin","ctor","e_preventDefault","returnValue","e_stopPropagation","stopPropagation","cancelBubble","e_stop","e_target","srcElement","e_button","which","button","ctrlKey","zwspSupported","badBidiRects","dragAndDrop","div","zeroWidthElement","measure","offsetHeight","offsetWidth","hasBadBidiRects","txt","r0","getBoundingClientRect","r1","left","right","splitLinesAuto","result","nl","rt","hasSelection","window","getSelection","te","ownerDocument","selection","parentElement","compareEndPoints","hasCopyEvent","oncopy","badZoomedRects","hasBadZoomedRects","normal","fromRange","abs","modes","mimeModes","defineMode","dependencies","defineMIME","mime","spec","resolveMode","getMode","options","mfactory","modeObj","modeExtensions","exts","helperType","modeProps","prop$1","extendMode","properties","copyState","state","nstate","val","innerMode","info","startState","a1","a2","StringStream","lineOracle","lastColumnPos","lastColumnValue","lineStart","getLine","doc","first","size","Error","chunk","lines","children","sz","chunkSize","getBetween","iter","getLines","updateLineHeight","height","diff","lineNo","no","lineAtHeight","h","outer","lh","isLine","lineNumberFor","lineNumberFormatter","firstLineNumber","Pos","cmp","equalCursorPos","copyPos","x","maxPos","minPos","clipLine","clipPos","last","clipToLen","linelen","clipPosArray","eol","sol","peek","undefined","next","eat","eatWhile","eatSpace","skipToEnd","skipTo","backUp","column","indentation","pattern","consume","caseInsensitive","cased","substr","hideFirstChars","inner","lookAhead","oracle","baseToken","SavedContext","Context","maxLookAhead","baseTokens","baseTokenPos","highlightLine","context","forceToEnd","st","modeGen","lineClasses","runMode","loop","overlay","overlays","i_end","opaque","styles","classes","bgClass","textClass","getLineStyles","updateFrontier","getContextBefore","resetState","maxHighlightLength","stateAfter","save","styleClasses","highlightFrontier","modeFrontier","precise","display","findStartLine","saved","fromSaved","processLine","viewFrom","viewTo","nextLine","startAt","stream","callBlankLine","readToken","blankLine","token","copy","Token","takeToken","asArray","tokens","extractLineClasses","output","lineClass","flattenSpans","curStart","curStyle","addModeClass","mName","minindent","minline","lim","indented","retreatFrontier","sawReadOnlySpans","sawCollapsedSpans","seeReadOnlySpans","seeCollapsedSpans","MarkedSpan","marker","getMarkedSpanFor","spans","span","removeMarkedSpan","addMarkedSpan","markedSpans","attachLine","markedSpansBefore","old","startCh","isInsert","nw","inclusiveLeft","insertLeft","endsAfter","inclusiveRight","markedSpansAfter","endCh","startsBefore","stretchSpansOverChange","change","full","oldFirst","oldLast","sameLine","offset","span$1","clearEmptySpans","newMarkers","gapMarkers","gap","clearWhenEmpty","removeReadOnlyRanges","markers","mark","readOnly","parts","mk","find","newParts","dfrom","dto","detachMarkedSpans","detachLine","attachMarkedSpans","extraLeft","extraRight","compareCollapsedMarkers","lenDiff","aPos","bPos","fromCmp","toCmp","collapsedSpanAtSide","sps","sp","collapsed","collapsedSpanAtStart","collapsedSpanAtEnd","collapsedSpanAround","conflictingCollapsedRange","visualLine","merged","visualLineEnd","visualLineContinued","visualLineNo","lineN","vis","visualLineEndNo","lastLine","lineIsHidden","widgetNode","lineIsHiddenInner","heightAtLine","lineObj","lineLength","found$1","findMaxLine","maxLine","maxLineLength","maxLineChanged","Line","estimateHeight","updateLine","estHeight","cleanUpLine","styleToClassCache","styleToClassCacheWithMode","interpretTokenStyle","cache","buildLineContent","lineView","builder","pre","trailingSpace","splitSpaces","getOption","rest","addToken","buildToken","buildTokenBadBidi","insertLineContent","externalMeasured","maps","caches","lastChild","querySelector","defaultSpecialCharPlaceholder","title","startStyle","endStyle","css","attributes","displayText","special","specialChars","mustWrap","createDocumentFragment","lastIndex","txt$1","tabWidth","specialCharPlaceholder","fullStyle","attr","trailingBefore","spaceBefore","buildCollapsedSpan","ignoreWidget","widget","input","needsContentAttribute","setUneditable","allText","spanStyle","spanEndStyle","spanStartStyle","nextChange","Infinity","foundBookmarks","endStyles","upto","tokenText","LineView","hidden","buildViewArray","nextPos","view","operationGroup","pushOperation","op","ops","ownsGroup","delayedCallbacks","fireCallbacksForOps","group","callbacks","cursorActivityCalled","finishOperation","endCb","orphanDelayedCallbacks","signalLater","list","fireOrphanDelayed","delayed","updateLineForChanges","dims","changes","updateLineText","updateLineGutter","updateLineClasses","updateLineWidgets","ensureLineWrapped","replaceChild","zIndex","updateLineBackground","background","wrap","insertBefore","getLineContent","ext","built","wrapClass","gutter","gutterBackground","gutterClass","fixedGutter","fixedPos","gutterTotalWidth","gutterMarkers","lineNumbers","wrap$1","gutterWrap","lineNumber","gutterLeft","lineNumInnerWidth","k","gutterSpecs","gutterWidth","alignable","isWidget","nextSibling","insertLineWidgets","buildLineElement","insertLineWidgetsFor","allowAbove","widgets","ws","handleMouseEvents","positionLineWidget","above","noHScroll","width","wrapperWidth","coverGutter","paddingLeft","position","marginLeft","widgetHeight","parentStyle","gutters","wrapper","clientWidth","eventInWidget","getAttribute","sizer","mover","paddingTop","lineSpace","offsetTop","paddingVert","paddingH","cachedPaddingH","getComputedStyle","currentStyle","data","paddingRight","isNaN","scrollGap","nativeBarWidth","displayWidth","scroller","barWidth","displayHeight","clientHeight","barHeight","ensureLineHeights","rect","wrapping","lineWrapping","curWidth","heights","rects","getClientRects","bottom","top","mapFromLineView","updateExternalMeasurement","lineMeasure","measureChar","bias","measureCharPrepared","prepareMeasureForLine","findViewForLine","findViewIndex","getDimensions","forceUpdate","hasHeights","prepared","varHeight","measureCharInner","bogus","rtop","rbottom","measureText","nullRect","nodeAndOffsetInLineMap","mStart","mEnd","coverStart","coverEnd","getUsefulRect","place","maybeUpdateRectForZooming","rSpan","charWidth","rbot","bot","singleCursorHeightPerLine","screen","logicalXDPI","deviceXDPI","scaleX","scaleY","logicalYDPI","deviceYDPI","clearLineMeasurementCacheFor","clearLineMeasurementCache","externalMeasure","clearCaches","cachedCharWidth","cachedTextHeight","lineNumChars","pageScrollX","pageXOffset","documentElement","scrollLeft","pageScrollY","marginTop","pageYOffset","scrollTop","widgetTopHeight","intoCoordSystem","includeWidgets","yOff","viewOffset","lOff","xOff","fromCoordSystem","coords","localBox","lineSpaceBox","charCoords","cursorCoords","preparedMeasure","getBidi","partPos","invert","other","estimateCoords","PosWithInfo","outside","xRel","coordsChar","y","coordsCharInner","rangeEnd","wrappedLineExtent","begin","wrappedLineExtentChar","boxIsAfter","box","ltr","coordsBidiPartWrapped","coordsBidiPart","baseX","chAround","boxAround","atLeft","atStart","_lineNo","ref","closestDist","endX","dist","textHeight","anchor","clientLeft","offsetLeft","compensateForHScroll","th","perLine","widgetsHeight","estimateLineHeights","est","posFromMouse","liberal","forRect","space","clientX","clientY","e$1","colDiff","round","regChange","lendiff","updateLineNumbers","viewChanged","resetView","cut","viewCuttingPoint","cut$1","cutTop","cutBot","regLineChange","oldN","newN","adjustView","countDirtyView","dirty","updateSelection","showSelection","prepareSelection","primary","curFragment","cursors","selFragment","sel","ranges","primIndex","empty","showCursorWhenSelecting","drawSelectionCursor","head","drawSelectionRange","cursor","cursorHeight","otherCursor","cmpCoords","fragment","padding","leftSide","rightSide","sizerWidth","docLTR","add","drawForLine","fromArg","toArg","lineLen","wrapX","side","extent","fromPos","toPos","openStart","openEnd","openRight","topLeft","topRight","botLeft","botRight","sFrom","sTo","fromLine","toLine","singleVLine","leftEnd","rightStart","restartBlink","focused","clearInterval","blinker","cursorDiv","visibility","cursorBlinkRate","setInterval","ensureFocus","focus","onFocus","delayBlurEvent","delayingBlurEvent","onBlur","selForContextMenu","reset","receivedFocus","shift","updateHeightsInViewport","prevBottom","lineDiv","updateWidgetHeight","chWidth","w","visibleLines","viewport","ensure","ensureFrom","ensureTo","maybeScrollWindow","doScroll","innerHeight","scrollNode","scrollIntoView","scrollPosIntoView","margin","limit","changed","endCoords","scrollPos","calculateScrollPos","startTop","startLeft","updateScrollTop","setScrollLeft","snapMargin","screentop","docBottom","atTop","atBottom","newTop","screenleft","screenw","tooWide","addToScrollTop","resolveScrollToPos","ensureCursorVisible","getCursor","scrollToPos","cursorScrollMargin","scrollToCoords","scrollToRange","scrollToCoordsRange","sPos","updateDisplaySimple","setScrollTop","startWorker","forceScroll","scrollHeight","scrollbars","isScroller","scrollWidth","alignHorizontally","measureForScrollbars","gutterW","docH","viewHeight","viewWidth","barLeft","docHeight","NativeScrollbars","vert","horiz","tabIndex","checkedZeroWidth","minHeight","minWidth","update","needsH","needsV","sWidth","totalHeight","totalWidth","zeroWidthHack","disableHoriz","enableZeroWidthBar","disableVert","pointerEvents","bar","delay","maybeDisable","elementFromPoint","clear","NullScrollbars","updateScrollbars","startWidth","startHeight","updateScrollbarsInner","sizes","paddingBottom","heightForcer","borderBottom","scrollbarFiller","coverGutterNextToScrollbar","gutterFiller","scrollbarModel","initScrollbars","scrollbarStyle","axis","nextOpId","startOperation","updateInput","typing","changeObjs","selectionChanged","updateMaxLine","endOperation","endOperations","endOperation_R1","endOperation_W1","endOperation_R2","endOperation_W2","endOperation_finish","maybeClipScrollbars","mustUpdate","DisplayUpdate","updatedDisplay","updateDisplayIfNeeded","barMeasure","adjustWidthTo","maxScrollLeft","preparedSelection","takeFocus","setDocumentHeight","postUpdateDisplay","wheelStartX","wheelStartY","maybeHiddenMarkers","unhidden","maybeUnhiddenMarkers","finish","runInOp","operation","methodOp","docMethodOp","highlight","highlightWorker","workTime","changedLines","oldStyles","highlighted","oldCls","newCls","ischange","workDelay","force","visible","editorIsHidden","wrapperHeight","oldDisplayWidth","events","scrollbarsClipped","marginBottom","borderRightWidth","selectionSnapshot","hasFocus","active","anchorNode","extend","anchorOffset","focusNode","focusOffset","restoreSelection","snapshot","nodeName","removeAllRanges","addRange","renderedView","maybeUpdateLineNumberWidth","viewportMargin","different","lastWrapHeight","lastWrapWidth","toUpdate","selSnapshot","patchDisplay","selectionDiv","reportedViewFrom","reportedViewTo","updateNumbersFrom","container","rm","currentWheelTarget","updateNumber","updateGutterSpace","alignWidgets","comp","align","innerW","lineGutter","lineNumWidth","getGutters","sawLineNumbers","renderGutters","specs","gElt","updateGutters","Display","draggable","wheelDX","wheelDY","activeTouch","init","wheelSamples","wheelPixelsPerUnit","wheelEventDelta","dx","wheelDeltaX","dy","wheelDeltaY","detail","HORIZONTAL_AXIS","VERTICAL_AXIS","wheelDelta","wheelEventPixels","delta","onScrollWheel","canScrollX","canScrollY","pixels","movedX","movedY","sample","Selection","equals","here","there","deepCopy","Range","somethingSelected","normalizeSelection","mayTouch","selectionsMayTouch","prim","sort","inv","simpleSelection","changeEnd","adjustForChange","computeSelAfterChange","offsetPos","computeReplacedSel","hint","oldPrev","newPrev","loadMode","modeOption","resetModeState","isWholeLineUpdate","wholeLineUpdateBefore","updateDoc","spansFor","linesFor","firstLine","lastText","lastSpans","nlines","insert","remove","added","added$1","added$2","linkedDocs","sharedHistOnly","propagate","skip","sharedHist","linked","rel","shared","attachDoc","setDirectionClass","directionChanged","History","startGen","done","undone","undoDepth","lastModTime","lastSelTime","lastOp","lastSelOp","lastOrigin","lastSelOrigin","generation","maxGeneration","historyChangeFromChange","histChange","attachLocalSpans","clearSelectionEvents","pop","lastChangeEvent","hist","addChangeToHistory","selAfter","opId","history","historyEventDelay","pushSelectionToHistory","selectionEventCanBeMerged","addSelectionToHistory","clearRedo","dest","existing","removeClearedSpans","explicitlyCleared","getOldSpans","mergeOldSpans","stretched","oldCur","stretchCur","copyHistoryArray","newGroup","instantiateSel","event","newChanges","extendRange","posBefore","extendSelection","setSelection","extendSelections","heads","replaceOneSelection","setSimpleSelection","filterSelectionChange","setSelectionReplaceHistory","setSelectionNoUndo","NaN","setSelectionInner","skipAtomicInSelection","reCheckSelection","mayClear","newAnchor","skipAtomic","newHead","skipAtomicInner","oldPos","preventCursorLeft","selectLeft","preventCursorRight","selectRight","atomic","near","movePos","far","cantEdit","selectAll","filterChange","canceled","cancel","makeChange","ignoreReadOnly","suppressEdits","makeChangeInner","makeChangeSingleDoc","rebased","rebaseHist","makeChangeFromHistory","allowSelectionOnly","suppress","antiChanges","filter","returned","v","shiftDoc","distance","removed","makeChangeSingleDocInEditor","recomputeMaxLength","checkWidthStart","changesHandler","changeHandler","replaceRange","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","addLineWidget","insertAt","aboveVisible","this$1","oldH","nextMarkerId","TextMarker","markText","markTextShared","replacedWith","addToHistory","curLine","clearOnEnter","clearHistory","withOp","visual","dHeight","SharedTextMarker","cloneNode","isParent","findSharedMarkers","findMarks","copySharedMarkers","mFrom","mTo","subMark","detachSharedMarkers","subMarker","nextDocId","Doc","lineSep","cleanGeneration","constructor","getValue","join","lineSeparator","setValue","getRange","getLineHandle","getLineNumber","getLineHandleVisualStart","lineCount","listSelections","setCursor","extendSelectionsBy","setSelections","addSelection","getSelections","replaceSelection","dup","replaceSelections","newSel","undo","redo","undoSelection","redoSelection","setExtending","getExtending","historySize","markClean","changeGeneration","forceSplit","isClean","gen","getHistory","setHistory","histData","setGutterMarker","gutterID","clearGutter","lineInfo","addLineClass","where","removeLineClass","removeLineWidget","setBookmark","realOpts","findMarksAt","getAllMarks","posFromIndex","sepSize","indexFromPos","copyHistory","linkedDoc","unlinkDoc","CodeMirror","splitIds","iterLinkedDocs","getEditor","setDirection","eachLine","lastDrop","onDrop","clearDragCursor","files","dataTransfer","isReadOnly","FileReader","File","read","markAsReadAndPasteIfAllFilesAreRead","readTextFromFile","file","allowDropFileTypes","reader","onerror","onload","readAsText","draggingText","text$1","getData","selected","onDragStart","setData","effectAllowed","setDragImage","img","_top","onDragOver","frag","dragCursor","forEachCodeMirror","getElementsByClassName","byClass","editors","globalsRegistered","ensureGlobalHandlers","registerGlobalHandlers","resizeTimer","onResize","setSize","keyNames","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","moveVisually","bidi","mv","getWrappedLineExtent","moveInStorageOrder","searchInVisualLine","getRes","res","nextCh","basic","pcDefault","emacsy","macDefault","commands","singleSelection","killLine","deleteLine","delLineLeft","delWrappedLineLeft","delWrappedLineRight","rightPos","goDocStart","goDocEnd","goLineStart","goLineStartSmart","lineStartSmart","goLineEnd","lineEnd","goLineRight","goLineLeft","goLineLeftSmart","goLineUp","moveV","goLineDown","goPageUp","goPageDown","goCharLeft","moveH","goCharRight","goColumnLeft","goColumnRight","goWordLeft","goGroupRight","goGroupLeft","goWordRight","delCharBefore","deleteH","delCharAfter","delWordBefore","delWordAfter","delGroupBefore","delGroupAfter","indentAuto","indentSelection","indentMore","indentLess","insertTab","insertSoftTab","spaces","defaultTab","execCommand","transposeChars","newlineAndIndent","sels","indentLine","openLine","toggleOverwrite","firstNonWS","inWS","doHandleBinding","bound","dropShift","ensurePolled","prevShift","lookupKeyForEditor","keyMaps","extraKeys","stopSeq","dispatchKey","seq","keySeq","dispatchKeyInner","handleKeyBinding","motion","handleCharBinding","lastStoppedKey","onKeyDown","getField","handled","showCrossHair","up","onKeyUp","onKeyPress","charCode","lastClick","lastDoubleClick","DOUBLECLICK_DELAY","PastClick","clickRepeat","now","compare","onMouseDown","supportsTouch","clickInGutter","repeat","selectingText","handleMappedButton","leftButtonDown","onContextMenu","configureMouse","option","unit","addNew","moveOnDrag","contained","behavior","dragDrop","leftButtonStartDrag","leftButtonSelect","moved","dragEnd","mouseMove","dragStart","preventScroll","e2","rangeForUnit","findWordAt","ourRange","ourIndex","startSel","lastPos","extendTo","startCol","posCol","leftPos","oldRange","ranges$1","bidiSimplify","editorSize","counter","curCount","move","buttons","anchorLine","boundary","headIndex","usePart","gutterEvent","prevent","mX","mY","touches","lineBox","g","contextMenuInGutter","themeChanged","theme","Init","defaults","optionHandlers","defineOptions","deflt","notOnInit","defineOption","newBreaks","refresh","getInputField","spellcheck","autocorrect","autocapitalize","detach","attach","wrappingChanged","integer","blur","readOnlyChanged","screenReaderLabelChanged","dragDropChanged","resetPosition","funcs","dragFunctions","toggle","enter","over","leave","drop","inputStyles","inputStyle","pasteIncoming","cutIncoming","autofocus","registerEventHandlers","finishInit","initHooks","textRendering","word","touchFinished","prevTouch","finishTouch","isMouseLikeTouchEvent","touch","radiusX","radiusY","farAway","pageX","pageY","inp","how","aggressive","indent","curSpace","curSpaceString","indentUnit","indentString","indentWithTabs","pos$1","defineInitHook","lastCopied","setLastCopied","newLastCopied","applyTextInput","inserted","deleted","recent","paste","textLines","multiPaste","pasteLinesPerSelection","lineWise","changeEvent","triggerElectric","handlePaste","pasted","clipboardData","disableInput","electricChars","smartIndent","getModeAt","electricInput","copyableRanges","lineRange","disableBrowserMagic","field","hiddenTextarea","border","addEditorMethods","helpers","setOption","getDoc","addKeyMap","removeKeyMap","addOverlay","modeSpec","removeOverlay","newRanges","getTokenAt","getLineTokens","getTokenTypeAt","getHelper","getHelpers","help","_global","getStateAfter","defaultTextHeight","defaultCharWidth","getViewport","addWidget","vspace","hspace","triggerOnKeyDown","triggerOnKeyPress","triggerOnKeyUp","triggerOnMouseDown","findPosH","amount","hitSide","rtlMoveVisually","findPosV","goalColumn","goals","headPos","startChar","check","scrollTo","getScrollInfo","interpret","swapDoc","phrase","phraseText","phrases","getWrapperElement","getScrollerElement","getGutterElement","registerHelper","registerGlobalHelper","predicate","origDir","lineDir","findNextLine","moveOnce","boundToLine","sawType","pageSize","moveAmount","ContentEditableInput","lastAnchorNode","lastAnchorOffset","lastFocusNode","lastFocusOffset","polling","composing","gracePeriod","readDOMTimeout","posToDOM","isInGutter","scan","badPos","bad","domTextBetween","closing","extraLinebreak","recognizeMarker","close","addText","walk","cmText","markerID","isBlock","textContent","nodeValue","domToPos","lineNode","locateNodeInLineView","textNode","topNode","curNode","previousSibling","dist$1","belongsToInput","onCopyCut","lineWiseCopyCut","clearData","kludge","hadFocus","showPrimarySelection","updateFromDOM","readFromDOMSoon","forceCompositionEnd","label","removeAttribute","showMultipleSelections","curAnchor","curFocus","rng","rangeCount","getRangeAt","startGracePeriod","rememberSelection","selectionInEditor","commonAncestorContainer","poll","pollSelection","pollInterval","pollContent","fromIndex","fromNode","toNode","toIndex","newText","oldText","cutFront","cutEnd","oldTop","maxCutFront","newBot","oldBot","maxCutEnd","chFrom","chTo","contentEditable","TextareaInput","prevInput","pollingFast","fromTextArea","textarea","tabindex","placeholder","realSubmit","form","leaveSubmitMethodAlone","submit","wrappedSubmit","getTextArea","toTextArea","addLegacyProps","cmpPos","createField","prepareCopyCut","fastPoll","dispatchEvent","Event","_display","moveInputWithCursor","wrapOff","lineOff","teTop","teLeft","drawn","contextMenuPending","slowPoll","missed","same","resetSelectionOnContextMenu","oldScrollY","oldCSS","oldWrapperCSS","wrapperBox","offsetParent","scrollY","rehide","detectingSelectAll","prepareSelectAllHack","mouseup","extval","disabled","dontDelegate","method","defineExtension","func","defineDocExtension","version","factory","EventListener","eventTarget","eventName","unorderedBindings","Set","connect","disconnect","bindingConnected","binding","bindingDisconnected","delete","handleEvent","extendedEvent","stopImmediatePropagation_1","stopImmediatePropagation","immediatePropagationStopped","extendEvent","_i","_a","bindings","leftIndex","rightIndex","configurable","Dispatcher","application","eventListenerMaps","Map","started","eventListeners","eventListener","stop","values","reduce","listeners","fetchEventListenerForBinding","handleError","error","message","fetchEventListener","eventListenerMap","fetchEventListenerMapForEventTarget","createEventListener","descriptorPattern","parseEventTarget","eventTargetName","Action","element","descriptor","tagName","defaultEventNames","getDefaultEventNameForElement","identifier","methodName","forToken","descriptorString","matches","eventNameSuffix","Binding","action","willBeInvokedByEvent","invokeWithEvent","controller","Element","scope","containsElement","ElementObserver","delegate","_this","elements","mutationObserver","MutationObserver","mutations","processMutations","observe","childList","subtree","takeRecords","matchElementsInTree","removeElement","_b","_c","addElement","mutations_1","mutation","processMutation","processAttributeChange","attributeName","processRemovedNodes","removedNodes","processAddedNodes","addedNodes","elementAttributeChanged","matchElement","nodes","elementFromNode","processTree","elementIsActive","tree","processor","Node","ELEMENT_NODE","isConnected","elementMatched","elementUnmatched","AttributeObserver","elementObserver","hasAttribute","querySelectorAll","selector","elementMatchedAttribute","elementUnmatchedAttribute","elementAttributeValueChanged","fetch","del","prune","extendStatics","Multimap","valuesByKey","hasKey","hasValue","some","getValuesForKey","getKeysForValue","__extends","setPrototypeOf","__proto__","__","_super","IndexedMultimap","keysByValue","TokenListObserver","attributeObserver","tokensByElement","tokensMatched","readTokensForElement","refreshTokensForElement","unmatchedTokens","matchedTokens","tokensUnmatched","tokenMatched","tokenUnmatched","previousTokens","currentTokens","firstDifferingIndex","_","findIndex","tokensAreEqual","tokenString","parseTokenString","ValueListObserver","tokenListObserver","parseResultsByToken","WeakMap","valuesByTokenByElement","fetchParseResultForToken","fetchValuesByTokenForElement","elementMatchedValue","elementUnmatchedValue","parseResult","parseToken","valuesByToken","parseValueForToken","BindingObserver","bindingsByAction","valueListObserver","actionAttribute","disconnectAllActions","schema","connectAction","disconnectAction","controllerConstructor","bindingObserver","dispatcher","initialize","blessControllerConstructor","bless","extendWithReflect","Controller","_newTarget","Reflect","construct","Module","definition","blessDefinition","contextsByScope","connectedContexts","connectContextForScope","fetchContextForScope","disconnectContextForScope","DataMap","getFormattedKey","char","attributeValueContainsToken","TargetSet","targetName","targetNames","getSelectorForTargetNames","findElement","findAll","findAllElements","getSelectorForTargetName","targetDescriptor","targetAttribute","Scope","targets","tail","filterElements","closest","controllerSelector","controllerAttribute","ScopeObserver","scopesByIdentifierByElement","scopeReferenceCounts","scopesByIdentifier","fetchScopesByIdentifierForElement","referenceCount","scopeConnected","scopeDisconnected","Router","scopeObserver","modulesByIdentifier","contexts","loadDefinition","unloadIdentifier","connectModule","disconnectModule","getContextForElementAndIdentifier","defaultSchema","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","step","rejected","then","__generator","sent","trys","verb","iterator","Application","router","readyState","register","load","definitions","isArray","unload","identifiers","getControllerForElementAndIdentifier","console","defineTargetProperties","ancestors","getPrototypeOf","getAncestorsForConstructor","getOwnTargetNamesForConstructor","getTargetNamesForConstructor","capitalize","Ruler","__rules__","__cache__","__find__","__compile__","chains","rule","enabled","altName","chain","fn","beforeName","ruleName","afterName","enable","ignoreInvalid","idx","enableOnly","disable","getRules","chainName","nesting","attrs","markup","meta","block","attrIndex","attrPush","attrData","attrSet","attrGet","attrJoin","Rails","linkClickSelector","buttonClickSelector","exclude","inputChangeSelector","formSubmitSelector","formInputClickSelector","formDisableSelector","formEnableSelector","fileInputSelector","linkDisableSelector","buttonDisableSelector","nonce","loadCSPNonce","cspNonce","expando","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","xml","json","script","ajax","response","responseText","getResponseHeader","status","success","statusText","complete","beforeSend","XMLHttpRequest","OPENED","send","url","location","href","dataType","accept","open","crossDomain","withCredentials","onreadystatechange","DONE","parser","JSON","parse","DOMParser","parseFromString","isCrossDomain","originAnchor","urlAnchor","protocol","toArray","serializeElement","additionalParam","inputs","checked","encodeURIComponent","formElements","el","allowAction","handleConfirm","confirm","answer","callback","disableFormElement","disableFormElements","disableLinkElement","enableFormElement","enableFormElements","enableLinkElement","isXhrRedirect","handleDisabledElement","enableElement","disableElement","replacement","innerHTML","originalText","handleMethod","formContent","link","click","isRemote","handleRemote","enctype","FormData","append","formSubmitButtonClick","formNoValidate","preventInsignificantClick","insignificantMetaClick","jQuery","rails","ajaxPrefilter","originalOptions","_rails_loaded","cmCfg","modeCfg","htmlMode","htmlModeMissing","findModeByName","mimes","highlightFormatting","maxBlockquoteDepth","taskLists","strikethrough","emoji","fencedCodeBlockHighlighting","fencedCodeBlockDefaultMode","tokenTypeOverrides","tokenTypes","header","quote","list1","list2","list3","hr","image","imageAltText","imageMarker","formatting","linkInline","linkEmail","linkText","linkHref","em","strong","tokenType","hrRE","listRE","taskListRE","atxHeaderRE","allowAtxHeaderWithoutSpace","setextHeaderRE","textRE","fencedCodeRE","linkDefRE","punctuation","expandedTab","switchInline","inline","switchBlock","lineIsEmpty","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","localState","local","footnoteLink","md_inside","returnType","currListInd","hasExitedList","maxFencedEndInd","taskOpen","taskClosed","listMod","handleText","matchCh","regex","previousFormatting","formattingEscape","atts","substring","leftFlanking","rightFlanking","setEm","setStrong","retType","getLinkHrefInside","linkRE","endChar","returnState","footnoteLinkInside","footnoteUrl","textAfter","blockCommentStart","blockCommentEnd","closeBrackets","fold","htmlConfig","autoSelfClosers","implicitlyClosed","contextGrabbers","doNotIndent","allowUnquoted","allowMissing","caseFold","xmlConfig","allowMissingTagName","editorConf","config_","setStyle","config","inText","inBlock","doctype","inTag","baseState","inAttribute","stringStartCol","closure","isInAttribute","terminator","depth","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","encode","decode","format","open_tag","close_tag","HTML_TAG_RE","HTML_OPEN_CLOSE_TAG_RE","postProcess","delimiters","startDelim","endDelim","loneMarkers","silent","scanned","scanDelims","jump","can_open","can_close","curr","tokens_meta","_typeof","_defineProperty","writable","_extends","_objectSpread","ownKeys","getOwnPropertySymbols","sym","getOwnPropertyDescriptor","_objectWithoutProperties","excluded","sourceKeys","_objectWithoutPropertiesLoose","sourceSymbolKeys","propertyIsEnumerable","IE11OrLess","Edge","FireFox","Safari","IOS","ChromeForAndroid","captureMode","capture","passive","getParentOrHost","ctx","includeCTX","_throttleTimeout","R_SPACE","toggleClass","classList","defaultView","matrix","selfOnly","appliedTransforms","transform","matrixFn","DOMMatrix","WebKitCSSMatrix","CSSMatrix","MSCSSMatrix","getElementsByTagName","getWindowScrollingElement","scrollingElement","getRect","relativeToContainingBlock","relativeToNonStaticParent","undoScale","elRect","innerWidth","containerRect","elMatrix","isScrolledPast","elSide","parentSide","getParentAutoScrollElement","elSideVal","parentSideVal","getChild","childNum","currentChild","Sortable","ghost","dragged","lastElementChild","previousElementSibling","clone","getRelativeScrollOffset","winScroller","includeSelf","elem","gotSelf","elemCSS","overflowX","overflowY","isRectEqual","rect1","rect2","throttle","scrollBy","Polymer","Zepto","dom","getTime","AnimationStateManager","animationCallbackId","animationStates","captureAnimationState","animation","fromRect","thisAnimationDuration","childMatrix","addAnimationState","removeAnimationState","indexOfObject","animateAll","animating","animationTime","toRect","prevFromRect","prevToRect","animatingRect","targetMatrix","sqrt","pow","calculateRealTime","animate","animationResetTimer","currentRect","duration","translateX","translateY","animatingX","animatingY","repaint","easing","animated","plugins","initializeByDefault","PluginManager","mount","plugin","pluginEvent","sortable","eventCanceled","eventNameGlobal","pluginName","initializePlugins","initialized","modified","modifyOption","getEventProperties","eventProperties","modifiedValue","optionListeners","_ref","rootEl","targetEl","cloneEl","toEl","fromEl","oldIndex","newIndex","oldDraggableIndex","newDraggableIndex","originalEvent","putSortable","extraEventProperties","onName","initEvent","item","pullMode","lastPutMode","allEventProperties","dragEl","parentEl","ghostEl","nextEl","lastDownEl","cloneHidden","dragStarted","activeSortable","hideGhostForTarget","_hideGhostForTarget","unhideGhostForTarget","_unhideGhostForTarget","cloneNowHidden","cloneNowShown","dispatchSortableEvent","_dispatchEvent","activeGroup","tapEvt","touchEvt","lastDx","lastDy","tapDistanceLeft","tapDistanceTop","lastTarget","lastDirection","targetMoveDistance","ghostRelativeParent","awaitingDragStarted","ignoreNextClick","sortables","pastFirstInvertThresh","isCircumstantialInvert","ghostRelativeParentInitialScroll","_silent","savedInputChecked","documentExists","PositionGhostAbsolutely","CSSFloatProperty","supportDraggable","supportCssPointerEvents","_detectDirection","elCSS","elWidth","borderLeftWidth","child1","child2","firstChildCSS","secondChildCSS","firstChildWidth","marginRight","secondChildWidth","flexDirection","gridTemplateColumns","touchingSideChild2","_prepareGroup","toFn","pull","sameGroup","otherGroup","originalGroup","checkPull","checkPut","put","revertClone","nearestEmptyInsertDetectEvent","nearest","threshold","emptyInsertThreshold","insideHorizontally","insideVertically","ret","_onDragOver","_checkOutsideTargetEl","_isOutsideThisEl","store","swapThreshold","invertSwap","invertedSwapThreshold","removeCloneOnHide","ghostClass","chosenClass","dragClass","ignore","preventOnFilter","dropBubble","dragoverBubble","dataIdAttr","delayOnTouchOnly","touchStartThreshold","devicePixelRatio","forceFallback","fallbackClass","fallbackOnBody","fallbackTolerance","fallbackOffset","supportPointer","nativeDraggable","_onTapStart","_onMove","dragRect","targetRect","willInsertAfter","retVal","onMoveFn","onMove","draggedRect","related","relatedRect","_disableDraggable","_unsilent","_generateId","sum","_nextTick","_cancelNextTick","_getDirection","pointerType","originalTarget","path","composedPath","root","_saveInputCheckedState","isContentEditable","criteria","_prepareDragStart","dragStartFn","_lastX","_lastY","_onDrop","_disableDelayedDragEvents","_triggerDragStart","_disableDelayedDrag","_delayedDragTouchMoveHandler","_dragStartTimer","_onTouchMove","_onDragStart","err","_dragStarted","fallback","_appendGhost","_nulling","_emulateDragOver","ghostMatrix","relativeScrollOffset","cssMatrix","_hideClone","cloneId","_loopId","_dragStartId","revert","vertical","isOwner","canSort","fromSortable","completedFired","dragOverEvent","_ignoreWhileAnimating","completed","elLastChild","spacer","_ghostIsLast","targetBeforeFirstSwap","differentLevel","differentRowCol","dragElS1Opp","dragElS2Opp","dragElOppLength","targetS1Opp","targetS2Opp","targetOppLength","_dragElInRowColumn","side1","scrolledPastTop","scrollBefore","isLastTarget","mouseOnAxis","targetLength","targetS1","targetS2","_getInsertDirection","_getSwapDirection","dragIndex","nextElementSibling","moveVector","extra","insertion","_showClone","_offMoveEvents","_offUpEvents","dropEffect","_globalDragOver","items","destroy","utils","is","dst","nextTick","cancelNextTick","detectDirection","_len","_key","scrollEl","scrollRootEl","lastAutoScrollX","lastAutoScrollY","touchEvt$1","pointerElemChangedInterval","autoScrolls","scrolling","clearAutoScrolls","autoScroll","pid","clearPointerElemChangedInterval","isFallback","scrollCustomFn","sens","scrollSensitivity","speed","scrollSpeed","scrollThisInstance","scrollFn","layersOut","currentParent","scrollPosX","scrollPosY","vx","vy","layer","scrollOffsetY","scrollOffsetX","bubbleScroll","toSortable","changedTouches","onSpill","Revert","Remove","_ref2","_ref3","_ref4","parentSortable","AutoScroll","_handleAutoScroll","_handleFallbackAutoScroll","dragOverCompleted","dragOverBubble","nulling","ogElemScroller","newElem","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","isMobile","opera","fixShortcut","createToolbarDropdown","enableTooltips","createToolbarButton","childrenIndex","childElement","toolbarBuiltInButtons","enableActions","actionName","tooltip","getBindingName","createTooltip","noDisable","noMobile","classNameParts","iconClasses","classNameIndex","classNamePart","icon","iconClassIndex","iconClass","onclick","createSep","getState","stat","bold","italic","saved_overflow","editor","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","promptURLs","prompt","promptTexts","insertTexts","afterImageUploaded","imageName","lastIndexOf","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","default","openBrowseFileWindow","timeFormat","locale","hour","minute","sbOnDragEnter","sbOnDrop","sbProgress","sizeUnits","errorMessages","noFileGiven","typeNotAllowed","fileTooLarge","importError","EasyMDE","autoDownloadFA","autoDownloadFontAwesome","styleSheets","log","showIcons","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","listItems","listItem","listItemChild","HTMLInputElement","listStyleType","removeListStyleWhenCheckbox","linkString","fixedLinkString","addAnchorTargetBlank","_rendered","backdrop","spellChecker","gitHubSpice","codeMirrorInstance","styleSelectedText","nativeSpellcheck","forceSync","easyMDEContainer","cmWrapper","createToolbar","createStatusbar","_autosave_timeout","submit_delay","sideBySide","createSideBySide","temp_cm","easyMDE","binded","autosaveTimeoutId","loaded","getItem","getElementById","dd","Intl","DateTimeFormat","clearAutosavedValue","imageInput","onChange","onErrorSup","fillErrorMessage","imageUrl","formData","imageCSRFToken","request","upload","onprogress","lengthComputable","progress","total","imageUploadEndpoint","filePath","filledErrorMessage","borderTopWidth","previewMaxHeight","syncSideBySidePreviewScroll","cScroll","pScroll","ratio","parseFloat","onscroll","toolbarData","toolbarGuideIcon","hideIcons","nonSeparatorIconsFollow","toolbarTips","multiple","opacity","onUpdate","onActivity","defaultValue","isPreviewActive","isSideBySideActive","isFullscreenActive","createCommonjsModule","sparkMd5","hex_chr","md5cycle","md5blk","md5blks","md5blk_array","md51","tmp","lo","hi","md51_array","subarray","Uint8Array","rhex","hex","toUtf8","unescape","utf8Str2ArrayBuffer","returnUInt8Array","buff","ArrayBuffer","arrayBuffer2Utf8Str","concatenateArrayBuffers","second","byteLength","buffer","hexToBinaryString","SparkMD5","clamp","num","targetArray","sourceArray","appendBinary","contents","_buff","_length","_hash","raw","_finish","hash","setState","hashBinary","classCallCheck","instance","Constructor","createClass","defineProperties","protoProps","staticProps","fileSlice","mozSlice","webkitSlice","FileChecksum","chunkCount","chunkIndex","md5Buffer","fileReader","fileReaderDidLoad","fileReaderDidError","readNextChunk","binaryDigest","base64digest","btoa","readAsArrayBuffer","getMetaValue","findElements","toArray$1","eventInit","BlobRecord","checksum","filename","content_type","byte_size","responseType","requestDidLoad","requestDidError","stringify","blob","direct_upload","directUploadData","toJSON","_xhr","BlobUpload","_blob$directUploadDat","headers","DirectUpload","notify","messages","DirectUploadController","directUpload","dispatch","hiddenInput","insertAdjacentElement","dispatchError","signed_id","_this2","uploadRequestDidProgress","inputSelector","DirectUploadsController","controllers","createDirectUploadControllers","startNextController","processingAttribute","submitButtonsByForm","didClick","didSubmitForm","didSubmitRemoteElement","handleFormSubmissionEvent","submitForm","autostart","ActiveStorage","Turbolinks","supported","pushState","requestAnimationFrame","visit","clearCache","setProgressBarDelay","copyObject","defer","uuid","random","Location","absoluteURL","requestURL","getOrigin","getPath","getPathComponents","getLastPathComponent","getExtension","isHTML","isPrefixedBy","isEqualTo","toCacheKey","valueOf","HttpRequest","requestCanceled","requestTimedOut","requestFailed","requestLoaded","requestProgressed","referrer","NETWORK_FAILURE","TIMEOUT_FAILURE","timeout","notifyApplicationBeforeRequestStart","setProgress","requestStarted","abort","endRequest","requestCompletedWithResponse","failed","requestFailedWithStatusCode","notifyApplicationAfterRequestEnd","ontimeout","onabort","requestFinished","ProgressBar","trickle","stylesheetElement","createStylesheetElement","progressElement","createProgressElement","defaultCSS","show","installStylesheetElement","installProgressElement","startTrickling","hide","hiding","fadeProgressElement","uninstallProgressElement","stopTrickling","trickleInterval","BrowserAdapter","showProgressBar","progressBar","visitProposedToLocationWithAction","startVisitToLocationWithAction","visitStarted","issueRequest","changeHistory","loadCachedSnapshot","visitRequestStarted","hasCachedSnapshot","showProgressBarAfterDelay","visitRequestProgressed","visitRequestCompleted","loadResponse","visitRequestFailedWithStatusCode","reload","visitRequestFinished","hideProgressBar","visitCompleted","followRedirect","pageInvalidated","progressBarTimeout","progressBarDelay","onPageLoad","onPopState","shouldHandlePopState","turbolinks","restorationIdentifier","historyPoppedToLocationWithRestorationIdentifier","pageLoaded","pageIsLoaded","HeadDetails","outerHTML","tracked","fromHeadElement","hasElementWithKey","getTrackedElementSignature","getScriptElementsNotInDetails","getElementsMatchingTypeNotInDetails","getStylesheetElementsNotInDetails","getProvisionalElements","findMetaElementByName","Snapshot","headDetails","bodyElement","fromHTMLString","fromHTMLElement","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","ErrorRenderer","replaceHeadAndBody","activateBodyScriptElements","getScriptElements","View","htmlElement","getSnapshot","markAsPreview","renderSnapshot","renderError","ScrollManager","onScroll","scrollToElement","scrollToPosition","updatePosition","scrollPositionChanged","SnapshotCache","snapshots","write","Visit","performScroll","adapter","timingMetrics","recordTimingMetric","cancelRender","fail","visitFailed","historyChanged","shouldIssueRequest","getCachedSnapshot","getCachedSnapshotForLocation","cacheSnapshot","visitRendered","redirectedToLocation","followedRedirect","replaceHistoryWithLocationAndRestorationIdentifier","scrolled","scrollToRestoredPosition","scrollToTop","scrollToAnchor","restorationData","scrollPosition","getTimingMetrics","snapshotCached","frame","cancelAnimationFrame","clickBubbled","clickCaptured","scrollManager","startHistory","stopHistory","applicationAllowsVisitingLocation","locationIsVisitable","getRestorationDataForIdentifier","startVisit","pushHistoryWithLocationAndRestorationIdentifier","shouldCacheSnapshot","notifyApplicationBeforeCachingSnapshot","lastRenderedLocation","getCurrentRestorationData","notifyApplicationBeforeRender","currentVisit","notifyApplicationAfterRender","notifyApplicationAfterPageLoad","clickEventIsSignificant","getVisitableLinkForNode","getVisitableLocationForLink","applicationAllowsFollowingLinkToLocation","getActionForLink","notifyApplicationAfterClickingLinkToLocation","notifyApplicationBeforeVisitingLocation","notifyApplicationAfterVisitingLocation","timing","createVisit","nodeIsVisitable","currentScript","warn","webpackContext","req","webpackContextResolve","onEnd","dataset","textareaTarget","successCallback","hiddenField","encodeURI","require","linkify","typographer","emptyListRE","unorderedListRE","incrementRemainingMarkdownListNumbers","startLine","skipCount","startItem","startIndent","nextLineNumber","nextItem","nextIndent","newNumber","nextNumber","itemNumber","newlineAndIndentContinueMarkdownList","replacements","eolState","inList","inQuote","cursorBeforeBullet","endOfQuote","endOfList","numbered","bullet","tabAndIndentMarkdownList","shiftTabAndUnindentMarkdownList","setFullscreen","fullScreenRestore","setNormal","modeInfo","alias","findModeByMIME","findModeByExtension","findModeByFileName","dot","clearPlaceholder","setPlaceholder","placeHolder","onCursorActivity","markedSelection","markedSelectionStyle","CHUNK_SIZE","coverRange","addAt","endLine","atEnd","doFold","noFold","regexpFlags","regexp","flags","ignoreCase","global","multiline","ensureFlags","maybeMultiline","searchRegexpForward","searchRegexpForwardMultiline","inside","lastMatchIn","endMargin","newMatch","searchRegexpBackward","searchRegexpBackwardMultiline","adjustPos","orig","folded","foldFunc","searchStringForward","query","cutFrom","endString","searchStringBackward","topString","SearchCursor","atOccurrence","normalize","findNext","findPrevious","getSearchCursor","urlRE","modeConfig","codeDepth","gfmOverlay","codeBlock","ateSpace","difference","markdownConfig","Typo","includes","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","_jlen","readDataFile","setFunc","_readFile","asyncLoad","setAffData","setup","setWordsData","_parseAFF","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","_createClass","_unsupportedIterableToArray","minLen","_arrayLikeToArray","arr2","_createForOfIteratorHelperLoose","allowArrayLike","it","getDefaults","baseUrl","gfm","headerIds","headerPrefix","langPrefix","mangle","pedantic","renderer","sanitize","sanitizer","smartLists","smartypants","tokenizer","walkTokens","xhtml","changeDefaults","newDefaults","escapeTest","escapeReplace","escapeTestNoEncode","escapeReplaceNoEncode","escapeReplacements","getEscapeReplacement","escape","unescapeTest","caret","edit","getRegex","nonWordAndColonTest","originIndependentUrl","cleanUrl","prot","decodeURIComponent","resolveUrl","baseUrls","justDomain","domain","rtrim","relativeBase","merge","splitCells","tableRow","cells","suffLen","currChar","findClosingBracket","checkSanitizeDeprecation","noopTest","defaults$1","rtrim$1","splitCells$1","_escape","findClosingBracket$1","outputLink","cap","indentCodeCompensation","matchIndentToCode","indentToCode","matchIndentInNode","Tokenizer_1","Tokenizer","_proto","newline","lastToken","trimRight","codeBlockStyle","fences","lang","heading","nptable","blockquote","addBack","loose","istask","ischecked","bull","isordered","isparen","ordered","itemMatch","task","def","lheading","paragraph","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","blockTokens","errMsg","l2","row","inlineTokens","defaults$3","cleanUrl$1","escape$1","Renderer_1","_code","infostring","_html","slugger","slug","listitem","checkbox","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","pending","_tokens","use","opts","_loop","prevRenderer","_loop2","prevTokenizer","_len2","_key2","_step","_iterator","_step2","_iterator2","_step3","_iterator3","_step4","_iterator4","_cell","lexer","ParserCore","ParserBlock","ParserInline","LinkifyIt","punycode","zero","commonmark","BAD_PROTO_RE","GOOD_DATA_RE","validateLink","RECODE_HOSTNAME_FOR","normalizeLink","parsed","hostname","toASCII","er","normalizeLinkText","toUnicode","MarkdownIt","presetName","core","configure","presets","components","ruler","rules2","ruler2","env","State","process","inlineMode","renderInline","encodeCache","keepEscaped","nextCode","defaultChars","getEncodeCache","componentChars","decodeCache","getDecodeCache","b1","b2","b3","b4","chr","slashes","auth","port","pathname","Url","protocolPattern","portPattern","simplePathPattern","unwise","autoEscape","nonHostChars","hostEndingChars","hostnamePartPattern","hostnamePartStart","hostlessProtocol","slashedProtocol","slashesDenoteHost","lowerProto","hec","simplePath","proto","atSign","hostEnd","parseHost","ipv6Hostname","hostparts","newpart","validParts","notHost","bit","qm","Any","Cc","Cf","Z","parseLinkLabel","parseLinkDestination","parseLinkTitle","disableNested","prevPos","labelEnd","posMax","md","skipToken","default_rules","code_inline","slf","renderAttrs","code_block","fence","tmpAttrs","tmpToken","langName","renderInlineAsText","renderToken","hardbreak","xhtmlOut","softbreak","html_block","html_inline","nextToken","needLf","_rules","Core","NEWLINES_RE","NULL_RE","isLinkClose","currentToken","ln","htmlLinkLevel","fullUrl","urlText","pretest","RARE_RE","SCOPED_ABBR_TEST_RE","SCOPED_ABBR_RE","SCOPED_ABBR","tm","replaceFn","replace_scoped","inside_autolink","replace_rare","blkIdx","QUOTE_TEST_RE","QUOTE_RE","replaceAt","process_inlines","thisLevel","lastChar","nextChar","isLastPunctChar","isNextPunctChar","isLastWhiteSpace","isNextWhiteSpace","canOpen","canClose","isSingle","stack","openQuote","closeQuote","OUTER","single","quotes","StateCore","hasEmptyLines","maxNesting","skipEmptyLines","sCount","blkIndent","tight","outTokens","lineMax","bMarks","eMarks","escapedSplit","escapes","backTicked","lastBackTick","lineText","columns","columnCount","aligns","tableLines","tbodyLines","tShift","mem","haveEndMarker","skipChars","skipSpaces","adjustTab","initial","lastLineEmpty","oldBMarks","oldBSCount","oldIndent","oldParentType","oldSCount","oldTShift","spaceAfterMarker","terminate","terminatorRules","isOutdented","oldLineMax","bsCount","parentType","cnt","skipBulletListMarker","skipOrderedListMarker","contentStart","indentAfterMarker","isOrdered","itemLines","listLines","listTokIdx","markerCharCode","markerValue","oldListIndent","oldTight","posAfterMarker","prevEmptyEnd","isTerminatingParagraph","listIndent","markTightParagraphs","_endLine","destEndPos","destEndLineNo","references","skipSpacesBack","skipCharsBack","block_names","HTML_SEQUENCES","StateBlock","indent_found","ddIndent","keepLastLF","lineIndent","queue","_rules2","pushPending","isTerminatorChar","pmax","ESCAPED","matchStart","matchEnd","labelStart","parseReference","EMAIL_RE","AUTOLINK_RE","linkMatch","emailMatch","lc","isLetter","DIGITAL_RE","NAMED_RE","processDelimiters","closerIdx","openerIdx","closer","opener","minOpenerIdx","newMinOpenerIdx","isOddMatch","lastJump","openersBottom","StateInline","pendingLevel","_prev_delimiters","token_meta","canSplitWord","left_flanking","right_flanking","isFunction","defaultOptions","fuzzyLink","fuzzyEmail","fuzzyIP","defaultSchemas","validate","re","http","src_auth","src_host_port_strict","src_path","no_http","src_domain","src_domain_root","src_port","src_host_terminator","mailto","src_email_name","src_host_strict","tlds_default","compile","__opts__","tlds","__tlds__","untpl","tpl","src_tlds","onCompile","__tlds_replaced__","src_xn","email_fuzzy","tpl_email_fuzzy","link_fuzzy","tpl_link_fuzzy","link_no_ip_fuzzy","tpl_link_no_ip_fuzzy","host_fuzzy_test","tpl_host_fuzzy_test","aliases","schemaError","__compiled__","__schemas__","compiled","isRegExp","createValidator","slist","schema_test","src_ZPCc","schema_search","__index__","__text_cache__","resetScanCache","Match","__last_index__","__schema__","createMatch","schemas","acc","ml","tld_pos","testSchemaAt","keepOld","src_Any","src_Cc","src_Z","src_P","src_ZCc","text_separators","src_pseudo_letter","src_ip4","src_host","tpl_host_fuzzy","tpl_host_no_ip_fuzzy","tpl_host_fuzzy_strict","tpl_host_port_fuzzy_strict","tpl_host_port_no_ip_fuzzy_strict","freeGlobal","maxInt","regexPunycode","regexNonASCII","regexSeparators","errors","stringFromCharCode","RangeError","mapDomain","ucs2decode","ucs2encode","digitToBasic","digit","adapt","numPoints","firstTime","baseMinusTMin","oldi","baseMinusT","codePoint","inputLength","handledCPCount","basicLength","q","currentValue","handledCPCountPlusOne","qMinusT","webpackPolyfill","deprecate","paths","Function","logicalName","identifierForContextKey","definitionForModuleAndIdentifier","definitionForModuleWithContextAndKey","definitionsFromContext"],"mappings":"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08B,EACRj1F,UAAW,mCACX6gB,MAAO,eAET,YAAa,CACX1oB,KAAM,YACNogE,OAAQ28B,EACRl1F,UAAW,mCACX6gB,MAAO,kBAET,YAAa,CACX1oB,KAAM,YACNogE,OAAQ48B,EACRn1F,UAAW,mCACX6gB,MAAO,iBAET,cAAe,CACb1oB,KAAM,eAER,KAAQ,CACNA,KAAM,OACNogE,OAAQu8B,EACR90F,UAAW,aACX6gB,MAAO,QAET,MAAS,CACP1oB,KAAM,QACNogE,OAAQo8B,EACR30F,UAAW,mBACX6gB,MAAO,QACP08E,SAAS,GAEX,iBAAkB,CAChBplG,KAAM,iBACNogE,OAAQs8B,EACR70F,UAAW,gBACX6gB,MAAO,eACP08E,SAAS,GAEX,eAAgB,CACdplG,KAAM,eACNogE,OAAQq8B,EACR50F,UAAW,gBACX6gB,MAAO,gBACP08E,SAAS,GAEX,cAAe,CACbplG,KAAM,cACNogE,OAAQ68B,EACRp1F,UAAW,eACX6gB,MAAO,eAET,cAAe,CACb1oB,KAAM,eAER,KAAQ,CACNA,KAAM,OACNogE,OAAQg8B,EACRv0F,UAAW,aACX6gB,MAAO,cACP08E,SAAS,GAEX,MAAS,CACPplG,KAAM,QACNogE,OAAQm8B,EACR10F,UAAW,cACX6gB,MAAO,eACP08E,SAAS,GAEX,eAAgB,CACdplG,KAAM,eACNogE,OA3lBJ,SAA2Bi/B,GAEzBA,EAAOgG,sBACT,EAylBIx9F,UAAW,cACX6gB,MAAO,mBAET,MAAS,CACP1oB,KAAM,QACNogE,OAAQ88B,EACRr1F,UAAW,cACX6gB,MAAO,gBAET,kBAAmB,CACjB1oB,KAAM,kBACNogE,OAAQ+8B,EACRt1F,UAAW,cACX6gB,MAAO,0BAET,cAAe,CACb1oB,KAAM,eAER,QAAW,CACTA,KAAM,UACNogE,OAAQw8B,EACR/0F,UAAW,YACXw2F,WAAW,EACX31E,MAAO,iBACP08E,SAAS,GAEX,eAAgB,CACdplG,KAAM,eACNogE,OAAQg9B,EACRv1F,UAAW,gBACXw2F,WAAW,EACXC,UAAU,EACV51E,MAAO,sBACP08E,SAAS,GAEX,WAAc,CAC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","file":"js/application-3e69eccc974b22fe039d.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 = 98);\n","// Utilities\n//\n'use strict';\n\nfunction _class(obj) {\n return Object.prototype.toString.call(obj);\n}\nfunction isString(obj) {\n return _class(obj) === '[object String]';\n}\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction has(object, key) {\n return _hasOwnProperty.call(object, key);\n}\n\n// Merge objects\n//\nfunction assign(obj /*from1, from2, from3, ...*/) {\n var sources = Array.prototype.slice.call(arguments, 1);\n sources.forEach(function (source) {\n if (!source) {\n return;\n }\n if (typeof source !== 'object') {\n throw new TypeError(source + 'must be object');\n }\n Object.keys(source).forEach(function (key) {\n obj[key] = source[key];\n });\n });\n return obj;\n}\n\n// Remove element from array and put another array at those position.\n// Useful for some operations with tokens\nfunction arrayReplaceAt(src, pos, newElements) {\n return [].concat(src.slice(0, pos), newElements, src.slice(pos + 1));\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction isValidEntityCode(c) {\n /*eslint no-bitwise:0*/\n // broken sequence\n if (c >= 0xD800 && c <= 0xDFFF) {\n return false;\n }\n // never used\n if (c >= 0xFDD0 && c <= 0xFDEF) {\n return false;\n }\n if ((c & 0xFFFF) === 0xFFFF || (c & 0xFFFF) === 0xFFFE) {\n return false;\n }\n // control codes\n if (c >= 0x00 && c <= 0x08) {\n return false;\n }\n if (c === 0x0B) {\n return false;\n }\n if (c >= 0x0E && c <= 0x1F) {\n return false;\n }\n if (c >= 0x7F && c <= 0x9F) {\n return false;\n }\n // out of range\n if (c > 0x10FFFF) {\n return false;\n }\n return true;\n}\nfunction fromCodePoint(c) {\n /*eslint no-bitwise:0*/\n if (c > 0xffff) {\n c -= 0x10000;\n var surrogate1 = 0xd800 + (c >> 10),\n surrogate2 = 0xdc00 + (c & 0x3ff);\n return String.fromCharCode(surrogate1, surrogate2);\n }\n return String.fromCharCode(c);\n}\nvar UNESCAPE_MD_RE = /\\\\([!\"#$%&'()*+,\\-.\\/:;<=>?@[\\\\\\]^_`{|}~])/g;\nvar ENTITY_RE = /&([a-z#][a-z0-9]{1,31});/gi;\nvar UNESCAPE_ALL_RE = new RegExp(UNESCAPE_MD_RE.source + '|' + ENTITY_RE.source, 'gi');\nvar DIGITAL_ENTITY_TEST_RE = /^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))/i;\nvar entities = require('./entities');\nfunction replaceEntityPattern(match, name) {\n var code = 0;\n if (has(entities, name)) {\n return entities[name];\n }\n if (name.charCodeAt(0) === 0x23 /* # */ && DIGITAL_ENTITY_TEST_RE.test(name)) {\n code = name[1].toLowerCase() === 'x' ? parseInt(name.slice(2), 16) : parseInt(name.slice(1), 10);\n if (isValidEntityCode(code)) {\n return fromCodePoint(code);\n }\n }\n return match;\n}\n\n/*function replaceEntities(str) {\n if (str.indexOf('&') < 0) { return str; }\n\n return str.replace(ENTITY_RE, replaceEntityPattern);\n}*/\n\nfunction unescapeMd(str) {\n if (str.indexOf('\\\\') < 0) {\n return str;\n }\n return str.replace(UNESCAPE_MD_RE, '$1');\n}\nfunction unescapeAll(str) {\n if (str.indexOf('\\\\') < 0 && str.indexOf('&') < 0) {\n return str;\n }\n return str.replace(UNESCAPE_ALL_RE, function (match, escaped, entity) {\n if (escaped) {\n return escaped;\n }\n return replaceEntityPattern(match, entity);\n });\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nvar HTML_ESCAPE_TEST_RE = /[&<>\"]/;\nvar HTML_ESCAPE_REPLACE_RE = /[&<>\"]/g;\nvar HTML_REPLACEMENTS = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"'\n};\nfunction replaceUnsafeChar(ch) {\n return HTML_REPLACEMENTS[ch];\n}\nfunction escapeHtml(str) {\n if (HTML_ESCAPE_TEST_RE.test(str)) {\n return str.replace(HTML_ESCAPE_REPLACE_RE, replaceUnsafeChar);\n }\n return str;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nvar REGEXP_ESCAPE_RE = /[.?*+^$[\\]\\\\(){}|-]/g;\nfunction escapeRE(str) {\n return str.replace(REGEXP_ESCAPE_RE, '\\\\$&');\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction isSpace(code) {\n switch (code) {\n case 0x09:\n case 0x20:\n return true;\n }\n return false;\n}\n\n// Zs (unicode class) || [\\t\\f\\v\\r\\n]\nfunction isWhiteSpace(code) {\n if (code >= 0x2000 && code <= 0x200A) {\n return true;\n }\n switch (code) {\n case 0x09: // \\t\n case 0x0A: // \\n\n case 0x0B: // \\v\n case 0x0C: // \\f\n case 0x0D: // \\r\n case 0x20:\n case 0xA0:\n case 0x1680:\n case 0x202F:\n case 0x205F:\n case 0x3000:\n return true;\n }\n return false;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\n/*eslint-disable max-len*/\nvar UNICODE_PUNCT_RE = require('uc.micro/categories/P/regex');\n\n// Currently without astral characters support.\nfunction isPunctChar(ch) {\n return UNICODE_PUNCT_RE.test(ch);\n}\n\n// Markdown ASCII punctuation characters.\n//\n// !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \\, ], ^, _, `, {, |, }, or ~\n// http://spec.commonmark.org/0.15/#ascii-punctuation-character\n//\n// Don't confuse with unicode punctuation !!! It lacks some chars in ascii range.\n//\nfunction isMdAsciiPunct(ch) {\n switch (ch) {\n case 0x21 /* ! */:\n case 0x22 /* \" */:\n case 0x23 /* # */:\n case 0x24 /* $ */:\n case 0x25 /* % */:\n case 0x26 /* & */:\n case 0x27 /* ' */:\n case 0x28 /* ( */:\n case 0x29 /* ) */:\n case 0x2A /* * */:\n case 0x2B /* + */:\n case 0x2C /* , */:\n case 0x2D /* - */:\n case 0x2E /* . */:\n case 0x2F /* / */:\n case 0x3A /* : */:\n case 0x3B /* ; */:\n case 0x3C /* < */:\n case 0x3D /* = */:\n case 0x3E /* > */:\n case 0x3F /* ? */:\n case 0x40 /* @ */:\n case 0x5B /* [ */:\n case 0x5C /* \\ */:\n case 0x5D /* ] */:\n case 0x5E /* ^ */:\n case 0x5F /* _ */:\n case 0x60 /* ` */:\n case 0x7B /* { */:\n case 0x7C /* | */:\n case 0x7D /* } */:\n case 0x7E /* ~ */:\n return true;\n default:\n return false;\n }\n}\n\n// Hepler to unify [reference labels].\n//\nfunction normalizeReference(str) {\n // Trim and collapse whitespace\n //\n str = str.trim().replace(/\\s+/g, ' ');\n\n // In node v10 'ẞ'.toLowerCase() === 'Ṿ', which is presumed to be a bug\n // fixed in v12 (couldn't find any details).\n //\n // So treat this one as a special case\n // (remove this when node v10 is no longer supported).\n //\n if ('ẞ'.toLowerCase() === 'Ṿ') {\n str = str.replace(/ẞ/g, 'ß');\n }\n\n // .toLowerCase().toUpperCase() should get rid of all differences\n // between letter variants.\n //\n // Simple .toLowerCase() doesn't normalize 125 code points correctly,\n // and .toUpperCase doesn't normalize 6 of them (list of exceptions:\n // İ, ϴ, ẞ, Ω, K, Å - those are already uppercased, but have differently\n // uppercased versions).\n //\n // Here's an example showing how it happens. Lets take greek letter omega:\n // uppercase U+0398 (Θ), U+03f4 (ϴ) and lowercase U+03b8 (θ), U+03d1 (ϑ)\n //\n // Unicode entries:\n // 0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8;\n // 03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398\n // 03D1;GREEK THETA SYMBOL;Ll;0;L; 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398\n // 03F4;GREEK CAPITAL THETA SYMBOL;Lu;0;L; 0398;;;;N;;;;03B8;\n //\n // Case-insensitive comparison should treat all of them as equivalent.\n //\n // But .toLowerCase() doesn't change ϑ (it's already lowercase),\n // and .toUpperCase() doesn't change ϴ (already uppercase).\n //\n // Applying first lower then upper case normalizes any character:\n // '\\u0398\\u03f4\\u03b8\\u03d1'.toLowerCase().toUpperCase() === '\\u0398\\u0398\\u0398\\u0398'\n //\n // Note: this is equivalent to unicode case folding; unicode normalization\n // is a different step that is not required here.\n //\n // Final result should be uppercased, because it's later stored in an object\n // (this avoid a conflict with Object.prototype members,\n // most notably, `__proto__`)\n //\n return str.toLowerCase().toUpperCase();\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\n// Re-export libraries commonly used in both markdown-it and its plugins,\n// so plugins won't have to depend on them explicitly, which reduces their\n// bundled size (e.g. a browser build).\n//\nexports.lib = {};\nexports.lib.mdurl = require('mdurl');\nexports.lib.ucmicro = require('uc.micro');\nexports.assign = assign;\nexports.isString = isString;\nexports.has = has;\nexports.unescapeMd = unescapeMd;\nexports.unescapeAll = unescapeAll;\nexports.isValidEntityCode = isValidEntityCode;\nexports.fromCodePoint = fromCodePoint;\n// exports.replaceEntities = replaceEntities;\nexports.escapeHtml = escapeHtml;\nexports.arrayReplaceAt = arrayReplaceAt;\nexports.isSpace = isSpace;\nexports.isWhiteSpace = isWhiteSpace;\nexports.isMdAsciiPunct = isMdAsciiPunct;\nexports.isPunctChar = isPunctChar;\nexports.escapeRE = escapeRE;\nexports.normalizeReference = normalizeReference;","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n// This is CodeMirror (https://codemirror.net), a code editor\n// implemented in JavaScript on top of the browser's DOM.\n//\n// You can find some technical background for some of the code below\n// at http://marijnhaverbeke.nl/blog/#cm-internals .\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.CodeMirror = factory());\n})(this, function () {\n 'use strict';\n\n // Kludges for bugs and behavior differences that can't be feature\n // detected are enabled based on userAgent etc sniffing.\n var userAgent = navigator.userAgent;\n var platform = navigator.platform;\n var gecko = /gecko\\/\\d/i.test(userAgent);\n var ie_upto10 = /MSIE \\d/.test(userAgent);\n var ie_11up = /Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(userAgent);\n var edge = /Edge\\/(\\d+)/.exec(userAgent);\n var ie = ie_upto10 || ie_11up || edge;\n var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : +(edge || ie_11up)[1]);\n var webkit = !edge && /WebKit\\//.test(userAgent);\n var qtwebkit = webkit && /Qt\\/\\d+\\.\\d+/.test(userAgent);\n var chrome = !edge && /Chrome\\//.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);\n // This is woefully incomplete. Suggestions for alternative methods welcome.\n var mobile = ios || android || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent);\n var mac = ios || /Mac/.test(platform);\n var chromeOS = /\\bCrOS\\b/.test(userAgent);\n var windows = /win/i.test(platform);\n var presto_version = presto && userAgent.match(/Version\\/(\\d*\\.\\d*)/);\n if (presto_version) {\n presto_version = Number(presto_version[1]);\n }\n if (presto_version && presto_version >= 15) {\n presto = false;\n webkit = true;\n }\n // Some browsers use the wrong event properties to signal cmd/ctrl on OS X\n var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11));\n var captureRightClick = gecko || ie && ie_version >= 9;\n function classTest(cls) {\n return new RegExp(\"(^|\\\\s)\" + cls + \"(?:$|\\\\s)\\\\s*\");\n }\n var rmClass = function (node, cls) {\n var current = node.className;\n var match = classTest(cls).exec(current);\n if (match) {\n var after = current.slice(match.index + match[0].length);\n node.className = current.slice(0, match.index) + (after ? match[1] + after : \"\");\n }\n };\n function removeChildren(e) {\n for (var count = e.childNodes.length; count > 0; --count) {\n e.removeChild(e.firstChild);\n }\n return e;\n }\n function removeChildrenAndAdd(parent, e) {\n return removeChildren(parent).appendChild(e);\n }\n function elt(tag, content, className, style) {\n var e = document.createElement(tag);\n if (className) {\n e.className = className;\n }\n if (style) {\n e.style.cssText = style;\n }\n if (typeof content == \"string\") {\n e.appendChild(document.createTextNode(content));\n } else if (content) {\n for (var i = 0; i < content.length; ++i) {\n e.appendChild(content[i]);\n }\n }\n return e;\n }\n // wrapper for elt, which removes the elt from the accessibility tree\n function eltP(tag, content, className, style) {\n var e = elt(tag, content, className, style);\n e.setAttribute(\"role\", \"presentation\");\n return e;\n }\n var range;\n if (document.createRange) {\n range = function (node, start, end, endNode) {\n var r = document.createRange();\n r.setEnd(endNode || node, end);\n r.setStart(node, start);\n return r;\n };\n } else {\n range = function (node, start, end) {\n var r = document.body.createTextRange();\n try {\n r.moveToElementText(node.parentNode);\n } catch (e) {\n return r;\n }\n r.collapse(true);\n r.moveEnd(\"character\", end);\n r.moveStart(\"character\", start);\n return r;\n };\n }\n function contains(parent, child) {\n if (child.nodeType == 3)\n // Android browser always returns false when child is a textnode\n {\n child = child.parentNode;\n }\n if (parent.contains) {\n return parent.contains(child);\n }\n do {\n if (child.nodeType == 11) {\n child = child.host;\n }\n if (child == parent) {\n return true;\n }\n } while (child = child.parentNode);\n }\n function activeElt() {\n // IE and Edge may throw an \"Unspecified Error\" when accessing document.activeElement.\n // IE < 10 will throw when accessed while the page is loading or in an iframe.\n // IE > 9 and Edge will throw when accessed in an iframe if document.body is unavailable.\n var activeElement;\n try {\n activeElement = document.activeElement;\n } catch (e) {\n activeElement = document.body || null;\n }\n while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement) {\n activeElement = activeElement.shadowRoot.activeElement;\n }\n return activeElement;\n }\n function addClass(node, cls) {\n var current = node.className;\n if (!classTest(cls).test(current)) {\n node.className += (current ? \" \" : \"\") + cls;\n }\n }\n function joinClasses(a, b) {\n var as = a.split(\" \");\n for (var i = 0; i < as.length; i++) {\n if (as[i] && !classTest(as[i]).test(b)) {\n b += \" \" + as[i];\n }\n }\n return b;\n }\n var selectInput = function (node) {\n node.select();\n };\n if (ios)\n // Mobile Safari apparently has a bug where select() is broken.\n {\n selectInput = function (node) {\n node.selectionStart = 0;\n node.selectionEnd = node.value.length;\n };\n } else if (ie)\n // Suppress mysterious IE10 errors\n {\n selectInput = function (node) {\n try {\n node.select();\n } catch (_e) {}\n };\n }\n function bind(f) {\n var args = Array.prototype.slice.call(arguments, 1);\n return function () {\n return f.apply(null, args);\n };\n }\n function copyObj(obj, target, overwrite) {\n if (!target) {\n target = {};\n }\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop))) {\n target[prop] = obj[prop];\n }\n }\n return target;\n }\n\n // Counts the column offset in a string, taking tabs into account.\n // Used mostly to find indentation.\n function countColumn(string, end, tabSize, startIndex, startValue) {\n if (end == null) {\n end = string.search(/[^\\s\\u00a0]/);\n if (end == -1) {\n end = string.length;\n }\n }\n for (var i = startIndex || 0, n = startValue || 0;;) {\n var nextTab = string.indexOf(\"\\t\", i);\n if (nextTab < 0 || nextTab >= end) {\n return n + (end - i);\n }\n n += nextTab - i;\n n += tabSize - n % tabSize;\n i = nextTab + 1;\n }\n }\n var Delayed = function () {\n this.id = null;\n this.f = null;\n this.time = 0;\n this.handler = bind(this.onTimeout, this);\n };\n Delayed.prototype.onTimeout = function (self) {\n self.id = 0;\n if (self.time <= +new Date()) {\n self.f();\n } else {\n setTimeout(self.handler, self.time - +new Date());\n }\n };\n Delayed.prototype.set = function (ms, f) {\n this.f = f;\n var time = +new Date() + ms;\n if (!this.id || time < this.time) {\n clearTimeout(this.id);\n this.id = setTimeout(this.handler, ms);\n this.time = time;\n }\n };\n function indexOf(array, elt) {\n for (var i = 0; i < array.length; ++i) {\n if (array[i] == elt) {\n return i;\n }\n }\n return -1;\n }\n\n // Number of pixels added to scroller and sizer to hide scrollbar\n var scrollerGap = 50;\n\n // Returned or thrown by various protocols to signal 'I'm not\n // handling this'.\n var Pass = {\n toString: function () {\n return \"CodeMirror.Pass\";\n }\n };\n\n // Reused option objects for setSelection & friends\n var sel_dontScroll = {\n scroll: false\n },\n sel_mouse = {\n origin: \"*mouse\"\n },\n sel_move = {\n origin: \"+move\"\n };\n\n // The inverse of countColumn -- find the offset that corresponds to\n // a particular column.\n function findColumn(string, goal, tabSize) {\n for (var pos = 0, col = 0;;) {\n var nextTab = string.indexOf(\"\\t\", pos);\n if (nextTab == -1) {\n nextTab = string.length;\n }\n var skipped = nextTab - pos;\n if (nextTab == string.length || col + skipped >= goal) {\n return pos + Math.min(skipped, goal - col);\n }\n col += nextTab - pos;\n col += tabSize - col % tabSize;\n pos = nextTab + 1;\n if (col >= goal) {\n return pos;\n }\n }\n }\n var spaceStrs = [\"\"];\n function spaceStr(n) {\n while (spaceStrs.length <= n) {\n spaceStrs.push(lst(spaceStrs) + \" \");\n }\n return spaceStrs[n];\n }\n function lst(arr) {\n return arr[arr.length - 1];\n }\n function map(array, f) {\n var out = [];\n for (var i = 0; i < array.length; i++) {\n out[i] = f(array[i], i);\n }\n return out;\n }\n function insertSorted(array, value, score) {\n var pos = 0,\n priority = score(value);\n while (pos < array.length && score(array[pos]) <= priority) {\n pos++;\n }\n array.splice(pos, 0, value);\n }\n function nothing() {}\n function createObj(base, props) {\n var inst;\n if (Object.create) {\n inst = Object.create(base);\n } else {\n nothing.prototype = base;\n inst = new nothing();\n }\n if (props) {\n copyObj(props, inst);\n }\n return inst;\n }\n var nonASCIISingleCaseWordChar = /[\\u00df\\u0587\\u0590-\\u05f4\\u0600-\\u06ff\\u3040-\\u309f\\u30a0-\\u30ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\uac00-\\ud7af]/;\n function isWordCharBasic(ch) {\n return /\\w/.test(ch) || ch > \"\\x80\" && (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch));\n }\n function isWordChar(ch, helper) {\n if (!helper) {\n return isWordCharBasic(ch);\n }\n if (helper.source.indexOf(\"\\\\w\") > -1 && isWordCharBasic(ch)) {\n return true;\n }\n return helper.test(ch);\n }\n function isEmpty(obj) {\n for (var n in obj) {\n if (obj.hasOwnProperty(n) && obj[n]) {\n return false;\n }\n }\n return true;\n }\n\n // Extending unicode characters. A series of a non-extending char +\n // any number of extending chars is treated as a single unit as far\n // as editing and measuring is concerned. This is not fully correct,\n // since some scripts/fonts/browsers also treat other configurations\n // of code points as a group.\n var extendingChars = /[\\u0300-\\u036f\\u0483-\\u0489\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u065e\\u0670\\u06d6-\\u06dc\\u06de-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0900-\\u0902\\u093c\\u0941-\\u0948\\u094d\\u0951-\\u0955\\u0962\\u0963\\u0981\\u09bc\\u09be\\u09c1-\\u09c4\\u09cd\\u09d7\\u09e2\\u09e3\\u0a01\\u0a02\\u0a3c\\u0a41\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a70\\u0a71\\u0a75\\u0a81\\u0a82\\u0abc\\u0ac1-\\u0ac5\\u0ac7\\u0ac8\\u0acd\\u0ae2\\u0ae3\\u0b01\\u0b3c\\u0b3e\\u0b3f\\u0b41-\\u0b44\\u0b4d\\u0b56\\u0b57\\u0b62\\u0b63\\u0b82\\u0bbe\\u0bc0\\u0bcd\\u0bd7\\u0c3e-\\u0c40\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0cbc\\u0cbf\\u0cc2\\u0cc6\\u0ccc\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0d3e\\u0d41-\\u0d44\\u0d4d\\u0d57\\u0d62\\u0d63\\u0dca\\u0dcf\\u0dd2-\\u0dd4\\u0dd6\\u0ddf\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0eb1\\u0eb4-\\u0eb9\\u0ebb\\u0ebc\\u0ec8-\\u0ecd\\u0f18\\u0f19\\u0f35\\u0f37\\u0f39\\u0f71-\\u0f7e\\u0f80-\\u0f84\\u0f86\\u0f87\\u0f90-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102d-\\u1030\\u1032-\\u1037\\u1039\\u103a\\u103d\\u103e\\u1058\\u1059\\u105e-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108d\\u109d\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b7-\\u17bd\\u17c6\\u17c9-\\u17d3\\u17dd\\u180b-\\u180d\\u18a9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193b\\u1a17\\u1a18\\u1a56\\u1a58-\\u1a5e\\u1a60\\u1a62\\u1a65-\\u1a6c\\u1a73-\\u1a7c\\u1a7f\\u1b00-\\u1b03\\u1b34\\u1b36-\\u1b3a\\u1b3c\\u1b42\\u1b6b-\\u1b73\\u1b80\\u1b81\\u1ba2-\\u1ba5\\u1ba8\\u1ba9\\u1c2c-\\u1c33\\u1c36\\u1c37\\u1cd0-\\u1cd2\\u1cd4-\\u1ce0\\u1ce2-\\u1ce8\\u1ced\\u1dc0-\\u1de6\\u1dfd-\\u1dff\\u200c\\u200d\\u20d0-\\u20f0\\u2cef-\\u2cf1\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua66f-\\ua672\\ua67c\\ua67d\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua825\\ua826\\ua8c4\\ua8e0-\\ua8f1\\ua926-\\ua92d\\ua947-\\ua951\\ua980-\\ua982\\ua9b3\\ua9b6-\\ua9b9\\ua9bc\\uaa29-\\uaa2e\\uaa31\\uaa32\\uaa35\\uaa36\\uaa43\\uaa4c\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uabe5\\uabe8\\uabed\\udc00-\\udfff\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe26\\uff9e\\uff9f]/;\n function isExtendingChar(ch) {\n return ch.charCodeAt(0) >= 768 && extendingChars.test(ch);\n }\n\n // Returns a number from the range [`0`; `str.length`] unless `pos` is outside that range.\n function skipExtendingChars(str, pos, dir) {\n while ((dir < 0 ? pos > 0 : pos < str.length) && isExtendingChar(str.charAt(pos))) {\n pos += dir;\n }\n return pos;\n }\n\n // Returns the value from the range [`from`; `to`] that satisfies\n // `pred` and is closest to `from`. Assumes that at least `to`\n // satisfies `pred`. Supports `from` being greater than `to`.\n function findFirst(pred, from, to) {\n // At any point we are certain `to` satisfies `pred`, don't know\n // whether `from` does.\n var dir = from > to ? -1 : 1;\n for (;;) {\n if (from == to) {\n return from;\n }\n var midF = (from + to) / 2,\n mid = dir < 0 ? Math.ceil(midF) : Math.floor(midF);\n if (mid == from) {\n return pred(mid) ? from : to;\n }\n if (pred(mid)) {\n to = mid;\n } else {\n from = mid + dir;\n }\n }\n }\n\n // BIDI HELPERS\n\n function iterateBidiSections(order, from, to, f) {\n if (!order) {\n return f(from, to, \"ltr\", 0);\n }\n var found = false;\n for (var i = 0; i < order.length; ++i) {\n var part = order[i];\n if (part.from < to && part.to > from || from == to && part.to == from) {\n f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? \"rtl\" : \"ltr\", i);\n found = true;\n }\n }\n if (!found) {\n f(from, to, \"ltr\");\n }\n }\n var bidiOther = null;\n function getBidiPartAt(order, ch, sticky) {\n var found;\n bidiOther = null;\n for (var i = 0; i < order.length; ++i) {\n var cur = order[i];\n if (cur.from < ch && cur.to > ch) {\n return i;\n }\n if (cur.to == ch) {\n if (cur.from != cur.to && sticky == \"before\") {\n found = i;\n } else {\n bidiOther = i;\n }\n }\n if (cur.from == ch) {\n if (cur.from != cur.to && sticky != \"before\") {\n found = i;\n } else {\n bidiOther = i;\n }\n }\n }\n return found != null ? found : bidiOther;\n }\n\n // Bidirectional ordering algorithm\n // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm\n // that this (partially) implements.\n\n // One-char codes used for character types:\n // L (L): Left-to-Right\n // R (R): Right-to-Left\n // r (AL): Right-to-Left Arabic\n // 1 (EN): European Number\n // + (ES): European Number Separator\n // % (ET): European Number Terminator\n // n (AN): Arabic Number\n // , (CS): Common Number Separator\n // m (NSM): Non-Spacing Mark\n // b (BN): Boundary Neutral\n // s (B): Paragraph Separator\n // t (S): Segment Separator\n // w (WS): Whitespace\n // N (ON): Other Neutrals\n\n // Returns null if characters are ordered as they appear\n // (left-to-right), or an array of sections ({from, to, level}\n // objects) in the order in which they occur visually.\n var bidiOrdering = function () {\n // Character types for codepoints 0 to 0xff\n var lowTypes = \"bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN\";\n // Character types for codepoints 0x600 to 0x6f9\n var arabicTypes = \"nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111\";\n function charType(code) {\n if (code <= 0xf7) {\n return lowTypes.charAt(code);\n } else if (0x590 <= code && code <= 0x5f4) {\n return \"R\";\n } else if (0x600 <= code && code <= 0x6f9) {\n return arabicTypes.charAt(code - 0x600);\n } else if (0x6ee <= code && code <= 0x8ac) {\n return \"r\";\n } else if (0x2000 <= code && code <= 0x200b) {\n return \"w\";\n } else if (code == 0x200c) {\n return \"b\";\n } else {\n return \"L\";\n }\n }\n var bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/;\n var isNeutral = /[stwN]/,\n isStrong = /[LRr]/,\n countsAsLeft = /[Lb1n]/,\n countsAsNum = /[1n]/;\n function BidiSpan(level, from, to) {\n this.level = level;\n this.from = from;\n this.to = to;\n }\n return function (str, direction) {\n var outerType = direction == \"ltr\" ? \"L\" : \"R\";\n if (str.length == 0 || direction == \"ltr\" && !bidiRE.test(str)) {\n return false;\n }\n var len = str.length,\n types = [];\n for (var i = 0; i < len; ++i) {\n types.push(charType(str.charCodeAt(i)));\n }\n\n // W1. Examine each non-spacing mark (NSM) in the level run, and\n // change the type of the NSM to the type of the previous\n // character. If the NSM is at the start of the level run, it will\n // get the type of sor.\n for (var i$1 = 0, prev = outerType; i$1 < len; ++i$1) {\n var type = types[i$1];\n if (type == \"m\") {\n types[i$1] = prev;\n } else {\n prev = type;\n }\n }\n\n // W2. Search backwards from each instance of a European number\n // until the first strong type (R, L, AL, or sor) is found. If an\n // AL is found, change the type of the European number to Arabic\n // number.\n // W3. Change all ALs to R.\n for (var i$2 = 0, cur = outerType; i$2 < len; ++i$2) {\n var type$1 = types[i$2];\n if (type$1 == \"1\" && cur == \"r\") {\n types[i$2] = \"n\";\n } else if (isStrong.test(type$1)) {\n cur = type$1;\n if (type$1 == \"r\") {\n types[i$2] = \"R\";\n }\n }\n }\n\n // W4. A single European separator between two European numbers\n // changes to a European number. A single common separator between\n // two numbers of the same type changes to that type.\n for (var i$3 = 1, prev$1 = types[0]; i$3 < len - 1; ++i$3) {\n var type$2 = types[i$3];\n if (type$2 == \"+\" && prev$1 == \"1\" && types[i$3 + 1] == \"1\") {\n types[i$3] = \"1\";\n } else if (type$2 == \",\" && prev$1 == types[i$3 + 1] && (prev$1 == \"1\" || prev$1 == \"n\")) {\n types[i$3] = prev$1;\n }\n prev$1 = type$2;\n }\n\n // W5. A sequence of European terminators adjacent to European\n // numbers changes to all European numbers.\n // W6. Otherwise, separators and terminators change to Other\n // Neutral.\n for (var i$4 = 0; i$4 < len; ++i$4) {\n var type$3 = types[i$4];\n if (type$3 == \",\") {\n types[i$4] = \"N\";\n } else if (type$3 == \"%\") {\n var end = void 0;\n for (end = i$4 + 1; end < len && types[end] == \"%\"; ++end) {}\n var replace = i$4 && types[i$4 - 1] == \"!\" || end < len && types[end] == \"1\" ? \"1\" : \"N\";\n for (var j = i$4; j < end; ++j) {\n types[j] = replace;\n }\n i$4 = end - 1;\n }\n }\n\n // W7. Search backwards from each instance of a European number\n // until the first strong type (R, L, or sor) is found. If an L is\n // found, then change the type of the European number to L.\n for (var i$5 = 0, cur$1 = outerType; i$5 < len; ++i$5) {\n var type$4 = types[i$5];\n if (cur$1 == \"L\" && type$4 == \"1\") {\n types[i$5] = \"L\";\n } else if (isStrong.test(type$4)) {\n cur$1 = type$4;\n }\n }\n\n // N1. A sequence of neutrals takes the direction of the\n // surrounding strong text if the text on both sides has the same\n // direction. European and Arabic numbers act as if they were R in\n // terms of their influence on neutrals. Start-of-level-run (sor)\n // and end-of-level-run (eor) are used at level run boundaries.\n // N2. Any remaining neutrals take the embedding direction.\n for (var i$6 = 0; i$6 < len; ++i$6) {\n if (isNeutral.test(types[i$6])) {\n var end$1 = void 0;\n for (end$1 = i$6 + 1; end$1 < len && isNeutral.test(types[end$1]); ++end$1) {}\n var before = (i$6 ? types[i$6 - 1] : outerType) == \"L\";\n var after = (end$1 < len ? types[end$1] : outerType) == \"L\";\n var replace$1 = before == after ? before ? \"L\" : \"R\" : outerType;\n for (var j$1 = i$6; j$1 < end$1; ++j$1) {\n types[j$1] = replace$1;\n }\n i$6 = end$1 - 1;\n }\n }\n\n // Here we depart from the documented algorithm, in order to avoid\n // building up an actual levels array. Since there are only three\n // levels (0, 1, 2) in an implementation that doesn't take\n // explicit embedding into account, we can build up the order on\n // the fly, without following the level-based algorithm.\n var order = [],\n m;\n for (var i$7 = 0; i$7 < len;) {\n if (countsAsLeft.test(types[i$7])) {\n var start = i$7;\n for (++i$7; i$7 < len && countsAsLeft.test(types[i$7]); ++i$7) {}\n order.push(new BidiSpan(0, start, i$7));\n } else {\n var pos = i$7,\n at = order.length,\n isRTL = direction == \"rtl\" ? 1 : 0;\n for (++i$7; i$7 < len && types[i$7] != \"L\"; ++i$7) {}\n for (var j$2 = pos; j$2 < i$7;) {\n if (countsAsNum.test(types[j$2])) {\n if (pos < j$2) {\n order.splice(at, 0, new BidiSpan(1, pos, j$2));\n at += isRTL;\n }\n var nstart = j$2;\n for (++j$2; j$2 < i$7 && countsAsNum.test(types[j$2]); ++j$2) {}\n order.splice(at, 0, new BidiSpan(2, nstart, j$2));\n at += isRTL;\n pos = j$2;\n } else {\n ++j$2;\n }\n }\n if (pos < i$7) {\n order.splice(at, 0, new BidiSpan(1, pos, i$7));\n }\n }\n }\n if (direction == \"ltr\") {\n if (order[0].level == 1 && (m = str.match(/^\\s+/))) {\n order[0].from = m[0].length;\n order.unshift(new BidiSpan(0, 0, m[0].length));\n }\n if (lst(order).level == 1 && (m = str.match(/\\s+$/))) {\n lst(order).to -= m[0].length;\n order.push(new BidiSpan(0, len - m[0].length, len));\n }\n }\n return direction == \"rtl\" ? order.reverse() : order;\n };\n }();\n\n // Get the bidi ordering for the given line (and cache it). Returns\n // false for lines that are fully left-to-right, and an array of\n // BidiSpan objects otherwise.\n function getOrder(line, direction) {\n var order = line.order;\n if (order == null) {\n order = line.order = bidiOrdering(line.text, direction);\n }\n return order;\n }\n\n // EVENT HANDLING\n\n // Lightweight event framework. on/off also work on DOM nodes,\n // registering native DOM handlers.\n\n var noHandlers = [];\n var on = function (emitter, type, f) {\n if (emitter.addEventListener) {\n emitter.addEventListener(type, f, false);\n } else if (emitter.attachEvent) {\n emitter.attachEvent(\"on\" + type, f);\n } else {\n var map = emitter._handlers || (emitter._handlers = {});\n map[type] = (map[type] || noHandlers).concat(f);\n }\n };\n function getHandlers(emitter, type) {\n return emitter._handlers && emitter._handlers[type] || noHandlers;\n }\n function off(emitter, type, f) {\n if (emitter.removeEventListener) {\n emitter.removeEventListener(type, f, false);\n } else if (emitter.detachEvent) {\n emitter.detachEvent(\"on\" + type, f);\n } else {\n var map = emitter._handlers,\n arr = map && map[type];\n if (arr) {\n var index = indexOf(arr, f);\n if (index > -1) {\n map[type] = arr.slice(0, index).concat(arr.slice(index + 1));\n }\n }\n }\n }\n function signal(emitter, type /*, values...*/) {\n var handlers = getHandlers(emitter, type);\n if (!handlers.length) {\n return;\n }\n var args = Array.prototype.slice.call(arguments, 2);\n for (var i = 0; i < handlers.length; ++i) {\n handlers[i].apply(null, args);\n }\n }\n\n // The DOM events that CodeMirror handles can be overridden by\n // registering a (non-DOM) handler on the editor for the event name,\n // and preventDefault-ing the event in that handler.\n function signalDOMEvent(cm, e, override) {\n if (typeof e == \"string\") {\n e = {\n type: e,\n preventDefault: function () {\n this.defaultPrevented = true;\n }\n };\n }\n signal(cm, override || e.type, cm, e);\n return e_defaultPrevented(e) || e.codemirrorIgnore;\n }\n function signalCursorActivity(cm) {\n var arr = cm._handlers && cm._handlers.cursorActivity;\n if (!arr) {\n return;\n }\n var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []);\n for (var i = 0; i < arr.length; ++i) {\n if (indexOf(set, arr[i]) == -1) {\n set.push(arr[i]);\n }\n }\n }\n function hasHandler(emitter, type) {\n return getHandlers(emitter, type).length > 0;\n }\n\n // Add on and off methods to a constructor's prototype, to make\n // registering events on such objects more convenient.\n function eventMixin(ctor) {\n ctor.prototype.on = function (type, f) {\n on(this, type, f);\n };\n ctor.prototype.off = function (type, f) {\n off(this, type, f);\n };\n }\n\n // Due to the fact that we still support jurassic IE versions, some\n // compatibility wrappers are needed.\n\n function e_preventDefault(e) {\n if (e.preventDefault) {\n e.preventDefault();\n } else {\n e.returnValue = false;\n }\n }\n function e_stopPropagation(e) {\n if (e.stopPropagation) {\n e.stopPropagation();\n } else {\n e.cancelBubble = true;\n }\n }\n function e_defaultPrevented(e) {\n return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false;\n }\n function e_stop(e) {\n e_preventDefault(e);\n e_stopPropagation(e);\n }\n function e_target(e) {\n return e.target || e.srcElement;\n }\n function e_button(e) {\n var b = e.which;\n if (b == null) {\n if (e.button & 1) {\n b = 1;\n } else if (e.button & 2) {\n b = 3;\n } else if (e.button & 4) {\n b = 2;\n }\n }\n if (mac && e.ctrlKey && b == 1) {\n b = 3;\n }\n return b;\n }\n\n // Detect drag-and-drop\n var dragAndDrop = function () {\n // There is *some* kind of drag-and-drop support in IE6-8, but I\n // couldn't get it to work yet.\n if (ie && ie_version < 9) {\n return false;\n }\n var div = elt('div');\n return \"draggable\" in div || \"dragDrop\" in div;\n }();\n var zwspSupported;\n function zeroWidthElement(measure) {\n if (zwspSupported == null) {\n var test = elt(\"span\", \"\\u200b\");\n removeChildrenAndAdd(measure, elt(\"span\", [test, document.createTextNode(\"x\")]));\n if (measure.firstChild.offsetHeight != 0) {\n zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8);\n }\n }\n var node = zwspSupported ? elt(\"span\", \"\\u200b\") : elt(\"span\", \"\\u00a0\", null, \"display: inline-block; width: 1px; margin-right: -1px\");\n node.setAttribute(\"cm-text\", \"\");\n return node;\n }\n\n // Feature-detect IE's crummy client rect reporting for bidi text\n var badBidiRects;\n function hasBadBidiRects(measure) {\n if (badBidiRects != null) {\n return badBidiRects;\n }\n var txt = removeChildrenAndAdd(measure, document.createTextNode(\"A\\u062eA\"));\n var r0 = range(txt, 0, 1).getBoundingClientRect();\n var r1 = range(txt, 1, 2).getBoundingClientRect();\n removeChildren(measure);\n if (!r0 || r0.left == r0.right) {\n return false;\n } // Safari returns null in some cases (#2780)\n return badBidiRects = r1.right - r0.right < 3;\n }\n\n // See if \"\".split is the broken IE version, if so, provide an\n // alternative way to split lines.\n var splitLinesAuto = \"\\n\\nb\".split(/\\n/).length != 3 ? function (string) {\n var pos = 0,\n result = [],\n l = string.length;\n while (pos <= l) {\n var nl = string.indexOf(\"\\n\", pos);\n if (nl == -1) {\n nl = string.length;\n }\n var line = string.slice(pos, string.charAt(nl - 1) == \"\\r\" ? nl - 1 : nl);\n var rt = line.indexOf(\"\\r\");\n if (rt != -1) {\n result.push(line.slice(0, rt));\n pos += rt + 1;\n } else {\n result.push(line);\n pos = nl + 1;\n }\n }\n return result;\n } : function (string) {\n return string.split(/\\r\\n?|\\n/);\n };\n var hasSelection = window.getSelection ? function (te) {\n try {\n return te.selectionStart != te.selectionEnd;\n } catch (e) {\n return false;\n }\n } : function (te) {\n var range;\n try {\n range = te.ownerDocument.selection.createRange();\n } catch (e) {}\n if (!range || range.parentElement() != te) {\n return false;\n }\n return range.compareEndPoints(\"StartToEnd\", range) != 0;\n };\n var hasCopyEvent = function () {\n var e = elt(\"div\");\n if (\"oncopy\" in e) {\n return true;\n }\n e.setAttribute(\"oncopy\", \"return;\");\n return typeof e.oncopy == \"function\";\n }();\n var badZoomedRects = null;\n function hasBadZoomedRects(measure) {\n if (badZoomedRects != null) {\n return badZoomedRects;\n }\n var node = removeChildrenAndAdd(measure, elt(\"span\", \"x\"));\n var normal = node.getBoundingClientRect();\n var fromRange = range(node, 0, 1).getBoundingClientRect();\n return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1;\n }\n\n // Known modes, by name and by MIME\n var modes = {},\n mimeModes = {};\n\n // Extra arguments are stored as the mode's dependencies, which is\n // used by (legacy) mechanisms like loadmode.js to automatically\n // load a mode. (Preferred mechanism is the require/define calls.)\n function defineMode(name, mode) {\n if (arguments.length > 2) {\n mode.dependencies = Array.prototype.slice.call(arguments, 2);\n }\n modes[name] = mode;\n }\n function defineMIME(mime, spec) {\n mimeModes[mime] = spec;\n }\n\n // Given a MIME type, a {name, ...options} config object, or a name\n // string, return a mode config object.\n function resolveMode(spec) {\n if (typeof spec == \"string\" && mimeModes.hasOwnProperty(spec)) {\n spec = mimeModes[spec];\n } else if (spec && typeof spec.name == \"string\" && mimeModes.hasOwnProperty(spec.name)) {\n var found = mimeModes[spec.name];\n if (typeof found == \"string\") {\n found = {\n name: found\n };\n }\n spec = createObj(found, spec);\n spec.name = found.name;\n } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+xml$/.test(spec)) {\n return resolveMode(\"application/xml\");\n } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+json$/.test(spec)) {\n return resolveMode(\"application/json\");\n }\n if (typeof spec == \"string\") {\n return {\n name: spec\n };\n } else {\n return spec || {\n name: \"null\"\n };\n }\n }\n\n // Given a mode spec (anything that resolveMode accepts), find and\n // initialize an actual mode object.\n function getMode(options, spec) {\n spec = resolveMode(spec);\n var mfactory = modes[spec.name];\n if (!mfactory) {\n return getMode(options, \"text/plain\");\n }\n var modeObj = mfactory(options, spec);\n if (modeExtensions.hasOwnProperty(spec.name)) {\n var exts = modeExtensions[spec.name];\n for (var prop in exts) {\n if (!exts.hasOwnProperty(prop)) {\n continue;\n }\n if (modeObj.hasOwnProperty(prop)) {\n modeObj[\"_\" + prop] = modeObj[prop];\n }\n modeObj[prop] = exts[prop];\n }\n }\n modeObj.name = spec.name;\n if (spec.helperType) {\n modeObj.helperType = spec.helperType;\n }\n if (spec.modeProps) {\n for (var prop$1 in spec.modeProps) {\n modeObj[prop$1] = spec.modeProps[prop$1];\n }\n }\n return modeObj;\n }\n\n // This can be used to attach properties to mode objects from\n // outside the actual mode definition.\n var modeExtensions = {};\n function extendMode(mode, properties) {\n var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : modeExtensions[mode] = {};\n copyObj(properties, exts);\n }\n function copyState(mode, state) {\n if (state === true) {\n return state;\n }\n if (mode.copyState) {\n return mode.copyState(state);\n }\n var nstate = {};\n for (var n in state) {\n var val = state[n];\n if (val instanceof Array) {\n val = val.concat([]);\n }\n nstate[n] = val;\n }\n return nstate;\n }\n\n // Given a mode and a state (for that mode), find the inner mode and\n // state at the position that the state refers to.\n function innerMode(mode, state) {\n var info;\n while (mode.innerMode) {\n info = mode.innerMode(state);\n if (!info || info.mode == mode) {\n break;\n }\n state = info.state;\n mode = info.mode;\n }\n return info || {\n mode: mode,\n state: state\n };\n }\n function startState(mode, a1, a2) {\n return mode.startState ? mode.startState(a1, a2) : true;\n }\n\n // STRING STREAM\n\n // Fed to the mode parsers, provides helper functions to make\n // parsers more succinct.\n\n var StringStream = function (string, tabSize, lineOracle) {\n this.pos = this.start = 0;\n this.string = string;\n this.tabSize = tabSize || 8;\n this.lastColumnPos = this.lastColumnValue = 0;\n this.lineStart = 0;\n this.lineOracle = lineOracle;\n };\n StringStream.prototype.eol = function () {\n return this.pos >= this.string.length;\n };\n StringStream.prototype.sol = function () {\n return this.pos == this.lineStart;\n };\n StringStream.prototype.peek = function () {\n return this.string.charAt(this.pos) || undefined;\n };\n StringStream.prototype.next = function () {\n if (this.pos < this.string.length) {\n return this.string.charAt(this.pos++);\n }\n };\n StringStream.prototype.eat = function (match) {\n var ch = this.string.charAt(this.pos);\n var ok;\n if (typeof match == \"string\") {\n ok = ch == match;\n } else {\n ok = ch && (match.test ? match.test(ch) : match(ch));\n }\n if (ok) {\n ++this.pos;\n return ch;\n }\n };\n StringStream.prototype.eatWhile = function (match) {\n var start = this.pos;\n while (this.eat(match)) {}\n return this.pos > start;\n };\n StringStream.prototype.eatSpace = function () {\n var start = this.pos;\n while (/[\\s\\u00a0]/.test(this.string.charAt(this.pos))) {\n ++this.pos;\n }\n return this.pos > start;\n };\n StringStream.prototype.skipToEnd = function () {\n this.pos = this.string.length;\n };\n StringStream.prototype.skipTo = function (ch) {\n var found = this.string.indexOf(ch, this.pos);\n if (found > -1) {\n this.pos = found;\n return true;\n }\n };\n StringStream.prototype.backUp = function (n) {\n this.pos -= n;\n };\n StringStream.prototype.column = function () {\n if (this.lastColumnPos < this.start) {\n this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue);\n this.lastColumnPos = this.start;\n }\n return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0);\n };\n StringStream.prototype.indentation = function () {\n return countColumn(this.string, null, this.tabSize) - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0);\n };\n StringStream.prototype.match = function (pattern, consume, caseInsensitive) {\n if (typeof pattern == \"string\") {\n var cased = function (str) {\n return caseInsensitive ? str.toLowerCase() : str;\n };\n var substr = this.string.substr(this.pos, pattern.length);\n if (cased(substr) == cased(pattern)) {\n if (consume !== false) {\n this.pos += pattern.length;\n }\n return true;\n }\n } else {\n var match = this.string.slice(this.pos).match(pattern);\n if (match && match.index > 0) {\n return null;\n }\n if (match && consume !== false) {\n this.pos += match[0].length;\n }\n return match;\n }\n };\n StringStream.prototype.current = function () {\n return this.string.slice(this.start, this.pos);\n };\n StringStream.prototype.hideFirstChars = function (n, inner) {\n this.lineStart += n;\n try {\n return inner();\n } finally {\n this.lineStart -= n;\n }\n };\n StringStream.prototype.lookAhead = function (n) {\n var oracle = this.lineOracle;\n return oracle && oracle.lookAhead(n);\n };\n StringStream.prototype.baseToken = function () {\n var oracle = this.lineOracle;\n return oracle && oracle.baseToken(this.pos);\n };\n\n // Find the line object corresponding to the given line number.\n function getLine(doc, n) {\n n -= doc.first;\n if (n < 0 || n >= doc.size) {\n throw new Error(\"There is no line \" + (n + doc.first) + \" in the document.\");\n }\n var chunk = doc;\n while (!chunk.lines) {\n for (var i = 0;; ++i) {\n var child = chunk.children[i],\n sz = child.chunkSize();\n if (n < sz) {\n chunk = child;\n break;\n }\n n -= sz;\n }\n }\n return chunk.lines[n];\n }\n\n // Get the part of a document between two positions, as an array of\n // strings.\n function getBetween(doc, start, end) {\n var out = [],\n n = start.line;\n doc.iter(start.line, end.line + 1, function (line) {\n var text = line.text;\n if (n == end.line) {\n text = text.slice(0, end.ch);\n }\n if (n == start.line) {\n text = text.slice(start.ch);\n }\n out.push(text);\n ++n;\n });\n return out;\n }\n // Get the lines between from and to, as array of strings.\n function getLines(doc, from, to) {\n var out = [];\n doc.iter(from, to, function (line) {\n out.push(line.text);\n }); // iter aborts when callback returns truthy value\n return out;\n }\n\n // Update the height of a line, propagating the height change\n // upwards to parent nodes.\n function updateLineHeight(line, height) {\n var diff = height - line.height;\n if (diff) {\n for (var n = line; n; n = n.parent) {\n n.height += diff;\n }\n }\n }\n\n // Given a line object, find its line number by walking up through\n // its parent links.\n function lineNo(line) {\n if (line.parent == null) {\n return null;\n }\n var cur = line.parent,\n no = indexOf(cur.lines, line);\n for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) {\n for (var i = 0;; ++i) {\n if (chunk.children[i] == cur) {\n break;\n }\n no += chunk.children[i].chunkSize();\n }\n }\n return no + cur.first;\n }\n\n // Find the line at the given vertical position, using the height\n // information in the document tree.\n function lineAtHeight(chunk, h) {\n var n = chunk.first;\n outer: do {\n for (var i$1 = 0; i$1 < chunk.children.length; ++i$1) {\n var child = chunk.children[i$1],\n ch = child.height;\n if (h < ch) {\n chunk = child;\n continue outer;\n }\n h -= ch;\n n += child.chunkSize();\n }\n return n;\n } while (!chunk.lines);\n var i = 0;\n for (; i < chunk.lines.length; ++i) {\n var line = chunk.lines[i],\n lh = line.height;\n if (h < lh) {\n break;\n }\n h -= lh;\n }\n return n + i;\n }\n function isLine(doc, l) {\n return l >= doc.first && l < doc.first + doc.size;\n }\n function lineNumberFor(options, i) {\n return String(options.lineNumberFormatter(i + options.firstLineNumber));\n }\n\n // A Pos instance represents a position within the text.\n function Pos(line, ch, sticky) {\n if (sticky === void 0) sticky = null;\n if (!(this instanceof Pos)) {\n return new Pos(line, ch, sticky);\n }\n this.line = line;\n this.ch = ch;\n this.sticky = sticky;\n }\n\n // Compare two positions, return 0 if they are the same, a negative\n // number when a is less, and a positive number otherwise.\n function cmp(a, b) {\n return a.line - b.line || a.ch - b.ch;\n }\n function equalCursorPos(a, b) {\n return a.sticky == b.sticky && cmp(a, b) == 0;\n }\n function copyPos(x) {\n return Pos(x.line, x.ch);\n }\n function maxPos(a, b) {\n return cmp(a, b) < 0 ? b : a;\n }\n function minPos(a, b) {\n return cmp(a, b) < 0 ? a : b;\n }\n\n // Most of the external API clips given positions to make sure they\n // actually exist within the document.\n function clipLine(doc, n) {\n return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1));\n }\n function clipPos(doc, pos) {\n if (pos.line < doc.first) {\n return Pos(doc.first, 0);\n }\n var last = doc.first + doc.size - 1;\n if (pos.line > last) {\n return Pos(last, getLine(doc, last).text.length);\n }\n return clipToLen(pos, getLine(doc, pos.line).text.length);\n }\n function clipToLen(pos, linelen) {\n var ch = pos.ch;\n if (ch == null || ch > linelen) {\n return Pos(pos.line, linelen);\n } else if (ch < 0) {\n return Pos(pos.line, 0);\n } else {\n return pos;\n }\n }\n function clipPosArray(doc, array) {\n var out = [];\n for (var i = 0; i < array.length; i++) {\n out[i] = clipPos(doc, array[i]);\n }\n return out;\n }\n var SavedContext = function (state, lookAhead) {\n this.state = state;\n this.lookAhead = lookAhead;\n };\n var Context = function (doc, state, line, lookAhead) {\n this.state = state;\n this.doc = doc;\n this.line = line;\n this.maxLookAhead = lookAhead || 0;\n this.baseTokens = null;\n this.baseTokenPos = 1;\n };\n Context.prototype.lookAhead = function (n) {\n var line = this.doc.getLine(this.line + n);\n if (line != null && n > this.maxLookAhead) {\n this.maxLookAhead = n;\n }\n return line;\n };\n Context.prototype.baseToken = function (n) {\n if (!this.baseTokens) {\n return null;\n }\n while (this.baseTokens[this.baseTokenPos] <= n) {\n this.baseTokenPos += 2;\n }\n var type = this.baseTokens[this.baseTokenPos + 1];\n return {\n type: type && type.replace(/( |^)overlay .*/, \"\"),\n size: this.baseTokens[this.baseTokenPos] - n\n };\n };\n Context.prototype.nextLine = function () {\n this.line++;\n if (this.maxLookAhead > 0) {\n this.maxLookAhead--;\n }\n };\n Context.fromSaved = function (doc, saved, line) {\n if (saved instanceof SavedContext) {\n return new Context(doc, copyState(doc.mode, saved.state), line, saved.lookAhead);\n } else {\n return new Context(doc, copyState(doc.mode, saved), line);\n }\n };\n Context.prototype.save = function (copy) {\n var state = copy !== false ? copyState(this.doc.mode, this.state) : this.state;\n return this.maxLookAhead > 0 ? new SavedContext(state, this.maxLookAhead) : state;\n };\n\n // Compute a style array (an array starting with a mode generation\n // -- for invalidation -- followed by pairs of end positions and\n // style strings), which is used to highlight the tokens on the\n // line.\n function highlightLine(cm, line, context, forceToEnd) {\n // A styles array always starts with a number identifying the\n // mode/overlays that it is based on (for easy invalidation).\n var st = [cm.state.modeGen],\n lineClasses = {};\n // Compute the base array of styles\n runMode(cm, line.text, cm.doc.mode, context, function (end, style) {\n return st.push(end, style);\n }, lineClasses, forceToEnd);\n var state = context.state;\n\n // Run overlays, adjust style array.\n var loop = function (o) {\n context.baseTokens = st;\n var overlay = cm.state.overlays[o],\n i = 1,\n at = 0;\n context.state = true;\n runMode(cm, line.text, overlay.mode, context, function (end, style) {\n var start = i;\n // Ensure there's a token end at the current position, and that i points at it\n while (at < end) {\n var i_end = st[i];\n if (i_end > end) {\n st.splice(i, 1, end, st[i + 1], i_end);\n }\n i += 2;\n at = Math.min(end, i_end);\n }\n if (!style) {\n return;\n }\n if (overlay.opaque) {\n st.splice(start, i - start, end, \"overlay \" + style);\n i = start + 2;\n } else {\n for (; start < i; start += 2) {\n var cur = st[start + 1];\n st[start + 1] = (cur ? cur + \" \" : \"\") + \"overlay \" + style;\n }\n }\n }, lineClasses);\n context.state = state;\n context.baseTokens = null;\n context.baseTokenPos = 1;\n };\n for (var o = 0; o < cm.state.overlays.length; ++o) loop(o);\n return {\n styles: st,\n classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null\n };\n }\n function getLineStyles(cm, line, updateFrontier) {\n if (!line.styles || line.styles[0] != cm.state.modeGen) {\n var context = getContextBefore(cm, lineNo(line));\n var resetState = line.text.length > cm.options.maxHighlightLength && copyState(cm.doc.mode, context.state);\n var result = highlightLine(cm, line, context);\n if (resetState) {\n context.state = resetState;\n }\n line.stateAfter = context.save(!resetState);\n line.styles = result.styles;\n if (result.classes) {\n line.styleClasses = result.classes;\n } else if (line.styleClasses) {\n line.styleClasses = null;\n }\n if (updateFrontier === cm.doc.highlightFrontier) {\n cm.doc.modeFrontier = Math.max(cm.doc.modeFrontier, ++cm.doc.highlightFrontier);\n }\n }\n return line.styles;\n }\n function getContextBefore(cm, n, precise) {\n var doc = cm.doc,\n display = cm.display;\n if (!doc.mode.startState) {\n return new Context(doc, true, n);\n }\n var start = findStartLine(cm, n, precise);\n var saved = start > doc.first && getLine(doc, start - 1).stateAfter;\n var context = saved ? Context.fromSaved(doc, saved, start) : new Context(doc, startState(doc.mode), start);\n doc.iter(start, n, function (line) {\n processLine(cm, line.text, context);\n var pos = context.line;\n line.stateAfter = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo ? context.save() : null;\n context.nextLine();\n });\n if (precise) {\n doc.modeFrontier = context.line;\n }\n return context;\n }\n\n // Lightweight form of highlight -- proceed over this line and\n // update state, but don't save a style array. Used for lines that\n // aren't currently visible.\n function processLine(cm, text, context, startAt) {\n var mode = cm.doc.mode;\n var stream = new StringStream(text, cm.options.tabSize, context);\n stream.start = stream.pos = startAt || 0;\n if (text == \"\") {\n callBlankLine(mode, context.state);\n }\n while (!stream.eol()) {\n readToken(mode, stream, context.state);\n stream.start = stream.pos;\n }\n }\n function callBlankLine(mode, state) {\n if (mode.blankLine) {\n return mode.blankLine(state);\n }\n if (!mode.innerMode) {\n return;\n }\n var inner = innerMode(mode, state);\n if (inner.mode.blankLine) {\n return inner.mode.blankLine(inner.state);\n }\n }\n function readToken(mode, stream, state, inner) {\n for (var i = 0; i < 10; i++) {\n if (inner) {\n inner[0] = innerMode(mode, state).mode;\n }\n var style = mode.token(stream, state);\n if (stream.pos > stream.start) {\n return style;\n }\n }\n throw new Error(\"Mode \" + mode.name + \" failed to advance stream.\");\n }\n var Token = function (stream, type, state) {\n this.start = stream.start;\n this.end = stream.pos;\n this.string = stream.current();\n this.type = type || null;\n this.state = state;\n };\n\n // Utility for getTokenAt and getLineTokens\n function takeToken(cm, pos, precise, asArray) {\n var doc = cm.doc,\n mode = doc.mode,\n style;\n pos = clipPos(doc, pos);\n var line = getLine(doc, pos.line),\n context = getContextBefore(cm, pos.line, precise);\n var stream = new StringStream(line.text, cm.options.tabSize, context),\n tokens;\n if (asArray) {\n tokens = [];\n }\n while ((asArray || stream.pos < pos.ch) && !stream.eol()) {\n stream.start = stream.pos;\n style = readToken(mode, stream, context.state);\n if (asArray) {\n tokens.push(new Token(stream, style, copyState(doc.mode, context.state)));\n }\n }\n return asArray ? tokens : new Token(stream, style, context.state);\n }\n function extractLineClasses(type, output) {\n if (type) {\n for (;;) {\n var lineClass = type.match(/(?:^|\\s+)line-(background-)?(\\S+)/);\n if (!lineClass) {\n break;\n }\n type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length);\n var prop = lineClass[1] ? \"bgClass\" : \"textClass\";\n if (output[prop] == null) {\n output[prop] = lineClass[2];\n } else if (!new RegExp(\"(?:^|\\\\s)\" + lineClass[2] + \"(?:$|\\\\s)\").test(output[prop])) {\n output[prop] += \" \" + lineClass[2];\n }\n }\n }\n return type;\n }\n\n // Run the given mode's parser over a line, calling f for each token.\n function runMode(cm, text, mode, context, f, lineClasses, forceToEnd) {\n var flattenSpans = mode.flattenSpans;\n if (flattenSpans == null) {\n flattenSpans = cm.options.flattenSpans;\n }\n var curStart = 0,\n curStyle = null;\n var stream = new StringStream(text, cm.options.tabSize, context),\n style;\n var inner = cm.options.addModeClass && [null];\n if (text == \"\") {\n extractLineClasses(callBlankLine(mode, context.state), lineClasses);\n }\n while (!stream.eol()) {\n if (stream.pos > cm.options.maxHighlightLength) {\n flattenSpans = false;\n if (forceToEnd) {\n processLine(cm, text, context, stream.pos);\n }\n stream.pos = text.length;\n style = null;\n } else {\n style = extractLineClasses(readToken(mode, stream, context.state, inner), lineClasses);\n }\n if (inner) {\n var mName = inner[0].name;\n if (mName) {\n style = \"m-\" + (style ? mName + \" \" + style : mName);\n }\n }\n if (!flattenSpans || curStyle != style) {\n while (curStart < stream.start) {\n curStart = Math.min(stream.start, curStart + 5000);\n f(curStart, curStyle);\n }\n curStyle = style;\n }\n stream.start = stream.pos;\n }\n while (curStart < stream.pos) {\n // Webkit seems to refuse to render text nodes longer than 57444\n // characters, and returns inaccurate measurements in nodes\n // starting around 5000 chars.\n var pos = Math.min(stream.pos, curStart + 5000);\n f(pos, curStyle);\n curStart = pos;\n }\n }\n\n // Finds the line to start with when starting a parse. Tries to\n // find a line with a stateAfter, so that it can start with a\n // valid state. If that fails, it returns the line with the\n // smallest indentation, which tends to need the least context to\n // parse correctly.\n function findStartLine(cm, n, precise) {\n var minindent,\n minline,\n doc = cm.doc;\n var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100);\n for (var search = n; search > lim; --search) {\n if (search <= doc.first) {\n return doc.first;\n }\n var line = getLine(doc, search - 1),\n after = line.stateAfter;\n if (after && (!precise || search + (after instanceof SavedContext ? after.lookAhead : 0) <= doc.modeFrontier)) {\n return search;\n }\n var indented = countColumn(line.text, null, cm.options.tabSize);\n if (minline == null || minindent > indented) {\n minline = search - 1;\n minindent = indented;\n }\n }\n return minline;\n }\n function retreatFrontier(doc, n) {\n doc.modeFrontier = Math.min(doc.modeFrontier, n);\n if (doc.highlightFrontier < n - 10) {\n return;\n }\n var start = doc.first;\n for (var line = n - 1; line > start; line--) {\n var saved = getLine(doc, line).stateAfter;\n // change is on 3\n // state on line 1 looked ahead 2 -- so saw 3\n // test 1 + 2 < 3 should cover this\n if (saved && (!(saved instanceof SavedContext) || line + saved.lookAhead < n)) {\n start = line + 1;\n break;\n }\n }\n doc.highlightFrontier = Math.min(doc.highlightFrontier, start);\n }\n\n // Optimize some code when these features are not used.\n var sawReadOnlySpans = false,\n sawCollapsedSpans = false;\n function seeReadOnlySpans() {\n sawReadOnlySpans = true;\n }\n function seeCollapsedSpans() {\n sawCollapsedSpans = true;\n }\n\n // TEXTMARKER SPANS\n\n function MarkedSpan(marker, from, to) {\n this.marker = marker;\n this.from = from;\n this.to = to;\n }\n\n // Search an array of spans for a span matching the given marker.\n function getMarkedSpanFor(spans, marker) {\n if (spans) {\n for (var i = 0; i < spans.length; ++i) {\n var span = spans[i];\n if (span.marker == marker) {\n return span;\n }\n }\n }\n }\n // Remove a span from an array, returning undefined if no spans are\n // left (we don't store arrays for lines without spans).\n function removeMarkedSpan(spans, span) {\n var r;\n for (var i = 0; i < spans.length; ++i) {\n if (spans[i] != span) {\n (r || (r = [])).push(spans[i]);\n }\n }\n return r;\n }\n // Add a span to a line.\n function addMarkedSpan(line, span) {\n line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span];\n span.marker.attachLine(line);\n }\n\n // Used for the algorithm that adjusts markers for a change in the\n // document. These functions cut an array of spans at a given\n // character position, returning an array of remaining chunks (or\n // undefined if nothing remains).\n function markedSpansBefore(old, startCh, isInsert) {\n var nw;\n if (old) {\n for (var i = 0; i < old.length; ++i) {\n var span = old[i],\n marker = span.marker;\n var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh);\n if (startsBefore || span.from == startCh && marker.type == \"bookmark\" && (!isInsert || !span.marker.insertLeft)) {\n var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh);\n (nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to));\n }\n }\n }\n return nw;\n }\n function markedSpansAfter(old, endCh, isInsert) {\n var nw;\n if (old) {\n for (var i = 0; i < old.length; ++i) {\n var span = old[i],\n marker = span.marker;\n var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh);\n if (endsAfter || span.from == endCh && marker.type == \"bookmark\" && (!isInsert || span.marker.insertLeft)) {\n var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh);\n (nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh, span.to == null ? null : span.to - endCh));\n }\n }\n }\n return nw;\n }\n\n // Given a change object, compute the new set of marker spans that\n // cover the line in which the change took place. Removes spans\n // entirely within the change, reconnects spans belonging to the\n // same marker that appear on both sides of the change, and cuts off\n // spans partially within the change. Returns an array of span\n // arrays with one element for each line in (after) the change.\n function stretchSpansOverChange(doc, change) {\n if (change.full) {\n return null;\n }\n var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans;\n var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans;\n if (!oldFirst && !oldLast) {\n return null;\n }\n var startCh = change.from.ch,\n endCh = change.to.ch,\n isInsert = cmp(change.from, change.to) == 0;\n // Get the spans that 'stick out' on both sides\n var first = markedSpansBefore(oldFirst, startCh, isInsert);\n var last = markedSpansAfter(oldLast, endCh, isInsert);\n\n // Next, merge those two ends\n var sameLine = change.text.length == 1,\n offset = lst(change.text).length + (sameLine ? startCh : 0);\n if (first) {\n // Fix up .to properties of first\n for (var i = 0; i < first.length; ++i) {\n var span = first[i];\n if (span.to == null) {\n var found = getMarkedSpanFor(last, span.marker);\n if (!found) {\n span.to = startCh;\n } else if (sameLine) {\n span.to = found.to == null ? null : found.to + offset;\n }\n }\n }\n }\n if (last) {\n // Fix up .from in last (or move them into first in case of sameLine)\n for (var i$1 = 0; i$1 < last.length; ++i$1) {\n var span$1 = last[i$1];\n if (span$1.to != null) {\n span$1.to += offset;\n }\n if (span$1.from == null) {\n var found$1 = getMarkedSpanFor(first, span$1.marker);\n if (!found$1) {\n span$1.from = offset;\n if (sameLine) {\n (first || (first = [])).push(span$1);\n }\n }\n } else {\n span$1.from += offset;\n if (sameLine) {\n (first || (first = [])).push(span$1);\n }\n }\n }\n }\n // Make sure we didn't create any zero-length spans\n if (first) {\n first = clearEmptySpans(first);\n }\n if (last && last != first) {\n last = clearEmptySpans(last);\n }\n var newMarkers = [first];\n if (!sameLine) {\n // Fill gap with whole-line-spans\n var gap = change.text.length - 2,\n gapMarkers;\n if (gap > 0 && first) {\n for (var i$2 = 0; i$2 < first.length; ++i$2) {\n if (first[i$2].to == null) {\n (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i$2].marker, null, null));\n }\n }\n }\n for (var i$3 = 0; i$3 < gap; ++i$3) {\n newMarkers.push(gapMarkers);\n }\n newMarkers.push(last);\n }\n return newMarkers;\n }\n\n // Remove spans that are empty and don't have a clearWhenEmpty\n // option of false.\n function clearEmptySpans(spans) {\n for (var i = 0; i < spans.length; ++i) {\n var span = spans[i];\n if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false) {\n spans.splice(i--, 1);\n }\n }\n if (!spans.length) {\n return null;\n }\n return spans;\n }\n\n // Used to 'clip' out readOnly ranges when making a change.\n function removeReadOnlyRanges(doc, from, to) {\n var markers = null;\n doc.iter(from.line, to.line + 1, function (line) {\n if (line.markedSpans) {\n for (var i = 0; i < line.markedSpans.length; ++i) {\n var mark = line.markedSpans[i].marker;\n if (mark.readOnly && (!markers || indexOf(markers, mark) == -1)) {\n (markers || (markers = [])).push(mark);\n }\n }\n }\n });\n if (!markers) {\n return null;\n }\n var parts = [{\n from: from,\n to: to\n }];\n for (var i = 0; i < markers.length; ++i) {\n var mk = markers[i],\n m = mk.find(0);\n for (var j = 0; j < parts.length; ++j) {\n var p = parts[j];\n if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) {\n continue;\n }\n var newParts = [j, 1],\n dfrom = cmp(p.from, m.from),\n dto = cmp(p.to, m.to);\n if (dfrom < 0 || !mk.inclusiveLeft && !dfrom) {\n newParts.push({\n from: p.from,\n to: m.from\n });\n }\n if (dto > 0 || !mk.inclusiveRight && !dto) {\n newParts.push({\n from: m.to,\n to: p.to\n });\n }\n parts.splice.apply(parts, newParts);\n j += newParts.length - 3;\n }\n }\n return parts;\n }\n\n // Connect or disconnect spans from a line.\n function detachMarkedSpans(line) {\n var spans = line.markedSpans;\n if (!spans) {\n return;\n }\n for (var i = 0; i < spans.length; ++i) {\n spans[i].marker.detachLine(line);\n }\n line.markedSpans = null;\n }\n function attachMarkedSpans(line, spans) {\n if (!spans) {\n return;\n }\n for (var i = 0; i < spans.length; ++i) {\n spans[i].marker.attachLine(line);\n }\n line.markedSpans = spans;\n }\n\n // Helpers used when computing which overlapping collapsed span\n // counts as the larger one.\n function extraLeft(marker) {\n return marker.inclusiveLeft ? -1 : 0;\n }\n function extraRight(marker) {\n return marker.inclusiveRight ? 1 : 0;\n }\n\n // Returns a number indicating which of two overlapping collapsed\n // spans is larger (and thus includes the other). Falls back to\n // comparing ids when the spans cover exactly the same range.\n function compareCollapsedMarkers(a, b) {\n var lenDiff = a.lines.length - b.lines.length;\n if (lenDiff != 0) {\n return lenDiff;\n }\n var aPos = a.find(),\n bPos = b.find();\n var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b);\n if (fromCmp) {\n return -fromCmp;\n }\n var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b);\n if (toCmp) {\n return toCmp;\n }\n return b.id - a.id;\n }\n\n // Find out whether a line ends or starts in a collapsed span. If\n // so, return the marker for that span.\n function collapsedSpanAtSide(line, start) {\n var sps = sawCollapsedSpans && line.markedSpans,\n found;\n if (sps) {\n for (var sp = void 0, i = 0; i < sps.length; ++i) {\n sp = sps[i];\n if (sp.marker.collapsed && (start ? sp.from : sp.to) == null && (!found || compareCollapsedMarkers(found, sp.marker) < 0)) {\n found = sp.marker;\n }\n }\n }\n return found;\n }\n function collapsedSpanAtStart(line) {\n return collapsedSpanAtSide(line, true);\n }\n function collapsedSpanAtEnd(line) {\n return collapsedSpanAtSide(line, false);\n }\n function collapsedSpanAround(line, ch) {\n var sps = sawCollapsedSpans && line.markedSpans,\n found;\n if (sps) {\n for (var i = 0; i < sps.length; ++i) {\n var sp = sps[i];\n if (sp.marker.collapsed && (sp.from == null || sp.from < ch) && (sp.to == null || sp.to > ch) && (!found || compareCollapsedMarkers(found, sp.marker) < 0)) {\n found = sp.marker;\n }\n }\n }\n return found;\n }\n\n // Test whether there exists a collapsed span that partially\n // overlaps (covers the start or end, but not both) of a new span.\n // Such overlap is not allowed.\n function conflictingCollapsedRange(doc, lineNo, from, to, marker) {\n var line = getLine(doc, lineNo);\n var sps = sawCollapsedSpans && line.markedSpans;\n if (sps) {\n for (var i = 0; i < sps.length; ++i) {\n var sp = sps[i];\n if (!sp.marker.collapsed) {\n continue;\n }\n var found = sp.marker.find(0);\n var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker);\n var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker);\n if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) {\n continue;\n }\n if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) || fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0)) {\n return true;\n }\n }\n }\n }\n\n // A visual line is a line as drawn on the screen. Folding, for\n // example, can cause multiple logical lines to appear on the same\n // visual line. This finds the start of the visual line that the\n // given line is part of (usually that is the line itself).\n function visualLine(line) {\n var merged;\n while (merged = collapsedSpanAtStart(line)) {\n line = merged.find(-1, true).line;\n }\n return line;\n }\n function visualLineEnd(line) {\n var merged;\n while (merged = collapsedSpanAtEnd(line)) {\n line = merged.find(1, true).line;\n }\n return line;\n }\n\n // Returns an array of logical lines that continue the visual line\n // started by the argument, or undefined if there are no such lines.\n function visualLineContinued(line) {\n var merged, lines;\n while (merged = collapsedSpanAtEnd(line)) {\n line = merged.find(1, true).line;\n (lines || (lines = [])).push(line);\n }\n return lines;\n }\n\n // Get the line number of the start of the visual line that the\n // given line number is part of.\n function visualLineNo(doc, lineN) {\n var line = getLine(doc, lineN),\n vis = visualLine(line);\n if (line == vis) {\n return lineN;\n }\n return lineNo(vis);\n }\n\n // Get the line number of the start of the next visual line after\n // the given line.\n function visualLineEndNo(doc, lineN) {\n if (lineN > doc.lastLine()) {\n return lineN;\n }\n var line = getLine(doc, lineN),\n merged;\n if (!lineIsHidden(doc, line)) {\n return lineN;\n }\n while (merged = collapsedSpanAtEnd(line)) {\n line = merged.find(1, true).line;\n }\n return lineNo(line) + 1;\n }\n\n // Compute whether a line is hidden. Lines count as hidden when they\n // are part of a visual line that starts with another line, or when\n // they are entirely covered by collapsed, non-widget span.\n function lineIsHidden(doc, line) {\n var sps = sawCollapsedSpans && line.markedSpans;\n if (sps) {\n for (var sp = void 0, i = 0; i < sps.length; ++i) {\n sp = sps[i];\n if (!sp.marker.collapsed) {\n continue;\n }\n if (sp.from == null) {\n return true;\n }\n if (sp.marker.widgetNode) {\n continue;\n }\n if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp)) {\n return true;\n }\n }\n }\n }\n function lineIsHiddenInner(doc, line, span) {\n if (span.to == null) {\n var end = span.marker.find(1, true);\n return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker));\n }\n if (span.marker.inclusiveRight && span.to == line.text.length) {\n return true;\n }\n for (var sp = void 0, i = 0; i < line.markedSpans.length; ++i) {\n sp = line.markedSpans[i];\n if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to && (sp.to == null || sp.to != span.from) && (sp.marker.inclusiveLeft || span.marker.inclusiveRight) && lineIsHiddenInner(doc, line, sp)) {\n return true;\n }\n }\n }\n\n // Find the height above the given line.\n function heightAtLine(lineObj) {\n lineObj = visualLine(lineObj);\n var h = 0,\n chunk = lineObj.parent;\n for (var i = 0; i < chunk.lines.length; ++i) {\n var line = chunk.lines[i];\n if (line == lineObj) {\n break;\n } else {\n h += line.height;\n }\n }\n for (var p = chunk.parent; p; chunk = p, p = chunk.parent) {\n for (var i$1 = 0; i$1 < p.children.length; ++i$1) {\n var cur = p.children[i$1];\n if (cur == chunk) {\n break;\n } else {\n h += cur.height;\n }\n }\n }\n return h;\n }\n\n // Compute the character length of a line, taking into account\n // collapsed ranges (see markText) that might hide parts, and join\n // other lines onto it.\n function lineLength(line) {\n if (line.height == 0) {\n return 0;\n }\n var len = line.text.length,\n merged,\n cur = line;\n while (merged = collapsedSpanAtStart(cur)) {\n var found = merged.find(0, true);\n cur = found.from.line;\n len += found.from.ch - found.to.ch;\n }\n cur = line;\n while (merged = collapsedSpanAtEnd(cur)) {\n var found$1 = merged.find(0, true);\n len -= cur.text.length - found$1.from.ch;\n cur = found$1.to.line;\n len += cur.text.length - found$1.to.ch;\n }\n return len;\n }\n\n // Find the longest line in the document.\n function findMaxLine(cm) {\n var d = cm.display,\n doc = cm.doc;\n d.maxLine = getLine(doc, doc.first);\n d.maxLineLength = lineLength(d.maxLine);\n d.maxLineChanged = true;\n doc.iter(function (line) {\n var len = lineLength(line);\n if (len > d.maxLineLength) {\n d.maxLineLength = len;\n d.maxLine = line;\n }\n });\n }\n\n // LINE DATA STRUCTURE\n\n // Line objects. These hold state related to a line, including\n // highlighting info (the styles array).\n var Line = function (text, markedSpans, estimateHeight) {\n this.text = text;\n attachMarkedSpans(this, markedSpans);\n this.height = estimateHeight ? estimateHeight(this) : 1;\n };\n Line.prototype.lineNo = function () {\n return lineNo(this);\n };\n eventMixin(Line);\n\n // Change the content (text, markers) of a line. Automatically\n // invalidates cached information and tries to re-estimate the\n // line's height.\n function updateLine(line, text, markedSpans, estimateHeight) {\n line.text = text;\n if (line.stateAfter) {\n line.stateAfter = null;\n }\n if (line.styles) {\n line.styles = null;\n }\n if (line.order != null) {\n line.order = null;\n }\n detachMarkedSpans(line);\n attachMarkedSpans(line, markedSpans);\n var estHeight = estimateHeight ? estimateHeight(line) : 1;\n if (estHeight != line.height) {\n updateLineHeight(line, estHeight);\n }\n }\n\n // Detach a line from the document tree and its markers.\n function cleanUpLine(line) {\n line.parent = null;\n detachMarkedSpans(line);\n }\n\n // Convert a style as returned by a mode (either null, or a string\n // containing one or more styles) to a CSS style. This is cached,\n // and also looks for line-wide styles.\n var styleToClassCache = {},\n styleToClassCacheWithMode = {};\n function interpretTokenStyle(style, options) {\n if (!style || /^\\s*$/.test(style)) {\n return null;\n }\n var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache;\n return cache[style] || (cache[style] = style.replace(/\\S+/g, \"cm-$&\"));\n }\n\n // Render the DOM representation of the text of a line. Also builds\n // up a 'line map', which points at the DOM nodes that represent\n // specific stretches of text, and is used by the measuring code.\n // The returned object contains the DOM node, this map, and\n // information about line-wide styles that were set by the mode.\n function buildLineContent(cm, lineView) {\n // The padding-right forces the element to have a 'border', which\n // is needed on Webkit to be able to get line-level bounding\n // rectangles for it (in measureChar).\n var content = eltP(\"span\", null, null, webkit ? \"padding-right: .1px\" : null);\n var builder = {\n pre: eltP(\"pre\", [content], \"CodeMirror-line\"),\n content: content,\n col: 0,\n pos: 0,\n cm: cm,\n trailingSpace: false,\n splitSpaces: cm.getOption(\"lineWrapping\")\n };\n lineView.measure = {};\n\n // Iterate over the logical lines that make up this visual line.\n for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) {\n var line = i ? lineView.rest[i - 1] : lineView.line,\n order = void 0;\n builder.pos = 0;\n builder.addToken = buildToken;\n // Optionally wire in some hacks into the token-rendering\n // algorithm, to deal with browser quirks.\n if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line, cm.doc.direction))) {\n builder.addToken = buildTokenBadBidi(builder.addToken, order);\n }\n builder.map = [];\n var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line);\n insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate));\n if (line.styleClasses) {\n if (line.styleClasses.bgClass) {\n builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || \"\");\n }\n if (line.styleClasses.textClass) {\n builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || \"\");\n }\n }\n\n // Ensure at least a single node is present, for measuring.\n if (builder.map.length == 0) {\n builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure)));\n }\n\n // Store the map and a cache object for the current logical line\n if (i == 0) {\n lineView.measure.map = builder.map;\n lineView.measure.cache = {};\n } else {\n (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map);\n (lineView.measure.caches || (lineView.measure.caches = [])).push({});\n }\n }\n\n // See issue #2901\n if (webkit) {\n var last = builder.content.lastChild;\n if (/\\bcm-tab\\b/.test(last.className) || last.querySelector && last.querySelector(\".cm-tab\")) {\n builder.content.className = \"cm-tab-wrap-hack\";\n }\n }\n signal(cm, \"renderLine\", cm, lineView.line, builder.pre);\n if (builder.pre.className) {\n builder.textClass = joinClasses(builder.pre.className, builder.textClass || \"\");\n }\n return builder;\n }\n function defaultSpecialCharPlaceholder(ch) {\n var token = elt(\"span\", \"\\u2022\", \"cm-invalidchar\");\n token.title = \"\\\\u\" + ch.charCodeAt(0).toString(16);\n token.setAttribute(\"aria-label\", token.title);\n return token;\n }\n\n // Build up the DOM representation for a single token, and add it to\n // the line map. Takes care to render special characters separately.\n function buildToken(builder, text, style, startStyle, endStyle, css, attributes) {\n if (!text) {\n return;\n }\n var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text;\n var special = builder.cm.state.specialChars,\n mustWrap = false;\n var content;\n if (!special.test(text)) {\n builder.col += text.length;\n content = document.createTextNode(displayText);\n builder.map.push(builder.pos, builder.pos + text.length, content);\n if (ie && ie_version < 9) {\n mustWrap = true;\n }\n builder.pos += text.length;\n } else {\n content = document.createDocumentFragment();\n var pos = 0;\n while (true) {\n special.lastIndex = pos;\n var m = special.exec(text);\n var skipped = m ? m.index - pos : text.length - pos;\n if (skipped) {\n var txt = document.createTextNode(displayText.slice(pos, pos + skipped));\n if (ie && ie_version < 9) {\n content.appendChild(elt(\"span\", [txt]));\n } else {\n content.appendChild(txt);\n }\n builder.map.push(builder.pos, builder.pos + skipped, txt);\n builder.col += skipped;\n builder.pos += skipped;\n }\n if (!m) {\n break;\n }\n pos += skipped + 1;\n var txt$1 = void 0;\n if (m[0] == \"\\t\") {\n var tabSize = builder.cm.options.tabSize,\n tabWidth = tabSize - builder.col % tabSize;\n txt$1 = content.appendChild(elt(\"span\", spaceStr(tabWidth), \"cm-tab\"));\n txt$1.setAttribute(\"role\", \"presentation\");\n txt$1.setAttribute(\"cm-text\", \"\\t\");\n builder.col += tabWidth;\n } else if (m[0] == \"\\r\" || m[0] == \"\\n\") {\n txt$1 = content.appendChild(elt(\"span\", m[0] == \"\\r\" ? \"\\u240d\" : \"\\u2424\", \"cm-invalidchar\"));\n txt$1.setAttribute(\"cm-text\", m[0]);\n builder.col += 1;\n } else {\n txt$1 = builder.cm.options.specialCharPlaceholder(m[0]);\n txt$1.setAttribute(\"cm-text\", m[0]);\n if (ie && ie_version < 9) {\n content.appendChild(elt(\"span\", [txt$1]));\n } else {\n content.appendChild(txt$1);\n }\n builder.col += 1;\n }\n builder.map.push(builder.pos, builder.pos + 1, txt$1);\n builder.pos++;\n }\n }\n builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32;\n if (style || startStyle || endStyle || mustWrap || css) {\n var fullStyle = style || \"\";\n if (startStyle) {\n fullStyle += startStyle;\n }\n if (endStyle) {\n fullStyle += endStyle;\n }\n var token = elt(\"span\", [content], fullStyle, css);\n if (attributes) {\n for (var attr in attributes) {\n if (attributes.hasOwnProperty(attr) && attr != \"style\" && attr != \"class\") {\n token.setAttribute(attr, attributes[attr]);\n }\n }\n }\n return builder.content.appendChild(token);\n }\n builder.content.appendChild(content);\n }\n\n // Change some spaces to NBSP to prevent the browser from collapsing\n // trailing spaces at the end of a line when rendering text (issue #1362).\n function splitSpaces(text, trailingBefore) {\n if (text.length > 1 && !/ /.test(text)) {\n return text;\n }\n var spaceBefore = trailingBefore,\n result = \"\";\n for (var i = 0; i < text.length; i++) {\n var ch = text.charAt(i);\n if (ch == \" \" && spaceBefore && (i == text.length - 1 || text.charCodeAt(i + 1) == 32)) {\n ch = \"\\u00a0\";\n }\n result += ch;\n spaceBefore = ch == \" \";\n }\n return result;\n }\n\n // Work around nonsense dimensions being reported for stretches of\n // right-to-left text.\n function buildTokenBadBidi(inner, order) {\n return function (builder, text, style, startStyle, endStyle, css, attributes) {\n style = style ? style + \" cm-force-border\" : \"cm-force-border\";\n var start = builder.pos,\n end = start + text.length;\n for (;;) {\n // Find the part that overlaps with the start of this text\n var part = void 0;\n for (var i = 0; i < order.length; i++) {\n part = order[i];\n if (part.to > start && part.from <= start) {\n break;\n }\n }\n if (part.to >= end) {\n return inner(builder, text, style, startStyle, endStyle, css, attributes);\n }\n inner(builder, text.slice(0, part.to - start), style, startStyle, null, css, attributes);\n startStyle = null;\n text = text.slice(part.to - start);\n start = part.to;\n }\n };\n }\n function buildCollapsedSpan(builder, size, marker, ignoreWidget) {\n var widget = !ignoreWidget && marker.widgetNode;\n if (widget) {\n builder.map.push(builder.pos, builder.pos + size, widget);\n }\n if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) {\n if (!widget) {\n widget = builder.content.appendChild(document.createElement(\"span\"));\n }\n widget.setAttribute(\"cm-marker\", marker.id);\n }\n if (widget) {\n builder.cm.display.input.setUneditable(widget);\n builder.content.appendChild(widget);\n }\n builder.pos += size;\n builder.trailingSpace = false;\n }\n\n // Outputs a number of spans to make up a line, taking highlighting\n // and marked text into account.\n function insertLineContent(line, builder, styles) {\n var spans = line.markedSpans,\n allText = line.text,\n at = 0;\n if (!spans) {\n for (var i$1 = 1; i$1 < styles.length; i$1 += 2) {\n builder.addToken(builder, allText.slice(at, at = styles[i$1]), interpretTokenStyle(styles[i$1 + 1], builder.cm.options));\n }\n return;\n }\n var len = allText.length,\n pos = 0,\n i = 1,\n text = \"\",\n style,\n css;\n var nextChange = 0,\n spanStyle,\n spanEndStyle,\n spanStartStyle,\n collapsed,\n attributes;\n for (;;) {\n if (nextChange == pos) {\n // Update current marker set\n spanStyle = spanEndStyle = spanStartStyle = css = \"\";\n attributes = null;\n collapsed = null;\n nextChange = Infinity;\n var foundBookmarks = [],\n endStyles = void 0;\n for (var j = 0; j < spans.length; ++j) {\n var sp = spans[j],\n m = sp.marker;\n if (m.type == \"bookmark\" && sp.from == pos && m.widgetNode) {\n foundBookmarks.push(m);\n } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) {\n if (sp.to != null && sp.to != pos && nextChange > sp.to) {\n nextChange = sp.to;\n spanEndStyle = \"\";\n }\n if (m.className) {\n spanStyle += \" \" + m.className;\n }\n if (m.css) {\n css = (css ? css + \";\" : \"\") + m.css;\n }\n if (m.startStyle && sp.from == pos) {\n spanStartStyle += \" \" + m.startStyle;\n }\n if (m.endStyle && sp.to == nextChange) {\n (endStyles || (endStyles = [])).push(m.endStyle, sp.to);\n }\n // support for the old title property\n // https://github.com/codemirror/CodeMirror/pull/5673\n if (m.title) {\n (attributes || (attributes = {})).title = m.title;\n }\n if (m.attributes) {\n for (var attr in m.attributes) {\n (attributes || (attributes = {}))[attr] = m.attributes[attr];\n }\n }\n if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0)) {\n collapsed = sp;\n }\n } else if (sp.from > pos && nextChange > sp.from) {\n nextChange = sp.from;\n }\n }\n if (endStyles) {\n for (var j$1 = 0; j$1 < endStyles.length; j$1 += 2) {\n if (endStyles[j$1 + 1] == nextChange) {\n spanEndStyle += \" \" + endStyles[j$1];\n }\n }\n }\n if (!collapsed || collapsed.from == pos) {\n for (var j$2 = 0; j$2 < foundBookmarks.length; ++j$2) {\n buildCollapsedSpan(builder, 0, foundBookmarks[j$2]);\n }\n }\n if (collapsed && (collapsed.from || 0) == pos) {\n buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos, collapsed.marker, collapsed.from == null);\n if (collapsed.to == null) {\n return;\n }\n if (collapsed.to == pos) {\n collapsed = false;\n }\n }\n }\n if (pos >= len) {\n break;\n }\n var upto = Math.min(len, nextChange);\n while (true) {\n if (text) {\n var end = pos + text.length;\n if (!collapsed) {\n var tokenText = end > upto ? text.slice(0, upto - pos) : text;\n builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle, spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : \"\", css, attributes);\n }\n if (end >= upto) {\n text = text.slice(upto - pos);\n pos = upto;\n break;\n }\n pos = end;\n spanStartStyle = \"\";\n }\n text = allText.slice(at, at = styles[i++]);\n style = interpretTokenStyle(styles[i++], builder.cm.options);\n }\n }\n }\n\n // These objects are used to represent the visible (currently drawn)\n // part of the document. A LineView may correspond to multiple\n // logical lines, if those are connected by collapsed ranges.\n function LineView(doc, line, lineN) {\n // The starting line\n this.line = line;\n // Continuing lines, if any\n this.rest = visualLineContinued(line);\n // Number of logical lines in this visual line\n this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1;\n this.node = this.text = null;\n this.hidden = lineIsHidden(doc, line);\n }\n\n // Create a range of LineView objects for the given lines.\n function buildViewArray(cm, from, to) {\n var array = [],\n nextPos;\n for (var pos = from; pos < to; pos = nextPos) {\n var view = new LineView(cm.doc, getLine(cm.doc, pos), pos);\n nextPos = pos + view.size;\n array.push(view);\n }\n return array;\n }\n var operationGroup = null;\n function pushOperation(op) {\n if (operationGroup) {\n operationGroup.ops.push(op);\n } else {\n op.ownsGroup = operationGroup = {\n ops: [op],\n delayedCallbacks: []\n };\n }\n }\n function fireCallbacksForOps(group) {\n // Calls delayed callbacks and cursorActivity handlers until no\n // new ones appear\n var callbacks = group.delayedCallbacks,\n i = 0;\n do {\n for (; i < callbacks.length; i++) {\n callbacks[i].call(null);\n }\n for (var j = 0; j < group.ops.length; j++) {\n var op = group.ops[j];\n if (op.cursorActivityHandlers) {\n while (op.cursorActivityCalled < op.cursorActivityHandlers.length) {\n op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm);\n }\n }\n }\n } while (i < callbacks.length);\n }\n function finishOperation(op, endCb) {\n var group = op.ownsGroup;\n if (!group) {\n return;\n }\n try {\n fireCallbacksForOps(group);\n } finally {\n operationGroup = null;\n endCb(group);\n }\n }\n var orphanDelayedCallbacks = null;\n\n // Often, we want to signal events at a point where we are in the\n // middle of some work, but don't want the handler to start calling\n // other methods on the editor, which might be in an inconsistent\n // state or simply not expect any other events to happen.\n // signalLater looks whether there are any handlers, and schedules\n // them to be executed when the last operation ends, or, if no\n // operation is active, when a timeout fires.\n function signalLater(emitter, type /*, values...*/) {\n var arr = getHandlers(emitter, type);\n if (!arr.length) {\n return;\n }\n var args = Array.prototype.slice.call(arguments, 2),\n list;\n if (operationGroup) {\n list = operationGroup.delayedCallbacks;\n } else if (orphanDelayedCallbacks) {\n list = orphanDelayedCallbacks;\n } else {\n list = orphanDelayedCallbacks = [];\n setTimeout(fireOrphanDelayed, 0);\n }\n var loop = function (i) {\n list.push(function () {\n return arr[i].apply(null, args);\n });\n };\n for (var i = 0; i < arr.length; ++i) loop(i);\n }\n function fireOrphanDelayed() {\n var delayed = orphanDelayedCallbacks;\n orphanDelayedCallbacks = null;\n for (var i = 0; i < delayed.length; ++i) {\n delayed[i]();\n }\n }\n\n // When an aspect of a line changes, a string is added to\n // lineView.changes. This updates the relevant part of the line's\n // DOM structure.\n function updateLineForChanges(cm, lineView, lineN, dims) {\n for (var j = 0; j < lineView.changes.length; j++) {\n var type = lineView.changes[j];\n if (type == \"text\") {\n updateLineText(cm, lineView);\n } else if (type == \"gutter\") {\n updateLineGutter(cm, lineView, lineN, dims);\n } else if (type == \"class\") {\n updateLineClasses(cm, lineView);\n } else if (type == \"widget\") {\n updateLineWidgets(cm, lineView, dims);\n }\n }\n lineView.changes = null;\n }\n\n // Lines with gutter elements, widgets or a background class need to\n // be wrapped, and have the extra elements added to the wrapper div\n function ensureLineWrapped(lineView) {\n if (lineView.node == lineView.text) {\n lineView.node = elt(\"div\", null, null, \"position: relative\");\n if (lineView.text.parentNode) {\n lineView.text.parentNode.replaceChild(lineView.node, lineView.text);\n }\n lineView.node.appendChild(lineView.text);\n if (ie && ie_version < 8) {\n lineView.node.style.zIndex = 2;\n }\n }\n return lineView.node;\n }\n function updateLineBackground(cm, lineView) {\n var cls = lineView.bgClass ? lineView.bgClass + \" \" + (lineView.line.bgClass || \"\") : lineView.line.bgClass;\n if (cls) {\n cls += \" CodeMirror-linebackground\";\n }\n if (lineView.background) {\n if (cls) {\n lineView.background.className = cls;\n } else {\n lineView.background.parentNode.removeChild(lineView.background);\n lineView.background = null;\n }\n } else if (cls) {\n var wrap = ensureLineWrapped(lineView);\n lineView.background = wrap.insertBefore(elt(\"div\", null, cls), wrap.firstChild);\n cm.display.input.setUneditable(lineView.background);\n }\n }\n\n // Wrapper around buildLineContent which will reuse the structure\n // in display.externalMeasured when possible.\n function getLineContent(cm, lineView) {\n var ext = cm.display.externalMeasured;\n if (ext && ext.line == lineView.line) {\n cm.display.externalMeasured = null;\n lineView.measure = ext.measure;\n return ext.built;\n }\n return buildLineContent(cm, lineView);\n }\n\n // Redraw the line's text. Interacts with the background and text\n // classes because the mode may output tokens that influence these\n // classes.\n function updateLineText(cm, lineView) {\n var cls = lineView.text.className;\n var built = getLineContent(cm, lineView);\n if (lineView.text == lineView.node) {\n lineView.node = built.pre;\n }\n lineView.text.parentNode.replaceChild(built.pre, lineView.text);\n lineView.text = built.pre;\n if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) {\n lineView.bgClass = built.bgClass;\n lineView.textClass = built.textClass;\n updateLineClasses(cm, lineView);\n } else if (cls) {\n lineView.text.className = cls;\n }\n }\n function updateLineClasses(cm, lineView) {\n updateLineBackground(cm, lineView);\n if (lineView.line.wrapClass) {\n ensureLineWrapped(lineView).className = lineView.line.wrapClass;\n } else if (lineView.node != lineView.text) {\n lineView.node.className = \"\";\n }\n var textClass = lineView.textClass ? lineView.textClass + \" \" + (lineView.line.textClass || \"\") : lineView.line.textClass;\n lineView.text.className = textClass || \"\";\n }\n function updateLineGutter(cm, lineView, lineN, dims) {\n if (lineView.gutter) {\n lineView.node.removeChild(lineView.gutter);\n lineView.gutter = null;\n }\n if (lineView.gutterBackground) {\n lineView.node.removeChild(lineView.gutterBackground);\n lineView.gutterBackground = null;\n }\n if (lineView.line.gutterClass) {\n var wrap = ensureLineWrapped(lineView);\n lineView.gutterBackground = elt(\"div\", null, \"CodeMirror-gutter-background \" + lineView.line.gutterClass, \"left: \" + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + \"px; width: \" + dims.gutterTotalWidth + \"px\");\n cm.display.input.setUneditable(lineView.gutterBackground);\n wrap.insertBefore(lineView.gutterBackground, lineView.text);\n }\n var markers = lineView.line.gutterMarkers;\n if (cm.options.lineNumbers || markers) {\n var wrap$1 = ensureLineWrapped(lineView);\n var gutterWrap = lineView.gutter = elt(\"div\", null, \"CodeMirror-gutter-wrapper\", \"left: \" + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + \"px\");\n cm.display.input.setUneditable(gutterWrap);\n wrap$1.insertBefore(gutterWrap, lineView.text);\n if (lineView.line.gutterClass) {\n gutterWrap.className += \" \" + lineView.line.gutterClass;\n }\n if (cm.options.lineNumbers && (!markers || !markers[\"CodeMirror-linenumbers\"])) {\n lineView.lineNumber = gutterWrap.appendChild(elt(\"div\", lineNumberFor(cm.options, lineN), \"CodeMirror-linenumber CodeMirror-gutter-elt\", \"left: \" + dims.gutterLeft[\"CodeMirror-linenumbers\"] + \"px; width: \" + cm.display.lineNumInnerWidth + \"px\"));\n }\n if (markers) {\n for (var k = 0; k < cm.display.gutterSpecs.length; ++k) {\n var id = cm.display.gutterSpecs[k].className,\n found = markers.hasOwnProperty(id) && markers[id];\n if (found) {\n gutterWrap.appendChild(elt(\"div\", [found], \"CodeMirror-gutter-elt\", \"left: \" + dims.gutterLeft[id] + \"px; width: \" + dims.gutterWidth[id] + \"px\"));\n }\n }\n }\n }\n }\n function updateLineWidgets(cm, lineView, dims) {\n if (lineView.alignable) {\n lineView.alignable = null;\n }\n var isWidget = classTest(\"CodeMirror-linewidget\");\n for (var node = lineView.node.firstChild, next = void 0; node; node = next) {\n next = node.nextSibling;\n if (isWidget.test(node.className)) {\n lineView.node.removeChild(node);\n }\n }\n insertLineWidgets(cm, lineView, dims);\n }\n\n // Build a line's DOM representation from scratch\n function buildLineElement(cm, lineView, lineN, dims) {\n var built = getLineContent(cm, lineView);\n lineView.text = lineView.node = built.pre;\n if (built.bgClass) {\n lineView.bgClass = built.bgClass;\n }\n if (built.textClass) {\n lineView.textClass = built.textClass;\n }\n updateLineClasses(cm, lineView);\n updateLineGutter(cm, lineView, lineN, dims);\n insertLineWidgets(cm, lineView, dims);\n return lineView.node;\n }\n\n // A lineView may contain multiple logical lines (when merged by\n // collapsed spans). The widgets for all of them need to be drawn.\n function insertLineWidgets(cm, lineView, dims) {\n insertLineWidgetsFor(cm, lineView.line, lineView, dims, true);\n if (lineView.rest) {\n for (var i = 0; i < lineView.rest.length; i++) {\n insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false);\n }\n }\n }\n function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) {\n if (!line.widgets) {\n return;\n }\n var wrap = ensureLineWrapped(lineView);\n for (var i = 0, ws = line.widgets; i < ws.length; ++i) {\n var widget = ws[i],\n node = elt(\"div\", [widget.node], \"CodeMirror-linewidget\" + (widget.className ? \" \" + widget.className : \"\"));\n if (!widget.handleMouseEvents) {\n node.setAttribute(\"cm-ignore-events\", \"true\");\n }\n positionLineWidget(widget, node, lineView, dims);\n cm.display.input.setUneditable(node);\n if (allowAbove && widget.above) {\n wrap.insertBefore(node, lineView.gutter || lineView.text);\n } else {\n wrap.appendChild(node);\n }\n signalLater(widget, \"redraw\");\n }\n }\n function positionLineWidget(widget, node, lineView, dims) {\n if (widget.noHScroll) {\n (lineView.alignable || (lineView.alignable = [])).push(node);\n var width = dims.wrapperWidth;\n node.style.left = dims.fixedPos + \"px\";\n if (!widget.coverGutter) {\n width -= dims.gutterTotalWidth;\n node.style.paddingLeft = dims.gutterTotalWidth + \"px\";\n }\n node.style.width = width + \"px\";\n }\n if (widget.coverGutter) {\n node.style.zIndex = 5;\n node.style.position = \"relative\";\n if (!widget.noHScroll) {\n node.style.marginLeft = -dims.gutterTotalWidth + \"px\";\n }\n }\n }\n function widgetHeight(widget) {\n if (widget.height != null) {\n return widget.height;\n }\n var cm = widget.doc.cm;\n if (!cm) {\n return 0;\n }\n if (!contains(document.body, widget.node)) {\n var parentStyle = \"position: relative;\";\n if (widget.coverGutter) {\n parentStyle += \"margin-left: -\" + cm.display.gutters.offsetWidth + \"px;\";\n }\n if (widget.noHScroll) {\n parentStyle += \"width: \" + cm.display.wrapper.clientWidth + \"px;\";\n }\n removeChildrenAndAdd(cm.display.measure, elt(\"div\", [widget.node], null, parentStyle));\n }\n return widget.height = widget.node.parentNode.offsetHeight;\n }\n\n // Return true when the given mouse event happened in a widget\n function eventInWidget(display, e) {\n for (var n = e_target(e); n != display.wrapper; n = n.parentNode) {\n if (!n || n.nodeType == 1 && n.getAttribute(\"cm-ignore-events\") == \"true\" || n.parentNode == display.sizer && n != display.mover) {\n return true;\n }\n }\n }\n\n // POSITION MEASUREMENT\n\n function paddingTop(display) {\n return display.lineSpace.offsetTop;\n }\n function paddingVert(display) {\n return display.mover.offsetHeight - display.lineSpace.offsetHeight;\n }\n function paddingH(display) {\n if (display.cachedPaddingH) {\n return display.cachedPaddingH;\n }\n var e = removeChildrenAndAdd(display.measure, elt(\"pre\", \"x\", \"CodeMirror-line-like\"));\n var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle;\n var data = {\n left: parseInt(style.paddingLeft),\n right: parseInt(style.paddingRight)\n };\n if (!isNaN(data.left) && !isNaN(data.right)) {\n display.cachedPaddingH = data;\n }\n return data;\n }\n function scrollGap(cm) {\n return scrollerGap - cm.display.nativeBarWidth;\n }\n function displayWidth(cm) {\n return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth;\n }\n function displayHeight(cm) {\n return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight;\n }\n\n // Ensure the lineView.wrapping.heights array is populated. This is\n // an array of bottom offsets for the lines that make up a drawn\n // line. When lineWrapping is on, there might be more than one\n // height.\n function ensureLineHeights(cm, lineView, rect) {\n var wrapping = cm.options.lineWrapping;\n var curWidth = wrapping && displayWidth(cm);\n if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) {\n var heights = lineView.measure.heights = [];\n if (wrapping) {\n lineView.measure.width = curWidth;\n var rects = lineView.text.firstChild.getClientRects();\n for (var i = 0; i < rects.length - 1; i++) {\n var cur = rects[i],\n next = rects[i + 1];\n if (Math.abs(cur.bottom - next.bottom) > 2) {\n heights.push((cur.bottom + next.top) / 2 - rect.top);\n }\n }\n }\n heights.push(rect.bottom - rect.top);\n }\n }\n\n // Find a line map (mapping character offsets to text nodes) and a\n // measurement cache for the given line number. (A line view might\n // contain multiple lines when collapsed ranges are present.)\n function mapFromLineView(lineView, line, lineN) {\n if (lineView.line == line) {\n return {\n map: lineView.measure.map,\n cache: lineView.measure.cache\n };\n }\n for (var i = 0; i < lineView.rest.length; i++) {\n if (lineView.rest[i] == line) {\n return {\n map: lineView.measure.maps[i],\n cache: lineView.measure.caches[i]\n };\n }\n }\n for (var i$1 = 0; i$1 < lineView.rest.length; i$1++) {\n if (lineNo(lineView.rest[i$1]) > lineN) {\n return {\n map: lineView.measure.maps[i$1],\n cache: lineView.measure.caches[i$1],\n before: true\n };\n }\n }\n }\n\n // Render a line into the hidden node display.externalMeasured. Used\n // when measurement is needed for a line that's not in the viewport.\n function updateExternalMeasurement(cm, line) {\n line = visualLine(line);\n var lineN = lineNo(line);\n var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN);\n view.lineN = lineN;\n var built = view.built = buildLineContent(cm, view);\n view.text = built.pre;\n removeChildrenAndAdd(cm.display.lineMeasure, built.pre);\n return view;\n }\n\n // Get a {top, bottom, left, right} box (in line-local coordinates)\n // for a given character.\n function measureChar(cm, line, ch, bias) {\n return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias);\n }\n\n // Find a line view that corresponds to the given line number.\n function findViewForLine(cm, lineN) {\n if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo) {\n return cm.display.view[findViewIndex(cm, lineN)];\n }\n var ext = cm.display.externalMeasured;\n if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size) {\n return ext;\n }\n }\n\n // Measurement can be split in two steps, the set-up work that\n // applies to the whole line, and the measurement of the actual\n // character. Functions like coordsChar, that need to do a lot of\n // measurements in a row, can thus ensure that the set-up work is\n // only done once.\n function prepareMeasureForLine(cm, line) {\n var lineN = lineNo(line);\n var view = findViewForLine(cm, lineN);\n if (view && !view.text) {\n view = null;\n } else if (view && view.changes) {\n updateLineForChanges(cm, view, lineN, getDimensions(cm));\n cm.curOp.forceUpdate = true;\n }\n if (!view) {\n view = updateExternalMeasurement(cm, line);\n }\n var info = mapFromLineView(view, line, lineN);\n return {\n line: line,\n view: view,\n rect: null,\n map: info.map,\n cache: info.cache,\n before: info.before,\n hasHeights: false\n };\n }\n\n // Given a prepared measurement object, measures the position of an\n // actual character (or fetches it from the cache).\n function measureCharPrepared(cm, prepared, ch, bias, varHeight) {\n if (prepared.before) {\n ch = -1;\n }\n var key = ch + (bias || \"\"),\n found;\n if (prepared.cache.hasOwnProperty(key)) {\n found = prepared.cache[key];\n } else {\n if (!prepared.rect) {\n prepared.rect = prepared.view.text.getBoundingClientRect();\n }\n if (!prepared.hasHeights) {\n ensureLineHeights(cm, prepared.view, prepared.rect);\n prepared.hasHeights = true;\n }\n found = measureCharInner(cm, prepared, ch, bias);\n if (!found.bogus) {\n prepared.cache[key] = found;\n }\n }\n return {\n left: found.left,\n right: found.right,\n top: varHeight ? found.rtop : found.top,\n bottom: varHeight ? found.rbottom : found.bottom\n };\n }\n var nullRect = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n function nodeAndOffsetInLineMap(map, ch, bias) {\n var node, start, end, collapse, mStart, mEnd;\n // First, search the line map for the text node corresponding to,\n // or closest to, the target character.\n for (var i = 0; i < map.length; i += 3) {\n mStart = map[i];\n mEnd = map[i + 1];\n if (ch < mStart) {\n start = 0;\n end = 1;\n collapse = \"left\";\n } else if (ch < mEnd) {\n start = ch - mStart;\n end = start + 1;\n } else if (i == map.length - 3 || ch == mEnd && map[i + 3] > ch) {\n end = mEnd - mStart;\n start = end - 1;\n if (ch >= mEnd) {\n collapse = \"right\";\n }\n }\n if (start != null) {\n node = map[i + 2];\n if (mStart == mEnd && bias == (node.insertLeft ? \"left\" : \"right\")) {\n collapse = bias;\n }\n if (bias == \"left\" && start == 0) {\n while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) {\n node = map[(i -= 3) + 2];\n collapse = \"left\";\n }\n }\n if (bias == \"right\" && start == mEnd - mStart) {\n while (i < map.length - 3 && map[i + 3] == map[i + 4] && !map[i + 5].insertLeft) {\n node = map[(i += 3) + 2];\n collapse = \"right\";\n }\n }\n break;\n }\n }\n return {\n node: node,\n start: start,\n end: end,\n collapse: collapse,\n coverStart: mStart,\n coverEnd: mEnd\n };\n }\n function getUsefulRect(rects, bias) {\n var rect = nullRect;\n if (bias == \"left\") {\n for (var i = 0; i < rects.length; i++) {\n if ((rect = rects[i]).left != rect.right) {\n break;\n }\n }\n } else {\n for (var i$1 = rects.length - 1; i$1 >= 0; i$1--) {\n if ((rect = rects[i$1]).left != rect.right) {\n break;\n }\n }\n }\n return rect;\n }\n function measureCharInner(cm, prepared, ch, bias) {\n var place = nodeAndOffsetInLineMap(prepared.map, ch, bias);\n var node = place.node,\n start = place.start,\n end = place.end,\n collapse = place.collapse;\n var rect;\n if (node.nodeType == 3) {\n // If it is a text node, use a range to retrieve the coordinates.\n for (var i$1 = 0; i$1 < 4; i$1++) {\n // Retry a maximum of 4 times when nonsense rectangles are returned\n while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) {\n --start;\n }\n while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) {\n ++end;\n }\n if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart) {\n rect = node.parentNode.getBoundingClientRect();\n } else {\n rect = getUsefulRect(range(node, start, end).getClientRects(), bias);\n }\n if (rect.left || rect.right || start == 0) {\n break;\n }\n end = start;\n start = start - 1;\n collapse = \"right\";\n }\n if (ie && ie_version < 11) {\n rect = maybeUpdateRectForZooming(cm.display.measure, rect);\n }\n } else {\n // If it is a widget, simply get the box for the whole widget.\n if (start > 0) {\n collapse = bias = \"right\";\n }\n var rects;\n if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1) {\n rect = rects[bias == \"right\" ? rects.length - 1 : 0];\n } else {\n rect = node.getBoundingClientRect();\n }\n }\n if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) {\n var rSpan = node.parentNode.getClientRects()[0];\n if (rSpan) {\n rect = {\n left: rSpan.left,\n right: rSpan.left + charWidth(cm.display),\n top: rSpan.top,\n bottom: rSpan.bottom\n };\n } else {\n rect = nullRect;\n }\n }\n var rtop = rect.top - prepared.rect.top,\n rbot = rect.bottom - prepared.rect.top;\n var mid = (rtop + rbot) / 2;\n var heights = prepared.view.measure.heights;\n var i = 0;\n for (; i < heights.length - 1; i++) {\n if (mid < heights[i]) {\n break;\n }\n }\n var top = i ? heights[i - 1] : 0,\n bot = heights[i];\n var result = {\n left: (collapse == \"right\" ? rect.right : rect.left) - prepared.rect.left,\n right: (collapse == \"left\" ? rect.left : rect.right) - prepared.rect.left,\n top: top,\n bottom: bot\n };\n if (!rect.left && !rect.right) {\n result.bogus = true;\n }\n if (!cm.options.singleCursorHeightPerLine) {\n result.rtop = rtop;\n result.rbottom = rbot;\n }\n return result;\n }\n\n // Work around problem with bounding client rects on ranges being\n // returned incorrectly when zoomed on IE10 and below.\n function maybeUpdateRectForZooming(measure, rect) {\n if (!window.screen || screen.logicalXDPI == null || screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure)) {\n return rect;\n }\n var scaleX = screen.logicalXDPI / screen.deviceXDPI;\n var scaleY = screen.logicalYDPI / screen.deviceYDPI;\n return {\n left: rect.left * scaleX,\n right: rect.right * scaleX,\n top: rect.top * scaleY,\n bottom: rect.bottom * scaleY\n };\n }\n function clearLineMeasurementCacheFor(lineView) {\n if (lineView.measure) {\n lineView.measure.cache = {};\n lineView.measure.heights = null;\n if (lineView.rest) {\n for (var i = 0; i < lineView.rest.length; i++) {\n lineView.measure.caches[i] = {};\n }\n }\n }\n }\n function clearLineMeasurementCache(cm) {\n cm.display.externalMeasure = null;\n removeChildren(cm.display.lineMeasure);\n for (var i = 0; i < cm.display.view.length; i++) {\n clearLineMeasurementCacheFor(cm.display.view[i]);\n }\n }\n function clearCaches(cm) {\n clearLineMeasurementCache(cm);\n cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null;\n if (!cm.options.lineWrapping) {\n cm.display.maxLineChanged = true;\n }\n cm.display.lineNumChars = null;\n }\n function pageScrollX() {\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 return window.pageXOffset || (document.documentElement || document.body).scrollLeft;\n }\n function pageScrollY() {\n if (chrome && android) {\n return -(document.body.getBoundingClientRect().top - parseInt(getComputedStyle(document.body).marginTop));\n }\n return window.pageYOffset || (document.documentElement || document.body).scrollTop;\n }\n function widgetTopHeight(lineObj) {\n var height = 0;\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 return height;\n }\n\n // Converts a {top, bottom, left, right} box from line-local\n // coordinates into another coordinate system. Context may be one of\n // \"line\", \"div\" (display.lineDiv), \"local\"./null (editor), \"window\",\n // or \"page\".\n function intoCoordSystem(cm, lineObj, rect, context, includeWidgets) {\n if (!includeWidgets) {\n var height = widgetTopHeight(lineObj);\n rect.top += height;\n rect.bottom += height;\n }\n if (context == \"line\") {\n return rect;\n }\n if (!context) {\n context = \"local\";\n }\n var yOff = heightAtLine(lineObj);\n if (context == \"local\") {\n yOff += paddingTop(cm.display);\n } else {\n yOff -= cm.display.viewOffset;\n }\n if (context == \"page\" || context == \"window\") {\n var lOff = cm.display.lineSpace.getBoundingClientRect();\n yOff += lOff.top + (context == \"window\" ? 0 : pageScrollY());\n var xOff = lOff.left + (context == \"window\" ? 0 : pageScrollX());\n rect.left += xOff;\n rect.right += xOff;\n }\n rect.top += yOff;\n rect.bottom += yOff;\n return rect;\n }\n\n // Coverts a box from \"div\" coords to another coordinate system.\n // Context may be \"window\", \"page\", \"div\", or \"local\"./null.\n function fromCoordSystem(cm, coords, context) {\n if (context == \"div\") {\n return coords;\n }\n var left = coords.left,\n top = coords.top;\n // First move into \"page\" coordinate system\n if (context == \"page\") {\n left -= pageScrollX();\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 var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect();\n return {\n left: left - lineSpaceBox.left,\n top: top - lineSpaceBox.top\n };\n }\n function charCoords(cm, pos, context, lineObj, bias) {\n if (!lineObj) {\n lineObj = getLine(cm.doc, pos.line);\n }\n return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context);\n }\n\n // Returns a box for a given cursor position, which may have an\n // 'other' property containing the position of the secondary cursor\n // on a bidi boundary.\n // A cursor Pos(line, char, \"before\") is on the same visual line as `char - 1`\n // and after `char - 1` in writing order of `char - 1`\n // A cursor Pos(line, char, \"after\") is on the same visual line as `char`\n // and before `char` in writing order of `char`\n // Examples (upper-case letters are RTL, lower-case are LTR):\n // Pos(0, 1, ...)\n // before after\n // ab a|b a|b\n // aB a|B aB|\n // Ab |Ab A|b\n // AB B|A B|A\n // Every position after the last character on a line is considered to stick\n // to the last character on the line.\n function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) {\n lineObj = lineObj || getLine(cm.doc, pos.line);\n if (!preparedMeasure) {\n preparedMeasure = prepareMeasureForLine(cm, lineObj);\n }\n function get(ch, right) {\n var m = measureCharPrepared(cm, preparedMeasure, ch, right ? \"right\" : \"left\", varHeight);\n if (right) {\n m.left = m.right;\n } else {\n m.right = m.left;\n }\n return intoCoordSystem(cm, lineObj, m, context);\n }\n var order = getOrder(lineObj, cm.doc.direction),\n ch = pos.ch,\n sticky = pos.sticky;\n if (ch >= lineObj.text.length) {\n ch = lineObj.text.length;\n sticky = \"before\";\n } else if (ch <= 0) {\n ch = 0;\n sticky = \"after\";\n }\n if (!order) {\n return get(sticky == \"before\" ? ch - 1 : ch, sticky == \"before\");\n }\n function getBidi(ch, partPos, invert) {\n var part = order[partPos],\n right = part.level == 1;\n return get(invert ? ch - 1 : ch, right != invert);\n }\n var partPos = getBidiPartAt(order, ch, sticky);\n var other = bidiOther;\n var val = getBidi(ch, partPos, sticky == \"before\");\n if (other != null) {\n val.other = getBidi(ch, other, sticky != \"before\");\n }\n return val;\n }\n\n // Used to cheaply estimate the coordinates for a position. Used for\n // intermediate scroll updates.\n function estimateCoords(cm, pos) {\n var left = 0;\n pos = clipPos(cm.doc, pos);\n if (!cm.options.lineWrapping) {\n left = charWidth(cm.display) * pos.ch;\n }\n var lineObj = getLine(cm.doc, pos.line);\n var top = heightAtLine(lineObj) + paddingTop(cm.display);\n return {\n left: left,\n right: left,\n top: top,\n bottom: top + lineObj.height\n };\n }\n\n // Positions returned by coordsChar contain some extra information.\n // xRel is the relative x position of the input coordinates compared\n // to the found position (so xRel > 0 means the coordinates are to\n // the right of the character position, for example). When outside\n // is true, that means the coordinates lie outside the line's\n // vertical range.\n function PosWithInfo(line, ch, sticky, outside, xRel) {\n var pos = Pos(line, ch, sticky);\n pos.xRel = xRel;\n if (outside) {\n pos.outside = outside;\n }\n return pos;\n }\n\n // Compute the character position closest to the given coordinates.\n // Input must be lineSpace-local (\"div\" coordinate system).\n function coordsChar(cm, x, y) {\n var doc = cm.doc;\n y += cm.display.viewOffset;\n if (y < 0) {\n return PosWithInfo(doc.first, 0, null, -1, -1);\n }\n var lineN = lineAtHeight(doc, y),\n last = doc.first + doc.size - 1;\n if (lineN > last) {\n return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, null, 1, 1);\n }\n if (x < 0) {\n x = 0;\n }\n var lineObj = getLine(doc, lineN);\n for (;;) {\n var found = coordsCharInner(cm, lineObj, lineN, x, y);\n var collapsed = collapsedSpanAround(lineObj, found.ch + (found.xRel > 0 || found.outside > 0 ? 1 : 0));\n if (!collapsed) {\n return found;\n }\n var rangeEnd = collapsed.find(1);\n if (rangeEnd.line == lineN) {\n return rangeEnd;\n }\n lineObj = getLine(doc, lineN = rangeEnd.line);\n }\n }\n function wrappedLineExtent(cm, lineObj, preparedMeasure, y) {\n y -= widgetTopHeight(lineObj);\n var end = lineObj.text.length;\n var begin = findFirst(function (ch) {\n return measureCharPrepared(cm, preparedMeasure, ch - 1).bottom <= y;\n }, end, 0);\n end = findFirst(function (ch) {\n return measureCharPrepared(cm, preparedMeasure, ch).top > y;\n }, begin, end);\n return {\n begin: begin,\n end: end\n };\n }\n function wrappedLineExtentChar(cm, lineObj, preparedMeasure, target) {\n if (!preparedMeasure) {\n preparedMeasure = prepareMeasureForLine(cm, lineObj);\n }\n var targetTop = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, target), \"line\").top;\n return wrappedLineExtent(cm, lineObj, preparedMeasure, targetTop);\n }\n\n // Returns true if the given side of a box is after the given\n // coordinates, in top-to-bottom, left-to-right order.\n function boxIsAfter(box, x, y, left) {\n return box.bottom <= y ? false : box.top > y ? true : (left ? box.left : box.right) > x;\n }\n function coordsCharInner(cm, lineObj, lineNo, x, y) {\n // Move y into line-local coordinate space\n y -= heightAtLine(lineObj);\n var preparedMeasure = prepareMeasureForLine(cm, lineObj);\n // When directly calling `measureCharPrepared`, we have to adjust\n // for the widgets at this line.\n var widgetHeight = widgetTopHeight(lineObj);\n var begin = 0,\n end = lineObj.text.length,\n ltr = true;\n var order = getOrder(lineObj, cm.doc.direction);\n // If the line isn't plain left-to-right text, first figure out\n // which bidi section the coordinates fall into.\n if (order) {\n var part = (cm.options.lineWrapping ? coordsBidiPartWrapped : coordsBidiPart)(cm, lineObj, lineNo, preparedMeasure, order, x, y);\n ltr = part.level != 1;\n // The awkward -1 offsets are needed because findFirst (called\n // on these below) will treat its first bound as inclusive,\n // second as exclusive, but we want to actually address the\n // characters in the part's range\n begin = ltr ? part.from : part.to - 1;\n end = ltr ? part.to : part.from - 1;\n }\n\n // A binary search to find the first character whose bounding box\n // starts after the coordinates. If we run across any whose box wrap\n // the coordinates, store that.\n var chAround = null,\n boxAround = null;\n var ch = findFirst(function (ch) {\n var box = measureCharPrepared(cm, preparedMeasure, ch);\n box.top += widgetHeight;\n box.bottom += widgetHeight;\n if (!boxIsAfter(box, x, y, false)) {\n return false;\n }\n if (box.top <= y && box.left <= x) {\n chAround = ch;\n boxAround = box;\n }\n return true;\n }, begin, end);\n var baseX,\n sticky,\n outside = false;\n // If a box around the coordinates was found, use that\n if (boxAround) {\n // Distinguish coordinates nearer to the left or right side of the box\n var atLeft = x - boxAround.left < boxAround.right - x,\n atStart = atLeft == ltr;\n ch = chAround + (atStart ? 0 : 1);\n sticky = atStart ? \"after\" : \"before\";\n baseX = atLeft ? boxAround.left : boxAround.right;\n } else {\n // (Adjust for extended bound, if necessary.)\n if (!ltr && (ch == end || ch == begin)) {\n ch++;\n }\n // To determine which side to associate with, get the box to the\n // left of the character and compare it's vertical position to the\n // coordinates\n sticky = ch == 0 ? \"after\" : ch == lineObj.text.length ? \"before\" : measureCharPrepared(cm, preparedMeasure, ch - (ltr ? 1 : 0)).bottom + widgetHeight <= y == ltr ? \"after\" : \"before\";\n // Now get accurate coordinates for this place, in order to get a\n // base X position\n var coords = cursorCoords(cm, Pos(lineNo, ch, sticky), \"line\", lineObj, preparedMeasure);\n baseX = coords.left;\n outside = y < coords.top ? -1 : y >= coords.bottom ? 1 : 0;\n }\n ch = skipExtendingChars(lineObj.text, ch, 1);\n return PosWithInfo(lineNo, ch, sticky, outside, x - baseX);\n }\n function coordsBidiPart(cm, lineObj, lineNo, preparedMeasure, order, x, y) {\n // Bidi parts are sorted left-to-right, and in a non-line-wrapping\n // situation, we can take this ordering to correspond to the visual\n // ordering. This finds the first part whose end is after the given\n // coordinates.\n var index = findFirst(function (i) {\n var part = order[i],\n ltr = part.level != 1;\n return boxIsAfter(cursorCoords(cm, Pos(lineNo, ltr ? part.to : part.from, ltr ? \"before\" : \"after\"), \"line\", lineObj, preparedMeasure), x, y, true);\n }, 0, order.length - 1);\n var part = order[index];\n // If this isn't the first part, the part's start is also after\n // the coordinates, and the coordinates aren't on the same line as\n // that start, move one part back.\n if (index > 0) {\n var ltr = part.level != 1;\n var start = cursorCoords(cm, Pos(lineNo, ltr ? part.from : part.to, ltr ? \"after\" : \"before\"), \"line\", lineObj, preparedMeasure);\n if (boxIsAfter(start, x, y, true) && start.top > y) {\n part = order[index - 1];\n }\n }\n return part;\n }\n function coordsBidiPartWrapped(cm, lineObj, _lineNo, preparedMeasure, order, x, y) {\n // In a wrapped line, rtl text on wrapping boundaries can do things\n // that don't correspond to the ordering in our `order` array at\n // all, so a binary search doesn't work, and we want to return a\n // part that only spans one line so that the binary search in\n // coordsCharInner is safe. As such, we first find the extent of the\n // wrapped line, and then do a flat search in which we discard any\n // spans that aren't on the line.\n var ref = wrappedLineExtent(cm, lineObj, preparedMeasure, y);\n var begin = ref.begin;\n var end = ref.end;\n if (/\\s/.test(lineObj.text.charAt(end - 1))) {\n end--;\n }\n var part = null,\n closestDist = null;\n for (var i = 0; i < order.length; i++) {\n var p = order[i];\n if (p.from >= end || p.to <= begin) {\n continue;\n }\n var ltr = p.level != 1;\n var endX = measureCharPrepared(cm, preparedMeasure, ltr ? Math.min(end, p.to) - 1 : Math.max(begin, p.from)).right;\n // Weigh against spans ending before this, so that they are only\n // picked if nothing ends after\n var dist = endX < x ? x - endX + 1e9 : endX - x;\n if (!part || closestDist > dist) {\n part = p;\n closestDist = dist;\n }\n }\n if (!part) {\n part = order[order.length - 1];\n }\n // Clip the part to the wrapped line.\n if (part.from < begin) {\n part = {\n from: begin,\n to: part.to,\n level: part.level\n };\n }\n if (part.to > end) {\n part = {\n from: part.from,\n to: end,\n level: part.level\n };\n }\n return part;\n }\n var measureText;\n // Compute the default text height.\n function textHeight(display) {\n if (display.cachedTextHeight != null) {\n return display.cachedTextHeight;\n }\n if (measureText == null) {\n measureText = elt(\"pre\", null, \"CodeMirror-line-like\");\n // Measure a bunch of lines, for browsers that compute\n // fractional heights.\n for (var i = 0; i < 49; ++i) {\n measureText.appendChild(document.createTextNode(\"x\"));\n measureText.appendChild(elt(\"br\"));\n }\n measureText.appendChild(document.createTextNode(\"x\"));\n }\n removeChildrenAndAdd(display.measure, measureText);\n var height = measureText.offsetHeight / 50;\n if (height > 3) {\n display.cachedTextHeight = height;\n }\n removeChildren(display.measure);\n return height || 1;\n }\n\n // Compute the default character width.\n function charWidth(display) {\n if (display.cachedCharWidth != null) {\n return display.cachedCharWidth;\n }\n var anchor = elt(\"span\", \"xxxxxxxxxx\");\n var pre = elt(\"pre\", [anchor], \"CodeMirror-line-like\");\n removeChildrenAndAdd(display.measure, pre);\n var rect = anchor.getBoundingClientRect(),\n width = (rect.right - rect.left) / 10;\n if (width > 2) {\n display.cachedCharWidth = width;\n }\n return width || 10;\n }\n\n // Do a bulk-read of the DOM positions and sizes needed to draw the\n // view, so that we don't interleave reading and writing to the DOM.\n function getDimensions(cm) {\n var d = cm.display,\n left = {},\n width = {};\n var gutterLeft = d.gutters.clientLeft;\n for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) {\n var id = cm.display.gutterSpecs[i].className;\n left[id] = n.offsetLeft + n.clientLeft + gutterLeft;\n width[id] = n.clientWidth;\n }\n return {\n fixedPos: compensateForHScroll(d),\n gutterTotalWidth: d.gutters.offsetWidth,\n gutterLeft: left,\n gutterWidth: width,\n wrapperWidth: d.wrapper.clientWidth\n };\n }\n\n // Computes display.scroller.scrollLeft + display.gutters.offsetWidth,\n // but using getBoundingClientRect to get a sub-pixel-accurate\n // result.\n function compensateForHScroll(display) {\n return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left;\n }\n\n // Returns a function that estimates the height of a line, to use as\n // first approximation until the line becomes visible (and is thus\n // properly measurable).\n function estimateHeight(cm) {\n var th = textHeight(cm.display),\n wrapping = cm.options.lineWrapping;\n var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3);\n return function (line) {\n if (lineIsHidden(cm.doc, line)) {\n return 0;\n }\n var widgetsHeight = 0;\n if (line.widgets) {\n for (var i = 0; i < line.widgets.length; i++) {\n if (line.widgets[i].height) {\n widgetsHeight += line.widgets[i].height;\n }\n }\n }\n if (wrapping) {\n return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th;\n } else {\n return widgetsHeight + th;\n }\n };\n }\n function estimateLineHeights(cm) {\n var doc = cm.doc,\n est = estimateHeight(cm);\n doc.iter(function (line) {\n var estHeight = est(line);\n if (estHeight != line.height) {\n updateLineHeight(line, estHeight);\n }\n });\n }\n\n // Given a mouse event, find the corresponding position. If liberal\n // is false, it checks whether a gutter or scrollbar was clicked,\n // and returns null if it was. forRect is used by rectangular\n // selections, and tries to estimate a character position even for\n // coordinates beyond the right of the text.\n function posFromMouse(cm, e, liberal, forRect) {\n var display = cm.display;\n if (!liberal && e_target(e).getAttribute(\"cm-not-content\") == \"true\") {\n return null;\n }\n var x,\n y,\n space = display.lineSpace.getBoundingClientRect();\n // Fails unpredictably on IE[67] when mouse is dragged around quickly.\n try {\n x = e.clientX - space.left;\n y = e.clientY - space.top;\n } catch (e$1) {\n return null;\n }\n var coords = coordsChar(cm, x, y),\n line;\n if (forRect && coords.xRel > 0 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) {\n var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length;\n coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff));\n }\n return coords;\n }\n\n // Find the view element corresponding to a given line. Return null\n // when the line isn't visible.\n function findViewIndex(cm, n) {\n if (n >= cm.display.viewTo) {\n return null;\n }\n n -= cm.display.viewFrom;\n if (n < 0) {\n return null;\n }\n var view = cm.display.view;\n for (var i = 0; i < view.length; i++) {\n n -= view[i].size;\n if (n < 0) {\n return i;\n }\n }\n }\n\n // Updates the display.view data structure for a given change to the\n // document. From and to are in pre-change coordinates. Lendiff is\n // the amount of lines added or subtracted by the change. This is\n // used for changes that span multiple lines, or change the way\n // lines are divided into visual lines. regLineChange (below)\n // registers single-line changes.\n function regChange(cm, from, to, lendiff) {\n if (from == null) {\n from = cm.doc.first;\n }\n if (to == null) {\n to = cm.doc.first + cm.doc.size;\n }\n if (!lendiff) {\n lendiff = 0;\n }\n var display = cm.display;\n if (lendiff && to < display.viewTo && (display.updateLineNumbers == null || display.updateLineNumbers > from)) {\n display.updateLineNumbers = from;\n }\n cm.curOp.viewChanged = true;\n if (from >= display.viewTo) {\n // Change after\n if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo) {\n resetView(cm);\n }\n } else if (to <= display.viewFrom) {\n // Change before\n if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) {\n resetView(cm);\n } else {\n display.viewFrom += lendiff;\n display.viewTo += lendiff;\n }\n } else if (from <= display.viewFrom && to >= display.viewTo) {\n // Full overlap\n resetView(cm);\n } else if (from <= display.viewFrom) {\n // Top overlap\n var cut = viewCuttingPoint(cm, to, to + lendiff, 1);\n if (cut) {\n display.view = display.view.slice(cut.index);\n display.viewFrom = cut.lineN;\n display.viewTo += lendiff;\n } else {\n resetView(cm);\n }\n } else if (to >= display.viewTo) {\n // Bottom overlap\n var cut$1 = viewCuttingPoint(cm, from, from, -1);\n if (cut$1) {\n display.view = display.view.slice(0, cut$1.index);\n display.viewTo = cut$1.lineN;\n } else {\n resetView(cm);\n }\n } else {\n // Gap in the middle\n var cutTop = viewCuttingPoint(cm, from, from, -1);\n var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1);\n if (cutTop && cutBot) {\n display.view = display.view.slice(0, cutTop.index).concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN)).concat(display.view.slice(cutBot.index));\n display.viewTo += lendiff;\n } else {\n resetView(cm);\n }\n }\n var ext = display.externalMeasured;\n if (ext) {\n if (to < ext.lineN) {\n ext.lineN += lendiff;\n } else if (from < ext.lineN + ext.size) {\n display.externalMeasured = null;\n }\n }\n }\n\n // Register a change to a single line. Type must be one of \"text\",\n // \"gutter\", \"class\", \"widget\"\n function regLineChange(cm, line, type) {\n cm.curOp.viewChanged = true;\n var display = cm.display,\n ext = cm.display.externalMeasured;\n if (ext && line >= ext.lineN && line < ext.lineN + ext.size) {\n display.externalMeasured = null;\n }\n if (line < display.viewFrom || line >= display.viewTo) {\n return;\n }\n var lineView = display.view[findViewIndex(cm, line)];\n if (lineView.node == null) {\n return;\n }\n var arr = lineView.changes || (lineView.changes = []);\n if (indexOf(arr, type) == -1) {\n arr.push(type);\n }\n }\n\n // Clear the view.\n function resetView(cm) {\n cm.display.viewFrom = cm.display.viewTo = cm.doc.first;\n cm.display.view = [];\n cm.display.viewOffset = 0;\n }\n function viewCuttingPoint(cm, oldN, newN, dir) {\n var index = findViewIndex(cm, oldN),\n diff,\n view = cm.display.view;\n if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size) {\n return {\n index: index,\n lineN: newN\n };\n }\n var n = cm.display.viewFrom;\n for (var i = 0; i < index; i++) {\n n += view[i].size;\n }\n if (n != oldN) {\n if (dir > 0) {\n if (index == view.length - 1) {\n return null;\n }\n diff = n + view[index].size - oldN;\n index++;\n } else {\n diff = n - oldN;\n }\n oldN += diff;\n newN += diff;\n }\n while (visualLineNo(cm.doc, newN) != newN) {\n if (index == (dir < 0 ? 0 : view.length - 1)) {\n return null;\n }\n newN += dir * view[index - (dir < 0 ? 1 : 0)].size;\n index += dir;\n }\n return {\n index: index,\n lineN: newN\n };\n }\n\n // Force the view to cover a given range, adding empty view element\n // or clipping off existing ones as needed.\n function adjustView(cm, from, to) {\n var display = cm.display,\n view = display.view;\n if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) {\n display.view = buildViewArray(cm, from, to);\n display.viewFrom = from;\n } else {\n if (display.viewFrom > from) {\n display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view);\n } else if (display.viewFrom < from) {\n display.view = display.view.slice(findViewIndex(cm, from));\n }\n display.viewFrom = from;\n if (display.viewTo < to) {\n display.view = display.view.concat(buildViewArray(cm, display.viewTo, to));\n } else if (display.viewTo > to) {\n display.view = display.view.slice(0, findViewIndex(cm, to));\n }\n }\n display.viewTo = to;\n }\n\n // Count the number of lines in the view whose DOM representation is\n // out of date (or nonexistent).\n function countDirtyView(cm) {\n var view = cm.display.view,\n dirty = 0;\n for (var i = 0; i < view.length; i++) {\n var lineView = view[i];\n if (!lineView.hidden && (!lineView.node || lineView.changes)) {\n ++dirty;\n }\n }\n return dirty;\n }\n function updateSelection(cm) {\n cm.display.input.showSelection(cm.display.input.prepareSelection());\n }\n function prepareSelection(cm, primary) {\n if (primary === void 0) primary = true;\n var doc = cm.doc,\n result = {};\n var curFragment = result.cursors = document.createDocumentFragment();\n var selFragment = result.selection = document.createDocumentFragment();\n for (var i = 0; i < doc.sel.ranges.length; i++) {\n if (!primary && i == doc.sel.primIndex) {\n continue;\n }\n var range = doc.sel.ranges[i];\n if (range.from().line >= cm.display.viewTo || range.to().line < cm.display.viewFrom) {\n continue;\n }\n var collapsed = range.empty();\n if (collapsed || cm.options.showCursorWhenSelecting) {\n drawSelectionCursor(cm, range.head, curFragment);\n }\n if (!collapsed) {\n drawSelectionRange(cm, range, selFragment);\n }\n }\n return result;\n }\n\n // Draws a cursor for the given range\n function drawSelectionCursor(cm, head, output) {\n var pos = cursorCoords(cm, head, \"div\", null, null, !cm.options.singleCursorHeightPerLine);\n var cursor = output.appendChild(elt(\"div\", \"\\u00a0\", \"CodeMirror-cursor\"));\n cursor.style.left = pos.left + \"px\";\n cursor.style.top = pos.top + \"px\";\n cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + \"px\";\n if (pos.other) {\n // Secondary cursor, shown when on a 'jump' in bi-directional text\n var otherCursor = output.appendChild(elt(\"div\", \"\\u00a0\", \"CodeMirror-cursor CodeMirror-secondarycursor\"));\n otherCursor.style.display = \"\";\n otherCursor.style.left = pos.other.left + \"px\";\n otherCursor.style.top = pos.other.top + \"px\";\n otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + \"px\";\n }\n }\n function cmpCoords(a, b) {\n return a.top - b.top || a.left - b.left;\n }\n\n // Draws the given range as a highlighted selection\n function drawSelectionRange(cm, range, output) {\n var display = cm.display,\n doc = cm.doc;\n var fragment = document.createDocumentFragment();\n var padding = paddingH(cm.display),\n leftSide = padding.left;\n var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right;\n var docLTR = doc.direction == \"ltr\";\n function add(left, top, width, bottom) {\n if (top < 0) {\n top = 0;\n }\n top = Math.round(top);\n bottom = Math.round(bottom);\n fragment.appendChild(elt(\"div\", null, \"CodeMirror-selected\", \"position: absolute; left: \" + left + \"px;\\n top: \" + top + \"px; width: \" + (width == null ? rightSide - left : width) + \"px;\\n height: \" + (bottom - top) + \"px\"));\n }\n function drawForLine(line, fromArg, toArg) {\n var lineObj = getLine(doc, line);\n var lineLen = lineObj.text.length;\n var start, end;\n function coords(ch, bias) {\n return charCoords(cm, Pos(line, ch), \"div\", lineObj, bias);\n }\n function wrapX(pos, dir, side) {\n var extent = wrappedLineExtentChar(cm, lineObj, null, pos);\n var prop = dir == \"ltr\" == (side == \"after\") ? \"left\" : \"right\";\n var ch = side == \"after\" ? extent.begin : extent.end - (/\\s/.test(lineObj.text.charAt(extent.end - 1)) ? 2 : 1);\n return coords(ch, prop)[prop];\n }\n var order = getOrder(lineObj, doc.direction);\n iterateBidiSections(order, fromArg || 0, toArg == null ? lineLen : toArg, function (from, to, dir, i) {\n var ltr = dir == \"ltr\";\n var fromPos = coords(from, ltr ? \"left\" : \"right\");\n var toPos = coords(to - 1, ltr ? \"right\" : \"left\");\n var openStart = fromArg == null && from == 0,\n openEnd = toArg == null && to == lineLen;\n var first = i == 0,\n last = !order || i == order.length - 1;\n if (toPos.top - fromPos.top <= 3) {\n // Single line\n var openLeft = (docLTR ? openStart : openEnd) && first;\n var openRight = (docLTR ? openEnd : openStart) && last;\n var left = openLeft ? leftSide : (ltr ? fromPos : toPos).left;\n var right = openRight ? rightSide : (ltr ? toPos : fromPos).right;\n add(left, fromPos.top, right - left, fromPos.bottom);\n } else {\n // Multiple lines\n var topLeft, topRight, botLeft, botRight;\n if (ltr) {\n topLeft = docLTR && openStart && first ? leftSide : fromPos.left;\n topRight = docLTR ? rightSide : wrapX(from, dir, \"before\");\n botLeft = docLTR ? leftSide : wrapX(to, dir, \"after\");\n botRight = docLTR && openEnd && last ? rightSide : toPos.right;\n } else {\n topLeft = !docLTR ? leftSide : wrapX(from, dir, \"before\");\n topRight = !docLTR && openStart && first ? rightSide : fromPos.right;\n botLeft = !docLTR && openEnd && last ? leftSide : toPos.left;\n botRight = !docLTR ? rightSide : wrapX(to, dir, \"after\");\n }\n add(topLeft, fromPos.top, topRight - topLeft, fromPos.bottom);\n if (fromPos.bottom < toPos.top) {\n add(leftSide, fromPos.bottom, null, toPos.top);\n }\n add(botLeft, toPos.top, botRight - botLeft, toPos.bottom);\n }\n if (!start || cmpCoords(fromPos, start) < 0) {\n start = fromPos;\n }\n if (cmpCoords(toPos, start) < 0) {\n start = toPos;\n }\n if (!end || cmpCoords(fromPos, end) < 0) {\n end = fromPos;\n }\n if (cmpCoords(toPos, end) < 0) {\n end = toPos;\n }\n });\n return {\n start: start,\n end: end\n };\n }\n var sFrom = range.from(),\n sTo = range.to();\n if (sFrom.line == sTo.line) {\n drawForLine(sFrom.line, sFrom.ch, sTo.ch);\n } else {\n var fromLine = getLine(doc, sFrom.line),\n toLine = getLine(doc, sTo.line);\n var singleVLine = visualLine(fromLine) == visualLine(toLine);\n var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end;\n var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start;\n if (singleVLine) {\n if (leftEnd.top < rightStart.top - 2) {\n add(leftEnd.right, leftEnd.top, null, leftEnd.bottom);\n add(leftSide, rightStart.top, rightStart.left, rightStart.bottom);\n } else {\n add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom);\n }\n }\n if (leftEnd.bottom < rightStart.top) {\n add(leftSide, leftEnd.bottom, null, rightStart.top);\n }\n }\n output.appendChild(fragment);\n }\n\n // Cursor-blinking\n function restartBlink(cm) {\n if (!cm.state.focused) {\n return;\n }\n var display = cm.display;\n clearInterval(display.blinker);\n var on = true;\n display.cursorDiv.style.visibility = \"\";\n if (cm.options.cursorBlinkRate > 0) {\n display.blinker = setInterval(function () {\n 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 function ensureFocus(cm) {\n if (!cm.state.focused) {\n cm.display.input.focus();\n onFocus(cm);\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 function onFocus(cm, e) {\n if (cm.state.delayingBlurEvent) {\n cm.state.delayingBlurEvent = false;\n }\n if (cm.options.readOnly == \"nocursor\") {\n return;\n }\n if (!cm.state.focused) {\n signal(cm, \"focus\", cm, e);\n cm.state.focused = true;\n addClass(cm.display.wrapper, \"CodeMirror-focused\");\n // This test prevents this from firing when a context\n // menu is closed (since the input reset would kill the\n // select-all detection hack)\n if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) {\n cm.display.input.reset();\n if (webkit) {\n setTimeout(function () {\n return cm.display.input.reset(true);\n }, 20);\n } // Issue #1730\n }\n\n cm.display.input.receivedFocus();\n }\n restartBlink(cm);\n }\n function onBlur(cm, e) {\n if (cm.state.delayingBlurEvent) {\n return;\n }\n if (cm.state.focused) {\n signal(cm, \"blur\", cm, e);\n cm.state.focused = false;\n rmClass(cm.display.wrapper, \"CodeMirror-focused\");\n }\n clearInterval(cm.display.blinker);\n setTimeout(function () {\n if (!cm.state.focused) {\n cm.display.shift = false;\n }\n }, 150);\n }\n\n // Read the actual heights of the rendered lines, and update their\n // stored heights to match.\n function updateHeightsInViewport(cm) {\n var display = cm.display;\n var prevBottom = display.lineDiv.offsetTop;\n for (var i = 0; i < display.view.length; i++) {\n var cur = display.view[i],\n wrapping = cm.options.lineWrapping;\n var height = void 0,\n width = 0;\n if (cur.hidden) {\n continue;\n }\n if (ie && ie_version < 8) {\n var bot = cur.node.offsetTop + cur.node.offsetHeight;\n height = bot - prevBottom;\n prevBottom = bot;\n } else {\n var box = cur.node.getBoundingClientRect();\n height = box.bottom - box.top;\n // Check that lines don't extend past the right of the current\n // editor width\n if (!wrapping && cur.text.firstChild) {\n width = cur.text.firstChild.getBoundingClientRect().right - box.left - 1;\n }\n }\n var diff = cur.line.height - height;\n if (diff > .005 || diff < -.005) {\n updateLineHeight(cur.line, height);\n updateWidgetHeight(cur.line);\n if (cur.rest) {\n for (var j = 0; j < cur.rest.length; j++) {\n updateWidgetHeight(cur.rest[j]);\n }\n }\n }\n if (width > cm.display.sizerWidth) {\n var chWidth = Math.ceil(width / charWidth(cm.display));\n if (chWidth > cm.display.maxLineLength) {\n cm.display.maxLineLength = chWidth;\n cm.display.maxLine = cur.line;\n cm.display.maxLineChanged = true;\n }\n }\n }\n }\n\n // Read and store the height of line widgets associated with the\n // given line.\n function updateWidgetHeight(line) {\n if (line.widgets) {\n for (var i = 0; i < line.widgets.length; ++i) {\n var w = line.widgets[i],\n parent = w.node.parentNode;\n if (parent) {\n w.height = parent.offsetHeight;\n }\n }\n }\n }\n\n // Compute the lines that are visible in a given viewport (defaults\n // the the current scroll position). viewport may contain top,\n // height, and ensure (see op.scrollToPos) properties.\n function visibleLines(display, doc, viewport) {\n var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop;\n top = Math.floor(top - paddingTop(display));\n var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight;\n var from = lineAtHeight(doc, top),\n to = lineAtHeight(doc, bottom);\n // Ensure is a {from: {line, ch}, to: {line, ch}} object, and\n // forces those lines into the viewport (if possible).\n if (viewport && viewport.ensure) {\n var ensureFrom = viewport.ensure.from.line,\n ensureTo = viewport.ensure.to.line;\n if (ensureFrom < from) {\n from = ensureFrom;\n to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight);\n } else if (Math.min(ensureTo, doc.lastLine()) >= to) {\n from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight);\n to = ensureTo;\n }\n }\n return {\n from: from,\n to: Math.max(to, from + 1)\n };\n }\n\n // SCROLLING THINGS INTO VIEW\n\n // If an editor sits on the top or bottom of the window, partially\n // scrolled out of view, this ensures that the cursor is visible.\n function maybeScrollWindow(cm, rect) {\n if (signalDOMEvent(cm, \"scrollCursorIntoView\")) {\n return;\n }\n var display = cm.display,\n box = display.sizer.getBoundingClientRect(),\n doScroll = null;\n 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 if (doScroll != null && !phantom) {\n var scrollNode = elt(\"div\", \"\\u200b\", null, \"position: absolute;\\n top: \" + (rect.top - display.viewOffset - paddingTop(cm.display)) + \"px;\\n height: \" + (rect.bottom - rect.top + scrollGap(cm) + display.barHeight) + \"px;\\n left: \" + rect.left + \"px; width: \" + Math.max(2, rect.right - rect.left) + \"px;\");\n cm.display.lineSpace.appendChild(scrollNode);\n scrollNode.scrollIntoView(doScroll);\n cm.display.lineSpace.removeChild(scrollNode);\n }\n }\n\n // Scroll a given position into view (immediately), verifying that\n // it actually became visible (as line heights are accurately\n // measured, the position of something may 'drift' during drawing).\n function scrollPosIntoView(cm, pos, end, margin) {\n if (margin == null) {\n margin = 0;\n }\n var rect;\n if (!cm.options.lineWrapping && pos == end) {\n // Set pos and end to the cursor positions around the character pos sticks to\n // If pos.sticky == \"before\", that is around pos.ch - 1, otherwise around pos.ch\n // If pos == Pos(_, 0, \"before\"), pos and end are unchanged\n 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 for (var limit = 0; limit < 5; limit++) {\n var changed = false;\n var coords = cursorCoords(cm, pos);\n var endCoords = !end || end == pos ? coords : cursorCoords(cm, end);\n rect = {\n left: Math.min(coords.left, endCoords.left),\n top: Math.min(coords.top, endCoords.top) - margin,\n right: Math.max(coords.left, endCoords.left),\n bottom: Math.max(coords.bottom, endCoords.bottom) + margin\n };\n var scrollPos = calculateScrollPos(cm, rect);\n var startTop = cm.doc.scrollTop,\n startLeft = cm.doc.scrollLeft;\n if (scrollPos.scrollTop != null) {\n updateScrollTop(cm, scrollPos.scrollTop);\n if (Math.abs(cm.doc.scrollTop - startTop) > 1) {\n changed = true;\n }\n }\n if (scrollPos.scrollLeft != null) {\n setScrollLeft(cm, scrollPos.scrollLeft);\n if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) {\n changed = true;\n }\n }\n if (!changed) {\n break;\n }\n }\n return rect;\n }\n\n // Scroll a given set of coordinates into view (immediately).\n function scrollIntoView(cm, rect) {\n var scrollPos = calculateScrollPos(cm, rect);\n if (scrollPos.scrollTop != null) {\n updateScrollTop(cm, scrollPos.scrollTop);\n }\n if (scrollPos.scrollLeft != null) {\n setScrollLeft(cm, scrollPos.scrollLeft);\n }\n }\n\n // Calculate a new scroll position needed to scroll the given\n // rectangle into view. Returns an object with scrollTop and\n // scrollLeft properties. When these are undefined, the\n // vertical/horizontal position does not need to be adjusted.\n function calculateScrollPos(cm, rect) {\n var display = cm.display,\n snapMargin = textHeight(cm.display);\n if (rect.top < 0) {\n rect.top = 0;\n }\n var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop;\n var screen = displayHeight(cm),\n result = {};\n if (rect.bottom - rect.top > screen) {\n rect.bottom = rect.top + screen;\n }\n var docBottom = cm.doc.height + paddingVert(display);\n var atTop = rect.top < snapMargin,\n atBottom = rect.bottom > docBottom - snapMargin;\n if (rect.top < screentop) {\n result.scrollTop = atTop ? 0 : rect.top;\n } else if (rect.bottom > screentop + screen) {\n var newTop = Math.min(rect.top, (atBottom ? docBottom : rect.bottom) - screen);\n if (newTop != screentop) {\n result.scrollTop = newTop;\n }\n }\n var 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 if (tooWide) {\n rect.right = rect.left + screenw;\n }\n if (rect.left < 10) {\n result.scrollLeft = 0;\n } else if (rect.left < screenleft) {\n result.scrollLeft = Math.max(0, rect.left - (tooWide ? 0 : 10));\n } else if (rect.right > screenw + screenleft - 3) {\n result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw;\n }\n return result;\n }\n\n // Store a relative adjustment to the scroll position in the current\n // operation (to be applied when the operation finishes).\n function addToScrollTop(cm, top) {\n if (top == null) {\n return;\n }\n resolveScrollToPos(cm);\n cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top;\n }\n\n // Make sure that at the end of the operation the current cursor is\n // shown.\n function ensureCursorVisible(cm) {\n resolveScrollToPos(cm);\n var cur = cm.getCursor();\n cm.curOp.scrollToPos = {\n from: cur,\n to: cur,\n margin: cm.options.cursorScrollMargin\n };\n }\n function scrollToCoords(cm, x, y) {\n if (x != null || y != null) {\n resolveScrollToPos(cm);\n }\n if (x != null) {\n cm.curOp.scrollLeft = x;\n }\n if (y != null) {\n cm.curOp.scrollTop = y;\n }\n }\n function scrollToRange(cm, range) {\n resolveScrollToPos(cm);\n cm.curOp.scrollToPos = range;\n }\n\n // When an operation has its scrollToPos property set, and another\n // scroll action is applied before the end of the operation, this\n // 'simulates' scrolling that position into view in a cheap way, so\n // that the effect of intermediate scroll commands is not ignored.\n function resolveScrollToPos(cm) {\n var range = cm.curOp.scrollToPos;\n if (range) {\n cm.curOp.scrollToPos = null;\n var from = estimateCoords(cm, range.from),\n to = estimateCoords(cm, range.to);\n scrollToCoordsRange(cm, from, to, range.margin);\n }\n }\n function scrollToCoordsRange(cm, from, to, margin) {\n var sPos = calculateScrollPos(cm, {\n left: Math.min(from.left, to.left),\n top: Math.min(from.top, to.top) - margin,\n right: Math.max(from.right, to.right),\n bottom: Math.max(from.bottom, to.bottom) + margin\n });\n scrollToCoords(cm, sPos.scrollLeft, sPos.scrollTop);\n }\n\n // Sync the scrollable area and scrollbars, ensure the viewport\n // covers the visible area.\n function updateScrollTop(cm, val) {\n if (Math.abs(cm.doc.scrollTop - val) < 2) {\n return;\n }\n if (!gecko) {\n updateDisplaySimple(cm, {\n top: val\n });\n }\n setScrollTop(cm, val, true);\n if (gecko) {\n updateDisplaySimple(cm);\n }\n startWorker(cm, 100);\n }\n function setScrollTop(cm, val, forceScroll) {\n val = Math.max(0, Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight, val));\n if (cm.display.scroller.scrollTop == val && !forceScroll) {\n return;\n }\n cm.doc.scrollTop = val;\n cm.display.scrollbars.setScrollTop(val);\n if (cm.display.scroller.scrollTop != val) {\n cm.display.scroller.scrollTop = val;\n }\n }\n\n // Sync scroller and scrollbar, ensure the gutter elements are\n // aligned.\n function setScrollLeft(cm, val, isScroller, forceScroll) {\n val = Math.max(0, Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth));\n if ((isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) && !forceScroll) {\n return;\n }\n cm.doc.scrollLeft = val;\n alignHorizontally(cm);\n if (cm.display.scroller.scrollLeft != val) {\n cm.display.scroller.scrollLeft = val;\n }\n cm.display.scrollbars.setScrollLeft(val);\n }\n\n // SCROLLBARS\n\n // Prepare DOM reads needed to update the scrollbars. Done in one\n // shot to minimize update/measure roundtrips.\n function measureForScrollbars(cm) {\n var d = cm.display,\n gutterW = d.gutters.offsetWidth;\n var docH = Math.round(cm.doc.height + paddingVert(cm.display));\n return {\n clientHeight: d.scroller.clientHeight,\n viewHeight: d.wrapper.clientHeight,\n scrollWidth: d.scroller.scrollWidth,\n clientWidth: d.scroller.clientWidth,\n viewWidth: d.wrapper.clientWidth,\n barLeft: cm.options.fixedGutter ? gutterW : 0,\n docHeight: docH,\n scrollHeight: docH + scrollGap(cm) + d.barHeight,\n nativeBarWidth: d.nativeBarWidth,\n gutterWidth: gutterW\n };\n }\n var NativeScrollbars = function (place, scroll, cm) {\n this.cm = cm;\n var vert = this.vert = elt(\"div\", [elt(\"div\", null, null, \"min-width: 1px\")], \"CodeMirror-vscrollbar\");\n var horiz = this.horiz = elt(\"div\", [elt(\"div\", null, null, \"height: 100%; min-height: 1px\")], \"CodeMirror-hscrollbar\");\n vert.tabIndex = horiz.tabIndex = -1;\n place(vert);\n place(horiz);\n on(vert, \"scroll\", function () {\n if (vert.clientHeight) {\n scroll(vert.scrollTop, \"vertical\");\n }\n });\n on(horiz, \"scroll\", function () {\n if (horiz.clientWidth) {\n scroll(horiz.scrollLeft, \"horizontal\");\n }\n });\n this.checkedZeroWidth = false;\n // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8).\n if (ie && ie_version < 8) {\n this.horiz.style.minHeight = this.vert.style.minWidth = \"18px\";\n }\n };\n NativeScrollbars.prototype.update = function (measure) {\n var needsH = measure.scrollWidth > measure.clientWidth + 1;\n var needsV = measure.scrollHeight > measure.clientHeight + 1;\n var sWidth = measure.nativeBarWidth;\n if (needsV) {\n this.vert.style.display = \"block\";\n this.vert.style.bottom = needsH ? sWidth + \"px\" : \"0\";\n var totalHeight = measure.viewHeight - (needsH ? sWidth : 0);\n // A bug in IE8 can cause this value to be negative, so guard it.\n this.vert.firstChild.style.height = Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + \"px\";\n } else {\n this.vert.style.display = \"\";\n this.vert.firstChild.style.height = \"0\";\n }\n if (needsH) {\n this.horiz.style.display = \"block\";\n this.horiz.style.right = needsV ? sWidth + \"px\" : \"0\";\n this.horiz.style.left = measure.barLeft + \"px\";\n var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0);\n this.horiz.firstChild.style.width = Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + \"px\";\n } else {\n this.horiz.style.display = \"\";\n this.horiz.firstChild.style.width = \"0\";\n }\n if (!this.checkedZeroWidth && measure.clientHeight > 0) {\n if (sWidth == 0) {\n this.zeroWidthHack();\n }\n this.checkedZeroWidth = true;\n }\n return {\n right: needsV ? sWidth : 0,\n bottom: needsH ? sWidth : 0\n };\n };\n NativeScrollbars.prototype.setScrollLeft = function (pos) {\n if (this.horiz.scrollLeft != pos) {\n this.horiz.scrollLeft = pos;\n }\n if (this.disableHoriz) {\n this.enableZeroWidthBar(this.horiz, this.disableHoriz, \"horiz\");\n }\n };\n NativeScrollbars.prototype.setScrollTop = function (pos) {\n if (this.vert.scrollTop != pos) {\n this.vert.scrollTop = pos;\n }\n if (this.disableVert) {\n this.enableZeroWidthBar(this.vert, this.disableVert, \"vert\");\n }\n };\n NativeScrollbars.prototype.zeroWidthHack = function () {\n var w = mac && !mac_geMountainLion ? \"12px\" : \"18px\";\n this.horiz.style.height = this.vert.style.width = w;\n this.horiz.style.pointerEvents = this.vert.style.pointerEvents = \"none\";\n this.disableHoriz = new Delayed();\n this.disableVert = new Delayed();\n };\n NativeScrollbars.prototype.enableZeroWidthBar = function (bar, delay, type) {\n bar.style.pointerEvents = \"auto\";\n function maybeDisable() {\n // To find out whether the scrollbar is still visible, we\n // check whether the element under the pixel in the bottom\n // right corner of the scrollbar box is the scrollbar box\n // itself (when the bar is still visible) or its filler child\n // (when the bar is hidden). If it is still visible, we keep\n // it enabled, if it's hidden, we disable pointer events.\n var box = bar.getBoundingClientRect();\n var elt = type == \"vert\" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2) : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1);\n if (elt != bar) {\n bar.style.pointerEvents = \"none\";\n } else {\n delay.set(1000, maybeDisable);\n }\n }\n delay.set(1000, maybeDisable);\n };\n NativeScrollbars.prototype.clear = function () {\n var parent = this.horiz.parentNode;\n parent.removeChild(this.horiz);\n parent.removeChild(this.vert);\n };\n var NullScrollbars = function () {};\n NullScrollbars.prototype.update = function () {\n return {\n bottom: 0,\n right: 0\n };\n };\n NullScrollbars.prototype.setScrollLeft = function () {};\n NullScrollbars.prototype.setScrollTop = function () {};\n NullScrollbars.prototype.clear = function () {};\n function updateScrollbars(cm, measure) {\n if (!measure) {\n measure = measureForScrollbars(cm);\n }\n var startWidth = cm.display.barWidth,\n startHeight = cm.display.barHeight;\n updateScrollbarsInner(cm, measure);\n for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) {\n if (startWidth != cm.display.barWidth && cm.options.lineWrapping) {\n updateHeightsInViewport(cm);\n }\n updateScrollbarsInner(cm, measureForScrollbars(cm));\n startWidth = cm.display.barWidth;\n startHeight = cm.display.barHeight;\n }\n }\n\n // Re-synchronize the fake scrollbars with the actual size of the\n // content.\n function updateScrollbarsInner(cm, measure) {\n var d = cm.display;\n var sizes = d.scrollbars.update(measure);\n d.sizer.style.paddingRight = (d.barWidth = sizes.right) + \"px\";\n d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + \"px\";\n d.heightForcer.style.borderBottom = sizes.bottom + \"px solid transparent\";\n if (sizes.right && sizes.bottom) {\n d.scrollbarFiller.style.display = \"block\";\n d.scrollbarFiller.style.height = sizes.bottom + \"px\";\n d.scrollbarFiller.style.width = sizes.right + \"px\";\n } else {\n d.scrollbarFiller.style.display = \"\";\n }\n if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) {\n d.gutterFiller.style.display = \"block\";\n d.gutterFiller.style.height = sizes.bottom + \"px\";\n d.gutterFiller.style.width = measure.gutterWidth + \"px\";\n } else {\n d.gutterFiller.style.display = \"\";\n }\n }\n var scrollbarModel = {\n \"native\": NativeScrollbars,\n \"null\": NullScrollbars\n };\n function initScrollbars(cm) {\n if (cm.display.scrollbars) {\n cm.display.scrollbars.clear();\n if (cm.display.scrollbars.addClass) {\n rmClass(cm.display.wrapper, cm.display.scrollbars.addClass);\n }\n }\n cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](function (node) {\n cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller);\n // Prevent clicks in the scrollbars from killing focus\n on(node, \"mousedown\", function () {\n if (cm.state.focused) {\n setTimeout(function () {\n return cm.display.input.focus();\n }, 0);\n }\n });\n node.setAttribute(\"cm-not-content\", \"true\");\n }, function (pos, axis) {\n if (axis == \"horizontal\") {\n setScrollLeft(cm, pos);\n } else {\n updateScrollTop(cm, pos);\n }\n }, cm);\n if (cm.display.scrollbars.addClass) {\n addClass(cm.display.wrapper, cm.display.scrollbars.addClass);\n }\n }\n\n // Operations are used to wrap a series of changes to the editor\n // state in such a way that each change won't have to update the\n // cursor and display (which would be awkward, slow, and\n // error-prone). Instead, display updates are batched and then all\n // combined and executed at once.\n\n var nextOpId = 0;\n // Start a new operation.\n function startOperation(cm) {\n cm.curOp = {\n cm: cm,\n viewChanged: false,\n // Flag that indicates that lines might need to be redrawn\n startHeight: cm.doc.height,\n // Used to detect need to update scrollbar\n forceUpdate: false,\n // Used to force a redraw\n updateInput: 0,\n // Whether to reset the input textarea\n typing: false,\n // Whether this reset should be careful to leave existing text (for compositing)\n changeObjs: null,\n // Accumulated changes, for firing change events\n cursorActivityHandlers: null,\n // Set of handlers to fire cursorActivity on\n cursorActivityCalled: 0,\n // Tracks which cursorActivity handlers have been called already\n selectionChanged: false,\n // Whether the selection needs to be redrawn\n updateMaxLine: false,\n // Set when the widest line needs to be determined anew\n scrollLeft: null,\n scrollTop: null,\n // Intermediate scroll position, not pushed to DOM yet\n scrollToPos: null,\n // Used to scroll to a specific position\n focus: false,\n id: ++nextOpId // Unique ID\n };\n\n pushOperation(cm.curOp);\n }\n\n // Finish an operation, updating the display and signalling delayed events\n function endOperation(cm) {\n var op = cm.curOp;\n if (op) {\n finishOperation(op, function (group) {\n for (var i = 0; i < group.ops.length; i++) {\n group.ops[i].cm.curOp = null;\n }\n endOperations(group);\n });\n }\n }\n\n // The DOM updates done when an operation finishes are batched so\n // that the minimum number of relayouts are required.\n function endOperations(group) {\n var ops = group.ops;\n for (var i = 0; i < ops.length; i++)\n // Read DOM\n {\n endOperation_R1(ops[i]);\n }\n for (var i$1 = 0; i$1 < ops.length; i$1++)\n // Write DOM (maybe)\n {\n endOperation_W1(ops[i$1]);\n }\n for (var i$2 = 0; i$2 < ops.length; i$2++)\n // Read DOM\n {\n endOperation_R2(ops[i$2]);\n }\n for (var i$3 = 0; i$3 < ops.length; i$3++)\n // Write DOM (maybe)\n {\n endOperation_W2(ops[i$3]);\n }\n for (var i$4 = 0; i$4 < ops.length; i$4++)\n // Read DOM\n {\n endOperation_finish(ops[i$4]);\n }\n }\n function endOperation_R1(op) {\n var cm = op.cm,\n display = cm.display;\n maybeClipScrollbars(cm);\n if (op.updateMaxLine) {\n findMaxLine(cm);\n }\n op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null || op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom || op.scrollToPos.to.line >= display.viewTo) || display.maxLineChanged && cm.options.lineWrapping;\n op.update = op.mustUpdate && new DisplayUpdate(cm, op.mustUpdate && {\n top: op.scrollTop,\n ensure: op.scrollToPos\n }, op.forceUpdate);\n }\n function endOperation_W1(op) {\n op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update);\n }\n function endOperation_R2(op) {\n var cm = op.cm,\n display = cm.display;\n if (op.updatedDisplay) {\n updateHeightsInViewport(cm);\n }\n op.barMeasure = measureForScrollbars(cm);\n\n // If the max line changed since it was last measured, measure it,\n // and ensure the document's width matches it.\n // updateDisplay_W2 will use these properties to do the actual resizing\n if (display.maxLineChanged && !cm.options.lineWrapping) {\n op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3;\n cm.display.sizerWidth = op.adjustWidthTo;\n op.barMeasure.scrollWidth = Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth);\n op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm));\n }\n if (op.updatedDisplay || op.selectionChanged) {\n op.preparedSelection = display.input.prepareSelection();\n }\n }\n function endOperation_W2(op) {\n var cm = op.cm;\n if (op.adjustWidthTo != null) {\n cm.display.sizer.style.minWidth = op.adjustWidthTo + \"px\";\n if (op.maxScrollLeft < cm.doc.scrollLeft) {\n setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true);\n }\n cm.display.maxLineChanged = false;\n }\n var takeFocus = op.focus && op.focus == activeElt();\n if (op.preparedSelection) {\n cm.display.input.showSelection(op.preparedSelection, takeFocus);\n }\n if (op.updatedDisplay || op.startHeight != cm.doc.height) {\n updateScrollbars(cm, op.barMeasure);\n }\n if (op.updatedDisplay) {\n setDocumentHeight(cm, op.barMeasure);\n }\n if (op.selectionChanged) {\n restartBlink(cm);\n }\n if (cm.state.focused && op.updateInput) {\n cm.display.input.reset(op.typing);\n }\n if (takeFocus) {\n ensureFocus(op.cm);\n }\n }\n function endOperation_finish(op) {\n var cm = op.cm,\n display = cm.display,\n doc = cm.doc;\n if (op.updatedDisplay) {\n postUpdateDisplay(cm, op.update);\n }\n\n // Abort mouse wheel delta measurement, when scrolling explicitly\n if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos)) {\n display.wheelStartX = display.wheelStartY = null;\n }\n\n // Propagate the scroll position to the actual DOM scroller\n if (op.scrollTop != null) {\n setScrollTop(cm, op.scrollTop, op.forceScroll);\n }\n if (op.scrollLeft != null) {\n setScrollLeft(cm, op.scrollLeft, true, true);\n }\n // If we need to scroll a specific position into view, do so.\n if (op.scrollToPos) {\n var rect = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from), clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin);\n maybeScrollWindow(cm, rect);\n }\n\n // Fire events for markers that are hidden/unidden by editing or\n // undoing\n var hidden = op.maybeHiddenMarkers,\n unhidden = op.maybeUnhiddenMarkers;\n if (hidden) {\n for (var i = 0; i < hidden.length; ++i) {\n if (!hidden[i].lines.length) {\n signal(hidden[i], \"hide\");\n }\n }\n }\n if (unhidden) {\n for (var i$1 = 0; i$1 < unhidden.length; ++i$1) {\n if (unhidden[i$1].lines.length) {\n signal(unhidden[i$1], \"unhide\");\n }\n }\n }\n if (display.wrapper.offsetHeight) {\n doc.scrollTop = cm.display.scroller.scrollTop;\n }\n\n // Fire change events, and delayed event handlers\n if (op.changeObjs) {\n signal(cm, \"changes\", cm, op.changeObjs);\n }\n if (op.update) {\n op.update.finish();\n }\n }\n\n // Run the given function in an operation\n function runInOp(cm, f) {\n if (cm.curOp) {\n return f();\n }\n startOperation(cm);\n try {\n return f();\n } finally {\n endOperation(cm);\n }\n }\n // Wraps a function in an operation. Returns the wrapped function.\n function operation(cm, f) {\n return function () {\n if (cm.curOp) {\n return f.apply(cm, arguments);\n }\n startOperation(cm);\n try {\n return f.apply(cm, arguments);\n } finally {\n endOperation(cm);\n }\n };\n }\n // Used to add methods to editor and doc instances, wrapping them in\n // operations.\n function methodOp(f) {\n return function () {\n if (this.curOp) {\n return f.apply(this, arguments);\n }\n startOperation(this);\n try {\n return f.apply(this, arguments);\n } finally {\n endOperation(this);\n }\n };\n }\n function docMethodOp(f) {\n return function () {\n var cm = this.cm;\n if (!cm || cm.curOp) {\n return f.apply(this, arguments);\n }\n startOperation(cm);\n try {\n return f.apply(this, arguments);\n } finally {\n endOperation(cm);\n }\n };\n }\n\n // HIGHLIGHT WORKER\n\n function startWorker(cm, time) {\n if (cm.doc.highlightFrontier < cm.display.viewTo) {\n cm.state.highlight.set(time, bind(highlightWorker, cm));\n }\n }\n function highlightWorker(cm) {\n var doc = cm.doc;\n if (doc.highlightFrontier >= cm.display.viewTo) {\n return;\n }\n var end = +new Date() + cm.options.workTime;\n var context = getContextBefore(cm, doc.highlightFrontier);\n var changedLines = [];\n doc.iter(context.line, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function (line) {\n if (context.line >= cm.display.viewFrom) {\n // Visible\n var oldStyles = line.styles;\n var resetState = line.text.length > cm.options.maxHighlightLength ? copyState(doc.mode, context.state) : null;\n var highlighted = highlightLine(cm, line, context, true);\n if (resetState) {\n context.state = resetState;\n }\n line.styles = highlighted.styles;\n var oldCls = line.styleClasses,\n newCls = highlighted.classes;\n if (newCls) {\n line.styleClasses = newCls;\n } else if (oldCls) {\n line.styleClasses = null;\n }\n var ischange = !oldStyles || oldStyles.length != line.styles.length || oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass);\n for (var i = 0; !ischange && i < oldStyles.length; ++i) {\n ischange = oldStyles[i] != line.styles[i];\n }\n if (ischange) {\n changedLines.push(context.line);\n }\n line.stateAfter = context.save();\n context.nextLine();\n } else {\n if (line.text.length <= cm.options.maxHighlightLength) {\n processLine(cm, line.text, context);\n }\n line.stateAfter = context.line % 5 == 0 ? context.save() : null;\n context.nextLine();\n }\n if (+new Date() > end) {\n startWorker(cm, cm.options.workDelay);\n return true;\n }\n });\n doc.highlightFrontier = context.line;\n doc.modeFrontier = Math.max(doc.modeFrontier, context.line);\n if (changedLines.length) {\n runInOp(cm, function () {\n for (var i = 0; i < changedLines.length; i++) {\n regLineChange(cm, changedLines[i], \"text\");\n }\n });\n }\n }\n\n // DISPLAY DRAWING\n\n var DisplayUpdate = function (cm, viewport, force) {\n var display = cm.display;\n this.viewport = viewport;\n // Store some values that we'll need later (but don't want to force a relayout for)\n this.visible = visibleLines(display, cm.doc, viewport);\n this.editorIsHidden = !display.wrapper.offsetWidth;\n this.wrapperHeight = display.wrapper.clientHeight;\n this.wrapperWidth = display.wrapper.clientWidth;\n this.oldDisplayWidth = displayWidth(cm);\n this.force = force;\n this.dims = getDimensions(cm);\n this.events = [];\n };\n DisplayUpdate.prototype.signal = function (emitter, type) {\n if (hasHandler(emitter, type)) {\n this.events.push(arguments);\n }\n };\n DisplayUpdate.prototype.finish = function () {\n for (var i = 0; i < this.events.length; i++) {\n signal.apply(null, this.events[i]);\n }\n };\n function maybeClipScrollbars(cm) {\n var display = cm.display;\n if (!display.scrollbarsClipped && display.scroller.offsetWidth) {\n display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth;\n display.heightForcer.style.height = scrollGap(cm) + \"px\";\n display.sizer.style.marginBottom = -display.nativeBarWidth + \"px\";\n display.sizer.style.borderRightWidth = scrollGap(cm) + \"px\";\n display.scrollbarsClipped = true;\n }\n }\n function selectionSnapshot(cm) {\n if (cm.hasFocus()) {\n return null;\n }\n var active = activeElt();\n if (!active || !contains(cm.display.lineDiv, active)) {\n return null;\n }\n var result = {\n activeElt: active\n };\n if (window.getSelection) {\n var sel = window.getSelection();\n if (sel.anchorNode && sel.extend && contains(cm.display.lineDiv, sel.anchorNode)) {\n result.anchorNode = sel.anchorNode;\n result.anchorOffset = sel.anchorOffset;\n result.focusNode = sel.focusNode;\n result.focusOffset = sel.focusOffset;\n }\n }\n return result;\n }\n function restoreSelection(snapshot) {\n if (!snapshot || !snapshot.activeElt || snapshot.activeElt == activeElt()) {\n return;\n }\n snapshot.activeElt.focus();\n if (!/^(INPUT|TEXTAREA)$/.test(snapshot.activeElt.nodeName) && snapshot.anchorNode && contains(document.body, snapshot.anchorNode) && contains(document.body, snapshot.focusNode)) {\n var 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 }\n\n // Does the actual updating of the line display. Bails out\n // (returning false) when there is nothing to be done and forced is\n // false.\n function updateDisplayIfNeeded(cm, update) {\n var display = cm.display,\n doc = cm.doc;\n if (update.editorIsHidden) {\n resetView(cm);\n return false;\n }\n\n // Bail out if the visible area is already rendered and nothing changed.\n if (!update.force && update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo && (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) && display.renderedView == display.view && countDirtyView(cm) == 0) {\n return false;\n }\n if (maybeUpdateLineNumberWidth(cm)) {\n resetView(cm);\n update.dims = getDimensions(cm);\n }\n\n // Compute a suitable new viewport (from & to)\n var end = doc.first + doc.size;\n var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first);\n var to = Math.min(end, update.visible.to + cm.options.viewportMargin);\n if (display.viewFrom < from && from - display.viewFrom < 20) {\n from = Math.max(doc.first, display.viewFrom);\n }\n if (display.viewTo > to && display.viewTo - to < 20) {\n to = Math.min(end, display.viewTo);\n }\n if (sawCollapsedSpans) {\n from = visualLineNo(cm.doc, from);\n to = visualLineEndNo(cm.doc, to);\n }\n var different = from != display.viewFrom || to != display.viewTo || display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth;\n adjustView(cm, from, to);\n display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom));\n // Position the mover div to align with the current scroll position\n cm.display.mover.style.top = display.viewOffset + \"px\";\n var toUpdate = countDirtyView(cm);\n if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view && (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo)) {\n return false;\n }\n\n // For big changes, we hide the enclosing element during the\n // update, since that speeds up the operations on most browsers.\n var selSnapshot = selectionSnapshot(cm);\n if (toUpdate > 4) {\n display.lineDiv.style.display = \"none\";\n }\n patchDisplay(cm, display.updateLineNumbers, update.dims);\n if (toUpdate > 4) {\n display.lineDiv.style.display = \"\";\n }\n display.renderedView = display.view;\n // There might have been a widget with a focused element that got\n // hidden or updated, if so re-focus it.\n restoreSelection(selSnapshot);\n\n // Prevent selection and cursors from interfering with the scroll\n // width and height.\n removeChildren(display.cursorDiv);\n removeChildren(display.selectionDiv);\n display.gutters.style.height = display.sizer.style.minHeight = 0;\n if (different) {\n display.lastWrapHeight = update.wrapperHeight;\n display.lastWrapWidth = update.wrapperWidth;\n startWorker(cm, 400);\n }\n display.updateLineNumbers = null;\n return true;\n }\n function postUpdateDisplay(cm, update) {\n var viewport = update.viewport;\n for (var first = true;; first = false) {\n if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) {\n // Clip forced viewport to actual scrollable area.\n if (viewport && viewport.top != null) {\n viewport = {\n top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)\n };\n }\n // Updated line heights might result in the drawn area not\n // actually covering the viewport. Keep looping until it does.\n update.visible = visibleLines(cm.display, cm.doc, viewport);\n if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo) {\n break;\n }\n } else if (first) {\n update.visible = visibleLines(cm.display, cm.doc, viewport);\n }\n if (!updateDisplayIfNeeded(cm, update)) {\n break;\n }\n updateHeightsInViewport(cm);\n var barMeasure = measureForScrollbars(cm);\n updateSelection(cm);\n updateScrollbars(cm, barMeasure);\n setDocumentHeight(cm, barMeasure);\n update.force = false;\n }\n update.signal(cm, \"update\", cm);\n if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) {\n update.signal(cm, \"viewportChange\", cm, cm.display.viewFrom, cm.display.viewTo);\n cm.display.reportedViewFrom = cm.display.viewFrom;\n cm.display.reportedViewTo = cm.display.viewTo;\n }\n }\n function updateDisplaySimple(cm, viewport) {\n var update = new DisplayUpdate(cm, viewport);\n if (updateDisplayIfNeeded(cm, update)) {\n updateHeightsInViewport(cm);\n postUpdateDisplay(cm, update);\n var barMeasure = measureForScrollbars(cm);\n updateSelection(cm);\n updateScrollbars(cm, barMeasure);\n setDocumentHeight(cm, barMeasure);\n update.finish();\n }\n }\n\n // Sync the actual display DOM structure with display.view, removing\n // nodes for lines that are no longer in view, and creating the ones\n // that are not there yet, and updating the ones that are out of\n // date.\n function patchDisplay(cm, updateNumbersFrom, dims) {\n var display = cm.display,\n lineNumbers = cm.options.lineNumbers;\n var container = display.lineDiv,\n cur = container.firstChild;\n function rm(node) {\n var next = node.nextSibling;\n // Works around a throw-scroll bug in OS X Webkit\n if (webkit && mac && cm.display.currentWheelTarget == node) {\n node.style.display = \"none\";\n } else {\n node.parentNode.removeChild(node);\n }\n return next;\n }\n var view = display.view,\n lineN = display.viewFrom;\n // Loop over the elements in the view, syncing cur (the DOM nodes\n // in display.lineDiv) with the view as we go.\n for (var i = 0; i < view.length; i++) {\n var lineView = view[i];\n if (lineView.hidden) ;else if (!lineView.node || lineView.node.parentNode != container) {\n // Not drawn yet\n var node = buildLineElement(cm, lineView, lineN, dims);\n container.insertBefore(node, cur);\n } else {\n // Already drawn\n while (cur != lineView.node) {\n cur = rm(cur);\n }\n var updateNumber = lineNumbers && updateNumbersFrom != null && updateNumbersFrom <= lineN && lineView.lineNumber;\n if (lineView.changes) {\n if (indexOf(lineView.changes, \"gutter\") > -1) {\n updateNumber = false;\n }\n updateLineForChanges(cm, lineView, lineN, dims);\n }\n if (updateNumber) {\n removeChildren(lineView.lineNumber);\n lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN)));\n }\n cur = lineView.node.nextSibling;\n }\n lineN += lineView.size;\n }\n while (cur) {\n cur = rm(cur);\n }\n }\n function updateGutterSpace(display) {\n var width = display.gutters.offsetWidth;\n display.sizer.style.marginLeft = width + \"px\";\n }\n function setDocumentHeight(cm, measure) {\n cm.display.sizer.style.minHeight = measure.docHeight + \"px\";\n cm.display.heightForcer.style.top = measure.docHeight + \"px\";\n cm.display.gutters.style.height = measure.docHeight + cm.display.barHeight + scrollGap(cm) + \"px\";\n }\n\n // Re-align line numbers and gutter marks to compensate for\n // horizontal scrolling.\n function alignHorizontally(cm) {\n var display = cm.display,\n view = display.view;\n if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) {\n return;\n }\n var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft;\n var gutterW = display.gutters.offsetWidth,\n left = comp + \"px\";\n for (var i = 0; i < view.length; i++) {\n if (!view[i].hidden) {\n if (cm.options.fixedGutter) {\n if (view[i].gutter) {\n view[i].gutter.style.left = left;\n }\n if (view[i].gutterBackground) {\n view[i].gutterBackground.style.left = left;\n }\n }\n var align = view[i].alignable;\n if (align) {\n for (var j = 0; j < align.length; j++) {\n align[j].style.left = left;\n }\n }\n }\n }\n if (cm.options.fixedGutter) {\n display.gutters.style.left = comp + gutterW + \"px\";\n }\n }\n\n // Used to ensure that the line number gutter is still the right\n // size for the current document size. Returns true when an update\n // is needed.\n function maybeUpdateLineNumberWidth(cm) {\n if (!cm.options.lineNumbers) {\n return false;\n }\n var doc = cm.doc,\n last = lineNumberFor(cm.options, doc.first + doc.size - 1),\n display = cm.display;\n if (last.length != display.lineNumChars) {\n var test = display.measure.appendChild(elt(\"div\", [elt(\"div\", last)], \"CodeMirror-linenumber CodeMirror-gutter-elt\"));\n var innerW = test.firstChild.offsetWidth,\n padding = test.offsetWidth - innerW;\n display.lineGutter.style.width = \"\";\n display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1;\n display.lineNumWidth = display.lineNumInnerWidth + padding;\n display.lineNumChars = display.lineNumInnerWidth ? last.length : -1;\n display.lineGutter.style.width = display.lineNumWidth + \"px\";\n updateGutterSpace(cm.display);\n return true;\n }\n return false;\n }\n function getGutters(gutters, lineNumbers) {\n var result = [],\n sawLineNumbers = false;\n for (var i = 0; i < gutters.length; i++) {\n var name = gutters[i],\n style = null;\n if (typeof name != \"string\") {\n style = name.style;\n name = name.className;\n }\n if (name == \"CodeMirror-linenumbers\") {\n if (!lineNumbers) {\n continue;\n } else {\n sawLineNumbers = true;\n }\n }\n result.push({\n className: name,\n style: style\n });\n }\n if (lineNumbers && !sawLineNumbers) {\n result.push({\n className: \"CodeMirror-linenumbers\",\n style: null\n });\n }\n return result;\n }\n\n // Rebuild the gutter elements, ensure the margin to the left of the\n // code matches their width.\n function renderGutters(display) {\n var gutters = display.gutters,\n specs = display.gutterSpecs;\n removeChildren(gutters);\n display.lineGutter = null;\n for (var i = 0; i < specs.length; ++i) {\n var ref = specs[i];\n var className = ref.className;\n var style = ref.style;\n var gElt = gutters.appendChild(elt(\"div\", null, \"CodeMirror-gutter \" + className));\n if (style) {\n gElt.style.cssText = style;\n }\n if (className == \"CodeMirror-linenumbers\") {\n display.lineGutter = gElt;\n gElt.style.width = (display.lineNumWidth || 1) + \"px\";\n }\n }\n gutters.style.display = specs.length ? \"\" : \"none\";\n updateGutterSpace(display);\n }\n function updateGutters(cm) {\n renderGutters(cm.display);\n regChange(cm);\n alignHorizontally(cm);\n }\n\n // The display handles the DOM integration, both for input reading\n // and content drawing. It holds references to DOM nodes and\n // display-related state.\n\n function Display(place, doc, input, options) {\n var d = this;\n this.input = input;\n\n // Covers bottom-right square when both scrollbars are present.\n d.scrollbarFiller = elt(\"div\", null, \"CodeMirror-scrollbar-filler\");\n d.scrollbarFiller.setAttribute(\"cm-not-content\", \"true\");\n // Covers bottom of gutter when coverGutterNextToScrollbar is on\n // and h scrollbar is present.\n d.gutterFiller = elt(\"div\", null, \"CodeMirror-gutter-filler\");\n d.gutterFiller.setAttribute(\"cm-not-content\", \"true\");\n // Will contain the actual code, positioned to cover the viewport.\n d.lineDiv = eltP(\"div\", null, \"CodeMirror-code\");\n // Elements are added to these to represent selection and cursors.\n d.selectionDiv = elt(\"div\", null, null, \"position: relative; z-index: 1\");\n d.cursorDiv = elt(\"div\", null, \"CodeMirror-cursors\");\n // A visibility: hidden element used to find the size of things.\n d.measure = elt(\"div\", null, \"CodeMirror-measure\");\n // When lines outside of the viewport are measured, they are drawn in this.\n d.lineMeasure = elt(\"div\", null, \"CodeMirror-measure\");\n // Wraps everything that needs to exist inside the vertically-padded coordinate system\n d.lineSpace = eltP(\"div\", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv], null, \"position: relative; outline: none\");\n var lines = eltP(\"div\", [d.lineSpace], \"CodeMirror-lines\");\n // Moved around its parent to cover visible view.\n d.mover = elt(\"div\", [lines], null, \"position: relative\");\n // Set to the height of the document, allowing scrolling.\n d.sizer = elt(\"div\", [d.mover], \"CodeMirror-sizer\");\n d.sizerWidth = null;\n // Behavior of elts with overflow: auto and padding is\n // inconsistent across browsers. This is used to ensure the\n // scrollable area is big enough.\n d.heightForcer = elt(\"div\", null, null, \"position: absolute; height: \" + scrollerGap + \"px; width: 1px;\");\n // Will contain the gutters, if any.\n d.gutters = elt(\"div\", null, \"CodeMirror-gutters\");\n d.lineGutter = null;\n // Actual scrollable element.\n d.scroller = elt(\"div\", [d.sizer, d.heightForcer, d.gutters], \"CodeMirror-scroll\");\n d.scroller.setAttribute(\"tabIndex\", \"-1\");\n // The element in which the editor lives.\n d.wrapper = elt(\"div\", [d.scrollbarFiller, d.gutterFiller, d.scroller], \"CodeMirror\");\n\n // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported)\n if (ie && ie_version < 8) {\n d.gutters.style.zIndex = -1;\n d.scroller.style.paddingRight = 0;\n }\n if (!webkit && !(gecko && mobile)) {\n d.scroller.draggable = true;\n }\n if (place) {\n if (place.appendChild) {\n place.appendChild(d.wrapper);\n } else {\n place(d.wrapper);\n }\n }\n\n // Current rendered range (may be bigger than the view window).\n d.viewFrom = d.viewTo = doc.first;\n d.reportedViewFrom = d.reportedViewTo = doc.first;\n // Information about the rendered lines.\n d.view = [];\n d.renderedView = null;\n // Holds info about a single rendered line when it was rendered\n // for measurement, while not in view.\n d.externalMeasured = null;\n // Empty space (in pixels) above the view\n d.viewOffset = 0;\n d.lastWrapHeight = d.lastWrapWidth = 0;\n d.updateLineNumbers = null;\n d.nativeBarWidth = d.barHeight = d.barWidth = 0;\n d.scrollbarsClipped = false;\n\n // Used to only resize the line number gutter when necessary (when\n // the amount of lines crosses a boundary that makes its width change)\n d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null;\n // Set to true when a non-horizontal-scrolling line widget is\n // added. As an optimization, line widget aligning is skipped when\n // this is false.\n d.alignWidgets = false;\n d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;\n\n // Tracks the maximum line length so that the horizontal scrollbar\n // can be kept static when scrolling.\n d.maxLine = null;\n d.maxLineLength = 0;\n d.maxLineChanged = false;\n\n // Used for measuring wheel scrolling granularity\n d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null;\n\n // True when shift is held down.\n d.shift = false;\n\n // Used to track whether anything happened since the context menu\n // was opened.\n d.selForContextMenu = null;\n d.activeTouch = null;\n d.gutterSpecs = getGutters(options.gutters, options.lineNumbers);\n renderGutters(d);\n input.init(d);\n }\n\n // Since the delta values reported on mouse wheel events are\n // unstandardized between browsers and even browser versions, and\n // generally horribly unpredictable, this code starts by measuring\n // the scroll effect that the first few mouse wheel events have,\n // and, from that, detects the way it can convert deltas to pixel\n // offsets afterwards.\n //\n // The reason we want to know the amount a wheel event will scroll\n // is that it gives us a chance to update the display before the\n // actual scrolling happens, reducing flickering.\n\n var wheelSamples = 0,\n wheelPixelsPerUnit = null;\n // Fill in a browser-detected starting value on browsers where we\n // know one. These don't have to be accurate -- the result of them\n // being wrong would just be a slight flicker on the first wheel\n // scroll (if it is large enough).\n if (ie) {\n wheelPixelsPerUnit = -.53;\n } else if (gecko) {\n wheelPixelsPerUnit = 15;\n } else if (chrome) {\n wheelPixelsPerUnit = -.7;\n } else if (safari) {\n wheelPixelsPerUnit = -1 / 3;\n }\n function wheelEventDelta(e) {\n var dx = e.wheelDeltaX,\n dy = e.wheelDeltaY;\n if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) {\n dx = e.detail;\n }\n if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) {\n dy = e.detail;\n } else if (dy == null) {\n dy = e.wheelDelta;\n }\n return {\n x: dx,\n y: dy\n };\n }\n function wheelEventPixels(e) {\n var delta = wheelEventDelta(e);\n delta.x *= wheelPixelsPerUnit;\n delta.y *= wheelPixelsPerUnit;\n return delta;\n }\n function onScrollWheel(cm, e) {\n var delta = wheelEventDelta(e),\n dx = delta.x,\n dy = delta.y;\n var display = cm.display,\n scroll = display.scroller;\n // Quit if there's nothing to scroll here\n var canScrollX = scroll.scrollWidth > scroll.clientWidth;\n var canScrollY = scroll.scrollHeight > scroll.clientHeight;\n if (!(dx && canScrollX || dy && canScrollY)) {\n return;\n }\n\n // Webkit browsers on OS X abort momentum scrolls when the target\n // of the scroll event is removed from the scrollable element.\n // This hack (see related code in patchDisplay) makes sure the\n // element is kept around.\n if (dy && mac && webkit) {\n outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) {\n for (var i = 0; i < view.length; i++) {\n if (view[i].node == cur) {\n cm.display.currentWheelTarget = cur;\n break outer;\n }\n }\n }\n }\n\n // On some browsers, horizontal scrolling will cause redraws to\n // happen before the gutter has been realigned, causing it to\n // wriggle around in a most unseemly way. When we have an\n // estimated pixels/delta value, we just handle horizontal\n // scrolling entirely here. It'll be slightly off from native, but\n // better than glitching out.\n if (dx && !gecko && !presto && wheelPixelsPerUnit != null) {\n if (dy && canScrollY) {\n updateScrollTop(cm, Math.max(0, scroll.scrollTop + dy * wheelPixelsPerUnit));\n }\n setScrollLeft(cm, Math.max(0, scroll.scrollLeft + dx * wheelPixelsPerUnit));\n // Only prevent default scrolling if vertical scrolling is\n // actually possible. Otherwise, it causes vertical scroll\n // jitter on OSX trackpads when deltaX is small and deltaY\n // is large (issue #3579)\n if (!dy || dy && canScrollY) {\n e_preventDefault(e);\n }\n display.wheelStartX = null; // Abort measurement, if in progress\n return;\n }\n\n // 'Project' the visible viewport to cover the area that is being\n // scrolled into view (if we know enough to estimate it).\n if (dy && wheelPixelsPerUnit != null) {\n var pixels = dy * wheelPixelsPerUnit;\n var top = cm.doc.scrollTop,\n bot = top + display.wrapper.clientHeight;\n if (pixels < 0) {\n top = Math.max(0, top + pixels - 50);\n } else {\n bot = Math.min(cm.doc.height, bot + pixels + 50);\n }\n updateDisplaySimple(cm, {\n top: top,\n bottom: bot\n });\n }\n if (wheelSamples < 20) {\n if (display.wheelStartX == null) {\n display.wheelStartX = scroll.scrollLeft;\n display.wheelStartY = scroll.scrollTop;\n display.wheelDX = dx;\n display.wheelDY = dy;\n setTimeout(function () {\n if (display.wheelStartX == null) {\n return;\n }\n var movedX = scroll.scrollLeft - display.wheelStartX;\n var movedY = scroll.scrollTop - display.wheelStartY;\n var sample = movedY && display.wheelDY && movedY / display.wheelDY || movedX && display.wheelDX && movedX / display.wheelDX;\n display.wheelStartX = display.wheelStartY = null;\n if (!sample) {\n return;\n }\n wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1);\n ++wheelSamples;\n }, 200);\n } else {\n display.wheelDX += dx;\n display.wheelDY += dy;\n }\n }\n }\n\n // Selection objects are immutable. A new one is created every time\n // the selection changes. A selection is one or more non-overlapping\n // (and non-touching) ranges, sorted, and an integer that indicates\n // which one is the primary selection (the one that's scrolled into\n // view, that getCursor returns, etc).\n var Selection = function (ranges, primIndex) {\n this.ranges = ranges;\n this.primIndex = primIndex;\n };\n Selection.prototype.primary = function () {\n return this.ranges[this.primIndex];\n };\n Selection.prototype.equals = function (other) {\n if (other == this) {\n return true;\n }\n if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) {\n return false;\n }\n for (var i = 0; i < this.ranges.length; i++) {\n var here = this.ranges[i],\n there = other.ranges[i];\n if (!equalCursorPos(here.anchor, there.anchor) || !equalCursorPos(here.head, there.head)) {\n return false;\n }\n }\n return true;\n };\n Selection.prototype.deepCopy = function () {\n var out = [];\n for (var i = 0; i < this.ranges.length; i++) {\n out[i] = new Range(copyPos(this.ranges[i].anchor), copyPos(this.ranges[i].head));\n }\n return new Selection(out, this.primIndex);\n };\n Selection.prototype.somethingSelected = function () {\n for (var i = 0; i < this.ranges.length; i++) {\n if (!this.ranges[i].empty()) {\n return true;\n }\n }\n return false;\n };\n Selection.prototype.contains = function (pos, end) {\n if (!end) {\n end = pos;\n }\n for (var i = 0; i < this.ranges.length; i++) {\n var range = this.ranges[i];\n if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0) {\n return i;\n }\n }\n return -1;\n };\n var Range = function (anchor, head) {\n this.anchor = anchor;\n this.head = head;\n };\n Range.prototype.from = function () {\n return minPos(this.anchor, this.head);\n };\n Range.prototype.to = function () {\n return maxPos(this.anchor, this.head);\n };\n Range.prototype.empty = function () {\n return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch;\n };\n\n // Take an unsorted, potentially overlapping set of ranges, and\n // build a selection out of it. 'Consumes' ranges array (modifying\n // it).\n function normalizeSelection(cm, ranges, primIndex) {\n var mayTouch = cm && cm.options.selectionsMayTouch;\n var prim = ranges[primIndex];\n ranges.sort(function (a, b) {\n return cmp(a.from(), b.from());\n });\n primIndex = indexOf(ranges, prim);\n for (var i = 1; i < ranges.length; i++) {\n var cur = ranges[i],\n prev = ranges[i - 1];\n var diff = cmp(prev.to(), cur.from());\n if (mayTouch && !cur.empty() ? diff > 0 : diff >= 0) {\n var from = minPos(prev.from(), cur.from()),\n to = maxPos(prev.to(), cur.to());\n var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head;\n if (i <= primIndex) {\n --primIndex;\n }\n ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to));\n }\n }\n return new Selection(ranges, primIndex);\n }\n function simpleSelection(anchor, head) {\n return new Selection([new Range(anchor, head || anchor)], 0);\n }\n\n // Compute the position of the end of a change (its 'to' property\n // refers to the pre-change end).\n function changeEnd(change) {\n if (!change.text) {\n return change.to;\n }\n return Pos(change.from.line + change.text.length - 1, lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0));\n }\n\n // Adjust a position to refer to the post-change position of the\n // same text, or the end of the change if the change covers it.\n function adjustForChange(pos, change) {\n if (cmp(pos, change.from) < 0) {\n return pos;\n }\n if (cmp(pos, change.to) <= 0) {\n return changeEnd(change);\n }\n var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1,\n ch = pos.ch;\n if (pos.line == change.to.line) {\n ch += changeEnd(change).ch - change.to.ch;\n }\n return Pos(line, ch);\n }\n function computeSelAfterChange(doc, change) {\n var out = [];\n for (var i = 0; i < doc.sel.ranges.length; i++) {\n var range = doc.sel.ranges[i];\n out.push(new Range(adjustForChange(range.anchor, change), adjustForChange(range.head, change)));\n }\n return normalizeSelection(doc.cm, out, doc.sel.primIndex);\n }\n function offsetPos(pos, old, nw) {\n if (pos.line == old.line) {\n return Pos(nw.line, pos.ch - old.ch + nw.ch);\n } else {\n return Pos(nw.line + (pos.line - old.line), pos.ch);\n }\n }\n\n // Used by replaceSelections to allow moving the selection to the\n // start or around the replaced test. Hint may be \"start\" or \"around\".\n function computeReplacedSel(doc, changes, hint) {\n var out = [];\n var oldPrev = Pos(doc.first, 0),\n newPrev = oldPrev;\n for (var i = 0; i < changes.length; i++) {\n var change = changes[i];\n var from = offsetPos(change.from, oldPrev, newPrev);\n var to = offsetPos(changeEnd(change), oldPrev, newPrev);\n oldPrev = change.to;\n newPrev = to;\n if (hint == \"around\") {\n var range = doc.sel.ranges[i],\n inv = cmp(range.head, range.anchor) < 0;\n out[i] = new Range(inv ? to : from, inv ? from : to);\n } else {\n out[i] = new Range(from, from);\n }\n }\n return new Selection(out, doc.sel.primIndex);\n }\n\n // Used to get the editor into a consistent state again when options change.\n\n function loadMode(cm) {\n cm.doc.mode = getMode(cm.options, cm.doc.modeOption);\n resetModeState(cm);\n }\n function resetModeState(cm) {\n cm.doc.iter(function (line) {\n if (line.stateAfter) {\n line.stateAfter = null;\n }\n if (line.styles) {\n line.styles = null;\n }\n });\n cm.doc.modeFrontier = cm.doc.highlightFrontier = cm.doc.first;\n startWorker(cm, 100);\n cm.state.modeGen++;\n if (cm.curOp) {\n regChange(cm);\n }\n }\n\n // DOCUMENT DATA STRUCTURE\n\n // By default, updates that start and end at the beginning of a line\n // are treated specially, in order to make the association of line\n // widgets and marker elements with the text behave more intuitive.\n function isWholeLineUpdate(doc, change) {\n return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == \"\" && (!doc.cm || doc.cm.options.wholeLineUpdateBefore);\n }\n\n // Perform a change on the document data structure.\n function updateDoc(doc, change, markedSpans, estimateHeight) {\n function spansFor(n) {\n return markedSpans ? markedSpans[n] : null;\n }\n function update(line, text, spans) {\n updateLine(line, text, spans, estimateHeight);\n signalLater(line, \"change\", line, change);\n }\n function linesFor(start, end) {\n var result = [];\n for (var i = start; i < end; ++i) {\n result.push(new Line(text[i], spansFor(i), estimateHeight));\n }\n return result;\n }\n var from = change.from,\n to = change.to,\n text = change.text;\n var firstLine = getLine(doc, from.line),\n lastLine = getLine(doc, to.line);\n var lastText = lst(text),\n lastSpans = spansFor(text.length - 1),\n nlines = to.line - from.line;\n\n // Adjust the line structure\n if (change.full) {\n doc.insert(0, linesFor(0, text.length));\n doc.remove(text.length, doc.size - text.length);\n } else if (isWholeLineUpdate(doc, change)) {\n // This is a whole-line replace. Treated specially to make\n // sure line objects move the way they are supposed to.\n var added = linesFor(0, text.length - 1);\n update(lastLine, lastLine.text, lastSpans);\n if (nlines) {\n doc.remove(from.line, nlines);\n }\n if (added.length) {\n doc.insert(from.line, added);\n }\n } else if (firstLine == lastLine) {\n if (text.length == 1) {\n update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans);\n } else {\n var added$1 = linesFor(1, text.length - 1);\n added$1.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight));\n update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n doc.insert(from.line + 1, added$1);\n }\n } else if (text.length == 1) {\n update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0));\n doc.remove(from.line + 1, nlines);\n } else {\n update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans);\n var added$2 = linesFor(1, text.length - 1);\n if (nlines > 1) {\n doc.remove(from.line + 1, nlines - 1);\n }\n doc.insert(from.line + 1, added$2);\n }\n signalLater(doc, \"change\", doc, change);\n }\n\n // Call f for all linked documents.\n function linkedDocs(doc, f, sharedHistOnly) {\n function propagate(doc, skip, sharedHist) {\n if (doc.linked) {\n for (var i = 0; i < doc.linked.length; ++i) {\n var rel = doc.linked[i];\n if (rel.doc == skip) {\n continue;\n }\n var shared = sharedHist && rel.sharedHist;\n if (sharedHistOnly && !shared) {\n continue;\n }\n f(rel.doc, shared);\n propagate(rel.doc, doc, shared);\n }\n }\n }\n propagate(doc, null, true);\n }\n\n // Attach a document to an editor.\n function attachDoc(cm, doc) {\n if (doc.cm) {\n throw new Error(\"This document is already in use.\");\n }\n cm.doc = doc;\n doc.cm = cm;\n estimateLineHeights(cm);\n loadMode(cm);\n setDirectionClass(cm);\n if (!cm.options.lineWrapping) {\n findMaxLine(cm);\n }\n cm.options.mode = doc.modeOption;\n regChange(cm);\n }\n function setDirectionClass(cm) {\n (cm.doc.direction == \"rtl\" ? addClass : rmClass)(cm.display.lineDiv, \"CodeMirror-rtl\");\n }\n function directionChanged(cm) {\n runInOp(cm, function () {\n setDirectionClass(cm);\n regChange(cm);\n });\n }\n function History(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;\n // Used to track when changes can be merged into a single undo\n // event\n this.lastModTime = this.lastSelTime = 0;\n this.lastOp = this.lastSelOp = null;\n this.lastOrigin = this.lastSelOrigin = null;\n // Used by the isClean() method\n this.generation = this.maxGeneration = startGen || 1;\n }\n\n // Create a history change event from an updateDoc-style change\n // object.\n function historyChangeFromChange(doc, change) {\n var histChange = {\n from: copyPos(change.from),\n to: changeEnd(change),\n text: getBetween(doc, change.from, change.to)\n };\n attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);\n linkedDocs(doc, function (doc) {\n return attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);\n }, true);\n return histChange;\n }\n\n // Pop all selection events off the end of a history array. Stop at\n // a change event.\n function clearSelectionEvents(array) {\n while (array.length) {\n var last = lst(array);\n if (last.ranges) {\n array.pop();\n } else {\n break;\n }\n }\n }\n\n // Find the top change event in the history. Pop off selection\n // events that are in the way.\n function lastChangeEvent(hist, force) {\n if (force) {\n clearSelectionEvents(hist.done);\n return lst(hist.done);\n } else if (hist.done.length && !lst(hist.done).ranges) {\n return lst(hist.done);\n } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) {\n hist.done.pop();\n return lst(hist.done);\n }\n }\n\n // Register a change in the history. Merges changes that are within\n // a single operation, or are close together with an origin that\n // allows merging (starting with \"+\") into a single event.\n function addChangeToHistory(doc, change, selAfter, opId) {\n var hist = doc.history;\n hist.undone.length = 0;\n var time = +new Date(),\n cur;\n var last;\n if ((hist.lastOp == opId || hist.lastOrigin == change.origin && change.origin && (change.origin.charAt(0) == \"+\" && hist.lastModTime > time - (doc.cm ? doc.cm.options.historyEventDelay : 500) || change.origin.charAt(0) == \"*\")) && (cur = lastChangeEvent(hist, hist.lastOp == opId))) {\n // Merge this change into the last event\n last = lst(cur.changes);\n if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) {\n // Optimized case for simple insertion -- don't want to add\n // new changesets for every character typed\n last.to = changeEnd(change);\n } else {\n // Add new sub-event\n cur.changes.push(historyChangeFromChange(doc, change));\n }\n } else {\n // Can not be merged, start a new event.\n var before = lst(hist.done);\n if (!before || !before.ranges) {\n pushSelectionToHistory(doc.sel, hist.done);\n }\n cur = {\n changes: [historyChangeFromChange(doc, change)],\n generation: hist.generation\n };\n hist.done.push(cur);\n while (hist.done.length > hist.undoDepth) {\n hist.done.shift();\n if (!hist.done[0].ranges) {\n hist.done.shift();\n }\n }\n }\n hist.done.push(selAfter);\n hist.generation = ++hist.maxGeneration;\n hist.lastModTime = hist.lastSelTime = time;\n hist.lastOp = hist.lastSelOp = opId;\n hist.lastOrigin = hist.lastSelOrigin = change.origin;\n if (!last) {\n signal(doc, \"historyAdded\");\n }\n }\n function selectionEventCanBeMerged(doc, origin, prev, sel) {\n var ch = origin.charAt(0);\n return ch == \"*\" || ch == \"+\" && prev.ranges.length == sel.ranges.length && prev.somethingSelected() == sel.somethingSelected() && new Date() - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500);\n }\n\n // Called whenever the selection changes, sets the new selection as\n // the pending selection in the history, and pushes the old pending\n // selection into the 'done' array when it was significantly\n // different (in number of selected ranges, emptiness, or time).\n function addSelectionToHistory(doc, sel, opId, options) {\n var hist = doc.history,\n origin = options && options.origin;\n\n // A new event is started when the previous origin does not match\n // the current, or the origins don't allow matching. Origins\n // starting with * are always merged, those starting with + are\n // merged when similar and close together in time.\n if (opId == hist.lastSelOp || origin && hist.lastSelOrigin == origin && (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin || selectionEventCanBeMerged(doc, origin, lst(hist.done), sel))) {\n hist.done[hist.done.length - 1] = sel;\n } else {\n pushSelectionToHistory(sel, hist.done);\n }\n hist.lastSelTime = +new Date();\n hist.lastSelOrigin = origin;\n hist.lastSelOp = opId;\n if (options && options.clearRedo !== false) {\n clearSelectionEvents(hist.undone);\n }\n }\n function pushSelectionToHistory(sel, dest) {\n var top = lst(dest);\n if (!(top && top.ranges && top.equals(sel))) {\n dest.push(sel);\n }\n }\n\n // Used to store marked span information in the history.\n function attachLocalSpans(doc, change, from, to) {\n var existing = change[\"spans_\" + doc.id],\n n = 0;\n doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function (line) {\n if (line.markedSpans) {\n (existing || (existing = change[\"spans_\" + doc.id] = {}))[n] = line.markedSpans;\n }\n ++n;\n });\n }\n\n // When un/re-doing restores text containing marked spans, those\n // that have been explicitly cleared should not be restored.\n function removeClearedSpans(spans) {\n if (!spans) {\n return null;\n }\n var out;\n for (var i = 0; i < spans.length; ++i) {\n if (spans[i].marker.explicitlyCleared) {\n if (!out) {\n out = spans.slice(0, i);\n }\n } else if (out) {\n out.push(spans[i]);\n }\n }\n return !out ? spans : out.length ? out : null;\n }\n\n // Retrieve and filter the old marked spans stored in a change event.\n function getOldSpans(doc, change) {\n var found = change[\"spans_\" + doc.id];\n if (!found) {\n return null;\n }\n var nw = [];\n for (var i = 0; i < change.text.length; ++i) {\n nw.push(removeClearedSpans(found[i]));\n }\n return nw;\n }\n\n // Used for un/re-doing changes from the history. Combines the\n // result of computing the existing spans with the set of spans that\n // existed in the history (so that deleting around a span and then\n // undoing brings back the span).\n function mergeOldSpans(doc, change) {\n var old = getOldSpans(doc, change);\n var stretched = stretchSpansOverChange(doc, change);\n if (!old) {\n return stretched;\n }\n if (!stretched) {\n return old;\n }\n for (var i = 0; i < old.length; ++i) {\n var oldCur = old[i],\n stretchCur = stretched[i];\n if (oldCur && stretchCur) {\n spans: for (var j = 0; j < stretchCur.length; ++j) {\n var span = stretchCur[j];\n for (var k = 0; k < oldCur.length; ++k) {\n if (oldCur[k].marker == span.marker) {\n continue spans;\n }\n }\n oldCur.push(span);\n }\n } else if (stretchCur) {\n old[i] = stretchCur;\n }\n }\n return old;\n }\n\n // Used both to provide a JSON-safe object in .getHistory, and, when\n // detaching a document, to split the history in two\n function copyHistoryArray(events, newGroup, instantiateSel) {\n var copy = [];\n for (var i = 0; i < events.length; ++i) {\n var event = events[i];\n if (event.ranges) {\n copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event);\n continue;\n }\n var changes = event.changes,\n newChanges = [];\n copy.push({\n changes: newChanges\n });\n for (var j = 0; j < changes.length; ++j) {\n var change = changes[j],\n m = void 0;\n newChanges.push({\n from: change.from,\n to: change.to,\n text: change.text\n });\n if (newGroup) {\n for (var prop in change) {\n if (m = prop.match(/^spans_(\\d+)$/)) {\n if (indexOf(newGroup, Number(m[1])) > -1) {\n lst(newChanges)[prop] = change[prop];\n delete change[prop];\n }\n }\n }\n }\n }\n }\n return copy;\n }\n\n // The 'scroll' parameter given to many of these indicated whether\n // the new cursor position should be scrolled into view after\n // modifying the selection.\n\n // If shift is held or the extend flag is set, extends a range to\n // include a given position (and optionally a second position).\n // Otherwise, simply returns the range between the given positions.\n // Used for cursor motion and such.\n function extendRange(range, head, other, extend) {\n if (extend) {\n var anchor = range.anchor;\n if (other) {\n var posBefore = cmp(head, anchor) < 0;\n if (posBefore != cmp(other, anchor) < 0) {\n anchor = head;\n head = other;\n } else if (posBefore != cmp(head, other) < 0) {\n head = other;\n }\n }\n return new Range(anchor, head);\n } else {\n return new Range(other || head, head);\n }\n }\n\n // Extend the primary selection range, discard the rest.\n function extendSelection(doc, head, other, options, extend) {\n if (extend == null) {\n extend = doc.cm && (doc.cm.display.shift || doc.extend);\n }\n setSelection(doc, new Selection([extendRange(doc.sel.primary(), head, other, extend)], 0), options);\n }\n\n // Extend all selections (pos is an array of selections with length\n // equal the number of selections)\n function extendSelections(doc, heads, options) {\n var out = [];\n var extend = doc.cm && (doc.cm.display.shift || doc.extend);\n for (var i = 0; i < doc.sel.ranges.length; i++) {\n out[i] = extendRange(doc.sel.ranges[i], heads[i], null, extend);\n }\n var newSel = normalizeSelection(doc.cm, out, doc.sel.primIndex);\n setSelection(doc, newSel, options);\n }\n\n // Updates a single range in the selection.\n function replaceOneSelection(doc, i, range, options) {\n var ranges = doc.sel.ranges.slice(0);\n ranges[i] = range;\n setSelection(doc, normalizeSelection(doc.cm, ranges, doc.sel.primIndex), options);\n }\n\n // Reset the selection to a single range.\n function setSimpleSelection(doc, anchor, head, options) {\n setSelection(doc, simpleSelection(anchor, head), options);\n }\n\n // Give beforeSelectionChange handlers a change to influence a\n // selection update.\n function filterSelectionChange(doc, sel, options) {\n var obj = {\n ranges: sel.ranges,\n update: function (ranges) {\n this.ranges = [];\n for (var i = 0; i < ranges.length; i++) {\n this.ranges[i] = new Range(clipPos(doc, ranges[i].anchor), clipPos(doc, ranges[i].head));\n }\n },\n origin: options && options.origin\n };\n signal(doc, \"beforeSelectionChange\", doc, obj);\n if (doc.cm) {\n signal(doc.cm, \"beforeSelectionChange\", doc.cm, obj);\n }\n if (obj.ranges != sel.ranges) {\n return normalizeSelection(doc.cm, obj.ranges, obj.ranges.length - 1);\n } else {\n return sel;\n }\n }\n function setSelectionReplaceHistory(doc, sel, options) {\n var done = doc.history.done,\n last = lst(done);\n if (last && last.ranges) {\n done[done.length - 1] = sel;\n setSelectionNoUndo(doc, sel, options);\n } else {\n setSelection(doc, sel, options);\n }\n }\n\n // Set a new selection.\n function setSelection(doc, sel, options) {\n setSelectionNoUndo(doc, sel, options);\n addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options);\n }\n function setSelectionNoUndo(doc, sel, options) {\n if (hasHandler(doc, \"beforeSelectionChange\") || doc.cm && hasHandler(doc.cm, \"beforeSelectionChange\")) {\n sel = filterSelectionChange(doc, sel, options);\n }\n var bias = options && options.bias || (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1);\n setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true));\n if (!(options && options.scroll === false) && doc.cm) {\n ensureCursorVisible(doc.cm);\n }\n }\n function setSelectionInner(doc, sel) {\n if (sel.equals(doc.sel)) {\n return;\n }\n doc.sel = sel;\n if (doc.cm) {\n doc.cm.curOp.updateInput = 1;\n doc.cm.curOp.selectionChanged = true;\n signalCursorActivity(doc.cm);\n }\n signalLater(doc, \"cursorActivity\", doc);\n }\n\n // Verify that the selection does not partially select any atomic\n // marked ranges.\n function reCheckSelection(doc) {\n setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false));\n }\n\n // Return a selection that does not partially select any atomic\n // ranges.\n function skipAtomicInSelection(doc, sel, bias, mayClear) {\n var out;\n for (var i = 0; i < sel.ranges.length; i++) {\n var range = sel.ranges[i];\n var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i];\n var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear);\n var newHead = skipAtomic(doc, range.head, old && old.head, bias, mayClear);\n if (out || newAnchor != range.anchor || newHead != range.head) {\n if (!out) {\n out = sel.ranges.slice(0, i);\n }\n out[i] = new Range(newAnchor, newHead);\n }\n }\n return out ? normalizeSelection(doc.cm, out, sel.primIndex) : sel;\n }\n function skipAtomicInner(doc, pos, oldPos, dir, mayClear) {\n var line = getLine(doc, pos.line);\n if (line.markedSpans) {\n for (var i = 0; i < line.markedSpans.length; ++i) {\n var sp = line.markedSpans[i],\n m = sp.marker;\n\n // Determine if we should prevent the cursor being placed to the left/right of an atomic marker\n // Historically this was determined using the inclusiveLeft/Right option, but the new way to control it\n // is with selectLeft/Right\n var preventCursorLeft = \"selectLeft\" in m ? !m.selectLeft : m.inclusiveLeft;\n var preventCursorRight = \"selectRight\" in m ? !m.selectRight : m.inclusiveRight;\n if ((sp.from == null || (preventCursorLeft ? sp.from <= pos.ch : sp.from < pos.ch)) && (sp.to == null || (preventCursorRight ? sp.to >= pos.ch : sp.to > pos.ch))) {\n if (mayClear) {\n signal(m, \"beforeCursorEnter\");\n if (m.explicitlyCleared) {\n if (!line.markedSpans) {\n break;\n } else {\n --i;\n continue;\n }\n }\n }\n if (!m.atomic) {\n continue;\n }\n if (oldPos) {\n var near = m.find(dir < 0 ? 1 : -1),\n diff = void 0;\n if (dir < 0 ? preventCursorRight : preventCursorLeft) {\n near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null);\n }\n if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0)) {\n return skipAtomicInner(doc, near, pos, dir, mayClear);\n }\n }\n var far = m.find(dir < 0 ? -1 : 1);\n if (dir < 0 ? preventCursorLeft : preventCursorRight) {\n far = movePos(doc, far, dir, far.line == pos.line ? line : null);\n }\n return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null;\n }\n }\n }\n return pos;\n }\n\n // Ensure a given position is not inside an atomic range.\n function skipAtomic(doc, pos, oldPos, bias, mayClear) {\n var dir = bias || 1;\n var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) || !mayClear && skipAtomicInner(doc, pos, oldPos, dir, true) || skipAtomicInner(doc, pos, oldPos, -dir, mayClear) || !mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true);\n if (!found) {\n doc.cantEdit = true;\n return Pos(doc.first, 0);\n }\n return found;\n }\n function movePos(doc, pos, dir, line) {\n if (dir < 0 && pos.ch == 0) {\n if (pos.line > doc.first) {\n return clipPos(doc, Pos(pos.line - 1));\n } else {\n return null;\n }\n } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) {\n if (pos.line < doc.first + doc.size - 1) {\n return Pos(pos.line + 1, 0);\n } else {\n return null;\n }\n } else {\n return new Pos(pos.line, pos.ch + dir);\n }\n }\n function selectAll(cm) {\n cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll);\n }\n\n // UPDATING\n\n // Allow \"beforeChange\" event handlers to influence a change\n function filterChange(doc, change, update) {\n var obj = {\n canceled: false,\n from: change.from,\n to: change.to,\n text: change.text,\n origin: change.origin,\n cancel: function () {\n return obj.canceled = true;\n }\n };\n if (update) {\n obj.update = function (from, to, text, origin) {\n if (from) {\n obj.from = clipPos(doc, from);\n }\n if (to) {\n obj.to = clipPos(doc, to);\n }\n if (text) {\n obj.text = text;\n }\n if (origin !== undefined) {\n obj.origin = origin;\n }\n };\n }\n signal(doc, \"beforeChange\", doc, obj);\n if (doc.cm) {\n signal(doc.cm, \"beforeChange\", doc.cm, obj);\n }\n if (obj.canceled) {\n if (doc.cm) {\n doc.cm.curOp.updateInput = 2;\n }\n return null;\n }\n return {\n from: obj.from,\n to: obj.to,\n text: obj.text,\n origin: obj.origin\n };\n }\n\n // Apply a change to a document, and add it to the document's\n // history, and propagating it to all linked documents.\n function makeChange(doc, change, ignoreReadOnly) {\n if (doc.cm) {\n if (!doc.cm.curOp) {\n return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly);\n }\n if (doc.cm.state.suppressEdits) {\n return;\n }\n }\n if (hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\")) {\n change = filterChange(doc, change, true);\n if (!change) {\n return;\n }\n }\n\n // Possibly split or suppress the update based on the presence\n // of read-only spans in its range.\n var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to);\n if (split) {\n for (var i = split.length - 1; i >= 0; --i) {\n makeChangeInner(doc, {\n from: split[i].from,\n to: split[i].to,\n text: i ? [\"\"] : change.text,\n origin: change.origin\n });\n }\n } else {\n makeChangeInner(doc, change);\n }\n }\n function makeChangeInner(doc, change) {\n if (change.text.length == 1 && change.text[0] == \"\" && cmp(change.from, change.to) == 0) {\n return;\n }\n var selAfter = computeSelAfterChange(doc, change);\n addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN);\n makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change));\n var rebased = [];\n linkedDocs(doc, function (doc, sharedHist) {\n if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n rebaseHist(doc.history, change);\n rebased.push(doc.history);\n }\n makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change));\n });\n }\n\n // Revert a change stored in a document's history.\n function makeChangeFromHistory(doc, type, allowSelectionOnly) {\n var suppress = doc.cm && doc.cm.state.suppressEdits;\n if (suppress && !allowSelectionOnly) {\n return;\n }\n var hist = doc.history,\n event,\n selAfter = doc.sel;\n var source = type == \"undo\" ? hist.done : hist.undone,\n dest = type == \"undo\" ? hist.undone : hist.done;\n\n // Verify that there is a useable event (so that ctrl-z won't\n // needlessly clear selection events)\n var i = 0;\n for (; i < source.length; i++) {\n event = source[i];\n if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges) {\n break;\n }\n }\n if (i == source.length) {\n return;\n }\n hist.lastOrigin = hist.lastSelOrigin = null;\n for (;;) {\n event = source.pop();\n if (event.ranges) {\n pushSelectionToHistory(event, dest);\n if (allowSelectionOnly && !event.equals(doc.sel)) {\n setSelection(doc, event, {\n clearRedo: false\n });\n return;\n }\n selAfter = event;\n } else if (suppress) {\n source.push(event);\n return;\n } else {\n break;\n }\n }\n\n // Build up a reverse change object to add to the opposite history\n // stack (redo when undoing, and vice versa).\n var antiChanges = [];\n pushSelectionToHistory(selAfter, dest);\n dest.push({\n changes: antiChanges,\n generation: hist.generation\n });\n hist.generation = event.generation || ++hist.maxGeneration;\n var filter = hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\");\n var loop = function (i) {\n var change = event.changes[i];\n change.origin = type;\n if (filter && !filterChange(doc, change, false)) {\n source.length = 0;\n return {};\n }\n antiChanges.push(historyChangeFromChange(doc, change));\n var after = i ? computeSelAfterChange(doc, change) : lst(source);\n makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change));\n if (!i && doc.cm) {\n doc.cm.scrollIntoView({\n from: change.from,\n to: changeEnd(change)\n });\n }\n var rebased = [];\n\n // Propagate to the linked documents\n linkedDocs(doc, function (doc, sharedHist) {\n if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n rebaseHist(doc.history, change);\n rebased.push(doc.history);\n }\n makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change));\n });\n };\n for (var i$1 = event.changes.length - 1; i$1 >= 0; --i$1) {\n var returned = loop(i$1);\n if (returned) return returned.v;\n }\n }\n\n // Sub-views need their line numbers shifted when text is added\n // above or below them in the parent document.\n function shiftDoc(doc, distance) {\n if (distance == 0) {\n return;\n }\n doc.first += distance;\n doc.sel = new Selection(map(doc.sel.ranges, function (range) {\n return new Range(Pos(range.anchor.line + distance, range.anchor.ch), Pos(range.head.line + distance, range.head.ch));\n }), doc.sel.primIndex);\n if (doc.cm) {\n regChange(doc.cm, doc.first, doc.first - distance, distance);\n for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++) {\n regLineChange(doc.cm, l, \"gutter\");\n }\n }\n }\n\n // More lower-level change function, handling only a single document\n // (not linked ones).\n function makeChangeSingleDoc(doc, change, selAfter, spans) {\n if (doc.cm && !doc.cm.curOp) {\n return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans);\n }\n if (change.to.line < doc.first) {\n shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line));\n return;\n }\n if (change.from.line > doc.lastLine()) {\n return;\n }\n\n // Clip the change to the size of this doc\n if (change.from.line < doc.first) {\n var shift = change.text.length - 1 - (doc.first - change.from.line);\n shiftDoc(doc, shift);\n change = {\n from: Pos(doc.first, 0),\n to: Pos(change.to.line + shift, change.to.ch),\n text: [lst(change.text)],\n origin: change.origin\n };\n }\n var last = doc.lastLine();\n if (change.to.line > last) {\n change = {\n from: change.from,\n to: Pos(last, getLine(doc, last).text.length),\n text: [change.text[0]],\n origin: change.origin\n };\n }\n change.removed = getBetween(doc, change.from, change.to);\n if (!selAfter) {\n selAfter = computeSelAfterChange(doc, change);\n }\n if (doc.cm) {\n makeChangeSingleDocInEditor(doc.cm, change, spans);\n } else {\n updateDoc(doc, change, spans);\n }\n setSelectionNoUndo(doc, selAfter, sel_dontScroll);\n if (doc.cantEdit && skipAtomic(doc, Pos(doc.firstLine(), 0))) {\n doc.cantEdit = false;\n }\n }\n\n // Handle the interaction of a change to a document with the editor\n // that this document is part of.\n function makeChangeSingleDocInEditor(cm, change, spans) {\n var doc = cm.doc,\n display = cm.display,\n from = change.from,\n to = change.to;\n var recomputeMaxLength = false,\n checkWidthStart = from.line;\n if (!cm.options.lineWrapping) {\n checkWidthStart = lineNo(visualLine(getLine(doc, from.line)));\n doc.iter(checkWidthStart, to.line + 1, function (line) {\n if (line == display.maxLine) {\n recomputeMaxLength = true;\n return true;\n }\n });\n }\n if (doc.sel.contains(change.from, change.to) > -1) {\n signalCursorActivity(cm);\n }\n updateDoc(doc, change, spans, estimateHeight(cm));\n if (!cm.options.lineWrapping) {\n doc.iter(checkWidthStart, from.line + change.text.length, function (line) {\n var len = lineLength(line);\n if (len > display.maxLineLength) {\n display.maxLine = line;\n display.maxLineLength = len;\n display.maxLineChanged = true;\n recomputeMaxLength = false;\n }\n });\n if (recomputeMaxLength) {\n cm.curOp.updateMaxLine = true;\n }\n }\n retreatFrontier(doc, from.line);\n startWorker(cm, 400);\n var lendiff = change.text.length - (to.line - from.line) - 1;\n // Remember that these lines changed, for updating the display\n if (change.full) {\n regChange(cm);\n } else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change)) {\n regLineChange(cm, from.line, \"text\");\n } else {\n regChange(cm, from.line, to.line + 1, lendiff);\n }\n var changesHandler = hasHandler(cm, \"changes\"),\n changeHandler = hasHandler(cm, \"change\");\n if (changeHandler || changesHandler) {\n var obj = {\n from: from,\n to: to,\n text: change.text,\n removed: change.removed,\n origin: change.origin\n };\n if (changeHandler) {\n signalLater(cm, \"change\", cm, obj);\n }\n if (changesHandler) {\n (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj);\n }\n }\n cm.display.selForContextMenu = null;\n }\n function replaceRange(doc, code, from, to, origin) {\n var assign;\n if (!to) {\n to = from;\n }\n if (cmp(to, from) < 0) {\n assign = [to, from], from = assign[0], to = assign[1];\n }\n if (typeof code == \"string\") {\n code = doc.splitLines(code);\n }\n makeChange(doc, {\n from: from,\n to: to,\n text: code,\n origin: origin\n });\n }\n\n // Rebasing/resetting history to deal with externally-sourced changes\n\n function rebaseHistSelSingle(pos, from, to, diff) {\n if (to < pos.line) {\n pos.line += diff;\n } else if (from < pos.line) {\n pos.line = from;\n pos.ch = 0;\n }\n }\n\n // Tries to rebase an array of history events given a change in the\n // document. If the change touches the same lines as the event, the\n // event, and everything 'behind' it, is discarded. If the change is\n // before the event, the event's positions are updated. Uses a\n // copy-on-write scheme for the positions, to avoid having to\n // reallocate them all on every rebase, but also avoid problems with\n // shared position objects being unsafely updated.\n function rebaseHistArray(array, from, to, diff) {\n for (var i = 0; i < array.length; ++i) {\n var sub = array[i],\n ok = true;\n if (sub.ranges) {\n if (!sub.copied) {\n sub = array[i] = sub.deepCopy();\n sub.copied = true;\n }\n for (var j = 0; j < sub.ranges.length; j++) {\n rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff);\n rebaseHistSelSingle(sub.ranges[j].head, from, to, diff);\n }\n continue;\n }\n for (var j$1 = 0; j$1 < sub.changes.length; ++j$1) {\n var cur = sub.changes[j$1];\n if (to < cur.from.line) {\n cur.from = Pos(cur.from.line + diff, cur.from.ch);\n cur.to = Pos(cur.to.line + diff, cur.to.ch);\n } else if (from <= cur.to.line) {\n ok = false;\n break;\n }\n }\n if (!ok) {\n array.splice(0, i + 1);\n i = 0;\n }\n }\n }\n function rebaseHist(hist, change) {\n var from = change.from.line,\n to = change.to.line,\n diff = change.text.length - (to - from) - 1;\n rebaseHistArray(hist.done, from, to, diff);\n rebaseHistArray(hist.undone, from, to, diff);\n }\n\n // Utility for applying a change to a line by handle or number,\n // returning the number and optionally registering the line as\n // changed.\n function changeLine(doc, handle, changeType, op) {\n var no = handle,\n line = handle;\n if (typeof handle == \"number\") {\n line = getLine(doc, clipLine(doc, handle));\n } else {\n no = lineNo(handle);\n }\n if (no == null) {\n return null;\n }\n if (op(line, no) && doc.cm) {\n regLineChange(doc.cm, no, changeType);\n }\n return line;\n }\n\n // The document is represented as a BTree consisting of leaves, with\n // chunk of lines in them, and branches, with up to ten leaves or\n // other branch nodes below them. The top node is always a branch\n // node, and is the document object itself (meaning it has\n // additional methods and properties).\n //\n // All nodes have parent links. The tree is used both to go from\n // line numbers to line objects, and to go from objects to numbers.\n // It also indexes by height, and is used to convert between height\n // and line object, and to find the total height of the document.\n //\n // See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html\n\n function LeafChunk(lines) {\n this.lines = lines;\n this.parent = null;\n var height = 0;\n for (var i = 0; i < lines.length; ++i) {\n lines[i].parent = this;\n height += lines[i].height;\n }\n this.height = height;\n }\n LeafChunk.prototype = {\n chunkSize: function () {\n return this.lines.length;\n },\n // Remove the n lines at offset 'at'.\n removeInner: function (at, n) {\n for (var i = at, e = at + n; i < e; ++i) {\n var line = this.lines[i];\n this.height -= line.height;\n cleanUpLine(line);\n signalLater(line, \"delete\");\n }\n this.lines.splice(at, n);\n },\n // Helper used to collapse a small branch into a single leaf.\n collapse: function (lines) {\n lines.push.apply(lines, this.lines);\n },\n // Insert the given array of lines at offset 'at', count them as\n // having the given height.\n insertInner: function (at, lines, height) {\n this.height += height;\n this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at));\n for (var i = 0; i < lines.length; ++i) {\n lines[i].parent = this;\n }\n },\n // Used to iterate over a part of the tree.\n iterN: function (at, n, op) {\n for (var e = at + n; at < e; ++at) {\n if (op(this.lines[at])) {\n return true;\n }\n }\n }\n };\n function BranchChunk(children) {\n this.children = children;\n var size = 0,\n height = 0;\n for (var i = 0; i < children.length; ++i) {\n var ch = children[i];\n size += ch.chunkSize();\n height += ch.height;\n ch.parent = this;\n }\n this.size = size;\n this.height = height;\n this.parent = null;\n }\n BranchChunk.prototype = {\n chunkSize: function () {\n return this.size;\n },\n removeInner: function (at, n) {\n this.size -= n;\n for (var i = 0; i < this.children.length; ++i) {\n var child = this.children[i],\n sz = child.chunkSize();\n if (at < sz) {\n var rm = Math.min(n, sz - at),\n oldHeight = child.height;\n child.removeInner(at, rm);\n this.height -= oldHeight - child.height;\n if (sz == rm) {\n this.children.splice(i--, 1);\n child.parent = null;\n }\n if ((n -= rm) == 0) {\n break;\n }\n at = 0;\n } else {\n at -= sz;\n }\n }\n // If the result is smaller than 25 lines, ensure that it is a\n // single leaf node.\n if (this.size - n < 25 && (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) {\n var lines = [];\n this.collapse(lines);\n this.children = [new LeafChunk(lines)];\n this.children[0].parent = this;\n }\n },\n collapse: function (lines) {\n for (var i = 0; i < this.children.length; ++i) {\n this.children[i].collapse(lines);\n }\n },\n insertInner: function (at, lines, height) {\n this.size += lines.length;\n this.height += height;\n for (var i = 0; i < this.children.length; ++i) {\n var child = this.children[i],\n sz = child.chunkSize();\n if (at <= sz) {\n child.insertInner(at, lines, height);\n if (child.lines && child.lines.length > 50) {\n // To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced.\n // Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest.\n var remaining = child.lines.length % 25 + 25;\n for (var pos = remaining; pos < child.lines.length;) {\n var leaf = new LeafChunk(child.lines.slice(pos, pos += 25));\n child.height -= leaf.height;\n this.children.splice(++i, 0, leaf);\n leaf.parent = this;\n }\n child.lines = child.lines.slice(0, remaining);\n this.maybeSpill();\n }\n break;\n }\n at -= sz;\n }\n },\n // When a node has grown, check whether it should be split.\n maybeSpill: function () {\n if (this.children.length <= 10) {\n return;\n }\n var me = this;\n do {\n var spilled = me.children.splice(me.children.length - 5, 5);\n var sibling = new BranchChunk(spilled);\n if (!me.parent) {\n // Become the parent node\n var copy = new BranchChunk(me.children);\n copy.parent = me;\n me.children = [copy, sibling];\n me = copy;\n } else {\n me.size -= sibling.size;\n me.height -= sibling.height;\n var myIndex = indexOf(me.parent.children, me);\n me.parent.children.splice(myIndex + 1, 0, sibling);\n }\n sibling.parent = me.parent;\n } while (me.children.length > 10);\n me.parent.maybeSpill();\n },\n iterN: function (at, n, op) {\n for (var i = 0; i < this.children.length; ++i) {\n var child = this.children[i],\n sz = child.chunkSize();\n if (at < sz) {\n var used = Math.min(n, sz - at);\n if (child.iterN(at, used, op)) {\n return true;\n }\n if ((n -= used) == 0) {\n break;\n }\n at = 0;\n } else {\n at -= sz;\n }\n }\n }\n };\n\n // Line widgets are block elements displayed above or below a line.\n\n var LineWidget = function (doc, node, options) {\n if (options) {\n for (var opt in options) {\n if (options.hasOwnProperty(opt)) {\n this[opt] = options[opt];\n }\n }\n }\n this.doc = doc;\n this.node = node;\n };\n LineWidget.prototype.clear = function () {\n var cm = this.doc.cm,\n ws = this.line.widgets,\n line = this.line,\n no = lineNo(line);\n if (no == null || !ws) {\n return;\n }\n for (var i = 0; i < ws.length; ++i) {\n if (ws[i] == this) {\n ws.splice(i--, 1);\n }\n }\n if (!ws.length) {\n line.widgets = null;\n }\n var height = widgetHeight(this);\n updateLineHeight(line, Math.max(0, line.height - height));\n if (cm) {\n runInOp(cm, function () {\n adjustScrollWhenAboveVisible(cm, line, -height);\n regLineChange(cm, no, \"widget\");\n });\n signalLater(cm, \"lineWidgetCleared\", cm, this, no);\n }\n };\n LineWidget.prototype.changed = function () {\n var this$1 = this;\n var oldH = this.height,\n cm = this.doc.cm,\n line = this.line;\n this.height = null;\n var diff = widgetHeight(this) - oldH;\n if (!diff) {\n return;\n }\n if (!lineIsHidden(this.doc, line)) {\n updateLineHeight(line, line.height + diff);\n }\n if (cm) {\n runInOp(cm, function () {\n cm.curOp.forceUpdate = true;\n adjustScrollWhenAboveVisible(cm, line, diff);\n signalLater(cm, \"lineWidgetChanged\", cm, this$1, lineNo(line));\n });\n }\n };\n eventMixin(LineWidget);\n function adjustScrollWhenAboveVisible(cm, line, diff) {\n if (heightAtLine(line) < (cm.curOp && cm.curOp.scrollTop || cm.doc.scrollTop)) {\n addToScrollTop(cm, diff);\n }\n }\n function addLineWidget(doc, handle, node, options) {\n var widget = new LineWidget(doc, node, options);\n var cm = doc.cm;\n if (cm && widget.noHScroll) {\n cm.display.alignWidgets = true;\n }\n changeLine(doc, handle, \"widget\", function (line) {\n var widgets = line.widgets || (line.widgets = []);\n if (widget.insertAt == null) {\n widgets.push(widget);\n } else {\n widgets.splice(Math.min(widgets.length - 1, Math.max(0, widget.insertAt)), 0, widget);\n }\n widget.line = line;\n if (cm && !lineIsHidden(doc, line)) {\n var aboveVisible = heightAtLine(line) < doc.scrollTop;\n updateLineHeight(line, line.height + widgetHeight(widget));\n if (aboveVisible) {\n addToScrollTop(cm, widget.height);\n }\n cm.curOp.forceUpdate = true;\n }\n return true;\n });\n if (cm) {\n signalLater(cm, \"lineWidgetAdded\", cm, widget, typeof handle == \"number\" ? handle : lineNo(handle));\n }\n return widget;\n }\n\n // TEXTMARKERS\n\n // Created with markText and setBookmark methods. A TextMarker is a\n // handle that can be used to clear or find a marked position in the\n // document. Line objects hold arrays (markedSpans) containing\n // {from, to, marker} object pointing to such marker objects, and\n // indicating that such a marker is present on that line. Multiple\n // lines may point to the same marker when it spans across lines.\n // The spans will have null for their from/to properties when the\n // marker continues beyond the start/end of the line. Markers have\n // links back to the lines they currently touch.\n\n // Collapsed markers have unique ids, in order to be able to order\n // them, which is needed for uniquely determining an outer marker\n // when they overlap (they may nest, but not partially overlap).\n var nextMarkerId = 0;\n var TextMarker = function (doc, type) {\n this.lines = [];\n this.type = type;\n this.doc = doc;\n this.id = ++nextMarkerId;\n };\n\n // Clear the marker.\n TextMarker.prototype.clear = function () {\n if (this.explicitlyCleared) {\n return;\n }\n var cm = this.doc.cm,\n withOp = cm && !cm.curOp;\n if (withOp) {\n startOperation(cm);\n }\n if (hasHandler(this, \"clear\")) {\n var found = this.find();\n if (found) {\n signalLater(this, \"clear\", found.from, found.to);\n }\n }\n var min = null,\n max = null;\n for (var i = 0; i < this.lines.length; ++i) {\n var line = this.lines[i];\n var span = getMarkedSpanFor(line.markedSpans, this);\n if (cm && !this.collapsed) {\n regLineChange(cm, lineNo(line), \"text\");\n } else if (cm) {\n if (span.to != null) {\n max = lineNo(line);\n }\n if (span.from != null) {\n min = lineNo(line);\n }\n }\n line.markedSpans = removeMarkedSpan(line.markedSpans, span);\n if (span.from == null && this.collapsed && !lineIsHidden(this.doc, line) && cm) {\n updateLineHeight(line, textHeight(cm.display));\n }\n }\n if (cm && this.collapsed && !cm.options.lineWrapping) {\n for (var i$1 = 0; i$1 < this.lines.length; ++i$1) {\n var visual = visualLine(this.lines[i$1]),\n len = lineLength(visual);\n if (len > cm.display.maxLineLength) {\n cm.display.maxLine = visual;\n cm.display.maxLineLength = len;\n cm.display.maxLineChanged = true;\n }\n }\n }\n if (min != null && cm && this.collapsed) {\n regChange(cm, min, max + 1);\n }\n this.lines.length = 0;\n this.explicitlyCleared = true;\n if (this.atomic && this.doc.cantEdit) {\n this.doc.cantEdit = false;\n if (cm) {\n reCheckSelection(cm.doc);\n }\n }\n if (cm) {\n signalLater(cm, \"markerCleared\", cm, this, min, max);\n }\n if (withOp) {\n endOperation(cm);\n }\n if (this.parent) {\n this.parent.clear();\n }\n };\n\n // Find the position of the marker in the document. Returns a {from,\n // to} object by default. Side can be passed to get a specific side\n // -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the\n // Pos objects returned contain a line object, rather than a line\n // number (used to prevent looking up the same line twice).\n TextMarker.prototype.find = function (side, lineObj) {\n if (side == null && this.type == \"bookmark\") {\n side = 1;\n }\n var from, to;\n for (var i = 0; i < this.lines.length; ++i) {\n var line = this.lines[i];\n var span = getMarkedSpanFor(line.markedSpans, this);\n if (span.from != null) {\n from = Pos(lineObj ? line : lineNo(line), span.from);\n if (side == -1) {\n return from;\n }\n }\n if (span.to != null) {\n to = Pos(lineObj ? line : lineNo(line), span.to);\n if (side == 1) {\n return to;\n }\n }\n }\n return from && {\n from: from,\n to: to\n };\n };\n\n // Signals that the marker's widget changed, and surrounding layout\n // should be recomputed.\n TextMarker.prototype.changed = function () {\n var this$1 = this;\n var pos = this.find(-1, true),\n widget = this,\n cm = this.doc.cm;\n if (!pos || !cm) {\n return;\n }\n runInOp(cm, function () {\n var line = pos.line,\n lineN = lineNo(pos.line);\n var view = findViewForLine(cm, lineN);\n if (view) {\n clearLineMeasurementCacheFor(view);\n cm.curOp.selectionChanged = cm.curOp.forceUpdate = true;\n }\n cm.curOp.updateMaxLine = true;\n if (!lineIsHidden(widget.doc, line) && widget.height != null) {\n var oldHeight = widget.height;\n widget.height = null;\n var dHeight = widgetHeight(widget) - oldHeight;\n if (dHeight) {\n updateLineHeight(line, line.height + dHeight);\n }\n }\n signalLater(cm, \"markerChanged\", cm, this$1);\n });\n };\n TextMarker.prototype.attachLine = function (line) {\n if (!this.lines.length && this.doc.cm) {\n var op = this.doc.cm.curOp;\n if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1) {\n (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this);\n }\n }\n this.lines.push(line);\n };\n TextMarker.prototype.detachLine = function (line) {\n this.lines.splice(indexOf(this.lines, line), 1);\n if (!this.lines.length && this.doc.cm) {\n var op = this.doc.cm.curOp;\n (op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this);\n }\n };\n eventMixin(TextMarker);\n\n // Create a marker, wire it up to the right lines, and\n function markText(doc, from, to, options, type) {\n // Shared markers (across linked documents) are handled separately\n // (markTextShared will call out to this again, once per\n // document).\n if (options && options.shared) {\n return markTextShared(doc, from, to, options, type);\n }\n // Ensure we are in an operation.\n if (doc.cm && !doc.cm.curOp) {\n return operation(doc.cm, markText)(doc, from, to, options, type);\n }\n var marker = new TextMarker(doc, type),\n diff = cmp(from, to);\n if (options) {\n copyObj(options, marker, false);\n }\n // Don't connect empty markers unless clearWhenEmpty is false\n if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false) {\n return marker;\n }\n if (marker.replacedWith) {\n // Showing up as a widget implies collapsed (widget replaces text)\n marker.collapsed = true;\n marker.widgetNode = eltP(\"span\", [marker.replacedWith], \"CodeMirror-widget\");\n if (!options.handleMouseEvents) {\n marker.widgetNode.setAttribute(\"cm-ignore-events\", \"true\");\n }\n if (options.insertLeft) {\n marker.widgetNode.insertLeft = true;\n }\n }\n if (marker.collapsed) {\n if (conflictingCollapsedRange(doc, from.line, from, to, marker) || from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker)) {\n throw new Error(\"Inserting collapsed marker partially overlapping an existing one\");\n }\n seeCollapsedSpans();\n }\n if (marker.addToHistory) {\n addChangeToHistory(doc, {\n from: from,\n to: to,\n origin: \"markText\"\n }, doc.sel, NaN);\n }\n var curLine = from.line,\n cm = doc.cm,\n updateMaxLine;\n doc.iter(curLine, to.line + 1, function (line) {\n if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine) {\n updateMaxLine = true;\n }\n if (marker.collapsed && curLine != from.line) {\n updateLineHeight(line, 0);\n }\n addMarkedSpan(line, new MarkedSpan(marker, curLine == from.line ? from.ch : null, curLine == to.line ? to.ch : null));\n ++curLine;\n });\n // lineIsHidden depends on the presence of the spans, so needs a second pass\n if (marker.collapsed) {\n doc.iter(from.line, to.line + 1, function (line) {\n if (lineIsHidden(doc, line)) {\n updateLineHeight(line, 0);\n }\n });\n }\n if (marker.clearOnEnter) {\n on(marker, \"beforeCursorEnter\", function () {\n return marker.clear();\n });\n }\n if (marker.readOnly) {\n seeReadOnlySpans();\n if (doc.history.done.length || doc.history.undone.length) {\n doc.clearHistory();\n }\n }\n if (marker.collapsed) {\n marker.id = ++nextMarkerId;\n marker.atomic = true;\n }\n if (cm) {\n // Sync editor state\n if (updateMaxLine) {\n cm.curOp.updateMaxLine = true;\n }\n if (marker.collapsed) {\n regChange(cm, from.line, to.line + 1);\n } else if (marker.className || marker.startStyle || marker.endStyle || marker.css || marker.attributes || marker.title) {\n for (var i = from.line; i <= to.line; i++) {\n regLineChange(cm, i, \"text\");\n }\n }\n if (marker.atomic) {\n reCheckSelection(cm.doc);\n }\n signalLater(cm, \"markerAdded\", cm, marker);\n }\n return marker;\n }\n\n // SHARED TEXTMARKERS\n\n // A shared marker spans multiple linked documents. It is\n // implemented as a meta-marker-object controlling multiple normal\n // markers.\n var SharedTextMarker = function (markers, primary) {\n this.markers = markers;\n this.primary = primary;\n for (var i = 0; i < markers.length; ++i) {\n markers[i].parent = this;\n }\n };\n SharedTextMarker.prototype.clear = function () {\n if (this.explicitlyCleared) {\n return;\n }\n this.explicitlyCleared = true;\n for (var i = 0; i < this.markers.length; ++i) {\n this.markers[i].clear();\n }\n signalLater(this, \"clear\");\n };\n SharedTextMarker.prototype.find = function (side, lineObj) {\n return this.primary.find(side, lineObj);\n };\n eventMixin(SharedTextMarker);\n function markTextShared(doc, from, to, options, type) {\n options = copyObj(options);\n options.shared = false;\n var markers = [markText(doc, from, to, options, type)],\n primary = markers[0];\n var widget = options.widgetNode;\n linkedDocs(doc, function (doc) {\n if (widget) {\n options.widgetNode = widget.cloneNode(true);\n }\n markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type));\n for (var i = 0; i < doc.linked.length; ++i) {\n if (doc.linked[i].isParent) {\n return;\n }\n }\n primary = lst(markers);\n });\n return new SharedTextMarker(markers, primary);\n }\n function findSharedMarkers(doc) {\n return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function (m) {\n return m.parent;\n });\n }\n function copySharedMarkers(doc, markers) {\n for (var i = 0; i < markers.length; i++) {\n var marker = markers[i],\n pos = marker.find();\n var mFrom = doc.clipPos(pos.from),\n mTo = doc.clipPos(pos.to);\n if (cmp(mFrom, mTo)) {\n var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type);\n marker.markers.push(subMark);\n subMark.parent = marker;\n }\n }\n }\n function detachSharedMarkers(markers) {\n var loop = function (i) {\n var marker = markers[i],\n linked = [marker.primary.doc];\n linkedDocs(marker.primary.doc, function (d) {\n return linked.push(d);\n });\n for (var j = 0; j < marker.markers.length; j++) {\n var subMarker = marker.markers[j];\n if (indexOf(linked, subMarker.doc) == -1) {\n subMarker.parent = null;\n marker.markers.splice(j--, 1);\n }\n }\n };\n for (var i = 0; i < markers.length; i++) loop(i);\n }\n var nextDocId = 0;\n var Doc = function (text, mode, firstLine, lineSep, direction) {\n if (!(this instanceof Doc)) {\n return new Doc(text, mode, firstLine, lineSep, direction);\n }\n if (firstLine == null) {\n firstLine = 0;\n }\n BranchChunk.call(this, [new LeafChunk([new Line(\"\", null)])]);\n this.first = firstLine;\n this.scrollTop = this.scrollLeft = 0;\n this.cantEdit = false;\n this.cleanGeneration = 1;\n this.modeFrontier = this.highlightFrontier = firstLine;\n var start = Pos(firstLine, 0);\n this.sel = simpleSelection(start);\n this.history = new History(null);\n this.id = ++nextDocId;\n this.modeOption = mode;\n this.lineSep = lineSep;\n this.direction = direction == \"rtl\" ? \"rtl\" : \"ltr\";\n this.extend = false;\n if (typeof text == \"string\") {\n text = this.splitLines(text);\n }\n updateDoc(this, {\n from: start,\n to: start,\n text: text\n });\n setSelection(this, simpleSelection(start), sel_dontScroll);\n };\n Doc.prototype = createObj(BranchChunk.prototype, {\n constructor: Doc,\n // Iterate over the document. Supports two forms -- with only one\n // argument, it calls that for each line in the document. With\n // three, it iterates over the range given by the first two (with\n // the second being non-inclusive).\n iter: function (from, to, op) {\n if (op) {\n this.iterN(from - this.first, to - from, op);\n } else {\n this.iterN(this.first, this.first + this.size, from);\n }\n },\n // Non-public interface for adding and removing lines.\n insert: function (at, lines) {\n var height = 0;\n for (var i = 0; i < lines.length; ++i) {\n height += lines[i].height;\n }\n this.insertInner(at - this.first, lines, height);\n },\n remove: function (at, n) {\n this.removeInner(at - this.first, n);\n },\n // From here, the methods are part of the public interface. Most\n // are also available from CodeMirror (editor) instances.\n\n getValue: function (lineSep) {\n var lines = getLines(this, this.first, this.first + this.size);\n if (lineSep === false) {\n return lines;\n }\n return lines.join(lineSep || this.lineSeparator());\n },\n setValue: docMethodOp(function (code) {\n var top = Pos(this.first, 0),\n last = this.first + this.size - 1;\n makeChange(this, {\n from: top,\n to: Pos(last, getLine(this, last).text.length),\n text: this.splitLines(code),\n origin: \"setValue\",\n full: true\n }, true);\n if (this.cm) {\n scrollToCoords(this.cm, 0, 0);\n }\n setSelection(this, simpleSelection(top), sel_dontScroll);\n }),\n replaceRange: function (code, from, to, origin) {\n from = clipPos(this, from);\n to = to ? clipPos(this, to) : from;\n replaceRange(this, code, from, to, origin);\n },\n getRange: function (from, to, lineSep) {\n var lines = getBetween(this, clipPos(this, from), clipPos(this, to));\n if (lineSep === false) {\n return lines;\n }\n return lines.join(lineSep || this.lineSeparator());\n },\n getLine: function (line) {\n var l = this.getLineHandle(line);\n return l && l.text;\n },\n getLineHandle: function (line) {\n if (isLine(this, line)) {\n return getLine(this, line);\n }\n },\n getLineNumber: function (line) {\n return lineNo(line);\n },\n getLineHandleVisualStart: function (line) {\n if (typeof line == \"number\") {\n line = getLine(this, line);\n }\n return visualLine(line);\n },\n lineCount: function () {\n return this.size;\n },\n firstLine: function () {\n return this.first;\n },\n lastLine: function () {\n return this.first + this.size - 1;\n },\n clipPos: function (pos) {\n return clipPos(this, pos);\n },\n getCursor: function (start) {\n var range = this.sel.primary(),\n pos;\n if (start == null || start == \"head\") {\n pos = range.head;\n } else if (start == \"anchor\") {\n pos = range.anchor;\n } else if (start == \"end\" || start == \"to\" || start === false) {\n pos = range.to();\n } else {\n pos = range.from();\n }\n return pos;\n },\n listSelections: function () {\n return this.sel.ranges;\n },\n somethingSelected: function () {\n return this.sel.somethingSelected();\n },\n setCursor: docMethodOp(function (line, ch, options) {\n setSimpleSelection(this, clipPos(this, typeof line == \"number\" ? Pos(line, ch || 0) : line), null, options);\n }),\n setSelection: docMethodOp(function (anchor, head, options) {\n setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options);\n }),\n extendSelection: docMethodOp(function (head, other, options) {\n extendSelection(this, clipPos(this, head), other && clipPos(this, other), options);\n }),\n extendSelections: docMethodOp(function (heads, options) {\n extendSelections(this, clipPosArray(this, heads), options);\n }),\n extendSelectionsBy: docMethodOp(function (f, options) {\n var heads = map(this.sel.ranges, f);\n extendSelections(this, clipPosArray(this, heads), options);\n }),\n setSelections: docMethodOp(function (ranges, primary, options) {\n if (!ranges.length) {\n return;\n }\n var out = [];\n for (var i = 0; i < ranges.length; i++) {\n out[i] = new Range(clipPos(this, ranges[i].anchor), clipPos(this, ranges[i].head));\n }\n if (primary == null) {\n primary = Math.min(ranges.length - 1, this.sel.primIndex);\n }\n setSelection(this, normalizeSelection(this.cm, out, primary), options);\n }),\n addSelection: docMethodOp(function (anchor, head, options) {\n var ranges = this.sel.ranges.slice(0);\n ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor)));\n setSelection(this, normalizeSelection(this.cm, ranges, ranges.length - 1), options);\n }),\n getSelection: function (lineSep) {\n var ranges = this.sel.ranges,\n lines;\n for (var i = 0; i < ranges.length; i++) {\n var sel = getBetween(this, ranges[i].from(), ranges[i].to());\n lines = lines ? lines.concat(sel) : sel;\n }\n if (lineSep === false) {\n return lines;\n } else {\n return lines.join(lineSep || this.lineSeparator());\n }\n },\n getSelections: function (lineSep) {\n var parts = [],\n ranges = this.sel.ranges;\n for (var i = 0; i < ranges.length; i++) {\n var sel = getBetween(this, ranges[i].from(), ranges[i].to());\n if (lineSep !== false) {\n sel = sel.join(lineSep || this.lineSeparator());\n }\n parts[i] = sel;\n }\n return parts;\n },\n replaceSelection: function (code, collapse, origin) {\n var dup = [];\n for (var i = 0; i < this.sel.ranges.length; i++) {\n dup[i] = code;\n }\n this.replaceSelections(dup, collapse, origin || \"+input\");\n },\n replaceSelections: docMethodOp(function (code, collapse, origin) {\n var changes = [],\n sel = this.sel;\n for (var i = 0; i < sel.ranges.length; i++) {\n var range = sel.ranges[i];\n changes[i] = {\n from: range.from(),\n to: range.to(),\n text: this.splitLines(code[i]),\n origin: origin\n };\n }\n var newSel = collapse && collapse != \"end\" && computeReplacedSel(this, changes, collapse);\n for (var i$1 = changes.length - 1; i$1 >= 0; i$1--) {\n makeChange(this, changes[i$1]);\n }\n if (newSel) {\n setSelectionReplaceHistory(this, newSel);\n } else if (this.cm) {\n ensureCursorVisible(this.cm);\n }\n }),\n undo: docMethodOp(function () {\n makeChangeFromHistory(this, \"undo\");\n }),\n redo: docMethodOp(function () {\n makeChangeFromHistory(this, \"redo\");\n }),\n undoSelection: docMethodOp(function () {\n makeChangeFromHistory(this, \"undo\", true);\n }),\n redoSelection: docMethodOp(function () {\n makeChangeFromHistory(this, \"redo\", true);\n }),\n setExtending: function (val) {\n this.extend = val;\n },\n getExtending: function () {\n return this.extend;\n },\n historySize: function () {\n var hist = this.history,\n done = 0,\n undone = 0;\n for (var i = 0; i < hist.done.length; i++) {\n if (!hist.done[i].ranges) {\n ++done;\n }\n }\n for (var i$1 = 0; i$1 < hist.undone.length; i$1++) {\n if (!hist.undone[i$1].ranges) {\n ++undone;\n }\n }\n return {\n undo: done,\n redo: undone\n };\n },\n clearHistory: function () {\n var this$1 = this;\n this.history = new History(this.history.maxGeneration);\n linkedDocs(this, function (doc) {\n return doc.history = this$1.history;\n }, true);\n },\n markClean: function () {\n this.cleanGeneration = this.changeGeneration(true);\n },\n changeGeneration: function (forceSplit) {\n if (forceSplit) {\n this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null;\n }\n return this.history.generation;\n },\n isClean: function (gen) {\n return this.history.generation == (gen || this.cleanGeneration);\n },\n getHistory: function () {\n return {\n done: copyHistoryArray(this.history.done),\n undone: copyHistoryArray(this.history.undone)\n };\n },\n setHistory: function (histData) {\n var hist = this.history = new History(this.history.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 if (!value && isEmpty(markers)) {\n line.gutterMarkers = null;\n }\n return true;\n });\n }),\n clearGutter: docMethodOp(function (gutterID) {\n var this$1 = this;\n this.iter(function (line) {\n if (line.gutterMarkers && line.gutterMarkers[gutterID]) {\n changeLine(this$1, line, \"gutter\", function () {\n line.gutterMarkers[gutterID] = null;\n if (isEmpty(line.gutterMarkers)) {\n line.gutterMarkers = null;\n }\n return true;\n });\n }\n });\n }),\n lineInfo: function (line) {\n var n;\n if (typeof line == \"number\") {\n if (!isLine(this, line)) {\n return null;\n }\n n = line;\n line = getLine(this, line);\n if (!line) {\n return null;\n }\n } else {\n n = lineNo(line);\n if (n == null) {\n return null;\n }\n }\n return {\n line: n,\n handle: line,\n text: line.text,\n gutterMarkers: line.gutterMarkers,\n textClass: line.textClass,\n bgClass: line.bgClass,\n wrapClass: line.wrapClass,\n widgets: line.widgets\n };\n },\n addLineClass: docMethodOp(function (handle, where, cls) {\n return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", function (line) {\n var prop = where == \"text\" ? \"textClass\" : where == \"background\" ? \"bgClass\" : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n if (!line[prop]) {\n line[prop] = cls;\n } else if (classTest(cls).test(line[prop])) {\n return false;\n } else {\n line[prop] += \" \" + cls;\n }\n return true;\n });\n }),\n removeLineClass: docMethodOp(function (handle, where, cls) {\n return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", function (line) {\n var prop = where == \"text\" ? \"textClass\" : where == \"background\" ? \"bgClass\" : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n var cur = line[prop];\n if (!cur) {\n return false;\n } else if (cls == null) {\n line[prop] = null;\n } else {\n var found = cur.match(classTest(cls));\n if (!found) {\n return false;\n }\n var end = found.index + found[0].length;\n line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? \"\" : \" \") + cur.slice(end) || null;\n }\n return true;\n });\n }),\n addLineWidget: docMethodOp(function (handle, node, options) {\n return addLineWidget(this, handle, node, options);\n }),\n removeLineWidget: function (widget) {\n widget.clear();\n },\n markText: function (from, to, options) {\n return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || \"range\");\n },\n setBookmark: function (pos, options) {\n var realOpts = {\n replacedWith: options && (options.nodeType == null ? options.widget : options),\n insertLeft: options && options.insertLeft,\n clearWhenEmpty: false,\n shared: options && options.shared,\n handleMouseEvents: options && options.handleMouseEvents\n };\n pos = clipPos(this, pos);\n return markText(this, pos, pos, realOpts, \"bookmark\");\n },\n findMarksAt: function (pos) {\n pos = clipPos(this, pos);\n var markers = [],\n spans = getLine(this, pos.line).markedSpans;\n if (spans) {\n for (var i = 0; i < spans.length; ++i) {\n var span = spans[i];\n if ((span.from == null || span.from <= pos.ch) && (span.to == null || span.to >= pos.ch)) {\n markers.push(span.marker.parent || span.marker);\n }\n }\n }\n return markers;\n },\n findMarks: function (from, to, filter) {\n from = clipPos(this, from);\n to = clipPos(this, to);\n var found = [],\n lineNo = from.line;\n this.iter(from.line, to.line + 1, function (line) {\n var spans = line.markedSpans;\n if (spans) {\n for (var i = 0; i < spans.length; i++) {\n var span = spans[i];\n if (!(span.to != null && lineNo == from.line && from.ch >= span.to || span.from == null && lineNo != from.line || span.from != null && lineNo == to.line && span.from >= to.ch) && (!filter || filter(span.marker))) {\n found.push(span.marker.parent || span.marker);\n }\n }\n }\n ++lineNo;\n });\n return found;\n },\n getAllMarks: function () {\n var markers = [];\n this.iter(function (line) {\n var sps = line.markedSpans;\n if (sps) {\n for (var i = 0; i < sps.length; ++i) {\n if (sps[i].from != null) {\n markers.push(sps[i].marker);\n }\n }\n }\n });\n return markers;\n },\n posFromIndex: function (off) {\n var ch,\n lineNo = this.first,\n sepSize = this.lineSeparator().length;\n this.iter(function (line) {\n var sz = line.text.length + sepSize;\n if (sz > off) {\n ch = off;\n return true;\n }\n off -= sz;\n ++lineNo;\n });\n return clipPos(this, Pos(lineNo, ch));\n },\n indexFromPos: function (coords) {\n coords = clipPos(this, coords);\n var index = coords.ch;\n if (coords.line < this.first || coords.ch < 0) {\n return 0;\n }\n var sepSize = this.lineSeparator().length;\n this.iter(this.first, coords.line, function (line) {\n // iter aborts when callback returns a truthy value\n index += line.text.length + sepSize;\n });\n return index;\n },\n copy: function (copyHistory) {\n var doc = new Doc(getLines(this, this.first, this.first + this.size), this.modeOption, this.first, this.lineSep, this.direction);\n doc.scrollTop = this.scrollTop;\n doc.scrollLeft = this.scrollLeft;\n doc.sel = this.sel;\n doc.extend = false;\n if (copyHistory) {\n doc.history.undoDepth = this.history.undoDepth;\n doc.setHistory(this.getHistory());\n }\n return doc;\n },\n linkedDoc: function (options) {\n if (!options) {\n options = {};\n }\n var from = this.first,\n to = this.first + this.size;\n if (options.from != null && options.from > from) {\n from = options.from;\n }\n if (options.to != null && options.to < to) {\n to = options.to;\n }\n var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep, this.direction);\n if (options.sharedHist) {\n copy.history = this.history;\n }\n (this.linked || (this.linked = [])).push({\n doc: copy,\n sharedHist: options.sharedHist\n });\n copy.linked = [{\n doc: this,\n isParent: true,\n sharedHist: options.sharedHist\n }];\n copySharedMarkers(copy, findSharedMarkers(this));\n return copy;\n },\n unlinkDoc: function (other) {\n if (other instanceof CodeMirror) {\n other = other.doc;\n }\n if (this.linked) {\n for (var i = 0; i < this.linked.length; ++i) {\n var link = this.linked[i];\n if (link.doc != other) {\n continue;\n }\n this.linked.splice(i, 1);\n other.unlinkDoc(this);\n detachSharedMarkers(findSharedMarkers(this));\n break;\n }\n }\n // If the histories were shared, split them again\n if (other.history == this.history) {\n var splitIds = [other.id];\n linkedDocs(other, function (doc) {\n return splitIds.push(doc.id);\n }, true);\n other.history = new History(null);\n other.history.done = copyHistoryArray(this.history.done, splitIds);\n other.history.undone = copyHistoryArray(this.history.undone, splitIds);\n }\n },\n iterLinkedDocs: function (f) {\n linkedDocs(this, f);\n },\n getMode: function () {\n return this.mode;\n },\n getEditor: function () {\n return this.cm;\n },\n splitLines: function (str) {\n if (this.lineSep) {\n return str.split(this.lineSep);\n }\n return splitLinesAuto(str);\n },\n lineSeparator: function () {\n return this.lineSep || \"\\n\";\n },\n setDirection: docMethodOp(function (dir) {\n if (dir != \"rtl\") {\n dir = \"ltr\";\n }\n if (dir == this.direction) {\n return;\n }\n this.direction = dir;\n this.iter(function (line) {\n return line.order = null;\n });\n if (this.cm) {\n directionChanged(this.cm);\n }\n })\n });\n\n // Public alias.\n Doc.prototype.eachLine = Doc.prototype.iter;\n\n // Kludge to work around strange IE behavior where it'll sometimes\n // re-fire a series of drag-related events right after the drop (#1551)\n var lastDrop = 0;\n function onDrop(e) {\n var cm = this;\n clearDragCursor(cm);\n if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) {\n return;\n }\n e_preventDefault(e);\n if (ie) {\n lastDrop = +new Date();\n }\n var pos = posFromMouse(cm, e, true),\n files = e.dataTransfer.files;\n if (!pos || cm.isReadOnly()) {\n return;\n }\n // Might be a file drop, in which case we simply extract the text\n // and insert it.\n if (files && files.length && window.FileReader && window.File) {\n var n = files.length,\n text = Array(n),\n read = 0;\n var markAsReadAndPasteIfAllFilesAreRead = function () {\n if (++read == n) {\n operation(cm, function () {\n pos = clipPos(cm.doc, pos);\n var change = {\n from: pos,\n to: pos,\n text: cm.doc.splitLines(text.filter(function (t) {\n return t != null;\n }).join(cm.doc.lineSeparator())),\n origin: \"paste\"\n };\n makeChange(cm.doc, change);\n setSelectionReplaceHistory(cm.doc, simpleSelection(clipPos(cm.doc, pos), clipPos(cm.doc, changeEnd(change))));\n })();\n }\n };\n var readTextFromFile = function (file, i) {\n if (cm.options.allowDropFileTypes && indexOf(cm.options.allowDropFileTypes, file.type) == -1) {\n markAsReadAndPasteIfAllFilesAreRead();\n return;\n }\n var reader = new FileReader();\n reader.onerror = function () {\n return markAsReadAndPasteIfAllFilesAreRead();\n };\n reader.onload = function () {\n var content = reader.result;\n if (/[\\x00-\\x08\\x0e-\\x1f]{2}/.test(content)) {\n markAsReadAndPasteIfAllFilesAreRead();\n return;\n }\n text[i] = content;\n markAsReadAndPasteIfAllFilesAreRead();\n };\n reader.readAsText(file);\n };\n for (var i = 0; i < files.length; i++) {\n readTextFromFile(files[i], i);\n }\n } else {\n // Normal drop\n // Don't do a replace if the drop happened inside of the selected text.\n if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) {\n cm.state.draggingText(e);\n // Ensure the editor is re-focused\n setTimeout(function () {\n return cm.display.input.focus();\n }, 20);\n return;\n }\n try {\n var text$1 = e.dataTransfer.getData(\"Text\");\n if (text$1) {\n var selected;\n if (cm.state.draggingText && !cm.state.draggingText.copy) {\n selected = cm.listSelections();\n }\n setSelectionNoUndo(cm.doc, simpleSelection(pos, pos));\n if (selected) {\n for (var i$1 = 0; i$1 < selected.length; ++i$1) {\n replaceRange(cm.doc, \"\", selected[i$1].anchor, selected[i$1].head, \"drag\");\n }\n }\n cm.replaceSelection(text$1, \"around\", \"paste\");\n cm.display.input.focus();\n }\n } catch (e$1) {}\n }\n }\n function onDragStart(cm, e) {\n if (ie && (!cm.state.draggingText || +new Date() - lastDrop < 100)) {\n e_stop(e);\n return;\n }\n if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) {\n return;\n }\n e.dataTransfer.setData(\"Text\", cm.getSelection());\n e.dataTransfer.effectAllowed = \"copyMove\";\n\n // Use dummy image instead of default browsers image.\n // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there.\n if (e.dataTransfer.setDragImage && !safari) {\n var img = elt(\"img\", null, null, \"position: fixed; left: 0; top: 0;\");\n img.src = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n if (presto) {\n img.width = img.height = 1;\n cm.display.wrapper.appendChild(img);\n // Force a relayout, or Opera won't use our image for some obscure reason\n img._top = img.offsetTop;\n }\n e.dataTransfer.setDragImage(img, 0, 0);\n if (presto) {\n img.parentNode.removeChild(img);\n }\n }\n }\n function onDragOver(cm, e) {\n var pos = posFromMouse(cm, e);\n if (!pos) {\n return;\n }\n var frag = document.createDocumentFragment();\n drawSelectionCursor(cm, pos, frag);\n if (!cm.display.dragCursor) {\n cm.display.dragCursor = elt(\"div\", null, \"CodeMirror-cursors CodeMirror-dragcursors\");\n cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv);\n }\n removeChildrenAndAdd(cm.display.dragCursor, frag);\n }\n function clearDragCursor(cm) {\n if (cm.display.dragCursor) {\n cm.display.lineSpace.removeChild(cm.display.dragCursor);\n cm.display.dragCursor = null;\n }\n }\n\n // These must be handled carefully, because naively registering a\n // handler for each editor will cause the editors to never be\n // garbage collected.\n\n function forEachCodeMirror(f) {\n if (!document.getElementsByClassName) {\n return;\n }\n var byClass = document.getElementsByClassName(\"CodeMirror\"),\n editors = [];\n for (var i = 0; i < byClass.length; i++) {\n var cm = byClass[i].CodeMirror;\n if (cm) {\n editors.push(cm);\n }\n }\n if (editors.length) {\n editors[0].operation(function () {\n for (var i = 0; i < editors.length; i++) {\n f(editors[i]);\n }\n });\n }\n }\n var globalsRegistered = false;\n function ensureGlobalHandlers() {\n if (globalsRegistered) {\n return;\n }\n registerGlobalHandlers();\n globalsRegistered = true;\n }\n function registerGlobalHandlers() {\n // When the window resizes, we need to refresh active editors.\n var resizeTimer;\n on(window, \"resize\", function () {\n if (resizeTimer == null) {\n resizeTimer = setTimeout(function () {\n resizeTimer = null;\n forEachCodeMirror(onResize);\n }, 100);\n }\n });\n // When the window loses focus, we want to show the editor as blurred\n on(window, \"blur\", function () {\n return forEachCodeMirror(onBlur);\n });\n }\n // Called when the window resizes\n function onResize(cm) {\n var d = cm.display;\n // Might be a text scaling operation, clear size caches.\n d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;\n d.scrollbarsClipped = false;\n cm.setSize();\n }\n var keyNames = {\n 3: \"Pause\",\n 8: \"Backspace\",\n 9: \"Tab\",\n 13: \"Enter\",\n 16: \"Shift\",\n 17: \"Ctrl\",\n 18: \"Alt\",\n 19: \"Pause\",\n 20: \"CapsLock\",\n 27: \"Esc\",\n 32: \"Space\",\n 33: \"PageUp\",\n 34: \"PageDown\",\n 35: \"End\",\n 36: \"Home\",\n 37: \"Left\",\n 38: \"Up\",\n 39: \"Right\",\n 40: \"Down\",\n 44: \"PrintScrn\",\n 45: \"Insert\",\n 46: \"Delete\",\n 59: \";\",\n 61: \"=\",\n 91: \"Mod\",\n 92: \"Mod\",\n 93: \"Mod\",\n 106: \"*\",\n 107: \"=\",\n 109: \"-\",\n 110: \".\",\n 111: \"/\",\n 145: \"ScrollLock\",\n 173: \"-\",\n 186: \";\",\n 187: \"=\",\n 188: \",\",\n 189: \"-\",\n 190: \".\",\n 191: \"/\",\n 192: \"`\",\n 219: \"[\",\n 220: \"\\\\\",\n 221: \"]\",\n 222: \"'\",\n 224: \"Mod\",\n 63232: \"Up\",\n 63233: \"Down\",\n 63234: \"Left\",\n 63235: \"Right\",\n 63272: \"Delete\",\n 63273: \"Home\",\n 63275: \"End\",\n 63276: \"PageUp\",\n 63277: \"PageDown\",\n 63302: \"Insert\"\n };\n\n // Number keys\n for (var i = 0; i < 10; i++) {\n keyNames[i + 48] = keyNames[i + 96] = String(i);\n }\n // Alphabetic keys\n for (var i$1 = 65; i$1 <= 90; i$1++) {\n keyNames[i$1] = String.fromCharCode(i$1);\n }\n // Function keys\n for (var i$2 = 1; i$2 <= 12; i$2++) {\n keyNames[i$2 + 111] = keyNames[i$2 + 63235] = \"F\" + i$2;\n }\n var keyMap = {};\n keyMap.basic = {\n \"Left\": \"goCharLeft\",\n \"Right\": \"goCharRight\",\n \"Up\": \"goLineUp\",\n \"Down\": \"goLineDown\",\n \"End\": \"goLineEnd\",\n \"Home\": \"goLineStartSmart\",\n \"PageUp\": \"goPageUp\",\n \"PageDown\": \"goPageDown\",\n \"Delete\": \"delCharAfter\",\n \"Backspace\": \"delCharBefore\",\n \"Shift-Backspace\": \"delCharBefore\",\n \"Tab\": \"defaultTab\",\n \"Shift-Tab\": \"indentAuto\",\n \"Enter\": \"newlineAndIndent\",\n \"Insert\": \"toggleOverwrite\",\n \"Esc\": \"singleSelection\"\n };\n // Note that the save and find-related commands aren't defined by\n // default. User code or addons can define them. Unknown commands\n // are simply ignored.\n keyMap.pcDefault = {\n \"Ctrl-A\": \"selectAll\",\n \"Ctrl-D\": \"deleteLine\",\n \"Ctrl-Z\": \"undo\",\n \"Shift-Ctrl-Z\": \"redo\",\n \"Ctrl-Y\": \"redo\",\n \"Ctrl-Home\": \"goDocStart\",\n \"Ctrl-End\": \"goDocEnd\",\n \"Ctrl-Up\": \"goLineUp\",\n \"Ctrl-Down\": \"goLineDown\",\n \"Ctrl-Left\": \"goGroupLeft\",\n \"Ctrl-Right\": \"goGroupRight\",\n \"Alt-Left\": \"goLineStart\",\n \"Alt-Right\": \"goLineEnd\",\n \"Ctrl-Backspace\": \"delGroupBefore\",\n \"Ctrl-Delete\": \"delGroupAfter\",\n \"Ctrl-S\": \"save\",\n \"Ctrl-F\": \"find\",\n \"Ctrl-G\": \"findNext\",\n \"Shift-Ctrl-G\": \"findPrev\",\n \"Shift-Ctrl-F\": \"replace\",\n \"Shift-Ctrl-R\": \"replaceAll\",\n \"Ctrl-[\": \"indentLess\",\n \"Ctrl-]\": \"indentMore\",\n \"Ctrl-U\": \"undoSelection\",\n \"Shift-Ctrl-U\": \"redoSelection\",\n \"Alt-U\": \"redoSelection\",\n \"fallthrough\": \"basic\"\n };\n // Very basic readline/emacs-style bindings, which are standard on Mac.\n keyMap.emacsy = {\n \"Ctrl-F\": \"goCharRight\",\n \"Ctrl-B\": \"goCharLeft\",\n \"Ctrl-P\": \"goLineUp\",\n \"Ctrl-N\": \"goLineDown\",\n \"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;\n\n // KEYMAP DISPATCH\n\n function normalizeKeyName(name) {\n var parts = name.split(/-(?!$)/);\n name = parts[parts.length - 1];\n var alt, ctrl, shift, cmd;\n for (var i = 0; i < parts.length - 1; i++) {\n var mod = parts[i];\n if (/^(cmd|meta|m)$/i.test(mod)) {\n cmd = true;\n } else if (/^a(lt)?$/i.test(mod)) {\n alt = true;\n } else if (/^(c|ctrl|control)$/i.test(mod)) {\n ctrl = true;\n } else if (/^s(hift)?$/i.test(mod)) {\n shift = true;\n } else {\n throw new Error(\"Unrecognized modifier name: \" + mod);\n }\n }\n if (alt) {\n name = \"Alt-\" + name;\n }\n if (ctrl) {\n name = \"Ctrl-\" + name;\n }\n if (cmd) {\n name = \"Cmd-\" + name;\n }\n if (shift) {\n name = \"Shift-\" + name;\n }\n return name;\n }\n\n // This is a kludge to keep keymaps mostly working as raw objects\n // (backwards compatibility) while at the same time support features\n // like normalization and multi-stroke key bindings. It compiles a\n // new normalized keymap, and then updates the old object to reflect\n // this.\n function normalizeKeyMap(keymap) {\n var copy = {};\n for (var keyname in keymap) {\n if (keymap.hasOwnProperty(keyname)) {\n var value = keymap[keyname];\n if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) {\n continue;\n }\n if (value == \"...\") {\n delete keymap[keyname];\n continue;\n }\n var keys = map(keyname.split(\" \"), normalizeKeyName);\n for (var i = 0; i < keys.length; i++) {\n var val = void 0,\n name = void 0;\n if (i == keys.length - 1) {\n name = keys.join(\" \");\n val = value;\n } else {\n name = keys.slice(0, i + 1).join(\" \");\n val = \"...\";\n }\n var prev = copy[name];\n if (!prev) {\n copy[name] = val;\n } else if (prev != val) {\n throw new Error(\"Inconsistent bindings for \" + name);\n }\n }\n delete keymap[keyname];\n }\n }\n for (var prop in copy) {\n keymap[prop] = copy[prop];\n }\n return keymap;\n }\n function lookupKey(key, map, handle, context) {\n map = getKeyMap(map);\n var found = map.call ? map.call(key, context) : map[key];\n if (found === false) {\n return \"nothing\";\n }\n if (found === \"...\") {\n return \"multi\";\n }\n if (found != null && handle(found)) {\n return \"handled\";\n }\n if (map.fallthrough) {\n if (Object.prototype.toString.call(map.fallthrough) != \"[object Array]\") {\n return lookupKey(key, map.fallthrough, handle, context);\n }\n for (var i = 0; i < map.fallthrough.length; i++) {\n var result = lookupKey(key, map.fallthrough[i], handle, context);\n if (result) {\n return result;\n }\n }\n }\n }\n\n // Modifier key presses don't count as 'real' key presses for the\n // purpose of keymap fallthrough.\n function isModifierKey(value) {\n var name = typeof value == \"string\" ? value : keyNames[value.keyCode];\n return name == \"Ctrl\" || name == \"Alt\" || name == \"Shift\" || name == \"Mod\";\n }\n function addModifierNames(name, event, noShift) {\n var base = name;\n if (event.altKey && base != \"Alt\") {\n name = \"Alt-\" + name;\n }\n if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != \"Ctrl\") {\n name = \"Ctrl-\" + name;\n }\n if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != \"Mod\") {\n name = \"Cmd-\" + name;\n }\n if (!noShift && event.shiftKey && base != \"Shift\") {\n name = \"Shift-\" + name;\n }\n return name;\n }\n\n // Look up the name of a key as indicated by an event object.\n function keyName(event, noShift) {\n if (presto && event.keyCode == 34 && event[\"char\"]) {\n return false;\n }\n var name = keyNames[event.keyCode];\n if (name == null || event.altGraphKey) {\n return false;\n }\n // Ctrl-ScrollLock has keyCode 3, same as Ctrl-Pause,\n // so we'll use event.code when available (Chrome 48+, FF 38+, Safari 10.1+)\n if (event.keyCode == 3 && event.code) {\n name = event.code;\n }\n return addModifierNames(name, event, noShift);\n }\n function getKeyMap(val) {\n return typeof val == \"string\" ? keyMap[val] : val;\n }\n\n // Helper for deleting text near the selection(s), used to implement\n // backspace, delete, and similar functionality.\n function deleteNearSelection(cm, compute) {\n var ranges = cm.doc.sel.ranges,\n kill = [];\n // Build up a set of ranges to kill first, merging overlapping\n // ranges.\n for (var i = 0; i < ranges.length; i++) {\n var toKill = compute(ranges[i]);\n while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) {\n var replaced = kill.pop();\n if (cmp(replaced.from, toKill.from) < 0) {\n toKill.from = replaced.from;\n break;\n }\n }\n kill.push(toKill);\n }\n // Next, remove those actual ranges.\n runInOp(cm, function () {\n for (var i = kill.length - 1; i >= 0; i--) {\n replaceRange(cm.doc, \"\", kill[i].from, kill[i].to, \"+delete\");\n }\n ensureCursorVisible(cm);\n });\n }\n function moveCharLogically(line, ch, dir) {\n var target = skipExtendingChars(line.text, ch + dir, dir);\n return target < 0 || target > line.text.length ? null : target;\n }\n function moveLogically(line, start, dir) {\n var ch = moveCharLogically(line, start.ch, dir);\n return ch == null ? null : new Pos(start.line, ch, dir < 0 ? \"after\" : \"before\");\n }\n function endOfLine(visually, cm, lineObj, lineNo, dir) {\n if (visually) {\n if (cm.doc.direction == \"rtl\") {\n dir = -dir;\n }\n var order = getOrder(lineObj, cm.doc.direction);\n if (order) {\n var part = dir < 0 ? lst(order) : order[0];\n var moveInStorageOrder = dir < 0 == (part.level == 1);\n var sticky = moveInStorageOrder ? \"after\" : \"before\";\n var ch;\n // With a wrapped rtl chunk (possibly spanning multiple bidi parts),\n // it could be that the last bidi part is not on the last visual line,\n // since visual lines contain content order-consecutive chunks.\n // Thus, in rtl, we are looking for the first (content-order) character\n // in the rtl chunk that is on the last line (that is, the same line\n // as the last (content-order) character).\n if (part.level > 0 || cm.doc.direction == \"rtl\") {\n var prep = prepareMeasureForLine(cm, lineObj);\n ch = dir < 0 ? lineObj.text.length - 1 : 0;\n var targetTop = measureCharPrepared(cm, prep, ch).top;\n ch = findFirst(function (ch) {\n return measureCharPrepared(cm, prep, ch).top == targetTop;\n }, dir < 0 == (part.level == 1) ? part.from : part.to - 1, ch);\n if (sticky == \"before\") {\n ch = moveCharLogically(lineObj, ch, 1);\n }\n } else {\n ch = dir < 0 ? part.to : part.from;\n }\n return new Pos(lineNo, ch, sticky);\n }\n }\n return new Pos(lineNo, dir < 0 ? lineObj.text.length : 0, dir < 0 ? \"before\" : \"after\");\n }\n function moveVisually(cm, line, start, dir) {\n var bidi = getOrder(line, cm.doc.direction);\n if (!bidi) {\n return moveLogically(line, start, dir);\n }\n if (start.ch >= line.text.length) {\n start.ch = line.text.length;\n start.sticky = \"before\";\n } else if (start.ch <= 0) {\n start.ch = 0;\n start.sticky = \"after\";\n }\n var partPos = getBidiPartAt(bidi, start.ch, start.sticky),\n part = bidi[partPos];\n if (cm.doc.direction == \"ltr\" && part.level % 2 == 0 && (dir > 0 ? part.to > start.ch : part.from < start.ch)) {\n // Case 1: We move within an ltr part in an ltr editor. Even with wrapped lines,\n // nothing interesting happens.\n return moveLogically(line, start, dir);\n }\n var mv = function (pos, dir) {\n return moveCharLogically(line, pos instanceof Pos ? pos.ch : pos, dir);\n };\n var prep;\n var getWrappedLineExtent = function (ch) {\n if (!cm.options.lineWrapping) {\n return {\n begin: 0,\n end: line.text.length\n };\n }\n prep = prep || prepareMeasureForLine(cm, line);\n return wrappedLineExtentChar(cm, line, prep, ch);\n };\n var wrappedLineExtent = getWrappedLineExtent(start.sticky == \"before\" ? mv(start, -1) : start.ch);\n if (cm.doc.direction == \"rtl\" || part.level == 1) {\n var moveInStorageOrder = part.level == 1 == dir < 0;\n var ch = mv(start, moveInStorageOrder ? 1 : -1);\n if (ch != null && (!moveInStorageOrder ? ch >= part.from && ch >= wrappedLineExtent.begin : ch <= part.to && ch <= wrappedLineExtent.end)) {\n // Case 2: We move within an rtl part or in an rtl editor on the same visual line\n var sticky = moveInStorageOrder ? \"before\" : \"after\";\n return new Pos(start.line, ch, sticky);\n }\n }\n\n // Case 3: Could not move within this bidi part in this visual line, so leave\n // the current bidi part\n\n var searchInVisualLine = function (partPos, dir, wrappedLineExtent) {\n var getRes = function (ch, moveInStorageOrder) {\n return moveInStorageOrder ? new Pos(start.line, mv(ch, 1), \"before\") : new Pos(start.line, ch, \"after\");\n };\n for (; partPos >= 0 && partPos < bidi.length; partPos += dir) {\n var part = bidi[partPos];\n var moveInStorageOrder = dir > 0 == (part.level != 1);\n var ch = moveInStorageOrder ? wrappedLineExtent.begin : mv(wrappedLineExtent.end, -1);\n if (part.from <= ch && ch < part.to) {\n return getRes(ch, moveInStorageOrder);\n }\n ch = moveInStorageOrder ? part.from : mv(part.to, -1);\n if (wrappedLineExtent.begin <= ch && ch < wrappedLineExtent.end) {\n return getRes(ch, moveInStorageOrder);\n }\n }\n };\n\n // Case 3a: Look for other bidi parts on the same visual line\n var res = searchInVisualLine(partPos + dir, dir, wrappedLineExtent);\n if (res) {\n return res;\n }\n\n // Case 3b: Look for other bidi parts on the next visual line\n var nextCh = dir > 0 ? wrappedLineExtent.end : mv(wrappedLineExtent.begin, -1);\n if (nextCh != null && !(dir > 0 && nextCh == line.text.length)) {\n res = searchInVisualLine(dir > 0 ? 0 : bidi.length - 1, dir, getWrappedLineExtent(nextCh));\n if (res) {\n return res;\n }\n }\n\n // Case 4: Nowhere to move\n return null;\n }\n\n // Commands are parameter-less actions that can be performed on an\n // editor, mostly used for keybindings.\n var commands = {\n selectAll: selectAll,\n singleSelection: function (cm) {\n return cm.setSelection(cm.getCursor(\"anchor\"), cm.getCursor(\"head\"), sel_dontScroll);\n },\n killLine: function (cm) {\n return deleteNearSelection(cm, function (range) {\n if (range.empty()) {\n var len = getLine(cm.doc, range.head.line).text.length;\n if (range.head.ch == len && range.head.line < cm.lastLine()) {\n return {\n from: range.head,\n to: Pos(range.head.line + 1, 0)\n };\n } else {\n return {\n from: range.head,\n to: Pos(range.head.line, len)\n };\n }\n } else {\n return {\n from: range.from(),\n to: range.to()\n };\n }\n });\n },\n deleteLine: function (cm) {\n return deleteNearSelection(cm, function (range) {\n return {\n from: Pos(range.from().line, 0),\n to: clipPos(cm.doc, Pos(range.to().line + 1, 0))\n };\n });\n },\n delLineLeft: function (cm) {\n return deleteNearSelection(cm, function (range) {\n return {\n from: Pos(range.from().line, 0),\n to: range.from()\n };\n });\n },\n delWrappedLineLeft: function (cm) {\n return deleteNearSelection(cm, function (range) {\n var top = cm.charCoords(range.head, \"div\").top + 5;\n var leftPos = cm.coordsChar({\n left: 0,\n top: top\n }, \"div\");\n return {\n from: leftPos,\n to: range.from()\n };\n });\n },\n delWrappedLineRight: function (cm) {\n return deleteNearSelection(cm, function (range) {\n var top = cm.charCoords(range.head, \"div\").top + 5;\n var rightPos = cm.coordsChar({\n left: cm.display.lineDiv.offsetWidth + 100,\n top: top\n }, \"div\");\n return {\n from: range.from(),\n to: rightPos\n };\n });\n },\n undo: function (cm) {\n return cm.undo();\n },\n redo: function (cm) {\n return cm.redo();\n },\n undoSelection: function (cm) {\n return cm.undoSelection();\n },\n redoSelection: function (cm) {\n return cm.redoSelection();\n },\n goDocStart: function (cm) {\n return cm.extendSelection(Pos(cm.firstLine(), 0));\n },\n goDocEnd: function (cm) {\n return cm.extendSelection(Pos(cm.lastLine()));\n },\n goLineStart: function (cm) {\n return cm.extendSelectionsBy(function (range) {\n return lineStart(cm, range.head.line);\n }, {\n origin: \"+move\",\n bias: 1\n });\n },\n goLineStartSmart: function (cm) {\n return cm.extendSelectionsBy(function (range) {\n return lineStartSmart(cm, range.head);\n }, {\n origin: \"+move\",\n bias: 1\n });\n },\n goLineEnd: function (cm) {\n return cm.extendSelectionsBy(function (range) {\n return lineEnd(cm, range.head.line);\n }, {\n origin: \"+move\",\n bias: -1\n });\n },\n goLineRight: function (cm) {\n return cm.extendSelectionsBy(function (range) {\n var top = cm.cursorCoords(range.head, \"div\").top + 5;\n return cm.coordsChar({\n left: cm.display.lineDiv.offsetWidth + 100,\n top: top\n }, \"div\");\n }, sel_move);\n },\n goLineLeft: function (cm) {\n return cm.extendSelectionsBy(function (range) {\n var top = cm.cursorCoords(range.head, \"div\").top + 5;\n return cm.coordsChar({\n left: 0,\n top: top\n }, \"div\");\n }, sel_move);\n },\n goLineLeftSmart: function (cm) {\n return cm.extendSelectionsBy(function (range) {\n var top = cm.cursorCoords(range.head, \"div\").top + 5;\n var pos = cm.coordsChar({\n left: 0,\n top: top\n }, \"div\");\n if (pos.ch < cm.getLine(pos.line).search(/\\S/)) {\n return lineStartSmart(cm, range.head);\n }\n return pos;\n }, sel_move);\n },\n goLineUp: function (cm) {\n return cm.moveV(-1, \"line\");\n },\n goLineDown: function (cm) {\n return cm.moveV(1, \"line\");\n },\n goPageUp: function (cm) {\n return cm.moveV(-1, \"page\");\n },\n goPageDown: function (cm) {\n return cm.moveV(1, \"page\");\n },\n goCharLeft: function (cm) {\n return cm.moveH(-1, \"char\");\n },\n goCharRight: function (cm) {\n return cm.moveH(1, \"char\");\n },\n goColumnLeft: function (cm) {\n return cm.moveH(-1, \"column\");\n },\n goColumnRight: function (cm) {\n return cm.moveH(1, \"column\");\n },\n goWordLeft: function (cm) {\n return cm.moveH(-1, \"word\");\n },\n goGroupRight: function (cm) {\n return cm.moveH(1, \"group\");\n },\n goGroupLeft: function (cm) {\n return cm.moveH(-1, \"group\");\n },\n goWordRight: function (cm) {\n return cm.moveH(1, \"word\");\n },\n delCharBefore: function (cm) {\n return cm.deleteH(-1, \"char\");\n },\n delCharAfter: function (cm) {\n return cm.deleteH(1, \"char\");\n },\n delWordBefore: function (cm) {\n return cm.deleteH(-1, \"word\");\n },\n delWordAfter: function (cm) {\n return cm.deleteH(1, \"word\");\n },\n delGroupBefore: function (cm) {\n return cm.deleteH(-1, \"group\");\n },\n delGroupAfter: function (cm) {\n return cm.deleteH(1, \"group\");\n },\n indentAuto: function (cm) {\n return cm.indentSelection(\"smart\");\n },\n indentMore: function (cm) {\n return cm.indentSelection(\"add\");\n },\n indentLess: function (cm) {\n return cm.indentSelection(\"subtract\");\n },\n insertTab: function (cm) {\n return cm.replaceSelection(\"\\t\");\n },\n insertSoftTab: function (cm) {\n var spaces = [],\n ranges = cm.listSelections(),\n tabSize = cm.options.tabSize;\n for (var i = 0; i < ranges.length; i++) {\n var pos = ranges[i].from();\n var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize);\n spaces.push(spaceStr(tabSize - col % tabSize));\n }\n cm.replaceSelections(spaces);\n },\n defaultTab: function (cm) {\n if (cm.somethingSelected()) {\n cm.indentSelection(\"add\");\n } else {\n cm.execCommand(\"insertTab\");\n }\n },\n // Swap the two chars left and right of each selection's head.\n // Move cursor behind the two swapped characters afterwards.\n //\n // Doesn't consider line feeds a character.\n // Doesn't scan more than one line above to find a character.\n // Doesn't do anything on an empty line.\n // Doesn't do anything with non-empty selections.\n transposeChars: function (cm) {\n return runInOp(cm, function () {\n var ranges = cm.listSelections(),\n newSel = [];\n for (var i = 0; i < ranges.length; i++) {\n if (!ranges[i].empty()) {\n continue;\n }\n var cur = ranges[i].head,\n line = getLine(cm.doc, cur.line).text;\n if (line) {\n if (cur.ch == line.length) {\n cur = new Pos(cur.line, cur.ch - 1);\n }\n if (cur.ch > 0) {\n cur = new Pos(cur.line, cur.ch + 1);\n cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2), Pos(cur.line, cur.ch - 2), cur, \"+transpose\");\n } else if (cur.line > cm.doc.first) {\n var prev = getLine(cm.doc, cur.line - 1).text;\n if (prev) {\n cur = new Pos(cur.line, 1);\n cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() + prev.charAt(prev.length - 1), Pos(cur.line - 1, prev.length - 1), cur, \"+transpose\");\n }\n }\n }\n newSel.push(new Range(cur, cur));\n }\n cm.setSelections(newSel);\n });\n },\n newlineAndIndent: function (cm) {\n return runInOp(cm, function () {\n var sels = cm.listSelections();\n for (var i = sels.length - 1; i >= 0; i--) {\n cm.replaceRange(cm.doc.lineSeparator(), sels[i].anchor, sels[i].head, \"+input\");\n }\n sels = cm.listSelections();\n for (var i$1 = 0; i$1 < sels.length; i$1++) {\n cm.indentLine(sels[i$1].from().line, null, true);\n }\n ensureCursorVisible(cm);\n });\n },\n openLine: function (cm) {\n return cm.replaceSelection(\"\\n\", \"start\");\n },\n toggleOverwrite: function (cm) {\n return cm.toggleOverwrite();\n }\n };\n function lineStart(cm, lineN) {\n var line = getLine(cm.doc, lineN);\n var visual = visualLine(line);\n if (visual != line) {\n lineN = lineNo(visual);\n }\n return endOfLine(true, cm, visual, lineN, 1);\n }\n function lineEnd(cm, lineN) {\n var line = getLine(cm.doc, lineN);\n var visual = visualLineEnd(line);\n if (visual != line) {\n lineN = lineNo(visual);\n }\n return endOfLine(true, cm, line, lineN, -1);\n }\n function lineStartSmart(cm, pos) {\n var start = lineStart(cm, pos.line);\n var line = getLine(cm.doc, start.line);\n var order = getOrder(line, cm.doc.direction);\n if (!order || order[0].level == 0) {\n var firstNonWS = Math.max(start.ch, line.text.search(/\\S/));\n var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch;\n return Pos(start.line, inWS ? 0 : firstNonWS, start.sticky);\n }\n return start;\n }\n\n // Run a handler that was bound to a key.\n function doHandleBinding(cm, bound, dropShift) {\n if (typeof bound == \"string\") {\n bound = commands[bound];\n if (!bound) {\n return false;\n }\n }\n // Ensure previous input has been read, so that the handler sees a\n // consistent view of the document\n cm.display.input.ensurePolled();\n var prevShift = cm.display.shift,\n done = false;\n try {\n if (cm.isReadOnly()) {\n cm.state.suppressEdits = true;\n }\n if (dropShift) {\n cm.display.shift = false;\n }\n done = bound(cm) != Pass;\n } finally {\n cm.display.shift = prevShift;\n cm.state.suppressEdits = false;\n }\n return done;\n }\n function lookupKeyForEditor(cm, name, handle) {\n for (var i = 0; i < cm.state.keyMaps.length; i++) {\n var result = lookupKey(name, cm.state.keyMaps[i], handle, cm);\n if (result) {\n return result;\n }\n }\n return cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm) || lookupKey(name, cm.options.keyMap, handle, cm);\n }\n\n // Note that, despite the name, this function is also used to check\n // for bound mouse clicks.\n\n var stopSeq = new Delayed();\n function dispatchKey(cm, name, e, handle) {\n var seq = cm.state.keySeq;\n if (seq) {\n if (isModifierKey(name)) {\n return \"handled\";\n }\n if (/\\'$/.test(name)) {\n cm.state.keySeq = null;\n } else {\n stopSeq.set(50, function () {\n if (cm.state.keySeq == seq) {\n cm.state.keySeq = null;\n cm.display.input.reset();\n }\n });\n }\n if (dispatchKeyInner(cm, seq + \" \" + name, e, handle)) {\n return true;\n }\n }\n return dispatchKeyInner(cm, name, e, handle);\n }\n function dispatchKeyInner(cm, name, e, handle) {\n var result = lookupKeyForEditor(cm, name, handle);\n if (result == \"multi\") {\n cm.state.keySeq = name;\n }\n if (result == \"handled\") {\n signalLater(cm, \"keyHandled\", cm, name, e);\n }\n if (result == \"handled\" || result == \"multi\") {\n e_preventDefault(e);\n restartBlink(cm);\n }\n return !!result;\n }\n\n // Handle a key from the keydown event.\n function handleKeyBinding(cm, e) {\n var name = keyName(e, true);\n if (!name) {\n return false;\n }\n if (e.shiftKey && !cm.state.keySeq) {\n // First try to resolve full name (including 'Shift-'). Failing\n // that, see if there is a cursor-motion command (starting with\n // 'go') bound to the keyname without 'Shift-'.\n return dispatchKey(cm, \"Shift-\" + name, e, function (b) {\n return doHandleBinding(cm, b, true);\n }) || dispatchKey(cm, name, e, function (b) {\n if (typeof b == \"string\" ? /^go[A-Z]/.test(b) : b.motion) {\n return doHandleBinding(cm, b);\n }\n });\n } else {\n return dispatchKey(cm, name, e, function (b) {\n return doHandleBinding(cm, b);\n });\n }\n }\n\n // Handle a key from the keypress event\n function handleCharBinding(cm, e, ch) {\n return dispatchKey(cm, \"'\" + ch + \"'\", e, function (b) {\n return doHandleBinding(cm, b, true);\n });\n }\n var lastStoppedKey = null;\n function onKeyDown(e) {\n var cm = this;\n if (e.target && e.target != cm.display.input.getField()) {\n return;\n }\n cm.curOp.focus = activeElt();\n if (signalDOMEvent(cm, e)) {\n return;\n }\n // IE does strange things with escape.\n if (ie && ie_version < 11 && e.keyCode == 27) {\n e.returnValue = false;\n }\n var code = e.keyCode;\n cm.display.shift = code == 16 || e.shiftKey;\n var handled = handleKeyBinding(cm, e);\n if (presto) {\n lastStoppedKey = handled ? code : null;\n // Opera has no cut event... we try to at least catch the key combo\n if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey)) {\n cm.replaceSelection(\"\", null, \"cut\");\n }\n }\n if (gecko && !mac && !handled && code == 46 && e.shiftKey && !e.ctrlKey && document.execCommand) {\n document.execCommand(\"cut\");\n }\n\n // Turn mouse into crosshair when Alt is held on Mac.\n if (code == 18 && !/\\bCodeMirror-crosshair\\b/.test(cm.display.lineDiv.className)) {\n showCrossHair(cm);\n }\n }\n function showCrossHair(cm) {\n var lineDiv = cm.display.lineDiv;\n addClass(lineDiv, \"CodeMirror-crosshair\");\n function up(e) {\n if (e.keyCode == 18 || !e.altKey) {\n rmClass(lineDiv, \"CodeMirror-crosshair\");\n off(document, \"keyup\", up);\n off(document, \"mouseover\", up);\n }\n }\n on(document, \"keyup\", up);\n on(document, \"mouseover\", up);\n }\n function onKeyUp(e) {\n if (e.keyCode == 16) {\n this.doc.sel.shift = false;\n }\n signalDOMEvent(this, e);\n }\n function onKeyPress(e) {\n var cm = this;\n if (e.target && e.target != cm.display.input.getField()) {\n return;\n }\n if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) {\n return;\n }\n var keyCode = e.keyCode,\n charCode = e.charCode;\n if (presto && keyCode == lastStoppedKey) {\n lastStoppedKey = null;\n e_preventDefault(e);\n return;\n }\n if (presto && (!e.which || e.which < 10) && handleKeyBinding(cm, e)) {\n return;\n }\n var ch = String.fromCharCode(charCode == null ? keyCode : charCode);\n // Some browsers fire keypress events for backspace\n if (ch == \"\\x08\") {\n return;\n }\n if (handleCharBinding(cm, e, ch)) {\n return;\n }\n cm.display.input.onKeyPress(e);\n }\n var DOUBLECLICK_DELAY = 400;\n var PastClick = function (time, pos, button) {\n this.time = time;\n this.pos = pos;\n this.button = button;\n };\n PastClick.prototype.compare = function (time, pos, button) {\n return this.time + DOUBLECLICK_DELAY > time && cmp(pos, this.pos) == 0 && button == this.button;\n };\n var lastClick, lastDoubleClick;\n function clickRepeat(pos, button) {\n var now = +new Date();\n if (lastDoubleClick && lastDoubleClick.compare(now, pos, button)) {\n lastClick = lastDoubleClick = null;\n return \"triple\";\n } else if (lastClick && lastClick.compare(now, pos, button)) {\n lastDoubleClick = new PastClick(now, pos, button);\n lastClick = null;\n return \"double\";\n } else {\n lastClick = new PastClick(now, pos, button);\n lastDoubleClick = null;\n return \"single\";\n }\n }\n\n // A mouse down can be a single click, double click, triple click,\n // start of selection drag, start of text drag, new cursor\n // (ctrl-click), rectangle drag (alt-drag), or xwin\n // middle-click-paste. Or it might be a click on something we should\n // not interfere with, such as a scrollbar or widget.\n function onMouseDown(e) {\n var cm = this,\n display = cm.display;\n if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) {\n return;\n }\n display.input.ensurePolled();\n display.shift = e.shiftKey;\n if (eventInWidget(display, e)) {\n if (!webkit) {\n // Briefly turn off draggability, to allow widgets to do\n // normal dragging things.\n display.scroller.draggable = false;\n setTimeout(function () {\n return display.scroller.draggable = true;\n }, 100);\n }\n return;\n }\n if (clickInGutter(cm, e)) {\n return;\n }\n var pos = posFromMouse(cm, e),\n button = e_button(e),\n repeat = pos ? clickRepeat(pos, button) : \"single\";\n window.focus();\n\n // #3261: make sure, that we're not starting a second selection\n if (button == 1 && cm.state.selectingText) {\n cm.state.selectingText(e);\n }\n if (pos && handleMappedButton(cm, button, pos, repeat, e)) {\n return;\n }\n if (button == 1) {\n if (pos) {\n leftButtonDown(cm, pos, repeat, e);\n } else if (e_target(e) == display.scroller) {\n e_preventDefault(e);\n }\n } else if (button == 2) {\n if (pos) {\n extendSelection(cm.doc, pos);\n }\n setTimeout(function () {\n return display.input.focus();\n }, 20);\n } else if (button == 3) {\n if (captureRightClick) {\n cm.display.input.onContextMenu(e);\n } else {\n delayBlurEvent(cm);\n }\n }\n }\n function handleMappedButton(cm, button, pos, repeat, event) {\n var name = \"Click\";\n if (repeat == \"double\") {\n name = \"Double\" + name;\n } else if (repeat == \"triple\") {\n name = \"Triple\" + name;\n }\n name = (button == 1 ? \"Left\" : button == 2 ? \"Middle\" : \"Right\") + name;\n return dispatchKey(cm, addModifierNames(name, event), event, function (bound) {\n if (typeof bound == \"string\") {\n bound = commands[bound];\n }\n if (!bound) {\n return false;\n }\n var done = false;\n try {\n if (cm.isReadOnly()) {\n cm.state.suppressEdits = true;\n }\n done = bound(cm, pos) != Pass;\n } finally {\n cm.state.suppressEdits = false;\n }\n return done;\n });\n }\n function configureMouse(cm, repeat, event) {\n var option = cm.getOption(\"configureMouse\");\n var value = option ? option(cm, repeat, event) : {};\n if (value.unit == null) {\n var rect = chromeOS ? event.shiftKey && event.metaKey : event.altKey;\n value.unit = rect ? \"rectangle\" : repeat == \"single\" ? \"char\" : repeat == \"double\" ? \"word\" : \"line\";\n }\n if (value.extend == null || cm.doc.extend) {\n value.extend = cm.doc.extend || event.shiftKey;\n }\n if (value.addNew == null) {\n value.addNew = mac ? event.metaKey : event.ctrlKey;\n }\n if (value.moveOnDrag == null) {\n value.moveOnDrag = !(mac ? event.altKey : event.ctrlKey);\n }\n return value;\n }\n function leftButtonDown(cm, pos, repeat, event) {\n if (ie) {\n setTimeout(bind(ensureFocus, cm), 0);\n } else {\n cm.curOp.focus = activeElt();\n }\n var behavior = configureMouse(cm, repeat, event);\n var sel = cm.doc.sel,\n contained;\n if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() && repeat == \"single\" && (contained = sel.contains(pos)) > -1 && (cmp((contained = sel.ranges[contained]).from(), pos) < 0 || pos.xRel > 0) && (cmp(contained.to(), pos) > 0 || pos.xRel < 0)) {\n leftButtonStartDrag(cm, event, pos, behavior);\n } else {\n leftButtonSelect(cm, event, pos, behavior);\n }\n }\n\n // Start a text drag. When it ends, see if any dragging actually\n // happen, and treat as a click if it didn't.\n function leftButtonStartDrag(cm, event, pos, behavior) {\n var display = cm.display,\n moved = false;\n var dragEnd = operation(cm, function (e) {\n if (webkit) {\n display.scroller.draggable = false;\n }\n cm.state.draggingText = false;\n off(display.wrapper.ownerDocument, \"mouseup\", dragEnd);\n off(display.wrapper.ownerDocument, \"mousemove\", mouseMove);\n off(display.scroller, \"dragstart\", dragStart);\n off(display.scroller, \"drop\", dragEnd);\n if (!moved) {\n e_preventDefault(e);\n if (!behavior.addNew) {\n extendSelection(cm.doc, pos, null, null, behavior.extend);\n }\n // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081)\n if (webkit && !safari || ie && ie_version == 9) {\n setTimeout(function () {\n display.wrapper.ownerDocument.body.focus({\n preventScroll: true\n });\n display.input.focus();\n }, 20);\n } else {\n display.input.focus();\n }\n }\n });\n var mouseMove = function (e2) {\n moved = moved || Math.abs(event.clientX - e2.clientX) + Math.abs(event.clientY - e2.clientY) >= 10;\n };\n var dragStart = function () {\n return moved = true;\n };\n // Let the drag handler handle this.\n if (webkit) {\n display.scroller.draggable = true;\n }\n cm.state.draggingText = dragEnd;\n dragEnd.copy = !behavior.moveOnDrag;\n // IE's approach to draggable\n if (display.scroller.dragDrop) {\n display.scroller.dragDrop();\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 function rangeForUnit(cm, pos, unit) {\n if (unit == \"char\") {\n return new Range(pos, pos);\n }\n if (unit == \"word\") {\n return cm.findWordAt(pos);\n }\n if (unit == \"line\") {\n return new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0)));\n }\n var result = unit(cm, pos);\n return new Range(result.from, result.to);\n }\n\n // Normal selection, as opposed to text dragging.\n function leftButtonSelect(cm, event, start, behavior) {\n 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 if (behavior.addNew && !behavior.extend) {\n ourIndex = doc.sel.contains(start);\n if (ourIndex > -1) {\n ourRange = ranges[ourIndex];\n } else {\n ourRange = new Range(start, start);\n }\n } else {\n ourRange = doc.sel.primary();\n ourIndex = doc.sel.primIndex;\n }\n if (behavior.unit == \"rectangle\") {\n if (!behavior.addNew) {\n ourRange = new Range(start, start);\n }\n start = posFromMouse(cm, event, true, true);\n ourIndex = -1;\n } else {\n var range = rangeForUnit(cm, start, behavior.unit);\n if (behavior.extend) {\n ourRange = extendRange(ourRange, range.anchor, range.head, behavior.extend);\n } else {\n ourRange = range;\n }\n }\n if (!behavior.addNew) {\n ourIndex = 0;\n setSelection(doc, 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 var lastPos = start;\n function extendTo(pos) {\n if (cmp(lastPos, pos) == 0) {\n return;\n }\n lastPos = pos;\n if (behavior.unit == \"rectangle\") {\n var ranges = [],\n tabSize = cm.options.tabSize;\n var startCol = countColumn(getLine(doc, 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 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 if (left == right) {\n ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos)));\n } else if (text.length > leftPos) {\n ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize))));\n }\n }\n if (!ranges.length) {\n ranges.push(new Range(start, start));\n }\n setSelection(doc, normalizeSelection(cm, startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex), {\n origin: \"*mouse\",\n scroll: false\n });\n cm.scrollIntoView(pos);\n } else {\n var oldRange = ourRange;\n var range = rangeForUnit(cm, pos, behavior.unit);\n var anchor = oldRange.anchor,\n head;\n if (cmp(range.anchor, anchor) > 0) {\n head = range.head;\n anchor = minPos(oldRange.from(), range.anchor);\n } else {\n head = range.anchor;\n anchor = maxPos(oldRange.to(), range.head);\n }\n var ranges$1 = startSel.ranges.slice(0);\n ranges$1[ourIndex] = bidiSimplify(cm, new Range(clipPos(doc, anchor), head));\n setSelection(doc, normalizeSelection(cm, ranges$1, ourIndex), sel_mouse);\n }\n }\n var editorSize = display.wrapper.getBoundingClientRect();\n // Used to ensure timeout re-tries don't fire when another extend\n // happened in the meantime (clearTimeout isn't reliable -- at\n // least on Chrome, the timeouts still happen even when cleared,\n // if the clear happens after their scheduled firing time).\n var counter = 0;\n function extend(e) {\n var curCount = ++counter;\n var cur = posFromMouse(cm, e, true, behavior.unit == \"rectangle\");\n if (!cur) {\n return;\n }\n if (cmp(cur, lastPos) != 0) {\n cm.curOp.focus = activeElt();\n extendTo(cur);\n var visible = visibleLines(display, doc);\n if (cur.line >= visible.to || cur.line < visible.from) {\n setTimeout(operation(cm, function () {\n if (counter == curCount) {\n extend(e);\n }\n }), 150);\n }\n } else {\n var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0;\n if (outside) {\n setTimeout(operation(cm, function () {\n if (counter != curCount) {\n return;\n }\n display.scroller.scrollTop += outside;\n extend(e);\n }), 50);\n }\n }\n }\n function done(e) {\n cm.state.selectingText = false;\n counter = Infinity;\n // If e is null or undefined we interpret this as someone trying\n // to explicitly cancel the selection rather than the user\n // letting go of the mouse button.\n if (e) {\n e_preventDefault(e);\n display.input.focus();\n }\n off(display.wrapper.ownerDocument, \"mousemove\", move);\n off(display.wrapper.ownerDocument, \"mouseup\", up);\n doc.history.lastSelOrigin = null;\n }\n var move = operation(cm, function (e) {\n if (e.buttons === 0 || !e_button(e)) {\n done(e);\n } else {\n extend(e);\n }\n });\n var up = operation(cm, done);\n cm.state.selectingText = up;\n on(display.wrapper.ownerDocument, \"mousemove\", move);\n on(display.wrapper.ownerDocument, \"mouseup\", up);\n }\n\n // Used when mouse-selecting to adjust the anchor to the proper side\n // of a bidi jump depending on the visual position of the head.\n function bidiSimplify(cm, range) {\n var anchor = range.anchor;\n var head = range.head;\n var anchorLine = getLine(cm.doc, anchor.line);\n if (cmp(anchor, head) == 0 && anchor.sticky == head.sticky) {\n return range;\n }\n var order = getOrder(anchorLine);\n if (!order) {\n return range;\n }\n var index = getBidiPartAt(order, anchor.ch, anchor.sticky),\n part = order[index];\n if (part.from != anchor.ch && part.to != anchor.ch) {\n return range;\n }\n var boundary = index + (part.from == anchor.ch == (part.level != 1) ? 0 : 1);\n if (boundary == 0 || boundary == order.length) {\n return range;\n }\n\n // Compute the relative visual position of the head compared to the\n // anchor (<0 is to the left, >0 to the right)\n var leftSide;\n if (head.line != anchor.line) {\n leftSide = (head.line - anchor.line) * (cm.doc.direction == \"ltr\" ? 1 : -1) > 0;\n } else {\n var headIndex = getBidiPartAt(order, head.ch, head.sticky);\n var dir = headIndex - index || (head.ch - anchor.ch) * (part.level == 1 ? -1 : 1);\n if (headIndex == boundary - 1 || headIndex == boundary) {\n leftSide = dir < 0;\n } else {\n leftSide = dir > 0;\n }\n }\n var usePart = order[boundary + (leftSide ? -1 : 0)];\n var from = leftSide == (usePart.level == 1);\n var ch = from ? usePart.from : usePart.to,\n sticky = from ? \"after\" : \"before\";\n return anchor.ch == ch && anchor.sticky == sticky ? range : new Range(new Pos(anchor.line, ch, sticky), head);\n }\n\n // Determines whether an event happened in the gutter, and fires the\n // handlers for the corresponding event.\n function gutterEvent(cm, e, type, prevent) {\n var mX, mY;\n if (e.touches) {\n mX = e.touches[0].clientX;\n mY = e.touches[0].clientY;\n } else {\n try {\n mX = e.clientX;\n mY = e.clientY;\n } catch (e$1) {\n return false;\n }\n }\n if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) {\n return false;\n }\n if (prevent) {\n e_preventDefault(e);\n }\n var display = cm.display;\n var lineBox = display.lineDiv.getBoundingClientRect();\n if (mY > lineBox.bottom || !hasHandler(cm, type)) {\n return e_defaultPrevented(e);\n }\n mY -= lineBox.top - display.viewOffset;\n for (var i = 0; i < cm.display.gutterSpecs.length; ++i) {\n var g = display.gutters.childNodes[i];\n if (g && g.getBoundingClientRect().right >= mX) {\n var line = lineAtHeight(cm.doc, mY);\n var gutter = cm.display.gutterSpecs[i];\n signal(cm, type, cm, line, gutter.className, e);\n return e_defaultPrevented(e);\n }\n }\n }\n function clickInGutter(cm, e) {\n return gutterEvent(cm, e, \"gutterClick\", true);\n }\n\n // CONTEXT MENU HANDLING\n\n // To make the context menu work, we need to briefly unhide the\n // textarea (making it as unobtrusive as possible) to let the\n // right-click take effect on it.\n function onContextMenu(cm, e) {\n if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) {\n return;\n }\n if (signalDOMEvent(cm, e, \"contextmenu\")) {\n return;\n }\n if (!captureRightClick) {\n cm.display.input.onContextMenu(e);\n }\n }\n function contextMenuInGutter(cm, e) {\n if (!hasHandler(cm, \"gutterContextMenu\")) {\n return false;\n }\n return gutterEvent(cm, e, \"gutterContextMenu\", false);\n }\n function themeChanged(cm) {\n cm.display.wrapper.className = cm.display.wrapper.className.replace(/\\s*cm-s-\\S+/g, \"\") + cm.options.theme.replace(/(^|\\s)\\s*/g, \" cm-s-\");\n clearCaches(cm);\n }\n var Init = {\n toString: function () {\n return \"CodeMirror.Init\";\n }\n };\n var defaults = {};\n var optionHandlers = {};\n function defineOptions(CodeMirror) {\n var optionHandlers = CodeMirror.optionHandlers;\n function option(name, deflt, handle, notOnInit) {\n CodeMirror.defaults[name] = deflt;\n if (handle) {\n optionHandlers[name] = notOnInit ? function (cm, val, old) {\n if (old != Init) {\n handle(cm, val, old);\n }\n } : handle;\n }\n }\n CodeMirror.defineOption = option;\n\n // Passed to option handlers when there is no old value.\n CodeMirror.Init = Init;\n\n // These two are, on init, called from the constructor because they\n // have to be initialized before the editor can start at all.\n option(\"value\", \"\", function (cm, val) {\n return cm.setValue(val);\n }, true);\n option(\"mode\", null, function (cm, val) {\n cm.doc.modeOption = val;\n loadMode(cm);\n }, true);\n option(\"indentUnit\", 2, loadMode, true);\n option(\"indentWithTabs\", false);\n option(\"smartIndent\", true);\n option(\"tabSize\", 4, function (cm) {\n resetModeState(cm);\n clearCaches(cm);\n regChange(cm);\n }, true);\n option(\"lineSeparator\", null, function (cm, val) {\n cm.doc.lineSep = val;\n if (!val) {\n return;\n }\n var newBreaks = [],\n lineNo = cm.doc.first;\n cm.doc.iter(function (line) {\n for (var pos = 0;;) {\n var found = line.text.indexOf(val, pos);\n if (found == -1) {\n break;\n }\n pos = found + val.length;\n newBreaks.push(Pos(lineNo, found));\n }\n lineNo++;\n });\n for (var i = newBreaks.length - 1; i >= 0; i--) {\n replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length));\n }\n });\n option(\"specialChars\", /[\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u061c\\u200b-\\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 if (old != Init) {\n cm.refresh();\n }\n });\n option(\"specialCharPlaceholder\", defaultSpecialCharPlaceholder, function (cm) {\n return cm.refresh();\n }, true);\n option(\"electricChars\", true);\n option(\"inputStyle\", mobile ? \"contenteditable\" : \"textarea\", function () {\n throw new Error(\"inputStyle can not (yet) be changed in a running editor\"); // FIXME\n }, true);\n option(\"spellcheck\", false, function (cm, val) {\n return cm.getInputField().spellcheck = val;\n }, true);\n option(\"autocorrect\", false, function (cm, val) {\n return cm.getInputField().autocorrect = val;\n }, true);\n option(\"autocapitalize\", false, function (cm, val) {\n return cm.getInputField().autocapitalize = val;\n }, true);\n option(\"rtlMoveVisually\", !windows);\n option(\"wholeLineUpdateBefore\", true);\n option(\"theme\", \"default\", function (cm) {\n themeChanged(cm);\n updateGutters(cm);\n }, true);\n option(\"keyMap\", \"default\", function (cm, val, old) {\n var next = getKeyMap(val);\n var prev = old != Init && getKeyMap(old);\n if (prev && prev.detach) {\n prev.detach(cm, next);\n }\n if (next.attach) {\n next.attach(cm, prev || null);\n }\n });\n option(\"extraKeys\", null);\n option(\"configureMouse\", null);\n option(\"lineWrapping\", false, wrappingChanged, true);\n option(\"gutters\", [], function (cm, val) {\n cm.display.gutterSpecs = getGutters(val, cm.options.lineNumbers);\n updateGutters(cm);\n }, true);\n option(\"fixedGutter\", true, function (cm, val) {\n cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + \"px\" : \"0\";\n cm.refresh();\n }, true);\n option(\"coverGutterNextToScrollbar\", false, function (cm) {\n return updateScrollbars(cm);\n }, true);\n option(\"scrollbarStyle\", \"native\", function (cm) {\n initScrollbars(cm);\n updateScrollbars(cm);\n cm.display.scrollbars.setScrollTop(cm.doc.scrollTop);\n cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft);\n }, true);\n option(\"lineNumbers\", false, function (cm, val) {\n cm.display.gutterSpecs = getGutters(cm.options.gutters, val);\n updateGutters(cm);\n }, true);\n option(\"firstLineNumber\", 1, updateGutters, true);\n option(\"lineNumberFormatter\", function (integer) {\n return integer;\n }, updateGutters, true);\n option(\"showCursorWhenSelecting\", false, updateSelection, true);\n option(\"resetSelectionOnContextMenu\", true);\n option(\"lineWiseCopyCut\", true);\n option(\"pasteLinesPerSelection\", true);\n option(\"selectionsMayTouch\", false);\n option(\"readOnly\", false, function (cm, val) {\n if (val == \"nocursor\") {\n onBlur(cm);\n cm.display.input.blur();\n }\n cm.display.input.readOnlyChanged(val);\n });\n option(\"screenReaderLabel\", null, function (cm, val) {\n val = val === '' ? null : val;\n cm.display.input.screenReaderLabelChanged(val);\n });\n option(\"disableInput\", false, function (cm, val) {\n if (!val) {\n cm.display.input.reset();\n }\n }, true);\n option(\"dragDrop\", true, dragDropChanged);\n option(\"allowDropFileTypes\", null);\n option(\"cursorBlinkRate\", 530);\n option(\"cursorScrollMargin\", 0);\n option(\"cursorHeight\", 1, updateSelection, true);\n option(\"singleCursorHeightPerLine\", true, updateSelection, true);\n option(\"workTime\", 100);\n option(\"workDelay\", 100);\n option(\"flattenSpans\", true, resetModeState, true);\n option(\"addModeClass\", false, resetModeState, true);\n option(\"pollInterval\", 100);\n option(\"undoDepth\", 200, function (cm, val) {\n return cm.doc.history.undoDepth = val;\n });\n option(\"historyEventDelay\", 1250);\n option(\"viewportMargin\", 10, function (cm) {\n return cm.refresh();\n }, true);\n option(\"maxHighlightLength\", 10000, resetModeState, true);\n option(\"moveInputWithCursor\", true, function (cm, val) {\n if (!val) {\n cm.display.input.resetPosition();\n }\n });\n option(\"tabindex\", null, function (cm, val) {\n return cm.display.input.getField().tabIndex = val || \"\";\n });\n option(\"autofocus\", null);\n option(\"direction\", \"ltr\", function (cm, val) {\n return cm.doc.setDirection(val);\n }, true);\n option(\"phrases\", null);\n }\n function dragDropChanged(cm, value, old) {\n var wasOn = old && old != Init;\n if (!value != !wasOn) {\n var funcs = cm.display.dragFunctions;\n var toggle = value ? on : off;\n toggle(cm.display.scroller, \"dragstart\", funcs.start);\n toggle(cm.display.scroller, \"dragenter\", funcs.enter);\n toggle(cm.display.scroller, \"dragover\", funcs.over);\n toggle(cm.display.scroller, \"dragleave\", funcs.leave);\n toggle(cm.display.scroller, \"drop\", funcs.drop);\n }\n }\n function wrappingChanged(cm) {\n if (cm.options.lineWrapping) {\n addClass(cm.display.wrapper, \"CodeMirror-wrap\");\n cm.display.sizer.style.minWidth = \"\";\n cm.display.sizerWidth = null;\n } else {\n rmClass(cm.display.wrapper, \"CodeMirror-wrap\");\n findMaxLine(cm);\n }\n estimateLineHeights(cm);\n regChange(cm);\n clearCaches(cm);\n setTimeout(function () {\n return updateScrollbars(cm);\n }, 100);\n }\n\n // A CodeMirror instance represents an editor. This is the object\n // that user code is usually dealing with.\n\n function CodeMirror(place, options) {\n var this$1 = this;\n if (!(this instanceof CodeMirror)) {\n return new CodeMirror(place, options);\n }\n this.options = options = options ? copyObj(options) : {};\n // Determine effective options based on given values and defaults.\n copyObj(defaults, options, false);\n var doc = options.value;\n if (typeof doc == \"string\") {\n doc = new Doc(doc, options.mode, null, options.lineSeparator, options.direction);\n } else if (options.mode) {\n doc.modeOption = options.mode;\n }\n this.doc = doc;\n var input = new CodeMirror.inputStyles[options.inputStyle](this);\n var display = this.display = new Display(place, doc, input, options);\n display.wrapper.CodeMirror = this;\n themeChanged(this);\n if (options.lineWrapping) {\n this.display.wrapper.className += \" CodeMirror-wrap\";\n }\n initScrollbars(this);\n this.state = {\n keyMaps: [],\n // stores maps added by addKeyMap\n overlays: [],\n // highlighting overlays, as added by addOverlay\n modeGen: 0,\n // bumped when mode/overlay changes, used to invalidate highlighting info\n overwrite: false,\n delayingBlurEvent: false,\n focused: false,\n suppressEdits: false,\n // used to disable editing during key handlers when in readOnly mode\n pasteIncoming: -1,\n cutIncoming: -1,\n // help recognize paste/cut edits in input.poll\n selectingText: false,\n draggingText: false,\n highlight: new Delayed(),\n // stores highlight worker timeout\n keySeq: null,\n // Unfinished key sequence\n specialChars: null\n };\n if (options.autofocus && !mobile) {\n display.input.focus();\n }\n\n // Override magic textarea content restore that IE sometimes does\n // on our hidden textarea on reload\n if (ie && ie_version < 11) {\n setTimeout(function () {\n return this$1.display.input.reset(true);\n }, 20);\n }\n registerEventHandlers(this);\n ensureGlobalHandlers();\n startOperation(this);\n this.curOp.forceUpdate = true;\n attachDoc(this, doc);\n if (options.autofocus && !mobile || this.hasFocus()) {\n setTimeout(bind(onFocus, this), 20);\n } else {\n onBlur(this);\n }\n for (var opt in optionHandlers) {\n if (optionHandlers.hasOwnProperty(opt)) {\n optionHandlers[opt](this, options[opt], Init);\n }\n }\n maybeUpdateLineNumberWidth(this);\n if (options.finishInit) {\n options.finishInit(this);\n }\n for (var i = 0; i < initHooks.length; ++i) {\n initHooks[i](this);\n }\n endOperation(this);\n // Suppress optimizelegibility in Webkit, since it breaks text\n // measuring on line wrapping boundaries.\n if (webkit && options.lineWrapping && getComputedStyle(display.lineDiv).textRendering == \"optimizelegibility\") {\n display.lineDiv.style.textRendering = \"auto\";\n }\n }\n\n // The default configuration options.\n CodeMirror.defaults = defaults;\n // Functions to run when options are changed.\n CodeMirror.optionHandlers = optionHandlers;\n\n // Attach the necessary event handlers when initializing the editor\n function registerEventHandlers(cm) {\n var d = cm.display;\n on(d.scroller, \"mousedown\", operation(cm, onMouseDown));\n // Older IE's will not fire a second mousedown for a double click\n if (ie && ie_version < 11) {\n on(d.scroller, \"dblclick\", operation(cm, function (e) {\n if (signalDOMEvent(cm, e)) {\n return;\n }\n var pos = posFromMouse(cm, e);\n if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) {\n return;\n }\n e_preventDefault(e);\n var word = cm.findWordAt(pos);\n extendSelection(cm.doc, word.anchor, word.head);\n }));\n } else {\n on(d.scroller, \"dblclick\", function (e) {\n return signalDOMEvent(cm, e) || e_preventDefault(e);\n });\n }\n // Some browsers fire contextmenu *after* opening the menu, at\n // which point we can't mess with it anymore. Context menu is\n // handled in onMouseDown for these browsers.\n on(d.scroller, \"contextmenu\", function (e) {\n return onContextMenu(cm, e);\n });\n on(d.input.getField(), \"contextmenu\", function (e) {\n if (!d.scroller.contains(e.target)) {\n onContextMenu(cm, e);\n }\n });\n\n // Used to suppress mouse event handling when a touch happens\n var touchFinished,\n prevTouch = {\n end: 0\n };\n function finishTouch() {\n if (d.activeTouch) {\n touchFinished = setTimeout(function () {\n return d.activeTouch = null;\n }, 1000);\n prevTouch = d.activeTouch;\n prevTouch.end = +new Date();\n }\n }\n function isMouseLikeTouchEvent(e) {\n if (e.touches.length != 1) {\n return false;\n }\n var touch = e.touches[0];\n return touch.radiusX <= 1 && touch.radiusY <= 1;\n }\n function farAway(touch, other) {\n if (other.left == null) {\n return true;\n }\n var dx = other.left - touch.left,\n dy = other.top - touch.top;\n return dx * dx + dy * dy > 20 * 20;\n }\n on(d.scroller, \"touchstart\", function (e) {\n if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e) && !clickInGutter(cm, e)) {\n d.input.ensurePolled();\n clearTimeout(touchFinished);\n var now = +new Date();\n d.activeTouch = {\n start: now,\n moved: false,\n prev: now - prevTouch.end <= 300 ? prevTouch : null\n };\n if (e.touches.length == 1) {\n d.activeTouch.left = e.touches[0].pageX;\n d.activeTouch.top = e.touches[0].pageY;\n }\n }\n });\n on(d.scroller, \"touchmove\", function () {\n if (d.activeTouch) {\n d.activeTouch.moved = true;\n }\n });\n on(d.scroller, \"touchend\", function (e) {\n var touch = d.activeTouch;\n if (touch && !eventInWidget(d, e) && touch.left != null && !touch.moved && new Date() - touch.start < 300) {\n var pos = cm.coordsChar(d.activeTouch, \"page\"),\n range;\n if (!touch.prev || farAway(touch, touch.prev))\n // Single tap\n {\n range = new Range(pos, pos);\n } else if (!touch.prev.prev || farAway(touch, touch.prev.prev))\n // Double tap\n {\n range = cm.findWordAt(pos);\n } else\n // Triple tap\n {\n range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0)));\n }\n cm.setSelection(range.anchor, range.head);\n cm.focus();\n e_preventDefault(e);\n }\n finishTouch();\n });\n on(d.scroller, \"touchcancel\", finishTouch);\n\n // Sync scrolling between fake scrollbars and real scrollable\n // area, ensure viewport is updated when scrolling.\n on(d.scroller, \"scroll\", function () {\n if (d.scroller.clientHeight) {\n updateScrollTop(cm, d.scroller.scrollTop);\n setScrollLeft(cm, d.scroller.scrollLeft, true);\n signal(cm, \"scroll\", cm);\n }\n });\n\n // Listen to wheel events in order to try and update the viewport on time.\n on(d.scroller, \"mousewheel\", function (e) {\n return onScrollWheel(cm, e);\n });\n on(d.scroller, \"DOMMouseScroll\", function (e) {\n return onScrollWheel(cm, e);\n });\n\n // Prevent wrapper from ever scrolling\n on(d.wrapper, \"scroll\", function () {\n return d.wrapper.scrollTop = d.wrapper.scrollLeft = 0;\n });\n d.dragFunctions = {\n enter: function (e) {\n if (!signalDOMEvent(cm, e)) {\n e_stop(e);\n }\n },\n over: function (e) {\n if (!signalDOMEvent(cm, e)) {\n onDragOver(cm, e);\n e_stop(e);\n }\n },\n start: function (e) {\n return onDragStart(cm, e);\n },\n drop: operation(cm, onDrop),\n leave: function (e) {\n if (!signalDOMEvent(cm, e)) {\n clearDragCursor(cm);\n }\n }\n };\n var inp = d.input.getField();\n on(inp, \"keyup\", function (e) {\n return onKeyUp.call(cm, e);\n });\n on(inp, \"keydown\", operation(cm, onKeyDown));\n on(inp, \"keypress\", operation(cm, onKeyPress));\n on(inp, \"focus\", function (e) {\n return onFocus(cm, e);\n });\n on(inp, \"blur\", function (e) {\n return onBlur(cm, e);\n });\n }\n var initHooks = [];\n CodeMirror.defineInitHook = function (f) {\n return initHooks.push(f);\n };\n\n // Indent the given line. The how parameter can be \"smart\",\n // \"add\"/null, \"subtract\", or \"prev\". When aggressive is false\n // (typically set to true for forced single-line indents), empty\n // lines are not indented, and places where the mode returns Pass\n // are left alone.\n function indentLine(cm, n, how, aggressive) {\n var doc = cm.doc,\n state;\n if (how == null) {\n how = \"add\";\n }\n if (how == \"smart\") {\n // Fall back to \"prev\" when the mode doesn't have an indentation\n // method.\n if (!doc.mode.indent) {\n how = \"prev\";\n } else {\n state = getContextBefore(cm, n).state;\n }\n }\n var tabSize = cm.options.tabSize;\n var line = getLine(doc, n),\n curSpace = countColumn(line.text, null, tabSize);\n if (line.stateAfter) {\n line.stateAfter = null;\n }\n var curSpaceString = line.text.match(/^\\s*/)[0],\n indentation;\n if (!aggressive && !/\\S/.test(line.text)) {\n indentation = 0;\n how = \"not\";\n } else if (how == \"smart\") {\n indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text);\n if (indentation == Pass || indentation > 150) {\n if (!aggressive) {\n return;\n }\n how = \"prev\";\n }\n }\n if (how == \"prev\") {\n if (n > doc.first) {\n indentation = countColumn(getLine(doc, n - 1).text, null, tabSize);\n } else {\n indentation = 0;\n }\n } else if (how == \"add\") {\n indentation = curSpace + cm.options.indentUnit;\n } else if (how == \"subtract\") {\n indentation = curSpace - cm.options.indentUnit;\n } else if (typeof how == \"number\") {\n indentation = curSpace + how;\n }\n indentation = Math.max(0, indentation);\n var indentString = \"\",\n pos = 0;\n if (cm.options.indentWithTabs) {\n for (var i = Math.floor(indentation / tabSize); i; --i) {\n pos += tabSize;\n indentString += \"\\t\";\n }\n }\n if (pos < indentation) {\n indentString += spaceStr(indentation - pos);\n }\n if (indentString != curSpaceString) {\n replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), \"+input\");\n line.stateAfter = null;\n return true;\n } else {\n // Ensure that, if the cursor was in the whitespace at the start\n // of the line, it is moved to the end of that space.\n for (var i$1 = 0; i$1 < doc.sel.ranges.length; i$1++) {\n var range = doc.sel.ranges[i$1];\n if (range.head.line == n && range.head.ch < curSpaceString.length) {\n var pos$1 = Pos(n, curSpaceString.length);\n replaceOneSelection(doc, i$1, new Range(pos$1, pos$1));\n break;\n }\n }\n }\n }\n\n // This will be set to a {lineWise: bool, text: [string]} object, so\n // that, when pasting, we know what kind of selections the copied\n // text was made out of.\n var lastCopied = null;\n function setLastCopied(newLastCopied) {\n lastCopied = newLastCopied;\n }\n function applyTextInput(cm, inserted, deleted, sel, origin) {\n var doc = cm.doc;\n cm.display.shift = false;\n if (!sel) {\n sel = doc.sel;\n }\n var recent = +new Date() - 200;\n var paste = origin == \"paste\" || cm.state.pasteIncoming > recent;\n var textLines = splitLinesAuto(inserted),\n multiPaste = null;\n // When pasting N lines into N selections, insert one line per selection\n if (paste && sel.ranges.length > 1) {\n if (lastCopied && lastCopied.text.join(\"\\n\") == inserted) {\n if (sel.ranges.length % lastCopied.text.length == 0) {\n multiPaste = [];\n for (var i = 0; i < lastCopied.text.length; i++) {\n multiPaste.push(doc.splitLines(lastCopied.text[i]));\n }\n }\n } else if (textLines.length == sel.ranges.length && cm.options.pasteLinesPerSelection) {\n multiPaste = map(textLines, function (l) {\n return [l];\n });\n }\n }\n var updateInput = cm.curOp.updateInput;\n // Normal behavior is to insert the new text into every selection\n for (var i$1 = sel.ranges.length - 1; i$1 >= 0; i$1--) {\n var range = sel.ranges[i$1];\n var from = range.from(),\n to = range.to();\n if (range.empty()) {\n if (deleted && deleted > 0)\n // Handle deletion\n {\n from = Pos(from.line, from.ch - deleted);\n } else if (cm.state.overwrite && !paste)\n // Handle overwrite\n {\n to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length));\n } else if (paste && lastCopied && lastCopied.lineWise && lastCopied.text.join(\"\\n\") == textLines.join(\"\\n\")) {\n from = to = Pos(from.line, 0);\n }\n }\n var changeEvent = {\n from: from,\n to: to,\n text: multiPaste ? multiPaste[i$1 % multiPaste.length] : textLines,\n origin: origin || (paste ? \"paste\" : cm.state.cutIncoming > recent ? \"cut\" : \"+input\")\n };\n makeChange(cm.doc, changeEvent);\n signalLater(cm, \"inputRead\", cm, changeEvent);\n }\n if (inserted && !paste) {\n triggerElectric(cm, inserted);\n }\n ensureCursorVisible(cm);\n if (cm.curOp.updateInput < 2) {\n cm.curOp.updateInput = updateInput;\n }\n cm.curOp.typing = true;\n cm.state.pasteIncoming = cm.state.cutIncoming = -1;\n }\n function handlePaste(e, cm) {\n var pasted = e.clipboardData && e.clipboardData.getData(\"Text\");\n if (pasted) {\n e.preventDefault();\n if (!cm.isReadOnly() && !cm.options.disableInput) {\n runInOp(cm, function () {\n return applyTextInput(cm, pasted, 0, null, \"paste\");\n });\n }\n return true;\n }\n }\n function triggerElectric(cm, inserted) {\n // When an 'electric' character is inserted, immediately trigger a reindent\n if (!cm.options.electricChars || !cm.options.smartIndent) {\n return;\n }\n var sel = cm.doc.sel;\n for (var i = sel.ranges.length - 1; i >= 0; i--) {\n var range = sel.ranges[i];\n if (range.head.ch > 100 || i && sel.ranges[i - 1].head.line == range.head.line) {\n continue;\n }\n var mode = cm.getModeAt(range.head);\n var indented = false;\n if (mode.electricChars) {\n for (var j = 0; j < mode.electricChars.length; j++) {\n if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) {\n indented = indentLine(cm, range.head.line, \"smart\");\n break;\n }\n }\n } else if (mode.electricInput) {\n if (mode.electricInput.test(getLine(cm.doc, range.head.line).text.slice(0, range.head.ch))) {\n indented = indentLine(cm, range.head.line, \"smart\");\n }\n }\n if (indented) {\n signalLater(cm, \"electricInput\", cm, range.head.line);\n }\n }\n }\n function copyableRanges(cm) {\n var text = [],\n ranges = [];\n for (var i = 0; i < cm.doc.sel.ranges.length; i++) {\n var line = cm.doc.sel.ranges[i].head.line;\n var lineRange = {\n anchor: Pos(line, 0),\n head: Pos(line + 1, 0)\n };\n ranges.push(lineRange);\n text.push(cm.getRange(lineRange.anchor, lineRange.head));\n }\n return {\n text: text,\n ranges: ranges\n };\n }\n function disableBrowserMagic(field, spellcheck, autocorrect, autocapitalize) {\n field.setAttribute(\"autocorrect\", autocorrect ? \"\" : \"off\");\n field.setAttribute(\"autocapitalize\", autocapitalize ? \"\" : \"off\");\n field.setAttribute(\"spellcheck\", !!spellcheck);\n }\n function hiddenTextarea() {\n var te = elt(\"textarea\", null, null, \"position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none\");\n var div = elt(\"div\", [te], null, \"overflow: hidden; position: relative; width: 3px; height: 0px;\");\n // The textarea is kept positioned near the cursor to prevent the\n // fact that it'll be scrolled into view on input from scrolling\n // our fake cursor out of view. On webkit, when wrap=off, paste is\n // very slow. So make the area wide instead.\n if (webkit) {\n te.style.width = \"1000px\";\n } else {\n te.setAttribute(\"wrap\", \"off\");\n }\n // If border: 0; -- iOS fails to open keyboard (issue #1287)\n if (ios) {\n te.style.border = \"1px solid black\";\n }\n disableBrowserMagic(te);\n return div;\n }\n\n // The publicly visible API. Note that methodOp(f) means\n // 'wrap f in an operation, performed on its `this` parameter'.\n\n // This is not the complete set of editor methods. Most of the\n // methods defined on the Doc type are also injected into\n // CodeMirror.prototype, for backwards compatibility and\n // convenience.\n\n function addEditorMethods(CodeMirror) {\n var optionHandlers = CodeMirror.optionHandlers;\n var helpers = CodeMirror.helpers = {};\n CodeMirror.prototype = {\n constructor: CodeMirror,\n focus: function () {\n window.focus();\n this.display.input.focus();\n },\n setOption: function (option, value) {\n var options = this.options,\n old = options[option];\n if (options[option] == value && option != \"mode\") {\n return;\n }\n options[option] = value;\n if (optionHandlers.hasOwnProperty(option)) {\n operation(this, optionHandlers[option])(this, value, old);\n }\n signal(this, \"optionChange\", this, option);\n },\n getOption: function (option) {\n return this.options[option];\n },\n getDoc: function () {\n return this.doc;\n },\n addKeyMap: function (map, bottom) {\n this.state.keyMaps[bottom ? \"push\" : \"unshift\"](getKeyMap(map));\n },\n removeKeyMap: function (map) {\n var maps = this.state.keyMaps;\n for (var i = 0; i < maps.length; ++i) {\n if (maps[i] == map || maps[i].name == map) {\n maps.splice(i, 1);\n return true;\n }\n }\n },\n addOverlay: methodOp(function (spec, options) {\n var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec);\n if (mode.startState) {\n throw new Error(\"Overlays may not be stateful.\");\n }\n insertSorted(this.state.overlays, {\n mode: mode,\n modeSpec: spec,\n opaque: options && options.opaque,\n priority: options && options.priority || 0\n }, function (overlay) {\n return overlay.priority;\n });\n this.state.modeGen++;\n regChange(this);\n }),\n removeOverlay: methodOp(function (spec) {\n var overlays = this.state.overlays;\n for (var i = 0; i < overlays.length; ++i) {\n var cur = overlays[i].modeSpec;\n if (cur == spec || typeof spec == \"string\" && cur.name == spec) {\n overlays.splice(i, 1);\n this.state.modeGen++;\n regChange(this);\n return;\n }\n }\n }),\n indentLine: methodOp(function (n, dir, aggressive) {\n if (typeof dir != \"string\" && typeof dir != \"number\") {\n if (dir == null) {\n dir = this.options.smartIndent ? \"smart\" : \"prev\";\n } else {\n dir = dir ? \"add\" : \"subtract\";\n }\n }\n if (isLine(this.doc, n)) {\n indentLine(this, n, dir, aggressive);\n }\n }),\n indentSelection: methodOp(function (how) {\n var ranges = this.doc.sel.ranges,\n end = -1;\n for (var i = 0; i < ranges.length; i++) {\n var range = ranges[i];\n if (!range.empty()) {\n var from = range.from(),\n to = range.to();\n var start = Math.max(end, from.line);\n end = Math.min(this.lastLine(), to.line - (to.ch ? 0 : 1)) + 1;\n for (var j = start; j < end; ++j) {\n indentLine(this, j, how);\n }\n var newRanges = this.doc.sel.ranges;\n if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0) {\n replaceOneSelection(this.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll);\n }\n } else if (range.head.line > end) {\n indentLine(this, range.head.line, how, true);\n end = range.head.line;\n if (i == this.doc.sel.primIndex) {\n ensureCursorVisible(this);\n }\n }\n }\n }),\n // Fetch the parser token for a given character. Useful for hacks\n // that want to inspect the mode state (say, for completion).\n getTokenAt: function (pos, precise) {\n return takeToken(this, pos, precise);\n },\n getLineTokens: function (line, precise) {\n return takeToken(this, Pos(line), precise, true);\n },\n getTokenTypeAt: function (pos) {\n pos = clipPos(this.doc, pos);\n var styles = getLineStyles(this, getLine(this.doc, pos.line));\n var before = 0,\n after = (styles.length - 1) / 2,\n ch = pos.ch;\n var type;\n if (ch == 0) {\n type = styles[2];\n } else {\n for (;;) {\n var mid = before + after >> 1;\n if ((mid ? styles[mid * 2 - 1] : 0) >= ch) {\n after = mid;\n } else if (styles[mid * 2 + 1] < ch) {\n before = mid + 1;\n } else {\n type = styles[mid * 2 + 2];\n break;\n }\n }\n }\n var cut = type ? type.indexOf(\"overlay \") : -1;\n return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1);\n },\n getModeAt: function (pos) {\n var mode = this.doc.mode;\n if (!mode.innerMode) {\n return mode;\n }\n return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode;\n },\n getHelper: function (pos, type) {\n return this.getHelpers(pos, type)[0];\n },\n getHelpers: function (pos, type) {\n var found = [];\n if (!helpers.hasOwnProperty(type)) {\n return found;\n }\n var help = helpers[type],\n mode = this.getModeAt(pos);\n if (typeof mode[type] == \"string\") {\n if (help[mode[type]]) {\n found.push(help[mode[type]]);\n }\n } else if (mode[type]) {\n for (var i = 0; i < mode[type].length; i++) {\n var val = help[mode[type][i]];\n if (val) {\n found.push(val);\n }\n }\n } else if (mode.helperType && help[mode.helperType]) {\n found.push(help[mode.helperType]);\n } else if (help[mode.name]) {\n found.push(help[mode.name]);\n }\n for (var i$1 = 0; i$1 < help._global.length; i$1++) {\n var cur = help._global[i$1];\n if (cur.pred(mode, this) && indexOf(found, cur.val) == -1) {\n found.push(cur.val);\n }\n }\n return found;\n },\n getStateAfter: function (line, precise) {\n var doc = this.doc;\n line = clipLine(doc, line == null ? doc.first + doc.size - 1 : line);\n return getContextBefore(this, line + 1, precise).state;\n },\n cursorCoords: function (start, mode) {\n var pos,\n range = this.doc.sel.primary();\n if (start == null) {\n pos = range.head;\n } else if (typeof start == \"object\") {\n pos = clipPos(this.doc, start);\n } else {\n pos = start ? range.from() : range.to();\n }\n return cursorCoords(this, pos, mode || \"page\");\n },\n charCoords: function (pos, mode) {\n return charCoords(this, clipPos(this.doc, pos), mode || \"page\");\n },\n coordsChar: function (coords, mode) {\n coords = fromCoordSystem(this, coords, mode || \"page\");\n return coordsChar(this, coords.left, coords.top);\n },\n lineAtHeight: function (height, mode) {\n height = fromCoordSystem(this, {\n top: height,\n left: 0\n }, mode || \"page\").top;\n return lineAtHeight(this.doc, height + this.display.viewOffset);\n },\n heightAtLine: function (line, mode, includeWidgets) {\n var end = false,\n lineObj;\n if (typeof line == \"number\") {\n var last = this.doc.first + this.doc.size - 1;\n if (line < this.doc.first) {\n line = this.doc.first;\n } else if (line > last) {\n line = last;\n end = true;\n }\n lineObj = getLine(this.doc, line);\n } else {\n lineObj = line;\n }\n return intoCoordSystem(this, lineObj, {\n top: 0,\n left: 0\n }, mode || \"page\", includeWidgets || end).top + (end ? this.doc.height - heightAtLine(lineObj) : 0);\n },\n defaultTextHeight: function () {\n return textHeight(this.display);\n },\n defaultCharWidth: function () {\n return charWidth(this.display);\n },\n getViewport: function () {\n return {\n from: this.display.viewFrom,\n to: this.display.viewTo\n };\n },\n addWidget: function (pos, node, scroll, vert, horiz) {\n var display = this.display;\n pos = cursorCoords(this, clipPos(this.doc, pos));\n var top = pos.bottom,\n left = pos.left;\n node.style.position = \"absolute\";\n node.setAttribute(\"cm-ignore-events\", \"true\");\n this.display.input.setUneditable(node);\n display.sizer.appendChild(node);\n if (vert == \"over\") {\n top = pos.top;\n } else if (vert == \"above\" || vert == \"near\") {\n var vspace = Math.max(display.wrapper.clientHeight, this.doc.height),\n hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth);\n // Default to positioning above (if specified and possible); otherwise default to positioning below\n if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight) {\n top = pos.top - node.offsetHeight;\n } else if (pos.bottom + node.offsetHeight <= vspace) {\n top = pos.bottom;\n }\n if (left + node.offsetWidth > hspace) {\n left = hspace - node.offsetWidth;\n }\n }\n node.style.top = top + \"px\";\n node.style.left = node.style.right = \"\";\n if (horiz == \"right\") {\n left = display.sizer.clientWidth - node.offsetWidth;\n node.style.right = \"0px\";\n } else {\n if (horiz == \"left\") {\n left = 0;\n } else if (horiz == \"middle\") {\n left = (display.sizer.clientWidth - node.offsetWidth) / 2;\n }\n node.style.left = left + \"px\";\n }\n if (scroll) {\n scrollIntoView(this, {\n left: left,\n top: top,\n right: left + node.offsetWidth,\n bottom: top + node.offsetHeight\n });\n }\n },\n triggerOnKeyDown: methodOp(onKeyDown),\n triggerOnKeyPress: methodOp(onKeyPress),\n triggerOnKeyUp: onKeyUp,\n triggerOnMouseDown: methodOp(onMouseDown),\n execCommand: function (cmd) {\n if (commands.hasOwnProperty(cmd)) {\n return commands[cmd].call(null, this);\n }\n },\n triggerElectric: methodOp(function (text) {\n triggerElectric(this, text);\n }),\n findPosH: function (from, amount, unit, visually) {\n var dir = 1;\n if (amount < 0) {\n dir = -1;\n amount = -amount;\n }\n var cur = clipPos(this.doc, from);\n for (var i = 0; i < amount; ++i) {\n cur = findPosH(this.doc, cur, dir, unit, visually);\n if (cur.hitSide) {\n break;\n }\n }\n return cur;\n },\n moveH: methodOp(function (dir, unit) {\n var this$1 = this;\n this.extendSelectionsBy(function (range) {\n if (this$1.display.shift || this$1.doc.extend || range.empty()) {\n return findPosH(this$1.doc, range.head, dir, unit, this$1.options.rtlMoveVisually);\n } else {\n return dir < 0 ? range.from() : range.to();\n }\n }, sel_move);\n }),\n deleteH: methodOp(function (dir, unit) {\n var sel = this.doc.sel,\n doc = this.doc;\n if (sel.somethingSelected()) {\n doc.replaceSelection(\"\", null, \"+delete\");\n } else {\n deleteNearSelection(this, function (range) {\n var other = findPosH(doc, range.head, dir, unit, false);\n return dir < 0 ? {\n from: other,\n to: range.head\n } : {\n from: range.head,\n to: other\n };\n });\n }\n }),\n findPosV: function (from, amount, unit, goalColumn) {\n var dir = 1,\n x = goalColumn;\n if (amount < 0) {\n dir = -1;\n amount = -amount;\n }\n var cur = clipPos(this.doc, from);\n for (var i = 0; i < amount; ++i) {\n var coords = cursorCoords(this, cur, \"div\");\n if (x == null) {\n x = coords.left;\n } else {\n coords.left = x;\n }\n cur = findPosV(this, coords, dir, unit);\n if (cur.hitSide) {\n break;\n }\n }\n return cur;\n },\n moveV: methodOp(function (dir, unit) {\n var this$1 = this;\n var doc = this.doc,\n goals = [];\n var collapse = !this.display.shift && !doc.extend && doc.sel.somethingSelected();\n doc.extendSelectionsBy(function (range) {\n if (collapse) {\n return dir < 0 ? range.from() : range.to();\n }\n var headPos = cursorCoords(this$1, range.head, \"div\");\n if (range.goalColumn != null) {\n headPos.left = range.goalColumn;\n }\n goals.push(headPos.left);\n var pos = findPosV(this$1, headPos, dir, unit);\n if (unit == \"page\" && range == doc.sel.primary()) {\n addToScrollTop(this$1, charCoords(this$1, pos, \"div\").top - headPos.top);\n }\n return pos;\n }, sel_move);\n if (goals.length) {\n for (var i = 0; i < doc.sel.ranges.length; i++) {\n doc.sel.ranges[i].goalColumn = goals[i];\n }\n }\n }),\n // Find the word at the given position (as returned by coordsChar).\n findWordAt: function (pos) {\n var doc = this.doc,\n line = getLine(doc, pos.line).text;\n var start = pos.ch,\n end = pos.ch;\n if (line) {\n var helper = this.getHelper(pos, \"wordChars\");\n if ((pos.sticky == \"before\" || end == line.length) && start) {\n --start;\n } else {\n ++end;\n }\n var startChar = line.charAt(start);\n var check = isWordChar(startChar, helper) ? function (ch) {\n return isWordChar(ch, helper);\n } : /\\s/.test(startChar) ? function (ch) {\n return /\\s/.test(ch);\n } : function (ch) {\n return !/\\s/.test(ch) && !isWordChar(ch);\n };\n while (start > 0 && check(line.charAt(start - 1))) {\n --start;\n }\n while (end < line.length && check(line.charAt(end))) {\n ++end;\n }\n }\n return new Range(Pos(pos.line, start), Pos(pos.line, end));\n },\n toggleOverwrite: function (value) {\n if (value != null && value == this.state.overwrite) {\n return;\n }\n if (this.state.overwrite = !this.state.overwrite) {\n addClass(this.display.cursorDiv, \"CodeMirror-overwrite\");\n } else {\n rmClass(this.display.cursorDiv, \"CodeMirror-overwrite\");\n }\n signal(this, \"overwriteToggle\", this, this.state.overwrite);\n },\n hasFocus: function () {\n return this.display.input.getField() == activeElt();\n },\n isReadOnly: function () {\n return !!(this.options.readOnly || this.doc.cantEdit);\n },\n scrollTo: methodOp(function (x, y) {\n scrollToCoords(this, x, y);\n }),\n getScrollInfo: function () {\n var scroller = this.display.scroller;\n return {\n left: scroller.scrollLeft,\n top: scroller.scrollTop,\n height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight,\n width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth,\n clientHeight: displayHeight(this),\n clientWidth: displayWidth(this)\n };\n },\n scrollIntoView: methodOp(function (range, margin) {\n if (range == null) {\n range = {\n from: this.doc.sel.primary().head,\n to: null\n };\n if (margin == null) {\n margin = this.options.cursorScrollMargin;\n }\n } else if (typeof range == \"number\") {\n range = {\n from: Pos(range, 0),\n to: null\n };\n } else if (range.from == null) {\n range = {\n from: range,\n to: null\n };\n }\n if (!range.to) {\n range.to = range.from;\n }\n range.margin = margin || 0;\n if (range.from.line != null) {\n scrollToRange(this, range);\n } else {\n scrollToCoordsRange(this, range.from, range.to, range.margin);\n }\n }),\n setSize: methodOp(function (width, height) {\n var this$1 = this;\n var interpret = function (val) {\n return typeof val == \"number\" || /^\\d+$/.test(String(val)) ? val + \"px\" : val;\n };\n if (width != null) {\n this.display.wrapper.style.width = interpret(width);\n }\n if (height != null) {\n this.display.wrapper.style.height = interpret(height);\n }\n if (this.options.lineWrapping) {\n clearLineMeasurementCache(this);\n }\n var lineNo = this.display.viewFrom;\n this.doc.iter(lineNo, this.display.viewTo, function (line) {\n if (line.widgets) {\n for (var i = 0; i < line.widgets.length; i++) {\n if (line.widgets[i].noHScroll) {\n regLineChange(this$1, lineNo, \"widget\");\n break;\n }\n }\n }\n ++lineNo;\n });\n this.curOp.forceUpdate = true;\n signal(this, \"refresh\", this);\n }),\n operation: function (f) {\n return runInOp(this, f);\n },\n startOperation: function () {\n return startOperation(this);\n },\n endOperation: function () {\n return endOperation(this);\n },\n refresh: methodOp(function () {\n var oldHeight = this.display.cachedTextHeight;\n regChange(this);\n this.curOp.forceUpdate = true;\n clearCaches(this);\n scrollToCoords(this, this.doc.scrollLeft, this.doc.scrollTop);\n updateGutterSpace(this.display);\n if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5 || this.options.lineWrapping) {\n estimateLineHeights(this);\n }\n signal(this, \"refresh\", this);\n }),\n swapDoc: methodOp(function (doc) {\n var old = this.doc;\n old.cm = null;\n // Cancel the current text selection if any (#5821)\n if (this.state.selectingText) {\n this.state.selectingText();\n }\n attachDoc(this, doc);\n clearCaches(this);\n this.display.input.reset();\n scrollToCoords(this, doc.scrollLeft, doc.scrollTop);\n this.curOp.forceScroll = true;\n signalLater(this, \"swapDoc\", this, old);\n return old;\n }),\n phrase: function (phraseText) {\n var phrases = this.options.phrases;\n return phrases && Object.prototype.hasOwnProperty.call(phrases, phraseText) ? phrases[phraseText] : phraseText;\n },\n getInputField: function () {\n return this.display.input.getField();\n },\n getWrapperElement: function () {\n return this.display.wrapper;\n },\n getScrollerElement: function () {\n return this.display.scroller;\n },\n getGutterElement: function () {\n return this.display.gutters;\n }\n };\n eventMixin(CodeMirror);\n CodeMirror.registerHelper = function (type, name, value) {\n if (!helpers.hasOwnProperty(type)) {\n helpers[type] = CodeMirror[type] = {\n _global: []\n };\n }\n helpers[type][name] = value;\n };\n CodeMirror.registerGlobalHelper = function (type, name, predicate, value) {\n CodeMirror.registerHelper(type, name, value);\n helpers[type]._global.push({\n pred: predicate,\n val: value\n });\n };\n }\n\n // Used for horizontal relative motion. Dir is -1 or 1 (left or\n // right), unit can be \"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 function findPosH(doc, pos, dir, unit, visually) {\n var oldPos = pos;\n var origDir = dir;\n var lineObj = getLine(doc, pos.line);\n var lineDir = visually && doc.direction == \"rtl\" ? -dir : dir;\n function findNextLine() {\n var l = pos.line + lineDir;\n if (l < doc.first || l >= doc.first + doc.size) {\n return false;\n }\n pos = new Pos(l, pos.ch, pos.sticky);\n return lineObj = getLine(doc, l);\n }\n function moveOnce(boundToLine) {\n var next;\n if (visually) {\n next = moveVisually(doc.cm, lineObj, pos, dir);\n } else {\n next = moveLogically(lineObj, pos, dir);\n }\n if (next == null) {\n if (!boundToLine && findNextLine()) {\n pos = endOfLine(visually, doc.cm, lineObj, pos.line, lineDir);\n } else {\n return false;\n }\n } else {\n pos = next;\n }\n return true;\n }\n if (unit == \"char\") {\n moveOnce();\n } else if (unit == \"column\") {\n moveOnce(true);\n } else if (unit == \"word\" || unit == \"group\") {\n var sawType = null,\n group = unit == \"group\";\n var helper = doc.cm && doc.cm.getHelper(pos, \"wordChars\");\n for (var first = true;; first = false) {\n if (dir < 0 && !moveOnce(!first)) {\n break;\n }\n var cur = lineObj.text.charAt(pos.ch) || \"\\n\";\n var type = isWordChar(cur, helper) ? \"w\" : group && cur == \"\\n\" ? \"n\" : !group || /\\s/.test(cur) ? null : \"p\";\n if (group && !first && !type) {\n type = \"s\";\n }\n if (sawType && sawType != type) {\n if (dir < 0) {\n dir = 1;\n moveOnce();\n pos.sticky = \"after\";\n }\n break;\n }\n if (type) {\n sawType = type;\n }\n if (dir > 0 && !moveOnce(!first)) {\n break;\n }\n }\n }\n var result = skipAtomic(doc, pos, oldPos, origDir, true);\n if (equalCursorPos(oldPos, result)) {\n result.hitSide = true;\n }\n return result;\n }\n\n // For relative vertical movement. Dir may be -1 or 1. Unit can be\n // \"page\" or \"line\". The resulting position will have a hitSide=true\n // property if it reached the end of the document.\n function findPosV(cm, pos, dir, unit) {\n var doc = cm.doc,\n x = pos.left,\n y;\n if (unit == \"page\") {\n var pageSize = Math.min(cm.display.wrapper.clientHeight, 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 var target;\n for (;;) {\n target = coordsChar(cm, x, y);\n if (!target.outside) {\n break;\n }\n if (dir < 0 ? y <= 0 : y >= doc.height) {\n target.hitSide = true;\n break;\n }\n y += dir * 5;\n }\n return target;\n }\n\n // CONTENTEDITABLE INPUT STYLE\n\n var ContentEditableInput = function (cm) {\n this.cm = cm;\n this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null;\n this.polling = new Delayed();\n this.composing = null;\n this.gracePeriod = false;\n this.readDOMTimeout = null;\n };\n ContentEditableInput.prototype.init = function (display) {\n var this$1 = this;\n var input = this,\n cm = input.cm;\n var div = input.div = display.lineDiv;\n disableBrowserMagic(div, cm.options.spellcheck, cm.options.autocorrect, cm.options.autocapitalize);\n function belongsToInput(e) {\n for (var t = e.target; t; t = t.parentNode) {\n if (t == div) {\n return true;\n }\n if (/\\bCodeMirror-(?:line)?widget\\b/.test(t.className)) {\n break;\n }\n }\n return false;\n }\n on(div, \"paste\", function (e) {\n if (!belongsToInput(e) || signalDOMEvent(cm, e) || handlePaste(e, cm)) {\n return;\n }\n // IE doesn't fire input events, so we schedule a read for the pasted content in this way\n if (ie_version <= 11) {\n setTimeout(operation(cm, function () {\n return this$1.updateFromDOM();\n }), 20);\n }\n });\n on(div, \"compositionstart\", function (e) {\n this$1.composing = {\n data: e.data,\n done: false\n };\n });\n on(div, \"compositionupdate\", function (e) {\n if (!this$1.composing) {\n this$1.composing = {\n data: e.data,\n done: false\n };\n }\n });\n on(div, \"compositionend\", function (e) {\n if (this$1.composing) {\n if (e.data != this$1.composing.data) {\n this$1.readFromDOMSoon();\n }\n this$1.composing.done = true;\n }\n });\n on(div, \"touchstart\", function () {\n return input.forceCompositionEnd();\n });\n on(div, \"input\", function () {\n if (!this$1.composing) {\n this$1.readFromDOMSoon();\n }\n });\n function onCopyCut(e) {\n if (!belongsToInput(e) || signalDOMEvent(cm, e)) {\n return;\n }\n if (cm.somethingSelected()) {\n setLastCopied({\n lineWise: false,\n text: cm.getSelections()\n });\n if (e.type == \"cut\") {\n cm.replaceSelection(\"\", null, \"cut\");\n }\n } else if (!cm.options.lineWiseCopyCut) {\n return;\n } else {\n var ranges = copyableRanges(cm);\n setLastCopied({\n lineWise: true,\n text: ranges.text\n });\n if (e.type == \"cut\") {\n cm.operation(function () {\n cm.setSelections(ranges.ranges, 0, sel_dontScroll);\n cm.replaceSelection(\"\", null, \"cut\");\n });\n }\n }\n if (e.clipboardData) {\n e.clipboardData.clearData();\n var content = lastCopied.text.join(\"\\n\");\n // iOS exposes the clipboard API, but seems to discard content inserted into it\n e.clipboardData.setData(\"Text\", content);\n if (e.clipboardData.getData(\"Text\") == content) {\n e.preventDefault();\n return;\n }\n }\n // Old-fashioned briefly-focus-a-textarea hack\n var kludge = hiddenTextarea(),\n te = kludge.firstChild;\n 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 if (hadFocus == div) {\n input.showPrimarySelection();\n }\n }, 50);\n }\n on(div, \"copy\", onCopyCut);\n on(div, \"cut\", onCopyCut);\n };\n ContentEditableInput.prototype.screenReaderLabelChanged = function (label) {\n // Label for screenreaders, accessibility\n if (label) {\n this.div.setAttribute('aria-label', label);\n } else {\n this.div.removeAttribute('aria-label');\n }\n };\n ContentEditableInput.prototype.prepareSelection = function () {\n var result = prepareSelection(this.cm, false);\n result.focus = document.activeElement == this.div;\n return result;\n };\n ContentEditableInput.prototype.showSelection = function (info, takeFocus) {\n if (!info || !this.cm.display.view.length) {\n return;\n }\n if (info.focus || takeFocus) {\n this.showPrimarySelection();\n }\n this.showMultipleSelections(info);\n };\n ContentEditableInput.prototype.getSelection = function () {\n return this.cm.display.wrapper.ownerDocument.getSelection();\n };\n ContentEditableInput.prototype.showPrimarySelection = function () {\n var sel = this.getSelection(),\n cm = this.cm,\n prim = cm.doc.sel.primary();\n var from = prim.from(),\n to = prim.to();\n if (cm.display.viewTo == cm.display.viewFrom || from.line >= cm.display.viewTo || to.line < cm.display.viewFrom) {\n sel.removeAllRanges();\n return;\n }\n var curAnchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);\n var curFocus = domToPos(cm, sel.focusNode, sel.focusOffset);\n if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad && cmp(minPos(curAnchor, curFocus), from) == 0 && cmp(maxPos(curAnchor, curFocus), to) == 0) {\n return;\n }\n var view = cm.display.view;\n var start = from.line >= cm.display.viewFrom && posToDOM(cm, from) || {\n node: view[0].measure.map[2],\n offset: 0\n };\n var end = to.line < cm.display.viewTo && posToDOM(cm, to);\n if (!end) {\n var measure = view[view.length - 1].measure;\n var map = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map;\n end = {\n node: map[map.length - 1],\n offset: map[map.length - 2] - map[map.length - 3]\n };\n }\n if (!start || !end) {\n sel.removeAllRanges();\n return;\n }\n var old = sel.rangeCount && sel.getRangeAt(0),\n rng;\n try {\n rng = range(start.node, start.offset, end.offset, end.node);\n } catch (e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible\n if (rng) {\n if (!gecko && cm.state.focused) {\n sel.collapse(start.node, start.offset);\n if (!rng.collapsed) {\n sel.removeAllRanges();\n sel.addRange(rng);\n }\n } else {\n sel.removeAllRanges();\n sel.addRange(rng);\n }\n if (old && sel.anchorNode == null) {\n sel.addRange(old);\n } else if (gecko) {\n this.startGracePeriod();\n }\n }\n this.rememberSelection();\n };\n ContentEditableInput.prototype.startGracePeriod = function () {\n var this$1 = this;\n clearTimeout(this.gracePeriod);\n this.gracePeriod = setTimeout(function () {\n this$1.gracePeriod = false;\n if (this$1.selectionChanged()) {\n this$1.cm.operation(function () {\n return this$1.cm.curOp.selectionChanged = true;\n });\n }\n }, 20);\n };\n ContentEditableInput.prototype.showMultipleSelections = function (info) {\n removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors);\n removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection);\n };\n ContentEditableInput.prototype.rememberSelection = function () {\n var sel = this.getSelection();\n this.lastAnchorNode = sel.anchorNode;\n this.lastAnchorOffset = sel.anchorOffset;\n this.lastFocusNode = sel.focusNode;\n this.lastFocusOffset = sel.focusOffset;\n };\n ContentEditableInput.prototype.selectionInEditor = function () {\n var sel = this.getSelection();\n if (!sel.rangeCount) {\n return false;\n }\n var node = sel.getRangeAt(0).commonAncestorContainer;\n return contains(this.div, node);\n };\n ContentEditableInput.prototype.focus = function () {\n if (this.cm.options.readOnly != \"nocursor\") {\n if (!this.selectionInEditor() || document.activeElement != this.div) {\n this.showSelection(this.prepareSelection(), true);\n }\n this.div.focus();\n }\n };\n ContentEditableInput.prototype.blur = function () {\n this.div.blur();\n };\n ContentEditableInput.prototype.getField = function () {\n return this.div;\n };\n ContentEditableInput.prototype.supportsTouch = function () {\n return true;\n };\n ContentEditableInput.prototype.receivedFocus = function () {\n var input = this;\n if (this.selectionInEditor()) {\n this.pollSelection();\n } else {\n runInOp(this.cm, function () {\n return input.cm.curOp.selectionChanged = true;\n });\n }\n function poll() {\n if (input.cm.state.focused) {\n input.pollSelection();\n input.polling.set(input.cm.options.pollInterval, poll);\n }\n }\n this.polling.set(this.cm.options.pollInterval, poll);\n };\n ContentEditableInput.prototype.selectionChanged = function () {\n var sel = this.getSelection();\n return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset || sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset;\n };\n ContentEditableInput.prototype.pollSelection = function () {\n if (this.readDOMTimeout != null || this.gracePeriod || !this.selectionChanged()) {\n return;\n }\n var sel = this.getSelection(),\n cm = this.cm;\n // On Android Chrome (version 56, at least), backspacing into an\n // uneditable block element will put the cursor in that element,\n // and then, because it's not editable, hide the virtual keyboard.\n // Because Android doesn't allow us to actually detect backspace\n // presses in a sane way, this code checks for when that happens\n // and simulates a backspace press in this case.\n if (android && chrome && this.cm.display.gutterSpecs.length && isInGutter(sel.anchorNode)) {\n this.cm.triggerOnKeyDown({\n type: \"keydown\",\n keyCode: 8,\n preventDefault: Math.abs\n });\n this.blur();\n this.focus();\n return;\n }\n if (this.composing) {\n return;\n }\n this.rememberSelection();\n var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);\n var head = domToPos(cm, sel.focusNode, sel.focusOffset);\n if (anchor && head) {\n runInOp(cm, function () {\n setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll);\n if (anchor.bad || head.bad) {\n cm.curOp.selectionChanged = true;\n }\n });\n }\n };\n ContentEditableInput.prototype.pollContent = function () {\n if (this.readDOMTimeout != null) {\n clearTimeout(this.readDOMTimeout);\n this.readDOMTimeout = null;\n }\n var cm = this.cm,\n display = cm.display,\n sel = cm.doc.sel.primary();\n var from = sel.from(),\n to = sel.to();\n if (from.ch == 0 && from.line > cm.firstLine()) {\n from = Pos(from.line - 1, getLine(cm.doc, from.line - 1).length);\n }\n if (to.ch == getLine(cm.doc, to.line).text.length && to.line < cm.lastLine()) {\n to = Pos(to.line + 1, 0);\n }\n if (from.line < display.viewFrom || to.line > display.viewTo - 1) {\n return false;\n }\n var fromIndex, fromLine, fromNode;\n if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) {\n fromLine = lineNo(display.view[0].line);\n fromNode = display.view[0].node;\n } else {\n fromLine = lineNo(display.view[fromIndex].line);\n fromNode = display.view[fromIndex - 1].node.nextSibling;\n }\n var toIndex = findViewIndex(cm, to.line);\n var toLine, toNode;\n if (toIndex == display.view.length - 1) {\n toLine = display.viewTo - 1;\n toNode = display.lineDiv.lastChild;\n } else {\n toLine = lineNo(display.view[toIndex + 1].line) - 1;\n toNode = display.view[toIndex + 1].node.previousSibling;\n }\n if (!fromNode) {\n return false;\n }\n var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine));\n var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length));\n while (newText.length > 1 && oldText.length > 1) {\n if (lst(newText) == lst(oldText)) {\n newText.pop();\n oldText.pop();\n toLine--;\n } else if (newText[0] == oldText[0]) {\n newText.shift();\n oldText.shift();\n fromLine++;\n } else {\n break;\n }\n }\n var cutFront = 0,\n cutEnd = 0;\n var newTop = newText[0],\n oldTop = oldText[0],\n maxCutFront = Math.min(newTop.length, oldTop.length);\n while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront)) {\n ++cutFront;\n }\n var newBot = lst(newText),\n oldBot = lst(oldText);\n var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0), oldBot.length - (oldText.length == 1 ? cutFront : 0));\n while (cutEnd < maxCutEnd && newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) {\n ++cutEnd;\n }\n // Try to move start of change to start of selection if ambiguous\n if (newText.length == 1 && oldText.length == 1 && fromLine == from.line) {\n while (cutFront && cutFront > from.ch && newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) {\n cutFront--;\n cutEnd++;\n }\n }\n newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd).replace(/^\\u200b+/, \"\");\n newText[0] = newText[0].slice(cutFront).replace(/\\u200b+$/, \"\");\n var chFrom = Pos(fromLine, cutFront);\n var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0);\n if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) {\n replaceRange(cm.doc, newText, chFrom, chTo, \"+input\");\n return true;\n }\n };\n ContentEditableInput.prototype.ensurePolled = function () {\n this.forceCompositionEnd();\n };\n ContentEditableInput.prototype.reset = function () {\n this.forceCompositionEnd();\n };\n ContentEditableInput.prototype.forceCompositionEnd = function () {\n if (!this.composing) {\n return;\n }\n clearTimeout(this.readDOMTimeout);\n this.composing = null;\n this.updateFromDOM();\n this.div.blur();\n this.div.focus();\n };\n ContentEditableInput.prototype.readFromDOMSoon = function () {\n var this$1 = this;\n if (this.readDOMTimeout != null) {\n return;\n }\n this.readDOMTimeout = setTimeout(function () {\n this$1.readDOMTimeout = null;\n if (this$1.composing) {\n if (this$1.composing.done) {\n this$1.composing = null;\n } else {\n return;\n }\n }\n this$1.updateFromDOM();\n }, 80);\n };\n ContentEditableInput.prototype.updateFromDOM = function () {\n var this$1 = this;\n if (this.cm.isReadOnly() || !this.pollContent()) {\n runInOp(this.cm, function () {\n return regChange(this$1.cm);\n });\n }\n };\n ContentEditableInput.prototype.setUneditable = function (node) {\n node.contentEditable = \"false\";\n };\n ContentEditableInput.prototype.onKeyPress = function (e) {\n if (e.charCode == 0 || this.composing) {\n return;\n }\n e.preventDefault();\n if (!this.cm.isReadOnly()) {\n operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0);\n }\n };\n ContentEditableInput.prototype.readOnlyChanged = function (val) {\n this.div.contentEditable = String(val != \"nocursor\");\n };\n ContentEditableInput.prototype.onContextMenu = function () {};\n ContentEditableInput.prototype.resetPosition = function () {};\n ContentEditableInput.prototype.needsContentAttribute = true;\n function posToDOM(cm, pos) {\n var view = findViewForLine(cm, pos.line);\n if (!view || view.hidden) {\n return null;\n }\n var line = getLine(cm.doc, pos.line);\n var info = mapFromLineView(view, line, pos.line);\n var order = getOrder(line, cm.doc.direction),\n side = \"left\";\n if (order) {\n var partPos = getBidiPartAt(order, pos.ch);\n side = partPos % 2 ? \"right\" : \"left\";\n }\n var result = nodeAndOffsetInLineMap(info.map, pos.ch, side);\n result.offset = result.collapse == \"right\" ? result.end : result.start;\n return result;\n }\n function isInGutter(node) {\n for (var scan = node; scan; scan = scan.parentNode) {\n if (/CodeMirror-gutter-wrapper/.test(scan.className)) {\n return true;\n }\n }\n return false;\n }\n function badPos(pos, bad) {\n if (bad) {\n pos.bad = true;\n }\n return pos;\n }\n function domTextBetween(cm, from, to, fromLine, toLine) {\n var text = \"\",\n closing = false,\n lineSep = cm.doc.lineSeparator(),\n extraLinebreak = false;\n function recognizeMarker(id) {\n return function (marker) {\n return marker.id == id;\n };\n }\n function close() {\n if (closing) {\n text += lineSep;\n if (extraLinebreak) {\n text += lineSep;\n }\n closing = extraLinebreak = false;\n }\n }\n function addText(str) {\n if (str) {\n close();\n text += str;\n }\n }\n function walk(node) {\n if (node.nodeType == 1) {\n var cmText = node.getAttribute(\"cm-text\");\n if (cmText) {\n addText(cmText);\n return;\n }\n var markerID = node.getAttribute(\"cm-marker\"),\n range;\n if (markerID) {\n var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID));\n if (found.length && (range = found[0].find(0))) {\n addText(getBetween(cm.doc, range.from, range.to).join(lineSep));\n }\n return;\n }\n if (node.getAttribute(\"contenteditable\") == \"false\") {\n return;\n }\n var isBlock = /^(pre|div|p|li|table|br)$/i.test(node.nodeName);\n if (!/^br$/i.test(node.nodeName) && node.textContent.length == 0) {\n return;\n }\n if (isBlock) {\n close();\n }\n for (var i = 0; i < node.childNodes.length; i++) {\n walk(node.childNodes[i]);\n }\n if (/^(pre|p)$/i.test(node.nodeName)) {\n extraLinebreak = true;\n }\n if (isBlock) {\n closing = true;\n }\n } else if (node.nodeType == 3) {\n addText(node.nodeValue.replace(/\\u200b/g, \"\").replace(/\\u00a0/g, \" \"));\n }\n }\n for (;;) {\n walk(from);\n if (from == to) {\n break;\n }\n from = from.nextSibling;\n extraLinebreak = false;\n }\n return text;\n }\n function domToPos(cm, node, offset) {\n var lineNode;\n if (node == cm.display.lineDiv) {\n lineNode = cm.display.lineDiv.childNodes[offset];\n if (!lineNode) {\n return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true);\n }\n node = null;\n offset = 0;\n } else {\n for (lineNode = node;; lineNode = lineNode.parentNode) {\n if (!lineNode || lineNode == cm.display.lineDiv) {\n return null;\n }\n if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) {\n break;\n }\n }\n }\n for (var i = 0; i < cm.display.view.length; i++) {\n var lineView = cm.display.view[i];\n if (lineView.node == lineNode) {\n return locateNodeInLineView(lineView, node, offset);\n }\n }\n }\n function locateNodeInLineView(lineView, node, offset) {\n var wrapper = lineView.text.firstChild,\n bad = false;\n if (!node || !contains(wrapper, node)) {\n return badPos(Pos(lineNo(lineView.line), 0), true);\n }\n if (node == wrapper) {\n bad = true;\n node = wrapper.childNodes[offset];\n offset = 0;\n if (!node) {\n var line = lineView.rest ? lst(lineView.rest) : lineView.line;\n return badPos(Pos(lineNo(line), line.text.length), bad);\n }\n }\n var textNode = node.nodeType == 3 ? node : null,\n topNode = node;\n if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) {\n textNode = node.firstChild;\n if (offset) {\n offset = textNode.nodeValue.length;\n }\n }\n while (topNode.parentNode != wrapper) {\n topNode = topNode.parentNode;\n }\n var measure = lineView.measure,\n maps = measure.maps;\n function find(textNode, topNode, offset) {\n for (var i = -1; i < (maps ? maps.length : 0); i++) {\n var map = i < 0 ? measure.map : maps[i];\n for (var j = 0; j < map.length; j += 3) {\n var curNode = map[j + 2];\n if (curNode == textNode || curNode == topNode) {\n var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]);\n var ch = map[j] + offset;\n if (offset < 0 || curNode != textNode) {\n ch = map[j + (offset ? 1 : 0)];\n }\n return Pos(line, ch);\n }\n }\n }\n }\n var found = find(textNode, topNode, offset);\n if (found) {\n return badPos(found, bad);\n }\n\n // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems\n for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) {\n found = find(after, after.firstChild, 0);\n if (found) {\n return badPos(Pos(found.line, found.ch - dist), bad);\n } else {\n dist += after.textContent.length;\n }\n }\n for (var before = topNode.previousSibling, dist$1 = offset; before; before = before.previousSibling) {\n found = find(before, before.firstChild, -1);\n if (found) {\n return badPos(Pos(found.line, found.ch + dist$1), bad);\n } else {\n dist$1 += before.textContent.length;\n }\n }\n }\n\n // TEXTAREA INPUT STYLE\n\n var TextareaInput = function (cm) {\n this.cm = cm;\n // See input.poll and input.reset\n this.prevInput = \"\";\n\n // Flag that indicates whether we expect input to appear real soon\n // now (after some event like 'keypress' or 'input') and are\n // polling intensively.\n this.pollingFast = false;\n // Self-resetting timeout for the poller\n this.polling = new Delayed();\n // Used to work around IE issue with selection being forgotten when focus moves away from textarea\n this.hasSelection = false;\n this.composing = null;\n };\n TextareaInput.prototype.init = function (display) {\n var this$1 = this;\n var input = this,\n cm = this.cm;\n this.createField(display);\n var te = this.textarea;\n display.wrapper.insertBefore(this.wrapper, display.wrapper.firstChild);\n\n // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore)\n if (ios) {\n te.style.width = \"0px\";\n }\n on(te, \"input\", function () {\n if (ie && ie_version >= 9 && this$1.hasSelection) {\n this$1.hasSelection = null;\n }\n input.poll();\n });\n on(te, \"paste\", function (e) {\n if (signalDOMEvent(cm, e) || handlePaste(e, cm)) {\n return;\n }\n cm.state.pasteIncoming = +new Date();\n input.fastPoll();\n });\n function prepareCopyCut(e) {\n if (signalDOMEvent(cm, e)) {\n return;\n }\n if (cm.somethingSelected()) {\n setLastCopied({\n lineWise: false,\n text: cm.getSelections()\n });\n } else if (!cm.options.lineWiseCopyCut) {\n return;\n } else {\n var ranges = copyableRanges(cm);\n setLastCopied({\n lineWise: true,\n text: ranges.text\n });\n if (e.type == \"cut\") {\n cm.setSelections(ranges.ranges, null, sel_dontScroll);\n } else {\n input.prevInput = \"\";\n te.value = ranges.text.join(\"\\n\");\n selectInput(te);\n }\n }\n if (e.type == \"cut\") {\n cm.state.cutIncoming = +new Date();\n }\n }\n on(te, \"cut\", prepareCopyCut);\n on(te, \"copy\", prepareCopyCut);\n on(display.scroller, \"paste\", function (e) {\n if (eventInWidget(display, e) || signalDOMEvent(cm, e)) {\n return;\n }\n if (!te.dispatchEvent) {\n cm.state.pasteIncoming = +new Date();\n input.focus();\n return;\n }\n\n // Pass the `paste` event to the textarea so it's handled by its event listener.\n var event = new Event(\"paste\");\n event.clipboardData = e.clipboardData;\n te.dispatchEvent(event);\n });\n\n // Prevent normal selection in the editor (we handle our own)\n on(display.lineSpace, \"selectstart\", function (e) {\n if (!eventInWidget(display, e)) {\n e_preventDefault(e);\n }\n });\n on(te, \"compositionstart\", function () {\n var start = cm.getCursor(\"from\");\n if (input.composing) {\n input.composing.range.clear();\n }\n input.composing = {\n start: start,\n range: cm.markText(start, cm.getCursor(\"to\"), {\n className: \"CodeMirror-composing\"\n })\n };\n });\n on(te, \"compositionend\", function () {\n if (input.composing) {\n input.poll();\n input.composing.range.clear();\n input.composing = null;\n }\n });\n };\n TextareaInput.prototype.createField = function (_display) {\n // Wraps and hides input textarea\n this.wrapper = hiddenTextarea();\n // The semihidden textarea that is focused when the editor is\n // focused, and receives input.\n this.textarea = this.wrapper.firstChild;\n };\n TextareaInput.prototype.screenReaderLabelChanged = function (label) {\n // Label for screenreaders, accessibility\n if (label) {\n this.textarea.setAttribute('aria-label', label);\n } else {\n this.textarea.removeAttribute('aria-label');\n }\n };\n TextareaInput.prototype.prepareSelection = function () {\n // Redraw the selection and/or cursor\n var cm = this.cm,\n display = cm.display,\n doc = cm.doc;\n var result = prepareSelection(cm);\n\n // Move the hidden textarea near the cursor to prevent scrolling artifacts\n if (cm.options.moveInputWithCursor) {\n var headPos = cursorCoords(cm, doc.sel.primary().head, \"div\");\n var wrapOff = display.wrapper.getBoundingClientRect(),\n lineOff = display.lineDiv.getBoundingClientRect();\n result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10, headPos.top + lineOff.top - wrapOff.top));\n result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10, headPos.left + lineOff.left - wrapOff.left));\n }\n return result;\n };\n TextareaInput.prototype.showSelection = function (drawn) {\n var cm = this.cm,\n display = cm.display;\n removeChildrenAndAdd(display.cursorDiv, drawn.cursors);\n removeChildrenAndAdd(display.selectionDiv, drawn.selection);\n if (drawn.teTop != null) {\n this.wrapper.style.top = drawn.teTop + \"px\";\n this.wrapper.style.left = drawn.teLeft + \"px\";\n }\n };\n\n // Reset the input to correspond to the selection (or to be empty,\n // when not typing and nothing is selected)\n TextareaInput.prototype.reset = function (typing) {\n if (this.contextMenuPending || this.composing) {\n return;\n }\n var cm = this.cm;\n if (cm.somethingSelected()) {\n this.prevInput = \"\";\n var content = cm.getSelection();\n this.textarea.value = content;\n if (cm.state.focused) {\n selectInput(this.textarea);\n }\n if (ie && ie_version >= 9) {\n this.hasSelection = content;\n }\n } else if (!typing) {\n this.prevInput = this.textarea.value = \"\";\n if (ie && ie_version >= 9) {\n this.hasSelection = null;\n }\n }\n };\n TextareaInput.prototype.getField = function () {\n return this.textarea;\n };\n TextareaInput.prototype.supportsTouch = function () {\n return false;\n };\n TextareaInput.prototype.focus = function () {\n if (this.cm.options.readOnly != \"nocursor\" && (!mobile || activeElt() != this.textarea)) {\n try {\n this.textarea.focus();\n } catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM\n }\n };\n\n TextareaInput.prototype.blur = function () {\n this.textarea.blur();\n };\n TextareaInput.prototype.resetPosition = function () {\n this.wrapper.style.top = this.wrapper.style.left = 0;\n };\n TextareaInput.prototype.receivedFocus = function () {\n this.slowPoll();\n };\n\n // Poll for input changes, using the normal rate of polling. This\n // runs as long as the editor is focused.\n TextareaInput.prototype.slowPoll = function () {\n var this$1 = this;\n if (this.pollingFast) {\n return;\n }\n this.polling.set(this.cm.options.pollInterval, function () {\n this$1.poll();\n if (this$1.cm.state.focused) {\n this$1.slowPoll();\n }\n });\n };\n\n // When an event has just come in that is likely to add or change\n // something in the input textarea, we poll faster, to ensure that\n // the change appears on the screen quickly.\n TextareaInput.prototype.fastPoll = function () {\n var missed = false,\n input = this;\n input.pollingFast = true;\n function p() {\n var changed = input.poll();\n if (!changed && !missed) {\n missed = true;\n input.polling.set(60, p);\n } else {\n input.pollingFast = false;\n input.slowPoll();\n }\n }\n input.polling.set(20, p);\n };\n\n // Read input from the textarea, and update the document to match.\n // When something is selected, it is present in the textarea, and\n // selected (unless it is huge, in which case a placeholder is\n // used). When nothing is selected, the cursor sits after previously\n // seen text (can be empty), which is stored in prevInput (we must\n // not reset the textarea when typing, because that breaks IME).\n TextareaInput.prototype.poll = function () {\n var this$1 = this;\n var cm = this.cm,\n input = this.textarea,\n prevInput = this.prevInput;\n // Since this is called a *lot*, try to bail out as cheaply as\n // possible when it is clear that nothing happened. hasSelection\n // will be the case when there is a lot of text in the textarea,\n // in which case reading its value would be expensive.\n if (this.contextMenuPending || !cm.state.focused || hasSelection(input) && !prevInput && !this.composing || cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq) {\n return false;\n }\n var text = input.value;\n // If nothing changed, bail.\n if (text == prevInput && !cm.somethingSelected()) {\n return false;\n }\n // Work around nonsensical selection resetting in IE9/10, and\n // inexplicable appearance of private area unicode characters on\n // some key combos in Mac (#2689).\n if (ie && ie_version >= 9 && this.hasSelection === text || mac && /[\\uf700-\\uf7ff]/.test(text)) {\n cm.display.input.reset();\n return false;\n }\n if (cm.doc.sel == cm.display.selForContextMenu) {\n var first = text.charCodeAt(0);\n if (first == 0x200b && !prevInput) {\n prevInput = \"\\u200b\";\n }\n if (first == 0x21da) {\n this.reset();\n return this.cm.execCommand(\"undo\");\n }\n }\n // Find the part of the input that is actually new\n var same = 0,\n l = Math.min(prevInput.length, text.length);\n while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) {\n ++same;\n }\n runInOp(cm, function () {\n applyTextInput(cm, text.slice(same), prevInput.length - same, null, this$1.composing ? \"*compose\" : null);\n\n // Don't leave long text in the textarea, since it makes further polling slow\n if (text.length > 1000 || text.indexOf(\"\\n\") > -1) {\n input.value = this$1.prevInput = \"\";\n } else {\n this$1.prevInput = text;\n }\n if (this$1.composing) {\n this$1.composing.range.clear();\n this$1.composing.range = cm.markText(this$1.composing.start, cm.getCursor(\"to\"), {\n className: \"CodeMirror-composing\"\n });\n }\n });\n return true;\n };\n TextareaInput.prototype.ensurePolled = function () {\n if (this.pollingFast && this.poll()) {\n this.pollingFast = false;\n }\n };\n TextareaInput.prototype.onKeyPress = function () {\n if (ie && ie_version >= 9) {\n this.hasSelection = null;\n }\n this.fastPoll();\n };\n TextareaInput.prototype.onContextMenu = function (e) {\n var input = this,\n cm = input.cm,\n display = cm.display,\n te = input.textarea;\n if (input.contextMenuPending) {\n input.contextMenuPending();\n }\n var pos = posFromMouse(cm, e),\n scrollPos = display.scroller.scrollTop;\n if (!pos || presto) {\n return;\n } // Opera is difficult.\n\n // Reset the current text selection only if the click is done outside of the selection\n // and 'resetSelectionOnContextMenu' option is true.\n var reset = cm.options.resetSelectionOnContextMenu;\n if (reset && cm.doc.sel.contains(pos) == -1) {\n operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll);\n }\n var oldCSS = te.style.cssText,\n oldWrapperCSS = input.wrapper.style.cssText;\n var wrapperBox = input.wrapper.offsetParent.getBoundingClientRect();\n input.wrapper.style.cssText = \"position: static\";\n te.style.cssText = \"position: absolute; width: 30px; height: 30px;\\n top: \" + (e.clientY - wrapperBox.top - 5) + \"px; left: \" + (e.clientX - wrapperBox.left - 5) + \"px;\\n z-index: 1000; background: \" + (ie ? \"rgba(255, 255, 255, .05)\" : \"transparent\") + \";\\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);\";\n var oldScrollY;\n if (webkit) {\n oldScrollY = window.scrollY;\n } // Work around Chrome issue (#2712)\n display.input.focus();\n if (webkit) {\n window.scrollTo(null, oldScrollY);\n }\n display.input.reset();\n // Adds \"Select all\" to context menu in FF\n if (!cm.somethingSelected()) {\n te.value = input.prevInput = \" \";\n }\n input.contextMenuPending = rehide;\n display.selForContextMenu = cm.doc.sel;\n clearTimeout(display.detectingSelectAll);\n\n // Select-all will be greyed out if there's nothing to select, so\n // this adds a zero-width space so that we can later check whether\n // it got selected.\n function prepareSelectAllHack() {\n if (te.selectionStart != null) {\n var selected = cm.somethingSelected();\n var extval = \"\\u200b\" + (selected ? te.value : \"\");\n te.value = \"\\u21da\"; // Used to catch context-menu undo\n te.value = extval;\n input.prevInput = selected ? \"\" : \"\\u200b\";\n te.selectionStart = 1;\n te.selectionEnd = extval.length;\n // Re-set this, in case some other handler touched the\n // selection in the meantime.\n display.selForContextMenu = cm.doc.sel;\n }\n }\n function rehide() {\n if (input.contextMenuPending != rehide) {\n return;\n }\n input.contextMenuPending = false;\n input.wrapper.style.cssText = oldWrapperCSS;\n te.style.cssText = oldCSS;\n if (ie && ie_version < 9) {\n display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos);\n }\n\n // Try to detect the user choosing select-all\n if (te.selectionStart != null) {\n if (!ie || ie && ie_version < 9) {\n prepareSelectAllHack();\n }\n var i = 0,\n poll = function () {\n if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 && te.selectionEnd > 0 && input.prevInput == \"\\u200b\") {\n operation(cm, selectAll)(cm);\n } else if (i++ < 10) {\n display.detectingSelectAll = setTimeout(poll, 500);\n } else {\n display.selForContextMenu = null;\n display.input.reset();\n }\n };\n display.detectingSelectAll = setTimeout(poll, 200);\n }\n }\n if (ie && ie_version >= 9) {\n prepareSelectAllHack();\n }\n if (captureRightClick) {\n e_stop(e);\n var mouseup = function () {\n off(window, \"mouseup\", mouseup);\n setTimeout(rehide, 20);\n };\n on(window, \"mouseup\", mouseup);\n } else {\n setTimeout(rehide, 50);\n }\n };\n TextareaInput.prototype.readOnlyChanged = function (val) {\n if (!val) {\n this.reset();\n }\n this.textarea.disabled = val == \"nocursor\";\n };\n TextareaInput.prototype.setUneditable = function () {};\n TextareaInput.prototype.needsContentAttribute = false;\n function fromTextArea(textarea, options) {\n options = options ? copyObj(options) : {};\n options.value = textarea.value;\n if (!options.tabindex && textarea.tabIndex) {\n options.tabindex = textarea.tabIndex;\n }\n if (!options.placeholder && textarea.placeholder) {\n options.placeholder = textarea.placeholder;\n }\n // Set autofocus to true if this textarea is focused, or if it has\n // autofocus and no other element is focused.\n if (options.autofocus == null) {\n var hasFocus = activeElt();\n options.autofocus = hasFocus == textarea || textarea.getAttribute(\"autofocus\") != null && hasFocus == document.body;\n }\n function save() {\n textarea.value = cm.getValue();\n }\n var realSubmit;\n if (textarea.form) {\n on(textarea.form, \"submit\", save);\n // Deplorable hack to make the submit method do the right thing.\n if (!options.leaveSubmitMethodAlone) {\n var form = textarea.form;\n realSubmit = form.submit;\n try {\n var wrappedSubmit = form.submit = function () {\n save();\n form.submit = realSubmit;\n form.submit();\n form.submit = wrappedSubmit;\n };\n } catch (e) {}\n }\n }\n options.finishInit = function (cm) {\n cm.save = save;\n cm.getTextArea = function () {\n return textarea;\n };\n cm.toTextArea = function () {\n cm.toTextArea = isNaN; // Prevent this from being ran twice\n save();\n textarea.parentNode.removeChild(cm.getWrapperElement());\n textarea.style.display = \"\";\n if (textarea.form) {\n off(textarea.form, \"submit\", save);\n if (!options.leaveSubmitMethodAlone && typeof textarea.form.submit == \"function\") {\n textarea.form.submit = realSubmit;\n }\n }\n };\n };\n textarea.style.display = \"none\";\n var cm = CodeMirror(function (node) {\n return textarea.parentNode.insertBefore(node, textarea.nextSibling);\n }, options);\n return cm;\n }\n function addLegacyProps(CodeMirror) {\n CodeMirror.off = off;\n CodeMirror.on = on;\n CodeMirror.wheelEventPixels = wheelEventPixels;\n CodeMirror.Doc = Doc;\n CodeMirror.splitLines = splitLinesAuto;\n CodeMirror.countColumn = countColumn;\n CodeMirror.findColumn = findColumn;\n CodeMirror.isWordChar = isWordCharBasic;\n CodeMirror.Pass = Pass;\n CodeMirror.signal = signal;\n CodeMirror.Line = Line;\n CodeMirror.changeEnd = changeEnd;\n CodeMirror.scrollbarModel = scrollbarModel;\n CodeMirror.Pos = Pos;\n CodeMirror.cmpPos = cmp;\n CodeMirror.modes = modes;\n CodeMirror.mimeModes = mimeModes;\n CodeMirror.resolveMode = resolveMode;\n CodeMirror.getMode = getMode;\n CodeMirror.modeExtensions = modeExtensions;\n CodeMirror.extendMode = extendMode;\n CodeMirror.copyState = copyState;\n CodeMirror.startState = startState;\n CodeMirror.innerMode = innerMode;\n CodeMirror.commands = commands;\n CodeMirror.keyMap = keyMap;\n CodeMirror.keyName = keyName;\n CodeMirror.isModifierKey = isModifierKey;\n CodeMirror.lookupKey = lookupKey;\n CodeMirror.normalizeKeyMap = normalizeKeyMap;\n CodeMirror.StringStream = StringStream;\n CodeMirror.SharedTextMarker = SharedTextMarker;\n CodeMirror.TextMarker = TextMarker;\n CodeMirror.LineWidget = LineWidget;\n CodeMirror.e_preventDefault = e_preventDefault;\n CodeMirror.e_stopPropagation = e_stopPropagation;\n CodeMirror.e_stop = e_stop;\n CodeMirror.addClass = addClass;\n CodeMirror.contains = contains;\n CodeMirror.rmClass = rmClass;\n CodeMirror.keyNames = keyNames;\n }\n\n // EDITOR CONSTRUCTOR\n\n defineOptions(CodeMirror);\n addEditorMethods(CodeMirror);\n\n // Set up methods on CodeMirror's prototype to redirect to the editor's document.\n var dontDelegate = \"iter insert remove copy getEditor constructor\".split(\" \");\n for (var prop in Doc.prototype) {\n if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0) {\n CodeMirror.prototype[prop] = function (method) {\n return function () {\n return method.apply(this.doc, arguments);\n };\n }(Doc.prototype[prop]);\n }\n }\n eventMixin(Doc);\n CodeMirror.inputStyles = {\n \"textarea\": TextareaInput,\n \"contenteditable\": ContentEditableInput\n };\n\n // Extra arguments are stored as the mode's dependencies, which is\n // used by (legacy) mechanisms like loadmode.js to automatically\n // load a mode. (Preferred mechanism is the require/define calls.)\n CodeMirror.defineMode = function (name /*, mode, …*/) {\n if (!CodeMirror.defaults.mode && name != \"null\") {\n CodeMirror.defaults.mode = name;\n }\n defineMode.apply(this, arguments);\n };\n CodeMirror.defineMIME = defineMIME;\n\n // Minimal default mode.\n CodeMirror.defineMode(\"null\", function () {\n return {\n token: function (stream) {\n return stream.skipToEnd();\n }\n };\n });\n CodeMirror.defineMIME(\"text/plain\", \"null\");\n\n // EXTENSIONS\n\n CodeMirror.defineExtension = function (name, func) {\n CodeMirror.prototype[name] = func;\n };\n CodeMirror.defineDocExtension = function (name, func) {\n Doc.prototype[name] = func;\n };\n CodeMirror.fromTextArea = fromTextArea;\n addLegacyProps(CodeMirror);\n CodeMirror.version = \"5.57.0\";\n return CodeMirror;\n});","var EventListener = /** @class */function () {\n function EventListener(eventTarget, eventName) {\n this.eventTarget = eventTarget;\n this.eventName = eventName;\n this.unorderedBindings = new Set();\n }\n EventListener.prototype.connect = function () {\n this.eventTarget.addEventListener(this.eventName, this, false);\n };\n EventListener.prototype.disconnect = function () {\n this.eventTarget.removeEventListener(this.eventName, this, false);\n };\n // Binding observer delegate\n /** @hidden */\n EventListener.prototype.bindingConnected = function (binding) {\n this.unorderedBindings.add(binding);\n };\n /** @hidden */\n EventListener.prototype.bindingDisconnected = function (binding) {\n this.unorderedBindings.delete(binding);\n };\n EventListener.prototype.handleEvent = function (event) {\n var extendedEvent = extendEvent(event);\n for (var _i = 0, _a = this.bindings; _i < _a.length; _i++) {\n var binding = _a[_i];\n if (extendedEvent.immediatePropagationStopped) {\n break;\n } else {\n binding.handleEvent(extendedEvent);\n }\n }\n };\n Object.defineProperty(EventListener.prototype, \"bindings\", {\n get: function () {\n return Array.from(this.unorderedBindings).sort(function (left, right) {\n var leftIndex = left.index,\n rightIndex = right.index;\n return leftIndex < rightIndex ? -1 : leftIndex > rightIndex ? 1 : 0;\n });\n },\n enumerable: true,\n configurable: true\n });\n return EventListener;\n}();\nexport { EventListener };\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 () {\n this.immediatePropagationStopped = true;\n stopImmediatePropagation_1.call(this);\n }\n });\n }\n}","import { EventListener } from \"./event_listener\";\nvar Dispatcher = /** @class */function () {\n function Dispatcher(application) {\n this.application = application;\n this.eventListenerMaps = new Map();\n this.started = false;\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 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 Object.defineProperty(Dispatcher.prototype, \"eventListeners\", {\n get: function () {\n return Array.from(this.eventListenerMaps.values()).reduce(function (listeners, map) {\n return listeners.concat(Array.from(map.values()));\n }, []);\n },\n enumerable: true,\n configurable: true\n });\n // Binding observer delegate\n /** @hidden */\n Dispatcher.prototype.bindingConnected = function (binding) {\n this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n };\n /** @hidden */\n Dispatcher.prototype.bindingDisconnected = function (binding) {\n this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n };\n // Error handling\n Dispatcher.prototype.handleError = function (error, message, detail) {\n if (detail === void 0) {\n detail = {};\n }\n this.application.handleError(error, \"Error \" + message, detail);\n };\n Dispatcher.prototype.fetchEventListenerForBinding = function (binding) {\n var eventTarget = binding.eventTarget,\n eventName = binding.eventName;\n return this.fetchEventListener(eventTarget, eventName);\n };\n Dispatcher.prototype.fetchEventListener = function (eventTarget, eventName) {\n var eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n var eventListener = eventListenerMap.get(eventName);\n if (!eventListener) {\n eventListener = this.createEventListener(eventTarget, eventName);\n eventListenerMap.set(eventName, eventListener);\n }\n return eventListener;\n };\n Dispatcher.prototype.createEventListener = function (eventTarget, eventName) {\n var eventListener = new EventListener(eventTarget, eventName);\n if (this.started) {\n eventListener.connect();\n }\n return eventListener;\n };\n Dispatcher.prototype.fetchEventListenerMapForEventTarget = function (eventTarget) {\n var eventListenerMap = this.eventListenerMaps.get(eventTarget);\n if (!eventListenerMap) {\n eventListenerMap = new Map();\n this.eventListenerMaps.set(eventTarget, eventListenerMap);\n }\n return eventListenerMap;\n };\n return Dispatcher;\n}();\nexport { Dispatcher };","// capture nos.: 12 23 4 43 1 5 56 7 76\nvar descriptorPattern = /^((.+?)(@(window|document))?->)?(.+?)(#(.+))?$/;\nexport function parseDescriptorString(descriptorString) {\n var source = descriptorString.trim();\n var matches = source.match(descriptorPattern) || [];\n return {\n eventTarget: parseEventTarget(matches[4]),\n eventName: matches[2],\n identifier: matches[5],\n methodName: matches[7]\n };\n}\nfunction parseEventTarget(eventTargetName) {\n if (eventTargetName == \"window\") {\n return window;\n } else if (eventTargetName == \"document\") {\n return document;\n }\n}\nexport function stringifyEventTarget(eventTarget) {\n if (eventTarget == window) {\n return \"window\";\n } else if (eventTarget == document) {\n return \"document\";\n }\n}","import { parseDescriptorString, stringifyEventTarget } from \"./action_descriptor\";\nvar Action = /** @class */function () {\n function Action(element, index, descriptor) {\n this.element = element;\n this.index = index;\n this.eventTarget = descriptor.eventTarget || element;\n this.eventName = descriptor.eventName || getDefaultEventNameForElement(element) || error(\"missing event name\");\n this.identifier = descriptor.identifier || error(\"missing identifier\");\n this.methodName = descriptor.methodName || error(\"missing method name\");\n }\n Action.forToken = function (token) {\n return new this(token.element, token.index, parseDescriptorString(token.content));\n };\n Action.prototype.toString = function () {\n var eventNameSuffix = this.eventTargetName ? \"@\" + this.eventTargetName : \"\";\n return \"\" + this.eventName + eventNameSuffix + \"->\" + this.identifier + \"#\" + this.methodName;\n };\n Object.defineProperty(Action.prototype, \"eventTargetName\", {\n get: function () {\n return stringifyEventTarget(this.eventTarget);\n },\n enumerable: true,\n configurable: true\n });\n return Action;\n}();\nexport { Action };\nvar defaultEventNames = {\n \"a\": function (e) {\n return \"click\";\n },\n \"button\": function (e) {\n return \"click\";\n },\n \"form\": function (e) {\n return \"submit\";\n },\n \"input\": function (e) {\n return e.getAttribute(\"type\") == \"submit\" ? \"click\" : \"change\";\n },\n \"select\": function (e) {\n return \"change\";\n },\n \"textarea\": function (e) {\n return \"change\";\n }\n};\nexport function getDefaultEventNameForElement(element) {\n var tagName = element.tagName.toLowerCase();\n if (tagName in defaultEventNames) {\n return defaultEventNames[tagName](element);\n }\n}\nfunction error(message) {\n throw new Error(message);\n}","var Binding = /** @class */function () {\n function Binding(context, action) {\n this.context = context;\n this.action = action;\n }\n Object.defineProperty(Binding.prototype, \"index\", {\n get: function () {\n return this.action.index;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Binding.prototype, \"eventTarget\", {\n get: function () {\n return this.action.eventTarget;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Binding.prototype, \"identifier\", {\n get: function () {\n return this.context.identifier;\n },\n enumerable: true,\n configurable: true\n });\n Binding.prototype.handleEvent = function (event) {\n if (this.willBeInvokedByEvent(event)) {\n this.invokeWithEvent(event);\n }\n };\n Object.defineProperty(Binding.prototype, \"eventName\", {\n get: function () {\n return this.action.eventName;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Binding.prototype, \"method\", {\n get: function () {\n var method = this.controller[this.methodName];\n if (typeof method == \"function\") {\n return method;\n }\n throw new Error(\"Action \\\"\" + this.action + \"\\\" references undefined method \\\"\" + this.methodName + \"\\\"\");\n },\n enumerable: true,\n configurable: true\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 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 Binding.prototype.willBeInvokedByEvent = function (event) {\n var eventTarget = event.target;\n if (this.element === eventTarget) {\n return true;\n } else if (eventTarget instanceof Element && this.element.contains(eventTarget)) {\n return this.scope.containsElement(eventTarget);\n } else {\n return true;\n }\n };\n Object.defineProperty(Binding.prototype, \"controller\", {\n get: function () {\n return this.context.controller;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Binding.prototype, \"methodName\", {\n get: function () {\n return this.action.methodName;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Binding.prototype, \"element\", {\n get: function () {\n return this.scope.element;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Binding.prototype, \"scope\", {\n get: function () {\n return this.context.scope;\n },\n enumerable: true,\n configurable: true\n });\n return Binding;\n}();\nexport { Binding };","var ElementObserver = /** @class */function () {\n function ElementObserver(element, delegate) {\n var _this = this;\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 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 ElementObserver.prototype.stop = function () {\n if (this.started) {\n this.mutationObserver.takeRecords();\n this.mutationObserver.disconnect();\n this.started = false;\n }\n };\n ElementObserver.prototype.refresh = function () {\n if (this.started) {\n var matches = new Set(this.matchElementsInTree());\n for (var _i = 0, _a = Array.from(this.elements); _i < _a.length; _i++) {\n var element = _a[_i];\n if (!matches.has(element)) {\n this.removeElement(element);\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 };\n // Mutation record processing\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 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 ElementObserver.prototype.processAttributeChange = function (node, attributeName) {\n var element = node;\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 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 if (element) {\n this.processTree(element, this.removeElement);\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 if (element && this.elementIsActive(element)) {\n this.processTree(element, this.addElement);\n }\n }\n };\n // Element matching\n ElementObserver.prototype.matchElement = function (element) {\n return this.delegate.matchElement(element);\n };\n ElementObserver.prototype.matchElementsInTree = function (tree) {\n if (tree === void 0) {\n tree = this.element;\n }\n return this.delegate.matchElementsInTree(tree);\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 ElementObserver.prototype.elementFromNode = function (node) {\n if (node.nodeType == Node.ELEMENT_NODE) {\n return node;\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 };\n // Element tracking\n ElementObserver.prototype.addElement = function (element) {\n if (!this.elements.has(element)) {\n if (this.elementIsActive(element)) {\n this.elements.add(element);\n if (this.delegate.elementMatched) {\n this.delegate.elementMatched(element);\n }\n }\n }\n };\n ElementObserver.prototype.removeElement = function (element) {\n if (this.elements.has(element)) {\n this.elements.delete(element);\n if (this.delegate.elementUnmatched) {\n this.delegate.elementUnmatched(element);\n }\n }\n };\n return ElementObserver;\n}();\nexport { ElementObserver };","import { ElementObserver } from \"./element_observer\";\nvar AttributeObserver = /** @class */function () {\n function AttributeObserver(element, attributeName, delegate) {\n this.attributeName = attributeName;\n this.delegate = delegate;\n this.elementObserver = new ElementObserver(element, this);\n }\n Object.defineProperty(AttributeObserver.prototype, \"element\", {\n get: function () {\n return this.elementObserver.element;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AttributeObserver.prototype, \"selector\", {\n get: function () {\n return \"[\" + this.attributeName + \"]\";\n },\n enumerable: true,\n configurable: true\n });\n AttributeObserver.prototype.start = function () {\n this.elementObserver.start();\n };\n AttributeObserver.prototype.stop = function () {\n this.elementObserver.stop();\n };\n AttributeObserver.prototype.refresh = function () {\n this.elementObserver.refresh();\n };\n Object.defineProperty(AttributeObserver.prototype, \"started\", {\n get: function () {\n return this.elementObserver.started;\n },\n enumerable: true,\n configurable: true\n });\n // Element observer delegate\n AttributeObserver.prototype.matchElement = function (element) {\n return element.hasAttribute(this.attributeName);\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 AttributeObserver.prototype.elementMatched = function (element) {\n if (this.delegate.elementMatchedAttribute) {\n this.delegate.elementMatchedAttribute(element, this.attributeName);\n }\n };\n AttributeObserver.prototype.elementUnmatched = function (element) {\n if (this.delegate.elementUnmatchedAttribute) {\n this.delegate.elementUnmatchedAttribute(element, this.attributeName);\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 return AttributeObserver;\n}();\nexport { AttributeObserver };","export function add(map, key, value) {\n fetch(map, key).add(value);\n}\nexport function del(map, key, value) {\n fetch(map, key).delete(value);\n prune(map, key);\n}\nexport function fetch(map, key) {\n var values = map.get(key);\n if (!values) {\n values = new Set();\n map.set(key, values);\n }\n return values;\n}\nexport function prune(map, key) {\n var values = map.get(key);\n if (values != null && values.size == 0) {\n map.delete(key);\n }\n}","import { add, del } from \"./set_operations\";\nvar Multimap = /** @class */function () {\n function Multimap() {\n this.valuesByKey = new Map();\n }\n Object.defineProperty(Multimap.prototype, \"values\", {\n get: function () {\n var sets = Array.from(this.valuesByKey.values());\n return sets.reduce(function (values, set) {\n return values.concat(Array.from(set));\n }, []);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Multimap.prototype, \"size\", {\n get: function () {\n var sets = Array.from(this.valuesByKey.values());\n return sets.reduce(function (size, set) {\n return size + set.size;\n }, 0);\n },\n enumerable: true,\n configurable: true\n });\n Multimap.prototype.add = function (key, value) {\n add(this.valuesByKey, key, value);\n };\n Multimap.prototype.delete = function (key, value) {\n del(this.valuesByKey, key, value);\n };\n Multimap.prototype.has = function (key, value) {\n var values = this.valuesByKey.get(key);\n return values != null && values.has(value);\n };\n Multimap.prototype.hasKey = function (key) {\n return this.valuesByKey.has(key);\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 Multimap.prototype.getValuesForKey = function (key) {\n var values = this.valuesByKey.get(key);\n return values ? Array.from(values) : [];\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 return Multimap;\n}();\nexport { Multimap };","var __extends = this && this.__extends || function () {\n var extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nimport { Multimap } from \"./multimap\";\nimport { add, del } from \"./set_operations\";\nvar IndexedMultimap = /** @class */function (_super) {\n __extends(IndexedMultimap, _super);\n function IndexedMultimap() {\n var _this = _super.call(this) || this;\n _this.keysByValue = new Map();\n return _this;\n }\n Object.defineProperty(IndexedMultimap.prototype, \"values\", {\n get: function () {\n return Array.from(this.keysByValue.keys());\n },\n enumerable: true,\n configurable: true\n });\n IndexedMultimap.prototype.add = function (key, value) {\n _super.prototype.add.call(this, key, value);\n add(this.keysByValue, value, key);\n };\n IndexedMultimap.prototype.delete = function (key, value) {\n _super.prototype.delete.call(this, key, value);\n del(this.keysByValue, value, key);\n };\n IndexedMultimap.prototype.hasValue = function (value) {\n return this.keysByValue.has(value);\n };\n IndexedMultimap.prototype.getKeysForValue = function (value) {\n var set = this.keysByValue.get(value);\n return set ? Array.from(set) : [];\n };\n return IndexedMultimap;\n}(Multimap);\nexport { IndexedMultimap };","import { AttributeObserver } from \"./attribute_observer\";\nimport { Multimap } from \"@stimulus/multimap\";\nvar TokenListObserver = /** @class */function () {\n function TokenListObserver(element, attributeName, delegate) {\n this.attributeObserver = new AttributeObserver(element, attributeName, this);\n this.delegate = delegate;\n this.tokensByElement = new Multimap();\n }\n Object.defineProperty(TokenListObserver.prototype, \"started\", {\n get: function () {\n return this.attributeObserver.started;\n },\n enumerable: true,\n configurable: true\n });\n TokenListObserver.prototype.start = function () {\n this.attributeObserver.start();\n };\n TokenListObserver.prototype.stop = function () {\n this.attributeObserver.stop();\n };\n TokenListObserver.prototype.refresh = function () {\n this.attributeObserver.refresh();\n };\n Object.defineProperty(TokenListObserver.prototype, \"element\", {\n get: function () {\n return this.attributeObserver.element;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TokenListObserver.prototype, \"attributeName\", {\n get: function () {\n return this.attributeObserver.attributeName;\n },\n enumerable: true,\n configurable: true\n });\n // Attribute observer delegate\n TokenListObserver.prototype.elementMatchedAttribute = function (element) {\n this.tokensMatched(this.readTokensForElement(element));\n };\n TokenListObserver.prototype.elementAttributeValueChanged = function (element) {\n var _a = this.refreshTokensForElement(element),\n unmatchedTokens = _a[0],\n matchedTokens = _a[1];\n this.tokensUnmatched(unmatchedTokens);\n this.tokensMatched(matchedTokens);\n };\n TokenListObserver.prototype.elementUnmatchedAttribute = function (element) {\n this.tokensUnmatched(this.tokensByElement.getValuesForKey(element));\n };\n TokenListObserver.prototype.tokensMatched = function (tokens) {\n var _this = this;\n tokens.forEach(function (token) {\n return _this.tokenMatched(token);\n });\n };\n TokenListObserver.prototype.tokensUnmatched = function (tokens) {\n var _this = this;\n tokens.forEach(function (token) {\n return _this.tokenUnmatched(token);\n });\n };\n TokenListObserver.prototype.tokenMatched = function (token) {\n this.delegate.tokenMatched(token);\n this.tokensByElement.add(token.element, token);\n };\n TokenListObserver.prototype.tokenUnmatched = function (token) {\n this.delegate.tokenUnmatched(token);\n this.tokensByElement.delete(token.element, token);\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 if (firstDifferingIndex == -1) {\n return [[], []];\n } else {\n return [previousTokens.slice(firstDifferingIndex), currentTokens.slice(firstDifferingIndex)];\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 return TokenListObserver;\n}();\nexport { TokenListObserver };\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}\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}\nfunction tokensAreEqual(left, right) {\n return left && right && left.index == right.index && left.content == right.content;\n}","import { TokenListObserver } from \"./token_list_observer\";\nvar ValueListObserver = /** @class */function () {\n function ValueListObserver(element, attributeName, delegate) {\n this.tokenListObserver = new TokenListObserver(element, attributeName, this);\n this.delegate = delegate;\n this.parseResultsByToken = new WeakMap();\n this.valuesByTokenByElement = new WeakMap();\n }\n Object.defineProperty(ValueListObserver.prototype, \"started\", {\n get: function () {\n return this.tokenListObserver.started;\n },\n enumerable: true,\n configurable: true\n });\n ValueListObserver.prototype.start = function () {\n this.tokenListObserver.start();\n };\n ValueListObserver.prototype.stop = function () {\n this.tokenListObserver.stop();\n };\n ValueListObserver.prototype.refresh = function () {\n this.tokenListObserver.refresh();\n };\n Object.defineProperty(ValueListObserver.prototype, \"element\", {\n get: function () {\n return this.tokenListObserver.element;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ValueListObserver.prototype, \"attributeName\", {\n get: function () {\n return this.tokenListObserver.attributeName;\n },\n enumerable: true,\n configurable: true\n });\n ValueListObserver.prototype.tokenMatched = function (token) {\n var element = token.element;\n var value = this.fetchParseResultForToken(token).value;\n if (value) {\n this.fetchValuesByTokenForElement(element).set(token, value);\n this.delegate.elementMatchedValue(element, value);\n }\n };\n ValueListObserver.prototype.tokenUnmatched = function (token) {\n var element = token.element;\n var value = this.fetchParseResultForToken(token).value;\n if (value) {\n this.fetchValuesByTokenForElement(element).delete(token);\n this.delegate.elementUnmatchedValue(element, value);\n }\n };\n ValueListObserver.prototype.fetchParseResultForToken = function (token) {\n var parseResult = this.parseResultsByToken.get(token);\n if (!parseResult) {\n parseResult = this.parseToken(token);\n this.parseResultsByToken.set(token, parseResult);\n }\n return parseResult;\n };\n ValueListObserver.prototype.fetchValuesByTokenForElement = function (element) {\n var valuesByToken = this.valuesByTokenByElement.get(element);\n if (!valuesByToken) {\n valuesByToken = new Map();\n this.valuesByTokenByElement.set(element, valuesByToken);\n }\n return valuesByToken;\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 return ValueListObserver;\n}();\nexport { ValueListObserver };","import { Action } from \"./action\";\nimport { Binding } from \"./binding\";\nimport { ValueListObserver } from \"@stimulus/mutation-observers\";\nvar BindingObserver = /** @class */function () {\n function BindingObserver(context, delegate) {\n this.context = context;\n this.delegate = delegate;\n this.bindingsByAction = new Map();\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 BindingObserver.prototype.stop = function () {\n if (this.valueListObserver) {\n this.valueListObserver.stop();\n delete this.valueListObserver;\n this.disconnectAllActions();\n }\n };\n Object.defineProperty(BindingObserver.prototype, \"element\", {\n get: function () {\n return this.context.element;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BindingObserver.prototype, \"identifier\", {\n get: function () {\n return this.context.identifier;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BindingObserver.prototype, \"actionAttribute\", {\n get: function () {\n return this.schema.actionAttribute;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BindingObserver.prototype, \"schema\", {\n get: function () {\n return this.context.schema;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BindingObserver.prototype, \"bindings\", {\n get: function () {\n return Array.from(this.bindingsByAction.values());\n },\n enumerable: true,\n configurable: true\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 BindingObserver.prototype.disconnectAction = function (action) {\n var binding = this.bindingsByAction.get(action);\n if (binding) {\n this.bindingsByAction.delete(action);\n this.delegate.bindingDisconnected(binding);\n }\n };\n BindingObserver.prototype.disconnectAllActions = function () {\n var _this = this;\n this.bindings.forEach(function (binding) {\n return _this.delegate.bindingDisconnected(binding);\n });\n this.bindingsByAction.clear();\n };\n // Value observer delegate\n BindingObserver.prototype.parseValueForToken = function (token) {\n var action = Action.forToken(token);\n if (action.identifier == this.identifier) {\n return action;\n }\n };\n BindingObserver.prototype.elementMatchedValue = function (element, action) {\n this.connectAction(action);\n };\n BindingObserver.prototype.elementUnmatchedValue = function (element, action) {\n this.disconnectAction(action);\n };\n return BindingObserver;\n}();\nexport { BindingObserver };","import { BindingObserver } from \"./binding_observer\";\nvar Context = /** @class */function () {\n function Context(module, scope) {\n this.module = module;\n this.scope = scope;\n this.controller = new module.controllerConstructor(this);\n this.bindingObserver = new BindingObserver(this, this.dispatcher);\n try {\n this.controller.initialize();\n } catch (error) {\n this.handleError(error, \"initializing controller\");\n }\n }\n Context.prototype.connect = function () {\n this.bindingObserver.start();\n try {\n this.controller.connect();\n } catch (error) {\n this.handleError(error, \"connecting controller\");\n }\n };\n Context.prototype.disconnect = function () {\n try {\n this.controller.disconnect();\n } catch (error) {\n this.handleError(error, \"disconnecting controller\");\n }\n this.bindingObserver.stop();\n };\n Object.defineProperty(Context.prototype, \"application\", {\n get: function () {\n return this.module.application;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Context.prototype, \"identifier\", {\n get: function () {\n return this.module.identifier;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Context.prototype, \"schema\", {\n get: function () {\n return this.application.schema;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Context.prototype, \"dispatcher\", {\n get: function () {\n return this.application.dispatcher;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Context.prototype, \"element\", {\n get: function () {\n return this.scope.element;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Context.prototype, \"parentElement\", {\n get: function () {\n return this.element.parentElement;\n },\n enumerable: true,\n configurable: true\n });\n // Error handling\n Context.prototype.handleError = function (error, message, detail) {\n if (detail === void 0) {\n detail = {};\n }\n var _a = this,\n identifier = _a.identifier,\n controller = _a.controller,\n element = _a.element;\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 return Context;\n}();\nexport { Context };","var __extends = this && this.__extends || function () {\n var extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\n/** @hidden */\nexport function blessDefinition(definition) {\n return {\n identifier: definition.identifier,\n controllerConstructor: blessControllerConstructor(definition.controllerConstructor)\n };\n}\nfunction blessControllerConstructor(controllerConstructor) {\n var constructor = extend(controllerConstructor);\n constructor.bless();\n return constructor;\n}\nvar extend = function () {\n function extendWithReflect(constructor) {\n function Controller() {\n var _newTarget = this && this instanceof Controller ? this.constructor : void 0;\n return Reflect.construct(constructor, arguments, _newTarget);\n }\n Controller.prototype = Object.create(constructor.prototype, {\n constructor: {\n value: Controller\n }\n });\n Reflect.setPrototypeOf(Controller, constructor);\n return Controller;\n }\n function testReflectExtension() {\n var a = function () {\n this.a.call(this);\n };\n var b = extendWithReflect(a);\n b.prototype.a = function () {};\n return new b();\n }\n try {\n testReflectExtension();\n return extendWithReflect;\n } catch (error) {\n return function (constructor) {\n return (/** @class */function (_super) {\n __extends(Controller, _super);\n function Controller() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return Controller;\n }(constructor)\n );\n };\n }\n}();","import { Context } from \"./context\";\nimport { blessDefinition } from \"./definition\";\nvar Module = /** @class */function () {\n function Module(application, definition) {\n this.application = application;\n this.definition = blessDefinition(definition);\n this.contextsByScope = new WeakMap();\n this.connectedContexts = new Set();\n }\n Object.defineProperty(Module.prototype, \"identifier\", {\n get: function () {\n return this.definition.identifier;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Module.prototype, \"controllerConstructor\", {\n get: function () {\n return this.definition.controllerConstructor;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Module.prototype, \"contexts\", {\n get: function () {\n return Array.from(this.connectedContexts);\n },\n enumerable: true,\n configurable: true\n });\n Module.prototype.connectContextForScope = function (scope) {\n var context = this.fetchContextForScope(scope);\n this.connectedContexts.add(context);\n context.connect();\n };\n Module.prototype.disconnectContextForScope = function (scope) {\n var context = this.contextsByScope.get(scope);\n if (context) {\n this.connectedContexts.delete(context);\n context.disconnect();\n }\n };\n Module.prototype.fetchContextForScope = function (scope) {\n var context = this.contextsByScope.get(scope);\n if (!context) {\n context = new Context(this, scope);\n this.contextsByScope.set(scope, context);\n }\n return context;\n };\n return Module;\n}();\nexport { Module };","var DataMap = /** @class */function () {\n function DataMap(scope) {\n this.scope = scope;\n }\n Object.defineProperty(DataMap.prototype, \"element\", {\n get: function () {\n return this.scope.element;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataMap.prototype, \"identifier\", {\n get: function () {\n return this.scope.identifier;\n },\n enumerable: true,\n configurable: true\n });\n DataMap.prototype.get = function (key) {\n key = this.getFormattedKey(key);\n return this.element.getAttribute(key);\n };\n DataMap.prototype.set = function (key, value) {\n key = this.getFormattedKey(key);\n this.element.setAttribute(key, value);\n return this.get(key);\n };\n DataMap.prototype.has = function (key) {\n key = this.getFormattedKey(key);\n return this.element.hasAttribute(key);\n };\n DataMap.prototype.delete = function (key) {\n if (this.has(key)) {\n key = this.getFormattedKey(key);\n this.element.removeAttribute(key);\n return true;\n } else {\n return false;\n }\n };\n DataMap.prototype.getFormattedKey = function (key) {\n return \"data-\" + this.identifier + \"-\" + dasherize(key);\n };\n return DataMap;\n}();\nexport { DataMap };\nfunction dasherize(value) {\n return value.replace(/([A-Z])/g, function (_, char) {\n return \"-\" + char.toLowerCase();\n });\n}","/** @hidden */\nexport function attributeValueContainsToken(attributeName, token) {\n return \"[\" + attributeName + \"~=\\\"\" + token + \"\\\"]\";\n}","import { attributeValueContainsToken } from \"./selectors\";\nvar TargetSet = /** @class */function () {\n function TargetSet(scope) {\n this.scope = scope;\n }\n Object.defineProperty(TargetSet.prototype, \"element\", {\n get: function () {\n return this.scope.element;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TargetSet.prototype, \"identifier\", {\n get: function () {\n return this.scope.identifier;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TargetSet.prototype, \"schema\", {\n get: function () {\n return this.scope.schema;\n },\n enumerable: true,\n configurable: true\n });\n TargetSet.prototype.has = function (targetName) {\n return this.find(targetName) != null;\n };\n TargetSet.prototype.find = function () {\n var targetNames = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n targetNames[_i] = arguments[_i];\n }\n var selector = this.getSelectorForTargetNames(targetNames);\n return this.scope.findElement(selector);\n };\n TargetSet.prototype.findAll = function () {\n var targetNames = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n targetNames[_i] = arguments[_i];\n }\n var selector = this.getSelectorForTargetNames(targetNames);\n return this.scope.findAllElements(selector);\n };\n TargetSet.prototype.getSelectorForTargetNames = function (targetNames) {\n var _this = this;\n return targetNames.map(function (targetName) {\n return _this.getSelectorForTargetName(targetName);\n }).join(\", \");\n };\n TargetSet.prototype.getSelectorForTargetName = function (targetName) {\n var targetDescriptor = this.identifier + \".\" + targetName;\n return attributeValueContainsToken(this.schema.targetAttribute, targetDescriptor);\n };\n return TargetSet;\n}();\nexport { TargetSet };","import { DataMap } from \"./data_map\";\nimport { TargetSet } from \"./target_set\";\nimport { attributeValueContainsToken } from \"./selectors\";\nvar Scope = /** @class */function () {\n function Scope(schema, identifier, element) {\n this.schema = schema;\n this.identifier = identifier;\n this.element = element;\n this.targets = new TargetSet(this);\n this.data = new DataMap(this);\n }\n Scope.prototype.findElement = function (selector) {\n return this.findAllElements(selector)[0];\n };\n Scope.prototype.findAllElements = function (selector) {\n var head = this.element.matches(selector) ? [this.element] : [];\n var tail = this.filterElements(Array.from(this.element.querySelectorAll(selector)));\n return head.concat(tail);\n };\n Scope.prototype.filterElements = function (elements) {\n var _this = this;\n return elements.filter(function (element) {\n return _this.containsElement(element);\n });\n };\n Scope.prototype.containsElement = function (element) {\n return element.closest(this.controllerSelector) === this.element;\n };\n Object.defineProperty(Scope.prototype, \"controllerSelector\", {\n get: function () {\n return attributeValueContainsToken(this.schema.controllerAttribute, this.identifier);\n },\n enumerable: true,\n configurable: true\n });\n return Scope;\n}();\nexport { Scope };","import { Scope } from \"./scope\";\nimport { ValueListObserver } from \"@stimulus/mutation-observers\";\nvar ScopeObserver = /** @class */function () {\n function ScopeObserver(element, schema, delegate) {\n this.element = element;\n this.schema = schema;\n this.delegate = delegate;\n this.valueListObserver = new ValueListObserver(this.element, this.controllerAttribute, this);\n this.scopesByIdentifierByElement = new WeakMap();\n this.scopeReferenceCounts = new WeakMap();\n }\n ScopeObserver.prototype.start = function () {\n this.valueListObserver.start();\n };\n ScopeObserver.prototype.stop = function () {\n this.valueListObserver.stop();\n };\n Object.defineProperty(ScopeObserver.prototype, \"controllerAttribute\", {\n get: function () {\n return this.schema.controllerAttribute;\n },\n enumerable: true,\n configurable: true\n });\n // Value observer delegate\n /** @hidden */\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 if (!scope) {\n scope = new Scope(this.schema, identifier, element);\n scopesByIdentifier.set(identifier, scope);\n }\n return scope;\n };\n /** @hidden */\n ScopeObserver.prototype.elementMatchedValue = function (element, value) {\n var referenceCount = (this.scopeReferenceCounts.get(value) || 0) + 1;\n this.scopeReferenceCounts.set(value, referenceCount);\n if (referenceCount == 1) {\n this.delegate.scopeConnected(value);\n }\n };\n /** @hidden */\n ScopeObserver.prototype.elementUnmatchedValue = function (element, value) {\n var referenceCount = this.scopeReferenceCounts.get(value);\n if (referenceCount) {\n this.scopeReferenceCounts.set(value, referenceCount - 1);\n if (referenceCount == 1) {\n this.delegate.scopeDisconnected(value);\n }\n }\n };\n ScopeObserver.prototype.fetchScopesByIdentifierForElement = function (element) {\n var scopesByIdentifier = this.scopesByIdentifierByElement.get(element);\n if (!scopesByIdentifier) {\n scopesByIdentifier = new Map();\n this.scopesByIdentifierByElement.set(element, scopesByIdentifier);\n }\n return scopesByIdentifier;\n };\n return ScopeObserver;\n}();\nexport { ScopeObserver };","import { Module } from \"./module\";\nimport { Multimap } from \"@stimulus/multimap\";\nimport { ScopeObserver } from \"./scope_observer\";\nvar Router = /** @class */function () {\n function Router(application) {\n this.application = application;\n this.scopeObserver = new ScopeObserver(this.element, this.schema, this);\n this.scopesByIdentifier = new Multimap();\n this.modulesByIdentifier = new Map();\n }\n Object.defineProperty(Router.prototype, \"element\", {\n get: function () {\n return this.application.element;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Router.prototype, \"schema\", {\n get: function () {\n return this.application.schema;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Router.prototype, \"controllerAttribute\", {\n get: function () {\n return this.schema.controllerAttribute;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Router.prototype, \"modules\", {\n get: function () {\n return Array.from(this.modulesByIdentifier.values());\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Router.prototype, \"contexts\", {\n get: function () {\n return this.modules.reduce(function (contexts, module) {\n return contexts.concat(module.contexts);\n }, []);\n },\n enumerable: true,\n configurable: true\n });\n Router.prototype.start = function () {\n this.scopeObserver.start();\n };\n Router.prototype.stop = function () {\n this.scopeObserver.stop();\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 Router.prototype.unloadIdentifier = function (identifier) {\n var module = this.modulesByIdentifier.get(identifier);\n if (module) {\n this.disconnectModule(module);\n }\n };\n Router.prototype.getContextForElementAndIdentifier = function (element, identifier) {\n var module = this.modulesByIdentifier.get(identifier);\n if (module) {\n return module.contexts.find(function (context) {\n return context.element == element;\n });\n }\n };\n // Error handler delegate\n /** @hidden */\n Router.prototype.handleError = function (error, message, detail) {\n this.application.handleError(error, message, detail);\n };\n // Scope observer delegate\n /** @hidden */\n Router.prototype.scopeConnected = function (scope) {\n this.scopesByIdentifier.add(scope.identifier, scope);\n var module = this.modulesByIdentifier.get(scope.identifier);\n if (module) {\n module.connectContextForScope(scope);\n }\n };\n /** @hidden */\n Router.prototype.scopeDisconnected = function (scope) {\n this.scopesByIdentifier.delete(scope.identifier, scope);\n var module = this.modulesByIdentifier.get(scope.identifier);\n if (module) {\n module.disconnectContextForScope(scope);\n }\n };\n // Modules\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 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 return Router;\n}();\nexport { Router };","export var defaultSchema = {\n controllerAttribute: \"data-controller\",\n actionAttribute: \"data-action\",\n targetAttribute: \"data-target\"\n};","var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) {\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n function step(result) {\n result.done ? resolve(result.value) : new P(function (resolve) {\n resolve(result.value);\n }).then(fulfilled, rejected);\n }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = this && this.__generator || function (thisArg, body) {\n var _ = {\n label: 0,\n sent: function () {\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 function verb(n) {\n return function (v) {\n return step([n, v]);\n };\n }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = y[op[0] & 2 ? \"return\" : op[0] ? \"throw\" : \"next\"]) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [0, t.value];\n switch (op[0]) {\n case 0:\n case 1:\n t = op;\n break;\n case 4:\n _.label++;\n return {\n value: op[1],\n done: false\n };\n case 5:\n _.label++;\n y = op[1];\n op = [0];\n continue;\n case 7:\n op = _.ops.pop();\n _.trys.pop();\n continue;\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 if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n if (t && _.label < t[2]) {\n _.label = t[2];\n _.ops.push(op);\n break;\n }\n if (t[2]) _.ops.pop();\n _.trys.pop();\n continue;\n }\n op = body.call(thisArg, _);\n } catch (e) {\n op = [6, e];\n y = 0;\n } finally {\n f = t = 0;\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};\nimport { Dispatcher } from \"./dispatcher\";\nimport { Router } from \"./router\";\nimport { defaultSchema } from \"./schema\";\nvar Application = /** @class */function () {\n function Application(element, schema) {\n if (element === void 0) {\n element = document.documentElement;\n }\n if (schema === void 0) {\n schema = defaultSchema;\n }\n this.element = element;\n this.schema = schema;\n this.dispatcher = new Dispatcher(this);\n this.router = new Router(this);\n }\n Application.start = function (element, schema) {\n var application = new Application(element, schema);\n application.start();\n return application;\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 /*yield*/, domReady()];\n case 1:\n _a.sent();\n this.router.start();\n this.dispatcher.start();\n return [2 /*return*/];\n }\n });\n });\n };\n\n Application.prototype.stop = function () {\n this.router.stop();\n this.dispatcher.stop();\n };\n Application.prototype.register = function (identifier, controllerConstructor) {\n this.load({\n identifier: identifier,\n controllerConstructor: controllerConstructor\n });\n };\n Application.prototype.load = function (head) {\n var _this = this;\n var rest = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n rest[_i - 1] = arguments[_i];\n }\n var definitions = Array.isArray(head) ? head : [head].concat(rest);\n definitions.forEach(function (definition) {\n return _this.router.loadDefinition(definition);\n });\n };\n Application.prototype.unload = function (head) {\n var _this = this;\n var rest = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n rest[_i - 1] = arguments[_i];\n }\n var identifiers = Array.isArray(head) ? head : [head].concat(rest);\n identifiers.forEach(function (identifier) {\n return _this.router.unloadIdentifier(identifier);\n });\n };\n Object.defineProperty(Application.prototype, \"controllers\", {\n // Controllers\n get: function () {\n return this.router.contexts.map(function (context) {\n return context.controller;\n });\n },\n enumerable: true,\n configurable: true\n });\n Application.prototype.getControllerForElementAndIdentifier = function (element, identifier) {\n var context = this.router.getContextForElementAndIdentifier(element, identifier);\n return context ? context.controller : null;\n };\n // Error handling\n Application.prototype.handleError = function (error, message, detail) {\n console.error(\"%s\\n\\n%o\\n\\n%o\", message, error, detail);\n };\n return Application;\n}();\nexport { Application };\nfunction domReady() {\n return new Promise(function (resolve) {\n if (document.readyState == \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", resolve);\n } else {\n resolve();\n }\n });\n}","/** @hidden */\nexport function defineTargetProperties(constructor) {\n var prototype = constructor.prototype;\n var targetNames = getTargetNamesForConstructor(constructor);\n targetNames.forEach(function (name) {\n var _a;\n return defineLinkedProperties(prototype, (_a = {}, _a[name + \"Target\"] = {\n get: function () {\n var target = this.targets.find(name);\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 () {\n return this.targets.findAll(name);\n }\n }, _a[\"has\" + capitalize(name) + \"Target\"] = {\n get: function () {\n return this.targets.has(name);\n }\n }, _a));\n });\n}\nfunction getTargetNamesForConstructor(constructor) {\n var ancestors = getAncestorsForConstructor(constructor);\n return Array.from(ancestors.reduce(function (targetNames, constructor) {\n getOwnTargetNamesForConstructor(constructor).forEach(function (name) {\n return targetNames.add(name);\n });\n return targetNames;\n }, new Set()));\n}\nfunction getAncestorsForConstructor(constructor) {\n var ancestors = [];\n while (constructor) {\n ancestors.push(constructor);\n constructor = Object.getPrototypeOf(constructor);\n }\n return ancestors;\n}\nfunction getOwnTargetNamesForConstructor(constructor) {\n var definition = constructor[\"targets\"];\n return Array.isArray(definition) ? definition : [];\n}\nfunction defineLinkedProperties(object, properties) {\n Object.keys(properties).forEach(function (name) {\n if (!(name in object)) {\n var descriptor = properties[name];\n Object.defineProperty(object, name, descriptor);\n }\n });\n}\nfunction capitalize(name) {\n return name.charAt(0).toUpperCase() + name.slice(1);\n}","import { defineTargetProperties } from \"./target_properties\";\nvar Controller = /** @class */function () {\n function Controller(context) {\n this.context = context;\n }\n Controller.bless = function () {\n defineTargetProperties(this);\n };\n Object.defineProperty(Controller.prototype, \"application\", {\n get: function () {\n return this.context.application;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Controller.prototype, \"scope\", {\n get: function () {\n return this.context.scope;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Controller.prototype, \"element\", {\n get: function () {\n return this.scope.element;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Controller.prototype, \"identifier\", {\n get: function () {\n return this.scope.identifier;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Controller.prototype, \"targets\", {\n get: function () {\n return this.scope.targets;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Controller.prototype, \"data\", {\n get: function () {\n return this.scope.data;\n },\n enumerable: true,\n configurable: true\n });\n Controller.prototype.initialize = function () {\n // Override in your subclass to set up initial controller state\n };\n Controller.prototype.connect = function () {\n // Override in your subclass to respond when the controller is connected to the DOM\n };\n Controller.prototype.disconnect = function () {\n // Override in your subclass to respond when the controller is disconnected from the DOM\n };\n Controller.targets = [];\n return Controller;\n}();\nexport { Controller };","module.exports = /[!-#%-\\*,-\\/:;\\?@\\[-\\]_\\{\\}\\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\\u09FD\\u0A76\\u0AF0\\u0C84\\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-\\u2E4E\\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]|\\uD803[\\uDF55-\\uDF59]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC8\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDC4B-\\uDC4F\\uDC5B\\uDC5D\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDE60-\\uDE6C\\uDF3C-\\uDF3E]|\\uD806[\\uDC3B\\uDE3F-\\uDE46\\uDE9A-\\uDE9C\\uDE9E-\\uDEA2]|\\uD807[\\uDC41-\\uDC45\\uDC70\\uDC71\\uDEF7\\uDEF8]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD81B[\\uDE97-\\uDE9A]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]|\\uD83A[\\uDD5E\\uDD5F]/;","/**\n * class Ruler\n *\n * Helper class, used by [[MarkdownIt#core]], [[MarkdownIt#block]] and\n * [[MarkdownIt#inline]] to manage sequences of functions (rules):\n *\n * - keep rules in defined order\n * - assign the name to each rule\n * - enable/disable rules\n * - add/replace rules\n * - allow assign rules to additional named chains (in the same)\n * - cacheing lists of active rules\n *\n * You will not need use this class directly until write plugins. For simple\n * rules control use [[MarkdownIt.disable]], [[MarkdownIt.enable]] and\n * [[MarkdownIt.use]].\n **/\n'use strict';\n\n/**\n * new Ruler()\n **/\nfunction Ruler() {\n // List of added rules. Each element is:\n //\n // {\n // name: XXX,\n // enabled: Boolean,\n // fn: Function(),\n // alt: [ name2, name3 ]\n // }\n //\n this.__rules__ = [];\n\n // Cached rule chains.\n //\n // First level - chain name, '' for default.\n // Second level - diginal anchor for fast filtering by charcodes.\n //\n this.__cache__ = null;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Helper methods, should not be used directly\n\n// Find rule index by name\n//\nRuler.prototype.__find__ = function (name) {\n for (var i = 0; i < this.__rules__.length; i++) {\n if (this.__rules__[i].name === name) {\n return i;\n }\n }\n return -1;\n};\n\n// Build rules lookup cache\n//\nRuler.prototype.__compile__ = function () {\n var self = this;\n var chains = [''];\n\n // collect unique names\n self.__rules__.forEach(function (rule) {\n if (!rule.enabled) {\n return;\n }\n rule.alt.forEach(function (altName) {\n if (chains.indexOf(altName) < 0) {\n chains.push(altName);\n }\n });\n });\n self.__cache__ = {};\n chains.forEach(function (chain) {\n self.__cache__[chain] = [];\n self.__rules__.forEach(function (rule) {\n if (!rule.enabled) {\n return;\n }\n if (chain && rule.alt.indexOf(chain) < 0) {\n return;\n }\n self.__cache__[chain].push(rule.fn);\n });\n });\n};\n\n/**\n * Ruler.at(name, fn [, options])\n * - name (String): rule name to replace.\n * - fn (Function): new rule function.\n * - options (Object): new rule options (not mandatory).\n *\n * Replace rule by name with new function & options. Throws error if name not\n * found.\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * Replace existing typographer replacement rule with new one:\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.core.ruler.at('replacements', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.at = function (name, fn, options) {\n var index = this.__find__(name);\n var opt = options || {};\n if (index === -1) {\n throw new Error('Parser rule not found: ' + name);\n }\n this.__rules__[index].fn = fn;\n this.__rules__[index].alt = opt.alt || [];\n this.__cache__ = null;\n};\n\n/**\n * Ruler.before(beforeName, ruleName, fn [, options])\n * - beforeName (String): new rule will be added before this one.\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Add new rule to chain before one with given name. See also\n * [[Ruler.after]], [[Ruler.push]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.block.ruler.before('paragraph', 'my_rule', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.before = function (beforeName, ruleName, fn, options) {\n var index = this.__find__(beforeName);\n var opt = options || {};\n if (index === -1) {\n throw new Error('Parser rule not found: ' + beforeName);\n }\n this.__rules__.splice(index, 0, {\n name: ruleName,\n enabled: true,\n fn: fn,\n alt: opt.alt || []\n });\n this.__cache__ = null;\n};\n\n/**\n * Ruler.after(afterName, ruleName, fn [, options])\n * - afterName (String): new rule will be added after this one.\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Add new rule to chain after one with given name. See also\n * [[Ruler.before]], [[Ruler.push]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.inline.ruler.after('text', 'my_rule', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.after = function (afterName, ruleName, fn, options) {\n var index = this.__find__(afterName);\n var opt = options || {};\n if (index === -1) {\n throw new Error('Parser rule not found: ' + afterName);\n }\n this.__rules__.splice(index + 1, 0, {\n name: ruleName,\n enabled: true,\n fn: fn,\n alt: opt.alt || []\n });\n this.__cache__ = null;\n};\n\n/**\n * Ruler.push(ruleName, fn [, options])\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Push new rule to the end of chain. See also\n * [[Ruler.before]], [[Ruler.after]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.core.ruler.push('my_rule', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.push = function (ruleName, fn, options) {\n var opt = options || {};\n this.__rules__.push({\n name: ruleName,\n enabled: true,\n fn: fn,\n alt: opt.alt || []\n });\n this.__cache__ = null;\n};\n\n/**\n * Ruler.enable(list [, ignoreInvalid]) -> Array\n * - list (String|Array): list of rule names to enable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable rules with given names. If any rule name not found - throw Error.\n * Errors can be disabled by second param.\n *\n * Returns list of found rule names (if no exception happened).\n *\n * See also [[Ruler.disable]], [[Ruler.enableOnly]].\n **/\nRuler.prototype.enable = function (list, ignoreInvalid) {\n if (!Array.isArray(list)) {\n list = [list];\n }\n var result = [];\n\n // Search by name and enable\n list.forEach(function (name) {\n var idx = this.__find__(name);\n if (idx < 0) {\n if (ignoreInvalid) {\n return;\n }\n throw new Error('Rules manager: invalid rule name ' + name);\n }\n this.__rules__[idx].enabled = true;\n result.push(name);\n }, this);\n this.__cache__ = null;\n return result;\n};\n\n/**\n * Ruler.enableOnly(list [, ignoreInvalid])\n * - list (String|Array): list of rule names to enable (whitelist).\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable rules with given names, and disable everything else. If any rule name\n * not found - throw Error. Errors can be disabled by second param.\n *\n * See also [[Ruler.disable]], [[Ruler.enable]].\n **/\nRuler.prototype.enableOnly = function (list, ignoreInvalid) {\n if (!Array.isArray(list)) {\n list = [list];\n }\n this.__rules__.forEach(function (rule) {\n rule.enabled = false;\n });\n this.enable(list, ignoreInvalid);\n};\n\n/**\n * Ruler.disable(list [, ignoreInvalid]) -> Array\n * - list (String|Array): list of rule names to disable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Disable rules with given names. If any rule name not found - throw Error.\n * Errors can be disabled by second param.\n *\n * Returns list of found rule names (if no exception happened).\n *\n * See also [[Ruler.enable]], [[Ruler.enableOnly]].\n **/\nRuler.prototype.disable = function (list, ignoreInvalid) {\n if (!Array.isArray(list)) {\n list = [list];\n }\n var result = [];\n\n // Search by name and disable\n list.forEach(function (name) {\n var idx = this.__find__(name);\n if (idx < 0) {\n if (ignoreInvalid) {\n return;\n }\n throw new Error('Rules manager: invalid rule name ' + name);\n }\n this.__rules__[idx].enabled = false;\n result.push(name);\n }, this);\n this.__cache__ = null;\n return result;\n};\n\n/**\n * Ruler.getRules(chainName) -> Array\n *\n * Return array of active functions (rules) for given chain name. It analyzes\n * rules configuration, compiles caches if not exists and returns result.\n *\n * Default chain name is `''` (empty string). It can't be skipped. That's\n * done intentionally, to keep signature monomorphic for high speed.\n **/\nRuler.prototype.getRules = function (chainName) {\n if (this.__cache__ === null) {\n this.__compile__();\n }\n\n // Chain can be empty, if rules disabled. But we still have to return Array.\n return this.__cache__[chainName] || [];\n};\nmodule.exports = Ruler;","// Token class\n\n'use strict';\n\n/**\n * class Token\n **/\n\n/**\n * new Token(type, tag, nesting)\n *\n * Create new token and fill passed properties.\n **/\nfunction Token(type, tag, nesting) {\n /**\n * Token#type -> String\n *\n * Type of the token (string, e.g. \"paragraph_open\")\n **/\n this.type = type;\n\n /**\n * Token#tag -> String\n *\n * html tag name, e.g. \"p\"\n **/\n this.tag = tag;\n\n /**\n * Token#attrs -> Array\n *\n * Html attributes. Format: `[ [ name1, value1 ], [ name2, value2 ] ]`\n **/\n this.attrs = null;\n\n /**\n * Token#map -> Array\n *\n * Source map info. Format: `[ line_begin, line_end ]`\n **/\n this.map = null;\n\n /**\n * Token#nesting -> Number\n *\n * Level change (number in {-1, 0, 1} set), where:\n *\n * - `1` means the tag is opening\n * - `0` means the tag is self-closing\n * - `-1` means the tag is closing\n **/\n this.nesting = nesting;\n\n /**\n * Token#level -> Number\n *\n * nesting level, the same as `state.level`\n **/\n this.level = 0;\n\n /**\n * Token#children -> Array\n *\n * An array of child nodes (inline and img tokens)\n **/\n this.children = null;\n\n /**\n * Token#content -> String\n *\n * In a case of self-closing tag (code, html, fence, etc.),\n * it has contents of this tag.\n **/\n this.content = '';\n\n /**\n * Token#markup -> String\n *\n * '*' or '_' for emphasis, fence string for fence, etc.\n **/\n this.markup = '';\n\n /**\n * Token#info -> String\n *\n * fence infostring\n **/\n this.info = '';\n\n /**\n * Token#meta -> Object\n *\n * A place for plugins to store an arbitrary data\n **/\n this.meta = null;\n\n /**\n * Token#block -> Boolean\n *\n * True for block-level tokens, false for inline tokens.\n * Used in renderer to calculate line breaks\n **/\n this.block = false;\n\n /**\n * Token#hidden -> Boolean\n *\n * If it's true, ignore this element when rendering. Used for tight lists\n * to hide paragraphs.\n **/\n this.hidden = false;\n}\n\n/**\n * Token.attrIndex(name) -> Number\n *\n * Search attribute index by name.\n **/\nToken.prototype.attrIndex = function attrIndex(name) {\n var attrs, i, len;\n if (!this.attrs) {\n return -1;\n }\n attrs = this.attrs;\n for (i = 0, len = attrs.length; i < len; i++) {\n if (attrs[i][0] === name) {\n return i;\n }\n }\n return -1;\n};\n\n/**\n * Token.attrPush(attrData)\n *\n * Add `[ name, value ]` attribute to list. Init attrs if necessary\n **/\nToken.prototype.attrPush = function attrPush(attrData) {\n if (this.attrs) {\n this.attrs.push(attrData);\n } else {\n this.attrs = [attrData];\n }\n};\n\n/**\n * Token.attrSet(name, value)\n *\n * Set `name` attribute to `value`. Override old value if exists.\n **/\nToken.prototype.attrSet = function attrSet(name, value) {\n var idx = this.attrIndex(name),\n attrData = [name, value];\n if (idx < 0) {\n this.attrPush(attrData);\n } else {\n this.attrs[idx] = attrData;\n }\n};\n\n/**\n * Token.attrGet(name)\n *\n * Get the value of attribute `name`, or null if it does not exist.\n **/\nToken.prototype.attrGet = function attrGet(name) {\n var idx = this.attrIndex(name),\n value = null;\n if (idx >= 0) {\n value = this.attrs[idx][1];\n }\n return value;\n};\n\n/**\n * Token.attrJoin(name, value)\n *\n * Join value to existing attribute via space. Or create new attribute if not\n * exists. Useful to operate with token classes.\n **/\nToken.prototype.attrJoin = function attrJoin(name, value) {\n var idx = this.attrIndex(name);\n if (idx < 0) {\n this.attrPush([name, value]);\n } else {\n this.attrs[idx][1] = this.attrs[idx][1] + ' ' + value;\n }\n};\nmodule.exports = Token;","/*\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 nonce;\n nonce = null;\n Rails.loadCSPNonce = function () {\n var ref;\n return nonce = (ref = document.querySelector(\"meta[name=csp-nonce]\")) != null ? ref.content : void 0;\n };\n Rails.cspNonce = function () {\n return nonce != null ? nonce : Rails.loadCSPNonce();\n };\n }).call(this);\n (function () {\n var expando, m;\n m = Element.prototype.matches || Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector;\n 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 expando = '_ujsData';\n Rails.getData = function (element, key) {\n var ref;\n return (ref = element[expando]) != null ? ref[key] : void 0;\n };\n Rails.setData = function (element, key, value) {\n if (element[expando] == null) {\n element[expando] = {};\n }\n return element[expando][key] = value;\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 csrfToken = Rails.csrfToken = function () {\n var meta;\n meta = document.querySelector('meta[name=csrf-token]');\n return meta && meta.content;\n };\n csrfParam = Rails.csrfParam = function () {\n var meta;\n meta = document.querySelector('meta[name=csrf-param]');\n return meta && meta.content;\n };\n Rails.CSRFProtection = function (xhr) {\n var token;\n token = csrfToken();\n if (token != null) {\n return xhr.setRequestHeader('X-CSRF-Token', token);\n }\n };\n Rails.refreshCSRFTokens = function () {\n var param, token;\n token = csrfToken();\n param = csrfParam();\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 if (typeof CustomEvent !== 'function') {\n CustomEvent = function (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 CustomEvent.prototype = window.Event.prototype;\n preventDefault = CustomEvent.prototype.preventDefault;\n CustomEvent.prototype.preventDefault = function () {\n var result;\n result = preventDefault.call(this);\n if (this.cancelable && !this.defaultPrevented) {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function () {\n return true;\n }\n });\n }\n return result;\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 Rails.stopEverything = function (e) {\n fire(e.target, 'ujs:everythingStopped');\n e.preventDefault();\n e.stopPropagation();\n return e.stopImmediatePropagation();\n };\n Rails.delegate = function (element, selector, eventType, handler) {\n return element.addEventListener(eventType, function (e) {\n var target;\n target = e.target;\n while (!(!(target instanceof Element) || matches(target, selector))) {\n target = target.parentNode;\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 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 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 return typeof options.complete === \"function\" ? options.complete(xhr, xhr.statusText) : void 0;\n });\n if (options.beforeSend != null && !options.beforeSend(xhr, options)) {\n return false;\n }\n if (xhr.readyState === XMLHttpRequest.OPENED) {\n return xhr.send(options.data);\n }\n };\n prepareOptions = function (options) {\n options.url = options.url || location.href;\n options.type = options.type.toUpperCase();\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 if (AcceptHeaders[options.dataType] == null) {\n options.dataType = '*';\n }\n options.accept = AcceptHeaders[options.dataType];\n if (options.dataType !== '*') {\n options.accept += ', */*; q=0.01';\n }\n return options;\n };\n createXHR = function (options, done) {\n var xhr;\n xhr = new XMLHttpRequest();\n xhr.open(options.type, options.url, true);\n xhr.setRequestHeader('Accept', options.accept);\n if (typeof options.data === 'string') {\n xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');\n }\n if (!options.crossDomain) {\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n CSRFProtection(xhr);\n }\n xhr.withCredentials = !!options.withCredentials;\n xhr.onreadystatechange = function () {\n if (xhr.readyState === XMLHttpRequest.DONE) {\n return done(xhr);\n }\n };\n return xhr;\n };\n processResponse = function (response, type) {\n var parser, script;\n if (typeof response === 'string' && typeof type === 'string') {\n if (type.match(/\\bjson\\b/)) {\n try {\n response = JSON.parse(response);\n } catch (error) {}\n } else if (type.match(/\\b(?:java|ecma)script\\b/)) {\n script = document.createElement('script');\n script.setAttribute('nonce', cspNonce());\n script.text = response;\n document.head.appendChild(script).parentNode.removeChild(script);\n } else if (type.match(/\\b(xml|html|svg)\\b/)) {\n parser = new DOMParser();\n type = type.replace(/;.+/, '');\n try {\n response = parser.parseFromString(response, type);\n } catch (error) {}\n }\n }\n return response;\n };\n Rails.href = function (element) {\n return element.href;\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 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 toArray = function (e) {\n return Array.prototype.slice.call(e);\n };\n Rails.serializeElement = function (element, additionalParam) {\n var inputs, params;\n inputs = [element];\n if (matches(element, 'form')) {\n inputs = toArray(element.elements);\n }\n params = [];\n inputs.forEach(function (input) {\n if (!input.name || input.disabled) {\n return;\n }\n if (matches(input, 'fieldset[disabled] *')) {\n return;\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 if (additionalParam) {\n params.push(additionalParam);\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 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 Rails.handleConfirm = function (e) {\n if (!allowAction(this)) {\n return stopEverything(e);\n }\n };\n Rails.confirm = function (message, element) {\n return confirm(message);\n };\n allowAction = function (element) {\n var answer, callback, message;\n message = element.getAttribute('data-confirm');\n if (!message) {\n return true;\n }\n answer = false;\n if (fire(element, 'confirm')) {\n try {\n answer = Rails.confirm(message, element);\n } catch (error) {}\n callback = fire(element, 'confirm:complete', [answer]);\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 Rails.handleDisabledElement = function (e) {\n var element;\n element = this;\n if (element.disabled) {\n return stopEverything(e);\n }\n };\n Rails.enableElement = function (e) {\n var element;\n if (e instanceof Event) {\n if (isXhrRedirect(e)) {\n return;\n }\n element = e.target;\n } else {\n element = e;\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 Rails.disableElement = function (e) {\n var element;\n element = e instanceof Event ? e.target : e;\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 disableLinkElement = function (element) {\n var replacement;\n if (getData(element, 'ujs:disabled')) {\n return;\n }\n replacement = element.getAttribute('data-disable-with');\n if (replacement != null) {\n setData(element, 'ujs:enable-with', element.innerHTML);\n element.innerHTML = replacement;\n }\n element.addEventListener('click', stopEverything);\n return setData(element, 'ujs:disabled', true);\n };\n enableLinkElement = function (element) {\n var originalText;\n originalText = getData(element, 'ujs:enable-with');\n if (originalText != null) {\n element.innerHTML = originalText;\n setData(element, 'ujs:enable-with', null);\n }\n element.removeEventListener('click', stopEverything);\n return setData(element, 'ujs:disabled', null);\n };\n disableFormElements = function (form) {\n return formElements(form, Rails.formDisableSelector).forEach(disableFormElement);\n };\n disableFormElement = function (element) {\n var replacement;\n if (getData(element, 'ujs:disabled')) {\n return;\n }\n replacement = element.getAttribute('data-disable-with');\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 element.disabled = true;\n return setData(element, 'ujs:disabled', true);\n };\n enableFormElements = function (form) {\n return formElements(form, Rails.formEnableSelector).forEach(enableFormElement);\n };\n enableFormElement = function (element) {\n var originalText;\n originalText = getData(element, 'ujs:enable-with');\n if (originalText != null) {\n if (matches(element, 'button')) {\n element.innerHTML = originalText;\n } else {\n element.value = originalText;\n }\n setData(element, 'ujs:enable-with', null);\n }\n element.disabled = false;\n return setData(element, 'ujs:disabled', null);\n };\n isXhrRedirect = function (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 Rails.handleMethod = function (e) {\n var csrfParam, csrfToken, form, formContent, href, link, method;\n link = this;\n method = link.getAttribute('data-method');\n if (!method) {\n return;\n }\n href = Rails.href(link);\n csrfToken = Rails.csrfToken();\n csrfParam = Rails.csrfParam();\n form = document.createElement('form');\n formContent = \"\";\n if (csrfParam != null && csrfToken != null && !Rails.isCrossDomain(href)) {\n formContent += \"\";\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 isRemote = function (element) {\n var value;\n value = element.getAttribute('data-remote');\n return value != null && value !== 'false';\n };\n Rails.handleRemote = function (e) {\n var button, data, dataType, element, method, url, withCredentials;\n element = this;\n if (!isRemote(element)) {\n return true;\n }\n if (!fire(element, 'ajax:before')) {\n fire(element, 'ajax:stopped');\n return false;\n }\n withCredentials = element.getAttribute('data-with-credentials');\n dataType = element.getAttribute('data-type') || 'script';\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 if (method.toUpperCase() === 'GET') {\n url = url.replace(/\\?.*$/, '');\n }\n if (element.enctype === 'multipart/form-data') {\n data = new FormData(element);\n if (button != null) {\n data.append(button.name, button.value);\n }\n } else {\n data = serializeElement(element, button);\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 ajax({\n type: method || 'GET',\n url: url,\n data: data,\n dataType: dataType,\n beforeSend: function (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 () {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:success', args);\n },\n error: function () {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:error', args);\n },\n complete: function () {\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 Rails.formSubmitButtonClick = function (e) {\n var button, form;\n button = this;\n form = button.form;\n if (!form) {\n return;\n }\n if (button.name) {\n setData(form, 'ujs:submit-button', {\n name: button.name,\n value: button.value\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 Rails.preventInsignificantClick = function (e) {\n var data, insignificantMetaClick, link, metaClick, method, nonPrimaryMouseClick;\n link = this;\n method = (link.getAttribute('data-method') || 'GET').toUpperCase();\n data = link.getAttribute('data-params');\n metaClick = e.metaKey || e.ctrlKey;\n insignificantMetaClick = metaClick && method === 'GET' && !data;\n nonPrimaryMouseClick = e.button != null && e.button !== 0;\n if (nonPrimaryMouseClick || insignificantMetaClick) {\n return e.stopImmediatePropagation();\n }\n };\n }).call(this);\n (function () {\n var $, CSRFProtection, delegate, disableElement, enableElement, fire, formSubmitButtonClick, getData, handleConfirm, handleDisabledElement, handleMethod, handleRemote, loadCSPNonce, preventInsignificantClick, refreshCSRFTokens;\n fire = Rails.fire, delegate = Rails.delegate, getData = Rails.getData, $ = Rails.$, refreshCSRFTokens = Rails.refreshCSRFTokens, CSRFProtection = Rails.CSRFProtection, loadCSPNonce = Rails.loadCSPNonce, enableElement = Rails.enableElement, disableElement = Rails.disableElement, handleDisabledElement = Rails.handleDisabledElement, handleConfirm = Rails.handleConfirm, preventInsignificantClick = Rails.preventInsignificantClick, handleRemote = Rails.handleRemote, formSubmitButtonClick = Rails.formSubmitButtonClick, handleMethod = Rails.handleMethod;\n 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 jQuery.rails = Rails;\n jQuery.ajaxPrefilter(function (options, originalOptions, xhr) {\n if (!options.crossDomain) {\n return CSRFProtection(xhr);\n }\n });\n }\n Rails.start = function () {\n if (window._rails_loaded) {\n throw new Error('rails-ujs has already been loaded!');\n }\n window.addEventListener('pageshow', function () {\n $(Rails.formEnableSelector).forEach(function (el) {\n if (getData(el, 'ujs:disabled')) {\n return enableElement(el);\n }\n });\n return $(Rails.linkDisableSelector).forEach(function (el) {\n if (getData(el, 'ujs:disabled')) {\n return enableElement(el);\n }\n });\n });\n delegate(document, Rails.linkDisableSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.linkDisableSelector, 'ajax:stopped', enableElement);\n delegate(document, Rails.buttonDisableSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.buttonDisableSelector, 'ajax:stopped', enableElement);\n delegate(document, Rails.linkClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.linkClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.linkClickSelector, 'click', handleConfirm);\n delegate(document, Rails.linkClickSelector, 'click', disableElement);\n delegate(document, Rails.linkClickSelector, 'click', handleRemote);\n delegate(document, Rails.linkClickSelector, 'click', handleMethod);\n delegate(document, Rails.buttonClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.buttonClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.buttonClickSelector, 'click', handleConfirm);\n delegate(document, Rails.buttonClickSelector, 'click', disableElement);\n delegate(document, Rails.buttonClickSelector, 'click', handleRemote);\n delegate(document, Rails.inputChangeSelector, 'change', handleDisabledElement);\n delegate(document, Rails.inputChangeSelector, 'change', handleConfirm);\n delegate(document, Rails.inputChangeSelector, 'change', handleRemote);\n delegate(document, Rails.formSubmitSelector, 'submit', handleDisabledElement);\n delegate(document, Rails.formSubmitSelector, 'submit', handleConfirm);\n delegate(document, Rails.formSubmitSelector, 'submit', handleRemote);\n delegate(document, Rails.formSubmitSelector, 'submit', function (e) {\n return setTimeout(function () {\n return disableElement(e);\n }, 13);\n });\n delegate(document, Rails.formSubmitSelector, 'ajax:send', disableElement);\n delegate(document, Rails.formSubmitSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.formInputClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.formInputClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.formInputClickSelector, 'click', handleConfirm);\n delegate(document, Rails.formInputClickSelector, 'click', formSubmitButtonClick);\n document.addEventListener('DOMContentLoaded', refreshCSRFTokens);\n document.addEventListener('DOMContentLoaded', loadCSPNonce);\n return window._rails_loaded = true;\n };\n if (window.Rails === Rails && fire(document, 'rails:attachBindings')) {\n Rails.start();\n }\n }).call(this);\n }).call(this);\n if (typeof module === \"object\" && module.exports) {\n module.exports = Rails;\n } else if (typeof define === \"function\" && define.amd) {\n define(Rails);\n }\n}).call(this);","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function (mod) {\n if (typeof exports == \"object\" && typeof module == \"object\")\n // CommonJS\n mod(require(\"../../lib/codemirror\"), require(\"../xml/xml\"), require(\"../meta\"));else if (typeof define == \"function\" && define.amd)\n // AMD\n define([\"../../lib/codemirror\", \"../xml/xml\", \"../meta\"], mod);else\n // Plain browser env\n mod(CodeMirror);\n})(function (CodeMirror) {\n \"use strict\";\n\n CodeMirror.defineMode(\"markdown\", function (cmCfg, modeCfg) {\n var htmlMode = CodeMirror.getMode(cmCfg, \"text/html\");\n var htmlModeMissing = htmlMode.name == \"null\";\n function getMode(name) {\n if (CodeMirror.findModeByName) {\n var found = CodeMirror.findModeByName(name);\n if (found) name = found.mime || found.mimes[0];\n }\n var mode = CodeMirror.getMode(cmCfg, name);\n return mode.name == \"null\" ? null : mode;\n }\n\n // Should characters that affect highlighting be highlighted separate?\n // Does not include characters that will be output (such as `1.` and `-` for lists)\n if (modeCfg.highlightFormatting === undefined) modeCfg.highlightFormatting = false;\n\n // Maximum number of nested blockquotes. Set to 0 for infinite nesting.\n // Excess `>` will emit `error` token.\n if (modeCfg.maxBlockquoteDepth === undefined) modeCfg.maxBlockquoteDepth = 0;\n\n // Turn on task lists? (\"- [ ] \" and \"- [x] \")\n if (modeCfg.taskLists === undefined) modeCfg.taskLists = false;\n\n // Turn on strikethrough syntax\n if (modeCfg.strikethrough === undefined) modeCfg.strikethrough = false;\n if (modeCfg.emoji === undefined) modeCfg.emoji = false;\n if (modeCfg.fencedCodeBlockHighlighting === undefined) modeCfg.fencedCodeBlockHighlighting = true;\n if (modeCfg.fencedCodeBlockDefaultMode === undefined) modeCfg.fencedCodeBlockDefaultMode = 'text/plain';\n if (modeCfg.xml === undefined) modeCfg.xml = true;\n\n // Allow token types to be overridden by user-provided token types.\n if (modeCfg.tokenTypeOverrides === undefined) modeCfg.tokenTypeOverrides = {};\n var tokenTypes = {\n header: \"header\",\n code: \"comment\",\n quote: \"quote\",\n list1: \"variable-2\",\n list2: \"variable-3\",\n list3: \"keyword\",\n hr: \"hr\",\n image: \"image\",\n imageAltText: \"image-alt-text\",\n imageMarker: \"image-marker\",\n formatting: \"formatting\",\n linkInline: \"link\",\n linkEmail: \"link\",\n linkText: \"link\",\n linkHref: \"string\",\n em: \"em\",\n strong: \"strong\",\n strikethrough: \"strikethrough\",\n emoji: \"builtin\"\n };\n for (var tokenType in tokenTypes) {\n if (tokenTypes.hasOwnProperty(tokenType) && modeCfg.tokenTypeOverrides[tokenType]) {\n tokenTypes[tokenType] = modeCfg.tokenTypeOverrides[tokenType];\n }\n }\n var hrRE = /^([*\\-_])(?:\\s*\\1){2,}\\s*$/,\n listRE = /^(?:[*\\-+]|^[0-9]+([.)]))\\s+/,\n taskListRE = /^\\[(x| )\\](?=\\s)/i // Must follow listRE\n ,\n atxHeaderRE = modeCfg.allowAtxHeaderWithoutSpace ? /^(#+)/ : /^(#+)(?: |$)/,\n setextHeaderRE = /^ {0,3}(?:\\={1,}|-{2,})\\s*$/,\n textRE = /^[^#!\\[\\]*_\\\\<>` \"'(~:]+/,\n fencedCodeRE = /^(~~~+|```+)[ \\t]*([\\w\\/+#-]*)[^\\n`]*$/,\n linkDefRE = /^\\s*\\[[^\\]]+?\\]:.*$/ // naive link-definition\n ,\n punctuation = /[!\"#$%&'()*+,\\-.\\/:;<=>?@\\[\\\\\\]^_`{|}~\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0AF0\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E42\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC9\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDF3C-\\uDF3E]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]/,\n expandedTab = \" \"; // CommonMark specifies tab as 4 spaces\n\n function switchInline(stream, state, f) {\n state.f = state.inline = f;\n return f(stream, state);\n }\n function switchBlock(stream, state, f) {\n state.f = state.block = f;\n return f(stream, state);\n }\n function lineIsEmpty(line) {\n return !line || !/\\S/.test(line.string);\n }\n\n // Blocks\n\n function blankLine(state) {\n // Reset linkTitle state\n state.linkTitle = false;\n state.linkHref = false;\n state.linkText = false;\n // Reset EM state\n state.em = false;\n // Reset STRONG state\n state.strong = false;\n // Reset strikethrough state\n state.strikethrough = false;\n // Reset state.quote\n state.quote = 0;\n // Reset state.indentedCode\n state.indentedCode = false;\n if (state.f == htmlBlock) {\n var exit = htmlModeMissing;\n if (!exit) {\n var inner = CodeMirror.innerMode(htmlMode, state.htmlState);\n exit = inner.mode.name == \"xml\" && inner.state.tagStart === null && !inner.state.context && inner.state.tokenize.isInText;\n }\n if (exit) {\n state.f = inlineNormal;\n state.block = blockNormal;\n state.htmlState = null;\n }\n }\n // Reset state.trailingSpace\n state.trailingSpace = 0;\n state.trailingSpaceNewLine = false;\n // Mark this line as blank\n state.prevLine = state.thisLine;\n state.thisLine = {\n stream: null\n };\n return null;\n }\n function blockNormal(stream, state) {\n var firstTokenOnLine = stream.column() === state.indentation;\n var prevLineLineIsEmpty = lineIsEmpty(state.prevLine.stream);\n var prevLineIsIndentedCode = state.indentedCode;\n var prevLineIsHr = state.prevLine.hr;\n var prevLineIsList = state.list !== false;\n var maxNonCodeIndentation = (state.listStack[state.listStack.length - 1] || 0) + 3;\n state.indentedCode = false;\n var lineIndentation = state.indentation;\n // compute once per line (on first token)\n if (state.indentationDiff === null) {\n state.indentationDiff = state.indentation;\n if (prevLineIsList) {\n state.list = null;\n // While this list item's marker's indentation is less than the deepest\n // list item's content's indentation,pop the deepest list item\n // indentation off the stack, and update block indentation state\n while (lineIndentation < state.listStack[state.listStack.length - 1]) {\n state.listStack.pop();\n if (state.listStack.length) {\n state.indentation = state.listStack[state.listStack.length - 1];\n // less than the first list's indent -> the line is no longer a list\n } else {\n state.list = false;\n }\n }\n if (state.list !== false) {\n state.indentationDiff = lineIndentation - state.listStack[state.listStack.length - 1];\n }\n }\n }\n\n // not comprehensive (currently only for setext detection purposes)\n var allowsInlineContinuation = !prevLineLineIsEmpty && !prevLineIsHr && !state.prevLine.header && (!prevLineIsList || !prevLineIsIndentedCode) && !state.prevLine.fencedCodeEnd;\n var isHr = (state.list === false || prevLineIsHr || prevLineLineIsEmpty) && state.indentation <= maxNonCodeIndentation && stream.match(hrRE);\n var match = null;\n if (state.indentationDiff >= 4 && (prevLineIsIndentedCode || state.prevLine.fencedCodeEnd || state.prevLine.header || prevLineLineIsEmpty)) {\n stream.skipToEnd();\n state.indentedCode = true;\n return tokenTypes.code;\n } else if (stream.eatSpace()) {\n return null;\n } else if (firstTokenOnLine && state.indentation <= maxNonCodeIndentation && (match = stream.match(atxHeaderRE)) && match[1].length <= 6) {\n state.quote = 0;\n state.header = match[1].length;\n state.thisLine.header = true;\n if (modeCfg.highlightFormatting) state.formatting = \"header\";\n state.f = state.inline;\n return getType(state);\n } else if (state.indentation <= maxNonCodeIndentation && stream.eat('>')) {\n state.quote = firstTokenOnLine ? 1 : state.quote + 1;\n if (modeCfg.highlightFormatting) state.formatting = \"quote\";\n stream.eatSpace();\n return getType(state);\n } else if (!isHr && !state.setext && firstTokenOnLine && state.indentation <= maxNonCodeIndentation && (match = stream.match(listRE))) {\n var listType = match[1] ? \"ol\" : \"ul\";\n state.indentation = lineIndentation + stream.current().length;\n state.list = true;\n state.quote = 0;\n\n // Add this list item's content's indentation to the stack\n state.listStack.push(state.indentation);\n // Reset inline styles which shouldn't propagate aross list items\n state.em = false;\n state.strong = false;\n state.code = false;\n state.strikethrough = false;\n if (modeCfg.taskLists && stream.match(taskListRE, false)) {\n state.taskList = true;\n }\n state.f = state.inline;\n if (modeCfg.highlightFormatting) state.formatting = [\"list\", \"list-\" + listType];\n return getType(state);\n } else if (firstTokenOnLine && state.indentation <= maxNonCodeIndentation && (match = stream.match(fencedCodeRE, true))) {\n state.quote = 0;\n state.fencedEndRE = new RegExp(match[1] + \"+ *$\");\n // try switching mode\n state.localMode = modeCfg.fencedCodeBlockHighlighting && getMode(match[2] || modeCfg.fencedCodeBlockDefaultMode);\n if (state.localMode) state.localState = CodeMirror.startState(state.localMode);\n state.f = state.block = local;\n if (modeCfg.highlightFormatting) state.formatting = \"code-block\";\n state.code = -1;\n return getType(state);\n // SETEXT has lowest block-scope precedence after HR, so check it after\n // the others (code, blockquote, list...)\n } else if (\n // if setext set, indicates line after ---/===\n state.setext ||\n // line before ---/===\n (!allowsInlineContinuation || !prevLineIsList) && !state.quote && state.list === false && !state.code && !isHr && !linkDefRE.test(stream.string) && (match = stream.lookAhead(1)) && (match = match.match(setextHeaderRE))) {\n if (!state.setext) {\n state.header = match[0].charAt(0) == '=' ? 1 : 2;\n state.setext = state.header;\n } else {\n state.header = state.setext;\n // has no effect on type so we can reset it now\n state.setext = 0;\n stream.skipToEnd();\n if (modeCfg.highlightFormatting) state.formatting = \"header\";\n }\n state.thisLine.header = true;\n state.f = state.inline;\n return getType(state);\n } else if (isHr) {\n stream.skipToEnd();\n state.hr = true;\n state.thisLine.hr = true;\n return tokenTypes.hr;\n } else if (stream.peek() === '[') {\n return switchInline(stream, state, footnoteLink);\n }\n return switchInline(stream, state, state.inline);\n }\n function htmlBlock(stream, state) {\n var style = htmlMode.token(stream, state.htmlState);\n if (!htmlModeMissing) {\n var inner = CodeMirror.innerMode(htmlMode, state.htmlState);\n if (inner.mode.name == \"xml\" && inner.state.tagStart === null && !inner.state.context && inner.state.tokenize.isInText || state.md_inside && stream.current().indexOf(\">\") > -1) {\n state.f = inlineNormal;\n state.block = blockNormal;\n state.htmlState = null;\n }\n }\n return style;\n }\n function local(stream, state) {\n var currListInd = state.listStack[state.listStack.length - 1] || 0;\n var hasExitedList = state.indentation < currListInd;\n var maxFencedEndInd = currListInd + 3;\n if (state.fencedEndRE && state.indentation <= maxFencedEndInd && (hasExitedList || stream.match(state.fencedEndRE))) {\n if (modeCfg.highlightFormatting) state.formatting = \"code-block\";\n var returnType;\n if (!hasExitedList) returnType = getType(state);\n state.localMode = state.localState = null;\n state.block = blockNormal;\n state.f = inlineNormal;\n state.fencedEndRE = null;\n state.code = 0;\n state.thisLine.fencedCodeEnd = true;\n if (hasExitedList) return switchBlock(stream, state, state.block);\n return returnType;\n } else if (state.localMode) {\n return state.localMode.token(stream, state.localState);\n } else {\n stream.skipToEnd();\n return tokenTypes.code;\n }\n }\n\n // Inline\n function getType(state) {\n var styles = [];\n if (state.formatting) {\n styles.push(tokenTypes.formatting);\n if (typeof state.formatting === \"string\") state.formatting = [state.formatting];\n for (var i = 0; i < state.formatting.length; i++) {\n styles.push(tokenTypes.formatting + \"-\" + state.formatting[i]);\n if (state.formatting[i] === \"header\") {\n styles.push(tokenTypes.formatting + \"-\" + state.formatting[i] + \"-\" + state.header);\n }\n\n // Add `formatting-quote` and `formatting-quote-#` for blockquotes\n // Add `error` instead if the maximum blockquote nesting depth is passed\n if (state.formatting[i] === \"quote\") {\n if (!modeCfg.maxBlockquoteDepth || modeCfg.maxBlockquoteDepth >= state.quote) {\n styles.push(tokenTypes.formatting + \"-\" + state.formatting[i] + \"-\" + state.quote);\n } else {\n styles.push(\"error\");\n }\n }\n }\n }\n if (state.taskOpen) {\n styles.push(\"meta\");\n return styles.length ? styles.join(' ') : null;\n }\n if (state.taskClosed) {\n styles.push(\"property\");\n return styles.length ? styles.join(' ') : null;\n }\n if (state.linkHref) {\n styles.push(tokenTypes.linkHref, \"url\");\n } else {\n // Only apply inline styles to non-url text\n if (state.strong) {\n styles.push(tokenTypes.strong);\n }\n if (state.em) {\n styles.push(tokenTypes.em);\n }\n if (state.strikethrough) {\n styles.push(tokenTypes.strikethrough);\n }\n if (state.emoji) {\n styles.push(tokenTypes.emoji);\n }\n if (state.linkText) {\n styles.push(tokenTypes.linkText);\n }\n if (state.code) {\n styles.push(tokenTypes.code);\n }\n if (state.image) {\n styles.push(tokenTypes.image);\n }\n if (state.imageAltText) {\n styles.push(tokenTypes.imageAltText, \"link\");\n }\n if (state.imageMarker) {\n styles.push(tokenTypes.imageMarker);\n }\n }\n if (state.header) {\n styles.push(tokenTypes.header, tokenTypes.header + \"-\" + state.header);\n }\n if (state.quote) {\n styles.push(tokenTypes.quote);\n\n // Add `quote-#` where the maximum for `#` is modeCfg.maxBlockquoteDepth\n if (!modeCfg.maxBlockquoteDepth || modeCfg.maxBlockquoteDepth >= state.quote) {\n styles.push(tokenTypes.quote + \"-\" + state.quote);\n } else {\n styles.push(tokenTypes.quote + \"-\" + modeCfg.maxBlockquoteDepth);\n }\n }\n if (state.list !== false) {\n var listMod = (state.listStack.length - 1) % 3;\n if (!listMod) {\n styles.push(tokenTypes.list1);\n } else if (listMod === 1) {\n styles.push(tokenTypes.list2);\n } else {\n styles.push(tokenTypes.list3);\n }\n }\n if (state.trailingSpaceNewLine) {\n styles.push(\"trailing-space-new-line\");\n } else if (state.trailingSpace) {\n styles.push(\"trailing-space-\" + (state.trailingSpace % 2 ? \"a\" : \"b\"));\n }\n return styles.length ? styles.join(' ') : null;\n }\n function handleText(stream, state) {\n if (stream.match(textRE, true)) {\n return getType(state);\n }\n return undefined;\n }\n function inlineNormal(stream, state) {\n var style = state.text(stream, state);\n if (typeof style !== 'undefined') return style;\n if (state.list) {\n // List marker (*, +, -, 1., etc)\n state.list = null;\n return getType(state);\n }\n if (state.taskList) {\n var taskOpen = stream.match(taskListRE, true)[1] === \" \";\n if (taskOpen) state.taskOpen = true;else state.taskClosed = true;\n if (modeCfg.highlightFormatting) state.formatting = \"task\";\n state.taskList = false;\n return getType(state);\n }\n state.taskOpen = false;\n state.taskClosed = false;\n if (state.header && stream.match(/^#+$/, true)) {\n if (modeCfg.highlightFormatting) state.formatting = \"header\";\n return getType(state);\n }\n var ch = stream.next();\n\n // Matches link titles present on next line\n if (state.linkTitle) {\n state.linkTitle = false;\n var matchCh = ch;\n if (ch === '(') {\n matchCh = ')';\n }\n matchCh = (matchCh + '').replace(/([.?*+^\\[\\]\\\\(){}|-])/g, \"\\\\$1\");\n var regex = '^\\\\s*(?:[^' + matchCh + '\\\\\\\\]+|\\\\\\\\\\\\\\\\|\\\\\\\\.)' + matchCh;\n if (stream.match(new RegExp(regex), true)) {\n return tokenTypes.linkHref;\n }\n }\n\n // If this block is changed, it may need to be updated in GFM mode\n if (ch === '`') {\n var previousFormatting = state.formatting;\n if (modeCfg.highlightFormatting) state.formatting = \"code\";\n stream.eatWhile('`');\n var count = stream.current().length;\n if (state.code == 0 && (!state.quote || count == 1)) {\n state.code = count;\n return getType(state);\n } else if (count == state.code) {\n // Must be exact\n var t = getType(state);\n state.code = 0;\n return t;\n } else {\n state.formatting = previousFormatting;\n return getType(state);\n }\n } else if (state.code) {\n return getType(state);\n }\n if (ch === '\\\\') {\n stream.next();\n if (modeCfg.highlightFormatting) {\n var type = getType(state);\n var formattingEscape = tokenTypes.formatting + \"-escape\";\n return type ? type + \" \" + formattingEscape : formattingEscape;\n }\n }\n if (ch === '!' && stream.match(/\\[[^\\]]*\\] ?(?:\\(|\\[)/, false)) {\n state.imageMarker = true;\n state.image = true;\n if (modeCfg.highlightFormatting) state.formatting = \"image\";\n return getType(state);\n }\n if (ch === '[' && state.imageMarker && stream.match(/[^\\]]*\\](\\(.*?\\)| ?\\[.*?\\])/, false)) {\n state.imageMarker = false;\n state.imageAltText = true;\n if (modeCfg.highlightFormatting) state.formatting = \"image\";\n return getType(state);\n }\n if (ch === ']' && state.imageAltText) {\n if (modeCfg.highlightFormatting) state.formatting = \"image\";\n var type = getType(state);\n state.imageAltText = false;\n state.image = false;\n state.inline = state.f = linkHref;\n return type;\n }\n if (ch === '[' && !state.image) {\n if (state.linkText && stream.match(/^.*?\\]/)) return getType(state);\n state.linkText = true;\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n return getType(state);\n }\n if (ch === ']' && state.linkText) {\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n var type = getType(state);\n state.linkText = false;\n state.inline = state.f = stream.match(/\\(.*?\\)| ?\\[.*?\\]/, false) ? linkHref : inlineNormal;\n return type;\n }\n if (ch === '<' && stream.match(/^(https?|ftps?):\\/\\/(?:[^\\\\>]|\\\\.)+>/, false)) {\n state.f = state.inline = linkInline;\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n var type = getType(state);\n if (type) {\n type += \" \";\n } else {\n type = \"\";\n }\n return type + tokenTypes.linkInline;\n }\n if (ch === '<' && stream.match(/^[^> \\\\]+@(?:[^\\\\>]|\\\\.)+>/, false)) {\n state.f = state.inline = linkInline;\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n var type = getType(state);\n if (type) {\n type += \" \";\n } else {\n type = \"\";\n }\n return type + tokenTypes.linkEmail;\n }\n if (modeCfg.xml && ch === '<' && stream.match(/^(!--|\\?|!\\[CDATA\\[|[a-z][a-z0-9-]*(?:\\s+[a-z_:.\\-]+(?:\\s*=\\s*[^>]+)?)*\\s*(?:>|$))/i, false)) {\n var end = stream.string.indexOf(\">\", stream.pos);\n if (end != -1) {\n var atts = stream.string.substring(stream.start, end);\n if (/markdown\\s*=\\s*('|\"){0,1}1('|\"){0,1}/.test(atts)) state.md_inside = true;\n }\n stream.backUp(1);\n state.htmlState = CodeMirror.startState(htmlMode);\n return switchBlock(stream, state, htmlBlock);\n }\n if (modeCfg.xml && ch === '<' && stream.match(/^\\/\\w*?>/)) {\n state.md_inside = false;\n return \"tag\";\n } else if (ch === \"*\" || ch === \"_\") {\n var len = 1,\n before = stream.pos == 1 ? \" \" : stream.string.charAt(stream.pos - 2);\n while (len < 3 && stream.eat(ch)) len++;\n var after = stream.peek() || \" \";\n // See http://spec.commonmark.org/0.27/#emphasis-and-strong-emphasis\n var leftFlanking = !/\\s/.test(after) && (!punctuation.test(after) || /\\s/.test(before) || punctuation.test(before));\n var rightFlanking = !/\\s/.test(before) && (!punctuation.test(before) || /\\s/.test(after) || punctuation.test(after));\n var setEm = null,\n setStrong = null;\n if (len % 2) {\n // Em\n if (!state.em && leftFlanking && (ch === \"*\" || !rightFlanking || punctuation.test(before))) setEm = true;else if (state.em == ch && rightFlanking && (ch === \"*\" || !leftFlanking || punctuation.test(after))) setEm = false;\n }\n if (len > 1) {\n // Strong\n if (!state.strong && leftFlanking && (ch === \"*\" || !rightFlanking || punctuation.test(before))) setStrong = true;else if (state.strong == ch && rightFlanking && (ch === \"*\" || !leftFlanking || punctuation.test(after))) setStrong = false;\n }\n if (setStrong != null || setEm != null) {\n if (modeCfg.highlightFormatting) state.formatting = setEm == null ? \"strong\" : setStrong == null ? \"em\" : \"strong em\";\n if (setEm === true) state.em = ch;\n if (setStrong === true) state.strong = ch;\n var t = getType(state);\n if (setEm === false) state.em = false;\n if (setStrong === false) state.strong = false;\n return t;\n }\n } else if (ch === ' ') {\n if (stream.eat('*') || stream.eat('_')) {\n // Probably surrounded by spaces\n if (stream.peek() === ' ') {\n // Surrounded by spaces, ignore\n return getType(state);\n } else {\n // Not surrounded by spaces, back up pointer\n stream.backUp(1);\n }\n }\n }\n if (modeCfg.strikethrough) {\n if (ch === '~' && stream.eatWhile(ch)) {\n if (state.strikethrough) {\n // Remove strikethrough\n if (modeCfg.highlightFormatting) state.formatting = \"strikethrough\";\n var t = getType(state);\n state.strikethrough = false;\n return t;\n } else if (stream.match(/^[^\\s]/, false)) {\n // Add strikethrough\n state.strikethrough = true;\n if (modeCfg.highlightFormatting) state.formatting = \"strikethrough\";\n return getType(state);\n }\n } else if (ch === ' ') {\n if (stream.match(/^~~/, true)) {\n // Probably surrounded by space\n if (stream.peek() === ' ') {\n // Surrounded by spaces, ignore\n return getType(state);\n } else {\n // Not surrounded by spaces, back up pointer\n stream.backUp(2);\n }\n }\n }\n }\n if (modeCfg.emoji && ch === \":\" && stream.match(/^(?:[a-z_\\d+][a-z_\\d+-]*|\\-[a-z_\\d+][a-z_\\d+-]*):/)) {\n state.emoji = true;\n if (modeCfg.highlightFormatting) state.formatting = \"emoji\";\n var retType = getType(state);\n state.emoji = false;\n return retType;\n }\n if (ch === ' ') {\n if (stream.match(/^ +$/, false)) {\n state.trailingSpace++;\n } else if (state.trailingSpace) {\n state.trailingSpaceNewLine = true;\n }\n }\n return getType(state);\n }\n function linkInline(stream, state) {\n var ch = stream.next();\n if (ch === \">\") {\n state.f = state.inline = inlineNormal;\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n var type = getType(state);\n if (type) {\n type += \" \";\n } else {\n type = \"\";\n }\n return type + tokenTypes.linkInline;\n }\n stream.match(/^[^>]+/, true);\n return tokenTypes.linkInline;\n }\n function linkHref(stream, state) {\n // Check if space, and return NULL if so (to avoid marking the space)\n if (stream.eatSpace()) {\n return null;\n }\n var ch = stream.next();\n if (ch === '(' || ch === '[') {\n state.f = state.inline = getLinkHrefInside(ch === \"(\" ? \")\" : \"]\");\n if (modeCfg.highlightFormatting) state.formatting = \"link-string\";\n state.linkHref = true;\n return getType(state);\n }\n return 'error';\n }\n var linkRE = {\n \")\": /^(?:[^\\\\\\(\\)]|\\\\.|\\((?:[^\\\\\\(\\)]|\\\\.)*\\))*?(?=\\))/,\n \"]\": /^(?:[^\\\\\\[\\]]|\\\\.|\\[(?:[^\\\\\\[\\]]|\\\\.)*\\])*?(?=\\])/\n };\n function getLinkHrefInside(endChar) {\n return function (stream, state) {\n var ch = stream.next();\n if (ch === endChar) {\n state.f = state.inline = inlineNormal;\n if (modeCfg.highlightFormatting) state.formatting = \"link-string\";\n var returnState = getType(state);\n state.linkHref = false;\n return returnState;\n }\n stream.match(linkRE[endChar]);\n state.linkHref = true;\n return getType(state);\n };\n }\n function footnoteLink(stream, state) {\n if (stream.match(/^([^\\]\\\\]|\\\\.)*\\]:/, false)) {\n state.f = footnoteLinkInside;\n stream.next(); // Consume [\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n state.linkText = true;\n return getType(state);\n }\n return switchInline(stream, state, inlineNormal);\n }\n function footnoteLinkInside(stream, state) {\n if (stream.match(/^\\]:/, true)) {\n state.f = state.inline = footnoteUrl;\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n var returnType = getType(state);\n state.linkText = false;\n return returnType;\n }\n stream.match(/^([^\\]\\\\]|\\\\.)+/, true);\n return tokenTypes.linkText;\n }\n function footnoteUrl(stream, state) {\n // Check if space, and return NULL if so (to avoid marking the space)\n if (stream.eatSpace()) {\n return null;\n }\n // Match URL\n stream.match(/^[^\\s]+/, true);\n // Check for link title\n if (stream.peek() === undefined) {\n // End of line, set flag to check next line\n state.linkTitle = true;\n } else {\n // More content on line, check if link title\n stream.match(/^(?:\\s+(?:\"(?:[^\"\\\\]|\\\\\\\\|\\\\.)+\"|'(?:[^'\\\\]|\\\\\\\\|\\\\.)+'|\\((?:[^)\\\\]|\\\\\\\\|\\\\.)+\\)))?/, true);\n }\n state.f = state.inline = inlineNormal;\n return tokenTypes.linkHref + \" url\";\n }\n var mode = {\n startState: function () {\n return {\n f: blockNormal,\n prevLine: {\n stream: null\n },\n thisLine: {\n stream: null\n },\n block: blockNormal,\n htmlState: null,\n indentation: 0,\n inline: inlineNormal,\n text: handleText,\n formatting: false,\n linkText: false,\n linkHref: false,\n linkTitle: false,\n code: 0,\n em: false,\n strong: false,\n header: 0,\n setext: 0,\n hr: false,\n taskList: false,\n list: false,\n listStack: [],\n quote: 0,\n trailingSpace: 0,\n trailingSpaceNewLine: false,\n strikethrough: false,\n emoji: false,\n fencedEndRE: null\n };\n },\n copyState: function (s) {\n return {\n f: s.f,\n prevLine: s.prevLine,\n thisLine: s.thisLine,\n block: s.block,\n htmlState: s.htmlState && CodeMirror.copyState(htmlMode, s.htmlState),\n indentation: s.indentation,\n localMode: s.localMode,\n localState: s.localMode ? CodeMirror.copyState(s.localMode, s.localState) : null,\n inline: s.inline,\n text: s.text,\n formatting: false,\n linkText: s.linkText,\n linkTitle: s.linkTitle,\n linkHref: s.linkHref,\n code: s.code,\n em: s.em,\n strong: s.strong,\n strikethrough: s.strikethrough,\n emoji: s.emoji,\n header: s.header,\n setext: s.setext,\n hr: s.hr,\n taskList: s.taskList,\n list: s.list,\n listStack: s.listStack.slice(0),\n quote: s.quote,\n indentedCode: s.indentedCode,\n trailingSpace: s.trailingSpace,\n trailingSpaceNewLine: s.trailingSpaceNewLine,\n md_inside: s.md_inside,\n fencedEndRE: s.fencedEndRE\n };\n },\n token: function (stream, state) {\n // Reset state.formatting\n state.formatting = false;\n if (stream != state.thisLine.stream) {\n state.header = 0;\n state.hr = false;\n if (stream.match(/^\\s*$/, true)) {\n blankLine(state);\n return null;\n }\n state.prevLine = state.thisLine;\n state.thisLine = {\n stream: stream\n };\n\n // Reset state.taskList\n state.taskList = false;\n\n // Reset state.trailingSpace\n state.trailingSpace = 0;\n state.trailingSpaceNewLine = false;\n if (!state.localState) {\n state.f = state.block;\n if (state.f != htmlBlock) {\n var indentation = stream.match(/^\\s*/, true)[0].replace(/\\t/g, expandedTab).length;\n state.indentation = indentation;\n state.indentationDiff = null;\n if (indentation > 0) return null;\n }\n }\n }\n return state.f(stream, state);\n },\n innerMode: function (state) {\n if (state.block == htmlBlock) return {\n state: state.htmlState,\n mode: htmlMode\n };\n if (state.localState) return {\n state: state.localState,\n mode: state.localMode\n };\n return {\n state: state,\n mode: mode\n };\n },\n indent: function (state, textAfter, line) {\n if (state.block == htmlBlock && htmlMode.indent) return htmlMode.indent(state.htmlState, textAfter, line);\n if (state.localState && state.localMode.indent) return state.localMode.indent(state.localState, textAfter, line);\n return CodeMirror.Pass;\n },\n blankLine: blankLine,\n getType: getType,\n blockCommentStart: \"\",\n closeBrackets: \"()[]{}''\\\"\\\"``\",\n fold: \"markdown\"\n };\n return mode;\n }, \"xml\");\n CodeMirror.defineMIME(\"text/markdown\", \"markdown\");\n CodeMirror.defineMIME(\"text/x-markdown\", \"markdown\");\n});","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function (mod) {\n if (typeof exports == \"object\" && typeof module == \"object\")\n // CommonJS\n mod(require(\"../../lib/codemirror\"));else if (typeof define == \"function\" && define.amd)\n // AMD\n define([\"../../lib/codemirror\"], mod);else\n // Plain browser env\n mod(CodeMirror);\n})(function (CodeMirror) {\n \"use strict\";\n\n var htmlConfig = {\n autoSelfClosers: {\n 'area': true,\n 'base': true,\n 'br': true,\n 'col': true,\n 'command': true,\n 'embed': true,\n 'frame': true,\n 'hr': true,\n 'img': true,\n 'input': true,\n 'keygen': true,\n 'link': true,\n 'meta': true,\n 'param': true,\n 'source': true,\n 'track': true,\n 'wbr': true,\n 'menuitem': true\n },\n implicitlyClosed: {\n 'dd': true,\n 'li': true,\n 'optgroup': true,\n 'option': true,\n 'p': true,\n 'rp': true,\n 'rt': true,\n 'tbody': true,\n 'td': true,\n 'tfoot': true,\n 'th': true,\n 'tr': true\n },\n contextGrabbers: {\n 'dd': {\n 'dd': true,\n 'dt': true\n },\n 'dt': {\n 'dd': true,\n 'dt': true\n },\n 'li': {\n 'li': true\n },\n 'option': {\n 'option': true,\n 'optgroup': true\n },\n 'optgroup': {\n 'optgroup': true\n },\n 'p': {\n 'address': true,\n 'article': true,\n 'aside': true,\n 'blockquote': true,\n 'dir': true,\n 'div': true,\n 'dl': true,\n 'fieldset': true,\n 'footer': true,\n 'form': true,\n 'h1': true,\n 'h2': true,\n 'h3': true,\n 'h4': true,\n 'h5': true,\n 'h6': true,\n 'header': true,\n 'hgroup': true,\n 'hr': true,\n 'menu': true,\n 'nav': true,\n 'ol': true,\n 'p': true,\n 'pre': true,\n 'section': true,\n 'table': true,\n 'ul': true\n },\n 'rp': {\n 'rp': true,\n 'rt': true\n },\n 'rt': {\n 'rp': true,\n 'rt': true\n },\n 'tbody': {\n 'tbody': true,\n 'tfoot': true\n },\n 'td': {\n 'td': true,\n 'th': true\n },\n 'tfoot': {\n 'tbody': true\n },\n 'th': {\n 'td': true,\n 'th': true\n },\n 'thead': {\n 'tbody': true,\n 'tfoot': true\n },\n 'tr': {\n 'tr': true\n }\n },\n doNotIndent: {\n \"pre\": true\n },\n allowUnquoted: true,\n allowMissing: true,\n caseFold: true\n };\n var xmlConfig = {\n autoSelfClosers: {},\n implicitlyClosed: {},\n contextGrabbers: {},\n doNotIndent: {},\n allowUnquoted: false,\n allowMissing: false,\n allowMissingTagName: false,\n caseFold: false\n };\n CodeMirror.defineMode(\"xml\", function (editorConf, config_) {\n var indentUnit = editorConf.indentUnit;\n var config = {};\n var defaults = config_.htmlMode ? htmlConfig : xmlConfig;\n for (var prop in defaults) config[prop] = defaults[prop];\n for (var prop in config_) config[prop] = config_[prop];\n\n // Return variables for tokenizers\n var type, setStyle;\n function inText(stream, state) {\n function chain(parser) {\n state.tokenize = parser;\n return parser(stream, state);\n }\n var ch = stream.next();\n if (ch == \"<\") {\n if (stream.eat(\"!\")) {\n if (stream.eat(\"[\")) {\n if (stream.match(\"CDATA[\")) return chain(inBlock(\"atom\", \"]]>\"));else return null;\n } else if (stream.match(\"--\")) {\n return chain(inBlock(\"comment\", \"-->\"));\n } else if (stream.match(\"DOCTYPE\", true, true)) {\n stream.eatWhile(/[\\w\\._\\-]/);\n return chain(doctype(1));\n } else {\n return null;\n }\n } else if (stream.eat(\"?\")) {\n stream.eatWhile(/[\\w\\._\\-]/);\n state.tokenize = inBlock(\"meta\", \"?>\");\n return \"meta\";\n } else {\n type = stream.eat(\"/\") ? \"closeTag\" : \"openTag\";\n state.tokenize = inTag;\n return \"tag bracket\";\n }\n } else if (ch == \"&\") {\n var ok;\n if (stream.eat(\"#\")) {\n if (stream.eat(\"x\")) {\n ok = stream.eatWhile(/[a-fA-F\\d]/) && stream.eat(\";\");\n } else {\n ok = stream.eatWhile(/[\\d]/) && stream.eat(\";\");\n }\n } else {\n ok = stream.eatWhile(/[\\w\\.\\-:]/) && stream.eat(\";\");\n }\n return ok ? \"atom\" : \"error\";\n } else {\n stream.eatWhile(/[^&<]/);\n return null;\n }\n }\n inText.isInText = true;\n function inTag(stream, state) {\n var ch = stream.next();\n if (ch == \">\" || ch == \"/\" && stream.eat(\">\")) {\n state.tokenize = inText;\n type = ch == \">\" ? \"endTag\" : \"selfcloseTag\";\n return \"tag bracket\";\n } else if (ch == \"=\") {\n type = \"equals\";\n return null;\n } else if (ch == \"<\") {\n state.tokenize = inText;\n state.state = baseState;\n state.tagName = state.tagStart = null;\n var next = state.tokenize(stream, state);\n return next ? next + \" tag error\" : \"tag error\";\n } else if (/[\\'\\\"]/.test(ch)) {\n state.tokenize = inAttribute(ch);\n state.stringStartCol = stream.column();\n return state.tokenize(stream, state);\n } else {\n stream.match(/^[^\\s\\u00a0=<>\\\"\\']*[^\\s\\u00a0=<>\\\"\\'\\/]/);\n return \"word\";\n }\n }\n function inAttribute(quote) {\n var closure = function (stream, state) {\n while (!stream.eol()) {\n if (stream.next() == quote) {\n state.tokenize = inTag;\n break;\n }\n }\n return \"string\";\n };\n closure.isInAttribute = true;\n return closure;\n }\n function inBlock(style, terminator) {\n return function (stream, state) {\n while (!stream.eol()) {\n if (stream.match(terminator)) {\n state.tokenize = inText;\n break;\n }\n stream.next();\n }\n return style;\n };\n }\n function doctype(depth) {\n return function (stream, state) {\n var ch;\n while ((ch = stream.next()) != null) {\n if (ch == \"<\") {\n state.tokenize = doctype(depth + 1);\n return state.tokenize(stream, state);\n } else if (ch == \">\") {\n if (depth == 1) {\n state.tokenize = inText;\n break;\n } else {\n state.tokenize = doctype(depth - 1);\n return state.tokenize(stream, state);\n }\n }\n }\n return \"meta\";\n };\n }\n function Context(state, tagName, startOfLine) {\n this.prev = state.context;\n this.tagName = tagName;\n this.indent = state.indented;\n this.startOfLine = startOfLine;\n if (config.doNotIndent.hasOwnProperty(tagName) || state.context && state.context.noIndent) this.noIndent = true;\n }\n function popContext(state) {\n if (state.context) state.context = state.context.prev;\n }\n function maybePopContext(state, nextTagName) {\n var parentTagName;\n while (true) {\n if (!state.context) {\n return;\n }\n parentTagName = state.context.tagName;\n if (!config.contextGrabbers.hasOwnProperty(parentTagName) || !config.contextGrabbers[parentTagName].hasOwnProperty(nextTagName)) {\n return;\n }\n popContext(state);\n }\n }\n function baseState(type, stream, state) {\n if (type == \"openTag\") {\n state.tagStart = stream.column();\n return tagNameState;\n } else if (type == \"closeTag\") {\n return closeTagNameState;\n } else {\n return baseState;\n }\n }\n function tagNameState(type, stream, state) {\n if (type == \"word\") {\n state.tagName = stream.current();\n setStyle = \"tag\";\n return attrState;\n } else if (config.allowMissingTagName && type == \"endTag\") {\n setStyle = \"tag bracket\";\n return attrState(type, stream, state);\n } else {\n setStyle = \"error\";\n return tagNameState;\n }\n }\n function closeTagNameState(type, stream, state) {\n if (type == \"word\") {\n var tagName = stream.current();\n if (state.context && state.context.tagName != tagName && config.implicitlyClosed.hasOwnProperty(state.context.tagName)) popContext(state);\n if (state.context && state.context.tagName == tagName || config.matchClosing === false) {\n setStyle = \"tag\";\n return closeState;\n } else {\n setStyle = \"tag error\";\n return closeStateErr;\n }\n } else if (config.allowMissingTagName && type == \"endTag\") {\n setStyle = \"tag bracket\";\n return closeState(type, stream, state);\n } else {\n setStyle = \"error\";\n return closeStateErr;\n }\n }\n function closeState(type, _stream, state) {\n if (type != \"endTag\") {\n setStyle = \"error\";\n return closeState;\n }\n popContext(state);\n return baseState;\n }\n function closeStateErr(type, stream, state) {\n setStyle = \"error\";\n return closeState(type, stream, state);\n }\n function attrState(type, _stream, state) {\n if (type == \"word\") {\n setStyle = \"attribute\";\n return attrEqState;\n } else if (type == \"endTag\" || type == \"selfcloseTag\") {\n var tagName = state.tagName,\n tagStart = state.tagStart;\n state.tagName = state.tagStart = null;\n if (type == \"selfcloseTag\" || config.autoSelfClosers.hasOwnProperty(tagName)) {\n maybePopContext(state, tagName);\n } else {\n maybePopContext(state, tagName);\n state.context = new Context(state, tagName, tagStart == state.indented);\n }\n return baseState;\n }\n setStyle = \"error\";\n return attrState;\n }\n function attrEqState(type, stream, state) {\n if (type == \"equals\") return attrValueState;\n if (!config.allowMissing) setStyle = \"error\";\n return attrState(type, stream, state);\n }\n function attrValueState(type, stream, state) {\n if (type == \"string\") return attrContinuedState;\n if (type == \"word\" && config.allowUnquoted) {\n setStyle = \"string\";\n return attrState;\n }\n setStyle = \"error\";\n return attrState(type, stream, state);\n }\n function attrContinuedState(type, stream, state) {\n if (type == \"string\") return attrContinuedState;\n return attrState(type, stream, state);\n }\n return {\n startState: function (baseIndent) {\n var state = {\n tokenize: inText,\n state: baseState,\n indented: baseIndent || 0,\n tagName: null,\n tagStart: null,\n context: null\n };\n if (baseIndent != null) state.baseIndent = baseIndent;\n return state;\n },\n token: function (stream, state) {\n if (!state.tagName && stream.sol()) state.indented = stream.indentation();\n if (stream.eatSpace()) return null;\n type = null;\n var style = state.tokenize(stream, state);\n if ((style || type) && style != \"comment\") {\n setStyle = null;\n state.state = state.state(type || style, stream, state);\n if (setStyle) style = setStyle == \"error\" ? style + \" error\" : setStyle;\n }\n return style;\n },\n indent: function (state, textAfter, fullLine) {\n var context = state.context;\n // Indent multi-line strings (e.g. css).\n if (state.tokenize.isInAttribute) {\n if (state.tagStart == state.indented) return state.stringStartCol + 1;else return state.indented + indentUnit;\n }\n if (context && context.noIndent) return CodeMirror.Pass;\n if (state.tokenize != inTag && state.tokenize != inText) return fullLine ? fullLine.match(/^(\\s*)/)[0].length : 0;\n // Indent the starts of attribute names.\n if (state.tagName) {\n if (config.multilineTagIndentPastTag !== false) return state.tagStart + state.tagName.length + 2;else return state.tagStart + indentUnit * (config.multilineTagIndentFactor || 1);\n }\n if (config.alignCDATA && /$/,\n blockCommentStart: \"\",\n configuration: config.htmlMode ? \"html\" : \"xml\",\n helperType: config.htmlMode ? \"html\" : \"xml\",\n skipAttribute: function (state) {\n if (state.state == attrValueState) state.state = attrState;\n },\n xmlCurrentTag: function (state) {\n return state.tagName ? {\n name: state.tagName,\n close: state.type == \"closeTag\"\n } : null;\n },\n xmlCurrentContext: function (state) {\n var context = [];\n for (var cx = state.context; cx; cx = cx.prev) if (cx.tagName) context.push(cx.tagName);\n return context.reverse();\n }\n };\n });\n CodeMirror.defineMIME(\"text/xml\", \"xml\");\n CodeMirror.defineMIME(\"application/xml\", \"xml\");\n if (!CodeMirror.mimeModes.hasOwnProperty(\"text/html\")) CodeMirror.defineMIME(\"text/html\", {\n name: \"xml\",\n htmlMode: true\n });\n});","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n// Utility function that allows modes to be combined. The mode given\n// as the base argument takes care of most of the normal mode\n// functionality, but a second (typically simple) mode is used, which\n// can override the style of text. Both modes get to parse all of the\n// text, but when both assign a non-null style to a piece of code, the\n// overlay wins, unless the combine argument was true and not overridden,\n// or state.overlay.combineTokens was true, in which case the styles are\n// combined.\n\n(function (mod) {\n if (typeof exports == \"object\" && typeof module == \"object\")\n // CommonJS\n mod(require(\"../../lib/codemirror\"));else if (typeof define == \"function\" && define.amd)\n // AMD\n define([\"../../lib/codemirror\"], mod);else\n // Plain browser env\n mod(CodeMirror);\n})(function (CodeMirror) {\n \"use strict\";\n\n CodeMirror.overlayMode = function (base, overlay, combine) {\n return {\n startState: function () {\n return {\n base: CodeMirror.startState(base),\n overlay: CodeMirror.startState(overlay),\n basePos: 0,\n baseCur: null,\n overlayPos: 0,\n overlayCur: null,\n streamSeen: null\n };\n },\n copyState: function (state) {\n return {\n base: CodeMirror.copyState(base, state.base),\n overlay: CodeMirror.copyState(overlay, state.overlay),\n basePos: state.basePos,\n baseCur: null,\n overlayPos: state.overlayPos,\n overlayCur: null\n };\n },\n token: function (stream, state) {\n if (stream != state.streamSeen || Math.min(state.basePos, state.overlayPos) < stream.start) {\n state.streamSeen = stream;\n state.basePos = state.overlayPos = stream.start;\n }\n if (stream.start == state.basePos) {\n state.baseCur = base.token(stream, state.base);\n state.basePos = stream.pos;\n }\n if (stream.start == state.overlayPos) {\n stream.pos = stream.start;\n state.overlayCur = overlay.token(stream, state.overlay);\n state.overlayPos = stream.pos;\n }\n stream.pos = Math.min(state.basePos, state.overlayPos);\n\n // state.overlay.combineTokens always takes precedence over combine,\n // unless set to null\n if (state.overlayCur == null) return state.baseCur;else if (state.baseCur != null && state.overlay.combineTokens || combine && state.overlay.combineTokens == null) return state.baseCur + \" \" + state.overlayCur;else return state.overlayCur;\n },\n indent: base.indent && function (state, textAfter, line) {\n return base.indent(state.base, textAfter, line);\n },\n electricChars: base.electricChars,\n innerMode: function (state) {\n return {\n state: state.base,\n mode: base\n };\n },\n blankLine: function (state) {\n var baseToken, overlayToken;\n if (base.blankLine) baseToken = base.blankLine(state.base);\n if (overlay.blankLine) overlayToken = overlay.blankLine(state.overlay);\n return overlayToken == null ? baseToken : combine && baseToken != null ? baseToken + \" \" + overlayToken : overlayToken;\n }\n };\n };\n});","// HTML5 entities map: { name -> utf16string }\n//\n'use strict';\n\n/*eslint quotes:0*/\nmodule.exports = require('entities/lib/maps/entities.json');","'use strict';\n\nmodule.exports.encode = require('./encode');\nmodule.exports.decode = require('./decode');\nmodule.exports.format = require('./format');\nmodule.exports.parse = require('./parse');","module.exports = /[\\0-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;","module.exports = /[\\0-\\x1F\\x7F-\\x9F]/;","module.exports = /[ \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]/;","// Regexps to match html elements\n\n'use strict';\n\nvar attr_name = '[a-zA-Z_:][a-zA-Z0-9:._-]*';\nvar unquoted = '[^\"\\'=<>`\\\\x00-\\\\x20]+';\nvar single_quoted = \"'[^']*'\";\nvar double_quoted = '\"[^\"]*\"';\nvar attr_value = '(?:' + unquoted + '|' + single_quoted + '|' + double_quoted + ')';\nvar attribute = '(?:\\\\s+' + attr_name + '(?:\\\\s*=\\\\s*' + attr_value + ')?)';\nvar open_tag = '<[A-Za-z][A-Za-z0-9\\\\-]*' + attribute + '*\\\\s*\\\\/?>';\nvar close_tag = '<\\\\/[A-Za-z][A-Za-z0-9\\\\-]*\\\\s*>';\nvar comment = '|';\nvar processing = '<[?].*?[?]>';\nvar declaration = ']*>';\nvar cdata = '';\nvar HTML_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + '|' + comment + '|' + processing + '|' + declaration + '|' + cdata + ')');\nvar HTML_OPEN_CLOSE_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + ')');\nmodule.exports.HTML_TAG_RE = HTML_TAG_RE;\nmodule.exports.HTML_OPEN_CLOSE_TAG_RE = HTML_OPEN_CLOSE_TAG_RE;","// ~~strike through~~\n//\n'use strict';\n\n// Insert each marker as a separate text token, and add it to delimiter list\n//\nmodule.exports.tokenize = function strikethrough(state, silent) {\n var i,\n scanned,\n token,\n len,\n ch,\n start = state.pos,\n marker = state.src.charCodeAt(start);\n if (silent) {\n return false;\n }\n if (marker !== 0x7E /* ~ */) {\n return false;\n }\n scanned = state.scanDelims(state.pos, true);\n len = scanned.length;\n ch = String.fromCharCode(marker);\n if (len < 2) {\n return false;\n }\n if (len % 2) {\n token = state.push('text', '', 0);\n token.content = ch;\n len--;\n }\n for (i = 0; i < len; i += 2) {\n token = state.push('text', '', 0);\n token.content = ch + ch;\n state.delimiters.push({\n marker: marker,\n length: 0,\n // disable \"rule of 3\" length checks meant for emphasis\n jump: i,\n token: state.tokens.length - 1,\n end: -1,\n open: scanned.can_open,\n close: scanned.can_close\n });\n }\n state.pos += scanned.length;\n return true;\n};\nfunction postProcess(state, delimiters) {\n var i,\n j,\n startDelim,\n endDelim,\n token,\n loneMarkers = [],\n max = delimiters.length;\n for (i = 0; i < max; i++) {\n startDelim = delimiters[i];\n if (startDelim.marker !== 0x7E /* ~ */) {\n continue;\n }\n if (startDelim.end === -1) {\n continue;\n }\n endDelim = delimiters[startDelim.end];\n token = state.tokens[startDelim.token];\n token.type = 's_open';\n token.tag = 's';\n token.nesting = 1;\n token.markup = '~~';\n token.content = '';\n token = state.tokens[endDelim.token];\n token.type = 's_close';\n token.tag = 's';\n token.nesting = -1;\n token.markup = '~~';\n token.content = '';\n if (state.tokens[endDelim.token - 1].type === 'text' && state.tokens[endDelim.token - 1].content === '~') {\n loneMarkers.push(endDelim.token - 1);\n }\n }\n\n // If a marker sequence has an odd number of characters, it's splitted\n // like this: `~~~~~` -> `~` + `~~` + `~~`, leaving one marker at the\n // start of the sequence.\n //\n // So, we have to move all those markers after subsequent s_close tags.\n //\n while (loneMarkers.length) {\n i = loneMarkers.pop();\n j = i + 1;\n while (j < state.tokens.length && state.tokens[j].type === 's_close') {\n j++;\n }\n j--;\n if (i !== j) {\n token = state.tokens[j];\n state.tokens[j] = state.tokens[i];\n state.tokens[i] = token;\n }\n }\n}\n\n// Walk through delimiter list and replace text tokens with tags\n//\nmodule.exports.postProcess = function strikethrough(state) {\n var curr,\n tokens_meta = state.tokens_meta,\n max = state.tokens_meta.length;\n postProcess(state, state.delimiters);\n for (curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n postProcess(state, tokens_meta[curr].delimiters);\n }\n }\n};","// Process *this* and _that_\n//\n'use strict';\n\n// Insert each marker as a separate text token, and add it to delimiter list\n//\nmodule.exports.tokenize = function emphasis(state, silent) {\n var i,\n scanned,\n token,\n start = state.pos,\n marker = state.src.charCodeAt(start);\n if (silent) {\n return false;\n }\n if (marker !== 0x5F /* _ */ && marker !== 0x2A /* * */) {\n return false;\n }\n scanned = state.scanDelims(state.pos, marker === 0x2A);\n for (i = 0; i < scanned.length; i++) {\n token = state.push('text', '', 0);\n token.content = String.fromCharCode(marker);\n state.delimiters.push({\n // Char code of the starting marker (number).\n //\n marker: marker,\n // Total length of these series of delimiters.\n //\n length: scanned.length,\n // An amount of characters before this one that's equivalent to\n // current one. In plain English: if this delimiter does not open\n // an emphasis, neither do previous `jump` characters.\n //\n // Used to skip sequences like \"*****\" in one step, for 1st asterisk\n // value will be 0, for 2nd it's 1 and so on.\n //\n jump: i,\n // A position of the token this delimiter corresponds to.\n //\n token: state.tokens.length - 1,\n // If this delimiter is matched as a valid opener, `end` will be\n // equal to its position, otherwise it's `-1`.\n //\n end: -1,\n // Boolean flags that determine if this delimiter could open or close\n // an emphasis.\n //\n open: scanned.can_open,\n close: scanned.can_close\n });\n }\n state.pos += scanned.length;\n return true;\n};\nfunction postProcess(state, delimiters) {\n var i,\n startDelim,\n endDelim,\n token,\n ch,\n isStrong,\n max = delimiters.length;\n for (i = max - 1; i >= 0; i--) {\n startDelim = delimiters[i];\n if (startDelim.marker !== 0x5F /* _ */ && startDelim.marker !== 0x2A /* * */) {\n continue;\n }\n\n // Process only opening markers\n if (startDelim.end === -1) {\n continue;\n }\n endDelim = delimiters[startDelim.end];\n\n // If the previous delimiter has the same marker and is adjacent to this one,\n // merge those into one strong delimiter.\n //\n // `whatever` -> `whatever`\n //\n isStrong = i > 0 && delimiters[i - 1].end === startDelim.end + 1 && delimiters[i - 1].token === startDelim.token - 1 && delimiters[startDelim.end + 1].token === endDelim.token + 1 && delimiters[i - 1].marker === startDelim.marker;\n ch = String.fromCharCode(startDelim.marker);\n token = state.tokens[startDelim.token];\n token.type = isStrong ? 'strong_open' : 'em_open';\n token.tag = isStrong ? 'strong' : 'em';\n token.nesting = 1;\n token.markup = isStrong ? ch + ch : ch;\n token.content = '';\n token = state.tokens[endDelim.token];\n token.type = isStrong ? 'strong_close' : 'em_close';\n token.tag = isStrong ? 'strong' : 'em';\n token.nesting = -1;\n token.markup = isStrong ? ch + ch : ch;\n token.content = '';\n if (isStrong) {\n state.tokens[delimiters[i - 1].token].content = '';\n state.tokens[delimiters[startDelim.end + 1].token].content = '';\n i--;\n }\n }\n}\n\n// Walk through delimiter list and replace text tokens with tags\n//\nmodule.exports.postProcess = function emphasis(state) {\n var curr,\n tokens_meta = state.tokens_meta,\n max = state.tokens_meta.length;\n postProcess(state, state.delimiters);\n for (curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n postProcess(state, tokens_meta[curr].delimiters);\n }\n }\n};","/**!\n * Sortable 1.10.2\n * @author\tRubaXa \n * @author\towenm \n * @license MIT\n */\nfunction _typeof(obj) {\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n return _typeof(obj);\n}\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n if (typeof Object.getOwnPropertySymbols === 'function') {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n ownKeys.forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n }\n return target;\n}\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = _objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n return target;\n}\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n return arr2;\n }\n}\nfunction _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\nvar version = \"1.10.2\";\nfunction userAgent(pattern) {\n if (typeof window !== 'undefined' && window.navigator) {\n return !! /*@__PURE__*/\n navigator.userAgent.match(pattern);\n }\n}\nvar IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i);\nvar Edge = userAgent(/Edge/i);\nvar FireFox = userAgent(/firefox/i);\nvar Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);\nvar IOS = userAgent(/iP(ad|od|hone)/i);\nvar ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);\nvar captureMode = {\n capture: false,\n passive: false\n};\nfunction on(el, event, fn) {\n el.addEventListener(event, fn, !IE11OrLess && captureMode);\n}\nfunction off(el, event, fn) {\n el.removeEventListener(event, fn, !IE11OrLess && captureMode);\n}\nfunction matches( /**HTMLElement*/\nel, /**String*/\nselector) {\n if (!selector) return;\n selector[0] === '>' && (selector = selector.substring(1));\n if (el) {\n try {\n if (el.matches) {\n return el.matches(selector);\n } else if (el.msMatchesSelector) {\n return el.msMatchesSelector(selector);\n } else if (el.webkitMatchesSelector) {\n return el.webkitMatchesSelector(selector);\n }\n } catch (_) {\n return false;\n }\n }\n return false;\n}\nfunction getParentOrHost(el) {\n return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode;\n}\nfunction closest( /**HTMLElement*/\nel, /**String*/\nselector, /**HTMLElement*/\nctx, includeCTX) {\n if (el) {\n ctx = ctx || document;\n do {\n if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) {\n return el;\n }\n if (el === ctx) break;\n /* jshint boss:true */\n } while (el = getParentOrHost(el));\n }\n return null;\n}\nvar R_SPACE = /\\s+/g;\nfunction toggleClass(el, name, state) {\n if (el && name) {\n if (el.classList) {\n el.classList[state ? 'add' : 'remove'](name);\n } else {\n var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' ');\n el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' ');\n }\n }\n}\nfunction css(el, prop, val) {\n var style = el && el.style;\n if (style) {\n if (val === void 0) {\n if (document.defaultView && document.defaultView.getComputedStyle) {\n val = document.defaultView.getComputedStyle(el, '');\n } else if (el.currentStyle) {\n val = el.currentStyle;\n }\n return prop === void 0 ? val : val[prop];\n } else {\n if (!(prop in style) && prop.indexOf('webkit') === -1) {\n prop = '-webkit-' + prop;\n }\n style[prop] = val + (typeof val === 'string' ? '' : 'px');\n }\n }\n}\nfunction matrix(el, selfOnly) {\n var appliedTransforms = '';\n if (typeof el === 'string') {\n appliedTransforms = el;\n } else {\n do {\n var transform = css(el, 'transform');\n if (transform && transform !== 'none') {\n appliedTransforms = transform + ' ' + appliedTransforms;\n }\n /* jshint boss:true */\n } while (!selfOnly && (el = el.parentNode));\n }\n var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;\n /*jshint -W056 */\n\n return matrixFn && new matrixFn(appliedTransforms);\n}\nfunction find(ctx, tagName, iterator) {\n if (ctx) {\n var list = ctx.getElementsByTagName(tagName),\n i = 0,\n n = list.length;\n if (iterator) {\n for (; i < n; i++) {\n iterator(list[i], i);\n }\n }\n return list;\n }\n return [];\n}\nfunction getWindowScrollingElement() {\n var scrollingElement = document.scrollingElement;\n if (scrollingElement) {\n return scrollingElement;\n } else {\n return document.documentElement;\n }\n}\n/**\r\n * Returns the \"bounding client rect\" of given element\r\n * @param {HTMLElement} el The element whose boundingClientRect is wanted\r\n * @param {[Boolean]} relativeToContainingBlock Whether the rect should be relative to the containing block of (including) the container\r\n * @param {[Boolean]} relativeToNonStaticParent Whether the rect should be relative to the relative parent of (including) the contaienr\r\n * @param {[Boolean]} undoScale Whether the container's scale() should be undone\r\n * @param {[HTMLElement]} container The parent the element will be placed in\r\n * @return {Object} The boundingClientRect of el, with specified adjustments\r\n */\n\nfunction getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) {\n if (!el.getBoundingClientRect && el !== window) return;\n var elRect, top, left, bottom, right, height, width;\n if (el !== window && el !== getWindowScrollingElement()) {\n elRect = el.getBoundingClientRect();\n top = elRect.top;\n left = elRect.left;\n bottom = elRect.bottom;\n right = elRect.right;\n height = elRect.height;\n width = elRect.width;\n } else {\n top = 0;\n left = 0;\n bottom = window.innerHeight;\n right = window.innerWidth;\n height = window.innerHeight;\n width = window.innerWidth;\n }\n if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {\n // Adjust for translate()\n container = container || el.parentNode; // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)\n // Not needed on <= IE11\n\n if (!IE11OrLess) {\n do {\n if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) {\n var containerRect = container.getBoundingClientRect(); // Set relative to edges of padding box of container\n\n top -= containerRect.top + parseInt(css(container, 'border-top-width'));\n left -= containerRect.left + parseInt(css(container, 'border-left-width'));\n bottom = top + elRect.height;\n right = left + elRect.width;\n break;\n }\n /* jshint boss:true */\n } while (container = container.parentNode);\n }\n }\n if (undoScale && el !== window) {\n // Adjust for scale()\n var elMatrix = matrix(container || el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d;\n if (elMatrix) {\n top /= scaleY;\n left /= scaleX;\n width /= scaleX;\n height /= scaleY;\n bottom = top + height;\n right = left + width;\n }\n }\n return {\n top: top,\n left: left,\n bottom: bottom,\n right: right,\n width: width,\n height: height\n };\n}\n/**\r\n * Checks if a side of an element is scrolled past a side of its parents\r\n * @param {HTMLElement} el The element who's side being scrolled out of view is in question\r\n * @param {String} elSide Side of the element in question ('top', 'left', 'right', 'bottom')\r\n * @param {String} parentSide Side of the parent in question ('top', 'left', 'right', 'bottom')\r\n * @return {HTMLElement} The parent scroll element that the el's side is scrolled past, or null if there is no such element\r\n */\n\nfunction isScrolledPast(el, elSide, parentSide) {\n var parent = getParentAutoScrollElement(el, true),\n elSideVal = getRect(el)[elSide];\n /* jshint boss:true */\n\n while (parent) {\n var parentSideVal = getRect(parent)[parentSide],\n visible = void 0;\n if (parentSide === 'top' || parentSide === 'left') {\n visible = elSideVal >= parentSideVal;\n } else {\n visible = elSideVal <= parentSideVal;\n }\n if (!visible) return parent;\n if (parent === getWindowScrollingElement()) break;\n parent = getParentAutoScrollElement(parent, false);\n }\n return false;\n}\n/**\r\n * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)\r\n * and non-draggable elements\r\n * @param {HTMLElement} el The parent element\r\n * @param {Number} childNum The index of the child\r\n * @param {Object} options Parent Sortable's options\r\n * @return {HTMLElement} The child at index childNum, or null if not found\r\n */\n\nfunction getChild(el, childNum, options) {\n var currentChild = 0,\n i = 0,\n children = el.children;\n while (i < children.length) {\n if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && children[i] !== Sortable.dragged && closest(children[i], options.draggable, el, false)) {\n if (currentChild === childNum) {\n return children[i];\n }\n currentChild++;\n }\n i++;\n }\n return null;\n}\n/**\r\n * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)\r\n * @param {HTMLElement} el Parent element\r\n * @param {selector} selector Any other elements that should be ignored\r\n * @return {HTMLElement} The last child, ignoring ghostEl\r\n */\n\nfunction lastChild(el, selector) {\n var last = el.lastElementChild;\n while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) {\n last = last.previousElementSibling;\n }\n return last || null;\n}\n/**\r\n * Returns the index of an element within its parent for a selected set of\r\n * elements\r\n * @param {HTMLElement} el\r\n * @param {selector} selector\r\n * @return {number}\r\n */\n\nfunction index(el, selector) {\n var index = 0;\n if (!el || !el.parentNode) {\n return -1;\n }\n /* jshint boss:true */\n\n while (el = el.previousElementSibling) {\n if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) {\n index++;\n }\n }\n return index;\n}\n/**\r\n * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.\r\n * The value is returned in real pixels.\r\n * @param {HTMLElement} el\r\n * @return {Array} Offsets in the format of [left, top]\r\n */\n\nfunction getRelativeScrollOffset(el) {\n var offsetLeft = 0,\n offsetTop = 0,\n winScroller = getWindowScrollingElement();\n if (el) {\n do {\n var elMatrix = matrix(el),\n scaleX = elMatrix.a,\n scaleY = elMatrix.d;\n offsetLeft += el.scrollLeft * scaleX;\n offsetTop += el.scrollTop * scaleY;\n } while (el !== winScroller && (el = el.parentNode));\n }\n return [offsetLeft, offsetTop];\n}\n/**\r\n * Returns the index of the object within the given array\r\n * @param {Array} arr Array that may or may not hold the object\r\n * @param {Object} obj An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find\r\n * @return {Number} The index of the object in the array, or -1\r\n */\n\nfunction indexOfObject(arr, obj) {\n for (var i in arr) {\n if (!arr.hasOwnProperty(i)) continue;\n for (var key in obj) {\n if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i);\n }\n }\n return -1;\n}\nfunction getParentAutoScrollElement(el, includeSelf) {\n // skip to window\n if (!el || !el.getBoundingClientRect) return getWindowScrollingElement();\n var elem = el;\n var gotSelf = false;\n do {\n // we don't need to get elem css if it isn't even overflowing in the first place (performance)\n if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {\n var elemCSS = css(elem);\n if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) {\n if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement();\n if (gotSelf || includeSelf) return elem;\n gotSelf = true;\n }\n }\n /* jshint boss:true */\n } while (elem = elem.parentNode);\n return getWindowScrollingElement();\n}\nfunction extend(dst, src) {\n if (dst && src) {\n for (var key in src) {\n if (src.hasOwnProperty(key)) {\n dst[key] = src[key];\n }\n }\n }\n return dst;\n}\nfunction isRectEqual(rect1, rect2) {\n return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width);\n}\nvar _throttleTimeout;\nfunction throttle(callback, ms) {\n return function () {\n if (!_throttleTimeout) {\n var args = arguments,\n _this = this;\n if (args.length === 1) {\n callback.call(_this, args[0]);\n } else {\n callback.apply(_this, args);\n }\n _throttleTimeout = setTimeout(function () {\n _throttleTimeout = void 0;\n }, ms);\n }\n };\n}\nfunction cancelThrottle() {\n clearTimeout(_throttleTimeout);\n _throttleTimeout = void 0;\n}\nfunction scrollBy(el, x, y) {\n el.scrollLeft += x;\n el.scrollTop += y;\n}\nfunction clone(el) {\n var Polymer = window.Polymer;\n var $ = window.jQuery || window.Zepto;\n if (Polymer && Polymer.dom) {\n return Polymer.dom(el).cloneNode(true);\n } else if ($) {\n return $(el).clone(true)[0];\n } else {\n return el.cloneNode(true);\n }\n}\nfunction setRect(el, rect) {\n css(el, 'position', 'absolute');\n css(el, 'top', rect.top);\n css(el, 'left', rect.left);\n css(el, 'width', rect.width);\n css(el, 'height', rect.height);\n}\nfunction unsetRect(el) {\n css(el, 'position', '');\n css(el, 'top', '');\n css(el, 'left', '');\n css(el, 'width', '');\n css(el, 'height', '');\n}\nvar expando = 'Sortable' + new Date().getTime();\nfunction AnimationStateManager() {\n var animationStates = [],\n animationCallbackId;\n return {\n captureAnimationState: function captureAnimationState() {\n animationStates = [];\n if (!this.options.animation) return;\n var children = [].slice.call(this.el.children);\n children.forEach(function (child) {\n if (css(child, 'display') === 'none' || child === Sortable.ghost) return;\n animationStates.push({\n target: child,\n rect: getRect(child)\n });\n var fromRect = _objectSpread({}, animationStates[animationStates.length - 1].rect); // If animating: compensate for current animation\n\n if (child.thisAnimationDuration) {\n var childMatrix = matrix(child, true);\n if (childMatrix) {\n fromRect.top -= childMatrix.f;\n fromRect.left -= childMatrix.e;\n }\n }\n child.fromRect = fromRect;\n });\n },\n addAnimationState: function addAnimationState(state) {\n animationStates.push(state);\n },\n removeAnimationState: function removeAnimationState(target) {\n animationStates.splice(indexOfObject(animationStates, {\n target: target\n }), 1);\n },\n animateAll: function animateAll(callback) {\n var _this = this;\n if (!this.options.animation) {\n clearTimeout(animationCallbackId);\n if (typeof callback === 'function') callback();\n return;\n }\n var animating = false,\n animationTime = 0;\n animationStates.forEach(function (state) {\n var time = 0,\n target = state.target,\n fromRect = target.fromRect,\n toRect = getRect(target),\n prevFromRect = target.prevFromRect,\n prevToRect = target.prevToRect,\n animatingRect = state.rect,\n targetMatrix = matrix(target, true);\n if (targetMatrix) {\n // Compensate for current animation\n toRect.top -= targetMatrix.f;\n toRect.left -= targetMatrix.e;\n }\n target.toRect = toRect;\n if (target.thisAnimationDuration) {\n // Could also check if animatingRect is between fromRect and toRect\n if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) &&\n // Make sure animatingRect is on line between toRect & fromRect\n (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) {\n // If returning to same place as started from animation and on same axis\n time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options);\n }\n } // if fromRect != toRect: animate\n\n if (!isRectEqual(toRect, fromRect)) {\n target.prevFromRect = fromRect;\n target.prevToRect = toRect;\n if (!time) {\n time = _this.options.animation;\n }\n _this.animate(target, animatingRect, toRect, time);\n }\n if (time) {\n animating = true;\n animationTime = Math.max(animationTime, time);\n clearTimeout(target.animationResetTimer);\n target.animationResetTimer = setTimeout(function () {\n target.animationTime = 0;\n target.prevFromRect = null;\n target.fromRect = null;\n target.prevToRect = null;\n target.thisAnimationDuration = null;\n }, time);\n target.thisAnimationDuration = time;\n }\n });\n clearTimeout(animationCallbackId);\n if (!animating) {\n if (typeof callback === 'function') callback();\n } else {\n animationCallbackId = setTimeout(function () {\n if (typeof callback === 'function') callback();\n }, animationTime);\n }\n animationStates = [];\n },\n animate: function animate(target, currentRect, toRect, duration) {\n if (duration) {\n css(target, 'transition', '');\n css(target, 'transform', '');\n var elMatrix = matrix(this.el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d,\n translateX = (currentRect.left - toRect.left) / (scaleX || 1),\n translateY = (currentRect.top - toRect.top) / (scaleY || 1);\n target.animatingX = !!translateX;\n target.animatingY = !!translateY;\n css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)');\n repaint(target); // repaint\n\n css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));\n css(target, 'transform', 'translate3d(0,0,0)');\n typeof target.animated === 'number' && clearTimeout(target.animated);\n target.animated = setTimeout(function () {\n css(target, 'transition', '');\n css(target, 'transform', '');\n target.animated = false;\n target.animatingX = false;\n target.animatingY = false;\n }, duration);\n }\n }\n };\n}\nfunction repaint(target) {\n return target.offsetWidth;\n}\nfunction calculateRealTime(animatingRect, fromRect, toRect, options) {\n return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;\n}\nvar plugins = [];\nvar defaults = {\n initializeByDefault: true\n};\nvar PluginManager = {\n mount: function mount(plugin) {\n // Set default static properties\n for (var option in defaults) {\n if (defaults.hasOwnProperty(option) && !(option in plugin)) {\n plugin[option] = defaults[option];\n }\n }\n plugins.push(plugin);\n },\n pluginEvent: function pluginEvent(eventName, sortable, evt) {\n var _this = this;\n this.eventCanceled = false;\n evt.cancel = function () {\n _this.eventCanceled = true;\n };\n var eventNameGlobal = eventName + 'Global';\n plugins.forEach(function (plugin) {\n if (!sortable[plugin.pluginName]) return; // Fire global events if it exists in this sortable\n\n if (sortable[plugin.pluginName][eventNameGlobal]) {\n sortable[plugin.pluginName][eventNameGlobal](_objectSpread({\n sortable: sortable\n }, evt));\n } // Only fire plugin event if plugin is enabled in this sortable,\n // and plugin has event defined\n\n if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) {\n sortable[plugin.pluginName][eventName](_objectSpread({\n sortable: sortable\n }, evt));\n }\n });\n },\n initializePlugins: function initializePlugins(sortable, el, defaults, options) {\n plugins.forEach(function (plugin) {\n var pluginName = plugin.pluginName;\n if (!sortable.options[pluginName] && !plugin.initializeByDefault) return;\n var initialized = new plugin(sortable, el, sortable.options);\n initialized.sortable = sortable;\n initialized.options = sortable.options;\n sortable[pluginName] = initialized; // Add default options from plugin\n\n _extends(defaults, initialized.defaults);\n });\n for (var option in sortable.options) {\n if (!sortable.options.hasOwnProperty(option)) continue;\n var modified = this.modifyOption(sortable, option, sortable.options[option]);\n if (typeof modified !== 'undefined') {\n sortable.options[option] = modified;\n }\n }\n },\n getEventProperties: function getEventProperties(name, sortable) {\n var eventProperties = {};\n plugins.forEach(function (plugin) {\n if (typeof plugin.eventProperties !== 'function') return;\n _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));\n });\n return eventProperties;\n },\n modifyOption: function modifyOption(sortable, name, value) {\n var modifiedValue;\n plugins.forEach(function (plugin) {\n // Plugin must exist on the Sortable\n if (!sortable[plugin.pluginName]) return; // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin\n\n if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') {\n modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);\n }\n });\n return modifiedValue;\n }\n};\nfunction dispatchEvent(_ref) {\n var sortable = _ref.sortable,\n rootEl = _ref.rootEl,\n name = _ref.name,\n targetEl = _ref.targetEl,\n cloneEl = _ref.cloneEl,\n toEl = _ref.toEl,\n fromEl = _ref.fromEl,\n oldIndex = _ref.oldIndex,\n newIndex = _ref.newIndex,\n oldDraggableIndex = _ref.oldDraggableIndex,\n newDraggableIndex = _ref.newDraggableIndex,\n originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n extraEventProperties = _ref.extraEventProperties;\n sortable = sortable || rootEl && rootEl[expando];\n if (!sortable) return;\n var evt,\n options = sortable.options,\n onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1); // Support for new CustomEvent feature\n\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent(name, {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent(name, true, true);\n }\n evt.to = toEl || rootEl;\n evt.from = fromEl || rootEl;\n evt.item = targetEl || rootEl;\n evt.clone = cloneEl;\n evt.oldIndex = oldIndex;\n evt.newIndex = newIndex;\n evt.oldDraggableIndex = oldDraggableIndex;\n evt.newDraggableIndex = newDraggableIndex;\n evt.originalEvent = originalEvent;\n evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;\n var allEventProperties = _objectSpread({}, extraEventProperties, PluginManager.getEventProperties(name, sortable));\n for (var option in allEventProperties) {\n evt[option] = allEventProperties[option];\n }\n if (rootEl) {\n rootEl.dispatchEvent(evt);\n }\n if (options[onName]) {\n options[onName].call(sortable, evt);\n }\n}\nvar pluginEvent = function pluginEvent(eventName, sortable) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n originalEvent = _ref.evt,\n data = _objectWithoutProperties(_ref, [\"evt\"]);\n PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread({\n dragEl: dragEl,\n parentEl: parentEl,\n ghostEl: ghostEl,\n rootEl: rootEl,\n nextEl: nextEl,\n lastDownEl: lastDownEl,\n cloneEl: cloneEl,\n cloneHidden: cloneHidden,\n dragStarted: moved,\n putSortable: putSortable,\n activeSortable: Sortable.active,\n originalEvent: originalEvent,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n hideGhostForTarget: _hideGhostForTarget,\n unhideGhostForTarget: _unhideGhostForTarget,\n cloneNowHidden: function cloneNowHidden() {\n cloneHidden = true;\n },\n cloneNowShown: function cloneNowShown() {\n cloneHidden = false;\n },\n dispatchSortableEvent: function dispatchSortableEvent(name) {\n _dispatchEvent({\n sortable: sortable,\n name: name,\n originalEvent: originalEvent\n });\n }\n }, data));\n};\nfunction _dispatchEvent(info) {\n dispatchEvent(_objectSpread({\n putSortable: putSortable,\n cloneEl: cloneEl,\n targetEl: dragEl,\n rootEl: rootEl,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex\n }, info));\n}\nvar dragEl,\n parentEl,\n ghostEl,\n rootEl,\n nextEl,\n lastDownEl,\n cloneEl,\n cloneHidden,\n oldIndex,\n newIndex,\n oldDraggableIndex,\n newDraggableIndex,\n activeGroup,\n putSortable,\n awaitingDragStarted = false,\n ignoreNextClick = false,\n sortables = [],\n tapEvt,\n touchEvt,\n lastDx,\n lastDy,\n tapDistanceLeft,\n tapDistanceTop,\n moved,\n lastTarget,\n lastDirection,\n pastFirstInvertThresh = false,\n isCircumstantialInvert = false,\n targetMoveDistance,\n // For positioning ghost absolutely\n ghostRelativeParent,\n ghostRelativeParentInitialScroll = [],\n // (left, top)\n _silent = false,\n savedInputChecked = [];\n/** @const */\n\nvar documentExists = typeof document !== 'undefined',\n PositionGhostAbsolutely = IOS,\n CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float',\n // This will not pass for IE9, because IE9 DnD only works on anchors\n supportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'),\n supportCssPointerEvents = function () {\n if (!documentExists) return; // false when <= IE11\n\n if (IE11OrLess) {\n return false;\n }\n var el = document.createElement('x');\n el.style.cssText = 'pointer-events:auto';\n return el.style.pointerEvents === 'auto';\n }(),\n _detectDirection = function _detectDirection(el, options) {\n var elCSS = css(el),\n elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth),\n child1 = getChild(el, 0, options),\n child2 = getChild(el, 1, options),\n firstChildCSS = child1 && css(child1),\n secondChildCSS = child2 && css(child2),\n firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width,\n secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;\n if (elCSS.display === 'flex') {\n return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal';\n }\n if (elCSS.display === 'grid') {\n return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal';\n }\n if (child1 && firstChildCSS[\"float\"] && firstChildCSS[\"float\"] !== 'none') {\n var touchingSideChild2 = firstChildCSS[\"float\"] === 'left' ? 'left' : 'right';\n return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal';\n }\n return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal';\n },\n _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) {\n var dragElS1Opp = vertical ? dragRect.left : dragRect.top,\n dragElS2Opp = vertical ? dragRect.right : dragRect.bottom,\n dragElOppLength = vertical ? dragRect.width : dragRect.height,\n targetS1Opp = vertical ? targetRect.left : targetRect.top,\n targetS2Opp = vertical ? targetRect.right : targetRect.bottom,\n targetOppLength = vertical ? targetRect.width : targetRect.height;\n return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2;\n },\n /**\n * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\n * @param {Number} x X position\n * @param {Number} y Y position\n * @return {HTMLElement} Element of the first found nearest Sortable\n */\n _detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) {\n var ret;\n sortables.some(function (sortable) {\n if (lastChild(sortable)) return;\n var rect = getRect(sortable),\n threshold = sortable[expando].options.emptyInsertThreshold,\n insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold,\n insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;\n if (threshold && insideHorizontally && insideVertically) {\n return ret = sortable;\n }\n });\n return ret;\n },\n _prepareGroup = function _prepareGroup(options) {\n function toFn(value, pull) {\n return function (to, from, dragEl, evt) {\n var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;\n if (value == null && (pull || sameGroup)) {\n // Default pull value\n // Default pull and put value if same group\n return true;\n } else if (value == null || value === false) {\n return false;\n } else if (pull && value === 'clone') {\n return value;\n } else if (typeof value === 'function') {\n return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);\n } else {\n var otherGroup = (pull ? to : from).options.group.name;\n return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;\n }\n };\n }\n var group = {};\n var originalGroup = options.group;\n if (!originalGroup || _typeof(originalGroup) != 'object') {\n originalGroup = {\n name: originalGroup\n };\n }\n group.name = originalGroup.name;\n group.checkPull = toFn(originalGroup.pull, true);\n group.checkPut = toFn(originalGroup.put);\n group.revertClone = originalGroup.revertClone;\n options.group = group;\n },\n _hideGhostForTarget = function _hideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', 'none');\n }\n },\n _unhideGhostForTarget = function _unhideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', '');\n }\n }; // #1184 fix - Prevent click event on fallback if dragged but item not changed position\n\nif (documentExists) {\n document.addEventListener('click', function (evt) {\n if (ignoreNextClick) {\n evt.preventDefault();\n evt.stopPropagation && evt.stopPropagation();\n evt.stopImmediatePropagation && evt.stopImmediatePropagation();\n ignoreNextClick = false;\n return false;\n }\n }, true);\n}\nvar nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) {\n if (dragEl) {\n evt = evt.touches ? evt.touches[0] : evt;\n var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);\n if (nearest) {\n // Create imitation event\n var event = {};\n for (var i in evt) {\n if (evt.hasOwnProperty(i)) {\n event[i] = evt[i];\n }\n }\n event.target = event.rootEl = nearest;\n event.preventDefault = void 0;\n event.stopPropagation = void 0;\n nearest[expando]._onDragOver(event);\n }\n }\n};\nvar _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) {\n if (dragEl) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n }\n};\n/**\n * @class Sortable\n * @param {HTMLElement} el\n * @param {Object} [options]\n */\n\nfunction Sortable(el, options) {\n if (!(el && el.nodeType && el.nodeType === 1)) {\n throw \"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(el));\n }\n this.el = el; // root element\n\n this.options = options = _extends({}, options); // Export instance\n\n el[expando] = this;\n var defaults = {\n group: null,\n sort: true,\n disabled: false,\n store: null,\n handle: null,\n draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*',\n swapThreshold: 1,\n // percentage; 0 <= x <= 1\n invertSwap: false,\n // invert always\n invertedSwapThreshold: null,\n // will be set to same as swapThreshold if default\n removeCloneOnHide: true,\n direction: function direction() {\n return _detectDirection(el, this.options);\n },\n ghostClass: 'sortable-ghost',\n chosenClass: 'sortable-chosen',\n dragClass: 'sortable-drag',\n ignore: 'a, img',\n filter: null,\n preventOnFilter: true,\n animation: 0,\n easing: null,\n setData: function setData(dataTransfer, dragEl) {\n dataTransfer.setData('Text', dragEl.textContent);\n },\n dropBubble: false,\n dragoverBubble: false,\n dataIdAttr: 'data-id',\n delay: 0,\n delayOnTouchOnly: false,\n touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,\n forceFallback: false,\n fallbackClass: 'sortable-fallback',\n fallbackOnBody: false,\n fallbackTolerance: 0,\n fallbackOffset: {\n x: 0,\n y: 0\n },\n supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window,\n emptyInsertThreshold: 5\n };\n PluginManager.initializePlugins(this, el, defaults); // Set default options\n\n for (var name in defaults) {\n !(name in options) && (options[name] = defaults[name]);\n }\n _prepareGroup(options); // Bind all private methods\n\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n } // Setup drag mode\n\n this.nativeDraggable = options.forceFallback ? false : supportDraggable;\n if (this.nativeDraggable) {\n // Touch start threshold cannot be greater than the native dragstart threshold\n this.options.touchStartThreshold = 1;\n } // Bind events\n\n if (options.supportPointer) {\n on(el, 'pointerdown', this._onTapStart);\n } else {\n on(el, 'mousedown', this._onTapStart);\n on(el, 'touchstart', this._onTapStart);\n }\n if (this.nativeDraggable) {\n on(el, 'dragover', this);\n on(el, 'dragenter', this);\n }\n sortables.push(this.el); // Restore sorting\n\n options.store && options.store.get && this.sort(options.store.get(this) || []); // Add animation state manager\n\n _extends(this, AnimationStateManager());\n}\nSortable.prototype = /** @lends Sortable.prototype */\n{\n constructor: Sortable,\n _isOutsideThisEl: function _isOutsideThisEl(target) {\n if (!this.el.contains(target) && target !== this.el) {\n lastTarget = null;\n }\n },\n _getDirection: function _getDirection(evt, target) {\n return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;\n },\n _onTapStart: function _onTapStart( /** Event|TouchEvent */\n evt) {\n if (!evt.cancelable) return;\n var _this = this,\n el = this.el,\n options = this.options,\n preventOnFilter = options.preventOnFilter,\n type = evt.type,\n touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt,\n target = (touch || evt).target,\n originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target,\n filter = options.filter;\n _saveInputCheckedState(el); // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.\n\n if (dragEl) {\n return;\n }\n if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {\n return; // only left button and enabled\n } // cancel dnd if original target is content editable\n\n if (originalTarget.isContentEditable) {\n return;\n }\n target = closest(target, options.draggable, el, false);\n if (target && target.animated) {\n return;\n }\n if (lastDownEl === target) {\n // Ignoring duplicate `down`\n return;\n } // Get the index of the dragged element within its parent\n\n oldIndex = index(target);\n oldDraggableIndex = index(target, options.draggable); // Check filter\n\n if (typeof filter === 'function') {\n if (filter.call(this, evt, target, this)) {\n _dispatchEvent({\n sortable: _this,\n rootEl: originalTarget,\n name: 'filter',\n targetEl: target,\n toEl: el,\n fromEl: el\n });\n pluginEvent('filter', _this, {\n evt: evt\n });\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n } else if (filter) {\n filter = filter.split(',').some(function (criteria) {\n criteria = closest(originalTarget, criteria.trim(), el, false);\n if (criteria) {\n _dispatchEvent({\n sortable: _this,\n rootEl: criteria,\n name: 'filter',\n targetEl: target,\n fromEl: el,\n toEl: el\n });\n pluginEvent('filter', _this, {\n evt: evt\n });\n return true;\n }\n });\n if (filter) {\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n }\n\n if (options.handle && !closest(originalTarget, options.handle, el, false)) {\n return;\n } // Prepare `dragstart`\n\n this._prepareDragStart(evt, touch, target);\n },\n _prepareDragStart: function _prepareDragStart( /** Event */\n evt, /** Touch */\n touch, /** HTMLElement */\n target) {\n var _this = this,\n el = _this.el,\n options = _this.options,\n ownerDocument = el.ownerDocument,\n dragStartFn;\n if (target && !dragEl && target.parentNode === el) {\n var dragRect = getRect(target);\n rootEl = el;\n dragEl = target;\n parentEl = dragEl.parentNode;\n nextEl = dragEl.nextSibling;\n lastDownEl = target;\n activeGroup = options.group;\n Sortable.dragged = dragEl;\n tapEvt = {\n target: dragEl,\n clientX: (touch || evt).clientX,\n clientY: (touch || evt).clientY\n };\n tapDistanceLeft = tapEvt.clientX - dragRect.left;\n tapDistanceTop = tapEvt.clientY - dragRect.top;\n this._lastX = (touch || evt).clientX;\n this._lastY = (touch || evt).clientY;\n dragEl.style['will-change'] = 'all';\n dragStartFn = function dragStartFn() {\n pluginEvent('delayEnded', _this, {\n evt: evt\n });\n if (Sortable.eventCanceled) {\n _this._onDrop();\n return;\n } // Delayed drag has been triggered\n // we can re-enable the events: touchmove/mousemove\n\n _this._disableDelayedDragEvents();\n if (!FireFox && _this.nativeDraggable) {\n dragEl.draggable = true;\n } // Bind the events: dragstart/dragend\n\n _this._triggerDragStart(evt, touch); // Drag start event\n\n _dispatchEvent({\n sortable: _this,\n name: 'choose',\n originalEvent: evt\n }); // Chosen item\n\n toggleClass(dragEl, options.chosenClass, true);\n }; // Disable \"draggable\"\n\n options.ignore.split(',').forEach(function (criteria) {\n find(dragEl, criteria.trim(), _disableDraggable);\n });\n on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mouseup', _this._onDrop);\n on(ownerDocument, 'touchend', _this._onDrop);\n on(ownerDocument, 'touchcancel', _this._onDrop); // Make dragEl draggable (must be before delay for FireFox)\n\n if (FireFox && this.nativeDraggable) {\n this.options.touchStartThreshold = 4;\n dragEl.draggable = true;\n }\n pluginEvent('delayStart', this, {\n evt: evt\n }); // Delay is impossible for native DnD in Edge or IE\n\n if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {\n if (Sortable.eventCanceled) {\n this._onDrop();\n return;\n } // If the user moves the pointer or let go the click or touch\n // before the delay has been reached:\n // disable the delayed drag\n\n on(ownerDocument, 'mouseup', _this._disableDelayedDrag);\n on(ownerDocument, 'touchend', _this._disableDelayedDrag);\n on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);\n on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler);\n on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler);\n options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler);\n _this._dragStartTimer = setTimeout(dragStartFn, options.delay);\n } else {\n dragStartFn();\n }\n }\n },\n _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler( /** TouchEvent|PointerEvent **/\n e) {\n var touch = e.touches ? e.touches[0] : e;\n if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {\n this._disableDelayedDrag();\n }\n },\n _disableDelayedDrag: function _disableDelayedDrag() {\n dragEl && _disableDraggable(dragEl);\n clearTimeout(this._dragStartTimer);\n this._disableDelayedDragEvents();\n },\n _disableDelayedDragEvents: function _disableDelayedDragEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._disableDelayedDrag);\n off(ownerDocument, 'touchend', this._disableDelayedDrag);\n off(ownerDocument, 'touchcancel', this._disableDelayedDrag);\n off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);\n },\n _triggerDragStart: function _triggerDragStart( /** Event */\n evt, /** Touch */\n touch) {\n touch = touch || evt.pointerType == 'touch' && evt;\n if (!this.nativeDraggable || touch) {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._onTouchMove);\n } else if (touch) {\n on(document, 'touchmove', this._onTouchMove);\n } else {\n on(document, 'mousemove', this._onTouchMove);\n }\n } else {\n on(dragEl, 'dragend', this);\n on(rootEl, 'dragstart', this._onDragStart);\n }\n try {\n if (document.selection) {\n // Timeout neccessary for IE9\n _nextTick(function () {\n document.selection.empty();\n });\n } else {\n window.getSelection().removeAllRanges();\n }\n } catch (err) {}\n },\n _dragStarted: function _dragStarted(fallback, evt) {\n awaitingDragStarted = false;\n if (rootEl && dragEl) {\n pluginEvent('dragStarted', this, {\n evt: evt\n });\n if (this.nativeDraggable) {\n on(document, 'dragover', _checkOutsideTargetEl);\n }\n var options = this.options; // Apply effect\n\n !fallback && toggleClass(dragEl, options.dragClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n Sortable.active = this;\n fallback && this._appendGhost(); // Drag start event\n\n _dispatchEvent({\n sortable: this,\n name: 'start',\n originalEvent: evt\n });\n } else {\n this._nulling();\n }\n },\n _emulateDragOver: function _emulateDragOver() {\n if (touchEvt) {\n this._lastX = touchEvt.clientX;\n this._lastY = touchEvt.clientY;\n _hideGhostForTarget();\n var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n var parent = target;\n while (target && target.shadowRoot) {\n target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n if (target === parent) break;\n parent = target;\n }\n dragEl.parentNode[expando]._isOutsideThisEl(target);\n if (parent) {\n do {\n if (parent[expando]) {\n var inserted = void 0;\n inserted = parent[expando]._onDragOver({\n clientX: touchEvt.clientX,\n clientY: touchEvt.clientY,\n target: target,\n rootEl: parent\n });\n if (inserted && !this.options.dragoverBubble) {\n break;\n }\n }\n target = parent; // store last element\n }\n /* jshint boss:true */ while (parent = parent.parentNode);\n }\n _unhideGhostForTarget();\n }\n },\n _onTouchMove: function _onTouchMove( /**TouchEvent*/\n evt) {\n if (tapEvt) {\n var options = this.options,\n fallbackTolerance = options.fallbackTolerance,\n fallbackOffset = options.fallbackOffset,\n touch = evt.touches ? evt.touches[0] : evt,\n ghostMatrix = ghostEl && matrix(ghostEl, true),\n scaleX = ghostEl && ghostMatrix && ghostMatrix.a,\n scaleY = ghostEl && ghostMatrix && ghostMatrix.d,\n relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent),\n dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1),\n dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1); // only set the status to dragging, when we are actually dragging\n\n if (!Sortable.active && !awaitingDragStarted) {\n if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) {\n return;\n }\n this._onDragStart(evt, true);\n }\n if (ghostEl) {\n if (ghostMatrix) {\n ghostMatrix.e += dx - (lastDx || 0);\n ghostMatrix.f += dy - (lastDy || 0);\n } else {\n ghostMatrix = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: dx,\n f: dy\n };\n }\n var cssMatrix = \"matrix(\".concat(ghostMatrix.a, \",\").concat(ghostMatrix.b, \",\").concat(ghostMatrix.c, \",\").concat(ghostMatrix.d, \",\").concat(ghostMatrix.e, \",\").concat(ghostMatrix.f, \")\");\n css(ghostEl, 'webkitTransform', cssMatrix);\n css(ghostEl, 'mozTransform', cssMatrix);\n css(ghostEl, 'msTransform', cssMatrix);\n css(ghostEl, 'transform', cssMatrix);\n lastDx = dx;\n lastDy = dy;\n touchEvt = touch;\n }\n evt.cancelable && evt.preventDefault();\n }\n },\n _appendGhost: function _appendGhost() {\n // Bug if using scale(): https://stackoverflow.com/questions/2637058\n // Not being adjusted for\n if (!ghostEl) {\n var container = this.options.fallbackOnBody ? document.body : rootEl,\n rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container),\n options = this.options; // Position absolutely\n\n if (PositionGhostAbsolutely) {\n // Get relatively positioned parent\n ghostRelativeParent = container;\n while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {\n ghostRelativeParent = ghostRelativeParent.parentNode;\n }\n if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {\n if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement();\n rect.top += ghostRelativeParent.scrollTop;\n rect.left += ghostRelativeParent.scrollLeft;\n } else {\n ghostRelativeParent = getWindowScrollingElement();\n }\n ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);\n }\n ghostEl = dragEl.cloneNode(true);\n toggleClass(ghostEl, options.ghostClass, false);\n toggleClass(ghostEl, options.fallbackClass, true);\n toggleClass(ghostEl, options.dragClass, true);\n css(ghostEl, 'transition', '');\n css(ghostEl, 'transform', '');\n css(ghostEl, 'box-sizing', 'border-box');\n css(ghostEl, 'margin', 0);\n css(ghostEl, 'top', rect.top);\n css(ghostEl, 'left', rect.left);\n css(ghostEl, 'width', rect.width);\n css(ghostEl, 'height', rect.height);\n css(ghostEl, 'opacity', '0.8');\n css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed');\n css(ghostEl, 'zIndex', '100000');\n css(ghostEl, 'pointerEvents', 'none');\n Sortable.ghost = ghostEl;\n container.appendChild(ghostEl); // Set transform-origin\n\n css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');\n }\n },\n _onDragStart: function _onDragStart( /**Event*/\n evt, /**boolean*/\n fallback) {\n var _this = this;\n var dataTransfer = evt.dataTransfer;\n var options = _this.options;\n pluginEvent('dragStart', this, {\n evt: evt\n });\n if (Sortable.eventCanceled) {\n this._onDrop();\n return;\n }\n pluginEvent('setupClone', this);\n if (!Sortable.eventCanceled) {\n cloneEl = clone(dragEl);\n cloneEl.draggable = false;\n cloneEl.style['will-change'] = '';\n this._hideClone();\n toggleClass(cloneEl, this.options.chosenClass, false);\n Sortable.clone = cloneEl;\n } // #1143: IFrame support workaround\n\n _this.cloneId = _nextTick(function () {\n pluginEvent('clone', _this);\n if (Sortable.eventCanceled) return;\n if (!_this.options.removeCloneOnHide) {\n rootEl.insertBefore(cloneEl, dragEl);\n }\n _this._hideClone();\n _dispatchEvent({\n sortable: _this,\n name: 'clone'\n });\n });\n !fallback && toggleClass(dragEl, options.dragClass, true); // Set proper drop events\n\n if (fallback) {\n ignoreNextClick = true;\n _this._loopId = setInterval(_this._emulateDragOver, 50);\n } else {\n // Undo what was set in _prepareDragStart before drag started\n off(document, 'mouseup', _this._onDrop);\n off(document, 'touchend', _this._onDrop);\n off(document, 'touchcancel', _this._onDrop);\n if (dataTransfer) {\n dataTransfer.effectAllowed = 'move';\n options.setData && options.setData.call(_this, dataTransfer, dragEl);\n }\n on(document, 'drop', _this); // #1276 fix:\n\n css(dragEl, 'transform', 'translateZ(0)');\n }\n awaitingDragStarted = true;\n _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));\n on(document, 'selectstart', _this);\n moved = true;\n if (Safari) {\n css(document.body, 'user-select', 'none');\n }\n },\n // Returns true - if no further action is needed (either inserted or another condition)\n _onDragOver: function _onDragOver( /**Event*/\n evt) {\n var el = this.el,\n target = evt.target,\n dragRect,\n targetRect,\n revert,\n options = this.options,\n group = options.group,\n activeSortable = Sortable.active,\n isOwner = activeGroup === group,\n canSort = options.sort,\n fromSortable = putSortable || activeSortable,\n vertical,\n _this = this,\n completedFired = false;\n if (_silent) return;\n function dragOverEvent(name, extra) {\n pluginEvent(name, _this, _objectSpread({\n evt: evt,\n isOwner: isOwner,\n axis: vertical ? 'vertical' : 'horizontal',\n revert: revert,\n dragRect: dragRect,\n targetRect: targetRect,\n canSort: canSort,\n fromSortable: fromSortable,\n target: target,\n completed: completed,\n onMove: function onMove(target, after) {\n return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after);\n },\n changed: changed\n }, extra));\n } // Capture animation state\n\n function capture() {\n dragOverEvent('dragOverAnimationCapture');\n _this.captureAnimationState();\n if (_this !== fromSortable) {\n fromSortable.captureAnimationState();\n }\n } // Return invocation when dragEl is inserted (or completed)\n\n function completed(insertion) {\n dragOverEvent('dragOverCompleted', {\n insertion: insertion\n });\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n } else {\n activeSortable._showClone(_this);\n }\n if (_this !== fromSortable) {\n // Set ghost class to new sortable's ghost class\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n }\n if (putSortable !== _this && _this !== Sortable.active) {\n putSortable = _this;\n } else if (_this === Sortable.active && putSortable) {\n putSortable = null;\n } // Animation\n\n if (fromSortable === _this) {\n _this._ignoreWhileAnimating = target;\n }\n _this.animateAll(function () {\n dragOverEvent('dragOverAnimationComplete');\n _this._ignoreWhileAnimating = null;\n });\n if (_this !== fromSortable) {\n fromSortable.animateAll();\n fromSortable._ignoreWhileAnimating = null;\n }\n } // Null lastTarget if it is not inside a previously swapped element\n\n if (target === dragEl && !dragEl.animated || target === el && !target.animated) {\n lastTarget = null;\n } // no bubbling and not fallback\n\n if (!options.dragoverBubble && !evt.rootEl && target !== document) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target); // Do not detect for empty insert if already inserted\n\n !insertion && nearestEmptyInsertDetectEvent(evt);\n }\n !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();\n return completedFired = true;\n } // Call when dragEl has been inserted\n\n function changed() {\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n _dispatchEvent({\n sortable: _this,\n name: 'change',\n toEl: el,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n originalEvent: evt\n });\n }\n if (evt.preventDefault !== void 0) {\n evt.cancelable && evt.preventDefault();\n }\n target = closest(target, options.draggable, el, true);\n dragOverEvent('dragOver');\n if (Sortable.eventCanceled) return completedFired;\n if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {\n return completed(false);\n }\n ignoreNextClick = false;\n if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = !rootEl.contains(dragEl)) // Reverting item into the original list\n : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {\n vertical = this._getDirection(evt, target) === 'vertical';\n dragRect = getRect(dragEl);\n dragOverEvent('dragOverValid');\n if (Sortable.eventCanceled) return completedFired;\n if (revert) {\n parentEl = rootEl; // actualization\n\n capture();\n this._hideClone();\n dragOverEvent('revert');\n if (!Sortable.eventCanceled) {\n if (nextEl) {\n rootEl.insertBefore(dragEl, nextEl);\n } else {\n rootEl.appendChild(dragEl);\n }\n }\n return completed(true);\n }\n var elLastChild = lastChild(el, options.draggable);\n if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {\n // If already at end of list: Do not insert\n if (elLastChild === dragEl) {\n return completed(false);\n } // assign target only if condition is true\n\n if (elLastChild && el === evt.target) {\n target = elLastChild;\n }\n if (target) {\n targetRect = getRect(target);\n }\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {\n capture();\n el.appendChild(dragEl);\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (target.parentNode === el) {\n targetRect = getRect(target);\n var direction = 0,\n targetBeforeFirstSwap,\n differentLevel = dragEl.parentNode !== el,\n differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical),\n side1 = vertical ? 'top' : 'left',\n scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'),\n scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;\n if (lastTarget !== target) {\n targetBeforeFirstSwap = targetRect[side1];\n pastFirstInvertThresh = false;\n isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;\n }\n direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);\n var sibling;\n if (direction !== 0) {\n // Check if target is beside dragEl in respective direction (ignoring hidden elements)\n var dragIndex = index(dragEl);\n do {\n dragIndex -= direction;\n sibling = parentEl.children[dragIndex];\n } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl));\n } // If dragEl is already beside target: Do not insert\n\n if (direction === 0 || sibling === target) {\n return completed(false);\n }\n lastTarget = target;\n lastDirection = direction;\n var nextSibling = target.nextElementSibling,\n after = false;\n after = direction === 1;\n var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);\n if (moveVector !== false) {\n if (moveVector === 1 || moveVector === -1) {\n after = moveVector === 1;\n }\n _silent = true;\n setTimeout(_unsilent, 30);\n capture();\n if (after && !nextSibling) {\n el.appendChild(dragEl);\n } else {\n target.parentNode.insertBefore(dragEl, after ? nextSibling : target);\n } // Undo chrome's scroll adjustment (has no effect on other browsers)\n\n if (scrolledPastTop) {\n scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);\n }\n parentEl = dragEl.parentNode; // actualization\n // must be done before animation\n\n if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {\n targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);\n }\n changed();\n return completed(true);\n }\n }\n if (el.contains(dragEl)) {\n return completed(false);\n }\n }\n return false;\n },\n _ignoreWhileAnimating: null,\n _offMoveEvents: function _offMoveEvents() {\n off(document, 'mousemove', this._onTouchMove);\n off(document, 'touchmove', this._onTouchMove);\n off(document, 'pointermove', this._onTouchMove);\n off(document, 'dragover', nearestEmptyInsertDetectEvent);\n off(document, 'mousemove', nearestEmptyInsertDetectEvent);\n off(document, 'touchmove', nearestEmptyInsertDetectEvent);\n },\n _offUpEvents: function _offUpEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._onDrop);\n off(ownerDocument, 'touchend', this._onDrop);\n off(ownerDocument, 'pointerup', this._onDrop);\n off(ownerDocument, 'touchcancel', this._onDrop);\n off(document, 'selectstart', this);\n },\n _onDrop: function _onDrop( /**Event*/\n evt) {\n var el = this.el,\n options = this.options; // Get the index of the dragged element within its parent\n\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n pluginEvent('drop', this, {\n evt: evt\n });\n parentEl = dragEl && dragEl.parentNode; // Get again after plugin event\n\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n if (Sortable.eventCanceled) {\n this._nulling();\n return;\n }\n awaitingDragStarted = false;\n isCircumstantialInvert = false;\n pastFirstInvertThresh = false;\n clearInterval(this._loopId);\n clearTimeout(this._dragStartTimer);\n _cancelNextTick(this.cloneId);\n _cancelNextTick(this._dragStartId); // Unbind events\n\n if (this.nativeDraggable) {\n off(document, 'drop', this);\n off(el, 'dragstart', this._onDragStart);\n }\n this._offMoveEvents();\n this._offUpEvents();\n if (Safari) {\n css(document.body, 'user-select', '');\n }\n css(dragEl, 'transform', '');\n if (evt) {\n if (moved) {\n evt.cancelable && evt.preventDefault();\n !options.dropBubble && evt.stopPropagation();\n }\n ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n // Remove clone(s)\n cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);\n }\n if (dragEl) {\n if (this.nativeDraggable) {\n off(dragEl, 'dragend', this);\n }\n _disableDraggable(dragEl);\n dragEl.style['will-change'] = ''; // Remove classes\n // ghostClass is added in dragStarted\n\n if (moved && !awaitingDragStarted) {\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);\n }\n toggleClass(dragEl, this.options.chosenClass, false); // Drag stop event\n\n _dispatchEvent({\n sortable: this,\n name: 'unchoose',\n toEl: parentEl,\n newIndex: null,\n newDraggableIndex: null,\n originalEvent: evt\n });\n if (rootEl !== parentEl) {\n if (newIndex >= 0) {\n // Add event\n _dispatchEvent({\n rootEl: parentEl,\n name: 'add',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n }); // Remove event\n\n _dispatchEvent({\n sortable: this,\n name: 'remove',\n toEl: parentEl,\n originalEvent: evt\n }); // drag from one list and drop into another\n\n _dispatchEvent({\n rootEl: parentEl,\n name: 'sort',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n putSortable && putSortable.save();\n } else {\n if (newIndex !== oldIndex) {\n if (newIndex >= 0) {\n // drag & drop within the same list\n _dispatchEvent({\n sortable: this,\n name: 'update',\n toEl: parentEl,\n originalEvent: evt\n });\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n }\n }\n if (Sortable.active) {\n /* jshint eqnull:true */\n if (newIndex == null || newIndex === -1) {\n newIndex = oldIndex;\n newDraggableIndex = oldDraggableIndex;\n }\n _dispatchEvent({\n sortable: this,\n name: 'end',\n toEl: parentEl,\n originalEvent: evt\n }); // Save sorting\n\n this.save();\n }\n }\n }\n this._nulling();\n },\n _nulling: function _nulling() {\n pluginEvent('nulling', this);\n rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;\n savedInputChecked.forEach(function (el) {\n el.checked = true;\n });\n savedInputChecked.length = lastDx = lastDy = 0;\n },\n handleEvent: function handleEvent( /**Event*/\n evt) {\n switch (evt.type) {\n case 'drop':\n case 'dragend':\n this._onDrop(evt);\n break;\n case 'dragenter':\n case 'dragover':\n if (dragEl) {\n this._onDragOver(evt);\n _globalDragOver(evt);\n }\n break;\n case 'selectstart':\n evt.preventDefault();\n break;\n }\n },\n /**\n * Serializes the item into an array of string.\n * @returns {String[]}\n */\n toArray: function toArray() {\n var order = [],\n el,\n children = this.el.children,\n i = 0,\n n = children.length,\n options = this.options;\n for (; i < n; i++) {\n el = children[i];\n if (closest(el, options.draggable, this.el, false)) {\n order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\n }\n }\n return order;\n },\n /**\n * Sorts the elements according to the array.\n * @param {String[]} order order of the items\n */\n sort: function sort(order) {\n var items = {},\n rootEl = this.el;\n this.toArray().forEach(function (id, i) {\n var el = rootEl.children[i];\n if (closest(el, this.options.draggable, rootEl, false)) {\n items[id] = el;\n }\n }, this);\n order.forEach(function (id) {\n if (items[id]) {\n rootEl.removeChild(items[id]);\n rootEl.appendChild(items[id]);\n }\n });\n },\n /**\n * Save the current sorting\n */\n save: function save() {\n var store = this.options.store;\n store && store.set && store.set(this);\n },\n /**\n * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\n * @param {HTMLElement} el\n * @param {String} [selector] default: `options.draggable`\n * @returns {HTMLElement|null}\n */\n closest: function closest$1(el, selector) {\n return closest(el, selector || this.options.draggable, this.el, false);\n },\n /**\n * Set/get option\n * @param {string} name\n * @param {*} [value]\n * @returns {*}\n */\n option: function option(name, value) {\n var options = this.options;\n if (value === void 0) {\n return options[name];\n } else {\n var modifiedValue = PluginManager.modifyOption(this, name, value);\n if (typeof modifiedValue !== 'undefined') {\n options[name] = modifiedValue;\n } else {\n options[name] = value;\n }\n if (name === 'group') {\n _prepareGroup(options);\n }\n }\n },\n /**\n * Destroy\n */\n destroy: function destroy() {\n pluginEvent('destroy', this);\n var el = this.el;\n el[expando] = null;\n off(el, 'mousedown', this._onTapStart);\n off(el, 'touchstart', this._onTapStart);\n off(el, 'pointerdown', this._onTapStart);\n if (this.nativeDraggable) {\n off(el, 'dragover', this);\n off(el, 'dragenter', this);\n } // Remove draggable attributes\n\n Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {\n el.removeAttribute('draggable');\n });\n this._onDrop();\n this._disableDelayedDragEvents();\n sortables.splice(sortables.indexOf(this.el), 1);\n this.el = el = null;\n },\n _hideClone: function _hideClone() {\n if (!cloneHidden) {\n pluginEvent('hideClone', this);\n if (Sortable.eventCanceled) return;\n css(cloneEl, 'display', 'none');\n if (this.options.removeCloneOnHide && cloneEl.parentNode) {\n cloneEl.parentNode.removeChild(cloneEl);\n }\n cloneHidden = true;\n }\n },\n _showClone: function _showClone(putSortable) {\n if (putSortable.lastPutMode !== 'clone') {\n this._hideClone();\n return;\n }\n if (cloneHidden) {\n pluginEvent('showClone', this);\n if (Sortable.eventCanceled) return; // show clone at dragEl or original position\n\n if (rootEl.contains(dragEl) && !this.options.group.revertClone) {\n rootEl.insertBefore(cloneEl, dragEl);\n } else if (nextEl) {\n rootEl.insertBefore(cloneEl, nextEl);\n } else {\n rootEl.appendChild(cloneEl);\n }\n if (this.options.group.revertClone) {\n this.animate(dragEl, cloneEl);\n }\n css(cloneEl, 'display', '');\n cloneHidden = false;\n }\n }\n};\nfunction _globalDragOver( /**Event*/\nevt) {\n if (evt.dataTransfer) {\n evt.dataTransfer.dropEffect = 'move';\n }\n evt.cancelable && evt.preventDefault();\n}\nfunction _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) {\n var evt,\n sortable = fromEl[expando],\n onMoveFn = sortable.options.onMove,\n retVal; // Support for new CustomEvent feature\n\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent('move', {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent('move', true, true);\n }\n evt.to = toEl;\n evt.from = fromEl;\n evt.dragged = dragEl;\n evt.draggedRect = dragRect;\n evt.related = targetEl || toEl;\n evt.relatedRect = targetRect || getRect(toEl);\n evt.willInsertAfter = willInsertAfter;\n evt.originalEvent = originalEvent;\n fromEl.dispatchEvent(evt);\n if (onMoveFn) {\n retVal = onMoveFn.call(sortable, evt, originalEvent);\n }\n return retVal;\n}\nfunction _disableDraggable(el) {\n el.draggable = false;\n}\nfunction _unsilent() {\n _silent = false;\n}\nfunction _ghostIsLast(evt, vertical, sortable) {\n var rect = getRect(lastChild(sortable.el, sortable.options.draggable));\n var spacer = 10;\n return vertical ? evt.clientX > rect.right + spacer || evt.clientX <= rect.right && evt.clientY > rect.bottom && evt.clientX >= rect.left : evt.clientX > rect.right && evt.clientY > rect.top || evt.clientX <= rect.right && evt.clientY > rect.bottom + spacer;\n}\nfunction _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {\n var mouseOnAxis = vertical ? evt.clientY : evt.clientX,\n targetLength = vertical ? targetRect.height : targetRect.width,\n targetS1 = vertical ? targetRect.top : targetRect.left,\n targetS2 = vertical ? targetRect.bottom : targetRect.right,\n invert = false;\n if (!invertSwap) {\n // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold\n if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {\n // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2\n // check if past first invert threshold on side opposite of lastDirection\n if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) {\n // past first invert threshold, do not restrict inverted threshold to dragEl shadow\n pastFirstInvertThresh = true;\n }\n if (!pastFirstInvertThresh) {\n // dragEl shadow (target move distance shadow)\n if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow\n : mouseOnAxis > targetS2 - targetMoveDistance) {\n return -lastDirection;\n }\n } else {\n invert = true;\n }\n } else {\n // Regular\n if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) {\n return _getInsertDirection(target);\n }\n }\n }\n invert = invert || invertSwap;\n if (invert) {\n // Invert of regular\n if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {\n return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;\n }\n }\n return 0;\n}\n/**\n * Gets the direction dragEl must be swapped relative to target in order to make it\n * seem that dragEl has been \"inserted\" into that element's position\n * @param {HTMLElement} target The target whose position dragEl is being inserted at\n * @return {Number} Direction dragEl must be swapped\n */\n\nfunction _getInsertDirection(target) {\n if (index(dragEl) < index(target)) {\n return 1;\n } else {\n return -1;\n }\n}\n/**\n * Generate id\n * @param {HTMLElement} el\n * @returns {String}\n * @private\n */\n\nfunction _generateId(el) {\n var str = el.tagName + el.className + el.src + el.href + el.textContent,\n i = str.length,\n sum = 0;\n while (i--) {\n sum += str.charCodeAt(i);\n }\n return sum.toString(36);\n}\nfunction _saveInputCheckedState(root) {\n savedInputChecked.length = 0;\n var inputs = root.getElementsByTagName('input');\n var idx = inputs.length;\n while (idx--) {\n var el = inputs[idx];\n el.checked && savedInputChecked.push(el);\n }\n}\nfunction _nextTick(fn) {\n return setTimeout(fn, 0);\n}\nfunction _cancelNextTick(id) {\n return clearTimeout(id);\n} // Fixed #973:\n\nif (documentExists) {\n on(document, 'touchmove', function (evt) {\n if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {\n evt.preventDefault();\n }\n });\n} // Export utils\n\nSortable.utils = {\n on: on,\n off: off,\n css: css,\n find: find,\n is: function is(el, selector) {\n return !!closest(el, selector, el, false);\n },\n extend: extend,\n throttle: throttle,\n closest: closest,\n toggleClass: toggleClass,\n clone: clone,\n index: index,\n nextTick: _nextTick,\n cancelNextTick: _cancelNextTick,\n detectDirection: _detectDirection,\n getChild: getChild\n};\n/**\n * Get the Sortable instance of an element\n * @param {HTMLElement} element The element\n * @return {Sortable|undefined} The instance of Sortable\n */\n\nSortable.get = function (element) {\n return element[expando];\n};\n/**\n * Mount a plugin to Sortable\n * @param {...SortablePlugin|SortablePlugin[]} plugins Plugins being mounted\n */\n\nSortable.mount = function () {\n for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {\n plugins[_key] = arguments[_key];\n }\n if (plugins[0].constructor === Array) plugins = plugins[0];\n plugins.forEach(function (plugin) {\n if (!plugin.prototype || !plugin.prototype.constructor) {\n throw \"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(plugin));\n }\n if (plugin.utils) Sortable.utils = _objectSpread({}, Sortable.utils, plugin.utils);\n PluginManager.mount(plugin);\n });\n};\n/**\n * Create sortable instance\n * @param {HTMLElement} el\n * @param {Object} [options]\n */\n\nSortable.create = function (el, options) {\n return new Sortable(el, options);\n}; // Export\n\nSortable.version = version;\nvar autoScrolls = [],\n scrollEl,\n scrollRootEl,\n scrolling = false,\n lastAutoScrollX,\n lastAutoScrollY,\n touchEvt$1,\n pointerElemChangedInterval;\nfunction AutoScrollPlugin() {\n function AutoScroll() {\n this.defaults = {\n scroll: true,\n scrollSensitivity: 30,\n scrollSpeed: 10,\n bubbleScroll: true\n }; // Bind all private methods\n\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n }\n AutoScroll.prototype = {\n dragStarted: function dragStarted(_ref) {\n var originalEvent = _ref.originalEvent;\n if (this.sortable.nativeDraggable) {\n on(document, 'dragover', this._handleAutoScroll);\n } else {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._handleFallbackAutoScroll);\n } else if (originalEvent.touches) {\n on(document, 'touchmove', this._handleFallbackAutoScroll);\n } else {\n on(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref2) {\n var originalEvent = _ref2.originalEvent;\n\n // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached)\n if (!this.options.dragOverBubble && !originalEvent.rootEl) {\n this._handleAutoScroll(originalEvent);\n }\n },\n drop: function drop() {\n if (this.sortable.nativeDraggable) {\n off(document, 'dragover', this._handleAutoScroll);\n } else {\n off(document, 'pointermove', this._handleFallbackAutoScroll);\n off(document, 'touchmove', this._handleFallbackAutoScroll);\n off(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n clearPointerElemChangedInterval();\n clearAutoScrolls();\n cancelThrottle();\n },\n nulling: function nulling() {\n touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;\n autoScrolls.length = 0;\n },\n _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) {\n this._handleAutoScroll(evt, true);\n },\n _handleAutoScroll: function _handleAutoScroll(evt, fallback) {\n var _this = this;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n elem = document.elementFromPoint(x, y);\n touchEvt$1 = evt; // IE does not seem to have native autoscroll,\n // Edge's autoscroll seems too conditional,\n // MACOS Safari does not have autoscroll,\n // Firefox and Chrome are good\n\n if (fallback || Edge || IE11OrLess || Safari) {\n autoScroll(evt, this.options, elem, fallback); // Listener for pointer element change\n\n var ogElemScroller = getParentAutoScrollElement(elem, true);\n if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {\n pointerElemChangedInterval && clearPointerElemChangedInterval(); // Detect for pointer elem change, emulating native DnD behaviour\n\n pointerElemChangedInterval = setInterval(function () {\n var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);\n if (newElem !== ogElemScroller) {\n ogElemScroller = newElem;\n clearAutoScrolls();\n }\n autoScroll(evt, _this.options, newElem, fallback);\n }, 10);\n lastAutoScrollX = x;\n lastAutoScrollY = y;\n }\n } else {\n // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll\n if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) {\n clearAutoScrolls();\n return;\n }\n autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);\n }\n }\n };\n return _extends(AutoScroll, {\n pluginName: 'scroll',\n initializeByDefault: true\n });\n}\nfunction clearAutoScrolls() {\n autoScrolls.forEach(function (autoScroll) {\n clearInterval(autoScroll.pid);\n });\n autoScrolls = [];\n}\nfunction clearPointerElemChangedInterval() {\n clearInterval(pointerElemChangedInterval);\n}\nvar autoScroll = throttle(function (evt, options, rootEl, isFallback) {\n // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n if (!options.scroll) return;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n sens = options.scrollSensitivity,\n speed = options.scrollSpeed,\n winScroller = getWindowScrollingElement();\n var scrollThisInstance = false,\n scrollCustomFn; // New scroll root, set scrollEl\n\n if (scrollRootEl !== rootEl) {\n scrollRootEl = rootEl;\n clearAutoScrolls();\n scrollEl = options.scroll;\n scrollCustomFn = options.scrollFn;\n if (scrollEl === true) {\n scrollEl = getParentAutoScrollElement(rootEl, true);\n }\n }\n var layersOut = 0;\n var currentParent = scrollEl;\n do {\n var el = currentParent,\n rect = getRect(el),\n top = rect.top,\n bottom = rect.bottom,\n left = rect.left,\n right = rect.right,\n width = rect.width,\n height = rect.height,\n canScrollX = void 0,\n canScrollY = void 0,\n scrollWidth = el.scrollWidth,\n scrollHeight = el.scrollHeight,\n elCSS = css(el),\n scrollPosX = el.scrollLeft,\n scrollPosY = el.scrollTop;\n if (el === winScroller) {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible');\n } else {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll');\n }\n var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX);\n var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY);\n if (!autoScrolls[layersOut]) {\n for (var i = 0; i <= layersOut; i++) {\n if (!autoScrolls[i]) {\n autoScrolls[i] = {};\n }\n }\n }\n if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {\n autoScrolls[layersOut].el = el;\n autoScrolls[layersOut].vx = vx;\n autoScrolls[layersOut].vy = vy;\n clearInterval(autoScrolls[layersOut].pid);\n if (vx != 0 || vy != 0) {\n scrollThisInstance = true;\n /* jshint loopfunc:true */\n\n autoScrolls[layersOut].pid = setInterval(function () {\n // emulate drag over during autoscroll (fallback), emulating native DnD behaviour\n if (isFallback && this.layer === 0) {\n Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely\n }\n\n var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;\n var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;\n if (typeof scrollCustomFn === 'function') {\n if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') {\n return;\n }\n }\n scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);\n }.bind({\n layer: layersOut\n }), 24);\n }\n }\n layersOut++;\n } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));\n scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not\n}, 30);\nvar drop = function drop(_ref) {\n var originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n dragEl = _ref.dragEl,\n activeSortable = _ref.activeSortable,\n dispatchSortableEvent = _ref.dispatchSortableEvent,\n hideGhostForTarget = _ref.hideGhostForTarget,\n unhideGhostForTarget = _ref.unhideGhostForTarget;\n if (!originalEvent) return;\n var toSortable = putSortable || activeSortable;\n hideGhostForTarget();\n var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent;\n var target = document.elementFromPoint(touch.clientX, touch.clientY);\n unhideGhostForTarget();\n if (toSortable && !toSortable.el.contains(target)) {\n dispatchSortableEvent('spill');\n this.onSpill({\n dragEl: dragEl,\n putSortable: putSortable\n });\n }\n};\nfunction Revert() {}\nRevert.prototype = {\n startIndex: null,\n dragStart: function dragStart(_ref2) {\n var oldDraggableIndex = _ref2.oldDraggableIndex;\n this.startIndex = oldDraggableIndex;\n },\n onSpill: function onSpill(_ref3) {\n var dragEl = _ref3.dragEl,\n putSortable = _ref3.putSortable;\n this.sortable.captureAnimationState();\n if (putSortable) {\n putSortable.captureAnimationState();\n }\n var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);\n if (nextSibling) {\n this.sortable.el.insertBefore(dragEl, nextSibling);\n } else {\n this.sortable.el.appendChild(dragEl);\n }\n this.sortable.animateAll();\n if (putSortable) {\n putSortable.animateAll();\n }\n },\n drop: drop\n};\n_extends(Revert, {\n pluginName: 'revertOnSpill'\n});\nfunction Remove() {}\nRemove.prototype = {\n onSpill: function onSpill(_ref4) {\n var dragEl = _ref4.dragEl,\n putSortable = _ref4.putSortable;\n var parentSortable = putSortable || this.sortable;\n parentSortable.captureAnimationState();\n dragEl.parentNode && dragEl.parentNode.removeChild(dragEl);\n parentSortable.animateAll();\n },\n drop: drop\n};\n_extends(Remove, {\n pluginName: 'removeOnSpill'\n});\nvar lastSwapEl;\nfunction SwapPlugin() {\n function Swap() {\n this.defaults = {\n swapClass: 'sortable-swap-highlight'\n };\n }\n Swap.prototype = {\n dragStart: function dragStart(_ref) {\n var dragEl = _ref.dragEl;\n lastSwapEl = dragEl;\n },\n dragOverValid: function dragOverValid(_ref2) {\n var completed = _ref2.completed,\n target = _ref2.target,\n onMove = _ref2.onMove,\n activeSortable = _ref2.activeSortable,\n changed = _ref2.changed,\n cancel = _ref2.cancel;\n if (!activeSortable.options.swap) return;\n var el = this.sortable.el,\n options = this.options;\n if (target && target !== el) {\n var prevSwapEl = lastSwapEl;\n if (onMove(target) !== false) {\n toggleClass(target, options.swapClass, true);\n lastSwapEl = target;\n } else {\n lastSwapEl = null;\n }\n if (prevSwapEl && prevSwapEl !== lastSwapEl) {\n toggleClass(prevSwapEl, options.swapClass, false);\n }\n }\n changed();\n completed(true);\n cancel();\n },\n drop: function drop(_ref3) {\n var activeSortable = _ref3.activeSortable,\n putSortable = _ref3.putSortable,\n dragEl = _ref3.dragEl;\n var toSortable = putSortable || this.sortable;\n var options = this.options;\n lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false);\n if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) {\n if (dragEl !== lastSwapEl) {\n toSortable.captureAnimationState();\n if (toSortable !== activeSortable) activeSortable.captureAnimationState();\n swapNodes(dragEl, lastSwapEl);\n toSortable.animateAll();\n if (toSortable !== activeSortable) activeSortable.animateAll();\n }\n }\n },\n nulling: function nulling() {\n lastSwapEl = null;\n }\n };\n return _extends(Swap, {\n pluginName: 'swap',\n eventProperties: function eventProperties() {\n return {\n swapItem: lastSwapEl\n };\n }\n });\n}\nfunction swapNodes(n1, n2) {\n var p1 = n1.parentNode,\n p2 = n2.parentNode,\n i1,\n i2;\n if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return;\n i1 = index(n1);\n i2 = index(n2);\n if (p1.isEqualNode(p2) && i1 < i2) {\n i2++;\n }\n p1.insertBefore(n2, p1.children[i1]);\n p2.insertBefore(n1, p2.children[i2]);\n}\nvar multiDragElements = [],\n multiDragClones = [],\n lastMultiDragSelect,\n // for selection with modifier key down (SHIFT)\n multiDragSortable,\n initialFolding = false,\n // Initial multi-drag fold when drag started\n folding = false,\n // Folding any other time\n dragStarted = false,\n dragEl$1,\n clonesFromRect,\n clonesHidden;\nfunction MultiDragPlugin() {\n function MultiDrag(sortable) {\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n if (sortable.options.supportPointer) {\n on(document, 'pointerup', this._deselectMultiDrag);\n } else {\n on(document, 'mouseup', this._deselectMultiDrag);\n on(document, 'touchend', this._deselectMultiDrag);\n }\n on(document, 'keydown', this._checkKeyDown);\n on(document, 'keyup', this._checkKeyUp);\n this.defaults = {\n selectedClass: 'sortable-selected',\n multiDragKey: null,\n setData: function setData(dataTransfer, dragEl) {\n var data = '';\n if (multiDragElements.length && multiDragSortable === sortable) {\n multiDragElements.forEach(function (multiDragElement, i) {\n data += (!i ? '' : ', ') + multiDragElement.textContent;\n });\n } else {\n data = dragEl.textContent;\n }\n dataTransfer.setData('Text', data);\n }\n };\n }\n MultiDrag.prototype = {\n multiDragKeyDown: false,\n isMultiDrag: false,\n delayStartGlobal: function delayStartGlobal(_ref) {\n var dragged = _ref.dragEl;\n dragEl$1 = dragged;\n },\n delayEnded: function delayEnded() {\n this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1);\n },\n setupClone: function setupClone(_ref2) {\n var sortable = _ref2.sortable,\n cancel = _ref2.cancel;\n if (!this.isMultiDrag) return;\n for (var i = 0; i < multiDragElements.length; i++) {\n multiDragClones.push(clone(multiDragElements[i]));\n multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex;\n multiDragClones[i].draggable = false;\n multiDragClones[i].style['will-change'] = '';\n toggleClass(multiDragClones[i], this.options.selectedClass, false);\n multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false);\n }\n sortable._hideClone();\n cancel();\n },\n clone: function clone(_ref3) {\n var sortable = _ref3.sortable,\n rootEl = _ref3.rootEl,\n dispatchSortableEvent = _ref3.dispatchSortableEvent,\n cancel = _ref3.cancel;\n if (!this.isMultiDrag) return;\n if (!this.options.removeCloneOnHide) {\n if (multiDragElements.length && multiDragSortable === sortable) {\n insertMultiDragClones(true, rootEl);\n dispatchSortableEvent('clone');\n cancel();\n }\n }\n },\n showClone: function showClone(_ref4) {\n var cloneNowShown = _ref4.cloneNowShown,\n rootEl = _ref4.rootEl,\n cancel = _ref4.cancel;\n if (!this.isMultiDrag) return;\n insertMultiDragClones(false, rootEl);\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', '');\n });\n cloneNowShown();\n clonesHidden = false;\n cancel();\n },\n hideClone: function hideClone(_ref5) {\n var _this = this;\n var sortable = _ref5.sortable,\n cloneNowHidden = _ref5.cloneNowHidden,\n cancel = _ref5.cancel;\n if (!this.isMultiDrag) return;\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', 'none');\n if (_this.options.removeCloneOnHide && clone.parentNode) {\n clone.parentNode.removeChild(clone);\n }\n });\n cloneNowHidden();\n clonesHidden = true;\n cancel();\n },\n dragStartGlobal: function dragStartGlobal(_ref6) {\n var sortable = _ref6.sortable;\n if (!this.isMultiDrag && multiDragSortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n }\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.sortableIndex = index(multiDragElement);\n }); // Sort multi-drag elements\n\n multiDragElements = multiDragElements.sort(function (a, b) {\n return a.sortableIndex - b.sortableIndex;\n });\n dragStarted = true;\n },\n dragStarted: function dragStarted(_ref7) {\n var _this2 = this;\n var sortable = _ref7.sortable;\n if (!this.isMultiDrag) return;\n if (this.options.sort) {\n // Capture rects,\n // hide multi drag elements (by positioning them absolute),\n // set multi drag elements rects to dragRect,\n // show multi drag elements,\n // animate to rects,\n // unset rects & remove from DOM\n sortable.captureAnimationState();\n if (this.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n css(multiDragElement, 'position', 'absolute');\n });\n var dragRect = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRect);\n });\n folding = true;\n initialFolding = true;\n }\n }\n sortable.animateAll(function () {\n folding = false;\n initialFolding = false;\n if (_this2.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n } // Remove all auxiliary multidrag items from el, if sorting enabled\n\n if (_this2.options.sort) {\n removeMultiDragElements();\n }\n });\n },\n dragOver: function dragOver(_ref8) {\n var target = _ref8.target,\n completed = _ref8.completed,\n cancel = _ref8.cancel;\n if (folding && ~multiDragElements.indexOf(target)) {\n completed(false);\n cancel();\n }\n },\n revert: function revert(_ref9) {\n var fromSortable = _ref9.fromSortable,\n rootEl = _ref9.rootEl,\n sortable = _ref9.sortable,\n dragRect = _ref9.dragRect;\n if (multiDragElements.length > 1) {\n // Setup unfold animation\n multiDragElements.forEach(function (multiDragElement) {\n sortable.addAnimationState({\n target: multiDragElement,\n rect: folding ? getRect(multiDragElement) : dragRect\n });\n unsetRect(multiDragElement);\n multiDragElement.fromRect = dragRect;\n fromSortable.removeAnimationState(multiDragElement);\n });\n folding = false;\n insertMultiDragElements(!this.options.removeCloneOnHide, rootEl);\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref10) {\n var sortable = _ref10.sortable,\n isOwner = _ref10.isOwner,\n insertion = _ref10.insertion,\n activeSortable = _ref10.activeSortable,\n parentEl = _ref10.parentEl,\n putSortable = _ref10.putSortable;\n var options = this.options;\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n }\n initialFolding = false; // If leaving sort:false root, or already folding - Fold to new location\n\n if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) {\n // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible\n var dragRectAbsolute = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRectAbsolute); // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted\n // while folding, and so that we can capture them again because old sortable will no longer be fromSortable\n\n parentEl.appendChild(multiDragElement);\n });\n folding = true;\n } // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out\n\n if (!isOwner) {\n // Only remove if not folding (folding will remove them anyways)\n if (!folding) {\n removeMultiDragElements();\n }\n if (multiDragElements.length > 1) {\n var clonesHiddenBefore = clonesHidden;\n activeSortable._showClone(sortable); // Unfold animation for clones if showing from hidden\n\n if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) {\n multiDragClones.forEach(function (clone) {\n activeSortable.addAnimationState({\n target: clone,\n rect: clonesFromRect\n });\n clone.fromRect = clonesFromRect;\n clone.thisAnimationDuration = null;\n });\n }\n } else {\n activeSortable._showClone(sortable);\n }\n }\n }\n },\n dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) {\n var dragRect = _ref11.dragRect,\n isOwner = _ref11.isOwner,\n activeSortable = _ref11.activeSortable;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n });\n if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) {\n clonesFromRect = _extends({}, dragRect);\n var dragMatrix = matrix(dragEl$1, true);\n clonesFromRect.top -= dragMatrix.f;\n clonesFromRect.left -= dragMatrix.e;\n }\n },\n dragOverAnimationComplete: function dragOverAnimationComplete() {\n if (folding) {\n folding = false;\n removeMultiDragElements();\n }\n },\n drop: function drop(_ref12) {\n var evt = _ref12.originalEvent,\n rootEl = _ref12.rootEl,\n parentEl = _ref12.parentEl,\n sortable = _ref12.sortable,\n dispatchSortableEvent = _ref12.dispatchSortableEvent,\n oldIndex = _ref12.oldIndex,\n putSortable = _ref12.putSortable;\n var toSortable = putSortable || this.sortable;\n if (!evt) return;\n var options = this.options,\n children = parentEl.children; // Multi-drag selection\n\n if (!dragStarted) {\n if (options.multiDragKey && !this.multiDragKeyDown) {\n this._deselectMultiDrag();\n }\n toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1));\n if (!~multiDragElements.indexOf(dragEl$1)) {\n multiDragElements.push(dragEl$1);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: dragEl$1,\n originalEvt: evt\n }); // Modifier activated, select from last to dragEl\n\n if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) {\n var lastIndex = index(lastMultiDragSelect),\n currentIndex = index(dragEl$1);\n if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) {\n // Must include lastMultiDragSelect (select it), in case modified selection from no selection\n // (but previous selection existed)\n var n, i;\n if (currentIndex > lastIndex) {\n i = lastIndex;\n n = currentIndex;\n } else {\n i = currentIndex;\n n = lastIndex + 1;\n }\n for (; i < n; i++) {\n if (~multiDragElements.indexOf(children[i])) continue;\n toggleClass(children[i], options.selectedClass, true);\n multiDragElements.push(children[i]);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: children[i],\n originalEvt: evt\n });\n }\n }\n } else {\n lastMultiDragSelect = dragEl$1;\n }\n multiDragSortable = toSortable;\n } else {\n multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1);\n lastMultiDragSelect = null;\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'deselect',\n targetEl: dragEl$1,\n originalEvt: evt\n });\n }\n } // Multi-drag drop\n\n if (dragStarted && this.isMultiDrag) {\n // Do not \"unfold\" after around dragEl if reverted\n if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) {\n var dragRect = getRect(dragEl$1),\n multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')');\n if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null;\n toSortable.captureAnimationState();\n if (!initialFolding) {\n if (options.animation) {\n dragEl$1.fromRect = dragRect;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n if (multiDragElement !== dragEl$1) {\n var rect = folding ? getRect(multiDragElement) : dragRect;\n multiDragElement.fromRect = rect; // Prepare unfold animation\n\n toSortable.addAnimationState({\n target: multiDragElement,\n rect: rect\n });\n }\n });\n } // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert\n // properly they must all be removed\n\n removeMultiDragElements();\n multiDragElements.forEach(function (multiDragElement) {\n if (children[multiDragIndex]) {\n parentEl.insertBefore(multiDragElement, children[multiDragIndex]);\n } else {\n parentEl.appendChild(multiDragElement);\n }\n multiDragIndex++;\n }); // If initial folding is done, the elements may have changed position because they are now\n // unfolding around dragEl, even though dragEl may not have his index changed, so update event\n // must be fired here as Sortable will not.\n\n if (oldIndex === index(dragEl$1)) {\n var update = false;\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement.sortableIndex !== index(multiDragElement)) {\n update = true;\n return;\n }\n });\n if (update) {\n dispatchSortableEvent('update');\n }\n }\n } // Must be done after capturing individual rects (scroll bar)\n\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n toSortable.animateAll();\n }\n multiDragSortable = toSortable;\n } // Remove clones if necessary\n\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n multiDragClones.forEach(function (clone) {\n clone.parentNode && clone.parentNode.removeChild(clone);\n });\n }\n },\n nullingGlobal: function nullingGlobal() {\n this.isMultiDrag = dragStarted = false;\n multiDragClones.length = 0;\n },\n destroyGlobal: function destroyGlobal() {\n this._deselectMultiDrag();\n off(document, 'pointerup', this._deselectMultiDrag);\n off(document, 'mouseup', this._deselectMultiDrag);\n off(document, 'touchend', this._deselectMultiDrag);\n off(document, 'keydown', this._checkKeyDown);\n off(document, 'keyup', this._checkKeyUp);\n },\n _deselectMultiDrag: function _deselectMultiDrag(evt) {\n if (typeof dragStarted !== \"undefined\" && dragStarted) return; // Only deselect if selection is in this sortable\n\n if (multiDragSortable !== this.sortable) return; // Only deselect if target is not item in this sortable\n\n if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return; // Only deselect if left click\n\n if (evt && evt.button !== 0) return;\n while (multiDragElements.length) {\n var el = multiDragElements[0];\n toggleClass(el, this.options.selectedClass, false);\n multiDragElements.shift();\n dispatchEvent({\n sortable: this.sortable,\n rootEl: this.sortable.el,\n name: 'deselect',\n targetEl: el,\n originalEvt: evt\n });\n }\n },\n _checkKeyDown: function _checkKeyDown(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = true;\n }\n },\n _checkKeyUp: function _checkKeyUp(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = false;\n }\n }\n };\n return _extends(MultiDrag, {\n // Static methods & properties\n pluginName: 'multiDrag',\n utils: {\n /**\r\n * Selects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be selected\r\n */\n select: function select(el) {\n var sortable = el.parentNode[expando];\n if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return;\n if (multiDragSortable && multiDragSortable !== sortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n multiDragSortable = sortable;\n }\n toggleClass(el, sortable.options.selectedClass, true);\n multiDragElements.push(el);\n },\n /**\r\n * Deselects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be deselected\r\n */\n deselect: function deselect(el) {\n var sortable = el.parentNode[expando],\n index = multiDragElements.indexOf(el);\n if (!sortable || !sortable.options.multiDrag || !~index) return;\n toggleClass(el, sortable.options.selectedClass, false);\n multiDragElements.splice(index, 1);\n }\n },\n eventProperties: function eventProperties() {\n var _this3 = this;\n var oldIndicies = [],\n newIndicies = [];\n multiDragElements.forEach(function (multiDragElement) {\n oldIndicies.push({\n multiDragElement: multiDragElement,\n index: multiDragElement.sortableIndex\n }); // multiDragElements will already be sorted if folding\n\n var newIndex;\n if (folding && multiDragElement !== dragEl$1) {\n newIndex = -1;\n } else if (folding) {\n newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')');\n } else {\n newIndex = index(multiDragElement);\n }\n newIndicies.push({\n multiDragElement: multiDragElement,\n index: newIndex\n });\n });\n return {\n items: _toConsumableArray(multiDragElements),\n clones: [].concat(multiDragClones),\n oldIndicies: oldIndicies,\n newIndicies: newIndicies\n };\n },\n optionListeners: {\n multiDragKey: function multiDragKey(key) {\n key = key.toLowerCase();\n if (key === 'ctrl') {\n key = 'Control';\n } else if (key.length > 1) {\n key = key.charAt(0).toUpperCase() + key.substr(1);\n }\n return key;\n }\n }\n });\n}\nfunction insertMultiDragElements(clonesInserted, rootEl) {\n multiDragElements.forEach(function (multiDragElement, i) {\n var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)];\n if (target) {\n rootEl.insertBefore(multiDragElement, target);\n } else {\n rootEl.appendChild(multiDragElement);\n }\n });\n}\n/**\r\n * Insert multi-drag clones\r\n * @param {[Boolean]} elementsInserted Whether the multi-drag elements are inserted\r\n * @param {HTMLElement} rootEl\r\n */\n\nfunction insertMultiDragClones(elementsInserted, rootEl) {\n multiDragClones.forEach(function (clone, i) {\n var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)];\n if (target) {\n rootEl.insertBefore(clone, target);\n } else {\n rootEl.appendChild(clone);\n }\n });\n}\nfunction removeMultiDragElements() {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement);\n });\n}\nSortable.mount(new AutoScrollPlugin());\nSortable.mount(Remove, Revert);\nexport default Sortable;\nexport { MultiDragPlugin as MultiDrag, Sortable, SwapPlugin as Swap };","'use strict';\n\nvar CodeMirror = require('codemirror');\nrequire('codemirror/addon/edit/continuelist.js');\nrequire('./codemirror/tablist');\nrequire('codemirror/addon/display/fullscreen.js');\nrequire('codemirror/mode/markdown/markdown.js');\nrequire('codemirror/addon/mode/overlay.js');\nrequire('codemirror/addon/display/placeholder.js');\nrequire('codemirror/addon/selection/mark-selection.js');\nrequire('codemirror/addon/search/searchcursor.js');\nrequire('codemirror/mode/gfm/gfm.js');\nrequire('codemirror/mode/xml/xml.js');\nvar CodeMirrorSpellChecker = require('codemirror-spell-checker');\nvar marked = require('marked/lib/marked');\n\n// Some variables\nvar isMac = /Mac/.test(navigator.platform);\nvar anchorToExternalRegex = new RegExp(/()+?/g);\n\n// Mapping of actions that can be bound to keyboard shortcuts or toolbar buttons\nvar bindings = {\n 'toggleBold': toggleBold,\n 'toggleItalic': toggleItalic,\n 'drawLink': drawLink,\n 'toggleHeadingSmaller': toggleHeadingSmaller,\n 'toggleHeadingBigger': toggleHeadingBigger,\n 'drawImage': drawImage,\n 'toggleBlockquote': toggleBlockquote,\n 'toggleOrderedList': toggleOrderedList,\n 'toggleUnorderedList': toggleUnorderedList,\n 'toggleCodeBlock': toggleCodeBlock,\n 'togglePreview': togglePreview,\n 'toggleStrikethrough': toggleStrikethrough,\n 'toggleHeading1': toggleHeading1,\n 'toggleHeading2': toggleHeading2,\n 'toggleHeading3': toggleHeading3,\n '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};\nvar getBindingName = function (f) {\n for (var key in bindings) {\n if (bindings[key] === f) {\n return key;\n }\n }\n return null;\n};\nvar isMobile = function () {\n var check = false;\n (function (a) {\n if (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(a.substr(0, 4))) check = true;\n })(navigator.userAgent || navigator.vendor || window.opera);\n return check;\n};\n\n/**\n * Modify HTML to add 'target=\"_blank\"' to links so they open in new tabs by default.\n * @param {string} htmlText - HTML to be modified.\n * @return {string} The modified HTML text.\n */\nfunction addAnchorTargetBlank(htmlText) {\n var match;\n while ((match = anchorToExternalRegex.exec(htmlText)) !== null) {\n // With only one capture group in the RegExp, we can safely take the first index from the match.\n var linkString = match[0];\n if (linkString.indexOf('target=') === -1) {\n var fixedLinkString = linkString.replace(/>$/, ' target=\"_blank\">');\n htmlText = htmlText.replace(linkString, fixedLinkString);\n }\n }\n return htmlText;\n}\n\n/**\n * Modify HTML to remove the list-style when rendering checkboxes.\n * @param {string} htmlText - HTML to be modified.\n * @return {string} The modified HTML text.\n */\nfunction removeListStyleWhenCheckbox(htmlText) {\n var parser = new DOMParser();\n var htmlDoc = parser.parseFromString(htmlText, 'text/html');\n var listItems = htmlDoc.getElementsByTagName('li');\n for (var i = 0; i < listItems.length; i++) {\n var listItem = listItems[i];\n for (var j = 0; j < listItem.children.length; j++) {\n var listItemChild = listItem.children[j];\n if (listItemChild instanceof HTMLInputElement && listItemChild.type === 'checkbox') {\n // From Github: margin: 0 .2em .25em -1.6em;\n listItem.style.marginLeft = '-1.5em';\n listItem.style.listStyleType = 'none';\n }\n }\n }\n return htmlDoc.documentElement.innerHTML;\n}\n\n/**\n * Fix shortcut. Mac use Command, others use Ctrl.\n */\nfunction fixShortcut(name) {\n if (isMac) {\n name = name.replace('Ctrl', 'Cmd');\n } else {\n name = name.replace('Cmd', 'Ctrl');\n }\n return name;\n}\n\n/**\n * Create dropdown block\n */\nfunction createToolbarDropdown(options, enableTooltips, shortcuts, parent) {\n var el = createToolbarButton(options, false, enableTooltips, shortcuts, 'button', parent);\n el.className += ' easymde-dropdown';\n var content = document.createElement('div');\n content.className = 'easymde-dropdown-content';\n for (var childrenIndex = 0; childrenIndex < options.children.length; childrenIndex++) {\n var child = options.children[childrenIndex];\n var childElement;\n if (typeof child === 'string' && child in toolbarBuiltInButtons) {\n childElement = createToolbarButton(toolbarBuiltInButtons[child], true, enableTooltips, shortcuts, 'button', parent);\n } else {\n childElement = createToolbarButton(child, true, enableTooltips, shortcuts, 'button', parent);\n }\n content.appendChild(childElement);\n }\n el.appendChild(content);\n return el;\n}\n\n/**\n * Create button element for toolbar.\n */\nfunction createToolbarButton(options, enableActions, enableTooltips, shortcuts, markup, parent) {\n options = options || {};\n var el = document.createElement(markup);\n el.className = options.name;\n el.setAttribute('type', markup);\n enableTooltips = enableTooltips == undefined ? true : enableTooltips;\n\n // Properly hande custom shortcuts\n if (options.name && options.name in shortcuts) {\n bindings[options.name] = options.action;\n }\n if (options.title && enableTooltips) {\n el.title = createTooltip(options.title, options.action, shortcuts);\n if (isMac) {\n el.title = el.title.replace('Ctrl', '⌘');\n el.title = el.title.replace('Alt', '⌥');\n }\n }\n if (options.noDisable) {\n el.classList.add('no-disable');\n }\n if (options.noMobile) {\n el.classList.add('no-mobile');\n }\n\n // Prevent errors if there is no class name in custom options\n var classNameParts = [];\n if (typeof options.className !== 'undefined') {\n classNameParts = options.className.split(' ');\n }\n\n // Provide backwards compatibility with simple-markdown-editor by adding custom classes to the button.\n var iconClasses = [];\n for (var classNameIndex = 0; classNameIndex < classNameParts.length; classNameIndex++) {\n var classNamePart = classNameParts[classNameIndex];\n // Split icon classes from the button.\n // Regex will detect \"fa\", \"fas\", \"fa-something\" and \"fa-some-icon-1\", but not \"fanfare\".\n if (classNamePart.match(/^fa([srlb]|(-[\\w-]*)|$)/)) {\n iconClasses.push(classNamePart);\n } else {\n el.classList.add(classNamePart);\n }\n }\n el.tabIndex = -1;\n\n // Create icon element and append as a child to the button\n var icon = document.createElement('i');\n for (var iconClassIndex = 0; iconClassIndex < iconClasses.length; iconClassIndex++) {\n var iconClass = iconClasses[iconClassIndex];\n icon.classList.add(iconClass);\n }\n el.appendChild(icon);\n\n // If there is a custom icon markup set, use that\n if (typeof options.icon !== 'undefined') {\n el.innerHTML = options.icon;\n }\n if (options.action && enableActions) {\n if (typeof options.action === 'function') {\n el.onclick = function (e) {\n e.preventDefault();\n options.action(parent);\n };\n } else if (typeof options.action === 'string') {\n el.onclick = function (e) {\n e.preventDefault();\n window.open(options.action, '_blank');\n };\n }\n }\n return el;\n}\nfunction createSep() {\n var el = document.createElement('i');\n el.className = 'separator';\n el.innerHTML = '|';\n return el;\n}\nfunction createTooltip(title, action, shortcuts) {\n var actionName;\n var tooltip = title;\n if (action) {\n actionName = getBindingName(action);\n if (shortcuts[actionName]) {\n tooltip += ' (' + fixShortcut(shortcuts[actionName]) + ')';\n }\n }\n return tooltip;\n}\n\n/**\n * The state of CodeMirror at the given position.\n */\nfunction getState(cm, pos) {\n pos = pos || cm.getCursor('start');\n var stat = cm.getTokenAt(pos);\n if (!stat.type) return {};\n var types = stat.type.split(' ');\n var ret = {},\n data,\n text;\n for (var i = 0; i < types.length; i++) {\n data = types[i];\n if (data === 'strong') {\n ret.bold = true;\n } else if (data === 'variable-2') {\n text = cm.getLine(pos.line);\n if (/^\\s*\\d+\\.\\s/.test(text)) {\n ret['ordered-list'] = true;\n } else {\n ret['unordered-list'] = true;\n }\n } else if (data === 'atom') {\n ret.quote = true;\n } else if (data === 'em') {\n ret.italic = true;\n } else if (data === 'quote') {\n ret.quote = true;\n } else if (data === 'strikethrough') {\n ret.strikethrough = true;\n } else if (data === 'comment') {\n ret.code = true;\n } else if (data === 'link') {\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 return ret;\n}\n\n// Saved overflow setting\nvar saved_overflow = '';\n\n/**\n * Toggle full screen of the editor.\n */\nfunction toggleFullScreen(editor) {\n // Set fullscreen\n var cm = editor.codemirror;\n cm.setOption('fullScreen', !cm.getOption('fullScreen'));\n\n // Prevent scrolling on body during fullscreen active\n if (cm.getOption('fullScreen')) {\n saved_overflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = saved_overflow;\n }\n\n // Hide side by side if needed\n var sidebyside = cm.getWrapperElement().nextSibling;\n if (/editor-preview-active-side/.test(sidebyside.className)) toggleSideBySide(editor);\n if (editor.options.onToggleFullScreen) {\n editor.options.onToggleFullScreen(cm.getOption('fullScreen') || false);\n }\n\n // Remove or set maxHeight\n if (typeof editor.options.maxHeight !== 'undefined') {\n if (cm.getOption('fullScreen')) {\n cm.getScrollerElement().style.removeProperty('height');\n sidebyside.style.removeProperty('height');\n } else {\n cm.getScrollerElement().style.height = editor.options.maxHeight;\n editor.setPreviewMaxHeight();\n }\n }\n\n // Update toolbar class\n 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 }\n\n // Update toolbar button\n if (editor.toolbarElements && editor.toolbarElements.fullscreen) {\n var toolbarButton = editor.toolbarElements.fullscreen;\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/**\n * Action for toggling bold.\n */\nfunction toggleBold(editor) {\n _toggleBlock(editor, 'bold', editor.options.blockStyles.bold);\n}\n\n/**\n * Action for toggling italic.\n */\nfunction toggleItalic(editor) {\n _toggleBlock(editor, 'italic', editor.options.blockStyles.italic);\n}\n\n/**\n * Action for toggling strikethrough.\n */\nfunction toggleStrikethrough(editor) {\n _toggleBlock(editor, 'strikethrough', '~~');\n}\n\n/**\n * Action for toggling code block.\n */\nfunction toggleCodeBlock(editor) {\n var fenceCharsToInsert = editor.options.blockStyles.code;\n function fencing_line(line) {\n /* return true, if this is a ``` or ~~~ line */\n if (typeof line !== 'object') {\n throw 'fencing_line() takes a \\'line\\' object (not a line number, or line text). Got: ' + typeof line + ': ' + line;\n }\n return line.styles && line.styles[2] && line.styles[2].indexOf('formatting-code-block') !== -1;\n }\n function token_state(token) {\n // base goes an extra level deep when mode backdrops are used, e.g. spellchecker on\n return token.state.base.base || token.state.base;\n }\n function code_type(cm, line_num, line, firstTok, lastTok) {\n /*\n * Return \"single\", \"indented\", \"fenced\" or false\n *\n * cm and line_num are required. Others are optional for efficiency\n * To check in the middle of a line, pass in firstTok yourself.\n */\n line = line || cm.getLineHandle(line_num);\n firstTok = firstTok || cm.getTokenAt({\n line: line_num,\n ch: 1\n });\n lastTok = lastTok || !!line.text && cm.getTokenAt({\n line: line_num,\n ch: line.text.length - 1\n });\n var types = firstTok.type ? firstTok.type.split(' ') : [];\n if (lastTok && token_state(lastTok).indentedCode) {\n // have to check last char, since first chars of first line aren\"t marked as indented\n return 'indented';\n } else if (types.indexOf('comment') === -1) {\n // has to be after \"indented\" check, since first chars of first indented line aren\"t marked as such\n return false;\n } else if (token_state(firstTok).fencedChars || token_state(lastTok).fencedChars || fencing_line(line)) {\n return 'fenced';\n } else {\n return 'single';\n }\n }\n function insertFencingAtSelection(cm, cur_start, cur_end, fenceCharsToInsert) {\n var start_line_sel = cur_start.line + 1,\n end_line_sel = cur_end.line + 1,\n sel_multi = cur_start.line !== cur_end.line,\n repl_start = fenceCharsToInsert + '\\n',\n repl_end = '\\n' + fenceCharsToInsert;\n if (sel_multi) {\n end_line_sel++;\n }\n // handle last char including \\n or not\n if (sel_multi && cur_end.ch === 0) {\n repl_end = fenceCharsToInsert + '\\n';\n end_line_sel--;\n }\n _replaceSelection(cm, false, [repl_start, repl_end]);\n cm.setSelection({\n line: start_line_sel,\n ch: 0\n }, {\n line: end_line_sel,\n ch: 0\n });\n }\n var cm = editor.codemirror,\n cur_start = cm.getCursor('start'),\n cur_end = cm.getCursor('end'),\n tok = cm.getTokenAt({\n line: cur_start.line,\n ch: cur_start.ch || 1\n }),\n // avoid ch 0 which is a cursor pos but not token\n line = cm.getLineHandle(cur_start.line),\n is_code = code_type(cm, cur_start.line, line, tok);\n var block_start, block_end, lineCount;\n if (is_code === 'single') {\n // similar to some EasyMDE _toggleBlock logic\n var start = line.text.slice(0, cur_start.ch).replace('`', ''),\n end = line.text.slice(cur_start.ch).replace('`', '');\n cm.replaceRange(start + end, {\n line: cur_start.line,\n ch: 0\n }, {\n line: cur_start.line,\n ch: 99999999999999\n });\n cur_start.ch--;\n if (cur_start !== cur_end) {\n cur_end.ch--;\n }\n cm.setSelection(cur_start, cur_end);\n cm.focus();\n } else if (is_code === 'fenced') {\n if (cur_start.line !== cur_end.line || cur_start.ch !== cur_end.ch) {\n // use selection\n\n // find the fenced line so we know what type it is (tilde, backticks, number of them)\n for (block_start = cur_start.line; block_start >= 0; block_start--) {\n line = cm.getLineHandle(block_start);\n if (fencing_line(line)) {\n break;\n }\n }\n var fencedTok = cm.getTokenAt({\n line: block_start,\n ch: 1\n });\n var fence_chars = token_state(fencedTok).fencedChars;\n var start_text, start_line;\n var end_text, end_line;\n // check for selection going up against fenced lines, in which case we don't want to add more fencing\n if (fencing_line(cm.getLineHandle(cur_start.line))) {\n start_text = '';\n start_line = cur_start.line;\n } else if (fencing_line(cm.getLineHandle(cur_start.line - 1))) {\n start_text = '';\n start_line = cur_start.line - 1;\n } else {\n start_text = fence_chars + '\\n';\n start_line = cur_start.line;\n }\n if (fencing_line(cm.getLineHandle(cur_end.line))) {\n end_text = '';\n end_line = cur_end.line;\n if (cur_end.ch === 0) {\n end_line += 1;\n }\n } else if (cur_end.ch !== 0 && fencing_line(cm.getLineHandle(cur_end.line + 1))) {\n end_text = '';\n end_line = cur_end.line + 1;\n } else {\n end_text = fence_chars + '\\n';\n end_line = cur_end.line + 1;\n }\n if (cur_end.ch === 0) {\n // full last line selected, putting cursor at beginning of next\n end_line -= 1;\n }\n cm.operation(function () {\n // end line first, so that line numbers don't change\n cm.replaceRange(end_text, {\n line: end_line,\n ch: 0\n }, {\n line: end_line + (end_text ? 0 : 1),\n ch: 0\n });\n cm.replaceRange(start_text, {\n line: start_line,\n ch: 0\n }, {\n line: start_line + (start_text ? 0 : 1),\n ch: 0\n });\n });\n cm.setSelection({\n line: start_line + (start_text ? 1 : 0),\n ch: 0\n }, {\n line: end_line + (start_text ? 1 : -1),\n ch: 0\n });\n cm.focus();\n } else {\n // no selection, search for ends of this fenced block\n var search_from = cur_start.line;\n if (fencing_line(cm.getLineHandle(cur_start.line))) {\n // gets a little tricky if cursor is right on a fenced line\n if (code_type(cm, cur_start.line + 1) === 'fenced') {\n block_start = cur_start.line;\n search_from = cur_start.line + 1; // for searching for \"end\"\n } else {\n block_end = cur_start.line;\n search_from = cur_start.line - 1; // for searching for \"start\"\n }\n }\n\n if (block_start === undefined) {\n for (block_start = search_from; block_start >= 0; block_start--) {\n line = cm.getLineHandle(block_start);\n if (fencing_line(line)) {\n break;\n }\n }\n }\n if (block_end === undefined) {\n lineCount = cm.lineCount();\n for (block_end = search_from; block_end < lineCount; block_end++) {\n line = cm.getLineHandle(block_end);\n if (fencing_line(line)) {\n break;\n }\n }\n }\n cm.operation(function () {\n cm.replaceRange('', {\n line: block_start,\n ch: 0\n }, {\n line: block_start + 1,\n ch: 0\n });\n cm.replaceRange('', {\n line: block_end - 1,\n ch: 0\n }, {\n line: block_end,\n ch: 0\n });\n });\n cm.focus();\n }\n } else if (is_code === 'indented') {\n if (cur_start.line !== cur_end.line || cur_start.ch !== cur_end.ch) {\n // use selection\n block_start = cur_start.line;\n block_end = cur_end.line;\n if (cur_end.ch === 0) {\n block_end--;\n }\n } else {\n // no selection, search for ends of this indented block\n for (block_start = cur_start.line; block_start >= 0; block_start--) {\n line = cm.getLineHandle(block_start);\n if (line.text.match(/^\\s*$/)) {\n // empty or all whitespace - keep going\n continue;\n } else {\n if (code_type(cm, block_start, line) !== 'indented') {\n block_start += 1;\n break;\n }\n }\n }\n lineCount = cm.lineCount();\n for (block_end = cur_start.line; block_end < lineCount; block_end++) {\n line = cm.getLineHandle(block_end);\n if (line.text.match(/^\\s*$/)) {\n // empty or all whitespace - keep going\n continue;\n } else {\n if (code_type(cm, block_end, line) !== 'indented') {\n block_end -= 1;\n break;\n }\n }\n }\n }\n // if we are going to un-indent based on a selected set of lines, and the next line is indented too, we need to\n // insert a blank line so that the next line(s) continue to be indented code\n var next_line = cm.getLineHandle(block_end + 1),\n next_line_last_tok = next_line && cm.getTokenAt({\n line: block_end + 1,\n ch: next_line.text.length - 1\n }),\n next_line_indented = next_line_last_tok && token_state(next_line_last_tok).indentedCode;\n if (next_line_indented) {\n cm.replaceRange('\\n', {\n line: block_end + 1,\n ch: 0\n });\n }\n for (var i = block_start; i <= block_end; i++) {\n cm.indentLine(i, 'subtract'); // TODO: this doesn't get tracked in the history, so can't be undone :(\n }\n\n cm.focus();\n } else {\n // insert code formatting\n var no_sel_and_starting_of_line = cur_start.line === cur_end.line && cur_start.ch === cur_end.ch && cur_start.ch === 0;\n var sel_multi = cur_start.line !== cur_end.line;\n if (no_sel_and_starting_of_line || sel_multi) {\n insertFencingAtSelection(cm, cur_start, cur_end, fenceCharsToInsert);\n } else {\n _replaceSelection(cm, false, ['`', '`']);\n }\n }\n}\n\n/**\n * Action for toggling blockquote.\n */\nfunction toggleBlockquote(editor) {\n var cm = editor.codemirror;\n _toggleLine(cm, 'quote');\n}\n\n/**\n * Action for toggling heading size: normal -> h1 -> h2 -> h3 -> h4 -> h5 -> h6 -> normal\n */\nfunction toggleHeadingSmaller(editor) {\n var cm = editor.codemirror;\n _toggleHeading(cm, 'smaller');\n}\n\n/**\n * Action for toggling heading size: normal -> h6 -> h5 -> h4 -> h3 -> h2 -> h1 -> normal\n */\nfunction toggleHeadingBigger(editor) {\n var cm = editor.codemirror;\n _toggleHeading(cm, 'bigger');\n}\n\n/**\n * Action for toggling heading size 1\n */\nfunction toggleHeading1(editor) {\n var cm = editor.codemirror;\n _toggleHeading(cm, undefined, 1);\n}\n\n/**\n * Action for toggling heading size 2\n */\nfunction toggleHeading2(editor) {\n var cm = editor.codemirror;\n _toggleHeading(cm, undefined, 2);\n}\n\n/**\n * Action for toggling heading size 3\n */\nfunction toggleHeading3(editor) {\n var cm = editor.codemirror;\n _toggleHeading(cm, undefined, 3);\n}\n\n/**\n * Action for toggling ul.\n */\nfunction toggleUnorderedList(editor) {\n var cm = editor.codemirror;\n _toggleLine(cm, 'unordered-list');\n}\n\n/**\n * Action for toggling ol.\n */\nfunction toggleOrderedList(editor) {\n var cm = editor.codemirror;\n _toggleLine(cm, 'ordered-list');\n}\n\n/**\n * Action for clean block (remove headline, list, blockquote code, markers)\n */\nfunction cleanBlock(editor) {\n var cm = editor.codemirror;\n _cleanBlock(cm);\n}\n\n/**\n * Action for drawing a link.\n */\nfunction drawLink(editor) {\n var cm = editor.codemirror;\n var stat = getState(cm);\n var options = editor.options;\n var url = 'https://';\n if (options.promptURLs) {\n url = prompt(options.promptTexts.link, 'https://');\n if (!url) {\n return false;\n }\n }\n _replaceSelection(cm, stat.link, options.insertTexts.link, url);\n}\n\n/**\n * Action for drawing an img.\n */\nfunction drawImage(editor) {\n var cm = editor.codemirror;\n var stat = getState(cm);\n var options = editor.options;\n var url = 'https://';\n if (options.promptURLs) {\n url = prompt(options.promptTexts.image, 'https://');\n if (!url) {\n return false;\n }\n }\n _replaceSelection(cm, stat.image, options.insertTexts.image, url);\n}\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 */\nfunction drawUploadedImage(editor) {\n // TODO: Draw the image template with a fake url? ie: '![](importing foo.png...)'\n editor.openBrowseFileWindow();\n}\n\n/**\n * Action executed after an image have been successfully imported on the server.\n * @param editor {EasyMDE} The EasyMDE object\n * @param url {string} The url of the uploaded image\n */\nfunction afterImageUploaded(editor, url) {\n var cm = editor.codemirror;\n var stat = getState(cm);\n var options = editor.options;\n var imageName = url.substr(url.lastIndexOf('/') + 1);\n _replaceSelection(cm, stat.image, options.insertTexts.uploadedImage, url);\n // show uploaded image filename for 1000ms\n editor.updateStatusBar('upload-image', editor.options.imageTexts.sbOnUploaded.replace('#image_name#', imageName));\n setTimeout(function () {\n editor.updateStatusBar('upload-image', editor.options.imageTexts.sbInit);\n }, 1000);\n}\n\n/**\n * Action for drawing a table.\n */\nfunction drawTable(editor) {\n var cm = editor.codemirror;\n var stat = getState(cm);\n var options = editor.options;\n _replaceSelection(cm, stat.table, options.insertTexts.table);\n}\n\n/**\n * Action for drawing a horizontal rule.\n */\nfunction drawHorizontalRule(editor) {\n var cm = editor.codemirror;\n var stat = getState(cm);\n var options = editor.options;\n _replaceSelection(cm, stat.image, options.insertTexts.horizontalRule);\n}\n\n/**\n * Undo action.\n */\nfunction undo(editor) {\n var cm = editor.codemirror;\n cm.undo();\n cm.focus();\n}\n\n/**\n * Redo action.\n */\nfunction redo(editor) {\n var cm = editor.codemirror;\n cm.redo();\n cm.focus();\n}\n\n/**\n * Toggle side by side preview\n */\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,\n // easyMDEContainer\n editor.gui.toolbar, wrapper, preview, editor.gui.statusbar];\n function addNoFullscreenClass(el) {\n el.className += ' sided--no-fullscreen';\n }\n function removeNoFullscreenClass(el) {\n el.className = el.className.replace(/\\s*sided--no-fullscreen\\s*/g, '');\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 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 preview.className += ' editor-preview-active-side';\n }, 1);\n if (toolbarButton) toolbarButton.className += ' active';\n wrapper.className += ' CodeMirror-sided';\n useSideBySideListener = true;\n }\n\n // Hide normal preview if active\n var previewNormal = wrapper.lastChild;\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 var sideBySideRenderingFunction = function () {\n var newValue = editor.options.previewRender(editor.value(), preview);\n if (newValue != null) {\n preview.innerHTML = newValue;\n }\n };\n if (!cm.sideBySideRenderingFunction) {\n cm.sideBySideRenderingFunction = sideBySideRenderingFunction;\n }\n if (useSideBySideListener) {\n var newValue = editor.options.previewRender(editor.value(), preview);\n if (newValue != null) {\n preview.innerHTML = newValue;\n }\n cm.on('update', cm.sideBySideRenderingFunction);\n } else {\n cm.off('update', cm.sideBySideRenderingFunction);\n }\n\n // Refresh to fix selection being off (#309)\n cm.refresh();\n}\n\n/**\n * Preview action.\n */\nfunction togglePreview(editor) {\n var cm = editor.codemirror;\n var wrapper = cm.getWrapperElement();\n var toolbar_div = editor.toolbar_div;\n var toolbar = editor.options.toolbar ? editor.toolbarElements.preview : false;\n var preview = wrapper.lastChild;\n\n // Turn off side by side if needed\n var sidebyside = cm.getWrapperElement().nextSibling;\n if (/editor-preview-active-side/.test(sidebyside.className)) toggleSideBySide(editor);\n if (!preview || !/editor-preview-full/.test(preview.className)) {\n preview = document.createElement('div');\n preview.className = 'editor-preview-full';\n if (editor.options.previewClass) {\n if (Array.isArray(editor.options.previewClass)) {\n for (var i = 0; i < editor.options.previewClass.length; i++) {\n preview.className += ' ' + editor.options.previewClass[i];\n }\n } else if (typeof editor.options.previewClass === 'string') {\n preview.className += ' ' + editor.options.previewClass;\n }\n }\n wrapper.appendChild(preview);\n }\n if (/editor-preview-active/.test(preview.className)) {\n preview.className = preview.className.replace(/\\s*editor-preview-active\\s*/g, '');\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 if (toolbar) {\n toolbar.className += ' active';\n toolbar_div.className += ' disabled-for-preview';\n }\n }\n preview.innerHTML = editor.options.previewRender(editor.value(), preview);\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 if (url) {\n start = start.replace('#url#', url); // url is in start for upload-image\n end = end.replace('#url#', url);\n }\n if (active) {\n text = cm.getLine(startPoint.line);\n start = text.slice(0, startPoint.ch);\n end = text.slice(startPoint.ch);\n cm.replaceRange(start + end, {\n line: startPoint.line,\n ch: 0\n });\n } else {\n text = cm.getSelection();\n cm.replaceSelection(start + text + end);\n startPoint.ch += start.length;\n if (startPoint !== endPoint) {\n endPoint.ch += start.length;\n }\n }\n cm.setSelection(startPoint, endPoint);\n cm.focus();\n}\nfunction _toggleHeading(cm, direction, size) {\n if (/editor-preview-active/.test(cm.getWrapperElement().lastChild.className)) return;\n var startPoint = cm.getCursor('start');\n var endPoint = cm.getCursor('end');\n for (var i = startPoint.line; i <= endPoint.line; i++) {\n (function (i) {\n var text = cm.getLine(i);\n var currHeadingLevel = text.search(/[^#]/);\n if (direction !== undefined) {\n if (currHeadingLevel <= 0) {\n if (direction == 'bigger') {\n text = '###### ' + text;\n } else {\n text = '# ' + text;\n }\n } else if (currHeadingLevel == 6 && direction == 'smaller') {\n text = text.substr(7);\n } else if (currHeadingLevel == 1 && direction == 'bigger') {\n text = text.substr(2);\n } else {\n if (direction == 'bigger') {\n text = text.substr(1);\n } else {\n text = '#' + text;\n }\n }\n } else {\n if (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 cm.replaceRange(text, {\n line: i,\n ch: 0\n }, {\n line: i,\n ch: 99999999999999\n });\n })(i);\n }\n cm.focus();\n}\nfunction _toggleLine(cm, name) {\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 var _getChar = function (name, i) {\n var map = {\n 'quote': '>',\n 'unordered-list': '*',\n 'ordered-list': '%%i.'\n };\n return map[name].replace('%%i', i);\n };\n var _checkChar = function (name, char) {\n var map = {\n 'quote': '>',\n 'unordered-list': '*',\n 'ordered-list': '\\\\d+.'\n };\n var rt = new RegExp(map[name]);\n return char && rt.test(char);\n };\n var _toggle = function (name, text, untoggleOnly) {\n var arr = listRegexp.exec(text);\n var char = _getChar(name, line);\n if (arr !== null) {\n if (_checkChar(name, arr[2])) {\n char = '';\n }\n text = arr[1] + char + arr[3] + text.replace(whitespacesRegexp, '').replace(repl[name], '$1');\n } else if (untoggleOnly == false) {\n text = char + ' ' + text;\n }\n return text;\n };\n var line = 1;\n for (var i = startPoint.line; i <= endPoint.line; i++) {\n (function (i) {\n var text = cm.getLine(i);\n if (stat[name]) {\n text = text.replace(repl[name], '$1');\n } else {\n // If we're toggling unordered-list formatting, check if the current line\n // is part of an ordered-list, and if so, untoggle that first.\n // Workaround for https://github.com/Ionaru/easy-markdown-editor/issues/92\n if (name == 'unordered-list') {\n text = _toggle('ordered-list', text, true);\n }\n text = _toggle(name, text, false);\n line += 1;\n }\n cm.replaceRange(text, {\n line: i,\n ch: 0\n }, {\n line: i,\n ch: 99999999999999\n });\n })(i);\n }\n cm.focus();\n}\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 if (stat[type]) {\n text = cm.getLine(startPoint.line);\n start = text.slice(0, startPoint.ch);\n end = text.slice(startPoint.ch);\n if (type == 'bold') {\n start = start.replace(/(\\*\\*|__)(?![\\s\\S]*(\\*\\*|__))/, '');\n end = end.replace(/(\\*\\*|__)/, '');\n } else if (type == 'italic') {\n start = start.replace(/(\\*|_)(?![\\s\\S]*(\\*|_))/, '');\n end = end.replace(/(\\*|_)/, '');\n } else if (type == 'strikethrough') {\n start = start.replace(/(\\*\\*|~~)(?![\\s\\S]*(\\*\\*|~~))/, '');\n end = end.replace(/(\\*\\*|~~)/, '');\n }\n cm.replaceRange(start + end, {\n line: startPoint.line,\n ch: 0\n }, {\n line: startPoint.line,\n ch: 99999999999999\n });\n if (type == 'bold' || type == 'strikethrough') {\n startPoint.ch -= 2;\n if (startPoint !== endPoint) {\n endPoint.ch -= 2;\n }\n } else if (type == 'italic') {\n startPoint.ch -= 1;\n if (startPoint !== endPoint) {\n endPoint.ch -= 1;\n }\n }\n } else {\n text = cm.getSelection();\n if (type == 'bold') {\n text = text.split('**').join('');\n text = text.split('__').join('');\n } else if (type == 'italic') {\n text = text.split('*').join('');\n text = text.split('_').join('');\n } else if (type == 'strikethrough') {\n text = text.split('~~').join('');\n }\n cm.replaceSelection(start + text + end);\n startPoint.ch += start_chars.length;\n endPoint.ch = startPoint.ch + text.length;\n }\n cm.setSelection(startPoint, endPoint);\n cm.focus();\n}\nfunction _cleanBlock(cm) {\n if (/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 for (var line = startPoint.line; line <= endPoint.line; line++) {\n text = cm.getLine(line);\n text = text.replace(/^[ ]*([# ]+|\\*|-|[> ]+|[0-9]+(.|\\)))[ ]*/, '');\n cm.replaceRange(text, {\n line: line,\n ch: 0\n }, {\n line: line,\n ch: 99999999999999\n });\n }\n}\n\n/**\n * Convert a number of bytes to a human-readable file size.\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 */\nfunction humanFileSize(bytes, units) {\n if (Math.abs(bytes) < 1024) {\n return '' + bytes + units[0];\n }\n var u = 0;\n do {\n bytes /= 1024;\n ++u;\n } while (Math.abs(bytes) >= 1024 && u < units.length);\n return '' + bytes.toFixed(1) + units[u];\n}\n\n// Merge the properties of one object into another.\nfunction _mergeProperties(target, source) {\n for (var property in source) {\n if (Object.prototype.hasOwnProperty.call(source, property)) {\n if (source[property] instanceof Array) {\n target[property] = source[property].concat(target[property] instanceof Array ? target[property] : []);\n } else if (source[property] !== null && typeof source[property] === 'object' && source[property].constructor === Object) {\n target[property] = _mergeProperties(target[property] || {}, source[property]);\n } else {\n target[property] = source[property];\n }\n }\n }\n return target;\n}\n\n// Merge an arbitrary number of objects into one.\nfunction extend(target) {\n for (var i = 1; i < arguments.length; i++) {\n target = _mergeProperties(target, arguments[i]);\n }\n return target;\n}\n\n/* The right word count in respect for CJK. */\nfunction wordCount(data) {\n var pattern = /[a-zA-Z0-9_\\u00A0-\\u02AF\\u0392-\\u03c9\\u0410-\\u04F9]+|[\\u4E00-\\u9FFF\\u3400-\\u4dbf\\uf900-\\ufaff\\u3040-\\u309f\\uac00-\\ud7af]+/g;\n var m = data.match(pattern);\n var count = 0;\n if (m === null) return count;\n for (var i = 0; i < m.length; i++) {\n if (m[i].charCodeAt(0) >= 0x4E00) {\n count += m[i].length;\n } else {\n count += 1;\n }\n }\n return count;\n}\nvar 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/**\n * Texts displayed to the user (mainly on the status bar) for the import image\n * feature. Can be used for customization or internationalization.\n */\nvar imageTexts = {\n sbInit: 'Attach files by drag and dropping or pasting from clipboard.',\n sbOnDragEnter: 'Drop image to upload it.',\n sbOnDrop: 'Uploading image #images_names#...',\n sbProgress: 'Uploading #file_name#: #progress#%',\n sbOnUploaded: 'Uploaded #image_name#',\n sizeUnits: 'b,Kb,Mb'\n};\n\n/**\n * Errors displayed to the user, using the `errorCallback` option. Can be used for\n * customization or internationalization.\n */\nvar errorMessages = {\n noFileGiven: 'You must select a file.',\n typeNotAllowed: 'This image type is not allowed.',\n fileTooLarge: 'Image #image_name# is too big (#image_size#).\\n' + 'Maximum file size is #image_max_size#.',\n importError: 'Something went wrong when uploading the image #image_name#.'\n};\n\n/**\n * Interface of EasyMDE.\n */\nfunction EasyMDE(options) {\n // Handle options parameter\n options = options || {};\n\n // Used later to refer to it\"s parent\n options.parent = this;\n\n // Check if Font Awesome needs to be auto downloaded\n var autoDownloadFA = true;\n if (options.autoDownloadFontAwesome === false) {\n autoDownloadFA = false;\n }\n if (options.autoDownloadFontAwesome !== true) {\n var styleSheets = document.styleSheets;\n for (var i = 0; i < styleSheets.length; i++) {\n if (!styleSheets[i].href) continue;\n if (styleSheets[i].href.indexOf('//maxcdn.bootstrapcdn.com/font-awesome/') > -1) {\n autoDownloadFA = false;\n }\n }\n }\n if (autoDownloadFA) {\n var link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = 'https://maxcdn.bootstrapcdn.com/font-awesome/latest/css/font-awesome.min.css';\n document.getElementsByTagName('head')[0].appendChild(link);\n }\n\n // Find the textarea to use\n if (options.element) {\n this.element = options.element;\n } else if (options.element === null) {\n // This means that the element option was specified, but no element was found\n console.log('EasyMDE: Error. No element was found.');\n return;\n }\n\n // Handle toolbar\n if (options.toolbar === undefined) {\n // Initialize\n options.toolbar = [];\n\n // Loop over the built in buttons, to get the preferred order\n for (var key in toolbarBuiltInButtons) {\n if (Object.prototype.hasOwnProperty.call(toolbarBuiltInButtons, key)) {\n if (key.indexOf('separator-') != -1) {\n options.toolbar.push('|');\n }\n if (toolbarBuiltInButtons[key].default === true || options.showIcons && options.showIcons.constructor === Array && options.showIcons.indexOf(key) != -1) {\n options.toolbar.push(key);\n }\n }\n }\n }\n\n // Editor preview styling class.\n if (!Object.prototype.hasOwnProperty.call(options, 'previewClass')) {\n options.previewClass = 'editor-preview';\n }\n\n // Handle status bar\n if (!Object.prototype.hasOwnProperty.call(options, 'status')) {\n options.status = ['autosave', 'lines', 'words', 'cursor'];\n if (options.uploadImage) {\n options.status.unshift('upload-image');\n }\n }\n\n // Add default preview rendering function\n if (!options.previewRender) {\n options.previewRender = function (plainText) {\n // Note: \"this\" refers to the options object\n return this.parent.markdown(plainText);\n };\n }\n\n // Set default options for parsing config\n options.parsingConfig = extend({\n highlightFormatting: true // needed for toggleCodeBlock to detect types of code\n }, options.parsingConfig || {});\n\n // Merging the insertTexts, with the given options\n options.insertTexts = extend({}, insertTexts, options.insertTexts || {});\n\n // Merging the promptTexts, with the given options\n options.promptTexts = extend({}, promptTexts, options.promptTexts || {});\n\n // Merging the blockStyles, with the given options\n options.blockStyles = extend({}, blockStyles, options.blockStyles || {});\n if (options.autosave != undefined) {\n // Merging the Autosave timeFormat, with the given options\n options.autosave.timeFormat = extend({}, timeFormat, options.autosave.timeFormat || {});\n }\n\n // Merging the shortcuts, with the given options\n options.shortcuts = extend({}, shortcuts, options.shortcuts || {});\n options.minHeight = options.minHeight || '300px';\n options.maxHeight = options.maxHeight || undefined;\n options.errorCallback = options.errorCallback || function (errorMessage) {\n alert(errorMessage);\n };\n\n // Import-image default configuration\n options.uploadImage = options.uploadImage || false;\n options.imageMaxSize = options.imageMaxSize || 2097152; // 1024 * 1024 * 2\n options.imageAccept = options.imageAccept || 'image/png, image/jpeg';\n options.imageTexts = extend({}, imageTexts, options.imageTexts || {});\n options.errorMessages = extend({}, errorMessages, options.errorMessages || {});\n\n // Change unique_id to uniqueId for backwards compatibility\n if (options.autosave != undefined && options.autosave.unique_id != undefined && options.autosave.unique_id != '') options.autosave.uniqueId = options.autosave.unique_id;\n\n // Update this options\n this.options = options;\n\n // Auto render\n this.render();\n\n // The codemirror component is only available after rendering\n // so, the setter for the initialValue can only run after\n // the element has been rendered\n if (options.initialValue && (!this.options.autosave || this.options.autosave.foundSavedValue !== true)) {\n this.value(options.initialValue);\n }\n if (options.uploadImage) {\n var self = this;\n this.codemirror.on('dragenter', function (cm, event) {\n self.updateStatusBar('upload-image', self.options.imageTexts.sbOnDragEnter);\n event.stopPropagation();\n event.preventDefault();\n });\n this.codemirror.on('dragend', function (cm, event) {\n self.updateStatusBar('upload-image', self.options.imageTexts.sbInit);\n event.stopPropagation();\n event.preventDefault();\n });\n this.codemirror.on('dragleave', function (cm, event) {\n self.updateStatusBar('upload-image', self.options.imageTexts.sbInit);\n event.stopPropagation();\n event.preventDefault();\n });\n this.codemirror.on('dragover', function (cm, event) {\n self.updateStatusBar('upload-image', self.options.imageTexts.sbOnDragEnter);\n event.stopPropagation();\n event.preventDefault();\n });\n this.codemirror.on('drop', function (cm, event) {\n event.stopPropagation();\n event.preventDefault();\n if (options.imageUploadFunction) {\n self.uploadImagesUsingCustomFunction(options.imageUploadFunction, event.dataTransfer.files);\n } else {\n self.uploadImages(event.dataTransfer.files);\n }\n });\n this.codemirror.on('paste', function (cm, event) {\n if (options.imageUploadFunction) {\n self.uploadImagesUsingCustomFunction(options.imageUploadFunction, event.clipboardData.files);\n } else {\n self.uploadImages(event.clipboardData.files);\n }\n });\n }\n}\n\n/**\n * Upload asynchronously a list of images to a server.\n *\n * Can be triggered by:\n * - drag&drop;\n * - copy-paste;\n * - the browse-file window (opened when the user clicks on the *upload-image* icon).\n * @param {FileList} files The files to upload the the server.\n * @param [onSuccess] {function} see EasyMDE.prototype.uploadImage\n * @param [onError] {function} see EasyMDE.prototype.uploadImage\n */\nEasyMDE.prototype.uploadImages = function (files, onSuccess, onError) {\n if (files.length === 0) {\n return;\n }\n var names = [];\n for (var i = 0; i < files.length; i++) {\n names.push(files[i].name);\n this.uploadImage(files[i], onSuccess, onError);\n }\n this.updateStatusBar('upload-image', this.options.imageTexts.sbOnDrop.replace('#images_names#', names.join(', ')));\n};\n\n/**\n * Upload asynchronously a list of images to a server.\n *\n * Can be triggered by:\n * - drag&drop;\n * - copy-paste;\n * - the browse-file window (opened when the user clicks on the *upload-image* icon).\n * @param imageUploadFunction {Function} The custom function to upload the image passed in options.\n * @param {FileList} files The files to upload the the server.\n */\nEasyMDE.prototype.uploadImagesUsingCustomFunction = function (imageUploadFunction, files) {\n if (files.length === 0) {\n return;\n }\n var names = [];\n for (var i = 0; i < files.length; i++) {\n names.push(files[i].name);\n this.uploadImageUsingCustomFunction(imageUploadFunction, files[i]);\n }\n this.updateStatusBar('upload-image', this.options.imageTexts.sbOnDrop.replace('#images_names#', names.join(', ')));\n};\n\n/**\n * Update an item in the status bar.\n * @param itemName {string} The name of the item to update (ie. 'upload-image', 'autosave', etc.).\n * @param content {string} the new content of the item to write in the status bar.\n */\nEasyMDE.prototype.updateStatusBar = function (itemName, content) {\n var matchingClasses = this.gui.statusbar.getElementsByClassName(itemName);\n if (matchingClasses.length === 1) {\n this.gui.statusbar.getElementsByClassName(itemName)[0].textContent = content;\n } else if (matchingClasses.length === 0) {\n console.log('EasyMDE: status bar item ' + itemName + ' was not found.');\n } else {\n console.log('EasyMDE: Several status bar items named ' + itemName + ' was found.');\n }\n};\n\n/**\n * Default markdown render.\n */\nEasyMDE.prototype.markdown = function (text) {\n if (marked) {\n // Initialize\n var markedOptions;\n if (this.options && this.options.renderingConfig && this.options.renderingConfig.markedOptions) {\n markedOptions = this.options.renderingConfig.markedOptions;\n } else {\n markedOptions = {};\n }\n\n // Update options\n if (this.options && this.options.renderingConfig && this.options.renderingConfig.singleLineBreaks === false) {\n markedOptions.breaks = false;\n } else {\n markedOptions.breaks = true;\n }\n if (this.options && this.options.renderingConfig && this.options.renderingConfig.codeSyntaxHighlighting === true) {\n /* Get HLJS from config or window */\n var hljs = this.options.renderingConfig.hljs || window.hljs;\n\n /* Check if HLJS loaded */\n if (hljs) {\n markedOptions.highlight = function (code, language) {\n if (language && hljs.getLanguage(language)) {\n return hljs.highlight(language, code).value;\n } else {\n return hljs.highlightAuto(code).value;\n }\n };\n }\n }\n\n // Set options\n marked.setOptions(markedOptions);\n\n // Convert the markdown to HTML\n var htmlText = marked(text);\n\n // Sanitize HTML\n if (this.options.renderingConfig && typeof this.options.renderingConfig.sanitizerFunction === 'function') {\n htmlText = this.options.renderingConfig.sanitizerFunction.call(this, htmlText);\n }\n\n // Edit the HTML anchors to add 'target=\"_blank\"' by default.\n htmlText = addAnchorTargetBlank(htmlText);\n\n // Remove list-style when rendering checkboxes\n htmlText = removeListStyleWhenCheckbox(htmlText);\n return htmlText;\n }\n};\n\n/**\n * Render editor to the given element.\n */\nEasyMDE.prototype.render = function (el) {\n if (!el) {\n el = this.element || document.getElementsByTagName('textarea')[0];\n }\n if (this._rendered && this._rendered === el) {\n // Already rendered.\n return;\n }\n this.element = el;\n var options = this.options;\n var self = this;\n var keyMaps = {};\n for (var key in options.shortcuts) {\n // null stands for \"do not bind this command\"\n if (options.shortcuts[key] !== null && bindings[key] !== null) {\n (function (key) {\n keyMaps[fixShortcut(options.shortcuts[key])] = function () {\n var action = bindings[key];\n if (typeof action === 'function') {\n action(self);\n } else if (typeof action === 'string') {\n window.open(action, '_blank');\n }\n };\n })(key);\n }\n }\n keyMaps['Enter'] = 'newlineAndIndentContinueMarkdownList';\n keyMaps['Tab'] = 'tabAndIndentMarkdownList';\n keyMaps['Shift-Tab'] = 'shiftTabAndUnindentMarkdownList';\n keyMaps['Esc'] = function (cm) {\n if (cm.getOption('fullScreen')) toggleFullScreen(self);\n };\n document.addEventListener('keydown', function (e) {\n e = e || window.event;\n if (e.keyCode == 27) {\n if (self.codemirror.getOption('fullScreen')) toggleFullScreen(self);\n }\n }, false);\n var mode, backdrop;\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 }\n\n // eslint-disable-next-line no-unused-vars\n function configureMouse(cm, repeat, event) {\n return {\n addNew: false\n };\n }\n this.codemirror = CodeMirror.fromTextArea(el, {\n mode: mode,\n backdrop: backdrop,\n theme: options.theme != undefined ? options.theme : 'easymde',\n tabSize: options.tabSize != undefined ? options.tabSize : 2,\n indentUnit: options.tabSize != undefined ? options.tabSize : 2,\n indentWithTabs: options.indentWithTabs === false ? false : true,\n lineNumbers: 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 if (typeof options.maxHeight !== 'undefined') {\n this.codemirror.getScrollerElement().style.height = options.maxHeight;\n }\n if (options.forceSync === true) {\n var cm = this.codemirror;\n cm.on('change', function () {\n cm.save();\n });\n }\n this.gui = {};\n\n // Wrap Codemirror with container before create toolbar, etc,\n // to use with sideBySideFullscreen option.\n var easyMDEContainer = document.createElement('div');\n easyMDEContainer.classList.add('EasyMDEContainer');\n var cmWrapper = this.codemirror.getWrapperElement();\n cmWrapper.parentNode.insertBefore(easyMDEContainer, cmWrapper);\n easyMDEContainer.appendChild(cmWrapper);\n if (options.toolbar !== false) {\n this.gui.toolbar = this.createToolbar();\n }\n if (options.status !== false) {\n this.gui.statusbar = this.createStatusbar();\n }\n if (options.autosave != undefined && options.autosave.enabled === true) {\n this.autosave(); // use to load localstorage content\n this.codemirror.on('change', function () {\n clearTimeout(self._autosave_timeout);\n self._autosave_timeout = setTimeout(function () {\n self.autosave();\n }, self.options.autosave.submit_delay || self.options.autosave.delay || 1000);\n });\n }\n this.gui.sideBySide = this.createSideBySide();\n this._rendered = this.element;\n\n // Fixes CodeMirror bug (#344)\n var temp_cm = this.codemirror;\n setTimeout(function () {\n temp_cm.refresh();\n }.bind(temp_cm), 0);\n};\n\n// Safari, in Private Browsing Mode, looks like it supports localStorage but all calls to setItem throw QuotaExceededError. We're going to detect this and set a variable accordingly.\nfunction isLocalStorageAvailable() {\n if (typeof localStorage === 'object') {\n try {\n localStorage.setItem('smde_localStorage', 1);\n localStorage.removeItem('smde_localStorage');\n } catch (e) {\n return false;\n }\n } else {\n return false;\n }\n return true;\n}\nEasyMDE.prototype.autosave = function () {\n if (isLocalStorageAvailable()) {\n var easyMDE = this;\n if (this.options.autosave.uniqueId == undefined || this.options.autosave.uniqueId == '') {\n console.log('EasyMDE: You must set a uniqueId to use the autosave feature');\n return;\n }\n if (this.options.autosave.binded !== true) {\n if (easyMDE.element.form != null && easyMDE.element.form != undefined) {\n easyMDE.element.form.addEventListener('submit', function () {\n clearTimeout(easyMDE.autosaveTimeoutId);\n easyMDE.autosaveTimeoutId = undefined;\n localStorage.removeItem('smde_' + easyMDE.options.autosave.uniqueId);\n });\n }\n this.options.autosave.binded = true;\n }\n if (this.options.autosave.loaded !== true) {\n if (typeof localStorage.getItem('smde_' + this.options.autosave.uniqueId) == 'string' && localStorage.getItem('smde_' + this.options.autosave.uniqueId) != '') {\n this.codemirror.setValue(localStorage.getItem('smde_' + this.options.autosave.uniqueId));\n this.options.autosave.foundSavedValue = true;\n }\n this.options.autosave.loaded = true;\n }\n var value = easyMDE.value();\n if (value !== '') {\n localStorage.setItem('smde_' + this.options.autosave.uniqueId, value);\n } else {\n localStorage.removeItem('smde_' + this.options.autosave.uniqueId);\n }\n var el = document.getElementById('autosaved');\n if (el != null && el != undefined && el != '') {\n var d = new Date();\n var dd = new Intl.DateTimeFormat([this.options.autosave.timeFormat.locale, 'en-US'], this.options.autosave.timeFormat.format).format(d);\n var save = this.options.autosave.text == undefined ? 'Autosaved: ' : this.options.autosave.text;\n el.innerHTML = save + dd;\n }\n } else {\n console.log('EasyMDE: localStorage not available, cannot autosave');\n }\n};\nEasyMDE.prototype.clearAutosavedValue = function () {\n if (isLocalStorageAvailable()) {\n if (this.options.autosave == undefined || this.options.autosave.uniqueId == undefined || this.options.autosave.uniqueId == '') {\n console.log('EasyMDE: You must set a uniqueId to clear the autosave value');\n return;\n }\n localStorage.removeItem('smde_' + this.options.autosave.uniqueId);\n } else {\n console.log('EasyMDE: localStorage not available, cannot autosave');\n }\n};\n\n/**\n * Open the browse-file window to upload an image to a server.\n * @param [onSuccess] {function} see EasyMDE.prototype.uploadImage\n * @param [onError] {function} see EasyMDE.prototype.uploadImage\n */\nEasyMDE.prototype.openBrowseFileWindow = function (onSuccess, onError) {\n var self = this;\n var imageInput = this.gui.toolbar.getElementsByClassName('imageInput')[0];\n imageInput.click(); //dispatchEvent(new MouseEvent('click')); // replaced with click() for IE11 compatibility.\n function onChange(event) {\n if (self.options.imageUploadFunction) {\n self.uploadImagesUsingCustomFunction(self.options.imageUploadFunction, event.target.files);\n } else {\n self.uploadImages(event.target.files, onSuccess, onError);\n }\n imageInput.removeEventListener('change', onChange);\n }\n imageInput.addEventListener('change', onChange);\n};\n\n/**\n * Upload an image to the server.\n *\n * @param file {File} The image to upload, as a HTML5 File object (https://developer.mozilla.org/en-US/docs/Web/API/File)\n * @param [onSuccess] {function} A callback function to execute after the image has been successfully uploaded, with one parameter:\n * - url (string): The URL of the uploaded image.\n * @param [onError] {function} A callback function to execute when the image upload fails, with one parameter:\n * - error (string): the detailed error to display to the user (based on messages from options.errorMessages).\n */\nEasyMDE.prototype.uploadImage = function (file, onSuccess, onError) {\n var self = this;\n onSuccess = onSuccess || function onSuccess(imageUrl) {\n afterImageUploaded(self, imageUrl);\n };\n function onErrorSup(errorMessage) {\n // show error on status bar and reset after 10000ms\n self.updateStatusBar('upload-image', errorMessage);\n setTimeout(function () {\n self.updateStatusBar('upload-image', self.options.imageTexts.sbInit);\n }, 10000);\n\n // run custom error handler\n if (onError && typeof onError === 'function') {\n onError(errorMessage);\n }\n // run error handler from options, this alerts the message.\n self.options.errorCallback(errorMessage);\n }\n function fillErrorMessage(errorMessage) {\n var units = self.options.imageTexts.sizeUnits.split(',');\n return errorMessage.replace('#image_name#', file.name).replace('#image_size#', humanFileSize(file.size, units)).replace('#image_max_size#', humanFileSize(self.options.imageMaxSize, units));\n }\n if (file.size > this.options.imageMaxSize) {\n onErrorSup(fillErrorMessage(this.options.errorMessages.fileTooLarge));\n return;\n }\n var formData = new FormData();\n formData.append('image', file);\n\n // insert CSRF token if provided in config.\n if (self.options.imageCSRFToken) {\n formData.append('csrfmiddlewaretoken', self.options.imageCSRFToken);\n }\n var request = new XMLHttpRequest();\n request.upload.onprogress = function (event) {\n if (event.lengthComputable) {\n var progress = '' + Math.round(event.loaded * 100 / event.total);\n self.updateStatusBar('upload-image', self.options.imageTexts.sbProgress.replace('#file_name#', file.name).replace('#progress#', progress));\n }\n };\n request.open('POST', this.options.imageUploadEndpoint);\n request.onload = function () {\n try {\n var response = JSON.parse(this.responseText);\n } catch (error) {\n console.error('EasyMDE: The server did not return a valid json.');\n onErrorSup(fillErrorMessage(self.options.errorMessages.importError));\n return;\n }\n if (this.status === 200 && response && !response.error && response.data && response.data.filePath) {\n onSuccess(window.location.origin + '/' + response.data.filePath);\n } else {\n if (response.error && response.error in self.options.errorMessages) {\n // preformatted error message\n onErrorSup(fillErrorMessage(self.options.errorMessages[response.error]));\n } else if (response.error) {\n // server side generated error message\n onErrorSup(fillErrorMessage(response.error));\n } else {\n //unknown error\n console.error('EasyMDE: Received an unexpected response after uploading the image.' + this.status + ' (' + this.statusText + ')');\n onErrorSup(fillErrorMessage(self.options.errorMessages.importError));\n }\n }\n };\n request.onerror = function (event) {\n console.error('EasyMDE: An unexpected error occurred when trying to upload the image.' + event.target.status + ' (' + event.target.statusText + ')');\n onErrorSup(self.options.errorMessages.importError);\n };\n request.send(formData);\n};\n\n/**\n * Upload an image to the server using a custom upload function.\n *\n * @param imageUploadFunction {Function} The custom function to upload the image passed in options\n * @param file {File} The image to upload, as a HTML5 File object (https://developer.mozilla.org/en-US/docs/Web/API/File).\n */\nEasyMDE.prototype.uploadImageUsingCustomFunction = function (imageUploadFunction, file) {\n var self = this;\n function onSuccess(imageUrl) {\n afterImageUploaded(self, imageUrl);\n }\n function onError(errorMessage) {\n var filledErrorMessage = fillErrorMessage(errorMessage);\n // show error on status bar and reset after 10000ms\n self.updateStatusBar('upload-image', filledErrorMessage);\n setTimeout(function () {\n self.updateStatusBar('upload-image', self.options.imageTexts.sbInit);\n }, 10000);\n\n // run error handler from options, this alerts the message.\n self.options.errorCallback(filledErrorMessage);\n }\n function fillErrorMessage(errorMessage) {\n var units = self.options.imageTexts.sizeUnits.split(',');\n return errorMessage.replace('#image_name#', file.name).replace('#image_size#', humanFileSize(file.size, units)).replace('#image_max_size#', humanFileSize(self.options.imageMaxSize, units));\n }\n imageUploadFunction(file, onSuccess, onError);\n};\nEasyMDE.prototype.setPreviewMaxHeight = function () {\n var cm = this.codemirror;\n var wrapper = cm.getWrapperElement();\n var preview = wrapper.nextSibling;\n\n // Calc preview max height\n var paddingTop = parseInt(window.getComputedStyle(wrapper).paddingTop);\n var borderTopWidth = parseInt(window.getComputedStyle(wrapper).borderTopWidth);\n var optionsMaxHeight = parseInt(this.options.maxHeight);\n var wrapperMaxHeight = optionsMaxHeight + paddingTop * 2 + borderTopWidth * 2;\n var previewMaxHeight = wrapperMaxHeight.toString() + 'px';\n preview.style.height = previewMaxHeight;\n};\nEasyMDE.prototype.createSideBySide = function () {\n var cm = this.codemirror;\n var wrapper = cm.getWrapperElement();\n var preview = wrapper.nextSibling;\n if (!preview || !/editor-preview-side/.test(preview.className)) {\n preview = document.createElement('div');\n preview.className = 'editor-preview-side';\n if (this.options.previewClass) {\n if (Array.isArray(this.options.previewClass)) {\n for (var i = 0; i < this.options.previewClass.length; i++) {\n preview.className += ' ' + this.options.previewClass[i];\n }\n } else if (typeof this.options.previewClass === 'string') {\n preview.className += ' ' + this.options.previewClass;\n }\n }\n wrapper.parentNode.insertBefore(preview, wrapper.nextSibling);\n }\n if (typeof this.options.maxHeight !== 'undefined') {\n this.setPreviewMaxHeight();\n }\n if (this.options.syncSideBySidePreviewScroll === false) return preview;\n // Syncs scroll editor -> preview\n var cScroll = false;\n var pScroll = false;\n cm.on('scroll', function (v) {\n if (cScroll) {\n cScroll = false;\n return;\n }\n pScroll = true;\n var height = v.getScrollInfo().height - v.getScrollInfo().clientHeight;\n var ratio = parseFloat(v.getScrollInfo().top) / height;\n var move = (preview.scrollHeight - preview.clientHeight) * ratio;\n preview.scrollTop = move;\n });\n\n // Syncs scroll preview -> editor\n preview.onscroll = function () {\n if (pScroll) {\n pScroll = false;\n return;\n }\n cScroll = true;\n var height = preview.scrollHeight - preview.clientHeight;\n var ratio = parseFloat(preview.scrollTop) / height;\n var move = (cm.getScrollInfo().height - cm.getScrollInfo().clientHeight) * ratio;\n cm.scrollTo(0, move);\n };\n return preview;\n};\nEasyMDE.prototype.createToolbar = function (items) {\n items = items || this.options.toolbar;\n if (!items || items.length === 0) {\n return;\n }\n var i;\n for (i = 0; i < items.length; i++) {\n if (toolbarBuiltInButtons[items[i]] != undefined) {\n items[i] = toolbarBuiltInButtons[items[i]];\n }\n }\n var bar = document.createElement('div');\n bar.className = 'editor-toolbar';\n var self = this;\n var toolbarData = {};\n self.toolbar = items;\n for (i = 0; i < items.length; i++) {\n if (items[i].name == 'guide' && self.options.toolbarGuideIcon === false) continue;\n if (self.options.hideIcons && self.options.hideIcons.indexOf(items[i].name) != -1) continue;\n\n // Fullscreen does not work well on mobile devices (even tablets)\n // In the future, hopefully this can be resolved\n if ((items[i].name == 'fullscreen' || items[i].name == 'side-by-side') && isMobile()) continue;\n\n // Don't include trailing separators\n if (items[i] === '|') {\n var nonSeparatorIconsFollow = false;\n for (var x = i + 1; x < items.length; x++) {\n if (items[x] !== '|' && (!self.options.hideIcons || self.options.hideIcons.indexOf(items[x].name) == -1)) {\n nonSeparatorIconsFollow = true;\n }\n }\n if (!nonSeparatorIconsFollow) continue;\n }\n\n // Create the icon and append to the toolbar\n (function (item) {\n var el;\n if (item === '|') {\n el = createSep();\n } else if (item.children) {\n el = createToolbarDropdown(item, self.options.toolbarTips, self.options.shortcuts, self);\n } else {\n el = createToolbarButton(item, true, self.options.toolbarTips, self.options.shortcuts, 'button', self);\n }\n toolbarData[item.name || item] = el;\n bar.appendChild(el);\n\n // Create the input element (ie. ), used among\n // with the 'import-image' icon to open the browse-file window.\n if (item.name === 'upload-image') {\n var imageInput = document.createElement('input');\n imageInput.className = 'imageInput';\n imageInput.type = 'file';\n imageInput.multiple = true;\n imageInput.name = 'image';\n imageInput.accept = self.options.imageAccept;\n imageInput.style.display = 'none';\n imageInput.style.opacity = 0;\n bar.appendChild(imageInput);\n }\n })(items[i]);\n }\n self.toolbar_div = bar;\n self.toolbarElements = toolbarData;\n var cm = this.codemirror;\n cm.on('cursorActivity', function () {\n var stat = getState(cm);\n for (var key in toolbarData) {\n (function (key) {\n var el = toolbarData[key];\n if (stat[key]) {\n el.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};\nEasyMDE.prototype.createStatusbar = function (status) {\n // Initialize\n status = status || this.options.status;\n var options = this.options;\n var cm = this.codemirror;\n\n // Make sure the status variable is valid\n if (!status || status.length === 0) {\n return;\n }\n\n // Set up the built-in items\n var items = [];\n var i, onUpdate, onActivity, defaultValue;\n for (i = 0; i < status.length; i++) {\n // Reset some values\n onUpdate = undefined;\n onActivity = undefined;\n defaultValue = undefined;\n\n // Handle if custom or not\n if (typeof status[i] === 'object') {\n items.push({\n className: status[i].className,\n defaultValue: status[i].defaultValue,\n onUpdate: status[i].onUpdate,\n onActivity: status[i].onActivity\n });\n } else {\n var name = status[i];\n if (name === 'words') {\n defaultValue = function (el) {\n el.innerHTML = wordCount(cm.getValue());\n };\n onUpdate = function (el) {\n el.innerHTML = wordCount(cm.getValue());\n };\n } else if (name === 'lines') {\n defaultValue = function (el) {\n el.innerHTML = cm.lineCount();\n };\n onUpdate = function (el) {\n el.innerHTML = cm.lineCount();\n };\n } else if (name === 'cursor') {\n defaultValue = function (el) {\n el.innerHTML = '0:0';\n };\n onActivity = function (el) {\n var pos = cm.getCursor();\n el.innerHTML = pos.line + ':' + pos.ch;\n };\n } else if (name === 'autosave') {\n defaultValue = function (el) {\n if (options.autosave != undefined && options.autosave.enabled === true) {\n el.setAttribute('id', 'autosaved');\n }\n };\n } else if (name === 'upload-image') {\n defaultValue = function (el) {\n el.innerHTML = options.imageTexts.sbInit;\n };\n }\n items.push({\n className: name,\n defaultValue: defaultValue,\n onUpdate: onUpdate,\n onActivity: onActivity\n });\n }\n }\n\n // Create element for the status bar\n var bar = document.createElement('div');\n bar.className = 'editor-statusbar';\n\n // Create a new span for each item\n for (i = 0; i < items.length; i++) {\n // Store in temporary variable\n var item = items[i];\n\n // Create span element\n var el = document.createElement('span');\n el.className = item.className;\n\n // Ensure the defaultValue is a function\n if (typeof item.defaultValue === 'function') {\n item.defaultValue(el);\n }\n\n // Ensure the onUpdate is a function\n if (typeof item.onUpdate === 'function') {\n // Create a closure around the span of the current action, then execute the onUpdate handler\n this.codemirror.on('update', function (el, item) {\n return function () {\n item.onUpdate(el);\n };\n }(el, item));\n }\n if (typeof item.onActivity === 'function') {\n // Create a closure around the span of the current action, then execute the onActivity handler\n this.codemirror.on('cursorActivity', function (el, item) {\n return function () {\n item.onActivity(el);\n };\n }(el, item));\n }\n\n // Append the item to the status bar\n bar.appendChild(el);\n }\n\n // Insert the status bar into the DOM\n var cmWrapper = this.codemirror.getWrapperElement();\n cmWrapper.parentNode.insertBefore(bar, cmWrapper.nextSibling);\n return bar;\n};\n\n/**\n * Get or set the text content.\n */\nEasyMDE.prototype.value = function (val) {\n var cm = this.codemirror;\n if (val === undefined) {\n return cm.getValue();\n } else {\n cm.getDoc().setValue(val);\n if (this.isPreviewActive()) {\n var wrapper = cm.getWrapperElement();\n var preview = wrapper.lastChild;\n preview.innerHTML = this.options.previewRender(val, preview);\n }\n return this;\n }\n};\n\n/**\n * Bind static methods for exports.\n */\nEasyMDE.toggleBold = toggleBold;\nEasyMDE.toggleItalic = toggleItalic;\nEasyMDE.toggleStrikethrough = toggleStrikethrough;\nEasyMDE.toggleBlockquote = toggleBlockquote;\nEasyMDE.toggleHeadingSmaller = toggleHeadingSmaller;\nEasyMDE.toggleHeadingBigger = toggleHeadingBigger;\nEasyMDE.toggleHeading1 = toggleHeading1;\nEasyMDE.toggleHeading2 = toggleHeading2;\nEasyMDE.toggleHeading3 = toggleHeading3;\nEasyMDE.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/**\n * Bind instance methods for exports.\n */\nEasyMDE.prototype.toggleBold = function () {\n toggleBold(this);\n};\nEasyMDE.prototype.toggleItalic = function () {\n toggleItalic(this);\n};\nEasyMDE.prototype.toggleStrikethrough = function () {\n toggleStrikethrough(this);\n};\nEasyMDE.prototype.toggleBlockquote = function () {\n toggleBlockquote(this);\n};\nEasyMDE.prototype.toggleHeadingSmaller = function () {\n toggleHeadingSmaller(this);\n};\nEasyMDE.prototype.toggleHeadingBigger = function () {\n toggleHeadingBigger(this);\n};\nEasyMDE.prototype.toggleHeading1 = function () {\n toggleHeading1(this);\n};\nEasyMDE.prototype.toggleHeading2 = function () {\n toggleHeading2(this);\n};\nEasyMDE.prototype.toggleHeading3 = function () {\n toggleHeading3(this);\n};\nEasyMDE.prototype.toggleCodeBlock = function () {\n toggleCodeBlock(this);\n};\nEasyMDE.prototype.toggleUnorderedList = function () {\n toggleUnorderedList(this);\n};\nEasyMDE.prototype.toggleOrderedList = function () {\n toggleOrderedList(this);\n};\nEasyMDE.prototype.cleanBlock = function () {\n cleanBlock(this);\n};\nEasyMDE.prototype.drawLink = function () {\n drawLink(this);\n};\nEasyMDE.prototype.drawImage = function () {\n drawImage(this);\n};\nEasyMDE.prototype.drawTable = function () {\n drawTable(this);\n};\nEasyMDE.prototype.drawHorizontalRule = function () {\n drawHorizontalRule(this);\n};\nEasyMDE.prototype.undo = function () {\n undo(this);\n};\nEasyMDE.prototype.redo = function () {\n redo(this);\n};\nEasyMDE.prototype.togglePreview = function () {\n togglePreview(this);\n};\nEasyMDE.prototype.toggleSideBySide = function () {\n toggleSideBySide(this);\n};\nEasyMDE.prototype.toggleFullScreen = function () {\n toggleFullScreen(this);\n};\nEasyMDE.prototype.isPreviewActive = function () {\n var cm = this.codemirror;\n var wrapper = cm.getWrapperElement();\n var preview = wrapper.lastChild;\n return /editor-preview-active/.test(preview.className);\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};\nEasyMDE.prototype.isFullscreenActive = function () {\n var cm = this.codemirror;\n return cm.getOption('fullScreen');\n};\nEasyMDE.prototype.getState = function () {\n var cm = this.codemirror;\n return getState(cm);\n};\nEasyMDE.prototype.toTextArea = function () {\n var cm = this.codemirror;\n var wrapper = cm.getWrapperElement();\n if (wrapper.parentNode) {\n if (this.gui.toolbar) {\n wrapper.parentNode.removeChild(this.gui.toolbar);\n }\n if (this.gui.statusbar) {\n wrapper.parentNode.removeChild(this.gui.statusbar);\n }\n if (this.gui.sideBySide) {\n wrapper.parentNode.removeChild(this.gui.sideBySide);\n }\n }\n cm.toTextArea();\n if (this.autosaveTimeoutId) {\n clearTimeout(this.autosaveTimeoutId);\n this.autosaveTimeoutId = undefined;\n this.clearAutosavedValue();\n }\n};\nmodule.exports = EasyMDE;","(function (global, factory) {\n typeof exports === \"object\" && typeof module !== \"undefined\" ? factory(exports) : typeof define === \"function\" && define.amd ? define([\"exports\"], factory) : factory(global.ActiveStorage = {});\n})(this, function (exports) {\n \"use strict\";\n\n function createCommonjsModule(fn, module) {\n return module = {\n exports: {}\n }, fn(module, module.exports), module.exports;\n }\n var sparkMd5 = createCommonjsModule(function (module, exports) {\n (function (factory) {\n {\n module.exports = factory();\n }\n })(function (undefined) {\n var hex_chr = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\"];\n function md5cycle(x, k) {\n var a = x[0],\n b = x[1],\n c = x[2],\n d = x[3];\n a += (b & c | ~b & d) + k[0] - 680876936 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[1] - 389564586 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[2] + 606105819 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[3] - 1044525330 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[4] - 176418897 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[5] + 1200080426 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[6] - 1473231341 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[7] - 45705983 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[8] + 1770035416 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[9] - 1958414417 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[10] - 42063 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[11] - 1990404162 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[12] + 1804603682 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[13] - 40341101 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[14] - 1502002290 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[15] + 1236535329 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & d | c & ~d) + k[1] - 165796510 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[6] - 1069501632 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[11] + 643717713 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[0] - 373897302 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[5] - 701558691 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[10] + 38016083 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[15] - 660478335 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[4] - 405537848 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[9] + 568446438 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[14] - 1019803690 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[3] - 187363961 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[8] + 1163531501 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[13] - 1444681467 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[2] - 51403784 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[7] + 1735328473 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[12] - 1926607734 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b ^ c ^ d) + k[5] - 378558 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[8] - 2022574463 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[11] + 1839030562 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[14] - 35309556 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[1] - 1530992060 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[4] + 1272893353 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[7] - 155497632 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[10] - 1094730640 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[13] + 681279174 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[0] - 358537222 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[3] - 722521979 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[6] + 76029189 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[9] - 640364487 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[12] - 421815835 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[15] + 530742520 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[2] - 995338651 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (c ^ (b | ~d)) + k[0] - 198630844 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[5] - 57434055 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[10] - 1051523 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[15] - 30611744 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[4] - 145523070 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[2] + 718787259 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[9] - 343485551 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n x[0] = a + x[0] | 0;\n x[1] = b + x[1] | 0;\n x[2] = c + x[2] | 0;\n x[3] = d + x[3] | 0;\n }\n function md5blk(s) {\n var md5blks = [],\n i;\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\n }\n return md5blks;\n }\n function md5blk_array(a) {\n var md5blks = [],\n i;\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24);\n }\n return md5blks;\n }\n function md51(s) {\n var n = s.length,\n state = [1732584193, -271733879, -1732584194, 271733878],\n i,\n length,\n tail,\n tmp,\n lo,\n hi;\n for (i = 64; i <= n; i += 64) {\n md5cycle(state, md5blk(s.substring(i - 64, i)));\n }\n s = s.substring(i - 64);\n length = s.length;\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= s.charCodeAt(i) << (i % 4 << 3);\n }\n tail[i >> 2] |= 128 << (i % 4 << 3);\n if (i > 55) {\n md5cycle(state, tail);\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n tmp = n * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(state, tail);\n return state;\n }\n function md51_array(a) {\n var n = a.length,\n state = [1732584193, -271733879, -1732584194, 271733878],\n i,\n length,\n tail,\n tmp,\n lo,\n hi;\n for (i = 64; i <= n; i += 64) {\n md5cycle(state, md5blk_array(a.subarray(i - 64, i)));\n }\n a = i - 64 < n ? a.subarray(i - 64) : new Uint8Array(0);\n length = a.length;\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= a[i] << (i % 4 << 3);\n }\n tail[i >> 2] |= 128 << (i % 4 << 3);\n if (i > 55) {\n md5cycle(state, tail);\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n tmp = n * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(state, tail);\n return state;\n }\n function rhex(n) {\n var s = \"\",\n j;\n for (j = 0; j < 4; j += 1) {\n s += hex_chr[n >> j * 8 + 4 & 15] + hex_chr[n >> j * 8 & 15];\n }\n return s;\n }\n function hex(x) {\n var i;\n for (i = 0; i < x.length; i += 1) {\n x[i] = rhex(x[i]);\n }\n return x.join(\"\");\n }\n if (hex(md51(\"hello\")) !== \"5d41402abc4b2a76b9719d911017c592\") ;\n if (typeof ArrayBuffer !== \"undefined\" && !ArrayBuffer.prototype.slice) {\n (function () {\n function clamp(val, length) {\n val = val | 0 || 0;\n if (val < 0) {\n return Math.max(val + length, 0);\n }\n return Math.min(val, length);\n }\n ArrayBuffer.prototype.slice = function (from, to) {\n var length = this.byteLength,\n begin = clamp(from, length),\n end = length,\n num,\n target,\n targetArray,\n sourceArray;\n if (to !== undefined) {\n end = clamp(to, length);\n }\n if (begin > end) {\n return new ArrayBuffer(0);\n }\n num = end - begin;\n target = new ArrayBuffer(num);\n targetArray = new Uint8Array(target);\n sourceArray = new Uint8Array(this, begin, num);\n targetArray.set(sourceArray);\n return target;\n };\n })();\n }\n function toUtf8(str) {\n if (/[\\u0080-\\uFFFF]/.test(str)) {\n str = unescape(encodeURIComponent(str));\n }\n return str;\n }\n function utf8Str2ArrayBuffer(str, returnUInt8Array) {\n var length = str.length,\n buff = new ArrayBuffer(length),\n arr = new Uint8Array(buff),\n i;\n for (i = 0; i < length; i += 1) {\n arr[i] = str.charCodeAt(i);\n }\n return returnUInt8Array ? arr : buff;\n }\n function arrayBuffer2Utf8Str(buff) {\n return String.fromCharCode.apply(null, new Uint8Array(buff));\n }\n function concatenateArrayBuffers(first, second, returnUInt8Array) {\n var result = new Uint8Array(first.byteLength + second.byteLength);\n result.set(new Uint8Array(first));\n result.set(new Uint8Array(second), first.byteLength);\n return returnUInt8Array ? result : result.buffer;\n }\n function hexToBinaryString(hex) {\n var bytes = [],\n length = hex.length,\n x;\n for (x = 0; x < length - 1; x += 2) {\n bytes.push(parseInt(hex.substr(x, 2), 16));\n }\n return String.fromCharCode.apply(String, bytes);\n }\n function SparkMD5() {\n this.reset();\n }\n SparkMD5.prototype.append = function (str) {\n this.appendBinary(toUtf8(str));\n return this;\n };\n SparkMD5.prototype.appendBinary = function (contents) {\n this._buff += contents;\n this._length += contents.length;\n var length = this._buff.length,\n i;\n for (i = 64; i <= length; i += 64) {\n md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i)));\n }\n this._buff = this._buff.substring(i - 64);\n return this;\n };\n SparkMD5.prototype.end = function (raw) {\n var buff = this._buff,\n length = buff.length,\n i,\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n ret;\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= buff.charCodeAt(i) << (i % 4 << 3);\n }\n this._finish(tail, length);\n ret = hex(this._hash);\n if (raw) {\n ret = hexToBinaryString(ret);\n }\n this.reset();\n return ret;\n };\n SparkMD5.prototype.reset = function () {\n this._buff = \"\";\n this._length = 0;\n this._hash = [1732584193, -271733879, -1732584194, 271733878];\n return this;\n };\n SparkMD5.prototype.getState = function () {\n return {\n buff: this._buff,\n length: this._length,\n hash: this._hash\n };\n };\n SparkMD5.prototype.setState = function (state) {\n this._buff = state.buff;\n this._length = state.length;\n this._hash = state.hash;\n return this;\n };\n SparkMD5.prototype.destroy = function () {\n delete this._hash;\n delete this._buff;\n delete this._length;\n };\n SparkMD5.prototype._finish = function (tail, length) {\n var i = length,\n tmp,\n lo,\n hi;\n tail[i >> 2] |= 128 << (i % 4 << 3);\n if (i > 55) {\n md5cycle(this._hash, tail);\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n tmp = this._length * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(this._hash, tail);\n };\n SparkMD5.hash = function (str, raw) {\n return SparkMD5.hashBinary(toUtf8(str), raw);\n };\n SparkMD5.hashBinary = function (content, raw) {\n var hash = md51(content),\n ret = hex(hash);\n return raw ? hexToBinaryString(ret) : ret;\n };\n SparkMD5.ArrayBuffer = function () {\n this.reset();\n };\n SparkMD5.ArrayBuffer.prototype.append = function (arr) {\n var buff = concatenateArrayBuffers(this._buff.buffer, arr, true),\n length = buff.length,\n i;\n this._length += arr.byteLength;\n for (i = 64; i <= length; i += 64) {\n md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i)));\n }\n this._buff = i - 64 < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0);\n return this;\n };\n SparkMD5.ArrayBuffer.prototype.end = function (raw) {\n var buff = this._buff,\n length = buff.length,\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n i,\n ret;\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= buff[i] << (i % 4 << 3);\n }\n this._finish(tail, length);\n ret = hex(this._hash);\n if (raw) {\n ret = hexToBinaryString(ret);\n }\n this.reset();\n return ret;\n };\n SparkMD5.ArrayBuffer.prototype.reset = function () {\n this._buff = new Uint8Array(0);\n this._length = 0;\n this._hash = [1732584193, -271733879, -1732584194, 271733878];\n return this;\n };\n SparkMD5.ArrayBuffer.prototype.getState = function () {\n var state = SparkMD5.prototype.getState.call(this);\n state.buff = arrayBuffer2Utf8Str(state.buff);\n return state;\n };\n SparkMD5.ArrayBuffer.prototype.setState = function (state) {\n state.buff = utf8Str2ArrayBuffer(state.buff, true);\n return SparkMD5.prototype.setState.call(this, state);\n };\n SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy;\n SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish;\n SparkMD5.ArrayBuffer.hash = function (arr, raw) {\n var hash = md51_array(new Uint8Array(arr)),\n ret = hex(hash);\n return raw ? hexToBinaryString(ret) : ret;\n };\n return SparkMD5;\n });\n });\n var classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n };\n var createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n var fileSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice;\n var FileChecksum = function () {\n createClass(FileChecksum, null, [{\n key: \"create\",\n value: function create(file, callback) {\n var instance = new FileChecksum(file);\n instance.create(callback);\n }\n }]);\n function FileChecksum(file) {\n classCallCheck(this, FileChecksum);\n this.file = file;\n this.chunkSize = 2097152;\n this.chunkCount = Math.ceil(this.file.size / this.chunkSize);\n this.chunkIndex = 0;\n }\n createClass(FileChecksum, [{\n key: \"create\",\n value: function create(callback) {\n var _this = this;\n this.callback = callback;\n this.md5Buffer = new sparkMd5.ArrayBuffer();\n this.fileReader = new FileReader();\n this.fileReader.addEventListener(\"load\", function (event) {\n return _this.fileReaderDidLoad(event);\n });\n this.fileReader.addEventListener(\"error\", function (event) {\n return _this.fileReaderDidError(event);\n });\n this.readNextChunk();\n }\n }, {\n key: \"fileReaderDidLoad\",\n value: function fileReaderDidLoad(event) {\n this.md5Buffer.append(event.target.result);\n if (!this.readNextChunk()) {\n var binaryDigest = this.md5Buffer.end(true);\n var base64digest = btoa(binaryDigest);\n this.callback(null, base64digest);\n }\n }\n }, {\n key: \"fileReaderDidError\",\n value: function fileReaderDidError(event) {\n this.callback(\"Error reading \" + this.file.name);\n }\n }, {\n key: \"readNextChunk\",\n value: function readNextChunk() {\n if (this.chunkIndex < this.chunkCount || this.chunkIndex == 0 && this.chunkCount == 0) {\n var start = this.chunkIndex * this.chunkSize;\n var end = Math.min(start + this.chunkSize, this.file.size);\n var bytes = fileSlice.call(this.file, start, end);\n this.fileReader.readAsArrayBuffer(bytes);\n this.chunkIndex++;\n return true;\n } else {\n return false;\n }\n }\n }]);\n return FileChecksum;\n }();\n function getMetaValue(name) {\n var element = findElement(document.head, 'meta[name=\"' + name + '\"]');\n if (element) {\n return element.getAttribute(\"content\");\n }\n }\n function findElements(root, selector) {\n if (typeof root == \"string\") {\n selector = root;\n root = document;\n }\n var elements = root.querySelectorAll(selector);\n return toArray$1(elements);\n }\n function findElement(root, selector) {\n if (typeof root == \"string\") {\n selector = root;\n root = document;\n }\n return root.querySelector(selector);\n }\n function dispatchEvent(element, type) {\n var eventInit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var disabled = element.disabled;\n var bubbles = eventInit.bubbles,\n cancelable = eventInit.cancelable,\n detail = eventInit.detail;\n var event = document.createEvent(\"Event\");\n event.initEvent(type, bubbles || true, cancelable || true);\n event.detail = detail || {};\n try {\n element.disabled = false;\n element.dispatchEvent(event);\n } finally {\n element.disabled = disabled;\n }\n return event;\n }\n function toArray$1(value) {\n if (Array.isArray(value)) {\n return value;\n } else if (Array.from) {\n return Array.from(value);\n } else {\n return [].slice.call(value);\n }\n }\n var BlobRecord = function () {\n function BlobRecord(file, checksum, url) {\n var _this = this;\n classCallCheck(this, BlobRecord);\n this.file = file;\n this.attributes = {\n filename: file.name,\n content_type: file.type || \"application/octet-stream\",\n byte_size: file.size,\n checksum: checksum\n };\n this.xhr = new XMLHttpRequest();\n this.xhr.open(\"POST\", url, true);\n this.xhr.responseType = \"json\";\n this.xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n this.xhr.setRequestHeader(\"Accept\", \"application/json\");\n this.xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n var csrfToken = getMetaValue(\"csrf-token\");\n if (csrfToken != undefined) {\n this.xhr.setRequestHeader(\"X-CSRF-Token\", csrfToken);\n }\n this.xhr.addEventListener(\"load\", function (event) {\n return _this.requestDidLoad(event);\n });\n this.xhr.addEventListener(\"error\", function (event) {\n return _this.requestDidError(event);\n });\n }\n createClass(BlobRecord, [{\n key: \"create\",\n value: function create(callback) {\n this.callback = callback;\n this.xhr.send(JSON.stringify({\n blob: this.attributes\n }));\n }\n }, {\n key: \"requestDidLoad\",\n value: function requestDidLoad(event) {\n if (this.status >= 200 && this.status < 300) {\n var response = this.response;\n var direct_upload = response.direct_upload;\n delete response.direct_upload;\n this.attributes = response;\n this.directUploadData = direct_upload;\n this.callback(null, this.toJSON());\n } else {\n this.requestDidError(event);\n }\n }\n }, {\n key: \"requestDidError\",\n value: function requestDidError(event) {\n this.callback('Error creating Blob for \"' + this.file.name + '\". Status: ' + this.status);\n }\n }, {\n key: \"toJSON\",\n value: function toJSON() {\n var result = {};\n for (var key in this.attributes) {\n result[key] = this.attributes[key];\n }\n return result;\n }\n }, {\n key: \"status\",\n get: function get$$1() {\n return this.xhr.status;\n }\n }, {\n key: \"response\",\n get: function get$$1() {\n var _xhr = this.xhr,\n responseType = _xhr.responseType,\n response = _xhr.response;\n if (responseType == \"json\") {\n return response;\n } else {\n return JSON.parse(response);\n }\n }\n }]);\n return BlobRecord;\n }();\n var BlobUpload = function () {\n function BlobUpload(blob) {\n var _this = this;\n classCallCheck(this, BlobUpload);\n this.blob = blob;\n this.file = blob.file;\n var _blob$directUploadDat = blob.directUploadData,\n url = _blob$directUploadDat.url,\n headers = _blob$directUploadDat.headers;\n this.xhr = new XMLHttpRequest();\n this.xhr.open(\"PUT\", url, true);\n this.xhr.responseType = \"text\";\n for (var key in headers) {\n this.xhr.setRequestHeader(key, headers[key]);\n }\n this.xhr.addEventListener(\"load\", function (event) {\n return _this.requestDidLoad(event);\n });\n this.xhr.addEventListener(\"error\", function (event) {\n return _this.requestDidError(event);\n });\n }\n createClass(BlobUpload, [{\n key: \"create\",\n value: function create(callback) {\n this.callback = callback;\n this.xhr.send(this.file.slice());\n }\n }, {\n key: \"requestDidLoad\",\n value: function requestDidLoad(event) {\n var _xhr = this.xhr,\n status = _xhr.status,\n response = _xhr.response;\n if (status >= 200 && status < 300) {\n this.callback(null, response);\n } else {\n this.requestDidError(event);\n }\n }\n }, {\n key: \"requestDidError\",\n value: function requestDidError(event) {\n this.callback('Error storing \"' + this.file.name + '\". Status: ' + this.xhr.status);\n }\n }]);\n return BlobUpload;\n }();\n var id = 0;\n var DirectUpload = function () {\n function DirectUpload(file, url, delegate) {\n classCallCheck(this, DirectUpload);\n this.id = ++id;\n this.file = file;\n this.url = url;\n this.delegate = delegate;\n }\n createClass(DirectUpload, [{\n key: \"create\",\n value: function create(callback) {\n var _this = this;\n FileChecksum.create(this.file, function (error, checksum) {\n if (error) {\n callback(error);\n return;\n }\n var blob = new BlobRecord(_this.file, checksum, _this.url);\n notify(_this.delegate, \"directUploadWillCreateBlobWithXHR\", blob.xhr);\n blob.create(function (error) {\n if (error) {\n callback(error);\n } else {\n var upload = new BlobUpload(blob);\n notify(_this.delegate, \"directUploadWillStoreFileWithXHR\", upload.xhr);\n upload.create(function (error) {\n if (error) {\n callback(error);\n } else {\n callback(null, blob.toJSON());\n }\n });\n }\n });\n });\n }\n }]);\n return DirectUpload;\n }();\n function notify(object, methodName) {\n if (object && typeof object[methodName] == \"function\") {\n for (var _len = arguments.length, messages = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n messages[_key - 2] = arguments[_key];\n }\n return object[methodName].apply(object, messages);\n }\n }\n var DirectUploadController = function () {\n function DirectUploadController(input, file) {\n classCallCheck(this, DirectUploadController);\n this.input = input;\n this.file = file;\n this.directUpload = new DirectUpload(this.file, this.url, this);\n this.dispatch(\"initialize\");\n }\n createClass(DirectUploadController, [{\n key: \"start\",\n value: function start(callback) {\n var _this = this;\n var hiddenInput = document.createElement(\"input\");\n hiddenInput.type = \"hidden\";\n hiddenInput.name = this.input.name;\n this.input.insertAdjacentElement(\"beforebegin\", hiddenInput);\n this.dispatch(\"start\");\n this.directUpload.create(function (error, attributes) {\n if (error) {\n hiddenInput.parentNode.removeChild(hiddenInput);\n _this.dispatchError(error);\n } else {\n hiddenInput.value = attributes.signed_id;\n }\n _this.dispatch(\"end\");\n callback(error);\n });\n }\n }, {\n key: \"uploadRequestDidProgress\",\n value: function uploadRequestDidProgress(event) {\n var progress = event.loaded / event.total * 100;\n if (progress) {\n this.dispatch(\"progress\", {\n progress: progress\n });\n }\n }\n }, {\n key: \"dispatch\",\n value: function dispatch(name) {\n var detail = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n detail.file = this.file;\n detail.id = this.directUpload.id;\n return dispatchEvent(this.input, \"direct-upload:\" + name, {\n detail: detail\n });\n }\n }, {\n key: \"dispatchError\",\n value: function dispatchError(error) {\n var event = this.dispatch(\"error\", {\n error: error\n });\n if (!event.defaultPrevented) {\n alert(error);\n }\n }\n }, {\n key: \"directUploadWillCreateBlobWithXHR\",\n value: function directUploadWillCreateBlobWithXHR(xhr) {\n this.dispatch(\"before-blob-request\", {\n xhr: xhr\n });\n }\n }, {\n key: \"directUploadWillStoreFileWithXHR\",\n value: function directUploadWillStoreFileWithXHR(xhr) {\n var _this2 = this;\n this.dispatch(\"before-storage-request\", {\n xhr: xhr\n });\n xhr.upload.addEventListener(\"progress\", function (event) {\n return _this2.uploadRequestDidProgress(event);\n });\n }\n }, {\n key: \"url\",\n get: function get$$1() {\n return this.input.getAttribute(\"data-direct-upload-url\");\n }\n }]);\n return DirectUploadController;\n }();\n var inputSelector = \"input[type=file][data-direct-upload-url]:not([disabled])\";\n var DirectUploadsController = function () {\n function DirectUploadsController(form) {\n classCallCheck(this, DirectUploadsController);\n this.form = form;\n this.inputs = findElements(form, inputSelector).filter(function (input) {\n return input.files.length;\n });\n }\n createClass(DirectUploadsController, [{\n key: \"start\",\n value: function start(callback) {\n var _this = this;\n var controllers = this.createDirectUploadControllers();\n var startNextController = function startNextController() {\n var controller = controllers.shift();\n if (controller) {\n controller.start(function (error) {\n if (error) {\n callback(error);\n _this.dispatch(\"end\");\n } else {\n startNextController();\n }\n });\n } else {\n callback();\n _this.dispatch(\"end\");\n }\n };\n this.dispatch(\"start\");\n startNextController();\n }\n }, {\n key: \"createDirectUploadControllers\",\n value: function createDirectUploadControllers() {\n var controllers = [];\n this.inputs.forEach(function (input) {\n toArray$1(input.files).forEach(function (file) {\n var controller = new DirectUploadController(input, file);\n controllers.push(controller);\n });\n });\n return controllers;\n }\n }, {\n key: \"dispatch\",\n value: function dispatch(name) {\n var detail = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return dispatchEvent(this.form, \"direct-uploads:\" + name, {\n detail: detail\n });\n }\n }]);\n return DirectUploadsController;\n }();\n var processingAttribute = \"data-direct-uploads-processing\";\n var submitButtonsByForm = new WeakMap();\n var started = false;\n function start() {\n if (!started) {\n started = true;\n document.addEventListener(\"click\", didClick, true);\n document.addEventListener(\"submit\", didSubmitForm);\n document.addEventListener(\"ajax:before\", didSubmitRemoteElement);\n }\n }\n function didClick(event) {\n var target = event.target;\n if ((target.tagName == \"INPUT\" || target.tagName == \"BUTTON\") && target.type == \"submit\" && target.form) {\n submitButtonsByForm.set(target.form, target);\n }\n }\n function didSubmitForm(event) {\n handleFormSubmissionEvent(event);\n }\n function didSubmitRemoteElement(event) {\n if (event.target.tagName == \"FORM\") {\n handleFormSubmissionEvent(event);\n }\n }\n function handleFormSubmissionEvent(event) {\n var form = event.target;\n if (form.hasAttribute(processingAttribute)) {\n event.preventDefault();\n return;\n }\n var controller = new DirectUploadsController(form);\n var inputs = controller.inputs;\n if (inputs.length) {\n event.preventDefault();\n form.setAttribute(processingAttribute, \"\");\n inputs.forEach(disable);\n controller.start(function (error) {\n form.removeAttribute(processingAttribute);\n if (error) {\n inputs.forEach(enable);\n } else {\n submitForm(form);\n }\n });\n }\n }\n function submitForm(form) {\n var button = submitButtonsByForm.get(form) || findElement(form, \"input[type=submit], button[type=submit]\");\n if (button) {\n var _button = button,\n disabled = _button.disabled;\n button.disabled = false;\n button.focus();\n button.click();\n button.disabled = disabled;\n } else {\n button = document.createElement(\"input\");\n button.type = \"submit\";\n button.style.display = \"none\";\n form.appendChild(button);\n button.click();\n form.removeChild(button);\n }\n submitButtonsByForm.delete(form);\n }\n function disable(input) {\n input.disabled = true;\n }\n function enable(input) {\n input.disabled = false;\n }\n function autostart() {\n if (window.ActiveStorage) {\n start();\n }\n }\n setTimeout(autostart, 1);\n exports.start = start;\n exports.DirectUpload = DirectUpload;\n Object.defineProperty(exports, \"__esModule\", {\n value: true\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 (t, r) {\n return e.controller.visit(t, r);\n },\n clearCache: function () {\n return e.controller.clearCache();\n },\n setProgressBarDelay: function (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 for (e in t) n = t[e], r[e] = 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 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 () {\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 for (r = \"\", t = e = 1; 36 >= e; t = ++e) 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 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 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 (t) {\n return e(t.getOrigin() + t.getPath());\n }, e = function (t) {\n return n(t, \"/\") ? t : t + \"/\";\n }, o = function (t, e) {\n return t.slice(0, e.length) === e;\n }, n = function (t, e) {\n return t.slice(-e.length) === e;\n }, t;\n }();\n }.call(this), function () {\n var t = function (t, e) {\n return function () {\n return t.apply(e, arguments);\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 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, e) {\n return function () {\n return t.apply(e, arguments);\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 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, e) {\n return function () {\n return t.apply(e, arguments);\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 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 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, e) {\n return function () {\n return t.apply(e, arguments);\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 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 for (this.elements = {}, n = 0, a = t.length; a > 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 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 for (t in r) e = r[t].tracked, e && n.push(t);\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 for (n in o) i = o[n], a = i.type, r = i.elements, a !== t || e.hasElementWithKey(n) || s.push(r[0]);\n return s;\n }, t.prototype.getProvisionalElements = function () {\n var t, e, r, n, o, i, s;\n r = [], n = this.elements;\n for (e in 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 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 for (o in i) n = i[o].elements, e(n[0], t) && (r = n[0]);\n return r;\n }, i = function (t) {\n return r(t) ? \"script\" : n(t) ? \"stylesheet\" : void 0;\n }, o = function (t) {\n return \"reload\" === t.getAttribute(\"data-turbolinks-track\");\n }, r = function (t) {\n var e;\n return e = t.tagName.toLowerCase(), \"script\" === e;\n }, n = function (t) {\n var e;\n return e = t.tagName.toLowerCase(), \"style\" === e || \"link\" === e && \"stylesheet\" === t.getAttribute(\"rel\");\n }, e = function (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 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 for (o = this.getPermanentElements(), i = [], r = 0, n = o.length; n > r; r++) e = o[r], t.getPermanentElementById(e.id) && i.push(e);\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 e.Renderer = function () {\n function e() {}\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 (t, e) {\n var r, n, o, i, s, a, u;\n for (i = e.attributes, a = [], r = 0, n = i.length; n > r; r++) s = i[r], o = s.name, u = s.value, a.push(t.setAttribute(o, u));\n return a;\n }, e;\n }();\n }.call(this), function () {\n var t,\n r,\n n = function (t, e) {\n function r() {\n this.constructor = t;\n }\n for (var n in e) o.call(e, n) && (t[n] = e[n]);\n return r.prototype = e.prototype, t.prototype = new r(), t.__super__ = e.prototype, t;\n },\n o = {}.hasOwnProperty;\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 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 for (n = this.getNewHeadStylesheetElements(), o = [], e = 0, r = n.length; r > e; e++) t = n[e], o.push(document.head.appendChild(t));\n return o;\n }, o.prototype.copyNewHeadScriptElements = function () {\n var t, e, r, n, o;\n for (n = this.getNewHeadScriptElements(), o = [], e = 0, r = n.length; r > e; e++) t = n[e], o.push(document.head.appendChild(this.createScriptElement(t)));\n return o;\n }, o.prototype.removeCurrentHeadProvisionalElements = function () {\n var t, e, r, n, o;\n for (n = this.getCurrentHeadProvisionalElements(), o = [], e = 0, r = n.length; r > e; e++) t = n[e], o.push(document.head.removeChild(t));\n return o;\n }, o.prototype.copyNewHeadProvisionalElements = function () {\n var t, e, r, n, o;\n for (n = this.getNewHeadProvisionalElements(), o = [], e = 0, r = n.length; r > e; e++) t = n[e], o.push(document.head.appendChild(t));\n return o;\n }, o.prototype.relocateCurrentBodyPermanentElements = function () {\n var e, n, o, i, s, a, u;\n for (a = this.getCurrentBodyPermanentElements(), u = [], e = 0, n = a.length; n > e; e++) i = a[e], s = t(i), o = this.newSnapshot.getPermanentElementById(i.id), r(i, s.element), r(o, i), u.push(s);\n return u;\n }, o.prototype.replacePlaceholderElementsWithClonedPermanentElements = function (t) {\n var e, n, o, i, s, a, u;\n for (u = [], o = 0, i = t.length; i > o; o++) a = t[o], n = a.element, s = a.permanentElement, e = s.cloneNode(!0), u.push(r(n, e));\n return u;\n }, o.prototype.activateNewBodyScriptElements = function () {\n var t, e, n, o, i, s;\n for (i = this.getNewBodyScriptElements(), s = [], e = 0, o = i.length; o > e; e++) n = i[e], t = this.createScriptElement(n), s.push(r(n, t));\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) {\n var e;\n return e = document.createElement(\"meta\"), e.setAttribute(\"name\", \"turbolinks-permanent-placeholder\"), e.setAttribute(\"content\", t.id), {\n element: e,\n permanentElement: t\n };\n }, r = function (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, e) {\n function n() {\n this.constructor = t;\n }\n for (var o in e) r.call(e, o) && (t[o] = e[o]);\n return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n },\n r = {}.hasOwnProperty;\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 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 for (n = this.getScriptElements(), i = [], e = 0, r = n.length; r > e; e++) o = n[e], t = this.createScriptElement(o), i.push(o.parentNode.replaceChild(t, o));\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 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, e) {\n return function () {\n return t.apply(e, arguments);\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 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 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 for (n = this.keys.splice(this.size), o = [], t = 0, r = n.length; r > t; t++) e = n[t], o.push(delete this.snapshots[e]);\n return o;\n }, r = function (t) {\n return e.Location.wrap(t).toCacheKey();\n }, t;\n }();\n }.call(this), function () {\n var t = function (t, e) {\n return function () {\n return t.apply(e, arguments);\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 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 (t) {\n switch (t) {\n case \"replace\":\n return \"replaceHistoryWithLocationAndRestorationIdentifier\";\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, e) {\n return function () {\n return t.apply(e, arguments);\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 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;) if (t === document.body) return console.warn(\"You are loading Turbolinks from a