Replace associateNameToElements with pairUpElements
parent
e211bb30e4
commit
061008c5a5
|
@ -78,7 +78,7 @@ export function parseF95ThreadPost($: cheerio.Root, post: cheerio.Cheerio): IPos
|
||||||
supernode = removeEmptyContentFromElement(supernode);
|
supernode = removeEmptyContentFromElement(supernode);
|
||||||
|
|
||||||
// Finally parse the elements to create the pairs of title/data
|
// Finally parse the elements to create the pairs of title/data
|
||||||
return associateNameToElements(supernode.content);
|
return pairUpElements(supernode.content);
|
||||||
}
|
}
|
||||||
|
|
||||||
//#endregion Public methods
|
//#endregion Public methods
|
||||||
|
@ -410,57 +410,7 @@ function parseCheerioNode($: cheerio.Root, node: cheerio.Element): IPostElement
|
||||||
* It simplifies the `IPostElement` elements by associating
|
* It simplifies the `IPostElement` elements by associating
|
||||||
* the corresponding value to each characterizing element (i.e. author).
|
* the corresponding value to each characterizing element (i.e. author).
|
||||||
*/
|
*/
|
||||||
function associateNameToElements(elements: IPostElement[]): IPostElement[] {
|
function pairUpElements(elements: IPostElement[]): IPostElement[] {
|
||||||
// Local variables
|
|
||||||
const pairs: IPostElement[] = [];
|
|
||||||
const specialCharsRegex = /^[-!$%^&*()_+|~=`{}[\]:";'<>?,./]/;
|
|
||||||
const specialRegex = new RegExp(specialCharsRegex);
|
|
||||||
|
|
||||||
for (let i = 0; i < elements.length; i++) {
|
|
||||||
// If the text starts with a special char, clean it
|
|
||||||
const startWithSpecial = specialRegex.test(elements[i].text);
|
|
||||||
|
|
||||||
// Get the latest IPostElement in "pairs"
|
|
||||||
const lastIndex = pairs.length - 1;
|
|
||||||
const lastPair = pairs[lastIndex];
|
|
||||||
|
|
||||||
// If this statement is valid, we have a "data"
|
|
||||||
if (elements[i].type === "Text" && startWithSpecial && pairs.length > 0) {
|
|
||||||
// We merge this element with the last element appended to 'pairs'
|
|
||||||
const cleanText = elements[i].text.replace(specialCharsRegex, "").trim();
|
|
||||||
lastPair.text = lastPair.text || cleanText;
|
|
||||||
lastPair.content.push(...elements[i].content);
|
|
||||||
}
|
|
||||||
// This is a special case
|
|
||||||
else if (elementIsOverview(elements[i])) {
|
|
||||||
// We add the overview to the pairs as a text element
|
|
||||||
elements[i].type = "Text";
|
|
||||||
elements[i].name = "Overview";
|
|
||||||
elements[i].text = getOverviewFromElement(elements[i]);
|
|
||||||
pairs.push(elements[i]);
|
|
||||||
}
|
|
||||||
// We have an element referred to the previous "title"
|
|
||||||
else if (elements[i].type != "Text" && pairs.length > 0) {
|
|
||||||
// We append this element to the content of the last title
|
|
||||||
lastPair.content.push(elements[i]);
|
|
||||||
}
|
|
||||||
// ... else we have a "title" (we need to swap the text to the name because it is a title)
|
|
||||||
else {
|
|
||||||
const swap: IPostElement = Object.assign({}, elements[i]);
|
|
||||||
swap.name = elements[i].text;
|
|
||||||
swap.text = "";
|
|
||||||
pairs.push(swap);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return pairUp(elements);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* It simplifies the `IPostElement` elements by associating
|
|
||||||
* the corresponding value to each characterizing element (i.e. author).
|
|
||||||
*/
|
|
||||||
function pairUp(elements: IPostElement[]): IPostElement[] {
|
|
||||||
// First ignore the "Generic" type elements, because
|
// First ignore the "Generic" type elements, because
|
||||||
// they usually are containers for other data, like
|
// they usually are containers for other data, like
|
||||||
// overview or download links.
|
// overview or download links.
|
||||||
|
@ -486,7 +436,7 @@ function pairUp(elements: IPostElement[]): IPostElement[] {
|
||||||
// so all the elements with "Generic" type
|
// so all the elements with "Generic" type
|
||||||
const genericElementsPairs = elements
|
const genericElementsPairs = elements
|
||||||
.filter((e) => e.type === "Generic")
|
.filter((e) => e.type === "Generic")
|
||||||
.map((e) => pairUp(e.content));
|
.map((e) => pairUpElements(e.content));
|
||||||
|
|
||||||
const flatten: IPostElement[] = [].concat(...genericElementsPairs);
|
const flatten: IPostElement[] = [].concat(...genericElementsPairs);
|
||||||
data.push(...flatten);
|
data.push(...flatten);
|
||||||
|
|
Loading…
Reference in New Issue