diff --git a/pkg/cmd/gist/view/view.go b/pkg/cmd/gist/view/view.go index be24cba54..701975c84 100644 --- a/pkg/cmd/gist/view/view.go +++ b/pkg/cmd/gist/view/view.go @@ -117,7 +117,7 @@ func viewRun(opts *ViewOptions) error { content := gistFile.Content if strings.Contains(gistFile.Type, "markdown") && !opts.Raw { style := markdown.GetStyle(opts.IO.DetectTerminalTheme()) - rendered, err := markdown.Render(gistFile.Content, style) + rendered, err := markdown.Render(gistFile.Content, style, "") if err == nil { content = rendered } diff --git a/pkg/cmd/issue/view/view.go b/pkg/cmd/issue/view/view.go index f559819e6..2bada530c 100644 --- a/pkg/cmd/issue/view/view.go +++ b/pkg/cmd/issue/view/view.go @@ -164,7 +164,7 @@ func printHumanIssuePreview(io *iostreams.IOStreams, issue *api.Issue) error { if issue.Body != "" { fmt.Fprintln(out) style := markdown.GetStyle(io.TerminalTheme()) - md, err := markdown.Render(issue.Body, style) + md, err := markdown.Render(issue.Body, style, "") if err != nil { return err } diff --git a/pkg/cmd/pr/review/review.go b/pkg/cmd/pr/review/review.go index 6ca69b676..4bb3317cf 100644 --- a/pkg/cmd/pr/review/review.go +++ b/pkg/cmd/pr/review/review.go @@ -255,7 +255,7 @@ func reviewSurvey(io *iostreams.IOStreams, editorCommand string) (*api.PullReque if len(bodyAnswers.Body) > 0 { style := markdown.GetStyle(io.DetectTerminalTheme()) - renderedBody, err := markdown.Render(bodyAnswers.Body, style) + renderedBody, err := markdown.Render(bodyAnswers.Body, style, "") if err != nil { return nil, err } diff --git a/pkg/cmd/pr/view/view.go b/pkg/cmd/pr/view/view.go index 0e3f45716..1bb0eff1b 100644 --- a/pkg/cmd/pr/view/view.go +++ b/pkg/cmd/pr/view/view.go @@ -183,7 +183,7 @@ func printHumanPrPreview(io *iostreams.IOStreams, pr *api.PullRequest) error { if pr.Body != "" { fmt.Fprintln(out) style := markdown.GetStyle(io.TerminalTheme()) - md, err := markdown.Render(pr.Body, style) + md, err := markdown.Render(pr.Body, style, "") if err != nil { return err } diff --git a/pkg/cmd/release/view/view.go b/pkg/cmd/release/view/view.go index 4dcfdeee2..2218a6d1c 100644 --- a/pkg/cmd/release/view/view.go +++ b/pkg/cmd/release/view/view.go @@ -124,7 +124,7 @@ func renderReleaseTTY(io *iostreams.IOStreams, release *shared.Release) error { } style := markdown.GetStyle(io.DetectTerminalTheme()) - renderedDescription, err := markdown.Render(release.Body, style) + renderedDescription, err := markdown.Render(release.Body, style, "") if err != nil { return err } diff --git a/pkg/cmd/repo/view/http.go b/pkg/cmd/repo/view/http.go index b7e3096ce..24eaaa676 100644 --- a/pkg/cmd/repo/view/http.go +++ b/pkg/cmd/repo/view/http.go @@ -15,6 +15,7 @@ var NotFoundError = errors.New("not found") type RepoReadme struct { Filename string Content string + BaseURL string } func RepositoryReadme(client *http.Client, repo ghrepo.Interface, branch string) (*RepoReadme, error) { @@ -22,6 +23,7 @@ func RepositoryReadme(client *http.Client, repo ghrepo.Interface, branch string) var response struct { Name string Content string + HTMLURL string `json:"html_url"` } err := apiClient.REST(repo.RepoHost(), "GET", getReadmePath(repo, branch), nil, &response) @@ -41,6 +43,7 @@ func RepositoryReadme(client *http.Client, repo ghrepo.Interface, branch string) return &RepoReadme{ Filename: response.Name, Content: string(decoded), + BaseURL: response.HTMLURL, }, nil } diff --git a/pkg/cmd/repo/view/view.go b/pkg/cmd/repo/view/view.go index 629f49f8d..94dc9a526 100644 --- a/pkg/cmd/repo/view/view.go +++ b/pkg/cmd/repo/view/view.go @@ -159,7 +159,7 @@ func viewRun(opts *ViewOptions) error { } else if isMarkdownFile(readme.Filename) { var err error style := markdown.GetStyle(opts.IO.TerminalTheme()) - readmeContent, err = markdown.Render(readme.Content, style) + readmeContent, err = markdown.Render(readme.Content, style, readme.BaseURL) if err != nil { return fmt.Errorf("error rendering markdown: %w", err) } diff --git a/pkg/markdown/markdown.go b/pkg/markdown/markdown.go index c5fa46d6b..844e06811 100644 --- a/pkg/markdown/markdown.go +++ b/pkg/markdown/markdown.go @@ -7,14 +7,14 @@ import ( "github.com/charmbracelet/glamour" ) -func Render(text, style string) (string, error) { +func Render(text, style string, baseURL string) (string, error) { // Glamour rendering preserves carriage return characters in code blocks, but // we need to ensure that no such characters are present in the output. text = strings.ReplaceAll(text, "\r\n", "\n") tr, err := glamour.NewTermRenderer( glamour.WithStylePath(style), - // glamour.WithBaseURL(""), // TODO: make configurable + glamour.WithBaseURL(baseURL), // glamour.WithWordWrap(80), // TODO: make configurable ) if err != nil { diff --git a/pkg/markdown/markdown_test.go b/pkg/markdown/markdown_test.go index 079b5ff7a..7a2b3063e 100644 --- a/pkg/markdown/markdown_test.go +++ b/pkg/markdown/markdown_test.go @@ -43,7 +43,7 @@ func Test_Render(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - _, err := Render(tt.input.text, tt.input.style) + _, err := Render(tt.input.text, tt.input.style, "") if tt.output.wantsErr { assert.Error(t, err) return