mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-12-20 20:07:03 +01:00
Show page titles in wiki search results (#6048)
Replace wiki page filenames with page titles in the search results, fixing the problem with them showing unreadable URI-encoded names.
This commit is contained in:
parent
19bde653c1
commit
fc31fa0eeb
4 changed files with 41 additions and 6 deletions
|
@ -408,18 +408,42 @@ func DeleteWiki(ctx context.Context, repo *repo_model.Repository) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func SearchWikiContents(ctx context.Context, repo *repo_model.Repository, keyword string) ([]*git.GrepResult, error) {
|
||||
type SearchContentsResult struct {
|
||||
*git.GrepResult
|
||||
Title string
|
||||
}
|
||||
|
||||
func SearchWikiContents(ctx context.Context, repo *repo_model.Repository, keyword string) ([]SearchContentsResult, error) {
|
||||
gitRepo, err := git.OpenRepository(ctx, repo.WikiPath())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer gitRepo.Close()
|
||||
|
||||
return git.GrepSearch(ctx, gitRepo, keyword, git.GrepOptions{
|
||||
grepRes, err := git.GrepSearch(ctx, gitRepo, keyword, git.GrepOptions{
|
||||
ContextLineNumber: 0,
|
||||
Mode: git.FixedAnyGrepMode,
|
||||
RefName: repo.GetWikiBranchName(),
|
||||
MaxResultLimit: 10,
|
||||
MatchesPerFile: 3,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
res := make([]SearchContentsResult, 0, len(grepRes))
|
||||
for _, entry := range grepRes {
|
||||
wp, err := GitPathToWebPath(entry.Filename)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
_, title := WebPathToUserTitle(wp)
|
||||
|
||||
res = append(res, SearchContentsResult{
|
||||
GrepResult: entry,
|
||||
Title: title,
|
||||
})
|
||||
}
|
||||
|
||||
return res, nil
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{{if .Results}}
|
||||
{{range .Results}}
|
||||
<a class="item tw-max-w-[80vw]" href="{{$.RepoLink}}/wiki/{{.Filename}}">
|
||||
<b class="tw-block tw-mb-2 tw-whitespace-break-spaces">{{.Filename}}</b>
|
||||
<b class="tw-block tw-mb-2 tw-whitespace-break-spaces">{{.Title}}</b>
|
||||
{{range .LineCodes}}
|
||||
<p class="tw-my-0 tw-whitespace-break-spaces">{{.}}</p>
|
||||
{{end}}
|
||||
|
|
|
@ -17,3 +17,14 @@ test(`Search for long titles and test for no overflow`, async ({page}, workerInf
|
|||
// timeout is necessary because HTMX search could be slow
|
||||
await expect(page.locator('#wiki-search a[href]')).toBeInViewport({ratio: 1});
|
||||
});
|
||||
|
||||
test(`Search results show titles (and not file names)`, async ({page}, workerInfo) => {
|
||||
test.skip(workerInfo.project.name === 'Mobile Safari', 'Fails as always, see https://codeberg.org/forgejo/forgejo/pulls/5326#issuecomment-2313275');
|
||||
await page.goto('/user2/repo1/wiki');
|
||||
await page.getByPlaceholder('Search wiki').fill('spaces');
|
||||
await page.getByPlaceholder('Search wiki').click();
|
||||
// workaround: HTMX listens on keyup events, playwright's fill only triggers the input event
|
||||
// so we manually "type" the last letter
|
||||
await page.getByPlaceholder('Search wiki').dispatchEvent('keyup');
|
||||
await expect(page.locator('#wiki-search a[href] b')).toHaveText('Page With Spaced Name');
|
||||
});
|
||||
|
|
|
@ -29,9 +29,9 @@ func TestWikiSearchContent(t *testing.T) {
|
|||
return el.Text()
|
||||
})
|
||||
assert.Equal(t, []string{
|
||||
"Home.md",
|
||||
"Page-With-Spaced-Name.md",
|
||||
"Unescaped File.md",
|
||||
"Home",
|
||||
"Page With Spaced Name",
|
||||
"Unescaped File",
|
||||
}, res)
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue