mirror of
https://github.com/BookStackApp/BookStack.git
synced 2025-04-27 05:30:41 +00:00
Added tag highlighting in search
Using basic match of name or value containing a general term.
This commit is contained in:
parent
ab4e99bb18
commit
339518e2a6
3 changed files with 37 additions and 4 deletions
|
@ -2,6 +2,7 @@
|
|||
|
||||
namespace BookStack\Entities\Tools;
|
||||
|
||||
use BookStack\Actions\Tag;
|
||||
use BookStack\Entities\Models\Entity;
|
||||
use Illuminate\Support\HtmlString;
|
||||
|
||||
|
@ -41,6 +42,34 @@ class SearchResultsFormatter
|
|||
$formatted = $this->formatTextUsingMatchPositions($mergedRefs, $content);
|
||||
$entity->setAttribute($attributeName, new HtmlString($formatted));
|
||||
}
|
||||
|
||||
$tags = $entity->relationLoaded('tags') ? $entity->tags->all() : [];
|
||||
$this->highlightTagsContainingTerms($tags, $terms);
|
||||
}
|
||||
|
||||
/**
|
||||
* Highlight tags which match the given terms.
|
||||
* @param Tag[] $tags
|
||||
* @param string[] $terms
|
||||
*/
|
||||
protected function highlightTagsContainingTerms(array $tags, array $terms): void
|
||||
{
|
||||
foreach ($tags as $tag) {
|
||||
$tagName = strtolower($tag->name);
|
||||
$tagValue = strtolower($tag->value);
|
||||
|
||||
foreach ($terms as $term) {
|
||||
$termLower = strtolower($term);
|
||||
|
||||
if (strpos($tagName, $termLower) !== false) {
|
||||
$tag->setAttribute('highlight_name', true);
|
||||
}
|
||||
|
||||
if (strpos($tagValue, $termLower) !== false) {
|
||||
$tag->setAttribute('highlight_value', true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -262,6 +262,10 @@
|
|||
}
|
||||
}
|
||||
|
||||
.tag-name.highlight, .tag-value.highlight {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.tag-list div:last-child .tag-item {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
<div class="tag-item primary-background-light" data-name="{{ $tag->name }}" data-value="{{ $tag->value }}">
|
||||
@if($linked ?? true)
|
||||
<div class="tag-name"><a href="{{ $tag->nameUrl() }}">@icon('tag'){{ $tag->name }}</a></div>
|
||||
@if($tag->value) <div class="tag-value"><a href="{{ $tag->valueUrl() }}">{{$tag->value}}</a></div> @endif
|
||||
<div class="tag-name {{ $tag->highlight_name ? 'highlight' : '' }}"><a href="{{ $tag->nameUrl() }}">@icon('tag'){{ $tag->name }}</a></div>
|
||||
@if($tag->value) <div class="tag-value {{ $tag->highlight_value ? 'highlight' : '' }}"><a href="{{ $tag->valueUrl() }}">{{$tag->value}}</a></div> @endif
|
||||
@else
|
||||
<div class="tag-name"><span>@icon('tag'){{ $tag->name }}</span></div>
|
||||
@if($tag->value) <div class="tag-value"><span>{{$tag->value}}</span></div> @endif
|
||||
<div class="tag-name {{ $tag->highlight_name ? 'highlight' : '' }}"><span>@icon('tag'){{ $tag->name }}</span></div>
|
||||
@if($tag->value) <div class="tag-value {{ $tag->highlight_value ? 'highlight' : '' }}"><span>{{$tag->value}}</span></div> @endif
|
||||
@endif
|
||||
</div>
|
Loading…
Add table
Add a link
Reference in a new issue