fix: prevent history mess (#70)

* chore: add favicon

* fix: home article url

* fix: prevent duplicated history entry (unencoded & encoded)

* fix: prevent own app

* remove console.log

* fix: prevent showing cached cozy
This commit is contained in:
Ayo Ayco 2023-06-26 14:10:51 +02:00 committed by GitHub
parent 98b538396b
commit 34e32abe51
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 27 additions and 20 deletions

View file

@ -1,4 +1,4 @@
<h1 align="center"><s>Cozy 🧸</s> Uh, we need a new name! See why <a href="https://social.ayco.io/@ayo/110547172702258070">here</a></h1>
<h1 align="center"><s>Cozy</s> Uh, we need a new name! See why <a href="https://social.ayco.io/@ayo/110547172702258070">here</a></h1>
<p align="center">
<a href="https://github.com/ayoayco/cozy">
<img alt="Last Commit" src="https://img.shields.io/github/last-commit/ayoayco/cozy?logo=github" />
@ -58,6 +58,3 @@ It doesn't exist yet... I'll probably get to creating a browser extension at som
## Contributing
Speaking of PRs being welcome, see our [CONTRIBUTING guide](/CONTRIBUTING.md).
🧸

BIN
favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

View file

@ -12,6 +12,7 @@ import Icon from 'astro-iconify'
<a href="http://ayos.blog/building-a-cozy-web/">Hand-crafted</a> with <Icon name="line-md:heart" /> by <a href="https://ayo.ayco.io">Ayo Ayco</a>
<br />
<a href="https://github.com/ayoayco/cozy">Star on GitHub to support!</a>
<!-- <Icon name="twemoji:blue-circle" /> -->
</section>
<section class="disclaimer">All rights reserved to content owners.</section>

View file

@ -17,19 +17,30 @@ const {routerOutlet, skipSave = false} = Astro.props;
<script>
import { getPostCard, renderPost } from '../utils/library'
const cache = await caches.open('cozy-reader');
const url = new URL(window.location.href);
const response = await cache.match(url)
let url= new URL(window.location.href);
// only cached unencoded url param
const urlParam = url.searchParams.get('url')
if (urlParam) {
url = new URL(`${url.origin}/?url=${urlParam}`);
}
const response = await cache.match(url);
const postDivSelector = document.querySelector<HTMLInputElement>('#postDivSelector');
const skipSave = document.querySelector<HTMLInputElement>('#skipSave');
const includesAppURL = urlParam?.includes(window.location.origin)
if (!response && !skipSave?.checked) {
await cache.add(url);
if (!response && !skipSave?.checked && !includesAppURL) {
await cache.add(url);
}
const cachedRequests = (await cache.keys())
.filter(request => {
const urlObj = new URL(request.url);
return urlObj.search !== '' && urlObj.searchParams.get('url') !== '';
const urlParam = urlObj.searchParams.get('url');
return urlObj.search !== ''
&& !urlParam?.startsWith(window.location.origin)
&& urlParam !== ''
&& urlParam !== 'null';
});
if(cachedRequests?.length && postDivSelector !== null) {

View file

@ -5,14 +5,9 @@ import Footer from "../components/Footer.astro";
export interface Props {
article: ArticleData | null
}
const app: ArticleData = {
title: "Cozy 🧸",
description: "Remove distractions. Save your favorites. Get useful insights. Cozy is your modern-day reading assistant.",
content: "<p>Enter a URL in the address bar to get started.</p>",
url: '/'
};
const { article } = Astro.props;
const appTitle = article?.title ? `${article.title} | Cozy 🧸` : app.title;
const appTitle = article?.title ? `${article.title} | Cozy` : 'Cozy';
---
<!DOCTYPE html>

View file

@ -7,7 +7,7 @@ import Library from "../components/Library.astro";
import Footer from "../components/Footer.astro";
const url = Astro.url.searchParams.get('url');
let article: ArticleData | null = {};
let article: ArticleData | null = {url: '/'};
if (url)
try {

View file

@ -65,13 +65,13 @@ export function renderPost(responseText, url, postDivSelector: string, preventPu
backBtn?.removeAttribute('disabled');
submitBtn?.removeAttribute('disabled');
homeBtn?.removeAttribute('disabled');
document.title = `${getCozyTitle(html)} | Cozy 🧸`;
document.title = `${getCozyTitle(html)} | Cozy`;
} else {
appUrl.value = '';
backBtn?.setAttribute('disabled', 'true');
submitBtn?.setAttribute('disabled', 'true');
homeBtn?.setAttribute('disabled', 'true');
document.title = `Cozy 🧸`;
document.title = `Cozy`;
}
if(!preventPushState) {
@ -102,6 +102,9 @@ function getCozyTitle(html: HTMLHtmlElement): string | undefined {
return html.querySelector('meta[property="cozy:title"]')?.getAttribute("content")
/**
* backwards compatibility for stuff before we implemented cozy:meta tags
* REMOVE ON V1 release
*/
?? html.querySelector("title")?.innerHTML?.replace("Cozy 🧸 | ", "");
?? html.querySelector("title")?.innerHTML
?.replace("Cozy 🧸 | ", "")
}