|
3 | 3 |
|
4 | 4 | // https://stackoverflow.com/questions/5999118/add-or-update-query-string-parameter |
5 | 5 | function updateQueryStringParameter(uri, key, value) { |
6 | | - var re = new RegExp("([?&])" + key + "=.*?(&|$)", "i"); |
7 | | - var separator = uri.indexOf("?") !== -1 ? "&" : "?"; |
8 | | - if (uri.match(re)) { |
9 | | - return uri.replace(re, "$1" + key + "=" + value + "$2"); |
10 | | - } |
11 | | - else { |
12 | | - return uri + separator + key + "=" + value; |
13 | | - } |
| 6 | + var re = new RegExp("([?&])" + key + "=.*?(&|$)", "i"); |
| 7 | + var separator = uri.indexOf("?") !== -1 ? "&" : "?"; |
| 8 | + if (uri.match(re)) { |
| 9 | + return uri.replace(re, "$1" + key + "=" + value + "$2"); |
| 10 | + } |
| 11 | + else { |
| 12 | + return uri + separator + key + "=" + value; |
| 13 | + } |
14 | 14 | } |
15 | 15 |
|
16 | 16 |
|
17 | 17 | function makePageLink(currentUrl, currentStart, start, linkText) { |
18 | | - var uri = updateQueryStringParameter(currentUrl, "start", start); |
19 | | - var tagStart = '<a href="'; |
20 | | - if (currentStart == start) { |
21 | | - uri = "#"; |
22 | | - if (!linkText.toString().substring(0, 1) === "&") { // Don't modify arrows |
23 | | - tagStart = '<a class="active" href="'; |
24 | | - } |
25 | | - } |
26 | | - var link = tagStart + uri + '">' + linkText + '</a>'; |
27 | | - return link; |
| 18 | + var uri = updateQueryStringParameter(currentUrl, "start", start); |
| 19 | + var tagStart = '<a href="'; |
| 20 | + if (currentStart == start) { |
| 21 | + uri = "#"; |
| 22 | + if (linkText.toString().substring(0, 1) !== "&") { // Don't modify arrows |
| 23 | + tagStart = '<a class="active" href="'; |
| 24 | + } |
| 25 | + } |
| 26 | + var link = tagStart + uri + '">' + linkText + '</a>'; |
| 27 | + return link; |
28 | 28 | } |
29 | 29 |
|
30 | 30 |
|
31 | 31 | // Creates links to additional pages of search results. |
32 | 32 | // Requires a start URI argument indicating start index of search results |
33 | 33 | // as passed to the server providing the search results. |
34 | 34 | function showPageLinks(total, limit, showPages, currentStart, domElementId) { |
35 | | - if (total <= limit) { |
36 | | - return ""; |
37 | | - } |
38 | | - |
39 | | - var currentUrl = window.location.href; |
40 | | - var numPages = Math.ceil(total / limit); |
41 | | - var currentPage = Math.floor(currentStart / limit) + 1; |
42 | | - var pagesLeftRight = Math.floor(showPages / 2); |
43 | | - var startPage = currentPage - pagesLeftRight; |
44 | | - var endPage = currentPage + pagesLeftRight; |
45 | | - |
46 | | - if (endPage > numPages) { |
47 | | - endPage = numPages; |
48 | | - startPage = endPage - showPages + 1; |
49 | | - } |
50 | | - if (startPage <= 0) { |
51 | | - startPage = 1; |
52 | | - endPage = showPages; |
53 | | - if (endPage > numPages) { |
54 | | - endPage = numPages; |
55 | | - } |
56 | | - } |
57 | | - |
58 | | - var link_list = []; |
59 | | - link_list.push(makePageLink(currentUrl, currentStart, 0, "«")); |
60 | | - for (var i = startPage; i <= endPage; i++) { |
61 | | - var startIndex = (i - 1) * limit; |
62 | | - link_list.push(makePageLink(currentUrl, currentStart, startIndex, i)); |
63 | | - } |
64 | | - var lastIndex = (numPages - 1) * limit; |
65 | | - link_list.push( |
66 | | - makePageLink(currentUrl, currentStart, lastIndex, "»")); |
67 | | - |
68 | | - var html = link_list.join(""); |
69 | | - document.getElementById(domElementId).innerHTML = html; |
| 35 | + if (total <= limit) { |
| 36 | + return ""; |
| 37 | + } |
| 38 | + |
| 39 | + var el = document.getElementById(domElementId); |
| 40 | + if (!el) return; |
| 41 | + |
| 42 | + var currentUrl = window.location.href; |
| 43 | + var numPages = Math.ceil(total / limit); |
| 44 | + var currentPage = Math.floor(currentStart / limit) + 1; |
| 45 | + var pagesLeftRight = Math.floor(showPages / 2); |
| 46 | + var startPage = currentPage - pagesLeftRight; |
| 47 | + var endPage = currentPage + pagesLeftRight; |
| 48 | + |
| 49 | + if (endPage > numPages) { |
| 50 | + endPage = numPages; |
| 51 | + startPage = endPage - showPages + 1; |
| 52 | + } |
| 53 | + if (startPage <= 0) { |
| 54 | + startPage = 1; |
| 55 | + endPage = showPages; |
| 56 | + if (endPage > numPages) { |
| 57 | + endPage = numPages; |
| 58 | + } |
| 59 | + } |
| 60 | + |
| 61 | + var link_list = []; |
| 62 | + link_list.push(makePageLink(currentUrl, currentStart, 0, "«")); |
| 63 | + for (var i = startPage; i <= endPage; i++) { |
| 64 | + var startIndex = (i - 1) * limit; |
| 65 | + link_list.push(makePageLink(currentUrl, currentStart, startIndex, i)); |
| 66 | + } |
| 67 | + var lastIndex = (numPages - 1) * limit; |
| 68 | + link_list.push( |
| 69 | + makePageLink(currentUrl, currentStart, lastIndex, "»")); |
| 70 | + |
| 71 | + el.innerHTML = link_list.join(""); |
70 | 72 | } |
71 | 73 |
|
72 | 74 |
|
73 | 75 | function escapeHtml(unsafe) { |
74 | | - return unsafe |
75 | | - .replace(/&/g, "&") |
76 | | - .replace(/</g, "<") |
77 | | - .replace(/>/g, ">") |
78 | | - .replace(/"/g, """) |
79 | | - .replace(/'/g, "'"); |
| 76 | + return unsafe |
| 77 | + .replace(/&/g, "&") |
| 78 | + .replace(/</g, "<") |
| 79 | + .replace(/>/g, ">") |
| 80 | + .replace(/"/g, """) |
| 81 | + .replace(/'/g, "'"); |
80 | 82 | } |
81 | 83 |
|
82 | 84 |
|
83 | 85 | function showResultCount(query, total, limitPerPage, currentStartIndex, domElementId) { |
84 | | - if (total == 0) { |
85 | | - return; |
86 | | - } |
87 | | - |
88 | | - var s = ""; |
89 | | - if (total > 1) { |
90 | | - s = "s"; |
91 | | - } |
92 | | - var found = "<p>Found " + total + " result" + s; |
93 | | - if (query != "" && query != null) { |
94 | | - query = escapeHtml(query); |
95 | | - var forQuery = ' for <span class="result-query">' + query + '</span>'; |
96 | | - } |
97 | | - else { |
98 | | - var forQuery = ""; |
99 | | - } |
100 | | - if (total <= limitPerPage) { |
101 | | - var showing = "</p>"; |
102 | | - } |
103 | | - else { |
104 | | - var fromCount = currentStartIndex + 1; |
105 | | - var toCount = currentStartIndex + limitPerPage; |
106 | | - if (toCount > total) { |
107 | | - toCount = total; |
108 | | - } |
109 | | - var showing = (". Showing results " + fromCount + " to " + toCount + ".</p>"); |
110 | | - } |
111 | | - var element = document.getElementById(domElementId); |
112 | | - element.innerHTML = found + forQuery + showing; |
| 86 | + var element = document.getElementById(domElementId); |
| 87 | + if (total == 0 || !element) { |
| 88 | + return; |
| 89 | + } |
| 90 | + |
| 91 | + var s = ""; |
| 92 | + if (total > 1) { |
| 93 | + s = "s"; |
| 94 | + } |
| 95 | + var found = "<p>Found " + total + " result" + s; |
| 96 | + if (query != "" && query != null) { |
| 97 | + query = escapeHtml(query); |
| 98 | + var forQuery = ' for <span class="result-query">' + query + '</span>'; |
| 99 | + } |
| 100 | + else { |
| 101 | + var forQuery = ""; |
| 102 | + } |
| 103 | + if (limitPerPage === null || total <= limitPerPage) { |
| 104 | + var showing = "</p>"; |
| 105 | + } |
| 106 | + else { |
| 107 | + var fromCount = currentStartIndex + 1; |
| 108 | + var toCount = currentStartIndex + limitPerPage; |
| 109 | + if (toCount > total) { |
| 110 | + toCount = total; |
| 111 | + } |
| 112 | + var showing = (". Showing results " + fromCount + " to " + toCount + ".</p>"); |
| 113 | + } |
| 114 | + element.innerHTML = found + forQuery + showing; |
113 | 115 | } |
0 commit comments