blob: b8f0e6182ad3750b1b1fbdbeff82eacd7193e599 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en-US">
<head>
<title>Atmospheric Query and Retrieval Tool</title>
<meta charset="UTF-8" />
<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
<script src="http://code.jquery.com/ui/1.10.1/jquery-ui.js"></script>
<link rel="stylesheet" href="query.css">
<script>
var searchMenuOptions = {};
var results = {};
var resultCount = 0;
var page = 1;
var totalPages = 1;
$(document).ready(function () {
var searchMenu = $(".cssmenu");
var currentPage = $(".page");
var resultTable = $(".resultTable");
var data = $.getJSON("sample.json", function () {
})
.done(function( data ) {
$.each(data, function (pageSection, contents) {
if (pageSection == "SearchCatagories") {
$.each(contents, function (search, searchOptions) {
search = search.replace(/\_/g, " ");
searchMenu.append('<li id="' + search + '" onclick="getDropDown(this.id)"><a href="#">' + search + '</a></li>');
searchMenuOptions[search] = searchOptions;
});
} else if (pageSection == "QueryResults") {
results = {};
resultCount = 0;
var view = [0, 0];
$.each(contents, function (queryResult, field) {
if (queryResult == "Length") {
resultCount = field;
} else if (queryResult == "View") {
view = field;
} else if (queryResult == "Results") {
resultTable.empty();
resultTable.append('<tr><td>Results</td></tr>');
$.each(field, function (entryCount, fullResult) {
$.each(fullResult, function (name, metadata) {
resultTable.append('<tr><td onclick="getDetails(this.id)" id="' + name + '">' + name + '</td></tr>');
results[name] = metadata;
});
});
} else {
console.error("Unknown field " + queryResult);
}
});
// Calculating the current page and the view
var diff = view[1] - view[0] + 1;
if (diff > 0) {
totalPages = Math.ceil(resultCount / diff);
page = Math.ceil(view[0] / diff) + 1;
} else {
totalPages = 1;
page = 1;
}
if (page != 1) {
console.log(view[0]);
currentPage.append('<span id="' + (view[0] - 1) + '" onclick="getPage(this.id)"><a href="#"><</a>');
}
// This section of code creates the paging for the results.
// To prevent it from having a 1000+ pages, it will only show the 5 pages before/after
// the current page and the total pages (expect users not to really jump around a lot).
for (var i = 0; i < totalPages; ++i) {
if (i + 1 == 1 || i + 1 == page || i + 1 == totalPages || (i + 1 < page && i + 4 > page) || (i + 1 > page && i - 4 < page)) { // in our current page range
currentPage.append(' ');
currentPage.append('<span id="' + (i + 1) + '" onclick="getPage(this.id)">');
if (i + 1 != page) {
currentPage.append('<a href="#">' + (i + 1) + '</a>')
} else {
currentPage.append(i + 1);
}
currentPage.append('</span>');
} else { // Need to skip ahead
currentPage.append(' ...');
if (i == page + 5) {
i = totalPages - 2;
} else if (i < page - 7) {
i = page - 6;
}
}
}
if (page != totalPages) {
currentPage.append(' <span id="' + (page + diff) + '" onclick="getPage(this.id)"><a href="#">></a>');
}
}
});
})();
});
var state = "";
function getDropDown(str) {
var searchMenu = $(".cssmenu");
if (str == state) {
state = "";
searchMenu.find("#" + str).find("#options_" + str).empty();
} else {
state = str;
$.each(searchMenuOptions, function (search, fields) {
if (search === str) {
searchMenu.find("#" + search).append('<ul id="options_' + search + '" class="sub-menu">');
for (var i = 0; i < fields.length; ++i) {
searchMenu.find("#options_" + search).append('<li><a href="#">' + fields[i] + '</a></li>');
}
searchMenu.append('</ul>');
} else {
var ul = $("options_" + search);
ul.empty();
searchMenu.find("#" + search).find("#options_" + search).empty();
}
});
}
}
function getPage(str) {
// @todo
}
function getDetails(str) {
// @todo: Identify the correct way to integrate the download backend so that we know who
// we should be pointing at.
var details = "<h2>" + str + "<h2>";
details += '<form action="getDownload()"><input type="submit" value="Download"></form>';
details += "<table>";
$.each(results[str], function (fieldName, field) {
console.log(fieldName);
details += "<tr>"
details += "<td>" + fieldName + "</td>";
if (typeof field === 'object') {
details += "<td><table>";
$.each(field, function (name, fields) {
details += '<tr><td>' + name + '</td><td>' + fields + '<td></tr>';
});
details += "</table></td>";
} else {
details += "<td>" + field + "</td>"
}
details += "</tr>"
});
details += "</table>";
details += '<form action="getDownload()"><input type="submit" value="Download"></form>';
var detailsWindow = window.open("", str, "width=400, height=600, toolbar=no, menubar=no");
detailsWindow.document.write(details);
detailsWindow.onload = function () { // of course you can use other onload-techniques
jQuery(detailsWindow.document.head).append('<script>function getDownload() {alert("Yay";)}</' + "script>"); // or any other dom manipulation
}
//window.open("details.html", "_blank", "toolbar=no, scrollbars=yes, resizable=yes, top=500, left=500, width=400, height=400");*/
}
</script>
</head>
<body id="body">
<header>
<h1>Atmospheric Query and Retrieval Tool</h1>
</header>
<ul class='cssmenu'>
</ul>
<div class="autocomplete">
<form action="submit()">
<input type="text" name="autocomplete" class="textbox" id="autocomplete" placeholder="cmap" width="800px">
<input type="submit" value="Search">
</form>
</div>
<table class="resultTable">
</table>
<div class="page"></div>
</body>
</html>