Commit Graph
216 Commits
Author SHA1 Message Date
Julien Donck ab5aaa0382 Remove the FAQ from the marketing site
The FAQ shipped here was a verbatim copy of the one on radicle.dev,
carrying a canonical tag that already pointed search engines at that
original. Drop the duplicate and redirect /faq to radicle.dev/faq so
existing links still reach the content.
2026-08-25 11:36:01 +02:00
andreolf fc31f33fad Support <details> collapsing in markdown
The markdown sanitizer's allowlist did not include the <details> and
<summary> tags, so GitHub-style collapsible sections were stripped and
their contents rendered flat. Add both tags to ALLOWED_TAGS and the
"open" attribute to ALLOWED_ATTR, so collapsible sections render and
<details open> starts expanded.

Closes 390f3f2958
2026-08-25 11:05:44 +02:00
andreolf 8bb45aa11d Render GitHub blob image URLs
Image URLs pointing at a GitHub "blob" page, such as
https://github.com/<owner>/<repo>/blob/<ref>/<path>, serve an HTML
page rather than the raw image bytes, so they render as broken images
in markdown.

Add a canonicalizeGithubImageUrl helper that appends ?raw=true to such
URLs, which makes GitHub redirect to the raw content. URLs already
pointing at the raw content, via ?raw=true or raw.githubusercontent.com,
are left unchanged, as are non-GitHub and non-URL sources.

Wire the helper into the markdown image loop so external image URLs are
canonicalized while relative paths keep resolving against the repo's raw
endpoint.
2026-08-24 16:23:09 +02:00
Rūdolfs Ošiņš 3e500f8231 Dedupe in-flight requests in cached()
The cache only stored resolved values, so callers asking for the same
key while a request was still in flight each issued their own. The
peer selector makes this easy to hit: Source and History render their
own Header, so switching tabs while the remote listing loads fires a
second copy of a request that takes seconds.

Cache the promise instead, evicting it on rejection so failures still
retry.
2026-07-29 16:21:23 +02:00
Rūdolfs Ošiņš 256b060770 Resolve repo aliases in JSON and raw API 2026-07-29 14:05:06 +02:00
Rūdolfs Ošiņš 8e4349184a Upgrade npm dependencies honoring a 7 day cooldown 2026-07-22 14:43:52 +02:00
Rūdolfs Ošiņš 3c2935704f Upgrade npm dependencies
This also upgrades dompurify to the latest version, outside our cooldown
window, for a security fix (verified safe with extra security checks).

Newer dompurify versions expose a bug where happy-dom renders one of our
custom elements incorrectly in tests, unlike real browsers. Switch the unit
test environment from happy-dom to jsdom to fix the failing tests.
2026-07-16 11:34:41 +02:00
025e7254f9 Add explore homepage and Radicle marketing site
Co-authored-by: Julien Donck <donckjulien@gmail.com>
Co-authored-by: Brandon Oxendine <brandon.oxendine@gmail.com>
2026-07-15 15:41:35 +02:00
Rūdolfs Ošiņš 8e2148599e Probe archive download support on demand
The source and commit views hit the /raw archive endpoint with a
HEAD request on every page load to decide whether to show the
download UI. That endpoint runs `git archive` server-side.

Move detection to user interaction: the clone popover probes when
the Download tab is opened, and the commit view checks on click,
navigating on success or showing a message on failure.

