We also have charts, e.g.,
http://people.csail.mit.edu/dfhuynh/projects/factbook/factbook-people.html
They can be considered summaries.
David
I see. Take a look at the Tabular View implementation
http://code.google.com/p/simile-widgets/source/browse/exhibit/trunk/src/webapp/api/scripts/ui/views/tabular-view.js
The _reconstruct function is what generates the UI. You can add grouping
and summarizing features to it.
David
One of the issues to look out for is that an item can belong in several
groups.
Another issue is how expressive the group summaries can be. Can you only
get SUM(), or also MIN(), MAX(), AVG(), MEDIAN(), STDEV(), STDERR(),
...? How are the summary rows formatted?...
David
David
for (var i = 0; i < items.length; i++) {
renderItem(i);
}
You need to replace this loop to something like this:
var generateSummaryRow = function(firstIndex, lastIndex) {
var tr = table.insertRow(table.rows.length);
for (var c = 0; c < self._columns.length; c++) {
var column = self._columns[c];
var td = tr.insertCell(c);
if (column.format == "number") {
var sum = 0;
for (var i = firstIndex; i <= lastIndex; i++) {
var item = items[i];
var results =
column.expression.evaluateOnItem(item.id, database);
results.values.visit(function(v) {
if (typeof v == "number") {
sum += v;
} else {
try {
var n = parseFloat(v.toString());
if (!isNaN(n)) {
sum += n;
}
} catch (e) {
}
}
});
}
td.innerHTML = sum;
}
}
};
var currentSortKey = undefined;
var firstIndexInGroup = -1;
for (var i = 0; i < items.length; i++) {
var item = items[i];
if (item.sortKey != currentSortKey) {
if (firstIndexInGroup >= 0) {
generateSummaryRow(firstIndexInGroup, i - 1);
}
currentSortKey = item.sortKey;
firstIndexInGroup = i;
}
renderItem(i);
}
if (firstIndexInGroup >= 0) {
generateSummaryRow(firstIndexInGroup, items.length - 1);
}
David