aboutsummaryrefslogtreecommitdiff
path: root/gn2/wqflask/static/new/javascript/search_results.js
diff options
context:
space:
mode:
Diffstat (limited to 'gn2/wqflask/static/new/javascript/search_results.js')
-rw-r--r--gn2/wqflask/static/new/javascript/search_results.js386
1 files changed, 386 insertions, 0 deletions
diff --git a/gn2/wqflask/static/new/javascript/search_results.js b/gn2/wqflask/static/new/javascript/search_results.js
new file mode 100644
index 00000000..c263ef49
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/search_results.js
@@ -0,0 +1,386 @@
+change_buttons = function(check_node = 0) {
+ var button, buttons, item, num_checked, text, _i, _j, _k, _l, _len, _len2, _len3, _len4, _results, _results2;
+ buttons = ["#add", "#remove"];
+
+ num_checked = 0
+ table_api = $('#trait_table').DataTable();
+ check_cells = table_api.column(0).nodes().to$();
+ for (let i = 0; i < check_cells.length; i++) {
+ if (check_cells[i].childNodes[check_node].checked){
+ num_checked += 1
+ }
+ }
+
+ if (num_checked === 0) {
+ for (_i = 0, _len = buttons.length; _i < _len; _i++) {
+ button = buttons[_i];
+ $(button).prop("disabled", true);
+ }
+ } else {
+ for (_j = 0, _len2 = buttons.length; _j < _len2; _j++) {
+ button = buttons[_j];
+ $(button).prop("disabled", false);
+ }
+ }
+};
+
+$(function() {
+ let selectAll, deselectAll, invert;
+
+ selectAll = function() {
+ table_api = $('#trait_table').DataTable();
+
+ check_cells = table_api.column(0).nodes().to$();
+ for (let i = 0; i < check_cells.length; i++) {
+ check_cells[i].childNodes[0].checked = true;
+ }
+
+ check_rows = table_api.rows().nodes();
+ for (let i =0; i < check_rows.length; i++) {
+ check_rows[i].classList.add("selected");
+ }
+
+ change_buttons();
+ };
+
+ deselectAll = function() {
+ table_api = $('#trait_table').DataTable();
+
+ check_cells = table_api.column(0).nodes().to$();
+ for (let i = 0; i < check_cells.length; i++) {
+ check_cells[i].childNodes[0].checked = false;
+ }
+
+ check_rows = table_api.rows().nodes();
+ for (let i =0; i < check_rows.length; i++) {
+ check_rows[i].classList.remove("selected")
+ }
+
+ change_buttons();
+ };
+
+ invert = function() {
+ table_api = $('#trait_table').DataTable();
+
+ check_cells = table_api.column(0).nodes().to$();
+ for (let i = 0; i < check_cells.length; i++) {
+ if (check_cells[i].childNodes[0].checked){
+ check_cells[i].childNodes[0].checked = false;
+ } else {
+ check_cells[i].childNodes[0].checked = true;
+ }
+ }
+
+ check_rows = table_api.rows().nodes();
+ for (let i =0; i < check_rows.length; i++) {
+ if (check_rows[i].classList.contains("selected")){
+ check_rows[i].classList.remove("selected")
+ } else {
+ check_rows[i].classList.add("selected")
+ }
+ }
+
+ change_buttons();
+ };
+
+ $('#searchbox').keyup(function(){
+ if ($(this).val() != ""){
+ $('#filter_term').val($(this).val());
+ } else {
+ $('#filter_term').val("None");
+ }
+ $('#trait_table').DataTable().search($(this).val()).draw();
+ });
+
+ /**
+ * parseIndexString takes a string consisting of integers,
+ * hyphens, and/or commas to indicate range(s) of indices
+ * to select a rows and returns the corresponding set of indices
+ * For example - "1, 5-10, 15" would return a set of 8 rows
+ * @return {Set} The list of indices as a Set
+ */
+ parseIndexString = function(idx_string) {
+ index_list = [];
+
+ _ref = idx_string.split(",");
+ for (_i = 0; _i < _ref.length; _i++) {
+ index_set = _ref[_i];
+ if (!/^ *([0-9]+$) *| *([0-9]+ *- *[0-9]+$) *|(^$)$/.test(index_set)) {
+ $('#select_samples_invalid').show();
+ break
+ } else {
+ $('#select_samples_invalid').hide();
+ }
+ if (index_set.indexOf('-') !== -1) {
+ start_index = parseInt(index_set.split("-")[0]);
+ end_index = parseInt(index_set.split("-")[1]);
+
+ // If start index is higher than end index (for example is the string "10-5" exists) swap values so it'll be interpreted as "5-10" instead
+ if (start_index > end_index) {
+ [start_index, end_index] = [end_index, start_index]
+ }
+
+ for (index = start_index; index <= end_index; index++) {
+ index_list.push(index);
+ }
+ } else {
+ index = parseInt(index_set);
+ index_list.push(index);
+ }
+ }
+ return new Set(index_list)
+ }
+
+ filterByIndex = function() {
+ indexString = $('#select_top').val()
+ indexSet = parseIndexString(indexString)
+
+ tableApi = $('#trait_table').DataTable();
+ checkNodes = tableApi.column(0).nodes().to$();
+ checkNodes.each(function(index) {
+ if (indexSet.has(index + 1)){
+ $(this)[0].childNodes[0].checked = true
+ }
+ })
+
+ checkRows = tableApi.rows().nodes().to$();
+ checkRows.each(function(index) {
+ if (indexSet.has(index + 1)){
+ $(this)[0].classList.add("selected");
+ }
+ })
+ }
+
+ $(window).keydown(function(event){
+ if((event.keyCode == 13)) {
+ event.preventDefault();
+ return false;
+ }
+ });
+
+ $('#select_top').keyup(function(event){
+ if (event.keyCode === 13) {
+ filterByIndex()
+ }
+ });
+
+ $('#select_top').blur(function() {
+ filterByIndex()
+ });
+
+ addToCollection = function() {
+ var traits;
+ table_api = $('#trait_table').DataTable();
+ check_nodes = table_api.column(0).nodes().to$();
+ traits = Array.from(check_nodes.map(function() {
+ if ($(this)[0].childNodes[0].checked){
+ return $(this)[0].childNodes[0].value
+ }
+ }))
+
+ var traits_hash = md5(traits.toString());
+
+ $.ajax({
+ type: "POST",
+ url: "/collections/store_trait_list",
+ data: {
+ hash: traits_hash,
+ traits: traits.toString()
+ }
+ });
+
+ return $.colorbox({
+ href: "/collections/add",
+ data: {
+ "traits": traits.toString(),
+ "hash": traits_hash
+ }
+ });
+
+ };
+
+ submitBnw = function() {
+ trait_data = submitTraits("trait_table", "submit_bnw")
+ }
+
+ exportTraits = function() {
+ trait_data = submitTraits("trait_table", "export_traits_csv")
+ };
+
+ exportCollection = function() {
+ trait_data = submitTraits("trait_table", "export_collection")
+ }
+
+ fetchTraits = function(table_name){
+ trait_table = $('#'+table_name);
+ table_dict = {};
+
+ headers = [];
+ trait_table.find('th').each(function () {
+ if ($(this).data('export')){
+ headers.push($(this).data('export'))
+ }
+ });
+ table_dict['headers'] = headers;
+
+ selected_rows = [];
+ all_rows = []; // If no rows are checked, export all
+ table_api = $('#' + table_name).DataTable();
+ check_cells = table_api.column(0).nodes().to$();
+ for (let i = 0; i < check_cells.length; i++) {
+ this_node = check_cells[i].childNodes[0];
+ all_rows.push(this_node.value)
+ if (this_node.checked){
+ selected_rows.push(this_node.value)
+ }
+ }
+
+ if (selected_rows.length > 0){
+ table_dict['rows'] = selected_rows;
+ } else {
+ table_dict['rows'] = all_rows;
+ }
+
+ json_table_dict = JSON.stringify(table_dict);
+ $('input[name=export_data]').val(json_table_dict);
+ }
+
+ submitTraits = function(table_name, destination) {
+ fetchTraits(table_name);
+ $('#export_form').attr('action', '/' + destination);
+ $('#export_form').submit();
+ };
+
+ getTraitsFromTable = function(){
+ traits = $("#trait_table input:checked").map(function() {
+ return $(this).val();
+ }).get();
+ if (traits.length == 0){
+ num_traits = $("#trait_table input").length
+ if (num_traits <= 100){
+ traits = $("#trait_table input").map(function() {
+ return $(this).val();
+ }).get();
+ }
+ }
+ return traits
+ }
+
+ $("#corr_matrix").on("click", function() {
+ traits = getTraitsFromTable()
+ $("#trait_list").val(traits)
+ $("input[name=tool_used]").val("Correlation Matrix")
+ $("input[name=form_url]").val($(this).data("url"))
+ return submit_special("/loading")
+ });
+ $("#network_graph").on("click", function() {
+ traits = getTraitsFromTable()
+ $("#trait_list").val(traits)
+ $("input[name=tool_used]").val("Network Graph")
+ $("input[name=form_url]").val($(this).data("url"))
+ return submit_special("/loading")
+ });
+ $("#wgcna_setup").on("click", function() {
+ traits = getTraitsFromTable()
+ $("#trait_list").val(traits)
+ $("input[name=tool_used]").val("WGCNA Setup")
+ $("input[name=form_url]").val($(this).data("url"))
+ return submit_special("/loading")
+ });
+ $("#ctl_setup").on("click", function() {
+ traits = getTraitsFromTable()
+ $("#trait_list").val(traits)
+ $("input[name=tool_used]").val("CTL Setup")
+ $("input[name=form_url]").val($(this).data("url"))
+ return submit_special("/loading")
+ });
+ $("#heatmap").on("click", function() {
+ traits = getTraitsFromTable()
+ $("#trait_list").val(traits)
+ $("input[name=tool_used]").val("Heatmap")
+ $("input[name=form_url]").val($(this).data("url"))
+ return submit_special("/loading")
+ });
+ $("#comp_bar_chart").on("click", function() {
+ traits = getTraitsFromTable()
+ $("#trait_list").val(traits)
+ $("input[name=tool_used]").val("Comparison Bar Chart")
+ $("input[name=form_url]").val($(this).data("url"))
+ return submit_special("/loading")
+ });
+
+ $("#send_to_webgestalt, #send_to_bnw, #send_to_geneweaver").on("click", function() {
+ traits = getTraitsFromTable()
+ $("#trait_list").val(traits)
+ url = $(this).data("url")
+ return submit_special(url)
+ });
+
+
+ $("#select_all").click(selectAll);
+ $("#deselect_all").click(deselectAll);
+ $("#invert").click(invert);
+ $("#add").click(addToCollection);
+ $("#submit_bnw").click(submitBnw);
+ $("#export_traits").click(exportTraits);
+ $("#export_collection").click(exportCollection);
+
+ let naturalAsc = $.fn.dataTableExt.oSort["natural-ci-asc"]
+ let naturalDesc = $.fn.dataTableExt.oSort["natural-ci-desc"]
+
+ let na_equivalent_vals = ["N/A", "--", ""]; //ZS: Since there are multiple values that should be treated the same as N/A
+
+ function extractInnerText(the_string){
+ var span = document.createElement('span');
+ span.innerHTML = the_string;
+ return span.textContent || span.innerText;
+ }
+
+ function sortNAs(a, b, sort_function){
+ if ( na_equivalent_vals.includes(a) && na_equivalent_vals.includes(b)) {
+ return 0;
+ }
+ if (na_equivalent_vals.includes(a)){
+ return 1
+ }
+ if (na_equivalent_vals.includes(b)) {
+ return -1;
+ }
+ return sort_function(a, b)
+ }
+
+ $.extend( $.fn.dataTableExt.oSort, {
+ "natural-minus-na-asc": function (a, b) {
+ return sortNAs(extractInnerText(a), extractInnerText(b), naturalAsc)
+ },
+ "natural-minus-na-desc": function (a, b) {
+ return sortNAs(extractInnerText(a), extractInnerText(b), naturalDesc)
+ }
+ });
+
+ $.fn.dataTable.ext.order['dom-checkbox'] = function ( settings, col )
+ {
+ return this.api().column( col, {order:'index'} ).nodes().map( function ( td, i ) {
+ return $('input', td).prop('checked') ? '1' : '0';
+ } );
+ };
+
+ $.fn.dataTable.ext.order['dom-inner-text'] = function ( settings, col )
+ {
+ return this.api().column( col, {order:'index'} ).nodes().map( function ( td, i ) {
+ return $(td).text();
+ } );
+ }
+
+ applyDefault = function() {
+ let default_collection_id = $.cookie('default_collection');
+ if (default_collection_id) {
+ let the_option = $('[name=existing_collection] option').filter(function() {
+ return ($(this).text().split(":")[0] == default_collection_id);
+ })
+ the_option.prop('selected', true);
+ }
+ }
+ applyDefault();
+
+});