commits
Signed-off-by: marco.tngl.sh <dev@marco.social>
Signed-off-by: marco.tngl.sh <dev@marco.social>
Signed-off-by: marco.tngl.sh <dev@marco.social>
Signed-off-by: marco.tngl.sh <dev@marco.social>
Add {ctrl,cmd}+Enter shortcut to submit issues.
See https://tangled.org/tangled.org/core/issues/412
Signed-off-by: marco.tngl.sh <dev@marco.social>
When reviewing a pull request with multiple files, the currently visible
file is now highlighted (bolded) in the filetree sidebar. This makes it
easier to track your position when scrolling through large diffs and
lose track of the header of the file you're looking at.
The highlight updates on scroll and also responds to clicks on filetree
links.
Signed-off-by: Jes Olson <j3s@c3f.net>
Add MermaidJS diagram rendering for markdown content (READMEs, issues,
PRs) using goldmark-mermaid with client-side rendering. Mermaid fenced
code blocks are transformed to <pre class="mermaid"> elements, which
MermaidJS picks up and renders in the browser.
Changes:
- Add go.abhg.dev/goldmark/mermaid dependency with client-side render mode
- Add mermaid extender before highlighting in goldmark pipeline
- Allow "mermaid" class on <pre> elements through bluemonday sanitizer
- Conditionally load MermaidJS from CDN only on pages with diagrams
- Add basic mermaid container styling with dark mode support
- Add tests verifying mermaid blocks produce correct HTML output
Closes https://tangled.org/tangled.org/core/issues/424
Signed-off-by: Nate Spilman <nate.spilman@gmail.com>
Signed-off-by: Seongmin Lee <git@boltless.me>
Signed-off-by: Jes Olson <j3s@c3f.net>
We seem to be hammering bsky's PDS, which explains the 429s. Perhaps
re-using the session alleviates the pressure. It's hard to test this
locally since their rate limits vanish (different host/IP).
Signed-off-by: Anirudh Oppiliappan <anirudh@tangled.org>
We're hitting 429s due to high load. This allows the appview to bypass
otherwise normal rate limits on the PDS.
Signed-off-by: Anirudh Oppiliappan <anirudh@tangled.org>
Signed-off-by: oppiliappan <me@oppi.li>
We have a wildcard record in place now. Should've started with this...
Signed-off-by: Anirudh Oppiliappan <anirudh@tangled.org>
Signed-off-by: Anirudh Oppiliappan <anirudh@tangled.org>
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: oppiliappan <me@oppi.li>
fetches recent tangled posts for use on landing page
Signed-off-by: oppiliappan <me@oppi.li>
this will be used later for timeline and progress bar animations.
Signed-off-by: oppiliappan <me@oppi.li>
Use shared searchquery helpers (ResolveAuthor, ExtractTextFilters) to
replace duplicated resolution logic in both issue and pull handlers.
Wire up dynamic tag extraction for label-value queries. When label
definitions with DID format are present, resolve handle values to DIDs
at query time via ResolveDIDLabelValues.
Signed-off-by: Thomas Karpiniec <tom.karpiniec@outlook.com>
Add LabelNameValues method to LabelState, returning composite
"name:value" strings for all labels with non-empty values.
Add LabelValues and NegatedLabelValues fields to IssueSearchOptions and
PullSearchOptions. Change NegatedAuthorDid from a single string to
NegatedAuthorDids []string to support excluding multiple authors.
Update both issue and pull indexers: bump mapping version to 3, add
label_values keyword field, populate it via LabelNameValues, and add
search clauses for the new fields.
Signed-off-by: Thomas Karpiniec <tom.karpiniec@outlook.com>
Add KnownTags map and GetDynamicTags/GetNegatedDynamicTags methods to
extract label-value search filters from parsed queries. Any tag:value
pair whose key is not a known system tag (state, author, label) is
treated as a dynamic label filter.
Add resolve.go with shared helpers: IdentResolver type, ResolveAuthor,
ExtractTextFilters, and ResolveDIDLabelValues. These keep resolution
logic in the searchquery package without coupling it to idresolver.
Signed-off-by: Thomas Karpiniec <tom.karpiniec@outlook.com>
Signed-off-by: Anirudh Oppiliappan <anirudh@tangled.org>
Some cool people use cool editor called Vim, which requires final
newline and automatically adds it anyways.
Signed-off-by: Seongmin Lee <git@boltless.me>
both jj-vcs and tangled don't support gitattributes yet, but this would
be still valuable for git tools.
Signed-off-by: Seongmin Lee <git@boltless.me>
instead of showing a 503 indiscriminately, we now indicate that the knot
is unreachable and display a warning. the user is still free to browse
issues and pulls.
Signed-off-by: oppiliappan <me@oppi.li>
this replaces handles with DIDs in the clone dropdown.
Signed-off-by: oppiliappan <me@oppi.li>
the .ShowPunchcard variable was being referenced in pages that didn't
have the variable set. to circumvent this, the `State.profile` helper
calculates whether or not to show the punchcard, and this helper is then
substituted in all profile tabs.
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: Will Andrews <will7989@hotmail.com>
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: Anirudh Oppiliappan <anirudh@tangled.org>
Signed-off-by: Anirudh Oppiliappan <anirudh@tangled.org>
The description field had no length validation, so long descriptions
would pass the form but fail at the DB INSERT (CHECK constraint) or
lexicon layer (maxGraphemes: 140), after the PDS record and bare repo
were already created. Add client-side maxlength and server-side rune
count validation to reject early and avoid partial rollback state.
the buttons were not being hidden/shown correctly when varying the
active-round or diff/interdiff pages.
Signed-off-by: oppiliappan <me@oppi.li>
users sometimes want to regenerate invite codes, but signups_inflight
never replaces the old value, since the email column has a unique
constraint. by using `or replace`, we can update the invite code.
this keeps the db in sync with whatever the user sees in their inbox.
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: Evan Jarrett <evan@evanjarrett.com>
Should look better on opengraph cards.
Signed-off-by: Anirudh Oppiliappan <anirudh@tangled.org>
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: Thomas Karpiniec <tkarpiniec@icloud.com>
When searching issues or pulls with filters, the open/closed tab counts
were showing unfiltered repo totals. Run per-state count queries when a
search is active and update RepoInfo.Stats before rendering.
Based on a fix by Patrick Dewey (pdewey.com) for issue #400.
Signed-off-by: Thomas Karpiniec <tkarpiniec@icloud.com>
Signed-off-by: Thomas Karpiniec <tkarpiniec@icloud.com>
Signed-off-by: Thomas Karpiniec <tkarpiniec@icloud.com>
Signed-off-by: Thomas Karpiniec <tkarpiniec@icloud.com>
Signed-off-by: Thomas Karpiniec <tkarpiniec@icloud.com>
Signed-off-by: Thomas Karpiniec <tkarpiniec@icloud.com>
Signed-off-by: Thomas Karpiniec <tkarpiniec@icloud.com>
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: Anirudh Oppiliappan <anirudh@tangled.org>
Signed-off-by: Anirudh Oppiliappan <anirudh@tangled.org>
Add hooks tab to repository settings with webhook management interface.
Includes forms for adding/editing webhooks with URL, secret, and event
configuration. Shows webhook status with active/inactive toggle.
Signed-off-by: Anirudh Oppiliappan <anirudh@tangled.org>
When reviewing a pull request with multiple files, the currently visible
file is now highlighted (bolded) in the filetree sidebar. This makes it
easier to track your position when scrolling through large diffs and
lose track of the header of the file you're looking at.
The highlight updates on scroll and also responds to clicks on filetree
links.
Signed-off-by: Jes Olson <j3s@c3f.net>
Add MermaidJS diagram rendering for markdown content (READMEs, issues,
PRs) using goldmark-mermaid with client-side rendering. Mermaid fenced
code blocks are transformed to <pre class="mermaid"> elements, which
MermaidJS picks up and renders in the browser.
Changes:
- Add go.abhg.dev/goldmark/mermaid dependency with client-side render mode
- Add mermaid extender before highlighting in goldmark pipeline
- Allow "mermaid" class on <pre> elements through bluemonday sanitizer
- Conditionally load MermaidJS from CDN only on pages with diagrams
- Add basic mermaid container styling with dark mode support
- Add tests verifying mermaid blocks produce correct HTML output
Closes https://tangled.org/tangled.org/core/issues/424
Signed-off-by: Nate Spilman <nate.spilman@gmail.com>
Signed-off-by: Seongmin Lee <git@boltless.me>
Use shared searchquery helpers (ResolveAuthor, ExtractTextFilters) to
replace duplicated resolution logic in both issue and pull handlers.
Wire up dynamic tag extraction for label-value queries. When label
definitions with DID format are present, resolve handle values to DIDs
at query time via ResolveDIDLabelValues.
Signed-off-by: Thomas Karpiniec <tom.karpiniec@outlook.com>
Add LabelNameValues method to LabelState, returning composite
"name:value" strings for all labels with non-empty values.
Add LabelValues and NegatedLabelValues fields to IssueSearchOptions and
PullSearchOptions. Change NegatedAuthorDid from a single string to
NegatedAuthorDids []string to support excluding multiple authors.
Update both issue and pull indexers: bump mapping version to 3, add
label_values keyword field, populate it via LabelNameValues, and add
search clauses for the new fields.
Signed-off-by: Thomas Karpiniec <tom.karpiniec@outlook.com>
Add KnownTags map and GetDynamicTags/GetNegatedDynamicTags methods to
extract label-value search filters from parsed queries. Any tag:value
pair whose key is not a known system tag (state, author, label) is
treated as a dynamic label filter.
Add resolve.go with shared helpers: IdentResolver type, ResolveAuthor,
ExtractTextFilters, and ResolveDIDLabelValues. These keep resolution
logic in the searchquery package without coupling it to idresolver.
Signed-off-by: Thomas Karpiniec <tom.karpiniec@outlook.com>
The description field had no length validation, so long descriptions
would pass the form but fail at the DB INSERT (CHECK constraint) or
lexicon layer (maxGraphemes: 140), after the PDS record and bare repo
were already created. Add client-side maxlength and server-side rune
count validation to reject early and avoid partial rollback state.
users sometimes want to regenerate invite codes, but signups_inflight
never replaces the old value, since the email column has a unique
constraint. by using `or replace`, we can update the invite code.
this keeps the db in sync with whatever the user sees in their inbox.
Signed-off-by: oppiliappan <me@oppi.li>
When searching issues or pulls with filters, the open/closed tab counts
were showing unfiltered repo totals. Run per-state count queries when a
search is active and update RepoInfo.Stats before rendering.
Based on a fix by Patrick Dewey (pdewey.com) for issue #400.
Signed-off-by: Thomas Karpiniec <tkarpiniec@icloud.com>