From dddbd8fb0014de74278c4d04c5a62e2f196015ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Malbr=C3=A1n?= Date: Fri, 19 Jul 2013 22:12:43 -0300 Subject: [PATCH 1/3] Correct sort of Untitled documents --- src/file/FileUtils.js | 40 ++++++++++++++++++++++++++++++++++------ 1 file changed, 34 insertions(+), 6 deletions(-) diff --git a/src/file/FileUtils.js b/src/file/FileUtils.js index 824308643a3..d529612ccfc 100644 --- a/src/file/FileUtils.js +++ b/src/file/FileUtils.js @@ -414,16 +414,44 @@ define(function (require, exports, module) { * @return {number} The result of the local compare function */ function compareFilenames(filename1, filename2, extFirst) { - var ext1 = getFilenameExtension(filename1), + var cmpNames, number1, number2, trimmed1, trimmed2, + ext1 = getFilenameExtension(filename1), ext2 = getFilenameExtension(filename2), + name1 = _getFilenameWithoutExtension(filename1), + name2 = _getFilenameWithoutExtension(filename2), cmpExt = ext1.toLocaleLowerCase().localeCompare(ext2.toLocaleLowerCase()), - cmpNames; + length = Math.min(name1.length, name2.length), + index = length; - if (brackets.platform === "win") { - filename1 = _getFilenameWithoutExtension(filename1); - filename2 = _getFilenameWithoutExtension(filename2); + // To properly sort filnames that have the same prefix and a different number suffix, we + // retrieve the suffix number from the filename until is no longer a positive number + while (length >= 0) { + length--; + number1 = name1.substr(length); + number2 = name2.substr(length); + + if (!$.isNumeric(number1) || !$.isNumeric(number2) || number1 < 0 || number2 < 0) { + trimmed1 = name1.substr(0, length); + trimmed2 = name2.substr(0, length); + number1 = name1.substr(length + 1); + number2 = name2.substr(length + 1); + break; + } + } + + // If the prefix are the same and the suffix is a number, compare the numbers + if (trimmed1.localeCompare(trimmed2) === 0 && $.isNumeric(number1) && $.isNumeric(number2) && + number1 >= 0 && number2 >= 0) { + cmpNames = parseInt(number1, 10) - parseInt(number2, 10); + + // If not, compare the filenames + } else { + if (brackets.platform === "win") { + filename1 = name1; + filename2 = name2; + } + cmpNames = filename1.toLocaleLowerCase().localeCompare(filename2.toLocaleLowerCase()); } - cmpNames = filename1.toLocaleLowerCase().localeCompare(filename2.toLocaleLowerCase()); return extFirst ? (cmpExt || cmpNames) : (cmpNames || cmpExt); } From 62399a77cd07026109ad11ba58cb991c5d74bdca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Malbr=C3=A1n?= Date: Sat, 20 Jul 2013 03:28:17 -0300 Subject: [PATCH 2/3] Better fix using the options parameters in locale compare --- src/file/FileUtils.js | 40 ++++++---------------------------------- 1 file changed, 6 insertions(+), 34 deletions(-) diff --git a/src/file/FileUtils.js b/src/file/FileUtils.js index d529612ccfc..d0c394f8b1d 100644 --- a/src/file/FileUtils.js +++ b/src/file/FileUtils.js @@ -414,44 +414,16 @@ define(function (require, exports, module) { * @return {number} The result of the local compare function */ function compareFilenames(filename1, filename2, extFirst) { - var cmpNames, number1, number2, trimmed1, trimmed2, - ext1 = getFilenameExtension(filename1), + var ext1 = getFilenameExtension(filename1), ext2 = getFilenameExtension(filename2), - name1 = _getFilenameWithoutExtension(filename1), - name2 = _getFilenameWithoutExtension(filename2), cmpExt = ext1.toLocaleLowerCase().localeCompare(ext2.toLocaleLowerCase()), - length = Math.min(name1.length, name2.length), - index = length; + cmpNames; - // To properly sort filnames that have the same prefix and a different number suffix, we - // retrieve the suffix number from the filename until is no longer a positive number - while (length >= 0) { - length--; - number1 = name1.substr(length); - number2 = name2.substr(length); - - if (!$.isNumeric(number1) || !$.isNumeric(number2) || number1 < 0 || number2 < 0) { - trimmed1 = name1.substr(0, length); - trimmed2 = name2.substr(0, length); - number1 = name1.substr(length + 1); - number2 = name2.substr(length + 1); - break; - } - } - - // If the prefix are the same and the suffix is a number, compare the numbers - if (trimmed1.localeCompare(trimmed2) === 0 && $.isNumeric(number1) && $.isNumeric(number2) && - number1 >= 0 && number2 >= 0) { - cmpNames = parseInt(number1, 10) - parseInt(number2, 10); - - // If not, compare the filenames - } else { - if (brackets.platform === "win") { - filename1 = name1; - filename2 = name2; - } - cmpNames = filename1.toLocaleLowerCase().localeCompare(filename2.toLocaleLowerCase()); + if (brackets.platform === "win") { + filename1 = _getFilenameWithoutExtension(filename1); + filename2 = _getFilenameWithoutExtension(filename2); } + cmpNames = filename1.toLocaleLowerCase().localeCompare(filename2.toLocaleLowerCase(), undefined, {numeric: true}); return extFirst ? (cmpExt || cmpNames) : (cmpNames || cmpExt); } From 7e457f2a1b7c757b8677f33a83a4faa9aecab240 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Malbr=C3=A1n?= Date: Mon, 22 Jul 2013 20:14:26 -0300 Subject: [PATCH 3/3] Fix for extensions compare --- src/file/FileUtils.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/file/FileUtils.js b/src/file/FileUtils.js index d0c394f8b1d..4cfc8290946 100644 --- a/src/file/FileUtils.js +++ b/src/file/FileUtils.js @@ -416,7 +416,7 @@ define(function (require, exports, module) { function compareFilenames(filename1, filename2, extFirst) { var ext1 = getFilenameExtension(filename1), ext2 = getFilenameExtension(filename2), - cmpExt = ext1.toLocaleLowerCase().localeCompare(ext2.toLocaleLowerCase()), + cmpExt = ext1.toLocaleLowerCase().localeCompare(ext2.toLocaleLowerCase(), undefined, {numeric: true}), cmpNames; if (brackets.platform === "win") {