Changeset 219014 in webkit
- Timestamp:
- Jun 30, 2017 2:47:05 PM (7 years ago)
- Location:
- trunk
- Files:
-
- 26 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r219008 r219014 1 2017-06-30 Devin Rousso <drousso@apple.com> 2 3 Web Inspector: Default string comparisons to treat numeric characters as numbers 4 https://bugs.webkit.org/show_bug.cgi?id=173984 5 6 Reviewed by Joseph Pecoraro. 7 8 * inspector/unit-tests/string-utilities.html: 9 Add tests for String.prototype.extendedLocaleCompare. 10 1 11 2017-06-30 Ryosuke Niwa <rniwa@webkit.org> 2 12 -
trunk/LayoutTests/inspector/unit-tests/string-utilities-expected.txt
r199635 r219014 21 21 PASS: integer format specifier with NaN argument should show "NaN" 22 22 23 -- Running test case: String.prototype.extendedLocaleCompare 24 PASS: "1" < "2" 25 PASS: "2" > "1" 26 PASS: "2" < "10" 27 PASS: "10" > "2" 28 PASS: "1" < "10" 29 PASS: "10" > "1" 30 PASS: "a1" < "a2" 31 PASS: "a2" > "a1" 32 PASS: "a2" < "a10" 33 PASS: "a10" > "a2" 34 PASS: "a1" < "a10" 35 PASS: "a10" > "a1" 36 -
trunk/LayoutTests/inspector/unit-tests/string-utilities.html
r210062 r219014 34 34 }); 35 35 36 suite.addTestCase({ 37 name: "String.prototype.extendedLocaleCompare", 38 test() { 39 InspectorTest.expectEqual("1".extendedLocaleCompare("2"), -1, `"1" < "2"`); 40 InspectorTest.expectEqual("2".extendedLocaleCompare("1"), 1, `"2" > "1"`); 41 InspectorTest.expectEqual("2".extendedLocaleCompare("10"), -1, `"2" < "10"`); 42 InspectorTest.expectEqual("10".extendedLocaleCompare("2"), 1, `"10" > "2"`); 43 InspectorTest.expectEqual("1".extendedLocaleCompare("10"), -1, `"1" < "10"`); 44 InspectorTest.expectEqual("10".extendedLocaleCompare("1"), 1, `"10" > "1"`); 45 46 InspectorTest.expectEqual("a1".extendedLocaleCompare("a2"), -1, `"a1" < "a2"`); 47 InspectorTest.expectEqual("a2".extendedLocaleCompare("a1"), 1, `"a2" > "a1"`); 48 InspectorTest.expectEqual("a2".extendedLocaleCompare("a10"), -1, `"a2" < "a10"`); 49 InspectorTest.expectEqual("a10".extendedLocaleCompare("a2"), 1, `"a10" > "a2"`); 50 InspectorTest.expectEqual("a1".extendedLocaleCompare("a10"), -1, `"a1" < "a10"`); 51 InspectorTest.expectEqual("a10".extendedLocaleCompare("a1"), 1, `"a10" > "a1"`); 52 return true; 53 } 54 }); 55 36 56 suite.runTestCasesAndFinish(); 37 57 } -
trunk/Source/WebInspectorUI/ChangeLog
r218984 r219014 1 2017-06-30 Devin Rousso <drousso@apple.com> 2 3 Web Inspector: Default string comparisons to treat numeric characters as numbers 4 https://bugs.webkit.org/show_bug.cgi?id=173984 5 6 Reviewed by Joseph Pecoraro. 7 8 * UserInterface/Base/Utilities.js: 9 (String.prototype.extendedLocaleCompare): 10 * UserInterface/Controllers/JavaScriptRuntimeCompletionProvider.js: 11 (WebInspector.JavaScriptRuntimeCompletionProvider.prototype.completionControllerCompletionsNeeded.receivedPropertyNames.compare): 12 * UserInterface/Controllers/ResourceQueryController.js: 13 (WebInspector.ResourceQueryController.prototype.executeQuery): 14 * UserInterface/Views/ApplicationCacheFrameContentView.js: 15 (WebInspector.ApplicationCacheFrameContentView.prototype._sortDataGrid.localeCompare): 16 * UserInterface/Views/CSSStyleDeclarationTextEditor.js: 17 (WebInspector.CSSStyleDeclarationTextEditor.prototype._iterateOverProperties): 18 * UserInterface/Views/CookieStorageContentView.js: 19 (WebInspector.CookieStorageContentView.prototype._sortDataGrid.localeCompare): 20 * UserInterface/Views/DOMNodeDetailsSidebarPanel.js: 21 (WebInspector.DOMNodeDetailsSidebarPanel.prototype._refreshAttributes): 22 (WebInspector.DOMNodeDetailsSidebarPanel.prototype._refreshEventListeners.generateGroupsByNode): 23 * UserInterface/Views/DOMStorageContentView.js: 24 (WebInspector.DOMStorageContentView.prototype._sortDataGrid.comparator): 25 * UserInterface/Views/DebuggerSidebarPanel.js: 26 (WebInspector.DebuggerSidebarPanel.prototype._compareTopLevelTreeElements): 27 * UserInterface/Views/FolderizedTreeElement.js: 28 (WebInspector.FolderizedTreeElement.prototype._compareTreeElementsByMainTitle): 29 * UserInterface/Views/HeapSnapshotDataGridTree.js: 30 (WebInspector.HeapSnapshotDataGridTree.buildSortComparator): 31 * UserInterface/Views/NetworkTimelineView.js: 32 (WebInspector.NetworkTimelineView.prototype.dataGridSortComparator): 33 * UserInterface/Views/NewTabContentView.js: 34 (WebInspector.NewTabContentView.prototype._updateShownTabs): 35 * UserInterface/Views/OverviewTimelineView.js: 36 (WebInspector.OverviewTimelineView.prototype._compareDataGridNodesByStartTime): 37 * UserInterface/Views/ProbeDetailsSidebarPanel.js: 38 (WebInspector.ProbeDetailsSidebarPanel.prototype.inspect): 39 * UserInterface/Views/QuickConsole.js: 40 (WebInspector.QuickConsole.prototype._compareExecutionContextPathComponents): 41 * UserInterface/Views/ResourceDetailsSidebarPanel.js: 42 (WebInspector.ResourceDetailsSidebarPanel.prototype._createNameValueDataGrid.sortDataGrid.comparator): 43 * UserInterface/Views/ResourceSidebarPanel.js: 44 (WebInspector.ResourceSidebarPanel.prototype._compareTreeElements): 45 * UserInterface/Views/ResourceTreeElement.js: 46 (WebInspector.ResourceTreeElement.compareResourceTreeElements): 47 (WebInspector.ResourceTreeElement.compareFolderAndResourceTreeElements): 48 * UserInterface/Views/ScriptDetailsTimelineView.js: 49 (WebInspector.ScriptDetailsTimelineView.prototype.dataGridSortComparator): 50 * UserInterface/Views/StorageSidebarPanel.js: 51 (WebInspector.StorageSidebarPanel.prototype._compareTreeElements): 52 * UserInterface/Views/TimelineDataGrid.js: 53 (WebInspector.TimelineDataGrid.prototype._sortComparator): 54 1 55 2017-06-29 Devin Rousso <drousso@apple.com> 2 56 -
trunk/Source/WebInspectorUI/UserInterface/Base/Utilities.js
r218908 r219014 672 672 }); 673 673 674 Object.defineProperty(String.prototype, "extendedLocaleCompare", 675 { 676 value(other) 677 { 678 return this.localeCompare(other, undefined, {numeric: true}); 679 } 680 }); 681 674 682 Object.defineProperty(String, "tokenizeFormatString", 675 683 { -
trunk/Source/WebInspectorUI/UserInterface/Controllers/JavaScriptRuntimeCompletionProvider.js
r208304 r219014 283 283 284 284 // Not numbers, sort as strings. 285 return a. localeCompare(b);285 return a.extendedLocaleCompare(b); 286 286 } 287 287 -
trunk/Source/WebInspectorUI/UserInterface/Controllers/ResourceQueryController.js
r204418 r219014 83 83 return results.sort((a, b) => { 84 84 if (a.rank === b.rank) 85 return a.resource.displayName. localeCompare(b.resource.displayName);85 return a.resource.displayName.extendedLocaleCompare(b.resource.displayName); 86 86 return b.rank - a.rank; 87 87 }); -
trunk/Source/WebInspectorUI/UserInterface/Views/ApplicationCacheFrameContentView.js
r208091 r219014 183 183 function localeCompare(columnIdentifier, nodeA, nodeB) 184 184 { 185 return (nodeA.data[columnIdentifier] + ""). localeCompare(nodeB.data[columnIdentifier] + "");185 return (nodeA.data[columnIdentifier] + "").extendedLocaleCompare(nodeB.data[columnIdentifier] + ""); 186 186 } 187 187 -
trunk/Source/WebInspectorUI/UserInterface/Views/CSSStyleDeclarationTextEditor.js
r217072 r219014 1304 1304 properties = properties.filter(filterFunction); 1305 1305 if (this._sortProperties) 1306 properties.sort((a, b) => a.name. localeCompare(b.name));1306 properties.sort((a, b) => a.name.extendedLocaleCompare(b.name)); 1307 1307 1308 1308 this._shownProperties = properties; -
trunk/Source/WebInspectorUI/UserInterface/Views/CookieStorageContentView.js
r208012 r219014 178 178 function localeCompare(field, nodeA, nodeB) 179 179 { 180 return (nodeA.data[field] + ""). localeCompare(nodeB.data[field] + "");180 return (nodeA.data[field] + "").extendedLocaleCompare(nodeB.data[field] + ""); 181 181 } 182 182 -
trunk/Source/WebInspectorUI/UserInterface/Views/DOMNodeDetailsSidebarPanel.js
r218975 r219014 188 188 189 189 let attributes = domNode.attributes(); 190 attributes.sort((a, b) => a.name. localeCompare(b.name));190 attributes.sort((a, b) => a.name.extendedLocaleCompare(b.name)); 191 191 for (let attribute of attributes) { 192 192 let dataGridNode = new WebInspector.EditableDataGridNode(attribute); … … 356 356 continue; 357 357 358 eventListenersForNode.sort((a, b) => a.type.toLowerCase(). localeCompare(b.type.toLowerCase()));358 eventListenersForNode.sort((a, b) => a.type.toLowerCase().extendedLocaleCompare(b.type.toLowerCase())); 359 359 360 360 rows.push(createEventListenerSection(currentNode.displayName, eventListenersForNode, {hideNode: true})); -
trunk/Source/WebInspectorUI/UserInterface/Views/DOMStorageContentView.js
r205425 r219014 154 154 function comparator(a, b) 155 155 { 156 return a.data[sortColumnIdentifier]. localeCompare(b.data[sortColumnIdentifier]);156 return a.data[sortColumnIdentifier].extendedLocaleCompare(b.data[sortColumnIdentifier]); 157 157 } 158 158 -
trunk/Source/WebInspectorUI/UserInterface/Views/DebuggerSidebarPanel.js
r218356 r219014 898 898 return 1; 899 899 900 return a.mainTitle. localeCompare(b.mainTitle);900 return a.mainTitle.extendedLocaleCompare(b.mainTitle); 901 901 } 902 902 -
trunk/Source/WebInspectorUI/UserInterface/Views/FolderizedTreeElement.js
r218544 r219014 238 238 239 239 // Then sort by title. 240 return a.mainTitle. localeCompare(b.mainTitle, undefined, {numeric: true});240 return a.mainTitle.extendedLocaleCompare(b.mainTitle); 241 241 } 242 242 -
trunk/Source/WebInspectorUI/UserInterface/Views/HeapSnapshotDataGridTree.js
r217843 r219014 59 59 if (!a.propertyName && b.propertyName) 60 60 return multiplier * 1; 61 let propertyNameCompare = a.propertyName. localeCompare(b.propertyName);61 let propertyNameCompare = a.propertyName.extendedLocaleCompare(b.propertyName); 62 62 console.assert(propertyNameCompare !== 0, "Property names should be unique, we shouldn't have equal property names."); 63 63 return multiplier * propertyNameCompare; … … 65 65 66 66 // Sort by class name and object id if no property name. 67 let classNameCompare = a.data.className. localeCompare(b.data.className);67 let classNameCompare = a.data.className.extendedLocaleCompare(b.data.className); 68 68 if (classNameCompare) 69 69 return multiplier * classNameCompare; -
trunk/Source/WebInspectorUI/UserInterface/Views/NetworkTimelineView.js
r215793 r219014 199 199 200 200 if (displayName1 !== displayName2) 201 return displayName1. localeCompare(displayName2) * sortDirection;202 203 return node1.resource.url. localeCompare(node2.resource.url) * sortDirection;201 return displayName1.extendedLocaleCompare(displayName2) * sortDirection; 202 203 return node1.resource.url.extendedLocaleCompare(node2.resource.url) * sortDirection; 204 204 } 205 205 -
trunk/Source/WebInspectorUI/UserInterface/Views/NewTabContentView.js
r208091 r219014 133 133 let allTabClasses = Array.from(WebInspector.knownTabClasses()); 134 134 let allowedTabClasses = allTabClasses.filter((tabClass) => tabClass.isTabAllowed() && !tabClass.isEphemeral()); 135 allowedTabClasses.sort((a, b) => a.tabInfo().title. localeCompare(b.tabInfo().title));135 allowedTabClasses.sort((a, b) => a.tabInfo().title.extendedLocaleCompare(b.tabInfo().title)); 136 136 137 137 if (Array.shallowEqual(this._shownTabClasses, allowedTabClasses)) -
trunk/Source/WebInspectorUI/UserInterface/Views/OverviewTimelineView.js
r205578 r219014 179 179 180 180 // Fallback to comparing titles. 181 return a.displayName(). localeCompare(b.displayName());181 return a.displayName().extendedLocaleCompare(b.displayName()); 182 182 } 183 183 -
trunk/Source/WebInspectorUI/UserInterface/Views/ProbeDetailsSidebarPanel.js
r218975 r219014 69 69 var aLocation = aProbeSet.breakpoint.sourceCodeLocation; 70 70 var bLocation = bProbeSet.breakpoint.sourceCodeLocation; 71 var comparisonResult = aLocation.sourceCode.displayName. localeCompare(bLocation.sourceCode.displayName);71 var comparisonResult = aLocation.sourceCode.displayName.extendedLocaleCompare(bLocation.sourceCode.displayName); 72 72 if (comparisonResult !== 0) 73 73 return comparisonResult; -
trunk/Source/WebInspectorUI/UserInterface/Views/QuickConsole.js
r218839 r219014 211 211 return 1; 212 212 if (aNonMainTarget && bNonMainTarget) 213 return a.displayName. localeCompare(b.displayName);213 return a.displayName.extendedLocaleCompare(b.displayName); 214 214 215 215 // "Main Frame" follows. … … 229 229 return 1; 230 230 231 return a.displayName. localeCompare(b.displayName);231 return a.displayName.extendedLocaleCompare(b.displayName); 232 232 } 233 233 -
trunk/Source/WebInspectorUI/UserInterface/Views/ResourceDetailsSidebarPanel.js
r218975 r219014 481 481 var item1 = a.data[sortColumnIdentifier]; 482 482 var item2 = b.data[sortColumnIdentifier]; 483 return item1. localeCompare(item2);483 return item1.extendedLocaleCompare(item2); 484 484 } 485 485 -
trunk/Source/WebInspectorUI/UserInterface/Views/ResourceSidebarPanel.js
r218544 r219014 478 478 console.assert(b.mainTitle); 479 479 480 return (a.mainTitle || ""). localeCompare(b.mainTitle || "");480 return (a.mainTitle || "").extendedLocaleCompare(b.mainTitle || ""); 481 481 } 482 482 -
trunk/Source/WebInspectorUI/UserInterface/Views/ResourceTreeElement.js
r217912 r219014 40 40 { 41 41 // Compare by type first to keep resources grouped by type when not sorted into folders. 42 var comparisonResult = a.resource.type. localeCompare(b.resource.type);42 var comparisonResult = a.resource.type.extendedLocaleCompare(b.resource.type); 43 43 if (comparisonResult !== 0) 44 44 return comparisonResult; … … 54 54 // is on the same domain as the frame it will have an empty subtitle. This is good 55 55 // because empty string sorts first, so those will appear before external resources. 56 comparisonResult = a.subtitle. localeCompare(b.subtitle);56 comparisonResult = a.subtitle.extendedLocaleCompare(b.subtitle); 57 57 if (comparisonResult !== 0) 58 58 return comparisonResult; 59 59 60 60 // Compare by title when the subtitles are the same. 61 return a.mainTitle. localeCompare(b.mainTitle);61 return a.mainTitle.extendedLocaleCompare(b.mainTitle); 62 62 } 63 63 … … 72 72 return 1; 73 73 if (aIsFolder && bIsFolder) 74 return a.mainTitle. localeCompare(b.mainTitle);74 return a.mainTitle.extendedLocaleCompare(b.mainTitle); 75 75 76 76 return WebInspector.ResourceTreeElement.compareResourceTreeElements(a, b); -
trunk/Source/WebInspectorUI/UserInterface/Views/ScriptDetailsTimelineView.js
r205425 r219014 157 157 let displayName2 = node2.displayName(); 158 158 if (displayName1 !== displayName2) 159 return displayName1. localeCompare(displayName2) * sortDirection;160 161 return node1.subtitle. localeCompare(node2.subtitle) * sortDirection;159 return displayName1.extendedLocaleCompare(displayName2) * sortDirection; 160 161 return node1.subtitle.extendedLocaleCompare(node2.subtitle) * sortDirection; 162 162 } 163 163 -
trunk/Source/WebInspectorUI/UserInterface/Views/StorageSidebarPanel.js
r216147 r219014 51 51 ]; 52 52 53 storageTypes.sort(function(a, b) { return a.title. localeCompare(b.title); });53 storageTypes.sort(function(a, b) { return a.title.extendedLocaleCompare(b.title); }); 54 54 55 55 for (var info of storageTypes) { … … 306 306 console.assert(b.mainTitle); 307 307 308 return (a.mainTitle || ""). localeCompare(b.mainTitle || "");308 return (a.mainTitle || "").extendedLocaleCompare(b.mainTitle || ""); 309 309 } 310 310 -
trunk/Source/WebInspectorUI/UserInterface/Views/TimelineDataGrid.js
r217690 r219014 381 381 382 382 if (typeof value1 === "string" && typeof value2 === "string") 383 return value1. localeCompare(value2) * sortDirection;383 return value1.extendedLocaleCompare(value2) * sortDirection; 384 384 385 385 if (value1 instanceof WebInspector.CallFrame || value2 instanceof WebInspector.CallFrame) {
Note: See TracChangeset
for help on using the changeset viewer.