Skip to content

Commit 26cef0d

Browse files
committed
Make page indicators links to the page they indicate.
1 parent 0253bab commit 26cef0d

File tree

3 files changed

+62
-6
lines changed

3 files changed

+62
-6
lines changed

javascripts/discourse/components/featured-homepage-topics.gjs

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import Component from "@glimmer/component";
22
import { tracked } from "@glimmer/tracking";
3-
import { concat } from "@ember/helper";
3+
import { concat, fn } from "@ember/helper";
4+
import { on } from "@ember/modifier";
45
import { action } from "@ember/object";
56
import didInsert from "@ember/render-modifiers/modifiers/did-insert";
67
import { service } from "@ember/service";
@@ -226,16 +227,30 @@ export default class FeaturedHomepageTopics extends Component {
226227
let pageProgressArray = [];
227228
for (let i = 0; i < this.numberOfPages; ++i) {
228229
if (i === this.currentPageIndex) {
229-
pageProgressArray.push("--current-page");
230+
pageProgressArray.push({ pageIndex: i, markerClass: "--current-page" });
230231
} else if (i < this.currentPageIndex) {
231-
pageProgressArray.push("--previous-page");
232+
pageProgressArray.push({
233+
pageIndex: i,
234+
markerClass: "--previous-page",
235+
});
232236
} else {
233-
pageProgressArray.push("");
237+
pageProgressArray.push({ pageIndex: i, markerClass: "" });
234238
}
235239
}
236240
return pageProgressArray;
237241
}
238242

243+
@action
244+
setPageIndex(pageIndex, event) {
245+
this.currentPageIndex = pageIndex;
246+
event?.preventDefault();
247+
this.getBannerTopics();
248+
}
249+
250+
pageNumberTitle(pageIndex) {
251+
return i18n(themePrefix("page_number"), { pageNumber: pageIndex + 1 });
252+
}
253+
239254
<template>
240255
{{#if (and this.showFor this.showHere)}}
241256
<div
@@ -327,8 +342,21 @@ export default class FeaturedHomepageTopics extends Component {
327342

328343
{{#if this.paginationEnabled}}
329344
<div class="page-progress-container">
330-
{{#each this.pageProgressArray as |pageProgressClass|}}
331-
<div class="page-progress-marker {{pageProgressClass}}" />
345+
{{#each this.pageProgressArray as |pageProgressItem|}}
346+
<a
347+
href
348+
class="page-progress-marker-link"
349+
title={{this.pageNumberTitle pageProgressItem.pageIndex}}
350+
{{on
351+
"click"
352+
(fn this.setPageIndex pageProgressItem.pageIndex)
353+
}}
354+
>
355+
<div
356+
class="page-progress-marker
357+
{{pageProgressItem.markerClass}}"
358+
/>
359+
</a>
332360
{{/each}}
333361
</div>
334362
{{/if}}

locales/en.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
en:
22
featured_topic_title: ""
3+
page_number: "Page %{pageNumber}"
34
theme_metadata:
45
settings:
56
number_of_topics: Display up to 5 topics at max-width

spec/system/pagination_spec.rb

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,33 @@
118118
expect(page).to have_css(".featured-topics-controls .left-page-button")
119119
expect_page_progress(2, 2)
120120
end
121+
122+
it "allows page switching by clicking page indicators" do
123+
theme.update_setting(:number_of_topics, 3)
124+
theme.update_setting(:max_number_of_topics, 8)
125+
theme.save!
126+
127+
visit("/")
128+
expect(page).to have_css(".featured-topics .featured-topic", count: 3)
129+
expect_page_progress(1, 3)
130+
131+
expect(page).to have_css(".page-progress-container .page-progress-marker-link:nth-child(1)")
132+
find(".page-progress-container .page-progress-marker-link:nth-child(1)").click
133+
expect(page).to have_css(".featured-topics .featured-topic", count: 3)
134+
expect_page_progress(1, 3)
135+
136+
find(".page-progress-container .page-progress-marker-link:nth-child(2)").click
137+
expect(page).to have_css(".featured-topics .featured-topic", count: 3)
138+
expect_page_progress(2, 3)
139+
140+
find(".page-progress-container .page-progress-marker-link:nth-child(3)").click
141+
expect(page).to have_css(".featured-topics .featured-topic", count: 2)
142+
expect_page_progress(3, 3)
143+
144+
find(".page-progress-container .page-progress-marker-link:nth-child(1)").click
145+
expect(page).to have_css(".featured-topics .featured-topic", count: 3)
146+
expect_page_progress(1, 3)
147+
end
121148
end
122149

123150
describe "with looping enabled" do

0 commit comments

Comments
 (0)