Skip to content

Commit 95cee50

Browse files
authored
Merge pull request #2408 from hydephp/fix-search-index-not-trimming-numerical-ordering-prefixes
Fix search index not trimming numerical ordering prefixes
2 parents 694dc1e + 721c534 commit 95cee50

4 files changed

Lines changed: 67 additions & 4 deletions

File tree

packages/framework/src/Framework/Actions/GeneratesDocumentationSearchIndex.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,10 @@ protected function run(): void
5555
protected function generatePageEntry(DocumentationPage $page): array
5656
{
5757
return [
58-
'slug' => basename($page->identifier),
58+
'slug' => basename($page->routeKey),
5959
'title' => $page->title,
6060
'content' => trim($this->getSearchContentForDocument($page)),
61-
'destination' => $this->formatDestination(basename($page->identifier)),
61+
'destination' => $this->formatDestination(basename($page->routeKey)),
6262
];
6363
}
6464

packages/framework/src/Framework/Factories/HydePageDataFactory.php

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use Hyde\Markdown\Contracts\FrontMatter\PageSchema;
1111
use Hyde\Framework\Factories\Concerns\CoreDataObject;
1212
use Hyde\Framework\Features\Navigation\NavigationData;
13+
use Hyde\Framework\Features\Navigation\NumericalPageOrderingHelper;
1314

1415
use function basename;
1516
use function dirname;
@@ -68,7 +69,18 @@ private function findTitleForPage(): string
6869
return $this->getMatter('title')
6970
?? $this->findTitleFromMarkdownHeadings()
7071
?? $this->findTitleFromParentIdentifier()
71-
?? Hyde::makeTitle(basename($this->identifier));
72+
?? Hyde::makeTitle($this->getCleanBasename());
73+
}
74+
75+
private function getCleanBasename(): string
76+
{
77+
$basename = basename($this->identifier);
78+
79+
if (NumericalPageOrderingHelper::hasNumericalPrefix($basename)) {
80+
return NumericalPageOrderingHelper::splitNumericPrefix($basename)[1];
81+
}
82+
83+
return $basename;
7284
}
7385

7486
private function findTitleFromMarkdownHeadings(): ?string
@@ -87,7 +99,13 @@ private function findTitleFromMarkdownHeadings(): ?string
8799
private function findTitleFromParentIdentifier(): ?string
88100
{
89101
if (str_contains($this->identifier, '/') && str_ends_with($this->identifier, '/index')) {
90-
return Hyde::makeTitle(basename(dirname($this->identifier)));
102+
$parentBasename = basename(dirname($this->identifier));
103+
104+
if (NumericalPageOrderingHelper::hasNumericalPrefix($parentBasename)) {
105+
$parentBasename = NumericalPageOrderingHelper::splitNumericPrefix($parentBasename)[1];
106+
}
107+
108+
return Hyde::makeTitle($parentBasename);
91109
}
92110

93111
return null;

packages/framework/tests/Feature/Services/DocumentationSearchServiceTest.php

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,31 @@ public function testNestedSourceFilesDoNotRetainDirectoryNameInSearchIndex()
114114
);
115115
}
116116

117+
public function testNumericPrefixesAreStrippedFromSearchResults()
118+
{
119+
$this->file('_docs/01-foo.md');
120+
121+
$this->assertSame([[
122+
'slug' => 'foo',
123+
'title' => 'Foo',
124+
'content' => '',
125+
'destination' => 'foo.html',
126+
]], $this->getArray());
127+
}
128+
129+
public function testNumericPrefixesAreRemovedFromNestedSearchResults()
130+
{
131+
$this->directory(Hyde::path('_docs/01-category'));
132+
$this->file('_docs/01-category/02-item-name.md');
133+
134+
$result = $this->getArray()[0];
135+
136+
$this->assertSame('item-name', $result['slug']);
137+
$this->assertSame('item-name.html', $result['destination']);
138+
$this->assertStringNotContainsString('02-', json_encode($result));
139+
$this->assertStringNotContainsString('01-', json_encode($result));
140+
}
141+
117142
protected function getArray(): array
118143
{
119144
return json_decode(GeneratesDocumentationSearchIndex::handle(), true);

packages/framework/tests/Unit/HydePageDataFactoryTest.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,26 @@ public function testNavigationDataIsGeneratedByNavigationDataFactory()
7272
$this->assertInstanceOf(NavigationData::class, $this->factory()->toArray()['navigation']);
7373
}
7474

75+
public function testTitleStripsNumericalPrefixFromBasename()
76+
{
77+
$this->assertSame('Foo', $this->factoryFromPage(new MarkdownPage('01-foo'))->toArray()['title']);
78+
}
79+
80+
public function testTitleStripsNumericalPrefixFromNestedBasename()
81+
{
82+
$this->assertSame('Bar', $this->factoryFromPage(new MarkdownPage('foo/02-bar'))->toArray()['title']);
83+
}
84+
85+
public function testIndexPageTitleStripsNumericalPrefixFromParentIdentifierBasename()
86+
{
87+
$this->assertSame('Foo', $this->factoryFromPage(new MarkdownPage('01-foo/index'))->toArray()['title']);
88+
}
89+
90+
public function testIndexPageTitleStripsNumericalPrefixFromNestedParentIdentifierBasename()
91+
{
92+
$this->assertSame('Bar', $this->factoryFromPage(new MarkdownPage('foo/02-bar/index'))->toArray()['title']);
93+
}
94+
7595
protected function factory(array $data = []): HydePageDataFactory
7696
{
7797
return $this->factoryFromPage(new InMemoryPage('', $data));

0 commit comments

Comments
 (0)