feat: cozify to prefetch links and open in cozy
This commit is contained in:
parent
8470e5bee6
commit
9c1627b3e5
2 changed files with 19 additions and 5 deletions
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
import { ArticleData } from "@extractus/article-extractor";
|
import { ArticleData } from "@extractus/article-extractor";
|
||||||
import clean from '../utils/sanitizer';
|
import { cozify } from "../utils/sanitizer"
|
||||||
export interface Props {
|
export interface Props {
|
||||||
article: ArticleData | null;
|
article: ArticleData | null;
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,7 @@ article ??= error;
|
||||||
const datePublished =
|
const datePublished =
|
||||||
article?.published && new Date(article.published).toDateString();
|
article?.published && new Date(article.published).toDateString();
|
||||||
|
|
||||||
const cleanContent = clean(article.content ?? '')
|
const cleanContent = await cozify(article.content ?? '', Astro.url.origin)
|
||||||
---
|
---
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
|
|
|
@ -1,11 +1,25 @@
|
||||||
import { transform } from 'ultrahtml'
|
import { parse, render, transform, walkSync } from 'ultrahtml'
|
||||||
import sanitize from 'ultrahtml/transformers/sanitize'
|
import sanitize from 'ultrahtml/transformers/sanitize'
|
||||||
|
|
||||||
export default function clean(html: string) {
|
export async function cozify(html: string, baseUrl: string): Promise<string> {
|
||||||
|
|
||||||
return transform(html, [
|
// remove target="_blank" from links
|
||||||
|
const ast = parse(html)
|
||||||
|
walkSync(ast, (node) => {
|
||||||
|
if (node.name === 'a') {
|
||||||
|
node.attributes.href = `${baseUrl}?url=${node.attributes.href}`
|
||||||
|
node.attributes.prefetch = true
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const newHtml = await render(ast);
|
||||||
|
|
||||||
|
return transform(newHtml, [
|
||||||
sanitize({
|
sanitize({
|
||||||
dropElements: ['script'],
|
dropElements: ['script'],
|
||||||
|
dropAttributes: {
|
||||||
|
target: ['a']
|
||||||
|
}
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue