mirror of
				https://codeberg.org/forgejo/forgejo.git
				synced 2025-10-31 14:31:02 +00: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…
	
	Add table
		Add a link
		
	
		Reference in a new issue