From f39c6923b0a53be26da98b5297326b30afcbbc48 Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Thu, 13 Oct 2022 18:11:11 +0800 Subject: [PATCH 1/2] Create a content handler for GitHub pages This will search for the markdown
element and make it the only page element so we add a repo's README. --- packages/content-handler/src/index.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/content-handler/src/index.ts b/packages/content-handler/src/index.ts index ba67d2d9d..5a144b2ee 100644 --- a/packages/content-handler/src/index.ts +++ b/packages/content-handler/src/index.ts @@ -9,6 +9,7 @@ import { TDotCoHandler } from './websites/t-dot-co-handler' import { TwitterHandler } from './websites/twitter-handler' import { YoutubeHandler } from './websites/youtube-handler' import { WikipediaHandler } from './websites/wikipedia-handler' +import { GitHubHandler } from './websites/github-handler' import { ContentHandler, NewsletterInput, @@ -52,6 +53,7 @@ const contentHandlers: ContentHandler[] = [ new TwitterHandler(), new YoutubeHandler(), new WikipediaHandler(), + new GitHubHandler(), new AxiosHandler(), new GolangHandler(), new MorningBrewHandler(), From ff21770a7089d4ce04b1b80b92378d402e67e544 Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Thu, 13 Oct 2022 18:38:01 +0800 Subject: [PATCH 2/2] Add GitHubHandler class --- .../src/websites/github-handler.ts | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 packages/content-handler/src/websites/github-handler.ts diff --git a/packages/content-handler/src/websites/github-handler.ts b/packages/content-handler/src/websites/github-handler.ts new file mode 100644 index 000000000..c31fe2224 --- /dev/null +++ b/packages/content-handler/src/websites/github-handler.ts @@ -0,0 +1,23 @@ +import { ContentHandler } from '../content-handler' + +export class GitHubHandler extends ContentHandler { + constructor() { + super() + this.name = 'github' + } + + shouldPreParse(url: string, dom: Document): boolean { + return new URL(url).hostname.endsWith('github.com') + } + + async preParse(url: string, dom: Document): Promise { + const body = dom.querySelector('body') + const article = dom.querySelector('article') + + if (body && article) { + body?.replaceChildren(article) + } + + return Promise.resolve(dom) + } +}