Cache only successful results per URL so transient or moving-ref 404s
aren't latched for the session.
2026-06-11 13:38:49 +02:00
Rūdolfs Ošiņš 17cd7adcb8 Harden rendered markdown links 2026-05-28 16:16:41 +02:00
Rūdolfs Ošiņš 747d9b05f9 Restrict job log links to http(s) URLs 2026-05-28 16:16:41 +02:00
Rūdolfs Ošiņš 9391cd072f Replace @radicle/gray-matter with js-yaml frontmatter parser 2026-05-07 23:04:55 +02:00
Rūdolfs Ošiņš 9e268d9ac0 Scope DOMPurify config to call sites
Replace global setConfig with an exported sanitizeConfig passed
inline. The global config leaked into mermaid's internal
strict-mode sanitization, stripping valid SVG diagrams.
2026-05-07 18:31:28 +02:00
Rūdolfs Ošiņš 3f798744bb Use linkify-it for commit description URLs
Replace the hand-rolled URL regex with `linkify-it` (already a
transitive dep via `marked-linkify-it`). Add unit tests.
2026-05-06 09:54:04 +02:00
Yumin Chen 20be88e5da Allow radicle-external-link components in commit descriptions
To allow some very basic hyperlinking in commit descriptions we can
replace fully specified urls with a valid scheme into
`radicle-external-link` components within patches and git history.
2026-05-05 16:45:14 +02:00
Rūdolfs Ošiņš 49274ac88c Load repo activity progressively per card 2026-04-29 12:11:50 +02:00
Daniel Norman b6743c63fc Fix inline emphasis tags in markdown output
- Without strong, **bold** rendered as plain text since marked
  emits <strong> and DOMPurify stripped the unknown tag
- Add strong, b, i, del, s to DOMPurify allow-list
- Cover the other inline emphasis tags authors may write as raw
  HTML or that GFM strikethrough emits (<del>)
2026-04-22 17:53:23 +02:00
Rūdolfs Ošiņš b2f74ebd15 Upgrade all Javascript dependencies
Changes which were needed after the upgrade:

- Replace vite-plugin-virtual (vite 8 incompatible) with vite's
  built-in `define` for the buildTimeConfig injection

- tsconfig: drop deprecated `baseUrl` (TS 5+ resolves `paths`
  relative to tsconfig)

- Vitest 4: import `defineConfig` from `vitest/config` so `test`
  is valid in vite configs

- Zod 4: rename `.errors` to `.issues`, make `ZodSchema` a
  type-only import, drop the removed `SafeParseReturnType`

- Tighten/loosen generic casts in localStore to match stricter
  zod 4 inference

- ESLint 9 `no-useless-assignment`: remove redundant initializers
  and dead reassignments; disable the rule where Svelte's reactive
  blocks confuse the analyser

- Svelte/eslint `prefer-svelte-reactivity`: disable for legacy
  Svelte usages of URL / Set

- Misc naming-convention and prefer-const fixes
2026-04-22 17:48:45 +02:00
Rūdolfs Ošiņš ecbea99f56 Show canonical branches and tags in peer selector 2026-04-22 09:45:00 +02:00
Rūdolfs Ošiņš afb0f903ee Replace last deprecated Avatar with UserAvatar
We missed this one spot in the grand UI redesign.
2026-03-26 17:43:47 -06:00
Rūdolfs Ošiņš 73408cd826 Improve UX when a node is unreachable
When a saved node (e.g. localhost) is down, the app previously showed a
dead-end "Node not found" page with no way to navigate away.

Now the not-found page displays the seed selector inline with the error
title, showing which node failed and letting users switch to a different
one directly. The same treatment applies when navigating to a repo on an
unreachable node.
2026-03-06 15:38:00 -06:00
Rūdolfs OšiņšandJulien Donck fa85596ba1 Backport new UI kit design system from garden
Co-authored-by: Julien Donck <donckjulien@gmail.com>
2026-03-06 11:38:43 -06:00
Rūdolfs Ošiņš ebe4e426e8 Improve localhost detection 2026-01-17 09:35:54 -06:00
Rūdolfs Ošiņš 8f52b2bdfb Support *.localhost subdomains
In the new always-on-node service we'll want to test things locally with
domains that look like this: rudolfs.localhost:3080
2026-01-13 12:49:18 -06:00
Rūdolfs Ošiņš c72494f620 Enable localhost connections in radicle-explorer
Allow radicle-explorer to connect to a locally running radicle-httpd via
https://app.radicle.xyz/nodes/localhost. This was previously disabled to
encourage use of Radicle Desktop, but is now useful for testing the new
always-on node in local development environments.

Remove support for /nodes/radicle.local, an undocumented and unused convention.

