{"version":3,"sources":["webpack:///./node_modules/@tiptap/core/node_modules/prosemirror-view/dist/index.js"],"names":["domIndex","node","index","previousSibling","parentNode","parent","assignedSlot","nodeType","host","reusedRange","textRange","from","to","range","document","createRange","setEnd","nodeValue","length","setStart","isEquivalentPosition","off","targetNode","targetOff","scanFor","atomElements","dir","nodeSize","hasBlockDesc","test","nodeName","contentEditable","childNodes","isOnEdge","offset","atStart","atEnd","dom","desc","cur","pmViewDesc","isBlock","contentDOM","selectionCollapsed","domSel","focusNode","focusOffset","anchorNode","anchorOffset","keyEvent","keyCode","key","event","createEvent","initEvent","code","deepActiveElement","doc","elt","activeElement","shadowRoot","nav","navigator","agent","userAgent","ie_edge","exec","ie_upto10","ie_11up","ie","ie_version","documentMode","gecko","_chrome","chrome","chrome_version","safari","vendor","ios","maxTouchPoints","mac","platform","android","webkit","documentElement","style","webkit_version","windowRect","left","right","clientWidth","top","bottom","clientHeight","getSide","value","side","clientRect","rect","getBoundingClientRect","scaleX","width","offsetWidth","scaleY","height","offsetHeight","scrollRectIntoView","view","startDOM","scrollThreshold","someProp","scrollMargin","ownerDocument","atTop","body","bounding","moveX","moveY","defaultView","scrollBy","startX","scrollLeft","startY","scrollTop","dX","dY","storeScrollPos","refDOM","refTop","Math","max","x","y","min","innerHeight","root","elementFromPoint","contains","localRect","stack","scrollStack","push","resetScrollPos","newRefTop","restoreScrollStack","dTop","i","preventScrollSupported","focusPreventScroll","setActive","focus","stored","preventScroll","undefined","findOffsetInNode","coords","closest","coordsClosest","dxClosest","rowBot","rowTop","child","firstChild","childIndex","nextSibling","rects","getClientRects","dx","findOffsetInText","len","singleRect","inRect","targetKludge","posFromElement","bias","docView","posFromDOM","posFromCaret","outside","nearestDesc","posBefore","posAfter","element","box","startI","floor","j","posAtCoords","caretPositionFromPoint","pos","offsetNode","_","caretRangeFromPoint","startContainer","startOffset","p","draggable","next","lastChild","state","content","size","inside","posAtStart","border","target","BIDI","coordsAtPos","atom","domFromPos","supportEmptyRange","takeSide","flattenV","rectBefore","rectAfter","$dom","resolve","inlineContent","before","flattenH","after","ignoreForCoords","withFlushedState","f","viewState","active","updateState","endOfTextblockVertical","sel","selection","$pos","$from","$to","nearest","boxes","maybeRTL","endOfTextblockHorizontal","$head","isTextblock","parentOffset","domSelection","textContent","modify","oldNode","oldOff","domSelectionRange","oldBidiLevel","caretBidiLevel","parentDOM","depth","domAfterPos","newNode","newOff","result","collapse","extend","cachedState","cachedDir","cachedResult","endOfTextblock","NOT_DIRTY","CHILD_DIRTY","CONTENT_DIRTY","NODE_DIRTY","ViewDesc","children","this","dirty","widget","mark","outerDeco","innerDeco","destroy","posBeforeChild","domBefore","domAfter","posAtEnd","compareDocumentPosition","search","onlyNodes","first","nodeDOM","getDesc","scan","localPosFromDOM","end","descAt","prev","curPos","TrailingHackViewDesc","WidgetViewDesc","enter","domAtom","base","fromOffset","toOffset","childBase","parseRange","emptyChildAt","RangeError","anchor","head","force","setSelection","anchorDOM","headDOM","getSelection","brKludge","domSelExtended","tmp","removeAllRanges","addRange","mutation","type","startInside","endInside","contentLost","markDirty","level","self","toDOM","spec","raw","wrap","createElement","appendChild","classList","add","super","eq","ignore","stop","stopEvent","ignoreSelection","CompositionViewDesc","textDOM","text","mut","oldValue","MarkViewDesc","inline","custom","nodeViews","name","renderSpec","reparseInView","attrs","contentElement","copy","create","nodes","replaceNodes","NodeViewDesc","updateChildren","descObj","isText","createTextNode","hasAttribute","applyOuterDeco","CustomNodeViewDesc","TextViewDesc","rule","whitespace","preserveWhitespace","getContent","empty","sameOuterDeco","isLeaf","composition","composing","localCompositionInfo","localComposition","compositionInChild","updater","ViewTreeUpdater","iterDeco","insideNode","marks","syncToMarks","childCount","none","placeWidget","compIndex","findNodeMatch","findIndexWithChild","updateNodeAt","updateNextNode","addNode","addTextblockHacks","destroyRest","changed","protectLocalComposition","renderDescs","iosHacks","textNode","nearbyTextNode","textPos","findTextInFragment","topNode","removeChild","input","compositionNodes","sameMarkup","updateInner","updateOuterDeco","needsWrap","oldDOM","patchOuterDeco","computeOuterDeco","remove","removeAttribute","isAtom","docViewDesc","skip","pmIsDeco","inParent","trackWrites","n","cut","update","selectNode","deselectNode","ignoreMutation","descs","written","childDOM","rm","insertBefore","OuterDecoLevel","prototype","Object","noDeco","val","isInline","class","outerDOM","prevComputed","curComputed","curDOM","deco","toLowerCase","patchAttributes","setAttribute","prevList","split","filter","Boolean","curList","indexOf","m","prop","removeProperty","cssText","a","b","lock","preMatch","start","splice","destroyBetween","keep","maxKeep","matchesMark","spanning","pop","found","markDesc","targetDesc","matches","matchesNode","e","matched","has","domNode","get","nextDOM","locked","matchesWidget","requiresGeckoHackNode","addHackNode","matchesHack","className","alt","hack","frag","parentDesc","curDesc","descI","fI","Map","outer","set","reverse","compareSide","onWidget","onNode","locals","forChild","decoIndex","restNode","parentIndex","widgets","sort","cutAt","d","slice","oldCSS","window","getComputedStyle","listStyle","childStart","str","lastIndexOf","replacement","selectionFromDOM","origin","inWidget","$anchor","nearestDescNode","isSelectable","selectionBetween","editorOwnsSelection","editable","hasFocus","hasSelection","selectionToDOM","syncNodeSelection","mouseDown","allowDefault","curSel","domObserver","currentSelection","delayedSelectionSync","setCurSelection","disconnectSelection","cursorWrapper","selectCursorWrapper","resetEditableFrom","resetEditableTo","brokenSelectBetweenUneditable","temporarilyEditableNear","resetEditable","visible","removeClassOnSelectionChange","connectSelection","setEditable","wasDraggable","removeEventListener","hideSelectionGuard","addEventListener","setTimeout","img","disabled","lastSelectedViewDesc","clearNodeSelection","between","hasFocusAndSelection","anchorInRightPlace","moveSelectionBlock","$side","$start","findFrom","apply","dispatch","tr","scrollIntoView","selectHorizontally","mods","textOffset","nodeBefore","nodeAfter","nodePos","nodeLen","isIgnorable","skipIgnoredNodesLeft","moveNode","moveOffset","isBlockNode","setSelFocus","skipIgnoredNodesRight","selectVertically","beyond","near","stopNativeHorizontalDelete","sameParent","nextNode","delete","switchEditable","safariDownArrowBug","getMods","ctrlKey","metaKey","altKey","shiftKey","captureKeyDown","serializeForClipboard","context","openStart","openEnd","defaultAttrs","serializer","fromSchema","schema","detachedDoc","serializeFragment","wrappers","wrapMap","wrapper","JSON","stringify","textBetween","parseFromClipboard","html","plainText","$context","inCode","asText","replace","parsed","forEach","block","serializeNode","readHTML","restoreReplacedSpaces","contextNode","querySelector","sliceData","getAttribute","parser","parseSlice","inlineParents","addContext","closeSlice","maxOpen","normalizeSiblings","isolating","fragment","lastWrap","match","contentMatchAt","inLast","findWrapping","addToSibling","closeRight","wrapped","withWrappers","matchType","sibling","inner","replaceChild","append","fill","fillBefore","closeRange","thead","tbody","tfoot","caption","colgroup","col","td","th","_detachedDoc","implementation","createHTMLDocument","metas","firstTag","map","join","innerHTML","querySelectorAll","array","parse","hasRequiredAttrs","handlers","editHandlers","passiveHandlers","touchstart","touchmove","InputState","lastKeyCode","lastKeyCodeTime","lastClick","time","lastSelectionOrigin","lastSelectionTime","lastIOSEnter","lastIOSEnterFallbackTimeout","lastFocus","lastTouch","lastAndroidDelete","composingTimeout","compositionEndedAt","domChangeCount","eventHandlers","initInput","handler","eventBelongsToView","runCustomHandler","passive","ensureListeners","setSelectionOrigin","Date","now","destroyInput","clearTimeout","currentHandlers","defaultPrevented","bubbles","dispatchEvent","eventCoords","clientX","clientY","isNear","click","dy","runHandlerOnContext","propName","updateSelection","focused","setMeta","selectClickedLeaf","selectClickedNode","selectedNode","selectAt","handleSingleClick","handleDoubleClick","handleTripleClick","defaultTripleClick","button","forceDOMFlush","endComposition","keydown","_event","inOrNearComposition","forceFlush","preventDefault","keyup","keypress","charCode","String","fromCharCode","insertText","selectNodeModifier","mousedown","flushed","done","MouseDown","targetPos","mightDrag","startDoc","nodeAt","selectable","addAttr","setUneditable","up","bind","move","updateAllowDefault","abs","buttons","timeStamp","contextmenu","timeoutComposition","scheduleComposeEnd","delay","clearComposition","timestampFromCustomEvent","markParentsDirty","forceUpdate","flushingSoon","captureCopy","selectNodeContents","blur","compositionstart","compositionupdate","flush","storedMarks","some","inclusive","markCursor","compositionend","brokenClipboardAPI","sliceSingleNode","capturePaste","doPaste","singleNode","replaceSelectionWith","replaceSelection","data","clipboardData","clearData","setData","deleteSelection","paste","getData","Dragging","dragCopyModifier","dragstart","dataTransfer","effectAllowed","dragging","dragend","dragover","dragenter","drop","eventPos","$mouse","insertPos","mapping","isNode","beforeInsert","replaceRangeWith","replaceRange","maps","_from","_to","_newFrom","newTo","relatedTarget","clear","beforeinput","inputType","flushSoon","$cursor","compareObjs","WidgetType","noSpec","span","oldOffset","deleted","mapResult","Decoration","other","InlineType","inclusiveStart","inclusiveEnd","NodeType","findIndex","DecorationSet","local","decorations","buildTree","predicate","findInner","childOff","options","mapInner","newLocal","mapped","valid","onRemove","mapChildren","byPos","addInner","childNode","childOffset","baseOffset","takeSpansForNode","moveSpans","withoutNulls","concat","removeInner","removed","dec","localSet","DecorationGroup","removeOverlap","localsInner","is","members","mappedDecos","member","sorted","oldChildren","moved","oldStart","oldEnd","newStart","newEnd","dSize","mustRebuild","fromLocal","toLocal","maybeChild","mapAndGatherRemainingDecorations","built","spans","gather","hasNulls","localStart","subtree","working","insertAhead","viewDecorations","observeOptions","childList","characterData","characterDataOldValue","attributes","attributeOldValue","useCharData","SelectionState","DOMObserver","handleDOMChange","queue","observer","onCharData","suppressingSelectionUpdates","MutationObserver","mutations","removedNodes","prevValue","onSelectionChange","takeRecords","observe","take","disconnect","container","ancestors","Set","newSel","ignoreSelectionChange","typeOver","added","registerMutation","brs","readSel","scrollToSelection","checkCSS","attributeName","addedNodes","Array","call","cssChecked","WeakMap","cssCheckWarned","whiteSpace","console","safariShadowSelectionRange","read","stopImmediatePropagation","getTargetRanges","execCommand","endContainer","endOffset","currentAnchor","domAtPos","parseBetween","from_","to_","find","topMatch","topOpen","findPositions","ruleFromNode","parseRule","readDOMChange","$before","shared","sharedDepth","preferredPos","preferredSide","compare","change","findDiff","endA","endB","resolveSelection","nextSel","resolveNoCache","$fromA","inlineChange","looksLikeJoin","suppressSelectionUpdates","markChange","chFrom","chTo","marksAcross","isMarkChange","addMark","removeMark","ensureMarks","parsedSel","curMarks","prevMarks","removeFromSet","addToSet","updated","old","$newStart","$newEnd","skipClosingAndOpening","$next","fromEnd","mayOpen","indexAfter","findDiffStart","findDiffEnd","adjust","EditorView","place","props","_root","mounted","prevDirectPlugins","pluginViews","_props","directPlugins","plugins","checkStateComponent","mount","getEditable","updateCursorWrapper","buildNodeViews","computeDocDeco","updatePluginViews","handleDOMEvents","prevProps","updateStateInner","redraw","updateSel","pluginsChanged","changedNodeViews","scroll","updateDoc","oldScrollPos","overflowAnchor","forceSelUpdate","selectionContextChanged","chromeKludge","prevState","pluginView","destroyPluginViews","plugin","parentElement","cached","getPrototypeOf","dispatchTransaction","contenteditable","translate","attr","sel1","sel2","obj","hasOwnProperty","nA","nB","filterTransaction","appendTransaction"],"mappings":"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","file":"js/group-account~group-homework~group-lesson~group-profile~group-teacher-approval~2c23c3ab.ab990aa6.js","sourcesContent":["import { TextSelection, NodeSelection, Selection, AllSelection } from 'prosemirror-state';\nimport { DOMSerializer, Fragment, Mark, Slice, DOMParser } from 'prosemirror-model';\nimport { dropPoint } from 'prosemirror-transform';\n\nconst domIndex = function (node) {\n for (var index = 0;; index++) {\n node = node.previousSibling;\n if (!node)\n return index;\n }\n};\nconst parentNode = function (node) {\n let parent = node.assignedSlot || node.parentNode;\n return parent && parent.nodeType == 11 ? parent.host : parent;\n};\nlet reusedRange = null;\n// Note that this will always return the same range, because DOM range\n// objects are every expensive, and keep slowing down subsequent DOM\n// updates, for some reason.\nconst textRange = function (node, from, to) {\n let range = reusedRange || (reusedRange = document.createRange());\n range.setEnd(node, to == null ? node.nodeValue.length : to);\n range.setStart(node, from || 0);\n return range;\n};\n// Scans forward and backward through DOM positions equivalent to the\n// given one to see if the two are in the same place (i.e. after a\n// text node vs at the end of that text node)\nconst isEquivalentPosition = function (node, off, targetNode, targetOff) {\n return targetNode && (scanFor(node, off, targetNode, targetOff, -1) ||\n scanFor(node, off, targetNode, targetOff, 1));\n};\nconst atomElements = /^(img|br|input|textarea|hr)$/i;\nfunction scanFor(node, off, targetNode, targetOff, dir) {\n for (;;) {\n if (node == targetNode && off == targetOff)\n return true;\n if (off == (dir < 0 ? 0 : nodeSize(node))) {\n let parent = node.parentNode;\n if (!parent || parent.nodeType != 1 || hasBlockDesc(node) || atomElements.test(node.nodeName) ||\n node.contentEditable == \"false\")\n return false;\n off = domIndex(node) + (dir < 0 ? 0 : 1);\n node = parent;\n }\n else if (node.nodeType == 1) {\n node = node.childNodes[off + (dir < 0 ? -1 : 0)];\n if (node.contentEditable == \"false\")\n return false;\n off = dir < 0 ? nodeSize(node) : 0;\n }\n else {\n return false;\n }\n }\n}\nfunction nodeSize(node) {\n return node.nodeType == 3 ? node.nodeValue.length : node.childNodes.length;\n}\nfunction isOnEdge(node, offset, parent) {\n for (let atStart = offset == 0, atEnd = offset == nodeSize(node); atStart || atEnd;) {\n if (node == parent)\n return true;\n let index = domIndex(node);\n node = node.parentNode;\n if (!node)\n return false;\n atStart = atStart && index == 0;\n atEnd = atEnd && index == nodeSize(node);\n }\n}\nfunction hasBlockDesc(dom) {\n let desc;\n for (let cur = dom; cur; cur = cur.parentNode)\n if (desc = cur.pmViewDesc)\n break;\n return desc && desc.node && desc.node.isBlock && (desc.dom == dom || desc.contentDOM == dom);\n}\n// Work around Chrome issue https://bugs.chromium.org/p/chromium/issues/detail?id=447523\n// (isCollapsed inappropriately returns true in shadow dom)\nconst selectionCollapsed = function (domSel) {\n return domSel.focusNode && isEquivalentPosition(domSel.focusNode, domSel.focusOffset, domSel.anchorNode, domSel.anchorOffset);\n};\nfunction keyEvent(keyCode, key) {\n let event = document.createEvent(\"Event\");\n event.initEvent(\"keydown\", true, true);\n event.keyCode = keyCode;\n event.key = event.code = key;\n return event;\n}\nfunction deepActiveElement(doc) {\n let elt = doc.activeElement;\n while (elt && elt.shadowRoot)\n elt = elt.shadowRoot.activeElement;\n return elt;\n}\n\nconst nav = typeof navigator != \"undefined\" ? navigator : null;\nconst doc = typeof document != \"undefined\" ? document : null;\nconst agent = (nav && nav.userAgent) || \"\";\nconst ie_edge = /Edge\\/(\\d+)/.exec(agent);\nconst ie_upto10 = /MSIE \\d/.exec(agent);\nconst ie_11up = /Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(agent);\nconst ie = !!(ie_upto10 || ie_11up || ie_edge);\nconst ie_version = ie_upto10 ? document.documentMode : ie_11up ? +ie_11up[1] : ie_edge ? +ie_edge[1] : 0;\nconst gecko = !ie && /gecko\\/(\\d+)/i.test(agent);\ngecko && +(/Firefox\\/(\\d+)/.exec(agent) || [0, 0])[1];\nconst _chrome = !ie && /Chrome\\/(\\d+)/.exec(agent);\nconst chrome = !!_chrome;\nconst chrome_version = _chrome ? +_chrome[1] : 0;\nconst safari = !ie && !!nav && /Apple Computer/.test(nav.vendor);\n// Is true for both iOS and iPadOS for convenience\nconst ios = safari && (/Mobile\\/\\w+/.test(agent) || !!nav && nav.maxTouchPoints > 2);\nconst mac = ios || (nav ? /Mac/.test(nav.platform) : false);\nconst android = /Android \\d/.test(agent);\nconst webkit = !!doc && \"webkitFontSmoothing\" in doc.documentElement.style;\nconst webkit_version = webkit ? +(/\\bAppleWebKit\\/(\\d+)/.exec(navigator.userAgent) || [0, 0])[1] : 0;\n\nfunction windowRect(doc) {\n return { left: 0, right: doc.documentElement.clientWidth,\n top: 0, bottom: doc.documentElement.clientHeight };\n}\nfunction getSide(value, side) {\n return typeof value == \"number\" ? value : value[side];\n}\nfunction clientRect(node) {\n let rect = node.getBoundingClientRect();\n // Adjust for elements with style \"transform: scale()\"\n let scaleX = (rect.width / node.offsetWidth) || 1;\n let scaleY = (rect.height / node.offsetHeight) || 1;\n // Make sure scrollbar width isn't included in the rectangle\n return { left: rect.left, right: rect.left + node.clientWidth * scaleX,\n top: rect.top, bottom: rect.top + node.clientHeight * scaleY };\n}\nfunction scrollRectIntoView(view, rect, startDOM) {\n let scrollThreshold = view.someProp(\"scrollThreshold\") || 0, scrollMargin = view.someProp(\"scrollMargin\") || 5;\n let doc = view.dom.ownerDocument;\n for (let parent = startDOM || view.dom;; parent = parentNode(parent)) {\n if (!parent)\n break;\n if (parent.nodeType != 1)\n continue;\n let elt = parent;\n let atTop = elt == doc.body;\n let bounding = atTop ? windowRect(doc) : clientRect(elt);\n let moveX = 0, moveY = 0;\n if (rect.top < bounding.top + getSide(scrollThreshold, \"top\"))\n moveY = -(bounding.top - rect.top + getSide(scrollMargin, \"top\"));\n else if (rect.bottom > bounding.bottom - getSide(scrollThreshold, \"bottom\"))\n moveY = rect.bottom - bounding.bottom + getSide(scrollMargin, \"bottom\");\n if (rect.left < bounding.left + getSide(scrollThreshold, \"left\"))\n moveX = -(bounding.left - rect.left + getSide(scrollMargin, \"left\"));\n else if (rect.right > bounding.right - getSide(scrollThreshold, \"right\"))\n moveX = rect.right - bounding.right + getSide(scrollMargin, \"right\");\n if (moveX || moveY) {\n if (atTop) {\n doc.defaultView.scrollBy(moveX, moveY);\n }\n else {\n let startX = elt.scrollLeft, startY = elt.scrollTop;\n if (moveY)\n elt.scrollTop += moveY;\n if (moveX)\n elt.scrollLeft += moveX;\n let dX = elt.scrollLeft - startX, dY = elt.scrollTop - startY;\n rect = { left: rect.left - dX, top: rect.top - dY, right: rect.right - dX, bottom: rect.bottom - dY };\n }\n }\n if (atTop)\n break;\n }\n}\n// Store the scroll position of the editor's parent nodes, along with\n// the top position of an element near the top of the editor, which\n// will be used to make sure the visible viewport remains stable even\n// when the size of the content above changes.\nfunction storeScrollPos(view) {\n let rect = view.dom.getBoundingClientRect(), startY = Math.max(0, rect.top);\n let refDOM, refTop;\n for (let x = (rect.left + rect.right) / 2, y = startY + 1; y < Math.min(innerHeight, rect.bottom); y += 5) {\n let dom = view.root.elementFromPoint(x, y);\n if (!dom || dom == view.dom || !view.dom.contains(dom))\n continue;\n let localRect = dom.getBoundingClientRect();\n if (localRect.top >= startY - 20) {\n refDOM = dom;\n refTop = localRect.top;\n break;\n }\n }\n return { refDOM: refDOM, refTop: refTop, stack: scrollStack(view.dom) };\n}\nfunction scrollStack(dom) {\n let stack = [], doc = dom.ownerDocument;\n for (let cur = dom; cur; cur = parentNode(cur)) {\n stack.push({ dom: cur, top: cur.scrollTop, left: cur.scrollLeft });\n if (dom == doc)\n break;\n }\n return stack;\n}\n// Reset the scroll position of the editor's parent nodes to that what\n// it was before, when storeScrollPos was called.\nfunction resetScrollPos({ refDOM, refTop, stack }) {\n let newRefTop = refDOM ? refDOM.getBoundingClientRect().top : 0;\n restoreScrollStack(stack, newRefTop == 0 ? 0 : newRefTop - refTop);\n}\nfunction restoreScrollStack(stack, dTop) {\n for (let i = 0; i < stack.length; i++) {\n let { dom, top, left } = stack[i];\n if (dom.scrollTop != top + dTop)\n dom.scrollTop = top + dTop;\n if (dom.scrollLeft != left)\n dom.scrollLeft = left;\n }\n}\nlet preventScrollSupported = null;\n// Feature-detects support for .focus({preventScroll: true}), and uses\n// a fallback kludge when not supported.\nfunction focusPreventScroll(dom) {\n if (dom.setActive)\n return dom.setActive(); // in IE\n if (preventScrollSupported)\n return dom.focus(preventScrollSupported);\n let stored = scrollStack(dom);\n dom.focus(preventScrollSupported == null ? {\n get preventScroll() {\n preventScrollSupported = { preventScroll: true };\n return true;\n }\n } : undefined);\n if (!preventScrollSupported) {\n preventScrollSupported = false;\n restoreScrollStack(stored, 0);\n }\n}\nfunction findOffsetInNode(node, coords) {\n let closest, dxClosest = 2e8, coordsClosest, offset = 0;\n let rowBot = coords.top, rowTop = coords.top;\n for (let child = node.firstChild, childIndex = 0; child; child = child.nextSibling, childIndex++) {\n let rects;\n if (child.nodeType == 1)\n rects = child.getClientRects();\n else if (child.nodeType == 3)\n rects = textRange(child).getClientRects();\n else\n continue;\n for (let i = 0; i < rects.length; i++) {\n let rect = rects[i];\n if (rect.top <= rowBot && rect.bottom >= rowTop) {\n rowBot = Math.max(rect.bottom, rowBot);\n rowTop = Math.min(rect.top, rowTop);\n let dx = rect.left > coords.left ? rect.left - coords.left\n : rect.right < coords.left ? coords.left - rect.right : 0;\n if (dx < dxClosest) {\n closest = child;\n dxClosest = dx;\n coordsClosest = dx && closest.nodeType == 3 ? {\n left: rect.right < coords.left ? rect.right : rect.left,\n top: coords.top\n } : coords;\n if (child.nodeType == 1 && dx)\n offset = childIndex + (coords.left >= (rect.left + rect.right) / 2 ? 1 : 0);\n continue;\n }\n }\n if (!closest && (coords.left >= rect.right && coords.top >= rect.top ||\n coords.left >= rect.left && coords.top >= rect.bottom))\n offset = childIndex + 1;\n }\n }\n if (closest && closest.nodeType == 3)\n return findOffsetInText(closest, coordsClosest);\n if (!closest || (dxClosest && closest.nodeType == 1))\n return { node, offset };\n return findOffsetInNode(closest, coordsClosest);\n}\nfunction findOffsetInText(node, coords) {\n let len = node.nodeValue.length;\n let range = document.createRange();\n for (let i = 0; i < len; i++) {\n range.setEnd(node, i + 1);\n range.setStart(node, i);\n let rect = singleRect(range, 1);\n if (rect.top == rect.bottom)\n continue;\n if (inRect(coords, rect))\n return { node, offset: i + (coords.left >= (rect.left + rect.right) / 2 ? 1 : 0) };\n }\n return { node, offset: 0 };\n}\nfunction inRect(coords, rect) {\n return coords.left >= rect.left - 1 && coords.left <= rect.right + 1 &&\n coords.top >= rect.top - 1 && coords.top <= rect.bottom + 1;\n}\nfunction targetKludge(dom, coords) {\n let parent = dom.parentNode;\n if (parent && /^li$/i.test(parent.nodeName) && coords.left < dom.getBoundingClientRect().left)\n return parent;\n return dom;\n}\nfunction posFromElement(view, elt, coords) {\n let { node, offset } = findOffsetInNode(elt, coords), bias = -1;\n if (node.nodeType == 1 && !node.firstChild) {\n let rect = node.getBoundingClientRect();\n bias = rect.left != rect.right && coords.left > (rect.left + rect.right) / 2 ? 1 : -1;\n }\n return view.docView.posFromDOM(node, offset, bias);\n}\nfunction posFromCaret(view, node, offset, coords) {\n // Browser (in caretPosition/RangeFromPoint) will agressively\n // normalize towards nearby inline nodes. Since we are interested in\n // positions between block nodes too, we first walk up the hierarchy\n // of nodes to see if there are block nodes that the coordinates\n // fall outside of. If so, we take the position before/after that\n // block. If not, we call `posFromDOM` on the raw node/offset.\n let outside = -1;\n for (let cur = node;;) {\n if (cur == view.dom)\n break;\n let desc = view.docView.nearestDesc(cur, true);\n if (!desc)\n return null;\n if (desc.node.isBlock && desc.parent) {\n let rect = desc.dom.getBoundingClientRect();\n if (rect.left > coords.left || rect.top > coords.top)\n outside = desc.posBefore;\n else if (rect.right < coords.left || rect.bottom < coords.top)\n outside = desc.posAfter;\n else\n break;\n }\n cur = desc.dom.parentNode;\n }\n return outside > -1 ? outside : view.docView.posFromDOM(node, offset, 1);\n}\nfunction elementFromPoint(element, coords, box) {\n let len = element.childNodes.length;\n if (len && box.top < box.bottom) {\n for (let startI = Math.max(0, Math.min(len - 1, Math.floor(len * (coords.top - box.top) / (box.bottom - box.top)) - 2)), i = startI;;) {\n let child = element.childNodes[i];\n if (child.nodeType == 1) {\n let rects = child.getClientRects();\n for (let j = 0; j < rects.length; j++) {\n let rect = rects[j];\n if (inRect(coords, rect))\n return elementFromPoint(child, coords, rect);\n }\n }\n if ((i = (i + 1) % len) == startI)\n break;\n }\n }\n return element;\n}\n// Given an x,y position on the editor, get the position in the document.\nfunction posAtCoords(view, coords) {\n let doc = view.dom.ownerDocument, node, offset = 0;\n if (doc.caretPositionFromPoint) {\n try { // Firefox throws for this call in hard-to-predict circumstances (#994)\n let pos = doc.caretPositionFromPoint(coords.left, coords.top);\n if (pos)\n ({ offsetNode: node, offset } = pos);\n }\n catch (_) { }\n }\n if (!node && doc.caretRangeFromPoint) {\n let range = doc.caretRangeFromPoint(coords.left, coords.top);\n if (range)\n ({ startContainer: node, startOffset: offset } = range);\n }\n let elt = (view.root.elementFromPoint ? view.root : doc)\n .elementFromPoint(coords.left, coords.top);\n let pos;\n if (!elt || !view.dom.contains(elt.nodeType != 1 ? elt.parentNode : elt)) {\n let box = view.dom.getBoundingClientRect();\n if (!inRect(coords, box))\n return null;\n elt = elementFromPoint(view.dom, coords, box);\n if (!elt)\n return null;\n }\n // Safari's caretRangeFromPoint returns nonsense when on a draggable element\n if (safari) {\n for (let p = elt; node && p; p = parentNode(p))\n if (p.draggable)\n node = undefined;\n }\n elt = targetKludge(elt, coords);\n if (node) {\n if (gecko && node.nodeType == 1) {\n // Firefox will sometimes return offsets into nodes, which\n // have no actual children, from caretPositionFromPoint (#953)\n offset = Math.min(offset, node.childNodes.length);\n // It'll also move the returned position before image nodes,\n // even if those are behind it.\n if (offset < node.childNodes.length) {\n let next = node.childNodes[offset], box;\n if (next.nodeName == \"IMG\" && (box = next.getBoundingClientRect()).right <= coords.left &&\n box.bottom > coords.top)\n offset++;\n }\n }\n // Suspiciously specific kludge to work around caret*FromPoint\n // never returning a position at the end of the document\n if (node == view.dom && offset == node.childNodes.length - 1 && node.lastChild.nodeType == 1 &&\n coords.top > node.lastChild.getBoundingClientRect().bottom)\n pos = view.state.doc.content.size;\n // Ignore positions directly after a BR, since caret*FromPoint\n // 'round up' positions that would be more accurately placed\n // before the BR node.\n else if (offset == 0 || node.nodeType != 1 || node.childNodes[offset - 1].nodeName != \"BR\")\n pos = posFromCaret(view, node, offset, coords);\n }\n if (pos == null)\n pos = posFromElement(view, elt, coords);\n let desc = view.docView.nearestDesc(elt, true);\n return { pos, inside: desc ? desc.posAtStart - desc.border : -1 };\n}\nfunction singleRect(target, bias) {\n let rects = target.getClientRects();\n return !rects.length ? target.getBoundingClientRect() : rects[bias < 0 ? 0 : rects.length - 1];\n}\nconst BIDI = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/;\n// Given a position in the document model, get a bounding box of the\n// character at that position, relative to the window.\nfunction coordsAtPos(view, pos, side) {\n let { node, offset, atom } = view.docView.domFromPos(pos, side < 0 ? -1 : 1);\n let supportEmptyRange = webkit || gecko;\n if (node.nodeType == 3) {\n // These browsers support querying empty text ranges. Prefer that in\n // bidi context or when at the end of a node.\n if (supportEmptyRange && (BIDI.test(node.nodeValue) || (side < 0 ? !offset : offset == node.nodeValue.length))) {\n let rect = singleRect(textRange(node, offset, offset), side);\n // Firefox returns bad results (the position before the space)\n // when querying a position directly after line-broken\n // whitespace. Detect this situation and and kludge around it\n if (gecko && offset && /\\s/.test(node.nodeValue[offset - 1]) && offset < node.nodeValue.length) {\n let rectBefore = singleRect(textRange(node, offset - 1, offset - 1), -1);\n if (rectBefore.top == rect.top) {\n let rectAfter = singleRect(textRange(node, offset, offset + 1), -1);\n if (rectAfter.top != rect.top)\n return flattenV(rectAfter, rectAfter.left < rectBefore.left);\n }\n }\n return rect;\n }\n else {\n let from = offset, to = offset, takeSide = side < 0 ? 1 : -1;\n if (side < 0 && !offset) {\n to++;\n takeSide = -1;\n }\n else if (side >= 0 && offset == node.nodeValue.length) {\n from--;\n takeSide = 1;\n }\n else if (side < 0) {\n from--;\n }\n else {\n to++;\n }\n return flattenV(singleRect(textRange(node, from, to), 1), takeSide < 0);\n }\n }\n let $dom = view.state.doc.resolve(pos - (atom || 0));\n // Return a horizontal line in block context\n if (!$dom.parent.inlineContent) {\n if (atom == null && offset && (side < 0 || offset == nodeSize(node))) {\n let before = node.childNodes[offset - 1];\n if (before.nodeType == 1)\n return flattenH(before.getBoundingClientRect(), false);\n }\n if (atom == null && offset < nodeSize(node)) {\n let after = node.childNodes[offset];\n if (after.nodeType == 1)\n return flattenH(after.getBoundingClientRect(), true);\n }\n return flattenH(node.getBoundingClientRect(), side >= 0);\n }\n // Inline, not in text node (this is not Bidi-safe)\n if (atom == null && offset && (side < 0 || offset == nodeSize(node))) {\n let before = node.childNodes[offset - 1];\n let target = before.nodeType == 3 ? textRange(before, nodeSize(before) - (supportEmptyRange ? 0 : 1))\n // BR nodes tend to only return the rectangle before them.\n // Only use them if they are the last element in their parent\n : before.nodeType == 1 && (before.nodeName != \"BR\" || !before.nextSibling) ? before : null;\n if (target)\n return flattenV(singleRect(target, 1), false);\n }\n if (atom == null && offset < nodeSize(node)) {\n let after = node.childNodes[offset];\n while (after.pmViewDesc && after.pmViewDesc.ignoreForCoords)\n after = after.nextSibling;\n let target = !after ? null : after.nodeType == 3 ? textRange(after, 0, (supportEmptyRange ? 0 : 1))\n : after.nodeType == 1 ? after : null;\n if (target)\n return flattenV(singleRect(target, -1), true);\n }\n // All else failed, just try to get a rectangle for the target node\n return flattenV(singleRect(node.nodeType == 3 ? textRange(node) : node, -side), side >= 0);\n}\nfunction flattenV(rect, left) {\n if (rect.width == 0)\n return rect;\n let x = left ? rect.left : rect.right;\n return { top: rect.top, bottom: rect.bottom, left: x, right: x };\n}\nfunction flattenH(rect, top) {\n if (rect.height == 0)\n return rect;\n let y = top ? rect.top : rect.bottom;\n return { top: y, bottom: y, left: rect.left, right: rect.right };\n}\nfunction withFlushedState(view, state, f) {\n let viewState = view.state, active = view.root.activeElement;\n if (viewState != state)\n view.updateState(state);\n if (active != view.dom)\n view.focus();\n try {\n return f();\n }\n finally {\n if (viewState != state)\n view.updateState(viewState);\n if (active != view.dom && active)\n active.focus();\n }\n}\n// Whether vertical position motion in a given direction\n// from a position would leave a text block.\nfunction endOfTextblockVertical(view, state, dir) {\n let sel = state.selection;\n let $pos = dir == \"up\" ? sel.$from : sel.$to;\n return withFlushedState(view, state, () => {\n let { node: dom } = view.docView.domFromPos($pos.pos, dir == \"up\" ? -1 : 1);\n for (;;) {\n let nearest = view.docView.nearestDesc(dom, true);\n if (!nearest)\n break;\n if (nearest.node.isBlock) {\n dom = nearest.dom;\n break;\n }\n dom = nearest.dom.parentNode;\n }\n let coords = coordsAtPos(view, $pos.pos, 1);\n for (let child = dom.firstChild; child; child = child.nextSibling) {\n let boxes;\n if (child.nodeType == 1)\n boxes = child.getClientRects();\n else if (child.nodeType == 3)\n boxes = textRange(child, 0, child.nodeValue.length).getClientRects();\n else\n continue;\n for (let i = 0; i < boxes.length; i++) {\n let box = boxes[i];\n if (box.bottom > box.top + 1 &&\n (dir == \"up\" ? coords.top - box.top > (box.bottom - coords.top) * 2\n : box.bottom - coords.bottom > (coords.bottom - box.top) * 2))\n return false;\n }\n }\n return true;\n });\n}\nconst maybeRTL = /[\\u0590-\\u08ac]/;\nfunction endOfTextblockHorizontal(view, state, dir) {\n let { $head } = state.selection;\n if (!$head.parent.isTextblock)\n return false;\n let offset = $head.parentOffset, atStart = !offset, atEnd = offset == $head.parent.content.size;\n let sel = view.domSelection();\n // If the textblock is all LTR, or the browser doesn't support\n // Selection.modify (Edge), fall back to a primitive approach\n if (!maybeRTL.test($head.parent.textContent) || !sel.modify)\n return dir == \"left\" || dir == \"backward\" ? atStart : atEnd;\n return withFlushedState(view, state, () => {\n // This is a huge hack, but appears to be the best we can\n // currently do: use `Selection.modify` to move the selection by\n // one character, and see if that moves the cursor out of the\n // textblock (or doesn't move it at all, when at the start/end of\n // the document).\n let { focusNode: oldNode, focusOffset: oldOff, anchorNode, anchorOffset } = view.domSelectionRange();\n let oldBidiLevel = sel.caretBidiLevel // Only for Firefox\n ;\n sel.modify(\"move\", dir, \"character\");\n let parentDOM = $head.depth ? view.docView.domAfterPos($head.before()) : view.dom;\n let { focusNode: newNode, focusOffset: newOff } = view.domSelectionRange();\n let result = newNode && !parentDOM.contains(newNode.nodeType == 1 ? newNode : newNode.parentNode) ||\n (oldNode == newNode && oldOff == newOff);\n // Restore the previous selection\n try {\n sel.collapse(anchorNode, anchorOffset);\n if (oldNode && (oldNode != anchorNode || oldOff != anchorOffset) && sel.extend)\n sel.extend(oldNode, oldOff);\n }\n catch (_) { }\n if (oldBidiLevel != null)\n sel.caretBidiLevel = oldBidiLevel;\n return result;\n });\n}\nlet cachedState = null;\nlet cachedDir = null;\nlet cachedResult = false;\nfunction endOfTextblock(view, state, dir) {\n if (cachedState == state && cachedDir == dir)\n return cachedResult;\n cachedState = state;\n cachedDir = dir;\n return cachedResult = dir == \"up\" || dir == \"down\"\n ? endOfTextblockVertical(view, state, dir)\n : endOfTextblockHorizontal(view, state, dir);\n}\n\n// View descriptions are data structures that describe the DOM that is\n// used to represent the editor's content. They are used for:\n//\n// - Incremental redrawing when the document changes\n//\n// - Figuring out what part of the document a given DOM position\n// corresponds to\n//\n// - Wiring in custom implementations of the editing interface for a\n// given node\n//\n// They form a doubly-linked mutable tree, starting at `view.docView`.\nconst NOT_DIRTY = 0, CHILD_DIRTY = 1, CONTENT_DIRTY = 2, NODE_DIRTY = 3;\n// Superclass for the various kinds of descriptions. Defines their\n// basic structure and shared methods.\nclass ViewDesc {\n constructor(parent, children, dom, \n // This is the node that holds the child views. It may be null for\n // descs that don't have children.\n contentDOM) {\n this.parent = parent;\n this.children = children;\n this.dom = dom;\n this.contentDOM = contentDOM;\n this.dirty = NOT_DIRTY;\n // An expando property on the DOM node provides a link back to its\n // description.\n dom.pmViewDesc = this;\n }\n // Used to check whether a given description corresponds to a\n // widget/mark/node.\n matchesWidget(widget) { return false; }\n matchesMark(mark) { return false; }\n matchesNode(node, outerDeco, innerDeco) { return false; }\n matchesHack(nodeName) { return false; }\n // When parsing in-editor content (in domchange.js), we allow\n // descriptions to determine the parse rules that should be used to\n // parse them.\n parseRule() { return null; }\n // Used by the editor's event handler to ignore events that come\n // from certain descs.\n stopEvent(event) { return false; }\n // The size of the content represented by this desc.\n get size() {\n let size = 0;\n for (let i = 0; i < this.children.length; i++)\n size += this.children[i].size;\n return size;\n }\n // For block nodes, this represents the space taken up by their\n // start/end tokens.\n get border() { return 0; }\n destroy() {\n this.parent = undefined;\n if (this.dom.pmViewDesc == this)\n this.dom.pmViewDesc = undefined;\n for (let i = 0; i < this.children.length; i++)\n this.children[i].destroy();\n }\n posBeforeChild(child) {\n for (let i = 0, pos = this.posAtStart;; i++) {\n let cur = this.children[i];\n if (cur == child)\n return pos;\n pos += cur.size;\n }\n }\n get posBefore() {\n return this.parent.posBeforeChild(this);\n }\n get posAtStart() {\n return this.parent ? this.parent.posBeforeChild(this) + this.border : 0;\n }\n get posAfter() {\n return this.posBefore + this.size;\n }\n get posAtEnd() {\n return this.posAtStart + this.size - 2 * this.border;\n }\n localPosFromDOM(dom, offset, bias) {\n // If the DOM position is in the content, use the child desc after\n // it to figure out a position.\n if (this.contentDOM && this.contentDOM.contains(dom.nodeType == 1 ? dom : dom.parentNode)) {\n if (bias < 0) {\n let domBefore, desc;\n if (dom == this.contentDOM) {\n domBefore = dom.childNodes[offset - 1];\n }\n else {\n while (dom.parentNode != this.contentDOM)\n dom = dom.parentNode;\n domBefore = dom.previousSibling;\n }\n while (domBefore && !((desc = domBefore.pmViewDesc) && desc.parent == this))\n domBefore = domBefore.previousSibling;\n return domBefore ? this.posBeforeChild(desc) + desc.size : this.posAtStart;\n }\n else {\n let domAfter, desc;\n if (dom == this.contentDOM) {\n domAfter = dom.childNodes[offset];\n }\n else {\n while (dom.parentNode != this.contentDOM)\n dom = dom.parentNode;\n domAfter = dom.nextSibling;\n }\n while (domAfter && !((desc = domAfter.pmViewDesc) && desc.parent == this))\n domAfter = domAfter.nextSibling;\n return domAfter ? this.posBeforeChild(desc) : this.posAtEnd;\n }\n }\n // Otherwise, use various heuristics, falling back on the bias\n // parameter, to determine whether to return the position at the\n // start or at the end of this view desc.\n let atEnd;\n if (dom == this.dom && this.contentDOM) {\n atEnd = offset > domIndex(this.contentDOM);\n }\n else if (this.contentDOM && this.contentDOM != this.dom && this.dom.contains(this.contentDOM)) {\n atEnd = dom.compareDocumentPosition(this.contentDOM) & 2;\n }\n else if (this.dom.firstChild) {\n if (offset == 0)\n for (let search = dom;; search = search.parentNode) {\n if (search == this.dom) {\n atEnd = false;\n break;\n }\n if (search.previousSibling)\n break;\n }\n if (atEnd == null && offset == dom.childNodes.length)\n for (let search = dom;; search = search.parentNode) {\n if (search == this.dom) {\n atEnd = true;\n break;\n }\n if (search.nextSibling)\n break;\n }\n }\n return (atEnd == null ? bias > 0 : atEnd) ? this.posAtEnd : this.posAtStart;\n }\n // Scan up the dom finding the first desc that is a descendant of\n // this one.\n nearestDesc(dom, onlyNodes = false) {\n for (let first = true, cur = dom; cur; cur = cur.parentNode) {\n let desc = this.getDesc(cur), nodeDOM;\n if (desc && (!onlyNodes || desc.node)) {\n // If dom is outside of this desc's nodeDOM, don't count it.\n if (first && (nodeDOM = desc.nodeDOM) &&\n !(nodeDOM.nodeType == 1 ? nodeDOM.contains(dom.nodeType == 1 ? dom : dom.parentNode) : nodeDOM == dom))\n first = false;\n else\n return desc;\n }\n }\n }\n getDesc(dom) {\n let desc = dom.pmViewDesc;\n for (let cur = desc; cur; cur = cur.parent)\n if (cur == this)\n return desc;\n }\n posFromDOM(dom, offset, bias) {\n for (let scan = dom; scan; scan = scan.parentNode) {\n let desc = this.getDesc(scan);\n if (desc)\n return desc.localPosFromDOM(dom, offset, bias);\n }\n return -1;\n }\n // Find the desc for the node after the given pos, if any. (When a\n // parent node overrode rendering, there might not be one.)\n descAt(pos) {\n for (let i = 0, offset = 0; i < this.children.length; i++) {\n let child = this.children[i], end = offset + child.size;\n if (offset == pos && end != offset) {\n while (!child.border && child.children.length)\n child = child.children[0];\n return child;\n }\n if (pos < end)\n return child.descAt(pos - offset - child.border);\n offset = end;\n }\n }\n domFromPos(pos, side) {\n if (!this.contentDOM)\n return { node: this.dom, offset: 0, atom: pos + 1 };\n // First find the position in the child array\n let i = 0, offset = 0;\n for (let curPos = 0; i < this.children.length; i++) {\n let child = this.children[i], end = curPos + child.size;\n if (end > pos || child instanceof TrailingHackViewDesc) {\n offset = pos - curPos;\n break;\n }\n curPos = end;\n }\n // If this points into the middle of a child, call through\n if (offset)\n return this.children[i].domFromPos(offset - this.children[i].border, side);\n // Go back if there were any zero-length widgets with side >= 0 before this point\n for (let prev; i && !(prev = this.children[i - 1]).size && prev instanceof WidgetViewDesc && prev.side >= 0; i--) { }\n // Scan towards the first useable node\n if (side <= 0) {\n let prev, enter = true;\n for (;; i--, enter = false) {\n prev = i ? this.children[i - 1] : null;\n if (!prev || prev.dom.parentNode == this.contentDOM)\n break;\n }\n if (prev && side && enter && !prev.border && !prev.domAtom)\n return prev.domFromPos(prev.size, side);\n return { node: this.contentDOM, offset: prev ? domIndex(prev.dom) + 1 : 0 };\n }\n else {\n let next, enter = true;\n for (;; i++, enter = false) {\n next = i < this.children.length ? this.children[i] : null;\n if (!next || next.dom.parentNode == this.contentDOM)\n break;\n }\n if (next && enter && !next.border && !next.domAtom)\n return next.domFromPos(0, side);\n return { node: this.contentDOM, offset: next ? domIndex(next.dom) : this.contentDOM.childNodes.length };\n }\n }\n // Used to find a DOM range in a single parent for a given changed\n // range.\n parseRange(from, to, base = 0) {\n if (this.children.length == 0)\n return { node: this.contentDOM, from, to, fromOffset: 0, toOffset: this.contentDOM.childNodes.length };\n let fromOffset = -1, toOffset = -1;\n for (let offset = base, i = 0;; i++) {\n let child = this.children[i], end = offset + child.size;\n if (fromOffset == -1 && from <= end) {\n let childBase = offset + child.border;\n // FIXME maybe descend mark views to parse a narrower range?\n if (from >= childBase && to <= end - child.border && child.node &&\n child.contentDOM && this.contentDOM.contains(child.contentDOM))\n return child.parseRange(from, to, childBase);\n from = offset;\n for (let j = i; j > 0; j--) {\n let prev = this.children[j - 1];\n if (prev.size && prev.dom.parentNode == this.contentDOM && !prev.emptyChildAt(1)) {\n fromOffset = domIndex(prev.dom) + 1;\n break;\n }\n from -= prev.size;\n }\n if (fromOffset == -1)\n fromOffset = 0;\n }\n if (fromOffset > -1 && (end > to || i == this.children.length - 1)) {\n to = end;\n for (let j = i + 1; j < this.children.length; j++) {\n let next = this.children[j];\n if (next.size && next.dom.parentNode == this.contentDOM && !next.emptyChildAt(-1)) {\n toOffset = domIndex(next.dom);\n break;\n }\n to += next.size;\n }\n if (toOffset == -1)\n toOffset = this.contentDOM.childNodes.length;\n break;\n }\n offset = end;\n }\n return { node: this.contentDOM, from, to, fromOffset, toOffset };\n }\n emptyChildAt(side) {\n if (this.border || !this.contentDOM || !this.children.length)\n return false;\n let child = this.children[side < 0 ? 0 : this.children.length - 1];\n return child.size == 0 || child.emptyChildAt(side);\n }\n domAfterPos(pos) {\n let { node, offset } = this.domFromPos(pos, 0);\n if (node.nodeType != 1 || offset == node.childNodes.length)\n throw new RangeError(\"No node after pos \" + pos);\n return node.childNodes[offset];\n }\n // View descs are responsible for setting any selection that falls\n // entirely inside of them, so that custom implementations can do\n // custom things with the selection. Note that this falls apart when\n // a selection starts in such a node and ends in another, in which\n // case we just use whatever domFromPos produces as a best effort.\n setSelection(anchor, head, root, force = false) {\n // If the selection falls entirely in a child, give it to that child\n let from = Math.min(anchor, head), to = Math.max(anchor, head);\n for (let i = 0, offset = 0; i < this.children.length; i++) {\n let child = this.children[i], end = offset + child.size;\n if (from > offset && to < end)\n return child.setSelection(anchor - offset - child.border, head - offset - child.border, root, force);\n offset = end;\n }\n let anchorDOM = this.domFromPos(anchor, anchor ? -1 : 1);\n let headDOM = head == anchor ? anchorDOM : this.domFromPos(head, head ? -1 : 1);\n let domSel = root.getSelection();\n let brKludge = false;\n // On Firefox, using Selection.collapse to put the cursor after a\n // BR node for some reason doesn't always work (#1073). On Safari,\n // the cursor sometimes inexplicable visually lags behind its\n // reported position in such situations (#1092).\n if ((gecko || safari) && anchor == head) {\n let { node, offset } = anchorDOM;\n if (node.nodeType == 3) {\n brKludge = !!(offset && node.nodeValue[offset - 1] == \"\\n\");\n // Issue #1128\n if (brKludge && offset == node.nodeValue.length) {\n for (let scan = node, after; scan; scan = scan.parentNode) {\n if (after = scan.nextSibling) {\n if (after.nodeName == \"BR\")\n anchorDOM = headDOM = { node: after.parentNode, offset: domIndex(after) + 1 };\n break;\n }\n let desc = scan.pmViewDesc;\n if (desc && desc.node && desc.node.isBlock)\n break;\n }\n }\n }\n else {\n let prev = node.childNodes[offset - 1];\n brKludge = prev && (prev.nodeName == \"BR\" || prev.contentEditable == \"false\");\n }\n }\n // Firefox can act strangely when the selection is in front of an\n // uneditable node. See #1163 and https://bugzilla.mozilla.org/show_bug.cgi?id=1709536\n if (gecko && domSel.focusNode && domSel.focusNode != headDOM.node && domSel.focusNode.nodeType == 1) {\n let after = domSel.focusNode.childNodes[domSel.focusOffset];\n if (after && after.contentEditable == \"false\")\n force = true;\n }\n if (!(force || brKludge && safari) &&\n isEquivalentPosition(anchorDOM.node, anchorDOM.offset, domSel.anchorNode, domSel.anchorOffset) &&\n isEquivalentPosition(headDOM.node, headDOM.offset, domSel.focusNode, domSel.focusOffset))\n return;\n // Selection.extend can be used to create an 'inverted' selection\n // (one where the focus is before the anchor), but not all\n // browsers support it yet.\n let domSelExtended = false;\n if ((domSel.extend || anchor == head) && !brKludge) {\n domSel.collapse(anchorDOM.node, anchorDOM.offset);\n try {\n if (anchor != head)\n domSel.extend(headDOM.node, headDOM.offset);\n domSelExtended = true;\n }\n catch (_) {\n // In some cases with Chrome the selection is empty after calling\n // collapse, even when it should be valid. This appears to be a bug, but\n // it is difficult to isolate. If this happens fallback to the old path\n // without using extend.\n // Similarly, this could crash on Safari if the editor is hidden, and\n // there was no selection.\n }\n }\n if (!domSelExtended) {\n if (anchor > head) {\n let tmp = anchorDOM;\n anchorDOM = headDOM;\n headDOM = tmp;\n }\n let range = document.createRange();\n range.setEnd(headDOM.node, headDOM.offset);\n range.setStart(anchorDOM.node, anchorDOM.offset);\n domSel.removeAllRanges();\n domSel.addRange(range);\n }\n }\n ignoreMutation(mutation) {\n return !this.contentDOM && mutation.type != \"selection\";\n }\n get contentLost() {\n return this.contentDOM && this.contentDOM != this.dom && !this.dom.contains(this.contentDOM);\n }\n // Remove a subtree of the element tree that has been touched\n // by a DOM change, so that the next update will redraw it.\n markDirty(from, to) {\n for (let offset = 0, i = 0; i < this.children.length; i++) {\n let child = this.children[i], end = offset + child.size;\n if (offset == end ? from <= end && to >= offset : from < end && to > offset) {\n let startInside = offset + child.border, endInside = end - child.border;\n if (from >= startInside && to <= endInside) {\n this.dirty = from == offset || to == end ? CONTENT_DIRTY : CHILD_DIRTY;\n if (from == startInside && to == endInside &&\n (child.contentLost || child.dom.parentNode != this.contentDOM))\n child.dirty = NODE_DIRTY;\n else\n child.markDirty(from - startInside, to - startInside);\n return;\n }\n else {\n child.dirty = child.dom == child.contentDOM && child.dom.parentNode == this.contentDOM && !child.children.length\n ? CONTENT_DIRTY : NODE_DIRTY;\n }\n }\n offset = end;\n }\n this.dirty = CONTENT_DIRTY;\n }\n markParentsDirty() {\n let level = 1;\n for (let node = this.parent; node; node = node.parent, level++) {\n let dirty = level == 1 ? CONTENT_DIRTY : CHILD_DIRTY;\n if (node.dirty < dirty)\n node.dirty = dirty;\n }\n }\n get domAtom() { return false; }\n get ignoreForCoords() { return false; }\n}\n// A widget desc represents a widget decoration, which is a DOM node\n// drawn between the document nodes.\nclass WidgetViewDesc extends ViewDesc {\n constructor(parent, widget, view, pos) {\n let self, dom = widget.type.toDOM;\n if (typeof dom == \"function\")\n dom = dom(view, () => {\n if (!self)\n return pos;\n if (self.parent)\n return self.parent.posBeforeChild(self);\n });\n if (!widget.type.spec.raw) {\n if (dom.nodeType != 1) {\n let wrap = document.createElement(\"span\");\n wrap.appendChild(dom);\n dom = wrap;\n }\n dom.contentEditable = \"false\";\n dom.classList.add(\"ProseMirror-widget\");\n }\n super(parent, [], dom, null);\n this.widget = widget;\n this.widget = widget;\n self = this;\n }\n matchesWidget(widget) {\n return this.dirty == NOT_DIRTY && widget.type.eq(this.widget.type);\n }\n parseRule() { return { ignore: true }; }\n stopEvent(event) {\n let stop = this.widget.spec.stopEvent;\n return stop ? stop(event) : false;\n }\n ignoreMutation(mutation) {\n return mutation.type != \"selection\" || this.widget.spec.ignoreSelection;\n }\n destroy() {\n this.widget.type.destroy(this.dom);\n super.destroy();\n }\n get domAtom() { return true; }\n get side() { return this.widget.type.side; }\n}\nclass CompositionViewDesc extends ViewDesc {\n constructor(parent, dom, textDOM, text) {\n super(parent, [], dom, null);\n this.textDOM = textDOM;\n this.text = text;\n }\n get size() { return this.text.length; }\n localPosFromDOM(dom, offset) {\n if (dom != this.textDOM)\n return this.posAtStart + (offset ? this.size : 0);\n return this.posAtStart + offset;\n }\n domFromPos(pos) {\n return { node: this.textDOM, offset: pos };\n }\n ignoreMutation(mut) {\n return mut.type === 'characterData' && mut.target.nodeValue == mut.oldValue;\n }\n}\n// A mark desc represents a mark. May have multiple children,\n// depending on how the mark is split. Note that marks are drawn using\n// a fixed nesting order, for simplicity and predictability, so in\n// some cases they will be split more often than would appear\n// necessary.\nclass MarkViewDesc extends ViewDesc {\n constructor(parent, mark, dom, contentDOM) {\n super(parent, [], dom, contentDOM);\n this.mark = mark;\n }\n static create(parent, mark, inline, view) {\n let custom = view.nodeViews[mark.type.name];\n let spec = custom && custom(mark, view, inline);\n if (!spec || !spec.dom)\n spec = DOMSerializer.renderSpec(document, mark.type.spec.toDOM(mark, inline));\n return new MarkViewDesc(parent, mark, spec.dom, spec.contentDOM || spec.dom);\n }\n parseRule() {\n if ((this.dirty & NODE_DIRTY) || this.mark.type.spec.reparseInView)\n return null;\n return { mark: this.mark.type.name, attrs: this.mark.attrs, contentElement: this.contentDOM || undefined };\n }\n matchesMark(mark) { return this.dirty != NODE_DIRTY && this.mark.eq(mark); }\n markDirty(from, to) {\n super.markDirty(from, to);\n // Move dirty info to nearest node view\n if (this.dirty != NOT_DIRTY) {\n let parent = this.parent;\n while (!parent.node)\n parent = parent.parent;\n if (parent.dirty < this.dirty)\n parent.dirty = this.dirty;\n this.dirty = NOT_DIRTY;\n }\n }\n slice(from, to, view) {\n let copy = MarkViewDesc.create(this.parent, this.mark, true, view);\n let nodes = this.children, size = this.size;\n if (to < size)\n nodes = replaceNodes(nodes, to, size, view);\n if (from > 0)\n nodes = replaceNodes(nodes, 0, from, view);\n for (let i = 0; i < nodes.length; i++)\n nodes[i].parent = copy;\n copy.children = nodes;\n return copy;\n }\n}\n// Node view descs are the main, most common type of view desc, and\n// correspond to an actual node in the document. Unlike mark descs,\n// they populate their child array themselves.\nclass NodeViewDesc extends ViewDesc {\n constructor(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM, view, pos) {\n super(parent, [], dom, contentDOM);\n this.node = node;\n this.outerDeco = outerDeco;\n this.innerDeco = innerDeco;\n this.nodeDOM = nodeDOM;\n if (contentDOM)\n this.updateChildren(view, pos);\n }\n // By default, a node is rendered using the `toDOM` method from the\n // node type spec. But client code can use the `nodeViews` spec to\n // supply a custom node view, which can influence various aspects of\n // the way the node works.\n //\n // (Using subclassing for this was intentionally decided against,\n // since it'd require exposing a whole slew of finicky\n // implementation details to the user code that they probably will\n // never need.)\n static create(parent, node, outerDeco, innerDeco, view, pos) {\n let custom = view.nodeViews[node.type.name], descObj;\n let spec = custom && custom(node, view, () => {\n // (This is a function that allows the custom view to find its\n // own position)\n if (!descObj)\n return pos;\n if (descObj.parent)\n return descObj.parent.posBeforeChild(descObj);\n }, outerDeco, innerDeco);\n let dom = spec && spec.dom, contentDOM = spec && spec.contentDOM;\n if (node.isText) {\n if (!dom)\n dom = document.createTextNode(node.text);\n else if (dom.nodeType != 3)\n throw new RangeError(\"Text must be rendered as a DOM text node\");\n }\n else if (!dom) {\n ({ dom, contentDOM } = DOMSerializer.renderSpec(document, node.type.spec.toDOM(node)));\n }\n if (!contentDOM && !node.isText && dom.nodeName != \"BR\") { // Chrome gets confused by
\n if (!dom.hasAttribute(\"contenteditable\"))\n dom.contentEditable = \"false\";\n if (node.type.spec.draggable)\n dom.draggable = true;\n }\n let nodeDOM = dom;\n dom = applyOuterDeco(dom, outerDeco, node);\n if (spec)\n return descObj = new CustomNodeViewDesc(parent, node, outerDeco, innerDeco, dom, contentDOM || null, nodeDOM, spec, view, pos + 1);\n else if (node.isText)\n return new TextViewDesc(parent, node, outerDeco, innerDeco, dom, nodeDOM, view);\n else\n return new NodeViewDesc(parent, node, outerDeco, innerDeco, dom, contentDOM || null, nodeDOM, view, pos + 1);\n }\n parseRule() {\n // Experimental kludge to allow opt-in re-parsing of nodes\n if (this.node.type.spec.reparseInView)\n return null;\n // FIXME the assumption that this can always return the current\n // attrs means that if the user somehow manages to change the\n // attrs in the dom, that won't be picked up. Not entirely sure\n // whether this is a problem\n let rule = { node: this.node.type.name, attrs: this.node.attrs };\n if (this.node.type.whitespace == \"pre\")\n rule.preserveWhitespace = \"full\";\n if (!this.contentDOM) {\n rule.getContent = () => this.node.content;\n }\n else if (!this.contentLost) {\n rule.contentElement = this.contentDOM;\n }\n else {\n // Chrome likes to randomly recreate parent nodes when\n // backspacing things. When that happens, this tries to find the\n // new parent.\n for (let i = this.children.length - 1; i >= 0; i--) {\n let child = this.children[i];\n if (this.dom.contains(child.dom.parentNode)) {\n rule.contentElement = child.dom.parentNode;\n break;\n }\n }\n if (!rule.contentElement)\n rule.getContent = () => Fragment.empty;\n }\n return rule;\n }\n matchesNode(node, outerDeco, innerDeco) {\n return this.dirty == NOT_DIRTY && node.eq(this.node) &&\n sameOuterDeco(outerDeco, this.outerDeco) && innerDeco.eq(this.innerDeco);\n }\n get size() { return this.node.nodeSize; }\n get border() { return this.node.isLeaf ? 0 : 1; }\n // Syncs `this.children` to match `this.node.content` and the local\n // decorations, possibly introducing nesting for marks. Then, in a\n // separate step, syncs the DOM inside `this.contentDOM` to\n // `this.children`.\n updateChildren(view, pos) {\n let inline = this.node.inlineContent, off = pos;\n let composition = view.composing ? this.localCompositionInfo(view, pos) : null;\n let localComposition = composition && composition.pos > -1 ? composition : null;\n let compositionInChild = composition && composition.pos < 0;\n let updater = new ViewTreeUpdater(this, localComposition && localComposition.node, view);\n iterDeco(this.node, this.innerDeco, (widget, i, insideNode) => {\n if (widget.spec.marks)\n updater.syncToMarks(widget.spec.marks, inline, view);\n else if (widget.type.side >= 0 && !insideNode)\n updater.syncToMarks(i == this.node.childCount ? Mark.none : this.node.child(i).marks, inline, view);\n // If the next node is a desc matching this widget, reuse it,\n // otherwise insert the widget as a new view desc.\n updater.placeWidget(widget, view, off);\n }, (child, outerDeco, innerDeco, i) => {\n // Make sure the wrapping mark descs match the node's marks.\n updater.syncToMarks(child.marks, inline, view);\n // Try several strategies for drawing this node\n let compIndex;\n if (updater.findNodeMatch(child, outerDeco, innerDeco, i)) ;\n else if (compositionInChild && view.state.selection.from > off &&\n view.state.selection.to < off + child.nodeSize &&\n (compIndex = updater.findIndexWithChild(composition.node)) > -1 &&\n updater.updateNodeAt(child, outerDeco, innerDeco, compIndex, view)) ;\n else if (updater.updateNextNode(child, outerDeco, innerDeco, view, i)) ;\n else {\n // Add it as a new view\n updater.addNode(child, outerDeco, innerDeco, view, off);\n }\n off += child.nodeSize;\n });\n // Drop all remaining descs after the current position.\n updater.syncToMarks([], inline, view);\n if (this.node.isTextblock)\n updater.addTextblockHacks();\n updater.destroyRest();\n // Sync the DOM if anything changed\n if (updater.changed || this.dirty == CONTENT_DIRTY) {\n // May have to protect focused DOM from being changed if a composition is active\n if (localComposition)\n this.protectLocalComposition(view, localComposition);\n renderDescs(this.contentDOM, this.children, view);\n if (ios)\n iosHacks(this.dom);\n }\n }\n localCompositionInfo(view, pos) {\n // Only do something if both the selection and a focused text node\n // are inside of this node\n let { from, to } = view.state.selection;\n if (!(view.state.selection instanceof TextSelection) || from < pos || to > pos + this.node.content.size)\n return null;\n let sel = view.domSelectionRange();\n let textNode = nearbyTextNode(sel.focusNode, sel.focusOffset);\n if (!textNode || !this.dom.contains(textNode.parentNode))\n return null;\n if (this.node.inlineContent) {\n // Find the text in the focused node in the node, stop if it's not\n // there (may have been modified through other means, in which\n // case it should overwritten)\n let text = textNode.nodeValue;\n let textPos = findTextInFragment(this.node.content, text, from - pos, to - pos);\n return textPos < 0 ? null : { node: textNode, pos: textPos, text };\n }\n else {\n return { node: textNode, pos: -1, text: \"\" };\n }\n }\n protectLocalComposition(view, { node, pos, text }) {\n // The node is already part of a local view desc, leave it there\n if (this.getDesc(node))\n return;\n // Create a composition view for the orphaned nodes\n let topNode = node;\n for (;; topNode = topNode.parentNode) {\n if (topNode.parentNode == this.contentDOM)\n break;\n while (topNode.previousSibling)\n topNode.parentNode.removeChild(topNode.previousSibling);\n while (topNode.nextSibling)\n topNode.parentNode.removeChild(topNode.nextSibling);\n if (topNode.pmViewDesc)\n topNode.pmViewDesc = undefined;\n }\n let desc = new CompositionViewDesc(this, topNode, node, text);\n view.input.compositionNodes.push(desc);\n // Patch up this.children to contain the composition view\n this.children = replaceNodes(this.children, pos, pos + text.length, view, desc);\n }\n // If this desc must be updated to match the given node decoration,\n // do so and return true.\n update(node, outerDeco, innerDeco, view) {\n if (this.dirty == NODE_DIRTY ||\n !node.sameMarkup(this.node))\n return false;\n this.updateInner(node, outerDeco, innerDeco, view);\n return true;\n }\n updateInner(node, outerDeco, innerDeco, view) {\n this.updateOuterDeco(outerDeco);\n this.node = node;\n this.innerDeco = innerDeco;\n if (this.contentDOM)\n this.updateChildren(view, this.posAtStart);\n this.dirty = NOT_DIRTY;\n }\n updateOuterDeco(outerDeco) {\n if (sameOuterDeco(outerDeco, this.outerDeco))\n return;\n let needsWrap = this.nodeDOM.nodeType != 1;\n let oldDOM = this.dom;\n this.dom = patchOuterDeco(this.dom, this.nodeDOM, computeOuterDeco(this.outerDeco, this.node, needsWrap), computeOuterDeco(outerDeco, this.node, needsWrap));\n if (this.dom != oldDOM) {\n oldDOM.pmViewDesc = undefined;\n this.dom.pmViewDesc = this;\n }\n this.outerDeco = outerDeco;\n }\n // Mark this node as being the selected node.\n selectNode() {\n if (this.nodeDOM.nodeType == 1)\n this.nodeDOM.classList.add(\"ProseMirror-selectednode\");\n if (this.contentDOM || !this.node.type.spec.draggable)\n this.dom.draggable = true;\n }\n // Remove selected node marking from this node.\n deselectNode() {\n if (this.nodeDOM.nodeType == 1)\n this.nodeDOM.classList.remove(\"ProseMirror-selectednode\");\n if (this.contentDOM || !this.node.type.spec.draggable)\n this.dom.removeAttribute(\"draggable\");\n }\n get domAtom() { return this.node.isAtom; }\n}\n// Create a view desc for the top-level document node, to be exported\n// and used by the view class.\nfunction docViewDesc(doc, outerDeco, innerDeco, dom, view) {\n applyOuterDeco(dom, outerDeco, doc);\n return new NodeViewDesc(undefined, doc, outerDeco, innerDeco, dom, dom, dom, view, 0);\n}\nclass TextViewDesc extends NodeViewDesc {\n constructor(parent, node, outerDeco, innerDeco, dom, nodeDOM, view) {\n super(parent, node, outerDeco, innerDeco, dom, null, nodeDOM, view, 0);\n }\n parseRule() {\n let skip = this.nodeDOM.parentNode;\n while (skip && skip != this.dom && !skip.pmIsDeco)\n skip = skip.parentNode;\n return { skip: (skip || true) };\n }\n update(node, outerDeco, innerDeco, view) {\n if (this.dirty == NODE_DIRTY || (this.dirty != NOT_DIRTY && !this.inParent()) ||\n !node.sameMarkup(this.node))\n return false;\n this.updateOuterDeco(outerDeco);\n if ((this.dirty != NOT_DIRTY || node.text != this.node.text) && node.text != this.nodeDOM.nodeValue) {\n this.nodeDOM.nodeValue = node.text;\n if (view.trackWrites == this.nodeDOM)\n view.trackWrites = null;\n }\n this.node = node;\n this.dirty = NOT_DIRTY;\n return true;\n }\n inParent() {\n let parentDOM = this.parent.contentDOM;\n for (let n = this.nodeDOM; n; n = n.parentNode)\n if (n == parentDOM)\n return true;\n return false;\n }\n domFromPos(pos) {\n return { node: this.nodeDOM, offset: pos };\n }\n localPosFromDOM(dom, offset, bias) {\n if (dom == this.nodeDOM)\n return this.posAtStart + Math.min(offset, this.node.text.length);\n return super.localPosFromDOM(dom, offset, bias);\n }\n ignoreMutation(mutation) {\n return mutation.type != \"characterData\" && mutation.type != \"selection\";\n }\n slice(from, to, view) {\n let node = this.node.cut(from, to), dom = document.createTextNode(node.text);\n return new TextViewDesc(this.parent, node, this.outerDeco, this.innerDeco, dom, dom, view);\n }\n markDirty(from, to) {\n super.markDirty(from, to);\n if (this.dom != this.nodeDOM && (from == 0 || to == this.nodeDOM.nodeValue.length))\n this.dirty = NODE_DIRTY;\n }\n get domAtom() { return false; }\n}\n// A dummy desc used to tag trailing BR or IMG nodes created to work\n// around contentEditable terribleness.\nclass TrailingHackViewDesc extends ViewDesc {\n parseRule() { return { ignore: true }; }\n matchesHack(nodeName) { return this.dirty == NOT_DIRTY && this.dom.nodeName == nodeName; }\n get domAtom() { return true; }\n get ignoreForCoords() { return this.dom.nodeName == \"IMG\"; }\n}\n// A separate subclass is used for customized node views, so that the\n// extra checks only have to be made for nodes that are actually\n// customized.\nclass CustomNodeViewDesc extends NodeViewDesc {\n constructor(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM, spec, view, pos) {\n super(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM, view, pos);\n this.spec = spec;\n }\n // A custom `update` method gets to decide whether the update goes\n // through. If it does, and there's a `contentDOM` node, our logic\n // updates the children.\n update(node, outerDeco, innerDeco, view) {\n if (this.dirty == NODE_DIRTY)\n return false;\n if (this.spec.update) {\n let result = this.spec.update(node, outerDeco, innerDeco);\n if (result)\n this.updateInner(node, outerDeco, innerDeco, view);\n return result;\n }\n else if (!this.contentDOM && !node.isLeaf) {\n return false;\n }\n else {\n return super.update(node, outerDeco, innerDeco, view);\n }\n }\n selectNode() {\n this.spec.selectNode ? this.spec.selectNode() : super.selectNode();\n }\n deselectNode() {\n this.spec.deselectNode ? this.spec.deselectNode() : super.deselectNode();\n }\n setSelection(anchor, head, root, force) {\n this.spec.setSelection ? this.spec.setSelection(anchor, head, root)\n : super.setSelection(anchor, head, root, force);\n }\n destroy() {\n if (this.spec.destroy)\n this.spec.destroy();\n super.destroy();\n }\n stopEvent(event) {\n return this.spec.stopEvent ? this.spec.stopEvent(event) : false;\n }\n ignoreMutation(mutation) {\n return this.spec.ignoreMutation ? this.spec.ignoreMutation(mutation) : super.ignoreMutation(mutation);\n }\n}\n// Sync the content of the given DOM node with the nodes associated\n// with the given array of view descs, recursing into mark descs\n// because this should sync the subtree for a whole node at a time.\nfunction renderDescs(parentDOM, descs, view) {\n let dom = parentDOM.firstChild, written = false;\n for (let i = 0; i < descs.length; i++) {\n let desc = descs[i], childDOM = desc.dom;\n if (childDOM.parentNode == parentDOM) {\n while (childDOM != dom) {\n dom = rm(dom);\n written = true;\n }\n dom = dom.nextSibling;\n }\n else {\n written = true;\n parentDOM.insertBefore(childDOM, dom);\n }\n if (desc instanceof MarkViewDesc) {\n let pos = dom ? dom.previousSibling : parentDOM.lastChild;\n renderDescs(desc.contentDOM, desc.children, view);\n dom = pos ? pos.nextSibling : parentDOM.firstChild;\n }\n }\n while (dom) {\n dom = rm(dom);\n written = true;\n }\n if (written && view.trackWrites == parentDOM)\n view.trackWrites = null;\n}\nconst OuterDecoLevel = function (nodeName) {\n if (nodeName)\n this.nodeName = nodeName;\n};\nOuterDecoLevel.prototype = Object.create(null);\nconst noDeco = [new OuterDecoLevel];\nfunction computeOuterDeco(outerDeco, node, needsWrap) {\n if (outerDeco.length == 0)\n return noDeco;\n let top = needsWrap ? noDeco[0] : new OuterDecoLevel, result = [top];\n for (let i = 0; i < outerDeco.length; i++) {\n let attrs = outerDeco[i].type.attrs;\n if (!attrs)\n continue;\n if (attrs.nodeName)\n result.push(top = new OuterDecoLevel(attrs.nodeName));\n for (let name in attrs) {\n let val = attrs[name];\n if (val == null)\n continue;\n if (needsWrap && result.length == 1)\n result.push(top = new OuterDecoLevel(node.isInline ? \"span\" : \"div\"));\n if (name == \"class\")\n top.class = (top.class ? top.class + \" \" : \"\") + val;\n else if (name == \"style\")\n top.style = (top.style ? top.style + \";\" : \"\") + val;\n else if (name != \"nodeName\")\n top[name] = val;\n }\n }\n return result;\n}\nfunction patchOuterDeco(outerDOM, nodeDOM, prevComputed, curComputed) {\n // Shortcut for trivial case\n if (prevComputed == noDeco && curComputed == noDeco)\n return nodeDOM;\n let curDOM = nodeDOM;\n for (let i = 0; i < curComputed.length; i++) {\n let deco = curComputed[i], prev = prevComputed[i];\n if (i) {\n let parent;\n if (prev && prev.nodeName == deco.nodeName && curDOM != outerDOM &&\n (parent = curDOM.parentNode) && parent.nodeName.toLowerCase() == deco.nodeName) {\n curDOM = parent;\n }\n else {\n parent = document.createElement(deco.nodeName);\n parent.pmIsDeco = true;\n parent.appendChild(curDOM);\n prev = noDeco[0];\n curDOM = parent;\n }\n }\n patchAttributes(curDOM, prev || noDeco[0], deco);\n }\n return curDOM;\n}\nfunction patchAttributes(dom, prev, cur) {\n for (let name in prev)\n if (name != \"class\" && name != \"style\" && name != \"nodeName\" && !(name in cur))\n dom.removeAttribute(name);\n for (let name in cur)\n if (name != \"class\" && name != \"style\" && name != \"nodeName\" && cur[name] != prev[name])\n dom.setAttribute(name, cur[name]);\n if (prev.class != cur.class) {\n let prevList = prev.class ? prev.class.split(\" \").filter(Boolean) : [];\n let curList = cur.class ? cur.class.split(\" \").filter(Boolean) : [];\n for (let i = 0; i < prevList.length; i++)\n if (curList.indexOf(prevList[i]) == -1)\n dom.classList.remove(prevList[i]);\n for (let i = 0; i < curList.length; i++)\n if (prevList.indexOf(curList[i]) == -1)\n dom.classList.add(curList[i]);\n if (dom.classList.length == 0)\n dom.removeAttribute(\"class\");\n }\n if (prev.style != cur.style) {\n if (prev.style) {\n let prop = /\\s*([\\w\\-\\xa1-\\uffff]+)\\s*:(?:\"(?:\\\\.|[^\"])*\"|'(?:\\\\.|[^'])*'|\\(.*?\\)|[^;])*/g, m;\n while (m = prop.exec(prev.style))\n dom.style.removeProperty(m[1]);\n }\n if (cur.style)\n dom.style.cssText += cur.style;\n }\n}\nfunction applyOuterDeco(dom, deco, node) {\n return patchOuterDeco(dom, dom, noDeco, computeOuterDeco(deco, node, dom.nodeType != 1));\n}\nfunction sameOuterDeco(a, b) {\n if (a.length != b.length)\n return false;\n for (let i = 0; i < a.length; i++)\n if (!a[i].type.eq(b[i].type))\n return false;\n return true;\n}\n// Remove a DOM node and return its next sibling.\nfunction rm(dom) {\n let next = dom.nextSibling;\n dom.parentNode.removeChild(dom);\n return next;\n}\n// Helper class for incrementally updating a tree of mark descs and\n// the widget and node descs inside of them.\nclass ViewTreeUpdater {\n constructor(top, lock, view) {\n this.lock = lock;\n this.view = view;\n // Index into `this.top`'s child array, represents the current\n // update position.\n this.index = 0;\n // When entering a mark, the current top and index are pushed\n // onto this.\n this.stack = [];\n // Tracks whether anything was changed\n this.changed = false;\n this.top = top;\n this.preMatch = preMatch(top.node.content, top);\n }\n // Destroy and remove the children between the given indices in\n // `this.top`.\n destroyBetween(start, end) {\n if (start == end)\n return;\n for (let i = start; i < end; i++)\n this.top.children[i].destroy();\n this.top.children.splice(start, end - start);\n this.changed = true;\n }\n // Destroy all remaining children in `this.top`.\n destroyRest() {\n this.destroyBetween(this.index, this.top.children.length);\n }\n // Sync the current stack of mark descs with the given array of\n // marks, reusing existing mark descs when possible.\n syncToMarks(marks, inline, view) {\n let keep = 0, depth = this.stack.length >> 1;\n let maxKeep = Math.min(depth, marks.length);\n while (keep < maxKeep &&\n (keep == depth - 1 ? this.top : this.stack[(keep + 1) << 1])\n .matchesMark(marks[keep]) && marks[keep].type.spec.spanning !== false)\n keep++;\n while (keep < depth) {\n this.destroyRest();\n this.top.dirty = NOT_DIRTY;\n this.index = this.stack.pop();\n this.top = this.stack.pop();\n depth--;\n }\n while (depth < marks.length) {\n this.stack.push(this.top, this.index + 1);\n let found = -1;\n for (let i = this.index; i < Math.min(this.index + 3, this.top.children.length); i++) {\n if (this.top.children[i].matchesMark(marks[depth])) {\n found = i;\n break;\n }\n }\n if (found > -1) {\n if (found > this.index) {\n this.changed = true;\n this.destroyBetween(this.index, found);\n }\n this.top = this.top.children[this.index];\n }\n else {\n let markDesc = MarkViewDesc.create(this.top, marks[depth], inline, view);\n this.top.children.splice(this.index, 0, markDesc);\n this.top = markDesc;\n this.changed = true;\n }\n this.index = 0;\n depth++;\n }\n }\n // Try to find a node desc matching the given data. Skip over it and\n // return true when successful.\n findNodeMatch(node, outerDeco, innerDeco, index) {\n let found = -1, targetDesc;\n if (index >= this.preMatch.index &&\n (targetDesc = this.preMatch.matches[index - this.preMatch.index]).parent == this.top &&\n targetDesc.matchesNode(node, outerDeco, innerDeco)) {\n found = this.top.children.indexOf(targetDesc, this.index);\n }\n else {\n for (let i = this.index, e = Math.min(this.top.children.length, i + 5); i < e; i++) {\n let child = this.top.children[i];\n if (child.matchesNode(node, outerDeco, innerDeco) && !this.preMatch.matched.has(child)) {\n found = i;\n break;\n }\n }\n }\n if (found < 0)\n return false;\n this.destroyBetween(this.index, found);\n this.index++;\n return true;\n }\n updateNodeAt(node, outerDeco, innerDeco, index, view) {\n let child = this.top.children[index];\n if (child.dirty == NODE_DIRTY && child.dom == child.contentDOM)\n child.dirty = CONTENT_DIRTY;\n if (!child.update(node, outerDeco, innerDeco, view))\n return false;\n this.destroyBetween(this.index, index);\n this.index++;\n return true;\n }\n findIndexWithChild(domNode) {\n for (;;) {\n let parent = domNode.parentNode;\n if (!parent)\n return -1;\n if (parent == this.top.contentDOM) {\n let desc = domNode.pmViewDesc;\n if (desc)\n for (let i = this.index; i < this.top.children.length; i++) {\n if (this.top.children[i] == desc)\n return i;\n }\n return -1;\n }\n domNode = parent;\n }\n }\n // Try to update the next node, if any, to the given data. Checks\n // pre-matches to avoid overwriting nodes that could still be used.\n updateNextNode(node, outerDeco, innerDeco, view, index) {\n for (let i = this.index; i < this.top.children.length; i++) {\n let next = this.top.children[i];\n if (next instanceof NodeViewDesc) {\n let preMatch = this.preMatch.matched.get(next);\n if (preMatch != null && preMatch != index)\n return false;\n let nextDOM = next.dom;\n // Can't update if nextDOM is or contains this.lock, except if\n // it's a text node whose content already matches the new text\n // and whose decorations match the new ones.\n let locked = this.lock && (nextDOM == this.lock || nextDOM.nodeType == 1 && nextDOM.contains(this.lock.parentNode)) &&\n !(node.isText && next.node && next.node.isText && next.nodeDOM.nodeValue == node.text &&\n next.dirty != NODE_DIRTY && sameOuterDeco(outerDeco, next.outerDeco));\n if (!locked && next.update(node, outerDeco, innerDeco, view)) {\n this.destroyBetween(this.index, i);\n if (next.dom != nextDOM)\n this.changed = true;\n this.index++;\n return true;\n }\n break;\n }\n }\n return false;\n }\n // Insert the node as a newly created node desc.\n addNode(node, outerDeco, innerDeco, view, pos) {\n this.top.children.splice(this.index++, 0, NodeViewDesc.create(this.top, node, outerDeco, innerDeco, view, pos));\n this.changed = true;\n }\n placeWidget(widget, view, pos) {\n let next = this.index < this.top.children.length ? this.top.children[this.index] : null;\n if (next && next.matchesWidget(widget) &&\n (widget == next.widget || !next.widget.type.toDOM.parentNode)) {\n this.index++;\n }\n else {\n let desc = new WidgetViewDesc(this.top, widget, view, pos);\n this.top.children.splice(this.index++, 0, desc);\n this.changed = true;\n }\n }\n // Make sure a textblock looks and behaves correctly in\n // contentEditable.\n addTextblockHacks() {\n let lastChild = this.top.children[this.index - 1], parent = this.top;\n while (lastChild instanceof MarkViewDesc) {\n parent = lastChild;\n lastChild = parent.children[parent.children.length - 1];\n }\n if (!lastChild || // Empty textblock\n !(lastChild instanceof TextViewDesc) ||\n /\\n$/.test(lastChild.node.text) ||\n (this.view.requiresGeckoHackNode && /\\s$/.test(lastChild.node.text))) {\n // Avoid bugs in Safari's cursor drawing (#1165) and Chrome's mouse selection (#1152)\n if ((safari || chrome) && lastChild && lastChild.dom.contentEditable == \"false\")\n this.addHackNode(\"IMG\", parent);\n this.addHackNode(\"BR\", this.top);\n }\n }\n addHackNode(nodeName, parent) {\n if (parent == this.top && this.index < parent.children.length && parent.children[this.index].matchesHack(nodeName)) {\n this.index++;\n }\n else {\n let dom = document.createElement(nodeName);\n if (nodeName == \"IMG\") {\n dom.className = \"ProseMirror-separator\";\n dom.alt = \"\";\n }\n if (nodeName == \"BR\")\n dom.className = \"ProseMirror-trailingBreak\";\n let hack = new TrailingHackViewDesc(this.top, [], dom, null);\n if (parent != this.top)\n parent.children.push(hack);\n else\n parent.children.splice(this.index++, 0, hack);\n this.changed = true;\n }\n }\n}\n// Iterate from the end of the fragment and array of descs to find\n// directly matching ones, in order to avoid overeagerly reusing those\n// for other nodes. Returns the fragment index of the first node that\n// is part of the sequence of matched nodes at the end of the\n// fragment.\nfunction preMatch(frag, parentDesc) {\n let curDesc = parentDesc, descI = curDesc.children.length;\n let fI = frag.childCount, matched = new Map, matches = [];\n outer: while (fI > 0) {\n let desc;\n for (;;) {\n if (descI) {\n let next = curDesc.children[descI - 1];\n if (next instanceof MarkViewDesc) {\n curDesc = next;\n descI = next.children.length;\n }\n else {\n desc = next;\n descI--;\n break;\n }\n }\n else if (curDesc == parentDesc) {\n break outer;\n }\n else {\n // FIXME\n descI = curDesc.parent.children.indexOf(curDesc);\n curDesc = curDesc.parent;\n }\n }\n let node = desc.node;\n if (!node)\n continue;\n if (node != frag.child(fI - 1))\n break;\n --fI;\n matched.set(desc, fI);\n matches.push(desc);\n }\n return { index: fI, matched, matches: matches.reverse() };\n}\nfunction compareSide(a, b) {\n return a.type.side - b.type.side;\n}\n// This function abstracts iterating over the nodes and decorations in\n// a fragment. Calls `onNode` for each node, with its local and child\n// decorations. Splits text nodes when there is a decoration starting\n// or ending inside of them. Calls `onWidget` for each widget.\nfunction iterDeco(parent, deco, onWidget, onNode) {\n let locals = deco.locals(parent), offset = 0;\n // Simple, cheap variant for when there are no local decorations\n if (locals.length == 0) {\n for (let i = 0; i < parent.childCount; i++) {\n let child = parent.child(i);\n onNode(child, locals, deco.forChild(offset, child), i);\n offset += child.nodeSize;\n }\n return;\n }\n let decoIndex = 0, active = [], restNode = null;\n for (let parentIndex = 0;;) {\n if (decoIndex < locals.length && locals[decoIndex].to == offset) {\n let widget = locals[decoIndex++], widgets;\n while (decoIndex < locals.length && locals[decoIndex].to == offset)\n (widgets || (widgets = [widget])).push(locals[decoIndex++]);\n if (widgets) {\n widgets.sort(compareSide);\n for (let i = 0; i < widgets.length; i++)\n onWidget(widgets[i], parentIndex, !!restNode);\n }\n else {\n onWidget(widget, parentIndex, !!restNode);\n }\n }\n let child, index;\n if (restNode) {\n index = -1;\n child = restNode;\n restNode = null;\n }\n else if (parentIndex < parent.childCount) {\n index = parentIndex;\n child = parent.child(parentIndex++);\n }\n else {\n break;\n }\n for (let i = 0; i < active.length; i++)\n if (active[i].to <= offset)\n active.splice(i--, 1);\n while (decoIndex < locals.length && locals[decoIndex].from <= offset && locals[decoIndex].to > offset)\n active.push(locals[decoIndex++]);\n let end = offset + child.nodeSize;\n if (child.isText) {\n let cutAt = end;\n if (decoIndex < locals.length && locals[decoIndex].from < cutAt)\n cutAt = locals[decoIndex].from;\n for (let i = 0; i < active.length; i++)\n if (active[i].to < cutAt)\n cutAt = active[i].to;\n if (cutAt < end) {\n restNode = child.cut(cutAt - offset);\n child = child.cut(0, cutAt - offset);\n end = cutAt;\n index = -1;\n }\n }\n let outerDeco = child.isInline && !child.isLeaf ? active.filter(d => !d.inline) : active.slice();\n onNode(child, outerDeco, deco.forChild(offset, child), index);\n offset = end;\n }\n}\n// List markers in Mobile Safari will mysteriously disappear\n// sometimes. This works around that.\nfunction iosHacks(dom) {\n if (dom.nodeName == \"UL\" || dom.nodeName == \"OL\") {\n let oldCSS = dom.style.cssText;\n dom.style.cssText = oldCSS + \"; list-style: square !important\";\n window.getComputedStyle(dom).listStyle;\n dom.style.cssText = oldCSS;\n }\n}\nfunction nearbyTextNode(node, offset) {\n for (;;) {\n if (node.nodeType == 3)\n return node;\n if (node.nodeType == 1 && offset > 0) {\n if (node.childNodes.length > offset && node.childNodes[offset].nodeType == 3)\n return node.childNodes[offset];\n node = node.childNodes[offset - 1];\n offset = nodeSize(node);\n }\n else if (node.nodeType == 1 && offset < node.childNodes.length) {\n node = node.childNodes[offset];\n offset = 0;\n }\n else {\n return null;\n }\n }\n}\n// Find a piece of text in an inline fragment, overlapping from-to\nfunction findTextInFragment(frag, text, from, to) {\n for (let i = 0, pos = 0; i < frag.childCount && pos <= to;) {\n let child = frag.child(i++), childStart = pos;\n pos += child.nodeSize;\n if (!child.isText)\n continue;\n let str = child.text;\n while (i < frag.childCount) {\n let next = frag.child(i++);\n pos += next.nodeSize;\n if (!next.isText)\n break;\n str += next.text;\n }\n if (pos >= from) {\n let found = childStart < to ? str.lastIndexOf(text, to - childStart - 1) : -1;\n if (found >= 0 && found + text.length + childStart >= from)\n return childStart + found;\n if (from == to && str.length >= (to + text.length) - childStart &&\n str.slice(to - childStart, to - childStart + text.length) == text)\n return to;\n }\n }\n return -1;\n}\n// Replace range from-to in an array of view descs with replacement\n// (may be null to just delete). This goes very much against the grain\n// of the rest of this code, which tends to create nodes with the\n// right shape in one go, rather than messing with them after\n// creation, but is necessary in the composition hack.\nfunction replaceNodes(nodes, from, to, view, replacement) {\n let result = [];\n for (let i = 0, off = 0; i < nodes.length; i++) {\n let child = nodes[i], start = off, end = off += child.size;\n if (start >= to || end <= from) {\n result.push(child);\n }\n else {\n if (start < from)\n result.push(child.slice(0, from - start, view));\n if (replacement) {\n result.push(replacement);\n replacement = undefined;\n }\n if (end > to)\n result.push(child.slice(to - start, child.size, view));\n }\n }\n return result;\n}\n\nfunction selectionFromDOM(view, origin = null) {\n let domSel = view.domSelectionRange(), doc = view.state.doc;\n if (!domSel.focusNode)\n return null;\n let nearestDesc = view.docView.nearestDesc(domSel.focusNode), inWidget = nearestDesc && nearestDesc.size == 0;\n let head = view.docView.posFromDOM(domSel.focusNode, domSel.focusOffset, 1);\n if (head < 0)\n return null;\n let $head = doc.resolve(head), $anchor, selection;\n if (selectionCollapsed(domSel)) {\n $anchor = $head;\n while (nearestDesc && !nearestDesc.node)\n nearestDesc = nearestDesc.parent;\n let nearestDescNode = nearestDesc.node;\n if (nearestDesc && nearestDescNode.isAtom && NodeSelection.isSelectable(nearestDescNode) && nearestDesc.parent\n && !(nearestDescNode.isInline && isOnEdge(domSel.focusNode, domSel.focusOffset, nearestDesc.dom))) {\n let pos = nearestDesc.posBefore;\n selection = new NodeSelection(head == pos ? $head : doc.resolve(pos));\n }\n }\n else {\n let anchor = view.docView.posFromDOM(domSel.anchorNode, domSel.anchorOffset, 1);\n if (anchor < 0)\n return null;\n $anchor = doc.resolve(anchor);\n }\n if (!selection) {\n let bias = origin == \"pointer\" || (view.state.selection.head < $head.pos && !inWidget) ? 1 : -1;\n selection = selectionBetween(view, $anchor, $head, bias);\n }\n return selection;\n}\nfunction editorOwnsSelection(view) {\n return view.editable ? view.hasFocus() :\n hasSelection(view) && document.activeElement && document.activeElement.contains(view.dom);\n}\nfunction selectionToDOM(view, force = false) {\n let sel = view.state.selection;\n syncNodeSelection(view, sel);\n if (!editorOwnsSelection(view))\n return;\n // The delayed drag selection causes issues with Cell Selections\n // in Safari. And the drag selection delay is to workarond issues\n // which only present in Chrome.\n if (!force && view.input.mouseDown && view.input.mouseDown.allowDefault && chrome) {\n let domSel = view.domSelectionRange(), curSel = view.domObserver.currentSelection;\n if (domSel.anchorNode && curSel.anchorNode &&\n isEquivalentPosition(domSel.anchorNode, domSel.anchorOffset, curSel.anchorNode, curSel.anchorOffset)) {\n view.input.mouseDown.delayedSelectionSync = true;\n view.domObserver.setCurSelection();\n return;\n }\n }\n view.domObserver.disconnectSelection();\n if (view.cursorWrapper) {\n selectCursorWrapper(view);\n }\n else {\n let { anchor, head } = sel, resetEditableFrom, resetEditableTo;\n if (brokenSelectBetweenUneditable && !(sel instanceof TextSelection)) {\n if (!sel.$from.parent.inlineContent)\n resetEditableFrom = temporarilyEditableNear(view, sel.from);\n if (!sel.empty && !sel.$from.parent.inlineContent)\n resetEditableTo = temporarilyEditableNear(view, sel.to);\n }\n view.docView.setSelection(anchor, head, view.root, force);\n if (brokenSelectBetweenUneditable) {\n if (resetEditableFrom)\n resetEditable(resetEditableFrom);\n if (resetEditableTo)\n resetEditable(resetEditableTo);\n }\n if (sel.visible) {\n view.dom.classList.remove(\"ProseMirror-hideselection\");\n }\n else {\n view.dom.classList.add(\"ProseMirror-hideselection\");\n if (\"onselectionchange\" in document)\n removeClassOnSelectionChange(view);\n }\n }\n view.domObserver.setCurSelection();\n view.domObserver.connectSelection();\n}\n// Kludge to work around Webkit not allowing a selection to start/end\n// between non-editable block nodes. We briefly make something\n// editable, set the selection, then set it uneditable again.\nconst brokenSelectBetweenUneditable = safari || chrome && chrome_version < 63;\nfunction temporarilyEditableNear(view, pos) {\n let { node, offset } = view.docView.domFromPos(pos, 0);\n let after = offset < node.childNodes.length ? node.childNodes[offset] : null;\n let before = offset ? node.childNodes[offset - 1] : null;\n if (safari && after && after.contentEditable == \"false\")\n return setEditable(after);\n if ((!after || after.contentEditable == \"false\") &&\n (!before || before.contentEditable == \"false\")) {\n if (after)\n return setEditable(after);\n else if (before)\n return setEditable(before);\n }\n}\nfunction setEditable(element) {\n element.contentEditable = \"true\";\n if (safari && element.draggable) {\n element.draggable = false;\n element.wasDraggable = true;\n }\n return element;\n}\nfunction resetEditable(element) {\n element.contentEditable = \"false\";\n if (element.wasDraggable) {\n element.draggable = true;\n element.wasDraggable = null;\n }\n}\nfunction removeClassOnSelectionChange(view) {\n let doc = view.dom.ownerDocument;\n doc.removeEventListener(\"selectionchange\", view.input.hideSelectionGuard);\n let domSel = view.domSelectionRange();\n let node = domSel.anchorNode, offset = domSel.anchorOffset;\n doc.addEventListener(\"selectionchange\", view.input.hideSelectionGuard = () => {\n if (domSel.anchorNode != node || domSel.anchorOffset != offset) {\n doc.removeEventListener(\"selectionchange\", view.input.hideSelectionGuard);\n setTimeout(() => {\n if (!editorOwnsSelection(view) || view.state.selection.visible)\n view.dom.classList.remove(\"ProseMirror-hideselection\");\n }, 20);\n }\n });\n}\nfunction selectCursorWrapper(view) {\n let domSel = view.domSelection(), range = document.createRange();\n let node = view.cursorWrapper.dom, img = node.nodeName == \"IMG\";\n if (img)\n range.setEnd(node.parentNode, domIndex(node) + 1);\n else\n range.setEnd(node, 0);\n range.collapse(false);\n domSel.removeAllRanges();\n domSel.addRange(range);\n // Kludge to kill 'control selection' in IE11 when selecting an\n // invisible cursor wrapper, since that would result in those weird\n // resize handles and a selection that considers the absolutely\n // positioned wrapper, rather than the root editable node, the\n // focused element.\n if (!img && !view.state.selection.visible && ie && ie_version <= 11) {\n node.disabled = true;\n node.disabled = false;\n }\n}\nfunction syncNodeSelection(view, sel) {\n if (sel instanceof NodeSelection) {\n let desc = view.docView.descAt(sel.from);\n if (desc != view.lastSelectedViewDesc) {\n clearNodeSelection(view);\n if (desc)\n desc.selectNode();\n view.lastSelectedViewDesc = desc;\n }\n }\n else {\n clearNodeSelection(view);\n }\n}\n// Clear all DOM statefulness of the last node selection.\nfunction clearNodeSelection(view) {\n if (view.lastSelectedViewDesc) {\n if (view.lastSelectedViewDesc.parent)\n view.lastSelectedViewDesc.deselectNode();\n view.lastSelectedViewDesc = undefined;\n }\n}\nfunction selectionBetween(view, $anchor, $head, bias) {\n return view.someProp(\"createSelectionBetween\", f => f(view, $anchor, $head))\n || TextSelection.between($anchor, $head, bias);\n}\nfunction hasFocusAndSelection(view) {\n if (view.editable && !view.hasFocus())\n return false;\n return hasSelection(view);\n}\nfunction hasSelection(view) {\n let sel = view.domSelectionRange();\n if (!sel.anchorNode)\n return false;\n try {\n // Firefox will raise 'permission denied' errors when accessing\n // properties of `sel.anchorNode` when it's in a generated CSS\n // element.\n return view.dom.contains(sel.anchorNode.nodeType == 3 ? sel.anchorNode.parentNode : sel.anchorNode) &&\n (view.editable || view.dom.contains(sel.focusNode.nodeType == 3 ? sel.focusNode.parentNode : sel.focusNode));\n }\n catch (_) {\n return false;\n }\n}\nfunction anchorInRightPlace(view) {\n let anchorDOM = view.docView.domFromPos(view.state.selection.anchor, 0);\n let domSel = view.domSelectionRange();\n return isEquivalentPosition(anchorDOM.node, anchorDOM.offset, domSel.anchorNode, domSel.anchorOffset);\n}\n\nfunction moveSelectionBlock(state, dir) {\n let { $anchor, $head } = state.selection;\n let $side = dir > 0 ? $anchor.max($head) : $anchor.min($head);\n let $start = !$side.parent.inlineContent ? $side : $side.depth ? state.doc.resolve(dir > 0 ? $side.after() : $side.before()) : null;\n return $start && Selection.findFrom($start, dir);\n}\nfunction apply(view, sel) {\n view.dispatch(view.state.tr.setSelection(sel).scrollIntoView());\n return true;\n}\nfunction selectHorizontally(view, dir, mods) {\n let sel = view.state.selection;\n if (sel instanceof TextSelection) {\n if (!sel.empty || mods.indexOf(\"s\") > -1) {\n return false;\n }\n else if (view.endOfTextblock(dir > 0 ? \"right\" : \"left\")) {\n let next = moveSelectionBlock(view.state, dir);\n if (next && (next instanceof NodeSelection))\n return apply(view, next);\n return false;\n }\n else if (!(mac && mods.indexOf(\"m\") > -1)) {\n let $head = sel.$head, node = $head.textOffset ? null : dir < 0 ? $head.nodeBefore : $head.nodeAfter, desc;\n if (!node || node.isText)\n return false;\n let nodePos = dir < 0 ? $head.pos - node.nodeSize : $head.pos;\n if (!(node.isAtom || (desc = view.docView.descAt(nodePos)) && !desc.contentDOM))\n return false;\n if (NodeSelection.isSelectable(node)) {\n return apply(view, new NodeSelection(dir < 0 ? view.state.doc.resolve($head.pos - node.nodeSize) : $head));\n }\n else if (webkit) {\n // Chrome and Safari will introduce extra pointless cursor\n // positions around inline uneditable nodes, so we have to\n // take over and move the cursor past them (#937)\n return apply(view, new TextSelection(view.state.doc.resolve(dir < 0 ? nodePos : nodePos + node.nodeSize)));\n }\n else {\n return false;\n }\n }\n }\n else if (sel instanceof NodeSelection && sel.node.isInline) {\n return apply(view, new TextSelection(dir > 0 ? sel.$to : sel.$from));\n }\n else {\n let next = moveSelectionBlock(view.state, dir);\n if (next)\n return apply(view, next);\n return false;\n }\n}\nfunction nodeLen(node) {\n return node.nodeType == 3 ? node.nodeValue.length : node.childNodes.length;\n}\nfunction isIgnorable(dom) {\n let desc = dom.pmViewDesc;\n return desc && desc.size == 0 && (dom.nextSibling || dom.nodeName != \"BR\");\n}\n// Make sure the cursor isn't directly after one or more ignored\n// nodes, which will confuse the browser's cursor motion logic.\nfunction skipIgnoredNodesLeft(view) {\n let sel = view.domSelectionRange();\n let node = sel.focusNode, offset = sel.focusOffset;\n if (!node)\n return;\n let moveNode, moveOffset, force = false;\n // Gecko will do odd things when the selection is directly in front\n // of a non-editable node, so in that case, move it into the next\n // node if possible. Issue prosemirror/prosemirror#832.\n if (gecko && node.nodeType == 1 && offset < nodeLen(node) && isIgnorable(node.childNodes[offset]))\n force = true;\n for (;;) {\n if (offset > 0) {\n if (node.nodeType != 1) {\n break;\n }\n else {\n let before = node.childNodes[offset - 1];\n if (isIgnorable(before)) {\n moveNode = node;\n moveOffset = --offset;\n }\n else if (before.nodeType == 3) {\n node = before;\n offset = node.nodeValue.length;\n }\n else\n break;\n }\n }\n else if (isBlockNode(node)) {\n break;\n }\n else {\n let prev = node.previousSibling;\n while (prev && isIgnorable(prev)) {\n moveNode = node.parentNode;\n moveOffset = domIndex(prev);\n prev = prev.previousSibling;\n }\n if (!prev) {\n node = node.parentNode;\n if (node == view.dom)\n break;\n offset = 0;\n }\n else {\n node = prev;\n offset = nodeLen(node);\n }\n }\n }\n if (force)\n setSelFocus(view, node, offset);\n else if (moveNode)\n setSelFocus(view, moveNode, moveOffset);\n}\n// Make sure the cursor isn't directly before one or more ignored\n// nodes.\nfunction skipIgnoredNodesRight(view) {\n let sel = view.domSelectionRange();\n let node = sel.focusNode, offset = sel.focusOffset;\n if (!node)\n return;\n let len = nodeLen(node);\n let moveNode, moveOffset;\n for (;;) {\n if (offset < len) {\n if (node.nodeType != 1)\n break;\n let after = node.childNodes[offset];\n if (isIgnorable(after)) {\n moveNode = node;\n moveOffset = ++offset;\n }\n else\n break;\n }\n else if (isBlockNode(node)) {\n break;\n }\n else {\n let next = node.nextSibling;\n while (next && isIgnorable(next)) {\n moveNode = next.parentNode;\n moveOffset = domIndex(next) + 1;\n next = next.nextSibling;\n }\n if (!next) {\n node = node.parentNode;\n if (node == view.dom)\n break;\n offset = len = 0;\n }\n else {\n node = next;\n offset = 0;\n len = nodeLen(node);\n }\n }\n }\n if (moveNode)\n setSelFocus(view, moveNode, moveOffset);\n}\nfunction isBlockNode(dom) {\n let desc = dom.pmViewDesc;\n return desc && desc.node && desc.node.isBlock;\n}\nfunction setSelFocus(view, node, offset) {\n let sel = view.domSelection();\n if (selectionCollapsed(sel)) {\n let range = document.createRange();\n range.setEnd(node, offset);\n range.setStart(node, offset);\n sel.removeAllRanges();\n sel.addRange(range);\n }\n else if (sel.extend) {\n sel.extend(node, offset);\n }\n view.domObserver.setCurSelection();\n let { state } = view;\n // If no state update ends up happening, reset the selection.\n setTimeout(() => {\n if (view.state == state)\n selectionToDOM(view);\n }, 50);\n}\n// Check whether vertical selection motion would involve node\n// selections. If so, apply it (if not, the result is left to the\n// browser)\nfunction selectVertically(view, dir, mods) {\n let sel = view.state.selection;\n if (sel instanceof TextSelection && !sel.empty || mods.indexOf(\"s\") > -1)\n return false;\n if (mac && mods.indexOf(\"m\") > -1)\n return false;\n let { $from, $to } = sel;\n if (!$from.parent.inlineContent || view.endOfTextblock(dir < 0 ? \"up\" : \"down\")) {\n let next = moveSelectionBlock(view.state, dir);\n if (next && (next instanceof NodeSelection))\n return apply(view, next);\n }\n if (!$from.parent.inlineContent) {\n let side = dir < 0 ? $from : $to;\n let beyond = sel instanceof AllSelection ? Selection.near(side, dir) : Selection.findFrom(side, dir);\n return beyond ? apply(view, beyond) : false;\n }\n return false;\n}\nfunction stopNativeHorizontalDelete(view, dir) {\n if (!(view.state.selection instanceof TextSelection))\n return true;\n let { $head, $anchor, empty } = view.state.selection;\n if (!$head.sameParent($anchor))\n return true;\n if (!empty)\n return false;\n if (view.endOfTextblock(dir > 0 ? \"forward\" : \"backward\"))\n return true;\n let nextNode = !$head.textOffset && (dir < 0 ? $head.nodeBefore : $head.nodeAfter);\n if (nextNode && !nextNode.isText) {\n let tr = view.state.tr;\n if (dir < 0)\n tr.delete($head.pos - nextNode.nodeSize, $head.pos);\n else\n tr.delete($head.pos, $head.pos + nextNode.nodeSize);\n view.dispatch(tr);\n return true;\n }\n return false;\n}\nfunction switchEditable(view, node, state) {\n view.domObserver.stop();\n node.contentEditable = state;\n view.domObserver.start();\n}\n// Issue #867 / #1090 / https://bugs.chromium.org/p/chromium/issues/detail?id=903821\n// In which Safari (and at some point in the past, Chrome) does really\n// wrong things when the down arrow is pressed when the cursor is\n// directly at the start of a textblock and has an uneditable node\n// after it\nfunction safariDownArrowBug(view) {\n if (!safari || view.state.selection.$head.parentOffset > 0)\n return false;\n let { focusNode, focusOffset } = view.domSelectionRange();\n if (focusNode && focusNode.nodeType == 1 && focusOffset == 0 &&\n focusNode.firstChild && focusNode.firstChild.contentEditable == \"false\") {\n let child = focusNode.firstChild;\n switchEditable(view, child, \"true\");\n setTimeout(() => switchEditable(view, child, \"false\"), 20);\n }\n return false;\n}\n// A backdrop key mapping used to make sure we always suppress keys\n// that have a dangerous default effect, even if the commands they are\n// bound to return false, and to make sure that cursor-motion keys\n// find a cursor (as opposed to a node selection) when pressed. For\n// cursor-motion keys, the code in the handlers also takes care of\n// block selections.\nfunction getMods(event) {\n let result = \"\";\n if (event.ctrlKey)\n result += \"c\";\n if (event.metaKey)\n result += \"m\";\n if (event.altKey)\n result += \"a\";\n if (event.shiftKey)\n result += \"s\";\n return result;\n}\nfunction captureKeyDown(view, event) {\n let code = event.keyCode, mods = getMods(event);\n if (code == 8 || (mac && code == 72 && mods == \"c\")) { // Backspace, Ctrl-h on Mac\n return stopNativeHorizontalDelete(view, -1) || skipIgnoredNodesLeft(view);\n }\n else if (code == 46 || (mac && code == 68 && mods == \"c\")) { // Delete, Ctrl-d on Mac\n return stopNativeHorizontalDelete(view, 1) || skipIgnoredNodesRight(view);\n }\n else if (code == 13 || code == 27) { // Enter, Esc\n return true;\n }\n else if (code == 37 || (mac && code == 66 && mods == \"c\")) { // Left arrow, Ctrl-b on Mac\n return selectHorizontally(view, -1, mods) || skipIgnoredNodesLeft(view);\n }\n else if (code == 39 || (mac && code == 70 && mods == \"c\")) { // Right arrow, Ctrl-f on Mac\n return selectHorizontally(view, 1, mods) || skipIgnoredNodesRight(view);\n }\n else if (code == 38 || (mac && code == 80 && mods == \"c\")) { // Up arrow, Ctrl-p on Mac\n return selectVertically(view, -1, mods) || skipIgnoredNodesLeft(view);\n }\n else if (code == 40 || (mac && code == 78 && mods == \"c\")) { // Down arrow, Ctrl-n on Mac\n return safariDownArrowBug(view) || selectVertically(view, 1, mods) || skipIgnoredNodesRight(view);\n }\n else if (mods == (mac ? \"m\" : \"c\") &&\n (code == 66 || code == 73 || code == 89 || code == 90)) { // Mod-[biyz]\n return true;\n }\n return false;\n}\n\nfunction serializeForClipboard(view, slice) {\n view.someProp(\"transformCopied\", f => { slice = f(slice, view); });\n let context = [], { content, openStart, openEnd } = slice;\n while (openStart > 1 && openEnd > 1 && content.childCount == 1 && content.firstChild.childCount == 1) {\n openStart--;\n openEnd--;\n let node = content.firstChild;\n context.push(node.type.name, node.attrs != node.type.defaultAttrs ? node.attrs : null);\n content = node.content;\n }\n let serializer = view.someProp(\"clipboardSerializer\") || DOMSerializer.fromSchema(view.state.schema);\n let doc = detachedDoc(), wrap = doc.createElement(\"div\");\n wrap.appendChild(serializer.serializeFragment(content, { document: doc }));\n let firstChild = wrap.firstChild, needsWrap, wrappers = 0;\n while (firstChild && firstChild.nodeType == 1 && (needsWrap = wrapMap[firstChild.nodeName.toLowerCase()])) {\n for (let i = needsWrap.length - 1; i >= 0; i--) {\n let wrapper = doc.createElement(needsWrap[i]);\n while (wrap.firstChild)\n wrapper.appendChild(wrap.firstChild);\n wrap.appendChild(wrapper);\n wrappers++;\n }\n firstChild = wrap.firstChild;\n }\n if (firstChild && firstChild.nodeType == 1)\n firstChild.setAttribute(\"data-pm-slice\", `${openStart} ${openEnd}${wrappers ? ` -${wrappers}` : \"\"} ${JSON.stringify(context)}`);\n let text = view.someProp(\"clipboardTextSerializer\", f => f(slice, view)) ||\n slice.content.textBetween(0, slice.content.size, \"\\n\\n\");\n return { dom: wrap, text };\n}\n// Read a slice of content from the clipboard (or drop data).\nfunction parseFromClipboard(view, text, html, plainText, $context) {\n let inCode = $context.parent.type.spec.code;\n let dom, slice;\n if (!html && !text)\n return null;\n let asText = text && (plainText || inCode || !html);\n if (asText) {\n view.someProp(\"transformPastedText\", f => { text = f(text, inCode || plainText, view); });\n if (inCode)\n return text ? new Slice(Fragment.from(view.state.schema.text(text.replace(/\\r\\n?/g, \"\\n\"))), 0, 0) : Slice.empty;\n let parsed = view.someProp(\"clipboardTextParser\", f => f(text, $context, plainText, view));\n if (parsed) {\n slice = parsed;\n }\n else {\n let marks = $context.marks();\n let { schema } = view.state, serializer = DOMSerializer.fromSchema(schema);\n dom = document.createElement(\"div\");\n text.split(/(?:\\r\\n?|\\n)+/).forEach(block => {\n let p = dom.appendChild(document.createElement(\"p\"));\n if (block)\n p.appendChild(serializer.serializeNode(schema.text(block, marks)));\n });\n }\n }\n else {\n view.someProp(\"transformPastedHTML\", f => { html = f(html, view); });\n dom = readHTML(html);\n if (webkit)\n restoreReplacedSpaces(dom);\n }\n let contextNode = dom && dom.querySelector(\"[data-pm-slice]\");\n let sliceData = contextNode && /^(\\d+) (\\d+)(?: -(\\d+))? (.*)/.exec(contextNode.getAttribute(\"data-pm-slice\") || \"\");\n if (sliceData && sliceData[3])\n for (let i = +sliceData[3]; i > 0; i--) {\n let child = dom.firstChild;\n while (child && child.nodeType != 1)\n child = child.nextSibling;\n if (!child)\n break;\n dom = child;\n }\n if (!slice) {\n let parser = view.someProp(\"clipboardParser\") || view.someProp(\"domParser\") || DOMParser.fromSchema(view.state.schema);\n slice = parser.parseSlice(dom, {\n preserveWhitespace: !!(asText || sliceData),\n context: $context,\n ruleFromNode(dom) {\n if (dom.nodeName == \"BR\" && !dom.nextSibling &&\n dom.parentNode && !inlineParents.test(dom.parentNode.nodeName))\n return { ignore: true };\n return null;\n }\n });\n }\n if (sliceData) {\n slice = addContext(closeSlice(slice, +sliceData[1], +sliceData[2]), sliceData[4]);\n }\n else { // HTML wasn't created by ProseMirror. Make sure top-level siblings are coherent\n slice = Slice.maxOpen(normalizeSiblings(slice.content, $context), true);\n if (slice.openStart || slice.openEnd) {\n let openStart = 0, openEnd = 0;\n for (let node = slice.content.firstChild; openStart < slice.openStart && !node.type.spec.isolating; openStart++, node = node.firstChild) { }\n for (let node = slice.content.lastChild; openEnd < slice.openEnd && !node.type.spec.isolating; openEnd++, node = node.lastChild) { }\n slice = closeSlice(slice, openStart, openEnd);\n }\n }\n view.someProp(\"transformPasted\", f => { slice = f(slice, view); });\n return slice;\n}\nconst inlineParents = /^(a|abbr|acronym|b|cite|code|del|em|i|ins|kbd|label|output|q|ruby|s|samp|span|strong|sub|sup|time|u|tt|var)$/i;\n// Takes a slice parsed with parseSlice, which means there hasn't been\n// any content-expression checking done on the top nodes, tries to\n// find a parent node in the current context that might fit the nodes,\n// and if successful, rebuilds the slice so that it fits into that parent.\n//\n// This addresses the problem that Transform.replace expects a\n// coherent slice, and will fail to place a set of siblings that don't\n// fit anywhere in the schema.\nfunction normalizeSiblings(fragment, $context) {\n if (fragment.childCount < 2)\n return fragment;\n for (let d = $context.depth; d >= 0; d--) {\n let parent = $context.node(d);\n let match = parent.contentMatchAt($context.index(d));\n let lastWrap, result = [];\n fragment.forEach(node => {\n if (!result)\n return;\n let wrap = match.findWrapping(node.type), inLast;\n if (!wrap)\n return result = null;\n if (inLast = result.length && lastWrap.length && addToSibling(wrap, lastWrap, node, result[result.length - 1], 0)) {\n result[result.length - 1] = inLast;\n }\n else {\n if (result.length)\n result[result.length - 1] = closeRight(result[result.length - 1], lastWrap.length);\n let wrapped = withWrappers(node, wrap);\n result.push(wrapped);\n match = match.matchType(wrapped.type);\n lastWrap = wrap;\n }\n });\n if (result)\n return Fragment.from(result);\n }\n return fragment;\n}\nfunction withWrappers(node, wrap, from = 0) {\n for (let i = wrap.length - 1; i >= from; i--)\n node = wrap[i].create(null, Fragment.from(node));\n return node;\n}\n// Used to group adjacent nodes wrapped in similar parents by\n// normalizeSiblings into the same parent node\nfunction addToSibling(wrap, lastWrap, node, sibling, depth) {\n if (depth < wrap.length && depth < lastWrap.length && wrap[depth] == lastWrap[depth]) {\n let inner = addToSibling(wrap, lastWrap, node, sibling.lastChild, depth + 1);\n if (inner)\n return sibling.copy(sibling.content.replaceChild(sibling.childCount - 1, inner));\n let match = sibling.contentMatchAt(sibling.childCount);\n if (match.matchType(depth == wrap.length - 1 ? node.type : wrap[depth + 1]))\n return sibling.copy(sibling.content.append(Fragment.from(withWrappers(node, wrap, depth + 1))));\n }\n}\nfunction closeRight(node, depth) {\n if (depth == 0)\n return node;\n let fragment = node.content.replaceChild(node.childCount - 1, closeRight(node.lastChild, depth - 1));\n let fill = node.contentMatchAt(node.childCount).fillBefore(Fragment.empty, true);\n return node.copy(fragment.append(fill));\n}\nfunction closeRange(fragment, side, from, to, depth, openEnd) {\n let node = side < 0 ? fragment.firstChild : fragment.lastChild, inner = node.content;\n if (depth < to - 1)\n inner = closeRange(inner, side, from, to, depth + 1, openEnd);\n if (depth >= from)\n inner = side < 0 ? node.contentMatchAt(0).fillBefore(inner, fragment.childCount > 1 || openEnd <= depth).append(inner)\n : inner.append(node.contentMatchAt(node.childCount).fillBefore(Fragment.empty, true));\n return fragment.replaceChild(side < 0 ? 0 : fragment.childCount - 1, node.copy(inner));\n}\nfunction closeSlice(slice, openStart, openEnd) {\n if (openStart < slice.openStart)\n slice = new Slice(closeRange(slice.content, -1, openStart, slice.openStart, 0, slice.openEnd), openStart, slice.openEnd);\n if (openEnd < slice.openEnd)\n slice = new Slice(closeRange(slice.content, 1, openEnd, slice.openEnd, 0, 0), slice.openStart, openEnd);\n return slice;\n}\n// Trick from jQuery -- some elements must be wrapped in other\n// elements for innerHTML to work. I.e. if you do `div.innerHTML =\n// \"