Monorepo for Tangled tangled.org

appview/pages/templates/repo/pulls: improve current round styling and contrast #1221

merged opened by eti.tf targeting master from eti.tf/core: eti/tan-355-current-round-selection-indicator

Update the styling for pull request rounds cards to provide better distinction between active and inactive rounds. Changes include:

  • Better background colors for active rounds (blue tint)
  • Improved text contrast in both light and dark modes
  • Consistent border handling and overflow clipping

the changes in light mode

the changes in dark mode

Signed-off-by: eti eti@eti.tf

Labels

None yet.

assignee

None yet.

Participants 2
AT URI
at://did:plc:xu5apv6kmu5jp7g5hwdnej42/sh.tangled.repo.pull/3mhxwojrh3d22
+59 -42
Interdiff #1 โ†’ #2
+1
appview/db/db.go
··· 34 34 "_journal_mode=WAL", 35 35 "_synchronous=NORMAL", 36 36 "_auto_vacuum=incremental", 37 + "_busy_timeout=5000", 37 38 } 38 39 39 40 logger := log.FromContext(ctx)
+5 -2
appview/indexer/repos/indexer.go
··· 241 241 } 242 242 243 243 func makeRepoData(repo *models.Repo) *repoData { 244 + var language string 245 + if repo.RepoStats != nil { 246 + language = repo.RepoStats.Language 247 + } 244 248 return &repoData{ 245 249 ID: repo.Id, 246 250 RepoAt: repo.RepoAt().String(), ··· 252 256 Topics: repo.Topics, 253 257 TopicsExact: repo.Topics, 254 258 Knot: repo.Knot, 259 + Language: language, 255 - Language: repo.RepoStats.Language, 256 260 } 257 261 } 258 262 ··· 309 313 for _, keyword := range opts.NegatedKeywords { 310 314 mustNots = append(mustNots, bleve.NewDisjunctionQuery( 311 315 bleveutil.MatchAndQuery("name", keyword, repoIndexerAnalyzer, 0), 312 - bleveutil.MatchAndQuery("name_trigram", keyword, "trigram", 0), 313 316 bleveutil.MatchAndQuery("description", keyword, repoIndexerAnalyzer, 0), 314 317 bleveutil.MatchAndQuery("website", keyword, repoIndexerAnalyzer, 0), 315 318 bleveutil.MatchAndQuery("topics", keyword, repoIndexerAnalyzer, 0),
+3 -3
appview/issues/issues.go
··· 23 23 "tangled.org/core/appview/models" 24 24 "tangled.org/core/appview/notify" 25 25 "tangled.org/core/appview/oauth" 26 - "tangled.org/core/ogre" 27 26 "tangled.org/core/appview/pages" 28 27 "tangled.org/core/appview/pages/repoinfo" 29 28 "tangled.org/core/appview/pagination" ··· 31 30 "tangled.org/core/appview/searchquery" 32 31 "tangled.org/core/appview/validator" 33 32 "tangled.org/core/idresolver" 33 + "tangled.org/core/ogre" 34 34 "tangled.org/core/orm" 35 35 "tangled.org/core/rbac" 36 36 "tangled.org/core/tid" ··· 49 49 logger *slog.Logger 50 50 validator *validator.Validator 51 51 indexer *issues_indexer.Indexer 52 + ogreClient *ogre.Client 52 - ogreClient *ogre.Client 53 53 } 54 54 55 55 func New( ··· 79 79 logger: logger, 80 80 validator: validator, 81 81 indexer: indexer, 82 + ogreClient: ogre.NewClient(config.Ogre.Host), 82 - ogreClient: ogre.NewClient(config.Ogre.Host), 83 83 } 84 84 } 85 85
+12 -9
appview/pages/funcmap.go
··· 265 265 return v.Slice(0, min(n, v.Len())).Interface() 266 266 }, 267 267 "markdown": func(text string) template.HTML { 268 + rctx := p.rctx.Clone() 269 + rctx.RendererType = markup.RendererTypeDefault 270 + htmlString := rctx.RenderMarkdown(text) 271 + sanitized := rctx.SanitizeDefault(htmlString) 268 - p.rctx.RendererType = markup.RendererTypeDefault 269 - htmlString := p.rctx.RenderMarkdown(text) 270 - sanitized := p.rctx.SanitizeDefault(htmlString) 271 272 return template.HTML(sanitized) 272 273 }, 273 274 "description": func(text string) template.HTML { 275 + rctx := p.rctx.Clone() 276 + rctx.RendererType = markup.RendererTypeDefault 277 + htmlString := rctx.RenderMarkdownWith(text, goldmark.New( 274 - p.rctx.RendererType = markup.RendererTypeDefault 275 - htmlString := p.rctx.RenderMarkdownWith(text, goldmark.New( 276 278 goldmark.WithExtensions( 277 279 emoji.Emoji, 278 280 ), 279 281 )) 282 + sanitized := rctx.SanitizeDescription(htmlString) 280 - sanitized := p.rctx.SanitizeDescription(htmlString) 281 283 return template.HTML(sanitized) 282 284 }, 283 285 "readme": func(text string) template.HTML { 286 + rctx := p.rctx.Clone() 287 + rctx.RendererType = markup.RendererTypeRepoMarkdown 288 + htmlString := rctx.RenderMarkdown(text) 289 + sanitized := rctx.SanitizeDefault(htmlString) 284 - p.rctx.RendererType = markup.RendererTypeRepoMarkdown 285 - htmlString := p.rctx.RenderMarkdown(text) 286 - sanitized := p.rctx.SanitizeDefault(htmlString) 287 290 return template.HTML(sanitized) 288 291 }, 289 292 "code": func(content, path string) string {
+9
appview/pages/markup/markdown.go
··· 86 86 return md 87 87 } 88 88 89 + // clone creates a shallow copy of the RenderContext 90 + func (rctx *RenderContext) Clone() *RenderContext { 91 + if rctx == nil { 92 + return nil 93 + } 94 + clone := *rctx 95 + return &clone 96 + } 97 + 89 98 // NewMarkdownWith is an alias for NewMarkdown with extra extensions. 90 99 func NewMarkdownWith(hostname string, extra ...goldmark.Extender) goldmark.Markdown { 91 100 return NewMarkdown(hostname, extra...)
+20 -21
appview/pages/pages.go
··· 350 350 return fmt.Errorf("failed to read %s: %w", filename, err) 351 351 } 352 352 353 + rctx := p.rctx.Clone() 354 + rctx.RendererType = markup.RendererTypeDefault 355 + htmlString := rctx.RenderMarkdown(string(markdownBytes)) 356 + sanitized := rctx.SanitizeDefault(htmlString) 353 - p.rctx.RendererType = markup.RendererTypeDefault 354 - htmlString := p.rctx.RenderMarkdown(string(markdownBytes)) 355 - sanitized := p.rctx.SanitizeDefault(htmlString) 356 357 params.Content = template.HTML(sanitized) 357 358 358 359 return p.execute("legal/terms", w, params) ··· 378 379 return fmt.Errorf("failed to read %s: %w", filename, err) 379 380 } 380 381 382 + rctx := p.rctx.Clone() 383 + rctx.RendererType = markup.RendererTypeDefault 384 + htmlString := rctx.RenderMarkdown(string(markdownBytes)) 385 + sanitized := rctx.SanitizeDefault(htmlString) 381 - p.rctx.RendererType = markup.RendererTypeDefault 382 - htmlString := p.rctx.RenderMarkdown(string(markdownBytes)) 383 - sanitized := p.rctx.SanitizeDefault(htmlString) 384 386 params.Content = template.HTML(sanitized) 385 387 386 388 return p.execute("legal/privacy", w, params) ··· 796 798 return p.executeRepo("repo/knotUnreachable", w, params) 797 799 } 798 800 801 + rctx := p.rctx.Clone() 802 + rctx.RepoInfo = params.RepoInfo 803 + rctx.RepoInfo.Ref = params.Ref 804 + rctx.RendererType = markup.RendererTypeRepoMarkdown 799 - p.rctx.RepoInfo = params.RepoInfo 800 - p.rctx.RepoInfo.Ref = params.Ref 801 - p.rctx.RendererType = markup.RendererTypeRepoMarkdown 802 805 803 806 if params.ReadmeFileName != "" { 804 807 ext := filepath.Ext(params.ReadmeFileName) 805 808 switch ext { 806 809 case ".md", ".markdown", ".mdown", ".mkdn", ".mkd": 807 810 params.Raw = false 811 + htmlString := rctx.RenderMarkdown(params.Readme) 812 + sanitized := rctx.SanitizeDefault(htmlString) 808 - htmlString := p.rctx.RenderMarkdown(params.Readme) 809 - sanitized := p.rctx.SanitizeDefault(htmlString) 810 813 params.HTMLReadme = template.HTML(sanitized) 811 814 default: 812 815 params.Raw = true ··· 889 892 func (p *Pages) RepoTree(w io.Writer, params RepoTreeParams) error { 890 893 params.Active = "overview" 891 894 895 + rctx := p.rctx.Clone() 896 + rctx.RepoInfo = params.RepoInfo 897 + rctx.RepoInfo.Ref = params.Ref 898 + rctx.RendererType = markup.RendererTypeRepoMarkdown 892 - p.rctx.RepoInfo = params.RepoInfo 893 - p.rctx.RepoInfo.Ref = params.Ref 894 - p.rctx.RendererType = markup.RendererTypeRepoMarkdown 895 899 896 900 if params.ReadmeFileName != "" { 897 901 ext := filepath.Ext(params.ReadmeFileName) 898 902 switch ext { 899 903 case ".md", ".markdown", ".mdown", ".mkdn", ".mkd": 900 904 params.Raw = false 905 + htmlString := rctx.RenderMarkdown(params.Readme) 906 + sanitized := rctx.SanitizeDefault(htmlString) 901 - htmlString := p.rctx.RenderMarkdown(params.Readme) 902 - sanitized := p.rctx.SanitizeDefault(htmlString) 903 907 params.HTMLReadme = template.HTML(sanitized) 904 908 default: 905 909 params.Raw = true ··· 971 975 } 972 976 973 977 func (p *Pages) RepoBlob(w io.Writer, params RepoBlobParams) error { 974 - switch params.BlobView.ContentType { 975 - case models.BlobContentTypeMarkup: 976 - p.rctx.RepoInfo = params.RepoInfo 977 - } 978 - 979 978 params.Active = "overview" 980 979 return p.executeRepo("repo/blob", w, params) 981 980 }
appview/pages/templates/repo/pulls/pull.html

This file has not been changed.

+3 -3
appview/pulls/pulls.go
··· 26 26 "tangled.org/core/appview/models" 27 27 "tangled.org/core/appview/notify" 28 28 "tangled.org/core/appview/oauth" 29 - "tangled.org/core/ogre" 30 29 "tangled.org/core/appview/pages" 31 30 "tangled.org/core/appview/pages/markup" 32 31 "tangled.org/core/appview/pages/repoinfo" ··· 36 35 "tangled.org/core/appview/validator" 37 36 "tangled.org/core/appview/xrpcclient" 38 37 "tangled.org/core/idresolver" 38 + "tangled.org/core/ogre" 39 39 "tangled.org/core/orm" 40 40 "tangled.org/core/patchutil" 41 41 "tangled.org/core/rbac" ··· 66 66 logger *slog.Logger 67 67 validator *validator.Validator 68 68 indexer *pulls_indexer.Indexer 69 + ogreClient *ogre.Client 69 - ogreClient *ogre.Client 70 70 } 71 71 72 72 func New( ··· 96 96 logger: logger, 97 97 validator: validator, 98 98 indexer: indexer, 99 + ogreClient: ogre.NewClient(config.Ogre.Host), 99 - ogreClient: ogre.NewClient(config.Ogre.Host), 100 100 } 101 101 } 102 102
+3 -3
appview/repo/repo.go
··· 20 20 "tangled.org/core/appview/models" 21 21 "tangled.org/core/appview/notify" 22 22 "tangled.org/core/appview/oauth" 23 - "tangled.org/core/ogre" 24 23 "tangled.org/core/appview/pages" 25 24 "tangled.org/core/appview/reporesolver" 26 25 "tangled.org/core/appview/validator" 27 26 xrpcclient "tangled.org/core/appview/xrpcclient" 28 27 "tangled.org/core/eventconsumer" 29 28 "tangled.org/core/idresolver" 29 + "tangled.org/core/ogre" 30 30 "tangled.org/core/orm" 31 31 "tangled.org/core/rbac" 32 32 "tangled.org/core/tid" ··· 54 54 serviceAuth *serviceauth.ServiceAuth 55 55 validator *validator.Validator 56 56 cfClient *cloudflare.Client 57 + ogreClient *ogre.Client 57 - ogreClient *ogre.Client 58 58 } 59 59 60 60 func New( ··· 84 84 logger: logger, 85 85 validator: validator, 86 86 cfClient: cfClient, 87 + ogreClient: ogre.NewClient(config.Ogre.Host), 87 - ogreClient: ogre.NewClient(config.Ogre.Host), 88 88 } 89 89 } 90 90
+1
knotserver/db/db.go
··· 22 22 "_journal_mode=WAL", 23 23 "_synchronous=NORMAL", 24 24 "_auto_vacuum=incremental", 25 + "_busy_timeout=5000", 25 26 } 26 27 27 28 logger := log.FromContext(ctx)
+1
spindle/db/db.go
··· 18 18 "_journal_mode=WAL", 19 19 "_synchronous=NORMAL", 20 20 "_auto_vacuum=incremental", 21 + "_busy_timeout=5000", 21 22 } 22 23 23 24 db, err := sql.Open("sqlite3", dbPath+"?"+strings.Join(opts, "&"))
+1 -1
spindle/server.go
··· 298 298 tpl := tangled.Pipeline{} 299 299 err := json.Unmarshal(msg.EventJson, &tpl) 300 300 if err != nil { 301 + s.l.Error("failed to unmarshal pipeline event", "err", err) 301 - fmt.Println("error unmarshalling", err) 302 302 return err 303 303 } 304 304

History

5 rounds 5 comments
sign up or login to add to the discussion
1 commit
expand
appview/pages/templates/repo/pulls: improve round styling and contrast
expand 0 comments
pull request successfully merged
1 commit
expand
appview/pages/templates/repo/pulls: improve round styling and contrast
expand 2 comments

lgtm barring merge conflicts! please do rebase when you do fixup the conflicts!

eti.tf submitted #2
2 commits
expand
appview/pages/templates/repo/pulls: improve round styling and contrast
appview/pages/templates/repo/pulls: fix non-current round card bg color regression & add back missing hunk
expand 0 comments
2 commits
expand
appview/pages/templates/repo/pulls: improve round styling and contrast
appview/pages/templates/repo/pulls: fix non-current round card bg color regression & add back missing hunk
expand 1 comment

thanks! can you squash and rebase?

eti.tf submitted #0
1 commit
expand
appview/pages/templates/repo/pulls: improve round styling and contrast
expand 2 comments

largely lgtm!

appview/pages/templates/repo/pulls/pull.html:103-105: why was this hunk removed?

oops, that wasn't supposed to happen. let me add it back.

i also noticed a regression with how non-selected rounds look. i'll resubmit soon w a fix