Normalize data table sort keys
Some checks are pending
Build / build (push) Waiting to run

This commit is contained in:
Neeldhara Misra 2026-06-29 02:31:41 +05:30
parent 498ae6a12e
commit b2684d5cee
7 changed files with 70 additions and 14 deletions

View file

@ -147,6 +147,15 @@ function plainText(value) {
.trim(); .trim();
} }
function sortText(value) {
return plainText(value)
.normalize("NFKD")
.replace(/[\u0300-\u036f]/g, "")
.replace(/[^a-z0-9]+/gi, " ")
.trim()
.toLowerCase();
}
function inlineMarkup(value) { function inlineMarkup(value) {
return escapeHtml(value ?? "") return escapeHtml(value ?? "")
.replace(/&lt;br\s*\/?&gt;/gi, "<br>") .replace(/&lt;br\s*\/?&gt;/gi, "<br>")
@ -214,8 +223,7 @@ function displayValue(value) {
function renderCell(row, column, options) { function renderCell(row, column, options) {
const raw = row[column] ?? ""; const raw = row[column] ?? "";
const display = displayValue(raw); const display = displayValue(raw);
const text = plainText(display); const sortValue = attribute(sortText(display));
const sortValue = attribute(text.toLowerCase());
const cellAttrs = `data-column="${attribute(column)}" data-sort-value="${sortValue}"`; const cellAttrs = `data-column="${attribute(column)}" data-sort-value="${sortValue}"`;
if (column === options.linkColumn && row[options.urlField]) { if (column === options.linkColumn && row[options.urlField]) {

View file

@ -147,6 +147,15 @@ function plainText(value) {
.trim(); .trim();
} }
function sortText(value) {
return plainText(value)
.normalize("NFKD")
.replace(/[\u0300-\u036f]/g, "")
.replace(/[^a-z0-9]+/gi, " ")
.trim()
.toLowerCase();
}
function inlineMarkup(value) { function inlineMarkup(value) {
return escapeHtml(value ?? "") return escapeHtml(value ?? "")
.replace(/&lt;br\s*\/?&gt;/gi, "<br>") .replace(/&lt;br\s*\/?&gt;/gi, "<br>")
@ -214,8 +223,7 @@ function displayValue(value) {
function renderCell(row, column, options) { function renderCell(row, column, options) {
const raw = row[column] ?? ""; const raw = row[column] ?? "";
const display = displayValue(raw); const display = displayValue(raw);
const text = plainText(display); const sortValue = attribute(sortText(display));
const sortValue = attribute(text.toLowerCase());
const cellAttrs = `data-column="${attribute(column)}" data-sort-value="${sortValue}"`; const cellAttrs = `data-column="${attribute(column)}" data-sort-value="${sortValue}"`;
if (column === options.linkColumn && row[options.urlField]) { if (column === options.linkColumn && row[options.urlField]) {

View file

@ -147,6 +147,15 @@ function plainText(value) {
.trim(); .trim();
} }
function sortText(value) {
return plainText(value)
.normalize("NFKD")
.replace(/[\u0300-\u036f]/g, "")
.replace(/[^a-z0-9]+/gi, " ")
.trim()
.toLowerCase();
}
function inlineMarkup(value) { function inlineMarkup(value) {
return escapeHtml(value ?? "") return escapeHtml(value ?? "")
.replace(/&lt;br\s*\/?&gt;/gi, "<br>") .replace(/&lt;br\s*\/?&gt;/gi, "<br>")
@ -214,8 +223,7 @@ function displayValue(value) {
function renderCell(row, column, options) { function renderCell(row, column, options) {
const raw = row[column] ?? ""; const raw = row[column] ?? "";
const display = displayValue(raw); const display = displayValue(raw);
const text = plainText(display); const sortValue = attribute(sortText(display));
const sortValue = attribute(text.toLowerCase());
const cellAttrs = `data-column="${attribute(column)}" data-sort-value="${sortValue}"`; const cellAttrs = `data-column="${attribute(column)}" data-sort-value="${sortValue}"`;
if (column === options.linkColumn && row[options.urlField]) { if (column === options.linkColumn && row[options.urlField]) {

View file

@ -147,6 +147,15 @@ function plainText(value) {
.trim(); .trim();
} }
function sortText(value) {
return plainText(value)
.normalize("NFKD")
.replace(/[\u0300-\u036f]/g, "")
.replace(/[^a-z0-9]+/gi, " ")
.trim()
.toLowerCase();
}
function inlineMarkup(value) { function inlineMarkup(value) {
return escapeHtml(value ?? "") return escapeHtml(value ?? "")
.replace(/&lt;br\s*\/?&gt;/gi, "<br>") .replace(/&lt;br\s*\/?&gt;/gi, "<br>")
@ -214,8 +223,7 @@ function displayValue(value) {
function renderCell(row, column, options) { function renderCell(row, column, options) {
const raw = row[column] ?? ""; const raw = row[column] ?? "";
const display = displayValue(raw); const display = displayValue(raw);
const text = plainText(display); const sortValue = attribute(sortText(display));
const sortValue = attribute(text.toLowerCase());
const cellAttrs = `data-column="${attribute(column)}" data-sort-value="${sortValue}"`; const cellAttrs = `data-column="${attribute(column)}" data-sort-value="${sortValue}"`;
if (column === options.linkColumn && row[options.urlField]) { if (column === options.linkColumn && row[options.urlField]) {

View file

@ -147,6 +147,15 @@ function plainText(value) {
.trim(); .trim();
} }
function sortText(value) {
return plainText(value)
.normalize("NFKD")
.replace(/[\u0300-\u036f]/g, "")
.replace(/[^a-z0-9]+/gi, " ")
.trim()
.toLowerCase();
}
function inlineMarkup(value) { function inlineMarkup(value) {
return escapeHtml(value ?? "") return escapeHtml(value ?? "")
.replace(/&lt;br\s*\/?&gt;/gi, "<br>") .replace(/&lt;br\s*\/?&gt;/gi, "<br>")
@ -214,8 +223,7 @@ function displayValue(value) {
function renderCell(row, column, options) { function renderCell(row, column, options) {
const raw = row[column] ?? ""; const raw = row[column] ?? "";
const display = displayValue(raw); const display = displayValue(raw);
const text = plainText(display); const sortValue = attribute(sortText(display));
const sortValue = attribute(text.toLowerCase());
const cellAttrs = `data-column="${attribute(column)}" data-sort-value="${sortValue}"`; const cellAttrs = `data-column="${attribute(column)}" data-sort-value="${sortValue}"`;
if (column === options.linkColumn && row[options.urlField]) { if (column === options.linkColumn && row[options.urlField]) {

View file

@ -147,6 +147,15 @@ function plainText(value) {
.trim(); .trim();
} }
function sortText(value) {
return plainText(value)
.normalize("NFKD")
.replace(/[\u0300-\u036f]/g, "")
.replace(/[^a-z0-9]+/gi, " ")
.trim()
.toLowerCase();
}
function inlineMarkup(value) { function inlineMarkup(value) {
return escapeHtml(value ?? "") return escapeHtml(value ?? "")
.replace(/&lt;br\s*\/?&gt;/gi, "<br>") .replace(/&lt;br\s*\/?&gt;/gi, "<br>")
@ -214,8 +223,7 @@ function displayValue(value) {
function renderCell(row, column, options) { function renderCell(row, column, options) {
const raw = row[column] ?? ""; const raw = row[column] ?? "";
const display = displayValue(raw); const display = displayValue(raw);
const text = plainText(display); const sortValue = attribute(sortText(display));
const sortValue = attribute(text.toLowerCase());
const cellAttrs = `data-column="${attribute(column)}" data-sort-value="${sortValue}"`; const cellAttrs = `data-column="${attribute(column)}" data-sort-value="${sortValue}"`;
if (column === options.linkColumn && row[options.urlField]) { if (column === options.linkColumn && row[options.urlField]) {

View file

@ -147,6 +147,15 @@ function plainText(value) {
.trim(); .trim();
} }
function sortText(value) {
return plainText(value)
.normalize("NFKD")
.replace(/[\u0300-\u036f]/g, "")
.replace(/[^a-z0-9]+/gi, " ")
.trim()
.toLowerCase();
}
function inlineMarkup(value) { function inlineMarkup(value) {
return escapeHtml(value ?? "") return escapeHtml(value ?? "")
.replace(/&lt;br\s*\/?&gt;/gi, "<br>") .replace(/&lt;br\s*\/?&gt;/gi, "<br>")
@ -214,8 +223,7 @@ function displayValue(value) {
function renderCell(row, column, options) { function renderCell(row, column, options) {
const raw = row[column] ?? ""; const raw = row[column] ?? "";
const display = displayValue(raw); const display = displayValue(raw);
const text = plainText(display); const sortValue = attribute(sortText(display));
const sortValue = attribute(text.toLowerCase());
const cellAttrs = `data-column="${attribute(column)}" data-sort-value="${sortValue}"`; const cellAttrs = `data-column="${attribute(column)}" data-sort-value="${sortValue}"`;
if (column === options.linkColumn && row[options.urlField]) { if (column === options.linkColumn && row[options.urlField]) {