diff --git a/private/html/assets/app.js b/private/html/assets/app.js
index 716614c..534727d 100644
--- a/private/html/assets/app.js
+++ b/private/html/assets/app.js
@@ -32,26 +32,35 @@ window.onload = function() {
}
};
- var createTableSorter = function(className, compare) {
- return function() {
- sortTable(className, compare);
- };
+ var oppositeArrowDirection = function(dir) {
+ if (dir === 'up') {
+ return 'down';
+ } else {
+ return 'up';
+ }
};
- var createSorter = function(className, sortAscending, sortDescending) {
- var ascending = document.querySelector('th.' + className + ' .sorter div.sort-icon-up');
- var descending = document.querySelector('th.' + className + ' .sorter div.sort-icon-down');
- ascending.addEventListener('click', createTableSorter(className, sortAscending));
- descending.addEventListener('click', createTableSorter(className, sortDescending));
+ var createSorter = function(className, arrowDirection, compare, negativeCompare) {
+ var sortClass = 'th.' + className + ' div.sort-icon-' + arrowDirection;
+ var element = document.querySelector(sortClass);
+ var clickHandler = function() {
+ var oppArrowDirection = oppositeArrowDirection(arrowDirection);
+ sortTable(className, compare);
+ element.removeEventListener('click', clickHandler);
+ element.className = 'sort-icon-' + oppArrowDirection;
+ createSorter(className, oppArrowDirection, negativeCompare, compare);
+ };
+ element.addEventListener('click', clickHandler);
};
var stringCompareAsc = function(a, b) { return a.localeCompare(b); };
var stringCompareDesc = function(a, b) { return b.localeCompare(a); };
var floatCompareAsc = function(a, b) { return parseFloat(a) - parseFloat(b); };
var floatCompareDesc = function(a, b) { return parseFloat(b) - parseFloat(a); };
- createSorter('file-name', stringCompareAsc, stringCompareDesc);
- createSorter('coverage-percentage', floatCompareAsc, floatCompareDesc);
- createSorter('covered-expressions', floatCompareAsc, floatCompareDesc);
- createSorter('total-expressions', floatCompareAsc, floatCompareDesc);
+
+ createSorter('file-name', 'up', stringCompareDesc, stringCompareAsc);
+ createSorter('coverage-percentage', 'up', floatCompareAsc, floatCompareDesc);
+ createSorter('covered-expressions', 'up', floatCompareAsc, floatCompareDesc);
+ createSorter('total-expressions', 'up', floatCompareAsc, floatCompareDesc);
sortTable('file-name', stringCompareAsc);
};
diff --git a/private/html/assets/main.css b/private/html/assets/main.css
index fd850f0..d3fec85 100644
--- a/private/html/assets/main.css
+++ b/private/html/assets/main.css
@@ -63,30 +63,28 @@ div.file-lines {
/* Sorting Triangles */
-div.sorter {
- display: inline-block;
- margin-left: 0.5em;
- margin-bottom: 0.1em;
-}
-
.sort-icon-up {
cursor: pointer;
- margin-bottom: 0.1em;
+ display: inline-block;
+ margin-left: 0.5em;
+ margin-bottom: 0.2em;
width: 0px;
height: 0px;
- border-left: 0.25em solid transparent;
- border-right: 0.25em solid transparent;
- border-bottom: 0.25em solid black;
+ border-left: 0.3em solid transparent;
+ border-right: 0.3em solid transparent;
+ border-bottom: 0.3em solid black;
}
.sort-icon-down {
cursor: pointer;
- margin-top: 0.1em;
+ display: inline-block;
+ margin-left: 0.5em;
+ margin-bottom: 0.2em;
width: 0px;
height: 0px;
- border-left: 0.25em solid transparent;
- border-right: 0.25em solid transparent;
- border-top: 0.25em solid black;
+ border-left: 0.3em solid transparent;
+ border-right: 0.3em solid transparent;
+ border-top: 0.3em solid black;
}
diff --git a/private/html/html.rkt b/private/html/html.rkt
index c682bee..326dd33 100644
--- a/private/html/html.rkt
+++ b/private/html/html.rkt
@@ -266,9 +266,7 @@
(tr:file-report path expr-info)))))
(define (file-sorter class-name)
- `(div ([class "sorter"])
- (div ([class "sort-icon-up"]))
- (div ([class "sort-icon-down"]))))
+ `(div ([class "sort-icon-up"])))
;; PathString ExpressionInfo -> Xexpr
;; create a div that holds a link to the file report and expression