|
From: <tob...@us...> - 2014-04-19 00:57:16
|
Revision: 8127
http://sourceforge.net/p/bigdata/code/8127
Author: tobycraig
Date: 2014-04-19 00:57:07 +0000 (Sat, 19 Apr 2014)
Log Message:
-----------
Added pagination to query results
Modified Paths:
--------------
branches/RDR/bigdata-war/src/html/js/workbench.js
Modified: branches/RDR/bigdata-war/src/html/js/workbench.js
===================================================================
--- branches/RDR/bigdata-war/src/html/js/workbench.js 2014-04-17 15:01:17 UTC (rev 8126)
+++ branches/RDR/bigdata-war/src/html/js/workbench.js 2014-04-19 00:57:07 UTC (rev 8127)
@@ -2,6 +2,7 @@
// global variables
var DEFAULT_NAMESPACE, NAMESPACE, NAMESPACE_URL, NAMESPACES_READY, NAMESPACE_SHORTCUTS, FILE_CONTENTS, QUERY_RESULTS;
+var PAGE_SIZE=10, TOTAL_PAGES, CURRENT_PAGE;
/* Modal functions */
@@ -454,7 +455,8 @@
error: queryResultsError
}
- $('#query-response').show().html('Query running...');
+ $('#query-response').show().html('Query running...');
+ $('#query-pagination').hide();
$.ajax(NAMESPACE_URL, settings);
@@ -475,7 +477,7 @@
$('#query-response-clear').click(function() {
$('#query-response, #query-explanation').empty('');
- $('#query-response, #query-explanation, #query-tab .bottom *').hide();
+ $('#query-response, #query-pagination, #query-explanation, #query-tab .bottom *').hide();
});
$('#query-export').click(function() { updateExportFileExtension(); showModal('query-export-modal'); });
@@ -606,7 +608,7 @@
function showQueryResults(data) {
$('#query-response').empty();
$('#query-export-rdf').hide();
- $('#query-response, #query-tab .bottom *').show();
+ $('#query-response, #query-pagination, #query-tab .bottom *').show();
var table = $('<table>').appendTo($('#query-response'));
if(this.dataTypes[1] == 'xml') {
// RDF
@@ -634,29 +636,125 @@
}
} else {
// JSON
- // save data for export
+ // save data for export and pagination
QUERY_RESULTS = data;
+
if(typeof(data.boolean) != 'undefined') {
// ASK query
table.append('<tr><td>' + data.boolean + '</td></tr>').addClass('boolean');
return;
}
+
+ // see if we have RDF data
+ var isRDF = false;
+ if(data.head.vars.length == 3 && data.head.vars[0] == 's' && data.head.vars[1] == 'p' && data.head.vars[2] == 'o') {
+ isRDF = true;
+ } else if(data.head.vars.length == 4 && data.head.vars[0] == 's' && data.head.vars[1] == 'p' && data.head.vars[2] == 'o' && data.head.vars[3] == 'c') {
+ // see if c is used or not
+ for(var i=0; i<data.results.bindings.length; i++) {
+ if('c' in data.results.bindings[i]) {
+ isRDF = false;
+ break;
+ }
+ }
+
+ if(isRDF) {
+ // remove (unused) c variable from JSON
+ data.head.vars.pop();
+ }
+ }
+
+ if(isRDF) {
+ $('#rdf-formats').prop('disabled', false);
+ } else {
+ $('#rdf-formats').prop('disabled', true);
+ if($('#rdf-formats option:selected').length == 1) {
+ $('#non-rdf-formats option:first').prop('selected', true);
+ }
+ }
+
+ // put query variables in table header
var thead = $('<thead>').appendTo(table);
- var vars = [];
- var varsUsed = {}
var tr = $('<tr>');
for(var i=0; i<data.head.vars.length; i++) {
- tr.append('<td>' + data.head.vars[i] + '</td>');
- vars.push(data.head.vars[i]);
+ tr.append('<th>' + data.head.vars[i] + '</th>');
}
thead.append(tr);
table.append(thead);
- for(var i=0; i<data.results.bindings.length; i++) {
+
+ setNumberOfPages();
+ showPage(1);
+
+ $('#query-response a').click(function(e) {
+ e.preventDefault();
+ explore(this.textContent);
+ });
+ }
+}
+
+function showQueryExplanation(data) {
+ $('#query-explanation').html(data).show();
+}
+
+function queryResultsError(jqXHR, textStatus, errorThrown) {
+ $('#query-response, #query-tab .bottom *').show();
+ $('#query-response').text('Error! ' + textStatus + ' ' + errorThrown);
+}
+
+/* Pagination */
+
+function setNumberOfPages() {
+ TOTAL_PAGES = Math.ceil(QUERY_RESULTS.results.bindings.length / PAGE_SIZE);
+ $('#result-pages').html(TOTAL_PAGES);
+}
+
+function setPageSize(n) {
+ n = parseInt(n, 10);
+ if(typeof n != 'number' || n % 1 != 0 || n < 1 || n == PAGE_SIZE) {
+ return;
+ }
+
+ PAGE_SIZE = n;
+ setNumberOfPages();
+ // TODO: show page containing current first result
+ showPage(1);
+}
+
+$('#results-per-page').change(function() { setPageSize(this.value); });
+$('#previous-page').click(function() { showPage(CURRENT_PAGE - 1); });
+$('#next-page').click(function() { showPage(CURRENT_PAGE + 1); });
+$('#current-page').keyup(function(e) {
+ if(e.which == 13) {
+ var n = parseInt(this.value, 10);
+ if(typeof n != 'number' || n % 1 != 0 || n < 1 || n > TOTAL_PAGES) {
+ this.value = CURRENT_PAGE;
+ } else {
+ showPage(n);
+ }
+ }
+});
+
+function showPage(n) {
+ if(typeof n != 'number' || n % 1 != 0 || n < 1 || n > TOTAL_PAGES) {
+ return;
+ }
+
+ CURRENT_PAGE = n;
+
+ // clear table results, leaving header
+ $('#query-response tbody tr').remove();
+
+ // work out indices for this page
+ var start = (CURRENT_PAGE - 1) * PAGE_SIZE;
+ var end = Math.min(CURRENT_PAGE * PAGE_SIZE, QUERY_RESULTS.results.bindings.length);
+
+ // add matching bindings
+ var table = $('#query-response table');
+ for(var i=start; i<end; i++) {
var tr = $('<tr>');
- for(var j=0; j<vars.length; j++) {
- if(vars[j] in data.results.bindings[i]) {
- varsUsed[vars[j]] = true;
- var binding = data.results.bindings[i][vars[j]];
+ for(var j=0; j<QUERY_RESULTS.head.vars.length; j++) {
+ if(QUERY_RESULTS.head.vars[j] in QUERY_RESULTS.results.bindings[i]) {
+ var binding = QUERY_RESULTS.results.bindings[i][QUERY_RESULTS.head.vars[j]];
if(binding.type == 'sid') {
var text = getSID(binding);
} else {
@@ -684,39 +782,13 @@
}
}
table.append(tr);
- }
-
- // see if we have RDF data
- if((vars.length == 3 && vars[0] == 's' && vars[1] == 'p' && vars[2] == 'o') ||
- (vars.length == 4 && vars[0] == 's' && vars[1] == 'p' && vars[2] == 'o') && vars[3] == 'c' && !('c' in varsUsed)) {
- if(vars.length == 4) {
- // remove (unused) c variable from JSON
- QUERY_RESULTS.head.vars.pop()
- }
- $('#rdf-formats').prop('disabled', false);
- } else {
- $('#rdf-formats').prop('disabled', true);
- if($('#rdf-formats option:selected').length == 1) {
- $('#non-rdf-formats option:first').prop('selected', true);
- }
- }
-
- $('#query-response a').click(function(e) {
- e.preventDefault();
- explore(this.textContent);
- });
}
-}
-function showQueryExplanation(data) {
- $('#query-explanation').html(data).show();
+ // update current results numbers
+ $('#current-results').html((start + 1) + ' - ' + end);
+ $('#current-page').val(n);
}
-function queryResultsError(jqXHR, textStatus, errorThrown) {
- $('#query-response, #query-tab .bottom *').show();
- $('#query-response').text('Error! ' + textStatus + ' ' + errorThrown);
-}
-
/* Explore */
$('#explore-form').submit(function(e) {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|