aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzsloan2020-11-24 16:14:20 -0600
committerzsloan2020-11-24 16:14:20 -0600
commit77dc4a4e7c68a10f9b7d743e02a0738cab870c68 (patch)
tree59a15ba30b62c8ee3eaca8c5aea3b0f6d5c09435
parentbe315778db1d34f903312b5ac6bcc80dd848a5be (diff)
downloadgenenetwork2-77dc4a4e7c68a10f9b7d743e02a0738cab870c68.tar.gz
- Fixed the "Block by Attribute Value" feature
- Changed the "Block by Attribute Value" feature and the "Filter by Value" feature to only work on columns that are numeric or have a small number of distinct values (respectively)
-rw-r--r--wqflask/wqflask/static/new/javascript/show_trait.js117
-rw-r--r--wqflask/wqflask/templates/show_trait_transform_and_filter.html56
2 files changed, 123 insertions, 50 deletions
diff --git a/wqflask/wqflask/static/new/javascript/show_trait.js b/wqflask/wqflask/static/new/javascript/show_trait.js
index 3df8784e..87c35984 100644
--- a/wqflask/wqflask/static/new/javascript/show_trait.js
+++ b/wqflask/wqflask/static/new/javascript/show_trait.js
@@ -568,14 +568,29 @@ create_value_dropdown = function(value) {
populate_sample_attributes_values_dropdown = function() {
var attribute_info, key, sample_attributes, selected_attribute, value, _i, _len, _ref, _ref1, _results;
$('#attribute_values').empty();
- sample_attributes = {};
- attr_keys = Object.keys(js_data.attributes).sort();
- for (i=0; i < attr_keys.length; i++) {
- attribute_info = js_data.attributes[attr_keys[i]];
- sample_attributes[attribute_info.name] = attribute_info.distinct_values;
- }
- selected_attribute = $('#exclude_menu').val().replace("_", " ");
- _ref1 = sample_attributes[selected_attribute];
+ sample_attributes = [];
+
+ var attributes_as_list = Object.keys(js_data.attributes).map(function(key) {
+ return [key, js_data.attributes[key].name];
+ });
+
+ attributes_as_list.sort(function(first, second) {
+ if (second[1] > first[1]){
+ return -1
+ }
+ if (first[1] > second[1]){
+ return 1
+ }
+ return 0
+ });
+
+ for (i=0; i < attributes_as_list.length; i++) {
+ attribute_info = js_data.attributes[attributes_as_list[i][0]]
+ sample_attributes.push(attribute_info.distinct_values);
+ }
+
+ selected_attribute = $('#exclude_column').val()
+ _ref1 = sample_attributes[selected_attribute - 1];
_results = [];
for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
value = _ref1[_i];
@@ -590,23 +605,35 @@ if (Object.keys(js_data.attributes).length){
populate_sample_attributes_values_dropdown();
}
-$('#exclude_menu').change(populate_sample_attributes_values_dropdown);
+$('#exclude_column').change(populate_sample_attributes_values_dropdown);
block_by_attribute_value = function() {
var attribute_name, cell_class, exclude_by_value;
- attribute_name = $('#exclude_menu').val();
+
+ let exclude_group = $('#exclude_by_attr_group').val();
+ let exclude_column = $('#exclude_column').val();
+
+ if (exclude_group === "other") {
+ var table_api = $('#samples_other').DataTable();
+ } else {
+ var table_api = $('#samples_primary').DataTable();
+ }
+
exclude_by_value = $('#attribute_values').val();
- cell_class = ".column_name-" + attribute_name;
- return $(cell_class).each((function(_this) {
- return function(index, element) {
- var row;
- if ($.trim($(element).text()) === exclude_by_value) {
- row = $(element).parent('tr');
- return $(row).find(".trait-value-input").val("x");
- }
- };
- })(this));
+
+ let val_nodes = table_api.column(3).nodes().to$();
+ let exclude_val_nodes = table_api.column(attribute_start_pos + parseInt(exclude_column)).nodes().to$();
+
+ for (i = 0; i < exclude_val_nodes.length; i++) {
+ let this_col_value = exclude_val_nodes[i].childNodes[0].data;
+ let this_val_node = val_nodes[i].childNodes[0];
+
+ if (this_col_value == exclude_by_value){
+ this_val_node.value = "x";
+ }
+ }
};
-$('#exclude_group').click(block_by_attribute_value);
+$('#exclude_by_attr').click(block_by_attribute_value);
+
block_by_index = function() {
var end_index, error, index, index_list, index_set, index_string, start_index, _i, _j, _k, _len, _len1, _ref;
index_string = $('#remove_samples_field').val();
@@ -647,37 +674,57 @@ block_by_index = function() {
filter_by_value = function() {
let filter_logic = $('#filter_logic').val();
+ let filter_column = $('#filter_column').val();
let filter_value = $('#filter_value').val();
+ let block_group = $('#filter_group').val();
- block_group = $('#filter_group').val();
if (block_group === "other") {
- table_api = $('#samples_other').DataTable();
+ var table_api = $('#samples_other').DataTable();
} else {
- table_api = $('#samples_primary').DataTable();
+ var table_api = $('#samples_primary').DataTable();
}
let val_nodes = table_api.column(3).nodes().to$();
- for (i = 0; i < val_nodes.length; i++) {
- let this_node = val_nodes[i].childNodes[0];
- if(!isNaN(this_node.value) && !isNaN(filter_value)) {
+ if (filter_column == "value"){
+ var filter_val_nodes = table_api.column(3).nodes().to$();
+ }
+ else if (filter_column == "stderr"){
+ var filter_val_nodes = table_api.column(5).nodes().to$();
+ }
+ else if (!isNaN(filter_column)){
+ var filter_val_nodes = table_api.column(attribute_start_pos + parseInt(filter_column)).nodes().to$();
+ }
+ else {
+ return false
+ }
+
+ for (i = 0; i < filter_val_nodes.length; i++) {
+ if (filter_column == "value" || filter_column == "stderr"){
+ var this_col_value = filter_val_nodes[i].childNodes[0].value;
+ } else {
+ var this_col_value = filter_val_nodes[i].childNodes[0].data;
+ }
+ let this_val_node = val_nodes[i].childNodes[0];
+
+ if(!isNaN(this_col_value) && !isNaN(filter_value)) {
if (filter_logic == "greater_than"){
- if (parseFloat(this_node.value) <= parseFloat(filter_value)){
- this_node.value = "x";
+ if (parseFloat(this_col_value) <= parseFloat(filter_value)){
+ this_val_node.value = "x";
}
}
else if (filter_logic == "less_than"){
- if (parseFloat(this_node.value) >= parseFloat(filter_value)){
- this_node.value = "x";
+ if (parseFloat(this_col_value) >= parseFloat(filter_value)){
+ this_val_node.value = "x";
}
}
else if (filter_logic == "greater_or_equal"){
- if (parseFloat(this_node.value) < parseFloat(filter_value)){
- this_node.value = "x";
+ if (parseFloat(this_col_value) < parseFloat(filter_value)){
+ this_val_node.value = "x";
}
}
else if (filter_logic == "less_or_equal"){
- if (parseFloat(this_node.value) > parseFloat(filter_value)){
- this_node.value = "x";
+ if (parseFloat(this_col_value) > parseFloat(filter_value)){
+ this_val_node.value = "x";
}
}
}
diff --git a/wqflask/wqflask/templates/show_trait_transform_and_filter.html b/wqflask/wqflask/templates/show_trait_transform_and_filter.html
index 22c52d8c..d7eac378 100644
--- a/wqflask/wqflask/templates/show_trait_transform_and_filter.html
+++ b/wqflask/wqflask/templates/show_trait_transform_and_filter.html
@@ -20,8 +20,48 @@
<div id="remove_samples_invalid" class="alert alert-error" style="display:none;">
Please check that your input is formatted correctly, e.g. <strong>3, 5-10, 12</strong>
</div>
+ {% if sample_groups[0].attributes %}
+ <div class="input-append block-div-2">
+ <label for="exclude_column">Block samples by group:</label>
+ <select id="exclude_column" size=1>
+ {% for attribute in sample_groups[0].attributes %}
+ {% if sample_groups[0].attributes[attribute].distinct_values|length <= 10 %}
+ <option value="{{ loop.index }}">
+ {{ sample_groups[0].attributes[attribute].name }}
+ </option>
+ {% endif %}
+ {% endfor %}
+ </select>
+ <select id="attribute_values" size=1>
+ </select>
+ <select id="exclude_by_attr_group" size="1">
+ <option value="primary">
+ {{ sample_group_types['samples_primary'] }}
+ </option>
+ <option value="other">
+ {{ sample_group_types['samples_other'] }}
+ </option>
+ </select>
+ <input type="button" id="exclude_by_attr" class="btn btn-danger" value="Block">
+ </div>
+ {% endif %}
<div id="filterMenuSpan" class="input-append block-div-2">
- <label for="filter_samples_field">Filter samples by value </label>
+ <label for="filter_samples_field">Filter samples by {% if not sample_groups[0].attributes %}value{% endif %} </label>
+ {% if sample_groups[0].attributes %}
+ <select id="filter_column">
+ <option value="value">Value</option>
+ {% if js_data.se_exists %}
+ <option value="stderr">SE</option>
+ {% endif %}
+ {% for attribute in sample_groups[0].attributes %}
+
+ <option value="{{ loop.index }}">
+ {{ sample_groups[0].attributes[attribute].name }}
+ </option>
+
+ {% endfor %}
+ </select>
+ {% endif %}
<select id="filter_logic" size="1">
<option value="greater_than">></option>
<option value="less_than"><</option>
@@ -39,20 +79,6 @@
</select>
<input type="button" id="filter_by_value" class="btn btn-danger" value="Filter">
</div>
- {% if sample_groups[0].attributes %}
- <div class="input-append block-div-2">
- <label for="exclude_menu">Block samples by group:</label>
- <select id="exclude_menu" size=1>
- {% for attribute in sample_groups[0].attributes %}
- <option value="{{ sample_groups[0].attributes[attribute].name.replace(' ', '_') }}">
- {{ sample_groups[0].attributes[attribute].name }}</option>
- {% endfor %}
- </select>
- <select id="attribute_values" size=1>
- </select>
- <input type="button" id="exclude_group" class="btn" value="Block">
- </div>
- {% endif %}
<div>
<input type="button" id="hide_no_value" class="btn btn-default" value="Hide No Value">
<input type="button" id="block_outliers" class="btn btn-default" value="Block Outliers">