summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoremkael <emkael@tlen.pl>2023-08-05 00:18:08 +0200
committeremkael <emkael@tlen.pl>2023-08-05 00:18:08 +0200
commit7e419352d848ec9b989366916926ba3959c591ea (patch)
tree9175f71a92104f7d51eb4a9653598d9943d7a656
parentadab18f97b80880f4c99a2d0f7b64c643402bfd9 (diff)
Polish collation-based comparators for name and club filters
Fixes #20
-rw-r--r--http/_res/ranking.js20
1 files changed, 18 insertions, 2 deletions
diff --git a/http/_res/ranking.js b/http/_res/ranking.js
index c85df2b..2038e71 100644
--- a/http/_res/ranking.js
+++ b/http/_res/ranking.js
@@ -100,15 +100,31 @@ var ranking = {
filterRows : function(params) {
$('table.data-table tbody tr').remove();
var displayRows = [];
+ const collator = new Intl.Collator('pl', {sensitivity: 'base', usage: 'search'});
+ var contains = function(haystack, needle) {
+ if (needle.length === 0) {
+ return true;
+ }
+ haystack = haystack.normalize('NFC');
+ needle = needle.normalize('NFC');
+ let scan = 0;
+ for (; scan + needle.length <= haystack.length; scan += 1) {
+ const slice = haystack.slice(scan, scan + needle.length);
+ if (collator.compare(needle, slice) === 0) {
+ return true;
+ }
+ }
+ return false;
+ };
ranking.rankingData.forEach(function(row) {
var hidden = false;
params.forEach(function(value, param) {
if (param == 'name') {
- if (row['player'].trim().toLowerCase().search(value.join('')) == -1) {
+ if (!contains(row['player'].trim(), value.join(''))) {
hidden = true;
}
} else if (param == 'club') {
- if (row['club'].trim().toLowerCase().search(value.join('')) == -1) {
+ if (!contains(row['club'].trim(), value.join(''))) {
hidden = true;
}
} else if (param.substr(0, 4) != 'page') {