mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-12-22 07:13:02 -05: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.
(cherry picked from commit fc31fa0eeb
)
This commit is contained in:
parent
c089228bfa
commit
2374f8f47d
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
|
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())
|
gitRepo, err := git.OpenRepository(ctx, repo.WikiPath())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
defer gitRepo.Close()
|
defer gitRepo.Close()
|
||||||
|
|
||||||
return git.GrepSearch(ctx, gitRepo, keyword, git.GrepOptions{
|
grepRes, err := git.GrepSearch(ctx, gitRepo, keyword, git.GrepOptions{
|
||||||
ContextLineNumber: 0,
|
ContextLineNumber: 0,
|
||||||
IsFuzzy: true,
|
IsFuzzy: true,
|
||||||
RefName: repo.GetWikiBranchName(),
|
RefName: repo.GetWikiBranchName(),
|
||||||
MaxResultLimit: 10,
|
MaxResultLimit: 10,
|
||||||
MatchesPerFile: 3,
|
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}}
|
{{if .Results}}
|
||||||
{{range .Results}}
|
{{range .Results}}
|
||||||
<a class="item tw-max-w-[80vw]" href="{{$.RepoLink}}/wiki/{{.Filename}}">
|
<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}}
|
{{range .LineCodes}}
|
||||||
<p class="tw-my-0 tw-whitespace-break-spaces">{{.}}</p>
|
<p class="tw-my-0 tw-whitespace-break-spaces">{{.}}</p>
|
||||||
{{end}}
|
{{end}}
|
||||||
|
|
|
@ -14,3 +14,14 @@ test(`Search for long titles and test for no overflow`, async ({page}, workerInf
|
||||||
// timeout is necessary because HTMX search could be slow
|
// timeout is necessary because HTMX search could be slow
|
||||||
await expect(page.locator('#wiki-search a[href]')).toBeInViewport({ratio: 1});
|
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()
|
return el.Text()
|
||||||
})
|
})
|
||||||
assert.Equal(t, []string{
|
assert.Equal(t, []string{
|
||||||
"Home.md",
|
"Home",
|
||||||
"Page-With-Spaced-Name.md",
|
"Page With Spaced Name",
|
||||||
"Unescaped File.md",
|
"Unescaped File",
|
||||||
}, res)
|
}, res)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue