diff options
Diffstat (limited to 'lib/willpaginate_extension.rb')
-rw-r--r-- | lib/willpaginate_extension.rb | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/lib/willpaginate_extension.rb b/lib/willpaginate_extension.rb new file mode 100644 index 000000000..3cdb0ae60 --- /dev/null +++ b/lib/willpaginate_extension.rb @@ -0,0 +1,59 @@ +# this extension is loaded in environment.rb +module WillPaginateExtension + class LinkRenderer < WillPaginate::LinkRenderer + def page_link(page, text, attributes = {}) + # Hack for admin pages, when proxied via https on mySociety servers, they + # need a relative URL. + url = url_for(page) + if url.match(/\/admin.*(\?.*)/) + url = $1 + end + # Hack around our type-ahead search magic + if url.match(/\/body\/search_ahead/) + url.sub!("/body/search_ahead", "/select_authority") + end + @template.link_to text, url, attributes + end + + # Returns URL params for +page_link_or_span+, taking the current GET params + # and <tt>:params</tt> option into account. + def url_for(page) + page_one = page == 1 + unless @url_string and !page_one + @url_params = {} + # page links should preserve GET parameters + stringified_merge @url_params, @template.params if @template.request.get? + stringified_merge @url_params, @options[:params] if @options[:params] + if complex = param_name.index(/[^\w-]/) + page_param = parse_query_parameters("#{param_name}=#{page}") + + stringified_merge @url_params, page_param + else + @url_params[param_name] = page_one ? 1 : 2 + end + # the following line makes pagination work on our specially munged search page + combined = @template.request.path_parameters["combined"] + @url_params["combined"] = combined if !combined.nil? + url = @template.url_for(@url_params) + return url if page_one + + if complex + @url_string = url.sub(%r!((?:\?|&)#{CGI.escape param_name}=)#{page}!, "\\1\0") + return url + else + @url_string = url + @url_params[param_name] = 3 + @template.url_for(@url_params).split(//).each_with_index do |char, i| + if char == '3' and url[i, 1] == '2' + @url_string[i] = "\0" + break + end + end + end + end + # finally! + @url_string.sub "\0", page.to_s + end + + end +end |