Skip to content

Commit 32e208e

Browse files
authored
Fix breadcrumb generation and translation logic (#417)
* Fix breadcrumb generation and translation logic * Breadcrumb bug fixes * Fix RTL breadcrumb formatting
1 parent f35c6f0 commit 32e208e

File tree

2 files changed

+71
-17
lines changed

2 files changed

+71
-17
lines changed

_includes/breadcrumbs.html

Lines changed: 60 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,64 @@
1-
{% assign crumbs = page.url | remove:'/index.html' | split: '/' %}
1+
{% assign all_pages = site.documents | concat: site.pages %}
2+
3+
{%- assign crumbs = page.url | remove:'/index.html' | split: '/' %}
4+
5+
{% assign breadcrumb_pages = "" | split: "" %}
6+
{% assign total_crumbs = crumbs.size %}
7+
{% assign last_crumb_index = total_crumbs | minus: 2 %}
8+
9+
{% for breadcrumb_index in (1..last_crumb_index) %}
10+
{% assign cumulative_path = "" %}
11+
{% for path_index in (1..breadcrumb_index) %}
12+
{% assign cumulative_path = cumulative_path | append: "/" | append: crumbs[path_index] %}
13+
{% endfor %}
14+
{% assign breadcrumb_pages = breadcrumb_pages | push: cumulative_path %}
15+
{% endfor %}
216

317
<nav aria-label="breadcrumb">
418
<ol class="breadcrumb p-0" id="breadcrumbs">
5-
<li class="breadcrumb-item"><a href="/{% if site.lang != 'en' %}{{ site.lang }}{% endif %}">{% t generic.home %}</a></li>
6-
{% for crumb in crumbs offset: 1 %}
7-
{% if forloop.last %}
8-
/ <li class="breadcrumb-item active" aria-current="page">{% if page.texts %}{% t {{ page.texts }}.title %}{% else %}{% t page.title %}{% endif %}</li>
9-
{% else %}
10-
/ <li class="breadcrumb-item"><a href="{% if site.lang != 'en' %}/{{ site.lang }}{% endif %}{% assign crumb_limit = forloop.index %}{% for crumb in crumbs offset: 1 limit: crumb_limit %}/{{ crumb }}{% endfor %}">{{ crumb | replace:'-',' ' | remove:'.html' | capitalize }}</a></li>
11-
{% endif %}
12-
{% endfor %}
19+
<li class="breadcrumb-item"><a href="/{% if site.lang != site.defaultLang %}{{ site.lang }}{% endif %}">{% t generic.home %}</a></li>
20+
{% for crumb in breadcrumb_pages %}
21+
22+
{%- assign matched_page = nil %}
23+
{%- assign crumb_with_slash = crumb | append: "/" %}
24+
{%- for page_item in all_pages %}
25+
{%- if crumb == page_item.url or crumb_with_slash == page_item.url %}
26+
{%- assign matched_page = page_item %}
27+
{%- break %}
28+
{%- endif %}
29+
{%- endfor %}
30+
31+
<li class="breadcrumb-item"><a href="{% if site.lang != site.defaultLang %}/{{ site.lang }}{% endif %}{{ crumb }}">
32+
33+
{%- if matched_page.texts %}
34+
{%- t {{ matched_page.texts }}.title %}
35+
{%- elsif matched_page.title %}
36+
{%- capture translated_title %}{% t {{ matched_page.title }} %}{% endcapture %}
37+
{%- if translated_title and translated_title != "" %}
38+
{{- translated_title }}
39+
{%- else %}
40+
{{- matched_page.title }}
41+
{%- endif %}
42+
{%- else %}
43+
{{- crumb | split: "/" | last | replace: "-", " " | capitalize }}
44+
{%- endif %}
45+
46+
</a></li>
47+
{%- endfor %}
48+
49+
<li class="breadcrumb-item active" aria-current="page">
50+
{%- if page.texts %}
51+
{%- t {{ page.texts }}.title %}
52+
{%- elsif page.title %}
53+
{%- capture translated_title %}{% t {{ page.title }} %}{% endcapture %}
54+
{%- if translated_title and translated_title != "" %}
55+
{{- translated_title }}
56+
{%- else %}
57+
{{- page.title }}
58+
{%- endif %}
59+
{%- else %}
60+
{{- crumb | split: "/" | last | replace: "-", " " | capitalize }}
61+
{%- endif %}
62+
</li>
1363
</ol>
14-
</nav>
64+
</nav>

_sass/_custom.scss

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -542,20 +542,24 @@ blockquote {
542542
padding: 6px 10px;
543543
}
544544

545-
// Posts
545+
// Breadcrumbs
546546
#breadcrumbs {
547547
background-color: unset;
548548
}
549549

550-
.breadcrumb-item::before {
551-
display: none;
552-
}
550+
.breadcrumb-item + .breadcrumb-item {
551+
padding-left: 0; // Reset Bootstrap's left padding
552+
padding-inline-start: $breadcrumb-item-padding;
553553

554-
.breadcrumb-item {
555-
padding-left: 0.5rem;
556-
padding-right: 0.5rem;
554+
&::before {
555+
padding-right: 0; // Reset Bootstrap's right padding
556+
float: inline-start; // Use logical property for RTL languages
557+
padding-inline-end: $breadcrumb-item-padding;
558+
}
557559
}
558560

561+
// Posts
562+
559563
.post-content {
560564
& p, li {
561565
color: $gray-900;

0 commit comments

Comments
 (0)