GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — Fix numeric color sorting in parcats bundles by CAOShurong · Pull Request #7959 · plotly/plotly.js

Conversation

@CAOShurong

@CAOShurong CAOShurong commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Closes #7952.

When bundlecolors is enabled, the parcats path sorter prepends each path's raw color to an array of category indices, then compares those arrays with JavaScript's < and > operators. That coerces the arrays to comma-separated strings, so numeric colors such as 1, 10, 2, 20 are ordered lexicographically.

This change compares the sort arrays element by element. Numeric colors now retain numeric order, while display-category indices and the existing value-index tie-breaker keep their current roles. A browser regression test renders a bundled parcats trace and checks the resulting path view-model order.

Verification:

  • npm run lint — passed (2,479 files)
  • npm run cibuild — passed
  • npm run test-jasmine -- parcats --nowatch --report-spec — the new regression passed; the run had 27 successes and the same four pre-existing Chrome 151/Windows drag-callback failures reproduced before the implementation
  • npm run test-bundle — 10 bundle suites passed; the unrelated MathJax v2 config suite timed out on Chrome 151/Windows

The repository does not define a type-check script. The Windows test-syntax and full build commands also hit an existing glob portability problem (0 source files found), so I am relying on the successful CI build above and the repository's hosted CI for those Linux gates.

AI assistance disclosure: This contribution was developed and tested with OpenAI Codex. The implementation, regression coverage, and observed command results are disclosed above.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
CAOShurong added 2 commits August 13, 2026 02:24
@CAOShurong
Fix numeric color sorting in parcats bundles
51dddcf
@CAOShurong
Add draftlog for plotly#7959
620bf41
@robertclaus
robertclaus requested a review from camdecoster August 13, 2026 19:46
@robertclaus robertclaus assigned camdecoster Aug 13, 2026
camdecoster
camdecoster reviewed Aug 18, 2026
View reviewed changes

@camdecoster camdecoster left a comment

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks like a good fix to me! I left one comment for you to consider. After that's resolved, I'll approve.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
camdecoster
camdecoster reviewed Aug 18, 2026
View reviewed changes
Comment thread src/traces/parcats/parcats.js
}

return a.length - b.length;
}

@camdecoster camdecoster Aug 18, 2026

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What do you think of adding a JSDoc comment and a block to handle NaN values? This likely wouldn't happen in practice, but it could.

Suggested change
}
/**
* Compare two sort arrays element by element in ascending order.
* Values that do not order against each other, for example NaN, sort last.
* The shorter array sorts first when one array is a prefix of the other.
*
* @param {Array} a
* @param {Array} b
*/
function compareArrays(a, b) {
for (let i = 0; i < Math.min(a.length, b.length); i++) {
const valA = a[i];
const valB = b[i];
if (valA < valB) return -1;
if (valA > valB) return 1;
// Handle values that do not order against each other (NaN, undefined, etc.)
if (valA !== valB) {
// Sort these after every orderable value.
const badA = isNaN(valA);
const badB = isNaN(valB);
if (badA !== badB) return badA ? 1 : -1;
}
}
return a.length - b.length;
}

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@CAOShurong
Handle NaN values and add JSDoc to compareArrays
aec4e47
Per review suggestion from camdecoster:
- Add JSDoc comment documenting ascending-order comparison,
  NaN-sorting behavior, and prefix handling.
- Handle values that do not order against each other (NaN,
  undefined) by sorting them after every orderable value.
- Add test verifying NaN color values sort after orderable
  values in bundled parallel-categories paths.

The 4 pre-existing drag/reorder test failures are unchanged
by this commit (27->28 passing, same 4 baseline failures).
@CAOShurong

CAOShurong commented Aug 19, 2026

Copy link
Copy Markdown
Contributor Author

Thanks @camdecoster for the suggestion! I've implemented it in commit \�ec4e475:

  • Added the JSDoc comment documenting the ascending-order comparison, NaN-sorting behavior, and prefix handling.
  • Added the NaN handling block: values that do not order against each other (NaN, undefined, etc.) now sort after every orderable value, using the \isNaN\ check as you suggested.
  • Added a Jasmine test (\should sort NaN color values after orderable values) verifying that [10, NaN, 2, NaN]\ sorts to [2, 10, NaN, NaN].

The new test and the existing numeric-color test both pass. The 4 pre-existing drag/reorder test failures are unchanged by this commit (they fail identically on the prior head).

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

camdecoster added 2 commits August 19, 2026 15:14
@camdecoster
Update test to fix empty assertion
1b12774
@camdecoster
Update draftlog
d98a8c8
camdecoster
camdecoster previously approved these changes Aug 19, 2026
View reviewed changes

@camdecoster camdecoster left a comment

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good!

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@camdecoster
Remove debug fit statement
49b904a
@camdecoster
camdecoster dismissed their stale review via 49b904a August 19, 2026 21:19
camdecoster
camdecoster approved these changes Aug 19, 2026
View reviewed changes
@camdecoster
camdecoster merged commit 95bfea1 into plotly:master Aug 19, 2026
83 of 85 checks passed

Uh oh!

There was an error while loading. Please reload this page.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

@camdecoster camdecoster camdecoster approved these changes

Uh oh!

There was an error while loading. Please reload this page.

Assignees

@camdecoster camdecoster

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

[BUG]: bundlecolors in parallel_categories plot (Parcats) sort numerical values out of order

Uh oh!

There was an error while loading. Please reload this page.

2 participants

@CAOShurong @camdecoster
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.