glideshow 0.2.0__tar.gz → 0.2.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {glideshow-0.2.0 → glideshow-0.2.2}/PKG-INFO +1 -1
- {glideshow-0.2.0 → glideshow-0.2.2}/cloud/auth.js +15 -2
- {glideshow-0.2.0 → glideshow-0.2.2}/cloud/pages.js +23 -6
- {glideshow-0.2.0 → glideshow-0.2.2}/cloud/worker.js +3 -1
- {glideshow-0.2.0 → glideshow-0.2.2}/glideshow/__init__.py +1 -1
- {glideshow-0.2.0 → glideshow-0.2.2}/pyproject.toml +1 -1
- {glideshow-0.2.0 → glideshow-0.2.2}/uv.lock +1 -1
- {glideshow-0.2.0 → glideshow-0.2.2}/.github/workflows/checks.yml +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/.github/workflows/release.yml +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/.github/workflows/staging.yml +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/.github/workflows/tests.yml +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/.gitignore +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/LICENSE +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/README.md +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/bin/glideshow +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/cloud/clean.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/cloud/env.d.ts +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/cloud/github-app.py +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/cloud/library.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/cloud/setup.sh +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/cloud/share.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/cloud/store-drive.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/cloud/store-github.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/cloud/tsconfig.json +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/cloud/wrangler.toml +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/docs/agents.md +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/docs/deck-format.md +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/docs/self-hosting.md +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/docs/shortcuts.md +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/.assetsignore +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/apple-touch-icon.png +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/data/font-metrics.json +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/data/fonts.json +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/data/icons.json +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/data/symbols.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/data/themes.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/deck/base.css +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/deck/present.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/deck/shapes.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/deck/template.html +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/editor.css +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/glideshow-1024.png +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/glideshow.svg +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/globals.d.ts +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/home.html +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/index.html +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/js/arrange.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/js/boot.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/js/boxes.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/js/charts.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/js/comments.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/js/context-menus.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/js/dialogs.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/js/dock.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/js/draw.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/js/file.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/js/find.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/js/format-panel.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/js/geometry.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/js/guides.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/js/insert.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/js/keyboard.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/js/live.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/js/menubar.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/js/menus.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/js/motion.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/js/notes.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/js/objects.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/js/people.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/js/phone-comments.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/js/phone-edit.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/js/phone-home.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/js/phone-mode.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/js/phone-sheets.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/js/phone-touch.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/js/phone-view.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/js/pointer.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/js/render.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/js/shortcuts.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/js/slides.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/js/spacing.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/js/state.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/js/storage.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/js/text.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/js/theme-toggle.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/js/theme.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/js/toolbar-groups.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/js/toolbar.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/lib/browser-db.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/lib/library.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/lib/merge.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/lib/move-local.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/lib/onefile.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/lib/polygon-clipping.min.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/lib/store-browser.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/lib/store-folder.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/local/sw.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/local/tsconfig.json +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/looks/glider.svg +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/looks/thermal-phone.css +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/looks/thermal.css +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/manifest.json +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/phone.css +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/share/share.css +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/share/share.js +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/share/speaker.html +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/editor/tsconfig.json +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/glideshow/__main__.py +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/glideshow/agent.py +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/glideshow/build.py +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/glideshow/cli.py +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/glideshow/comments.py +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/glideshow/decks.py +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/glideshow/figure.py +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/glideshow/fonts.py +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/glideshow/gslides.py +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/glideshow/history.py +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/glideshow/merge.py +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/glideshow/movie.py +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/glideshow/osutil.py +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/glideshow/pptx_export.py +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/glideshow/pptx_import.py +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/glideshow/publish.py +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/glideshow/render.py +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/glideshow/server.py +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/glideshow/service.py +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/skills/glideshow/SKILL.md +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/test/agent.py +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/test/cloud.py +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/test/coedit.py +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/test/fake_drive.py +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/test/fixtures/agent-deck.html +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/test/fixtures/gslides-api.json +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/test/fixtures/stack-deck.html +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/test/keys.py +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/test/media.py +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/test/share.py +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/test/smoke.py +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/test/snap.py +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/tools/check.sh +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/tools/font_metrics.py +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/tools/gslides2deck.py +0 -0
- {glideshow-0.2.0 → glideshow-0.2.2}/tools/make-app.sh +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: glideshow
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.2
|
|
4
4
|
Summary: Slides you own: a Google Slides-style editor whose decks are plain HTML folders that AI agents can edit
|
|
5
5
|
Project-URL: Homepage, https://glideshow.org
|
|
6
6
|
License-Expression: AGPL-3.0-or-later
|
|
@@ -188,11 +188,24 @@ const DARK = `--card: #1d1e25; --ink: #ececee; --muted: #a1a3aa; --line: #3a3b40
|
|
|
188
188
|
--sky: radial-gradient(120% 140% at 88% 130%, rgba(226, 140, 112, .5) 0%, rgba(226, 140, 112, 0) 58%), radial-gradient(140% 70% at 15% 120%, rgba(150, 88, 140, .45) 0%, rgba(150, 88, 140, 0) 70%), linear-gradient(180deg, #18182c 0%, #221e41 50%, #2f2749 100%);
|
|
189
189
|
--grain-blend: overlay; --grain: .2; color-scheme: dark;`; // dusk: the system's dark mode, or the switch in the corner
|
|
190
190
|
|
|
191
|
-
|
|
191
|
+
/* What search engines and link previews see, for the public pages only (opts.index); every other page stays noindex. */
|
|
192
|
+
const SITE = 'https://glideshow.org';
|
|
193
|
+
function meta(title, { index = false, path = '/', description = '', ld = null } = {}) {
|
|
194
|
+
if (!index) return '<meta name="robots" content="noindex">';
|
|
195
|
+
const d = esc(description), t = esc(title);
|
|
196
|
+
return `<meta name="description" content="${d}"><link rel="canonical" href="${SITE}${path}">
|
|
197
|
+
<meta property="og:type" content="website"><meta property="og:site_name" content="Glideshow"><meta property="og:title" content="${t}">
|
|
198
|
+
<meta property="og:description" content="${d}"><meta property="og:url" content="${SITE}${path}"><meta property="og:image" content="${SITE}/og.png">
|
|
199
|
+
<meta name="twitter:card" content="summary"><meta name="twitter:title" content="${t}"><meta name="twitter:description" content="${d}"><meta name="twitter:image" content="${SITE}/og.png">${ld ? `
|
|
200
|
+
<script type="application/ld+json">${JSON.stringify(ld).replace(/</g, '\\u003c')}</script>` : ''}`;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/** @param {string} title @param {string} body @param {number} [status] @param {{ index?: boolean, path?: string, description?: string, ld?: any, full?: string }} [opts] */
|
|
204
|
+
export function page(title, body, status = 200, opts = {}) {
|
|
192
205
|
// Thermal's front page: the sky is the page itself (dusk in dark mode), one plain card, the mascot gliding above it
|
|
193
206
|
const grain = `url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.5'/%3E%3C/svg%3E")`;
|
|
194
207
|
return new Response(`<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1">
|
|
195
|
-
|
|
208
|
+
${meta(opts.full || (title === 'Glideshow' ? title : title + ' · Glideshow'), opts)}<link rel="icon" href="/favicon.svg" type="image/svg+xml"><link rel="apple-touch-icon" href="/apple-touch-icon.png"><title>${esc(opts.full || (title === 'Glideshow' ? title : title + ' · Glideshow'))}</title>
|
|
196
209
|
<script>try { const v = localStorage.getItem('slides-dark'); if (v) document.documentElement.dataset.theme = v === '1' ? 'dark' : 'light'; } catch {}</script>
|
|
197
210
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Hanken+Grotesk:wght@300;400;500;600&display=swap"><style>
|
|
198
211
|
.stage { display: inline-block; margin-left: .5em; padding: .15em .55em; border-radius: 999px; background: var(--accent); color: var(--on-accent); font-size: .32em; font-weight: 600; letter-spacing: .06em; text-transform: uppercase; vertical-align: .55em; } /* alpha (the front page) */
|
|
@@ -25,11 +25,17 @@ GitHub repo. You see every version, and AI agents can read and edit them with yo
|
|
|
25
25
|
};
|
|
26
26
|
}</script>
|
|
27
27
|
<small>No account needed: your decks stay in this browser. Sign in with Google or GitHub to keep them in your Drive or a repo,
|
|
28
|
-
and to share them. Glideshow is free and in early testing.</small>${foot}
|
|
28
|
+
and to share them. Glideshow is free and in early testing.</small>${foot}`, 200, {
|
|
29
|
+
index: true, path: '/', full: 'Glideshow: slides you own, as plain HTML files',
|
|
30
|
+
description: 'Glideshow is a free, open-source slide editor. Decks are plain HTML files you keep in a folder, your Google Drive or a GitHub repo, with every version saved. Import Google Slides and PowerPoint, share with a link, and edit with AI agents like Claude Code.',
|
|
31
|
+
ld: { '@context': 'https://schema.org', '@type': 'SoftwareApplication', name: 'Glideshow', url: 'https://glideshow.org/',
|
|
32
|
+
applicationCategory: 'BusinessApplication', operatingSystem: 'Web, macOS, Linux, Windows', image: 'https://glideshow.org/og.png',
|
|
33
|
+
description: 'A free, open-source slide editor whose decks are plain HTML files you own.', offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' },
|
|
34
|
+
sameAs: ['https://github.com/heyodog0/glideshow', 'https://pypi.org/project/glideshow/'] } });
|
|
29
35
|
}
|
|
30
36
|
|
|
31
37
|
export function privacy() {
|
|
32
|
-
return page('Privacy policy', `<small>Last updated
|
|
38
|
+
return page('Privacy policy', `<small>Last updated November 1, 2026</small>
|
|
33
39
|
<p><b>What Glideshow keeps.</b> When you sign in with GitHub: your GitHub user id, username and name. When you sign in with Google: your
|
|
34
40
|
Google account id, name and email address. These go into a signed cookie in your browser (your session, for up to 90 days), not into a
|
|
35
41
|
database of users. For someone who keeps decks here, Glideshow also remembers which GitHub repo holds them and their recently opened decks.
|
|
@@ -47,7 +53,8 @@ owner's repo or Drive, where the owner (and anyone with access to it) can see th
|
|
|
47
53
|
<p><b>Reports.</b> If you report a shared deck, Glideshow keeps the report with your IP address and, if you give it, your email address, so
|
|
48
54
|
the person running Glideshow can review it; reports are deleted once dealt with.</p>
|
|
49
55
|
<p><b>What Glideshow doesn't do.</b> No ads, no tracking or analytics cookies, no selling or sharing of your information, and no use of your
|
|
50
|
-
decks or comments to train AI models. Search engines and AI crawlers are asked to stay out
|
|
56
|
+
decks or comments to train AI models. Search engines and AI crawlers are asked to stay out of everything but the home page, this
|
|
57
|
+
policy and the terms: no deck, shared or not, is indexed (robots.txt and noindex, noai headers).</p>
|
|
51
58
|
<p><b>Google user data.</b> Glideshow's use and transfer of information received from Google APIs adheres to the
|
|
52
59
|
<a href="https://developers.google.com/terms/api-services-user-data-policy">Google API Services User Data Policy</a>, including the Limited Use
|
|
53
60
|
requirements: it is used only to sign you in and to keep your decks in your Drive, never for ads, never sold, and never read by people except
|
|
@@ -56,7 +63,7 @@ to keep the service secure or at your request.</p>
|
|
|
56
63
|
for a few days; GitHub holds the decks; Google and GitHub handle sign-in.
|
|
57
64
|
Their own privacy policies apply to them.</p>
|
|
58
65
|
<p><b>Your choices.</b> Sign out anytime; remove the Glideshow app from your GitHub account (Settings → Applications) to cut its access to your
|
|
59
|
-
repos; ask a deck's owner to delete your comments, or delete them yourself. Questions or deletion requests: <a href="mailto:${CONTACT}">${esc(CONTACT)}</a>.</p>${foot}
|
|
66
|
+
repos; ask a deck's owner to delete your comments, or delete them yourself. Questions or deletion requests: <a href="mailto:${CONTACT}">${esc(CONTACT)}</a>.</p>${foot}`, 200, { index: true, path: '/privacy', description: 'What Glideshow keeps about you and your decks, and what it never does.' });
|
|
60
67
|
}
|
|
61
68
|
|
|
62
69
|
export function terms() {
|
|
@@ -76,7 +83,17 @@ can be made per minute.</p>
|
|
|
76
83
|
<p><b>Accounts.</b> Access can be suspended for misuse. You can stop using Glideshow at any time by signing out and removing its GitHub app.</p>
|
|
77
84
|
<p><b>Liability.</b> To the extent the law allows, Glideshow and the person running it are not liable for any indirect or consequential loss,
|
|
78
85
|
or loss of data, from using it.</p>
|
|
79
|
-
<p>Contact: <a href="mailto:${CONTACT}">${esc(CONTACT)}</a>.</p>${foot}
|
|
86
|
+
<p>Contact: <a href="mailto:${CONTACT}">${esc(CONTACT)}</a>.</p>${foot}`, 200, { index: true, path: '/terms', description: 'The terms for using Glideshow, a free slide editor in early testing.' });
|
|
80
87
|
}
|
|
81
88
|
|
|
82
|
-
|
|
89
|
+
/* AI training crawlers are turned away by name (they honour their own names, not the noai headers); Google-Extended is
|
|
90
|
+
Gemini training only, so Google Search still indexes the public pages. Cloudflare's "Block AI bots" enforces it for the rest. */
|
|
91
|
+
const AI_BOTS = ['GPTBot', 'ClaudeBot', 'anthropic-ai', 'CCBot', 'Google-Extended', 'Applebot-Extended', 'meta-externalagent', 'FacebookBot',
|
|
92
|
+
'Bytespider', 'Amazonbot', 'cohere-ai', 'cohere-training-data-crawler', 'Diffbot', 'omgili', 'PerplexityBot', 'AI2Bot', 'Timpibot'];
|
|
93
|
+
export const robots = AI_BOTS.map(b => `User-agent: ${b}\n`).join('') + 'Disallow: /\n\n' + 'User-agent: *\nAllow: /$\nAllow: /privacy\nAllow: /terms\nAllow: /og.png\nAllow: /sitemap.xml\nDisallow: /\n\nSitemap: https://glideshow.org/sitemap.xml\n';
|
|
94
|
+
|
|
95
|
+
export const sitemap = `<?xml version="1.0" encoding="UTF-8"?>
|
|
96
|
+
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
|
97
|
+
${['/', '/privacy', '/terms'].map(p => ` <url><loc>https://glideshow.org${p}</loc></url>`).join('\n')}
|
|
98
|
+
</urlset>
|
|
99
|
+
`;
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
import { DurableObject } from 'cloudflare:workers';
|
|
13
13
|
import { approvedFrom, cleanSlides, composeDeck, deckForCollaborator } from './clean.js';
|
|
14
14
|
import { session, isOwner, isAdmin, libraryFor, githubStart, githubCallback, googleStart, googleCallback, devLogin, loginPage, page, esc, json, redirect, cookie, safeNext } from './auth.js';
|
|
15
|
-
import { landing, privacy, terms, robots } from './pages.js';
|
|
15
|
+
import { landing, privacy, terms, robots, sitemap } from './pages.js';
|
|
16
16
|
export { Library } from './library.js';
|
|
17
17
|
|
|
18
18
|
export default {
|
|
@@ -52,6 +52,8 @@ const WHY = { shared: 'This deck is shared with specific people. Sign in to open
|
|
|
52
52
|
|
|
53
53
|
async function route(req, env, url, path) {
|
|
54
54
|
if (path === '/robots.txt') return new Response(robots, { headers: { 'content-type': 'text/plain' } });
|
|
55
|
+
if (path === '/sitemap.xml') return new Response(sitemap, { headers: { 'content-type': 'application/xml' } });
|
|
56
|
+
if (path === '/og.png') return env.ASSETS.fetch(new Request(new URL('/glideshow-1024.png', url.origin))); // the link-preview picture
|
|
55
57
|
if (path === '/favicon.svg' || path === '/favicon.ico') return env.ASSETS.fetch(new Request(new URL('/glideshow.svg', url.origin))); // the mascot, for every page (/editor/ is behind sign-in)
|
|
56
58
|
if (path === '/apple-touch-icon.png') return env.ASSETS.fetch(new Request(new URL(path, url.origin)));
|
|
57
59
|
if (path === '/privacy') return privacy();
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import os
|
|
4
4
|
from pathlib import Path
|
|
5
5
|
|
|
6
|
-
__version__ = "0.
|
|
6
|
+
__version__ = "0.2.2"
|
|
7
7
|
|
|
8
8
|
# Before it was Glideshow it was "slides": its environment variables (SLIDES_HOME, …) still work, and its folder of
|
|
9
9
|
# settings (~/.slides) moves to ~/.glideshow the first time, leaving a link behind for anything still pointing there.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|