Skip to content

Commit 6c9d0b5

Browse files
committed
plotly#189 rewriting cateogory sorter: misc. improvements
1 parent 010451b commit 6c9d0b5

File tree

2 files changed

+16
-7
lines changed

2 files changed

+16
-7
lines changed

src/plots/cartesian/layout_attributes.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -449,8 +449,8 @@ module.exports = {
449449
categorymode: {
450450
valType: 'enumerated',
451451
values: [
452-
'trace', 'category ascending', 'category descending',
453-
/*'value ascending', 'value descending',*/ 'array' // value ascending / descending to be implemented later
452+
'trace', 'category ascending', 'category descending', 'array'
453+
/*, 'value ascending', 'value descending'*/ // value ascending / descending to be implemented later
454454
],
455455
dflt: 'trace',
456456
role: 'info',

src/plots/cartesian/ordered_categories.js

+14-5
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@
1111

1212
var d3 = require('d3');
1313

14-
function flattenUniqueSort(axisLetter, sortFunction, data) {
14+
// flattenUnique :: String -> [[String]] -> Object
15+
function flattenUnique(axisLetter, data) {
1516
var traceLines = data.map(function(d) {return d[axisLetter];});
1617
var categoryMap = {}; // hashmap is O(1);
1718
var i, j, tracePoints, category;
@@ -24,8 +25,12 @@ function flattenUniqueSort(axisLetter, sortFunction, data) {
2425
}
2526
}
2627
}
27-
return Object.keys(categoryMap)
28-
.sort(sortFunction);
28+
return categoryMap;
29+
}
30+
31+
// flattenUniqueSort :: String -> Function -> [[String]] -> [String]
32+
function flattenUniqueSort(axisLetter, sortFunction, data) {
33+
return Object.keys(flattenUnique(axisLetter, data)).sort(sortFunction);
2934
}
3035

3136

@@ -37,14 +42,18 @@ function flattenUniqueSort(axisLetter, sortFunction, data) {
3742
* If categorymode is 'category ascending' or 'category descending', the result is an array of ascending or descending
3843
* order of the unique categories encountered in the data for specified axisLetter.
3944
*
45+
* See cartesian/layout_attributes.js for the definition of categorymode and categorylist
46+
*
4047
*/
4148

49+
// orderedCategories :: String -> String -> [String] -> [[String]] -> [String]
4250
module.exports = function orderedCategories(axisLetter, categorymode, categorylist, data) {
4351

4452
switch(categorymode) {
45-
case 'array': return (Array.isArray(categorylist) ? categorylist : []).slice();
53+
case 'array': return Array.isArray(categorylist) ? categorylist : [];
4654
case 'category ascending': return flattenUniqueSort(axisLetter, d3.ascending, data);
4755
case 'category descending': return flattenUniqueSort(axisLetter, d3.descending, data);
48-
default: return [].slice();
56+
case 'trace': return [];
57+
default: return [];
4958
}
5059
};

0 commit comments

Comments
 (0)