Page MenuHomePhabricator

Sorting mixed content in tables: numbers first
Closed, DeclinedPublic


Sorting in tables can be allowed with the sortable-option.
Tablesorter.js [] tries to select a way of sorting if this is not specified by the writer of the code.
Tablesorter does, if (auto)-selected parser = 'number', assign a zero-value to non-numerical input (isNaN).
In a number of lists, this is an exceptable choice, in others it would be better to have the non-numerical input listed below any numerical input.

I would like to have an extra Parser, which gives a MAX_VALUE to all non-numerical input, or (even better, but I didn't figure out how) have the non-numerical values sorted below the numerical values.

A possible solution would be the adding of two functions to []:

formatDigitnf, similar to formatDigit, but with MAX_VALUE for isNaN

formatDigitnf: function ( s ) {
  var out, c, p, i;
  if ( ts.transformTable !== false ) {
    out = '';
    for ( p = 0; p < s.length; p++ ) {
      c = s.charAt( p );
      if ( c in ts.transformTable ) {
        out += ts.transformTable[ c ];
      } else {
        out += c;
    s = out;
  i = parseFloat( s.replace( /[, ]/g, '' ).replace( '\u2212', '-' ) );
  return isNaN( i ) ? MAX_VALUE : i;


extra Parser
ts.addParser( {

  id: 'numberfirst',
  is: function ( s ) {
    return $.tablesorter.numberRegex.test( $.trim( s ) );
  format: function ( s ) {
    return $.tablesorter.formatDigitnf( s );
  type: 'numeric'
} );


Examples of usage:
[], having not qualified/started/finished drives below those who did finish
['s] having not-noted songs below those who did get noted

Event Timeline

RonnieV raised the priority of this task from to Needs Triage.
RonnieV updated the task description. (Show Details)
RonnieV added a subscriber: RonnieV.
TheDJ closed this task as Declined.EditedJan 21 2016, 9:44 AM
TheDJ claimed this task.
TheDJ added a subscriber: TheDJ.

Use the data-sort-value attribute on a cell to specify a 'fake' number instead.

I'd like to ask to reconsider this decline.

On a page like's, replacing 17*2094 times <nowiki>-</nowiki> and <nowiki>*</nowiki> with something like <nowiki>data-sort-value="9999"| -</nowiki> and <nowiki>data-sort-value="9999"|*</nowiki>does get a lot of resistance, as this would (more than) double the size of the page (from 600kb to over 1.4 MB).

Inserting this code isn't a problem, the loadweight of the page definitively is.

More, through lighter, tables could benefit from this small function in the common.js, which allows a more natural sorting.