mirror of
https://github.com/BookStackApp/BookStack.git
synced 2025-05-05 00:30:26 +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;
|
namespace BookStack\Entities\Tools;
|
||||||
|
|
||||||
|
use BookStack\Actions\Tag;
|
||||||
use BookStack\Entities\Models\Entity;
|
use BookStack\Entities\Models\Entity;
|
||||||
use Illuminate\Support\HtmlString;
|
use Illuminate\Support\HtmlString;
|
||||||
|
|
||||||
|
@ -41,6 +42,34 @@ class SearchResultsFormatter
|
||||||
$formatted = $this->formatTextUsingMatchPositions($mergedRefs, $content);
|
$formatted = $this->formatTextUsingMatchPositions($mergedRefs, $content);
|
||||||
$entity->setAttribute($attributeName, new HtmlString($formatted));
|
$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 {
|
.tag-list div:last-child .tag-item {
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
<div class="tag-item primary-background-light" data-name="{{ $tag->name }}" data-value="{{ $tag->value }}">
|
<div class="tag-item primary-background-light" data-name="{{ $tag->name }}" data-value="{{ $tag->value }}">
|
||||||
@if($linked ?? true)
|
@if($linked ?? true)
|
||||||
<div class="tag-name"><a href="{{ $tag->nameUrl() }}">@icon('tag'){{ $tag->name }}</a></div>
|
<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"><a href="{{ $tag->valueUrl() }}">{{$tag->value}}</a></div> @endif
|
@if($tag->value) <div class="tag-value {{ $tag->highlight_value ? 'highlight' : '' }}"><a href="{{ $tag->valueUrl() }}">{{$tag->value}}</a></div> @endif
|
||||||
@else
|
@else
|
||||||
<div class="tag-name"><span>@icon('tag'){{ $tag->name }}</span></div>
|
<div class="tag-name {{ $tag->highlight_name ? 'highlight' : '' }}"><span>@icon('tag'){{ $tag->name }}</span></div>
|
||||||
@if($tag->value) <div class="tag-value"><span>{{$tag->value}}</span></div> @endif
|
@if($tag->value) <div class="tag-value {{ $tag->highlight_value ? 'highlight' : '' }}"><span>{{$tag->value}}</span></div> @endif
|
||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
Loading…
Add table
Add a link
Reference in a new issue