diff options
author | Arun Isaac | 2023-12-29 18:55:37 +0000 |
---|---|---|
committer | Arun Isaac | 2023-12-29 19:01:46 +0000 |
commit | 204a308be0f741726b9a620d88fbc22b22124c81 (patch) | |
tree | b3cf66906674020b530c844c2bb4982c8a0e2d39 /gn2/wqflask/static/new/javascript/search_results.js | |
parent | 83062c75442160427b50420161bfcae2c5c34c84 (diff) | |
download | genenetwork2-204a308be0f741726b9a620d88fbc22b22124c81.tar.gz |
Namespace all modules under gn2.
We move all modules under a gn2 directory. This is important for
"correct" packaging and deployment as a Guix service.
Diffstat (limited to 'gn2/wqflask/static/new/javascript/search_results.js')
-rw-r--r-- | gn2/wqflask/static/new/javascript/search_results.js | 386 |
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(); + +}); |