mirror of
https://github.com/sissbruecker/linkding.git
synced 2025-11-17 11:34:03 +01:00
Fix tag cloud highlighting first char when tags are not grouped (#1209)
* Fix tag cloud highlighting first char when tags are not grouped * update test
This commit is contained in:
@@ -15,15 +15,15 @@
|
|||||||
{% for group in tag_cloud.groups %}
|
{% for group in tag_cloud.groups %}
|
||||||
<p class="group">
|
<p class="group">
|
||||||
{% for tag in group.tags %}
|
{% for tag in group.tags %}
|
||||||
{# Highlight first char of first tag in group #}
|
{# Highlight first char of first tag in group if grouping is enabled #}
|
||||||
{% if forloop.counter == 1 %}
|
{% if group.highlight_first_char and forloop.counter == 1 %}
|
||||||
<a href="?{{ tag.query_string }}"
|
<a href="?{{ tag.query_string }}"
|
||||||
class="mr-2" data-is-tag-item>
|
class="mr-2" data-is-tag-item>
|
||||||
<span
|
<span
|
||||||
class="highlight-char">{{ tag.name|first_char }}</span><span>{{ tag.name|remaining_chars:1 }}</span>
|
class="highlight-char">{{ tag.name|first_char }}</span><span>{{ tag.name|remaining_chars:1 }}</span>
|
||||||
</a>
|
</a>
|
||||||
{% else %}
|
{% else %}
|
||||||
{# Render remaining tags normally #}
|
{# Render tags normally #}
|
||||||
<a href="?{{ tag.query_string }}"
|
<a href="?{{ tag.query_string }}"
|
||||||
class="mr-2" data-is-tag-item>
|
class="mr-2" data-is-tag-item>
|
||||||
<span>{{ tag.name }}</span>
|
<span>{{ tag.name }}</span>
|
||||||
|
|||||||
@@ -32,7 +32,12 @@ class TagCloudTemplateTest(TestCase, BookmarkFactoryMixin, HtmlTestMixin):
|
|||||||
template_to_render = Template("{% include 'bookmarks/tag_cloud.html' %}")
|
template_to_render = Template("{% include 'bookmarks/tag_cloud.html' %}")
|
||||||
return template_to_render.render(context)
|
return template_to_render.render(context)
|
||||||
|
|
||||||
def assertTagGroups(self, rendered_template: str, groups: List[List[str]]):
|
def assertTagGroups(
|
||||||
|
self,
|
||||||
|
rendered_template: str,
|
||||||
|
groups: List[List[str]],
|
||||||
|
highlight_first_char: bool = True,
|
||||||
|
):
|
||||||
soup = self.make_soup(rendered_template)
|
soup = self.make_soup(rendered_template)
|
||||||
group_elements = soup.select("p.group")
|
group_elements = soup.select("p.group")
|
||||||
|
|
||||||
@@ -48,6 +53,18 @@ class TagCloudTemplateTest(TestCase, BookmarkFactoryMixin, HtmlTestMixin):
|
|||||||
link_element = link_elements[tag_index]
|
link_element = link_elements[tag_index]
|
||||||
self.assertEqual(link_element.text.strip(), tag)
|
self.assertEqual(link_element.text.strip(), tag)
|
||||||
|
|
||||||
|
if tag_index == 0:
|
||||||
|
if highlight_first_char:
|
||||||
|
self.assertIn(
|
||||||
|
f'<span class="highlight-char">{tag[0]}</span>',
|
||||||
|
str(link_element),
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
self.assertNotIn(
|
||||||
|
f'<span class="highlight-char">{tag[0]}</span>',
|
||||||
|
str(link_element),
|
||||||
|
)
|
||||||
|
|
||||||
def assertNumSelectedTags(self, rendered_template: str, count: int):
|
def assertNumSelectedTags(self, rendered_template: str, count: int):
|
||||||
soup = self.make_soup(rendered_template)
|
soup = self.make_soup(rendered_template)
|
||||||
link_elements = soup.select("p.selected-tags a")
|
link_elements = soup.select("p.selected-tags a")
|
||||||
@@ -178,6 +195,7 @@ class TagCloudTemplateTest(TestCase, BookmarkFactoryMixin, HtmlTestMixin):
|
|||||||
"Coyote",
|
"Coyote",
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
False,
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_no_duplicate_tag_names(self):
|
def test_no_duplicate_tag_names(self):
|
||||||
|
|||||||
@@ -383,10 +383,13 @@ class RemoveTagItem:
|
|||||||
|
|
||||||
|
|
||||||
class TagGroup:
|
class TagGroup:
|
||||||
def __init__(self, context: RequestContext, char: str):
|
def __init__(
|
||||||
|
self, context: RequestContext, char: str, highlight_first_char: bool = True
|
||||||
|
):
|
||||||
self.context = context
|
self.context = context
|
||||||
self.tags = []
|
self.tags = []
|
||||||
self.char = char
|
self.char = char
|
||||||
|
self.highlight_first_char = highlight_first_char
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return f"<{self.char} TagGroup>"
|
return f"<{self.char} TagGroup>"
|
||||||
@@ -436,7 +439,7 @@ class TagGroup:
|
|||||||
return []
|
return []
|
||||||
|
|
||||||
sorted_tags = sorted(tags, key=lambda x: str.lower(x.name))
|
sorted_tags = sorted(tags, key=lambda x: str.lower(x.name))
|
||||||
group = TagGroup(context, "Ungrouped")
|
group = TagGroup(context, "Ungrouped", highlight_first_char=False)
|
||||||
for tag in sorted_tags:
|
for tag in sorted_tags:
|
||||||
group.add_tag(tag)
|
group.add_tag(tag)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user