take list nesting into account for indenting
This commit is contained in:
parent
d3b552411c
commit
503d702f47
1 changed files with 20 additions and 7 deletions
|
@ -70,7 +70,7 @@ function parseCodeBlock(n, partCreator) {
|
||||||
return parts;
|
return parts;
|
||||||
}
|
}
|
||||||
|
|
||||||
function parseElement(n, partCreator) {
|
function parseElement(n, partCreator, state) {
|
||||||
switch (n.nodeName) {
|
switch (n.nodeName) {
|
||||||
case "A":
|
case "A":
|
||||||
return parseLink(n, partCreator);
|
return parseLink(n, partCreator);
|
||||||
|
@ -86,12 +86,18 @@ function parseElement(n, partCreator) {
|
||||||
return partCreator.plain(`\`${n.textContent}\``);
|
return partCreator.plain(`\`${n.textContent}\``);
|
||||||
case "DEL":
|
case "DEL":
|
||||||
return partCreator.plain(`<del>${n.textContent}</del>`);
|
return partCreator.plain(`<del>${n.textContent}</del>`);
|
||||||
case "LI":
|
case "LI": {
|
||||||
|
const indent = " ".repeat(state.listDepth - 1);
|
||||||
if (n.parentElement.nodeName === "OL") {
|
if (n.parentElement.nodeName === "OL") {
|
||||||
return partCreator.plain(` 1. `);
|
return partCreator.plain(`${indent}1. `);
|
||||||
} else {
|
} else {
|
||||||
return partCreator.plain(` - `);
|
return partCreator.plain(`${indent}- `);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
case "OL":
|
||||||
|
case "UL":
|
||||||
|
state.listDepth = (state.listDepth || 0) + 1;
|
||||||
|
// es-lint-disable-next-line no-fallthrough
|
||||||
default:
|
default:
|
||||||
// don't textify block nodes we'll decend into
|
// don't textify block nodes we'll decend into
|
||||||
if (!checkDecendInto(n)) {
|
if (!checkDecendInto(n)) {
|
||||||
|
@ -161,6 +167,7 @@ function parseHtmlMessage(html, partCreator) {
|
||||||
const parts = [];
|
const parts = [];
|
||||||
let lastNode;
|
let lastNode;
|
||||||
let inQuote = false;
|
let inQuote = false;
|
||||||
|
const state = {};
|
||||||
|
|
||||||
function onNodeEnter(n) {
|
function onNodeEnter(n) {
|
||||||
if (checkIgnored(n)) {
|
if (checkIgnored(n)) {
|
||||||
|
@ -178,7 +185,7 @@ function parseHtmlMessage(html, partCreator) {
|
||||||
if (n.nodeType === Node.TEXT_NODE) {
|
if (n.nodeType === Node.TEXT_NODE) {
|
||||||
newParts.push(...parseAtRoomMentions(n.nodeValue, partCreator));
|
newParts.push(...parseAtRoomMentions(n.nodeValue, partCreator));
|
||||||
} else if (n.nodeType === Node.ELEMENT_NODE) {
|
} else if (n.nodeType === Node.ELEMENT_NODE) {
|
||||||
const parseResult = parseElement(n, partCreator);
|
const parseResult = parseElement(n, partCreator, state);
|
||||||
if (parseResult) {
|
if (parseResult) {
|
||||||
if (Array.isArray(parseResult)) {
|
if (Array.isArray(parseResult)) {
|
||||||
newParts.push(...parseResult);
|
newParts.push(...parseResult);
|
||||||
|
@ -207,8 +214,14 @@ function parseHtmlMessage(html, partCreator) {
|
||||||
if (checkIgnored(n)) {
|
if (checkIgnored(n)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (n.nodeName === "BLOCKQUOTE") {
|
switch (n.nodeName) {
|
||||||
|
case "BLOCKQUOTE":
|
||||||
inQuote = false;
|
inQuote = false;
|
||||||
|
break;
|
||||||
|
case "OL":
|
||||||
|
case "UL":
|
||||||
|
state.listDepth -= 1;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
lastNode = n;
|
lastNode = n;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue