Skip to content

Commit

Permalink
Merge pull request #1890 from harvard-library/arcpsc_668_improvements…
Browse files Browse the repository at this point in the history
…_to_indicator_column_sort_for_core

Improvements to top container indicator column sort
  • Loading branch information
mark-cooper committed May 19, 2020
2 parents 7fccf10 + fc82ecd commit b050a96
Showing 1 changed file with 48 additions and 7 deletions.
55 changes: 48 additions & 7 deletions frontend/app/assets/javascripts/top_containers.bulk.js
Expand Up @@ -103,8 +103,50 @@ BulkContainerSearch.prototype.update_button_state = function() {
};

BulkContainerSearch.prototype.setup_table_sorter = function() {
function padValue(value) {
return (new Array(255).join("#") + value).slice(-255)
function padNumber(number) {
// Get rid of preceding zeros from numbers (so 003 will sort with 3 instead of in the hundreds)
// Then pad it (so 10 doesn't sort between 1 and 2)
number = parseInt(number).toString()
return (new Array(255).join("#") + number).slice(-255)
}

function parseIndicator(value) {
// Creates a string of alternating number/non-number values separated by commas for indicator sort
if (!value || value.length === 0) {
return value
}

let isNumber = !isNaN(parseInt(value[0]))

let valueArray = [value[0]]
let valueArrayCurrentIndex = 0;
for (i = 1; i < value.length; i++) {
if (!isNumber) {
if (isNaN(parseInt(value[i]))) {
valueArray[valueArrayCurrentIndex] += value[i]
} else {
valueArray[valueArrayCurrentIndex] = valueArray[valueArrayCurrentIndex].trim()
valueArrayCurrentIndex += 1
valueArray[valueArrayCurrentIndex] = value[i]
isNumber = true
}
} else {
if (isNaN(parseInt(value[i]))) {
valueArray[valueArrayCurrentIndex] = padNumber(valueArray[valueArrayCurrentIndex])
valueArrayCurrentIndex += 1
valueArray[valueArrayCurrentIndex] = value[i]
isNumber = false
} else {
valueArray[valueArrayCurrentIndex] += value[i]
}
}
}

if (!isNaN(parseInt(valueArray[valueArray.length - 1]))) {
valueArray[valueArray.length - 1] = padNumber(valueArray[valueArray.length - 1])
}

return valueArray.toString()
};

var tablesorter_opts = {
Expand Down Expand Up @@ -133,11 +175,10 @@ BulkContainerSearch.prototype.setup_table_sorter = function() {
}
} else if ($node.hasClass("top-container-indicator")) {
var value = $node.text().trim();
// check for non-decimal and take the first
var first_number = value.split(/[^0-9]/)[0];

// pad the indicator values so they sort correctly with digit and alpha values
return padValue(first_number) + padValue(value);

// turn the indicator into a string of alternating non-number/padded-number values separated by commas for sorting
// eg "box,#############11,folder,#############4"
return parseIndicator(value);
}

return $node.text().trim();
Expand Down

0 comments on commit b050a96

Please sign in to comment.