Replace associateNameToElements with pairUpElements
							parent
							
								
									e211bb30e4
								
							
						
					
					
						commit
						061008c5a5
					
				| 
						 | 
				
			
			@ -78,7 +78,7 @@ export function parseF95ThreadPost($: cheerio.Root, post: cheerio.Cheerio): IPos
 | 
			
		|||
  supernode = removeEmptyContentFromElement(supernode);
 | 
			
		||||
 | 
			
		||||
  // Finally parse the elements to create the pairs of title/data
 | 
			
		||||
  return associateNameToElements(supernode.content);
 | 
			
		||||
  return pairUpElements(supernode.content);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//#endregion Public methods
 | 
			
		||||
| 
						 | 
				
			
			@ -410,57 +410,7 @@ function parseCheerioNode($: cheerio.Root, node: cheerio.Element): IPostElement
 | 
			
		|||
 * It simplifies the `IPostElement` elements by associating
 | 
			
		||||
 * the corresponding value to each characterizing element (i.e. author).
 | 
			
		||||
 */
 | 
			
		||||
function associateNameToElements(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[] {
 | 
			
		||||
function pairUpElements(elements: IPostElement[]): IPostElement[] {
 | 
			
		||||
  // First ignore the "Generic" type elements, because
 | 
			
		||||
  // they usually are containers for other data, like
 | 
			
		||||
  // overview or download links.
 | 
			
		||||
| 
						 | 
				
			
			@ -486,7 +436,7 @@ function pairUp(elements: IPostElement[]): IPostElement[] {
 | 
			
		|||
  // so all the elements with "Generic" type
 | 
			
		||||
  const genericElementsPairs = elements
 | 
			
		||||
    .filter((e) => e.type === "Generic")
 | 
			
		||||
    .map((e) => pairUp(e.content));
 | 
			
		||||
    .map((e) => pairUpElements(e.content));
 | 
			
		||||
 | 
			
		||||
  const flatten: IPostElement[] = [].concat(...genericElementsPairs);
 | 
			
		||||
  data.push(...flatten);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue