{"version":3,"file":"static/chunks/fc83e031-0394f19dfca73032.js","mappings":"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","sources":["webpack://_N_E/./node_modules/prosemirror-view/dist/index.js"],"sourcesContent":["import { TextSelection, NodeSelection, AllSelection, Selection } 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}\nfunction caretFromPoint(doc, x, y) {\n if (doc.caretPositionFromPoint) {\n try { // Firefox throws for this call in hard-to-predict circumstances (#994)\n let pos = doc.caretPositionFromPoint(x, y);\n if (pos)\n return { node: pos.offsetNode, offset: pos.offset };\n }\n catch (_) { }\n }\n if (doc.caretRangeFromPoint) {\n let range = doc.caretRangeFromPoint(x, y);\n if (range)\n return { node: range.startContainer, offset: range.startOffset };\n }\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 windows = nav ? /Win/.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 - rect.top > bounding.bottom - bounding.top\n ? rect.top + getSide(scrollMargin, \"top\") - bounding.top\n : 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 || /^(fixed|sticky)$/.test(getComputedStyle(parent).position))\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 let firstBelow, coordsBelow;\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 else if (rect.top > coords.top && !firstBelow && rect.left <= coords.left && rect.right >= coords.left) {\n firstBelow = child;\n coordsBelow = { left: Math.max(rect.left, Math.min(rect.right, coords.left)), top: rect.top };\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 && firstBelow) {\n closest = firstBelow;\n coordsClosest = coordsBelow;\n dxClosest = 0;\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 outsideBlock = -1;\n for (let cur = node, sawBlock = false;;) {\n if (cur == view.dom)\n break;\n let desc = view.docView.nearestDesc(cur, true);\n if (!desc)\n return null;\n if (desc.dom.nodeType == 1 && (desc.node.isBlock && desc.parent && !sawBlock || !desc.contentDOM)) {\n let rect = desc.dom.getBoundingClientRect();\n if (desc.node.isBlock && desc.parent && !sawBlock) {\n sawBlock = true;\n if (rect.left > coords.left || rect.top > coords.top)\n outsideBlock = desc.posBefore;\n else if (rect.right < coords.left || rect.bottom < coords.top)\n outsideBlock = desc.posAfter;\n }\n if (!desc.contentDOM && outsideBlock < 0 && !desc.node.isText) {\n // If we are inside a leaf, return the side of the leaf closer to the coords\n let before = desc.node.isBlock ? coords.top < (rect.top + rect.bottom) / 2\n : coords.left < (rect.left + rect.right) / 2;\n return before ? desc.posBefore : desc.posAfter;\n }\n }\n cur = desc.dom.parentNode;\n }\n return outsideBlock > -1 ? outsideBlock : 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 let caret = caretFromPoint(doc, coords.left, coords.top);\n if (caret)\n ({ node, offset } = caret);\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 let prev;\n // When clicking above the right side of an uneditable node, Chrome will report a cursor position after that node.\n if (webkit && offset && node.nodeType == 1 && (prev = node.childNodes[offset - 1]).nodeType == 1 &&\n prev.contentEditable == \"false\" && prev.getBoundingClientRect().top >= coords.top)\n offset--;\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 nonZero(rect) {\n return rect.top < rect.bottom || rect.left < rect.right;\n}\nfunction singleRect(target, bias) {\n let rects = target.getClientRects();\n if (rects.length) {\n let first = rects[bias < 0 ? 0 : rects.length - 1];\n if (nonZero(first))\n return first;\n }\n return Array.prototype.find.call(rects, nonZero) || target.getBoundingClientRect();\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), takeSide), 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.contentDOM || 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 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 };\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 }\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, off)) ;\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 let docView = new NodeViewDesc(undefined, doc, outerDeco, innerDeco, dom, dom, dom, view, 0);\n if (docView.contentDOM)\n docView.updateChildren(view, 0);\n return docView;\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 let next = this.top.children[i];\n if (next.matchesMark(marks[depth]) && !this.isLocked(next.dom)) {\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, pos) {\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, updated;\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.isLocked(nextDOM) &&\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 else if (!locked && (updated = this.recreateWrapper(next, node, outerDeco, innerDeco, view, pos))) {\n this.top.children[this.index] = updated;\n if (updated.contentDOM) {\n updated.dirty = CONTENT_DIRTY;\n updated.updateChildren(view, pos + 1);\n updated.dirty = NOT_DIRTY;\n }\n this.changed = true;\n this.index++;\n return true;\n }\n break;\n }\n }\n return false;\n }\n // When a node with content is replaced by a different node with\n // identical content, move over its children.\n recreateWrapper(next, node, outerDeco, innerDeco, view, pos) {\n if (next.dirty || node.isAtom || !next.children.length ||\n !next.node.content.eq(node.content))\n return null;\n let wrapper = NodeViewDesc.create(this.top, node, outerDeco, innerDeco, view, pos);\n if (wrapper.contentDOM) {\n wrapper.children = next.children;\n next.children = [];\n for (let ch of wrapper.children)\n ch.parent = wrapper;\n }\n next.destroy();\n return wrapper;\n }\n // Insert the node as a newly created node desc.\n addNode(node, outerDeco, innerDeco, view, pos) {\n let desc = NodeViewDesc.create(this.top, node, outerDeco, innerDeco, view, pos);\n if (desc.contentDOM)\n desc.updateChildren(view, pos + 1);\n this.top.children.splice(this.index++, 0, desc);\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 isLocked(node) {\n return this.lock && (node == this.lock || node.nodeType == 1 && node.contains(this.lock.parentNode));\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 let widget, widgets;\n while (decoIndex < locals.length && locals[decoIndex].to == offset) {\n let next = locals[decoIndex++];\n if (next.widget) {\n if (!widget)\n widget = next;\n else\n (widgets || (widgets = [widget])).push(next);\n }\n }\n if (widget) {\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 else {\n while (decoIndex < locals.length && locals[decoIndex].to < end)\n decoIndex++;\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 if (pos >= to && str.slice(to - text.length - childStart, to - childStart) == text)\n return to - text.length;\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 (mods.indexOf(\"s\") > -1) {\n let { $head } = sel, node = $head.textOffset ? null : dir < 0 ? $head.nodeBefore : $head.nodeAfter;\n if (!node || node.isText || !node.isLeaf)\n return false;\n let $newHead = view.state.doc.resolve($head.pos + node.nodeSize * (dir < 0 ? -1 : 1));\n return apply(view, new TextSelection(sel.$anchor, $newHead));\n }\n else if (!sel.empty) {\n return false;\n }\n else if (view.endOfTextblock(dir > 0 ? \"forward\" : \"backward\")) {\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, dir) {\n let desc = dom.pmViewDesc;\n return desc && desc.size == 0 && (dir < 0 || dom.nextSibling || dom.nodeName != \"BR\");\n}\nfunction skipIgnoredNodes(view, dir) {\n return dir < 0 ? skipIgnoredNodesBefore(view) : skipIgnoredNodesAfter(view);\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 skipIgnoredNodesBefore(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], -1))\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, -1)) {\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, -1)) {\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 skipIgnoredNodesAfter(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, 1)) {\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, 1)) {\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 textNodeAfter(node, offset) {\n while (node && offset == node.childNodes.length && !hasBlockDesc(node)) {\n offset = domIndex(node) + 1;\n node = node.parentNode;\n }\n while (node && offset < node.childNodes.length) {\n let next = node.childNodes[offset];\n if (next.nodeType == 3)\n return next;\n if (next.nodeType == 1 && next.contentEditable == \"false\")\n break;\n node = next;\n offset = 0;\n }\n}\nfunction textNodeBefore(node, offset) {\n while (node && !offset && !hasBlockDesc(node)) {\n offset = domIndex(node);\n node = node.parentNode;\n }\n while (node && offset) {\n let next = node.childNodes[offset - 1];\n if (next.nodeType == 3)\n return next;\n if (next.nodeType == 1 && next.contentEditable == \"false\")\n break;\n node = next;\n offset = node.childNodes.length;\n }\n}\nfunction setSelFocus(view, node, offset) {\n if (node.nodeType != 3) {\n let before, after;\n if (after = textNodeAfter(node, offset)) {\n node = after;\n offset = 0;\n }\n else if (before = textNodeBefore(node, offset)) {\n node = before;\n offset = before.nodeValue.length;\n }\n }\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}\nfunction findDirection(view, pos) {\n let $pos = view.state.doc.resolve(pos);\n if (!(chrome || windows) && $pos.parent.inlineContent) {\n let coords = view.coordsAtPos(pos);\n if (pos > $pos.start()) {\n let before = view.coordsAtPos(pos - 1);\n let mid = (before.top + before.bottom) / 2;\n if (mid > coords.top && mid < coords.bottom && Math.abs(before.left - coords.left) > 1)\n return before.left < coords.left ? \"ltr\" : \"rtl\";\n }\n if (pos < $pos.end()) {\n let after = view.coordsAtPos(pos + 1);\n let mid = (after.top + after.bottom) / 2;\n if (mid > coords.top && mid < coords.bottom && Math.abs(after.left - coords.left) > 1)\n return after.left > coords.left ? \"ltr\" : \"rtl\";\n }\n }\n let computed = getComputedStyle(view.dom).direction;\n return computed == \"rtl\" ? \"rtl\" : \"ltr\";\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) || skipIgnoredNodes(view, -1);\n }\n else if ((code == 46 && !event.shiftKey) || (mac && code == 68 && mods == \"c\")) { // Delete, Ctrl-d on Mac\n return stopNativeHorizontalDelete(view, 1) || skipIgnoredNodes(view, 1);\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 let dir = code == 37 ? (findDirection(view, view.state.selection.from) == \"ltr\" ? -1 : 1) : -1;\n return selectHorizontally(view, dir, mods) || skipIgnoredNodes(view, dir);\n }\n else if (code == 39 || (mac && code == 70 && mods == \"c\")) { // Right arrow, Ctrl-f on Mac\n let dir = code == 39 ? (findDirection(view, view.state.selection.from) == \"ltr\" ? 1 : -1) : 1;\n return selectHorizontally(view, dir, mods) || skipIgnoredNodes(view, dir);\n }\n else if (code == 38 || (mac && code == 80 && mods == \"c\")) { // Up arrow, Ctrl-p on Mac\n return selectVertically(view, -1, mods) || skipIgnoredNodes(view, -1);\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) || skipIgnoredNodes(view, 1);\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 (fragment.childCount > 1)\n openEnd = 0;\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, 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// \"