navigate-hacker-news-comments

1.0.0 • Public • Published

navigate-hacker-news-comments

Navigate in the DOM of a Hacker News comments page.

npm version build status ISC-licensed minimum Node.js version chat with me on Gitter support me via GitHub Sponsors

Installation

npm install navigate-hacker-news-comments

Usage

We assume that you run this code on a Hacker News post (such as this one) or comments page (such as this one). In the following examples, we will use the test/hn-post.html.

all comments

Let's find all comments, in the depth-first order in which they occur in the page:

const {findComments} = require('navigate-hacker-news-comments')
 
const comments = findComments(document)
while (true) {
    const {done, value: comment} = comments.next()
    if (done) break
    console.log(comment)
}

findComments is a generator function that walks the DOM step by step. It returns an iterator, so we can collect all comments using Array.from:

const allComments = Array.from(findComments(document))
console.log(...allComments.slice(0, 3))
{
    id: '23173572',
    parentId: '23172483',
    author: 'aazaa',
    age: '12 hours ago',
    text: '> ... Deno is (and always will be) a single…',
    level: 0,
}
{
    id: '23173707',
    parentId: '23173572',
    author: 'bgdam',
    age: '12 hours ago',
    text: 'See the thing about the sandbox…',
    level: 40,
}
{
    id: '23175634',
    parentId: '23173707',
    author: 'danShumway',
    age: '7 hours ago',
    text: `> That combined with the 'download…`,
    level: 80,
}

siblings

To find siblings (comments replying to the same parent) of a comment:

const {
    findCommentElement,
    findSiblings,
} = require('navigate-hacker-news-comments')
 
const foo = findCommentElement(document, '23174668')
const fooSiblings = findSiblings(document, foo)
Array.from(fooSiblings).length // 2

children

To find children of a comment:

const {findChildren} = require('navigate-hacker-news-comments')
 
const fooChildren = findChildren(document, foo)
Array.from(fooChildren).length // 4

Node.js

If you want to use this package in Node.js, use jsdom to emulate the DOM:

const {readFileSync} = require('fs')
const {JSDOM} = require('jsdom')
 
const post = readFileSync('path/to/hn-comments.html', {encoding: 'utf8'})
const {document} = new JSDOM(post).window

Contributing

If you have a question or need support using navigate-hacker-news-comments, please double-check your code and setup first. If you think you have found a bug or want to propose a feature, use the issues page.

Package Sidebar

Install

npm i navigate-hacker-news-comments

Weekly Downloads

1

Version

1.0.0

License

ISC

Unpacked Size

10.1 kB

Total Files

5

Last publish

Collaborators

  • derhuerst