Port: Catch errors due to "Restricted" selection. #2905

from 2a47dfd8ba724b17f5bc5f9214bea8ce8b469398
This commit is contained in:
Tuxedo Takodachi 2023-03-18 10:32:30 +01:00
parent f547779106
commit 59af4ba8fe

View File

@ -383,44 +383,46 @@ var QR = {
postRange.selectNode(root);
let text = post.board.ID === g.BOARD.ID ? `>>${post}\n` : `>>>/${post.board}/${post}\n`;
for (let i = 0, end = sel.rangeCount, asc = 0 <= end; asc ? i < end : i > end; asc ? i++ : i--) {
var insideCode, node;
range = sel.getRangeAt(i);
// Trim range to be fully inside post
if (range.compareBoundaryPoints(Range.START_TO_START, postRange) < 0) {
range.setStartBefore(root);
}
if (range.compareBoundaryPoints(Range.END_TO_END, postRange) > 0) {
range.setEndAfter(root);
}
try {
var insideCode, node;
range = sel.getRangeAt(i);
// Trim range to be fully inside post
if (range.compareBoundaryPoints(Range.START_TO_START, postRange) < 0) {
range.setStartBefore(root);
}
if (range.compareBoundaryPoints(Range.END_TO_END, postRange) > 0) {
range.setEndAfter(root);
}
if (!range.toString().trim()) { continue; }
if (!range.toString().trim()) { continue; }
var frag = range.cloneContents();
var ancestor = range.commonAncestorContainer;
// Quoting the insides of a spoiler/code tag.
if ($.x('ancestor-or-self::*[self::s or contains(@class,"removed-spoiler")]', ancestor)) {
$.prepend(frag, $.tn('[spoiler]'));
$.add(frag, $.tn('[/spoiler]'));
}
if (insideCode = $.x('ancestor-or-self::pre[contains(@class,"prettyprint")]', ancestor)) {
$.prepend(frag, $.tn('[code]'));
$.add(frag, $.tn('[/code]'));
}
for (node of $$((insideCode ? 'br' : '.prettyprint br'), frag)) {
$.replace(node, $.tn('\n'));
}
for (node of $$('br', frag)) {
if (node !== frag.lastChild) { $.replace(node, $.tn('\n>')); }
}
g.SITE.insertTags?.(frag);
for (node of $$('.linkify[data-original]', frag)) {
$.replace(node, $.tn(node.dataset.original));
}
for (node of $$('.embedder', frag)) {
if (node.previousSibling?.nodeValue === ' ') { $.rm(node.previousSibling); }
$.rm(node);
}
text += `>${frag.textContent.trim()}\n`;
var frag = range.cloneContents();
var ancestor = range.commonAncestorContainer;
// Quoting the insides of a spoiler/code tag.
if ($.x('ancestor-or-self::*[self::s or contains(@class,"removed-spoiler")]', ancestor)) {
$.prepend(frag, $.tn('[spoiler]'));
$.add(frag, $.tn('[/spoiler]'));
}
if (insideCode = $.x('ancestor-or-self::pre[contains(@class,"prettyprint")]', ancestor)) {
$.prepend(frag, $.tn('[code]'));
$.add(frag, $.tn('[/code]'));
}
for (node of $$((insideCode ? 'br' : '.prettyprint br'), frag)) {
$.replace(node, $.tn('\n'));
}
for (node of $$('br', frag)) {
if (node !== frag.lastChild) { $.replace(node, $.tn('\n>')); }
}
g.SITE.insertTags?.(frag);
for (node of $$('.linkify[data-original]', frag)) {
$.replace(node, $.tn(node.dataset.original));
}
for (node of $$('.embedder', frag)) {
if (node.previousSibling?.nodeValue === ' ') { $.rm(node.previousSibling); }
$.rm(node);
}
text += `>${frag.textContent.trim()}\n`;
} catch (error) { }
}
QR.openPost();