Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/derhuerst/navigate-hacker-news-comments
Navigate in the DOM of a Hacker News comments page.
https://github.com/derhuerst/navigate-hacker-news-comments
dom hacker-news
Last synced: 30 days ago
JSON representation
Navigate in the DOM of a Hacker News comments page.
- Host: GitHub
- URL: https://github.com/derhuerst/navigate-hacker-news-comments
- Owner: derhuerst
- License: isc
- Created: 2020-05-16T13:52:25.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2021-09-15T20:59:16.000Z (over 3 years ago)
- Last Synced: 2024-12-31T11:41:29.321Z (about 1 month ago)
- Topics: dom, hacker-news
- Language: JavaScript
- Homepage: https://github.com/derhuerst/navigate-hacker-news-comments#navigate-hacker-news-comments
- Size: 85.9 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 3
-
Metadata Files:
- Readme: readme.md
- License: license.md
Awesome Lists containing this project
README
# navigate-hacker-news-comments
**Navigate in the [DOM](https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model) of a [Hacker News](https://news.ycombinator.com) comments page.**
[![npm version](https://img.shields.io/npm/v/navigate-hacker-news-comments.svg)](https://www.npmjs.com/package/navigate-hacker-news-comments)
[![build status](https://api.travis-ci.org/derhuerst/navigate-hacker-news-comments.svg?branch=master)](https://travis-ci.org/derhuerst/navigate-hacker-news-comments)
![ISC-licensed](https://img.shields.io/github/license/derhuerst/navigate-hacker-news-comments.svg)
![minimum Node.js version](https://img.shields.io/node/v/navigate-hacker-news-comments.svg)
[![chat with me on Gitter](https://img.shields.io/badge/chat%20with%20me-on%20gitter-512e92.svg)](https://gitter.im/derhuerst)
[![support me via GitHub Sponsors](https://img.shields.io/badge/support%20me-donate-fa7664.svg)](https://github.com/sponsors/derhuerst)## Installation
```shell
npm install navigate-hacker-news-comments
```## Usage
We assume that you run this code on a Hacker News post (such as [this one](https://news.ycombinator.com/item?id=23172483)) or comments page (such as [this one](https://news.ycombinator.com/item?id=23176953)). In the following examples, we will use the [`test/hn-post.html`](test/hn-post.html).
### all comments
Let's find all comments, in the [depth-first](https://en.wikipedia.org/wiki/Depth-first_search) order in which they occur in the page:
```js
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](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function*) that walks the DOM step by step. It returns an [iterator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#The_iterator_protocol), so we can collect all comments using [`Array.from`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from):
```js
const allComments = Array.from(findComments(document))
console.log(...allComments.slice(0, 3))
``````js
{
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:
```js
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:
```js
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](https://github.com/jsdom/jsdom) to emulate the DOM:
```js
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](https://github.com/derhuerst/navigate-hacker-news-comments/issues).