2 Commits

Author SHA1 Message Date
jaandrle 139b1590ce Uses original router
- it has benefits to use hash properly
2026-04-29 13:40:40 +02:00
jaandrle 3cc11b68de 🎉 2026-04-28 17:16:00 +02:00
14 changed files with 103 additions and 153 deletions
+2
View File
@@ -5,6 +5,7 @@ set -eo pipefail # this can be harmful, see https://www.youtube.com/watch?v=4Jo3
exit 1; exit 1;
} }
# depends on # depends on
declare -r lint='bs/lint'
declare -r rollup='node_modules/.bin/rollup' declare -r rollup='node_modules/.bin/rollup'
declare -r analyze='bs/analyze' declare -r analyze='bs/analyze'
declare -r config='rollup.config.js' declare -r config='rollup.config.js'
@@ -20,6 +21,7 @@ help(){
main(){ main(){
help "${@}" help "${@}"
$lint
rm -rf "$dist" rm -rf "$dist"
$rollup -c $config "${@}" $rollup -c $config "${@}"
$analyze --exclude "$dist" $analyze --exclude "$dist"
+2 -1
View File
@@ -1,13 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<opml version="1.0"> <opml version="1.0">
<head> <head>
<dateCreated>Tue, 21 Apr 2026 11:06:35 GMT</dateCreated> <dateCreated>Fri, 24 Apr 2026 13:48:25 GMT</dateCreated>
<title>jaa-podcasty subscriptions in CommaFeed</title> <title>jaa-podcasty subscriptions in CommaFeed</title>
</head> </head>
<body> <body>
<outline text="Epizody z vypršených odběrů" type="rss" title="Epizody z vypršených odběrů" xmlUrl="https://jaandrle.cz/p/2026-04-07.xml" htmlUrl="https://jaandrle.cz/podcasts/" /> <outline text="Epizody z vypršených odběrů" type="rss" title="Epizody z vypršených odběrů" xmlUrl="https://jaandrle.cz/p/2026-04-07.xml" htmlUrl="https://jaandrle.cz/podcasts/" />
<outline text="Playlist: Čestmír &amp; Daniela - YouTube" type="rss" title="Playlist: Čestmír &amp; Daniela - YouTube" xmlUrl="http://rss-bridge.jaandrle.cz/?action=display&amp;bridge=YoutubeBridge&amp;token=Chief*Snowplow1*Drastic&amp;context=By+playlist+Id&amp;p=PLPK5bz7v9zh1BFEHQrNri-iCeugTjq1Jj&amp;duration_min=&amp;duration_max=&amp;format=Atom" htmlUrl="http://rss-bridge.jaandrle.cz/?action=display&amp;bridge=YoutubeBridge&amp;token=Chief*Snowplow1*Drastic&amp;context=By+playlist+Id&amp;p=PLPK5bz7v9zh1BFEHQrNri-iCeugTjq1Jj&amp;duration_min=&amp;duration_max=&amp;format=Atom" /> <outline text="Playlist: Čestmír &amp; Daniela - YouTube" type="rss" title="Playlist: Čestmír &amp; Daniela - YouTube" xmlUrl="http://rss-bridge.jaandrle.cz/?action=display&amp;bridge=YoutubeBridge&amp;token=Chief*Snowplow1*Drastic&amp;context=By+playlist+Id&amp;p=PLPK5bz7v9zh1BFEHQrNri-iCeugTjq1Jj&amp;duration_min=&amp;duration_max=&amp;format=Atom" htmlUrl="http://rss-bridge.jaandrle.cz/?action=display&amp;bridge=YoutubeBridge&amp;token=Chief*Snowplow1*Drastic&amp;context=By+playlist+Id&amp;p=PLPK5bz7v9zh1BFEHQrNri-iCeugTjq1Jj&amp;duration_min=&amp;duration_max=&amp;format=Atom" />
<outline text="5:59" type="rss" title="5:59" xmlUrl="https://feeds.transistor.fm/5-59" htmlUrl="https://www.seznamzpravy.cz/" /> <outline text="5:59" type="rss" title="5:59" xmlUrl="https://feeds.transistor.fm/5-59" htmlUrl="https://www.seznamzpravy.cz/" />
<outline text="Redneck &amp; Beneš" type="rss" title="Redneck &amp; Beneš" xmlUrl="https://www.voxpot.cz/pod/rss/844dd837-6063-4b77-99c5-5adf7c7622f5/redneck-benes.xml" htmlUrl="https://www.voxpot.cz/muj-ucet" />
<outline text="Pinepods News Podcast" type="rss" title="Pinepods News Podcast" xmlUrl="https://news.pinepods.online/feed.xml" htmlUrl="https://news.pinepods.online" /> <outline text="Pinepods News Podcast" type="rss" title="Pinepods News Podcast" xmlUrl="https://news.pinepods.online/feed.xml" htmlUrl="https://news.pinepods.online" />
<outline text="Český rozhlas - Věda" type="rss" title="Český rozhlas - Věda" xmlUrl="https://api.mujrozhlas.cz/rss/topic/8c432621-a9a9-4c0a-8376-ea4ae5707fbb.rss" htmlUrl="https://www.mujrozhlas.cz/topic/view/8c432621-a9a9-4c0a-8376-ea4ae5707fbb" /> <outline text="Český rozhlas - Věda" type="rss" title="Český rozhlas - Věda" xmlUrl="https://api.mujrozhlas.cz/rss/topic/8c432621-a9a9-4c0a-8376-ea4ae5707fbb.rss" htmlUrl="https://www.mujrozhlas.cz/topic/view/8c432621-a9a9-4c0a-8376-ea4ae5707fbb" />
<outline text="Bilance" type="rss" title="Bilance" xmlUrl="https://feeds.transistor.fm/bilance" htmlUrl="https://www.ceskatelevize.cz/porady/14021364946-bilance/" /> <outline text="Bilance" type="rss" title="Bilance" xmlUrl="https://feeds.transistor.fm/bilance" htmlUrl="https://www.ceskatelevize.cz/porady/14021364946-bilance/" />
+1 -1
View File
@@ -23,7 +23,7 @@
<body> <body>
<app-cfpodcasts></app-cfpodcasts> <app-cfpodcasts></app-cfpodcasts>
<script type="module" src="./out-tsc/src/app-index.js"></script> <script type="module" src="./out-tsc/src/index.js"></script>
</body> </body>
</html> </html>
+10 -75
View File
@@ -9,6 +9,7 @@
"version": "0.0.0", "version": "0.0.0",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@lit-labs/router": "^0.1.4",
"lit": "~3.3" "lit": "~3.3"
}, },
"devDependencies": { "devDependencies": {
@@ -2201,6 +2202,15 @@
"@jridgewell/sourcemap-codec": "^1.4.14" "@jridgewell/sourcemap-codec": "^1.4.14"
} }
}, },
"node_modules/@lit-labs/router": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/@lit-labs/router/-/router-0.1.4.tgz",
"integrity": "sha512-xURH6fOPE0MYfXa1nyl+qTIhZRVWkFa2oggTRodKAI2q/HjA2Va7HEKe7fMm8DdnFE+zEI2aUGnStawKpVh3lQ==",
"license": "BSD-3-Clause",
"dependencies": {
"lit": "^2.0.0 || ^3.0.0"
}
},
"node_modules/@lit-labs/ssr-dom-shim": { "node_modules/@lit-labs/ssr-dom-shim": {
"version": "1.5.1", "version": "1.5.1",
"resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.5.1.tgz", "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.5.1.tgz",
@@ -2435,9 +2445,6 @@
"arm64" "arm64"
], ],
"dev": true, "dev": true,
"libc": [
"glibc"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -2452,9 +2459,6 @@
"arm64" "arm64"
], ],
"dev": true, "dev": true,
"libc": [
"musl"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -2469,9 +2473,6 @@
"ppc64" "ppc64"
], ],
"dev": true, "dev": true,
"libc": [
"glibc"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -2486,9 +2487,6 @@
"riscv64" "riscv64"
], ],
"dev": true, "dev": true,
"libc": [
"glibc"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -2503,9 +2501,6 @@
"riscv64" "riscv64"
], ],
"dev": true, "dev": true,
"libc": [
"musl"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -2520,9 +2515,6 @@
"s390x" "s390x"
], ],
"dev": true, "dev": true,
"libc": [
"glibc"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -2537,9 +2529,6 @@
"x64" "x64"
], ],
"dev": true, "dev": true,
"libc": [
"glibc"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -2554,9 +2543,6 @@
"x64" "x64"
], ],
"dev": true, "dev": true,
"libc": [
"musl"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -2897,9 +2883,6 @@
"arm" "arm"
], ],
"dev": true, "dev": true,
"libc": [
"glibc"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -2914,9 +2897,6 @@
"arm" "arm"
], ],
"dev": true, "dev": true,
"libc": [
"musl"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -2931,9 +2911,6 @@
"arm64" "arm64"
], ],
"dev": true, "dev": true,
"libc": [
"glibc"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -2948,9 +2925,6 @@
"arm64" "arm64"
], ],
"dev": true, "dev": true,
"libc": [
"musl"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -2965,9 +2939,6 @@
"loong64" "loong64"
], ],
"dev": true, "dev": true,
"libc": [
"glibc"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -2982,9 +2953,6 @@
"loong64" "loong64"
], ],
"dev": true, "dev": true,
"libc": [
"musl"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -2999,9 +2967,6 @@
"ppc64" "ppc64"
], ],
"dev": true, "dev": true,
"libc": [
"glibc"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -3016,9 +2981,6 @@
"ppc64" "ppc64"
], ],
"dev": true, "dev": true,
"libc": [
"musl"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -3033,9 +2995,6 @@
"riscv64" "riscv64"
], ],
"dev": true, "dev": true,
"libc": [
"glibc"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -3050,9 +3009,6 @@
"riscv64" "riscv64"
], ],
"dev": true, "dev": true,
"libc": [
"musl"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -3067,9 +3023,6 @@
"s390x" "s390x"
], ],
"dev": true, "dev": true,
"libc": [
"glibc"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -3084,9 +3037,6 @@
"x64" "x64"
], ],
"dev": true, "dev": true,
"libc": [
"glibc"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -3101,9 +3051,6 @@
"x64" "x64"
], ],
"dev": true, "dev": true,
"libc": [
"musl"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -7961,9 +7908,6 @@
"arm64" "arm64"
], ],
"dev": true, "dev": true,
"libc": [
"glibc"
],
"license": "MPL-2.0", "license": "MPL-2.0",
"optional": true, "optional": true,
"os": [ "os": [
@@ -7985,9 +7929,6 @@
"arm64" "arm64"
], ],
"dev": true, "dev": true,
"libc": [
"musl"
],
"license": "MPL-2.0", "license": "MPL-2.0",
"optional": true, "optional": true,
"os": [ "os": [
@@ -8009,9 +7950,6 @@
"x64" "x64"
], ],
"dev": true, "dev": true,
"libc": [
"glibc"
],
"license": "MPL-2.0", "license": "MPL-2.0",
"optional": true, "optional": true,
"os": [ "os": [
@@ -8033,9 +7971,6 @@
"x64" "x64"
], ],
"dev": true, "dev": true,
"libc": [
"musl"
],
"license": "MPL-2.0", "license": "MPL-2.0",
"optional": true, "optional": true,
"os": [ "os": [
+1
View File
@@ -11,6 +11,7 @@
"start": "bs/start" "start": "bs/start"
}, },
"dependencies": { "dependencies": {
"@lit-labs/router": "^0.1.4",
"lit": "~3.3" "lit": "~3.3"
}, },
"devDependencies": { "devDependencies": {
+9
View File
@@ -0,0 +1,9 @@
import { css } from "lit";
export const styles = css`
:host {
display: flex;
flex-direction: column;
align-items: center;
justify-content: flex-start;
}
`;
+15
View File
@@ -0,0 +1,15 @@
import { LitElement, html } from "lit";
import { property, customElement } from "lit/decorators.js";
import { styles } from "./index.css.js";
const logo = import.meta.resolve("../../../assets/logo.svg");
@customElement("app-episodes")
export class AppEpisodes extends LitElement {
static styles = styles;
render() {
return html`
<div class="logo"><img alt="open-wc logo" src=${logo} /></div>
`;
}
}
+16
View File
@@ -0,0 +1,16 @@
import type { RouteConfig } from "@lit-labs/router";
import { html } from "lit";
export const route = {
path: "/episodes" as const,
async enter() {
await import("./index.js");
return true;
},
render(){
return html`<app-episodes></app-episodes>`;
},
};
export default [
route,
] as RouteConfig[];
-33
View File
@@ -1,33 +0,0 @@
import { css } from "lit";
export const styles = css`
:host {
min-height: 100vh;
display: flex;
flex-direction: column;
align-items: center;
justify-content: flex-start;
font-size: calc(10px + 2vmin);
color: #1a2b42;
max-width: 960px;
margin: 0 auto;
text-align: center;
background-color: var(--app-cfpodcasts-background-color);
}
main {
flex-grow: 1;
}
.logo {
margin-top: 36px;
}
.app-footer {
font-size: calc(12px + 0.5vmin);
align-items: center;
}
.app-footer a {
margin-left: 5px;
}
`;
-39
View File
@@ -1,39 +0,0 @@
import { LitElement, html } from "lit";
import { property, customElement } from "lit/decorators.js";
import { styles } from "./app-index.css.js";
const logo = import.meta.resolve("../../assets/logo.svg");
@customElement("app-cfpodcasts")
export class AppCfpodcasts extends LitElement {
@property({ type: String }) header = "My app";
static styles = styles;
render() {
return html`
<main>
<div class="logo"><img alt="open-wc logo" src=${logo} /></div>
<h1>${this.header}</h1>
<p>Edit <code>src/AppCfpodcasts.ts</code> and save to reload.</p>
<a
class="app-link"
href="https://open-wc.org/guides/developing-components/code-examples"
target="_blank"
rel="noopener noreferrer"
>
Code examples
</a>
</main>
<p class="app-footer">
🚽 Made with love by
<a
target="_blank"
rel="noopener noreferrer"
href="https://github.com/open-wc"
>open-wc</a
>.
</p>
`;
}
}
+20
View File
@@ -0,0 +1,20 @@
import { css } from "lit";
export const styles = css`
:host {
height: 100vh;
height: 100dvh;
display: grid;
grid-template-areas:
"main"
"footer";
grid-template-rows: auto 2.5ch;
}
main {
grid-area: main;
}
nav {
grid-area: footer;
}
`;
+23
View File
@@ -0,0 +1,23 @@
import { LitElement, html } from "lit";
import { property, customElement } from "lit/decorators.js";
import { styles } from "./index.css.js";
import { Router } from "@lit-labs/router";
import { default as routesEpisodes, route as routeEpisodes } from "./app-episodes/routes.js";
@customElement("app-cfpodcasts")
export class AppCfpodcasts extends LitElement {
static styles = styles;
private _routes = new Router(this, [
{ path: "/", render: () => html`Hello world` },
...routesEpisodes
]);
render() {
return html`
<main>${this._routes.outlet()}</main>
<nav>
<a href="${this._routes.link("/")}">Home</a>
<a href="${this._routes.link(routeEpisodes.path)}">Episodes</a>
</nav>
`;
}
}
+2 -2
View File
@@ -1,8 +1,8 @@
import { html } from 'lit'; import { html } from 'lit';
import { fixture, expect } from '@open-wc/testing'; import { fixture, expect } from '@open-wc/testing';
import type { AppCfpodcasts } from '../src/app-index.js'; import type { AppCfpodcasts } from '../src/index.js';
import '../src/app-cfpodcasts.js'; import '../src/index.js';
describe('AppCfpodcasts', () => { describe('AppCfpodcasts', () => {
let element: AppCfpodcasts; let element: AppCfpodcasts;
+2 -2
View File
@@ -6,7 +6,6 @@
"noEmitOnError": true, "noEmitOnError": true,
"lib": ["es2021", "dom", "DOM.Iterable"], "lib": ["es2021", "dom", "DOM.Iterable"],
"strict": true, "strict": true,
"esModuleInterop": false,
"allowSyntheticDefaultImports": true, "allowSyntheticDefaultImports": true,
"experimentalDecorators": true, "experimentalDecorators": true,
"importHelpers": true, "importHelpers": true,
@@ -15,7 +14,8 @@
"inlineSources": true, "inlineSources": true,
"rootDir": "./", "rootDir": "./",
"incremental": true, "incremental": true,
"skipLibCheck": true "skipLibCheck": true,
"types": ["mocha"]
}, },
"include": ["**/*.ts"] "include": ["**/*.ts"]
} }