diff --git a/lib/javascripts/pagy.js b/lib/javascripts/pagy.js
index 92f3324d9..7ec388827 100644
--- a/lib/javascripts/pagy.js
+++ b/lib/javascripts/pagy.js
@@ -98,6 +98,6 @@ Pagy.addInputEventListeners = function(input, handler){
};
Pagy.trim = function(html, param){
- var re = new RegExp('[?&]' + param + '=1(?![&])|(?<=[?&])' + param + '=1&');
+ var re = new RegExp('[?&]' + param + '=1\b(?!&)|\b' + param + '=1&');
return html.replace(re, '');
};
diff --git a/lib/pagy/extras/trim.rb b/lib/pagy/extras/trim.rb
index aaf89b8dc..ebe7d9d0e 100644
--- a/lib/pagy/extras/trim.rb
+++ b/lib/pagy/extras/trim.rb
@@ -10,11 +10,11 @@ module Frontend
alias_method :pagy_link_proc_without_trim, :pagy_link_proc
def pagy_link_proc_with_trim(pagy, link_extra='')
- link_proc = pagy_link_proc_without_trim(pagy, link_extra)
- page_param = pagy.vars[:page_param]
+ link_proc = pagy_link_proc_without_trim(pagy, link_extra)
+ re = /[?&]#{pagy.vars[:page_param]}=1\b(?!&)|\b#{pagy.vars[:page_param]}=1&/
lambda do |n, text=n, extra=''|
link = link_proc.call(n, text, extra)
- n == 1 ? link.sub(/[?&]#{page_param}=1(?![&])|\b(?<=[?&])#{page_param}=1&/, '') : link
+ n == 1 ? link.sub(re, '') : link
end
end
alias_method :pagy_link_proc, :pagy_link_proc_with_trim
diff --git a/test/pagy/extras/trim_test.rb b/test/pagy/extras/trim_test.rb
index b17d2804b..6bff241ad 100644
--- a/test/pagy/extras/trim_test.rb
+++ b/test/pagy/extras/trim_test.rb
@@ -20,14 +20,26 @@
describe "#pagy_link_proc" do
it 'returns trimmed link' do
- pagy = Pagy.new(count: 1000)
- link = view.pagy_link_proc(pagy)
- link.call(1).must_equal("1")
- link.call(10).must_equal("10")
- pagy = Pagy.new(count: 1000, params: {a:3,b:4})
- link = view.pagy_link_proc(pagy)
- link.call(1).must_equal("1")
- link.call(10).must_equal("10")
+ [ [1, '?page=1', ''], # only param
+ [1, '?page=1&b=2', '?b=2'], # first param
+ [1, '?a=1&page=1&b=2', '?a=1&b=2'], # middle param
+ [1, '?a=1&page=1', '?a=1'], # last param
+
+ [1, '?my_page=1&page=1', '?my_page=1'], # skip similar first param
+ [1, '?a=1&my_page=1&page=1', '?a=1&my_page=1'], # skip similar middle param
+ [1, '?a=1&page=1&my_page=1', '?a=1&my_page=1'], # skip similar last param
+
+ [11, '?page=11', '?page=11'], # don't trim only param
+ [11, '?page=11&b=2', '?page=11&b=2'], # don't trim first param
+ [11, '?a=1&page=11&b=2', '?a=1&page=11&b=2'], # don't trim middle param
+ [11, '?a=1&page=11', '?a=1&page=11'] # don't trim last param
+ ].each do |args|
+ page, generated, trimmed = args
+ view = MockView.new("http://example.com:3000/foo#{generated}")
+ pagy = Pagy.new(count: 1000, page: page)
+ link = view.pagy_link_proc(pagy)
+ link.call(page).must_equal("#{page}")
+ end
end
end