Fix remote node loading when Cloudflare URL-encodes port separator (: → %3A).
2026-01-12 14:38:50 -06:00
Defelo ed41e5529a Add width and height to allowed attributes 2025-09-13 22:37:03 +02:00
Sebastian Martinez 2c362adffb Update dependencies 2025-05-21 13:40:52 +02:00
Sebastian Martinez 14f3c6f63b Further improve on handling disabled localStorage
Based on the work done in commit
`a73c5490b160435a0ef5408b54185c9f698cb73f` there are a few places that
make the app not load in case dom storage aka localStorage is disabled.
2025-05-05 09:54:08 +02:00
Sebastian Martinez 2270e61865 Allow radicle-external-link components in commit descriptions
To allow some very basic hyperlinking in commit descriptions we can
replace fully specified urls with a valid scheme into
`radicle-external-link` components.
2025-04-28 09:44:43 +02:00
Sebastian Martinez 8d1624e0da Add Download radio button to Clone popover 2025-04-25 13:06:35 +02:00
Rūdolfs Ošiņš 775cbd1c37 Allow overriding configuration at run-time 2025-04-25 08:55:09 +02:00
Sebastian Martinez 50318285f8 Update svelte to v5.0
Only do the minimal changes possible to be able to keep updating
dependencies.
2025-02-04 11:42:02 -06:00
Sebastian Martinez 4e7507a9be Fix embeds in Markdown component
Changes the display of embeds from being markdown images to markdown
links.
Mimics the way embeds work on the desktop app and allows other embeds to
work too like pdfs, videos, etc.
2025-02-04 11:32:28 -06:00
Sebastian Martinez 4c31a8134d Restrict DOM sanitization to limited whitelist 2024-12-18 14:47:21 +01:00
Matthew O'Gorman 2075c320f3 Add markdown support to node descriptions
Instead of escaping all html by svelte, we should pass the node
description through the markdown parser and sanitize the parsed content.
2024-11-28 16:43:11 +01:00
Sebastian Martinez 691e0255fb Improve handling of localStorage and svelte stores
Also moving the svelte-stored-writable package into the repo.
So we have it closer for maintenance, we can eventually rewrite it in
svelte 5 runes later.

Reference: https://github.com/efstajas/svelte-stored-writable/pull/5
2024-11-25 17:06:26 +01:00
Jappie3 b050924caa add follow system theme button & functionality 2024-11-25 14:26:32 +01:00
Sebastian Martinez b3be042b51 Fix twemojis display
Text in Markdown with emojis has been tried to be fetched from the
/raw route as embeds.
This commit changes the renderer method to compute the hex string for
a unicode emoji to be able to use the /twemoji asset folder.
2024-10-24 10:21:38 +02:00
Sebastian Martinez 868f7b1e2d Rename files from project(s) to repo(s) 2024-08-22 09:43:06 +02:00
Sebastian Martinez b84cace48f Refactor usage of authorSchema 2024-08-22 09:43:06 +02:00
Sebastian Martinez cf08c83913 Update naming of project(s) to repo(s) 2024-08-22 09:43:06 +02:00
Sebastian Martinez 98857582f3 Reduce requests in patch view 2024-08-09 16:19:49 +02:00
Rūdolfs Ošiņš 5174cda6f2 Add bookmarking ability to seed selector 2024-08-09 12:20:06 +02:00
Rūdolfs Ošiņš 96bafffb34 Use lodash import style that leads to smaller bundle sizes 2024-08-08 16:21:33 +02:00
Sebastian Martinez a1dc7fc2ef Add user page 2024-07-31 12:33:05 -03:00
Sebastian Martinez a73c5490b1 Handle disabled localStorage gracefully
Instead of failing with a cryptic error in the dev console, this commit
allows the app to keep working and skips the localStorage persistance if
no localStorage is available.
2024-07-29 16:48:59 +02:00
Rūdolfs Ošiņš 1ff3890fa8 Clean up icons 2024-07-29 15:30:27 +02:00
Rūdolfs Ošiņš c0049f83ba Redesign node view and use it as the landing-page 2024-07-26 10:20:01 +02:00
Sebastian Martinez cbb6c557be Fix markdown relative links to / 2024-07-23 09:56:12 +02:00
Rūdolfs Ošiņš da14ca6505 Remove Post comment keyboard shortcut 2024-07-23 09:50:33 +02:00