www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | Submodules | README | LICENSE

commit c7fd46e6b4e0f1f2f8add47dc16b9435661c39eb
parent 3c2bcf012ff1d42a2284d81829c681955a7d4ae2
Author: Dan Stillman <dstillman@zotero.org>
Date:   Thu, 16 Nov 2017 01:15:18 -0500

Don't ignore whitespace when sorting

Intl.Collator's ignorePunctuation ignores whitespace too, so stop using
it, since it produces much weirder results than sorting on punctuation does.

Diffstat:
Mchrome/content/zotero/xpcom/zotero.js | 7+++++--
Mtest/tests/zoteroTest.js | 11+++++++++++
2 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/chrome/content/zotero/xpcom/zotero.js b/chrome/content/zotero/xpcom/zotero.js @@ -1546,7 +1546,6 @@ Services.scriptloader.loadSubScript("resource://zotero/polyfill.js"); } var collator = new Intl.Collator(locales, { - ignorePunctuation: true, numeric: true, sensitivity: 'base' }); @@ -1558,7 +1557,6 @@ Services.scriptloader.loadSubScript("resource://zotero/polyfill.js"); try { Zotero.logError("Falling back to en-US sorting"); collator = new Intl.Collator(['en-US'], { - ignorePunctuation: true, numeric: true, sensitivity: 'base' }); @@ -1602,6 +1600,11 @@ Services.scriptloader.loadSubScript("resource://zotero/polyfill.js"); // If initial punctuation is equivalent, use collator comparison // that ignores all punctuation + // + // Update: Intl.Collator's ignorePunctuation also ignores whitespace, so we're + // no longer using it, meaning we could take out most of the code to handle + // initial punctuation separately, unless we think we'll at some point switch to + // a collation function that ignores punctuation but not whitespace. if (aInitP == bInitP || !aInitP && !bInitP) return collator.compare(a, b); // Otherwise consider "attached" words as well, e.g. the order should be diff --git a/test/tests/zoteroTest.js b/test/tests/zoteroTest.js @@ -16,4 +16,15 @@ describe("Zotero", function() { assert.equal(str1, str2); }); }); + + + describe("#localeCompare", function () { + it("shouldn't ignore whitespace", function () { + assert.equal(Zotero.localeCompare("Chang", "Chan H"), 1); + }); + + it("shouldn't ignore leading punctuation", function () { + assert.equal(Zotero.localeCompare("_Abcd", "Abcd"), -1); + }); + }); });