diff --git a/sites/art/src/remark/semantic-blocks.mjs b/sites/art/src/remark/semantic-blocks.mjs index b4049be..a8afdbd 100644 --- a/sites/art/src/remark/semantic-blocks.mjs +++ b/sites/art/src/remark/semantic-blocks.mjs @@ -147,6 +147,15 @@ function plainText(value) { .trim(); } +function sortText(value) { + return plainText(value) + .normalize("NFKD") + .replace(/[\u0300-\u036f]/g, "") + .replace(/[^a-z0-9]+/gi, " ") + .trim() + .toLowerCase(); +} + function inlineMarkup(value) { return escapeHtml(value ?? "") .replace(/<br\s*\/?>/gi, "
") @@ -214,8 +223,7 @@ function displayValue(value) { function renderCell(row, column, options) { const raw = row[column] ?? ""; const display = displayValue(raw); - const text = plainText(display); - const sortValue = attribute(text.toLowerCase()); + const sortValue = attribute(sortText(display)); const cellAttrs = `data-column="${attribute(column)}" data-sort-value="${sortValue}"`; if (column === options.linkColumn && row[options.urlField]) { diff --git a/sites/poetry/src/remark/semantic-blocks.mjs b/sites/poetry/src/remark/semantic-blocks.mjs index b4049be..a8afdbd 100644 --- a/sites/poetry/src/remark/semantic-blocks.mjs +++ b/sites/poetry/src/remark/semantic-blocks.mjs @@ -147,6 +147,15 @@ function plainText(value) { .trim(); } +function sortText(value) { + return plainText(value) + .normalize("NFKD") + .replace(/[\u0300-\u036f]/g, "") + .replace(/[^a-z0-9]+/gi, " ") + .trim() + .toLowerCase(); +} + function inlineMarkup(value) { return escapeHtml(value ?? "") .replace(/<br\s*\/?>/gi, "
") @@ -214,8 +223,7 @@ function displayValue(value) { function renderCell(row, column, options) { const raw = row[column] ?? ""; const display = displayValue(raw); - const text = plainText(display); - const sortValue = attribute(text.toLowerCase()); + const sortValue = attribute(sortText(display)); const cellAttrs = `data-column="${attribute(column)}" data-sort-value="${sortValue}"`; if (column === options.linkColumn && row[options.urlField]) { diff --git a/sites/puzzles/src/remark/semantic-blocks.mjs b/sites/puzzles/src/remark/semantic-blocks.mjs index b4049be..a8afdbd 100644 --- a/sites/puzzles/src/remark/semantic-blocks.mjs +++ b/sites/puzzles/src/remark/semantic-blocks.mjs @@ -147,6 +147,15 @@ function plainText(value) { .trim(); } +function sortText(value) { + return plainText(value) + .normalize("NFKD") + .replace(/[\u0300-\u036f]/g, "") + .replace(/[^a-z0-9]+/gi, " ") + .trim() + .toLowerCase(); +} + function inlineMarkup(value) { return escapeHtml(value ?? "") .replace(/<br\s*\/?>/gi, "
") @@ -214,8 +223,7 @@ function displayValue(value) { function renderCell(row, column, options) { const raw = row[column] ?? ""; const display = displayValue(raw); - const text = plainText(display); - const sortValue = attribute(text.toLowerCase()); + const sortValue = attribute(sortText(display)); const cellAttrs = `data-column="${attribute(column)}" data-sort-value="${sortValue}"`; if (column === options.linkColumn && row[options.urlField]) { diff --git a/sites/reflections/src/remark/semantic-blocks.mjs b/sites/reflections/src/remark/semantic-blocks.mjs index b4049be..a8afdbd 100644 --- a/sites/reflections/src/remark/semantic-blocks.mjs +++ b/sites/reflections/src/remark/semantic-blocks.mjs @@ -147,6 +147,15 @@ function plainText(value) { .trim(); } +function sortText(value) { + return plainText(value) + .normalize("NFKD") + .replace(/[\u0300-\u036f]/g, "") + .replace(/[^a-z0-9]+/gi, " ") + .trim() + .toLowerCase(); +} + function inlineMarkup(value) { return escapeHtml(value ?? "") .replace(/<br\s*\/?>/gi, "
") @@ -214,8 +223,7 @@ function displayValue(value) { function renderCell(row, column, options) { const raw = row[column] ?? ""; const display = displayValue(raw); - const text = plainText(display); - const sortValue = attribute(text.toLowerCase()); + const sortValue = attribute(sortText(display)); const cellAttrs = `data-column="${attribute(column)}" data-sort-value="${sortValue}"`; if (column === options.linkColumn && row[options.urlField]) { diff --git a/sites/research/src/remark/semantic-blocks.mjs b/sites/research/src/remark/semantic-blocks.mjs index b4049be..a8afdbd 100644 --- a/sites/research/src/remark/semantic-blocks.mjs +++ b/sites/research/src/remark/semantic-blocks.mjs @@ -147,6 +147,15 @@ function plainText(value) { .trim(); } +function sortText(value) { + return plainText(value) + .normalize("NFKD") + .replace(/[\u0300-\u036f]/g, "") + .replace(/[^a-z0-9]+/gi, " ") + .trim() + .toLowerCase(); +} + function inlineMarkup(value) { return escapeHtml(value ?? "") .replace(/<br\s*\/?>/gi, "
") @@ -214,8 +223,7 @@ function displayValue(value) { function renderCell(row, column, options) { const raw = row[column] ?? ""; const display = displayValue(raw); - const text = plainText(display); - const sortValue = attribute(text.toLowerCase()); + const sortValue = attribute(sortText(display)); const cellAttrs = `data-column="${attribute(column)}" data-sort-value="${sortValue}"`; if (column === options.linkColumn && row[options.urlField]) { diff --git a/sites/reviews/src/remark/semantic-blocks.mjs b/sites/reviews/src/remark/semantic-blocks.mjs index b4049be..a8afdbd 100644 --- a/sites/reviews/src/remark/semantic-blocks.mjs +++ b/sites/reviews/src/remark/semantic-blocks.mjs @@ -147,6 +147,15 @@ function plainText(value) { .trim(); } +function sortText(value) { + return plainText(value) + .normalize("NFKD") + .replace(/[\u0300-\u036f]/g, "") + .replace(/[^a-z0-9]+/gi, " ") + .trim() + .toLowerCase(); +} + function inlineMarkup(value) { return escapeHtml(value ?? "") .replace(/<br\s*\/?>/gi, "
") @@ -214,8 +223,7 @@ function displayValue(value) { function renderCell(row, column, options) { const raw = row[column] ?? ""; const display = displayValue(raw); - const text = plainText(display); - const sortValue = attribute(text.toLowerCase()); + const sortValue = attribute(sortText(display)); const cellAttrs = `data-column="${attribute(column)}" data-sort-value="${sortValue}"`; if (column === options.linkColumn && row[options.urlField]) { diff --git a/sites/vibes/src/remark/semantic-blocks.mjs b/sites/vibes/src/remark/semantic-blocks.mjs index b4049be..a8afdbd 100644 --- a/sites/vibes/src/remark/semantic-blocks.mjs +++ b/sites/vibes/src/remark/semantic-blocks.mjs @@ -147,6 +147,15 @@ function plainText(value) { .trim(); } +function sortText(value) { + return plainText(value) + .normalize("NFKD") + .replace(/[\u0300-\u036f]/g, "") + .replace(/[^a-z0-9]+/gi, " ") + .trim() + .toLowerCase(); +} + function inlineMarkup(value) { return escapeHtml(value ?? "") .replace(/<br\s*\/?>/gi, "
") @@ -214,8 +223,7 @@ function displayValue(value) { function renderCell(row, column, options) { const raw = row[column] ?? ""; const display = displayValue(raw); - const text = plainText(display); - const sortValue = attribute(text.toLowerCase()); + const sortValue = attribute(sortText(display)); const cellAttrs = `data-column="${attribute(column)}" data-sort-value="${sortValue}"`; if (column === options.linkColumn && row[options.urlField]) {