Skip to content
This repository was archived by the owner on Sep 30, 2025. It is now read-only.

Commit 085ec10

Browse files
committed
Do not filter out parameters with the same name in pagination links
1 parent 7e8c2ba commit 085ec10

2 files changed

Lines changed: 72 additions & 49 deletions

File tree

src/Yesod/Paginator/Widgets.hs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -178,10 +178,12 @@ getUpdateGetParams
178178
getUpdateGetParams pageParamName = do
179179
params <- handlerToWidget $ reqGetParams <$> getRequest
180180
pure
181-
$ \number ->
182-
nubOn fst
183-
$ [(unPageParamName pageParamName, tshow number)]
184-
<> params
181+
$ \number -> formatParams number params
182+
where
183+
formatParams :: Show a => a -> [(Text, Text)] -> [(Text, Text)]
184+
formatParams number params =
185+
let name = unPageParamName pageParamName
186+
in [(name, tshow number)] <> filter ((/=) name . fst) params
185187

186188
renderGetParams :: [(Text, Text)] -> Text
187189
renderGetParams [] = ""

test/Yesod/Paginator/WidgetsSpec.hs

Lines changed: 66 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,77 @@
11
{-# LANGUAGE OverloadedStrings #-}
22
module Yesod.Paginator.WidgetsSpec
33
( spec
4-
)
5-
where
4+
) where
65

76
import SpecHelper
87

98
spec :: Spec
109
spec = withApp $ do
11-
describe "simple" $ it "works" $ do
12-
get $ SimpleR 10 3 3
13-
14-
statusIs 200
15-
bodyContains $ concat
16-
[ "<ul class=\"pagination\">"
17-
, "<li class=\"prev disabled\"><a>«</a></li>"
18-
, "<li class=\"active disabled\"><a>1</a></li>"
19-
, "<li class=\"next\"><a href=\"?p=2\">2</a></li>"
20-
, "<li class=\"next\"><a href=\"?p=3\">3</a></li>"
21-
, "<li class=\"next\"><a href=\"?p=2\">»</a></li>"
22-
, "</ul>"
23-
]
24-
25-
request $ do
26-
addGetParam "p" "3"
27-
setUrl $ SimpleR 10 3 3
28-
29-
statusIs 200
30-
bodyContains $ concat
31-
[ "<ul class=\"pagination\">"
32-
, "<li class=\"prev\"><a href=\"?p=2\">«</a></li>"
33-
, "<li class=\"prev\"><a href=\"?p=2\">2</a></li>"
34-
, "<li class=\"active disabled\"><a>3</a></li>"
35-
, "<li class=\"next\"><a href=\"?p=4\">4</a></li>"
36-
, "<li class=\"next\"><a href=\"?p=4\">»</a></li>"
37-
, "</ul>"
38-
]
39-
40-
request $ do
41-
addGetParam "p" "4"
42-
setUrl $ SimpleR 10 3 3
43-
44-
statusIs 200
45-
bodyContains $ concat
46-
[ "<ul class=\"pagination\">"
47-
, "<li class=\"prev\"><a href=\"?p=3\">«</a></li>"
48-
, "<li class=\"prev\"><a href=\"?p=2\">2</a></li>"
49-
, "<li class=\"prev\"><a href=\"?p=3\">3</a></li>"
50-
, "<li class=\"active disabled\"><a>4</a></li>"
51-
, "<li class=\"next disabled\"><a>»</a></li>"
52-
, "</ul>"
53-
]
10+
describe "simple" $ do
11+
it "works" $ do
12+
get $ SimpleR 10 3 3
13+
14+
statusIs 200
15+
bodyContains $ concat
16+
[ "<ul class=\"pagination\">"
17+
, "<li class=\"prev disabled\"><a>«</a></li>"
18+
, "<li class=\"active disabled\"><a>1</a></li>"
19+
, "<li class=\"next\"><a href=\"?p=2\">2</a></li>"
20+
, "<li class=\"next\"><a href=\"?p=3\">3</a></li>"
21+
, "<li class=\"next\"><a href=\"?p=2\">»</a></li>"
22+
, "</ul>"
23+
]
24+
25+
request $ do
26+
addGetParam "p" "3"
27+
setUrl $ SimpleR 10 3 3
28+
29+
statusIs 200
30+
bodyContains $ concat
31+
[ "<ul class=\"pagination\">"
32+
, "<li class=\"prev\"><a href=\"?p=2\">«</a></li>"
33+
, "<li class=\"prev\"><a href=\"?p=2\">2</a></li>"
34+
, "<li class=\"active disabled\"><a>3</a></li>"
35+
, "<li class=\"next\"><a href=\"?p=4\">4</a></li>"
36+
, "<li class=\"next\"><a href=\"?p=4\">»</a></li>"
37+
, "</ul>"
38+
]
39+
40+
request $ do
41+
addGetParam "p" "4"
42+
setUrl $ SimpleR 10 3 3
43+
44+
statusIs 200
45+
bodyContains $ concat
46+
[ "<ul class=\"pagination\">"
47+
, "<li class=\"prev\"><a href=\"?p=3\">«</a></li>"
48+
, "<li class=\"prev\"><a href=\"?p=2\">2</a></li>"
49+
, "<li class=\"prev\"><a href=\"?p=3\">3</a></li>"
50+
, "<li class=\"active disabled\"><a>4</a></li>"
51+
, "<li class=\"next disabled\"><a>»</a></li>"
52+
, "</ul>"
53+
]
54+
55+
it "includes all parameters with the same name" $ do
56+
get $ SimpleR 10 3 3
57+
58+
request $ do
59+
addGetParam "p" "3"
60+
addGetParam "ids[]" "1"
61+
addGetParam "ids[]" "2"
62+
setUrl $ SimpleR 10 3 3
63+
64+
statusIs 200
65+
66+
bodyContains $ concat
67+
[ "<ul class=\"pagination\">"
68+
, "<li class=\"prev\"><a href=\"?p=2&amp;ids%5B%5D=2&amp;ids%5B%5D=1\">«</a></li>"
69+
, "<li class=\"prev\"><a href=\"?p=2&amp;ids%5B%5D=2&amp;ids%5B%5D=1\">2</a></li>"
70+
, "<li class=\"active disabled\"><a>3</a></li>"
71+
, "<li class=\"next\"><a href=\"?p=4&amp;ids%5B%5D=2&amp;ids%5B%5D=1\">4</a></li>"
72+
, "<li class=\"next\"><a href=\"?p=4&amp;ids%5B%5D=2&amp;ids%5B%5D=1\">»</a></li>"
73+
, "</ul>"
74+
]
5475

5576
describe "ellipsed" $ it "works" $ do
5677
get $ EllipsedR 10 3 3

0 commit comments

Comments
 (0)