From 61f49b211ecfe32d375e6a2506189efb49479f3c Mon Sep 17 00:00:00 2001 From: kcantrel Date: Mon, 1 Feb 2021 09:08:55 -0800 Subject: [PATCH 01/23] Add custom color --- empress/support_files/js/colorer.js | 7 +++++-- empress/support_files/js/empress.js | 20 +++++++++++++------ .../support_files/js/side-panel-handler.js | 17 +++++++++++++++- .../support_files/templates/side-panel.html | 7 +++++++ 4 files changed, 42 insertions(+), 9 deletions(-) diff --git a/empress/support_files/js/colorer.js b/empress/support_files/js/colorer.js index 4203f568f..f2a422e40 100644 --- a/empress/support_files/js/colorer.js +++ b/empress/support_files/js/colorer.js @@ -140,7 +140,8 @@ define(["chroma", "underscore", "util"], function (chroma, _, util) { if (this.color === Colorer.__QIIME_COLOR) { palette = Colorer.__qiimeDiscrete; } else { - palette = chroma.brewer[this.color]; + // palette = chroma.brewer[this.color]; + palette = chroma.scale(["purple", "green"]).colors(2); } if (this.reverse) { palette = _.clone(palette); @@ -244,7 +245,9 @@ define(["chroma", "underscore", "util"], function (chroma, _, util) { } else { domain = [min, max]; } - var interpolator = chroma.scale(this.color).domain(domain); + // var interpolator = chroma.scale(this.color).domain(domain); + // var interpolator = chroma.scale(["blue", "yellow", "red"]).domain(domain); + var interpolator = chroma.scale(["green", "#fed8b1", "purple"]).domain(domain); _.each(split.numeric, function (n) { scope.__valueToColor[n] = interpolator(parseFloat(n)); }); diff --git a/empress/support_files/js/empress.js b/empress/support_files/js/empress.js index c8149ac84..e29d02ec6 100644 --- a/empress/support_files/js/empress.js +++ b/empress/support_files/js/empress.js @@ -2257,8 +2257,10 @@ define([ cat, color, method, - reverse = false + reverse = false, + continuous = false, ) { + console.log("is continous?", continuous) var fmInfo = this.getUniqueFeatureMetadataInfo(cat, method); var sortedUniqueValues = fmInfo.sortedUniqueValues; var uniqueValueToFeatures = fmInfo.uniqueValueToFeatures; @@ -2275,14 +2277,16 @@ define([ var colorer = new Colorer( color, sortedUniqueValues, - undefined, - undefined, + continuous, + (continuous) ? -1 : undefined, reverse ); // colors for drawing the tree var cm = colorer.getMapRGB(); // colors for the legend - var keyInfo = colorer.getMapHex(); + var keyInfo = (continuous) ? + colorer.getGradientInfo() : + colorer.getMapHex(); // Do upwards propagation only if the coloring method is "tip" if (method === "tip") { @@ -2294,8 +2298,12 @@ define([ // color tree this._colorTree(obs, cm); - - this.updateLegendCategorical(cat, keyInfo); + if (continuous) { + this._legend.addContinuousKey(cat, keyInfo); + } else { + this.updateLegendCategorical(cat, keyInfo); + } + // this.updateLegendCategorical(cat, keyInfo); return keyInfo; }; diff --git a/empress/support_files/js/side-panel-handler.js b/empress/support_files/js/side-panel-handler.js index c2d582ac7..b394ef92a 100644 --- a/empress/support_files/js/side-panel-handler.js +++ b/empress/support_files/js/side-panel-handler.js @@ -73,6 +73,10 @@ define(["underscore", "Colorer", "util"], function (_, Colorer, util) { this.fCollapseCladesChk = document.getElementById( "feature-collapse-chk" ); + this.fContinuousDiv = document.getElementById("feature-continous-div"); + this.fContinuousChk = document.getElementById( + "feature-continuous-color-chk" + ); this.fLineWidth = document.getElementById("feature-line-width"); this.fUpdateBtn = document.getElementById("feature-update"); this.fMethodChk = document.getElementById("fm-method-chk"); @@ -333,11 +337,14 @@ define(["underscore", "Colorer", "util"], function (_, Colorer, util) { var col = this.fColor.value; var coloringMethod = this.fMethodChk.checked ? "tip" : "all"; var reverse = this.fReverseColor.checked; + var continuous = !this.fContinuousDiv.classList.contains("hidden") && + this.fContinuousChk.checked; this.empress.colorByFeatureMetadata( colBy, col, coloringMethod, - reverse + reverse, + continuous, ); }; @@ -607,10 +614,18 @@ define(["underscore", "Colorer", "util"], function (_, Colorer, util) { }; var showUpdateBtn = function () { + if (Colorer.isColorMapDiscrete(scope.fColor.value)) { + console.log("hide", scope.fContinuousDiv) + scope.fContinuousDiv.classList.add("hidden"); + } else { + console.log("Show", scope.fContinuousDiv) + scope.fContinuousDiv.classList.remove("hidden"); + } scope.fUpdateBtn.classList.remove("hidden"); }; this.fSel.onchange = showUpdateBtn; this.fColor.onchange = showUpdateBtn; + this.fContinuousChk.onchange = showUpdateBtn; this.fReverseColor.onchange = showUpdateBtn; this.fLineWidth.onchange = showUpdateBtn; this.fMethodChk.onchange = function () { diff --git a/empress/support_files/templates/side-panel.html b/empress/support_files/templates/side-panel.html index 6ae3fca56..e303f4cc4 100644 --- a/empress/support_files/templates/side-panel.html +++ b/empress/support_files/templates/side-panel.html @@ -99,6 +99,13 @@ If checked, collapse all clades whose members share the same feature metadata value.

+

Date: Tue, 9 Feb 2021 20:06:26 -0800 Subject: [PATCH 02/23] checkpoint --- empress/support_files/js/colorer.js | 1 + 1 file changed, 1 insertion(+) diff --git a/empress/support_files/js/colorer.js b/empress/support_files/js/colorer.js index f2a422e40..67ed3739b 100644 --- a/empress/support_files/js/colorer.js +++ b/empress/support_files/js/colorer.js @@ -142,6 +142,7 @@ define(["chroma", "underscore", "util"], function (chroma, _, util) { } else { // palette = chroma.brewer[this.color]; palette = chroma.scale(["purple", "green"]).colors(2); + console.log(palette) } if (this.reverse) { palette = _.clone(palette); From dd2cfe6012d6b599fee488a30c99a61ce814168d Mon Sep 17 00:00:00 2001 From: kcantrel Date: Tue, 9 Feb 2021 21:28:11 -0800 Subject: [PATCH 03/23] added gradient coloring for feature metadata --- empress/support_files/js/colorer.js | 8 ++------ empress/support_files/js/empress.js | 2 -- empress/support_files/js/side-panel-handler.js | 2 -- 3 files changed, 2 insertions(+), 10 deletions(-) diff --git a/empress/support_files/js/colorer.js b/empress/support_files/js/colorer.js index 67ed3739b..4203f568f 100644 --- a/empress/support_files/js/colorer.js +++ b/empress/support_files/js/colorer.js @@ -140,9 +140,7 @@ define(["chroma", "underscore", "util"], function (chroma, _, util) { if (this.color === Colorer.__QIIME_COLOR) { palette = Colorer.__qiimeDiscrete; } else { - // palette = chroma.brewer[this.color]; - palette = chroma.scale(["purple", "green"]).colors(2); - console.log(palette) + palette = chroma.brewer[this.color]; } if (this.reverse) { palette = _.clone(palette); @@ -246,9 +244,7 @@ define(["chroma", "underscore", "util"], function (chroma, _, util) { } else { domain = [min, max]; } - // var interpolator = chroma.scale(this.color).domain(domain); - // var interpolator = chroma.scale(["blue", "yellow", "red"]).domain(domain); - var interpolator = chroma.scale(["green", "#fed8b1", "purple"]).domain(domain); + var interpolator = chroma.scale(this.color).domain(domain); _.each(split.numeric, function (n) { scope.__valueToColor[n] = interpolator(parseFloat(n)); }); diff --git a/empress/support_files/js/empress.js b/empress/support_files/js/empress.js index e29d02ec6..10ebcafd9 100644 --- a/empress/support_files/js/empress.js +++ b/empress/support_files/js/empress.js @@ -2260,7 +2260,6 @@ define([ reverse = false, continuous = false, ) { - console.log("is continous?", continuous) var fmInfo = this.getUniqueFeatureMetadataInfo(cat, method); var sortedUniqueValues = fmInfo.sortedUniqueValues; var uniqueValueToFeatures = fmInfo.uniqueValueToFeatures; @@ -2303,7 +2302,6 @@ define([ } else { this.updateLegendCategorical(cat, keyInfo); } - // this.updateLegendCategorical(cat, keyInfo); return keyInfo; }; diff --git a/empress/support_files/js/side-panel-handler.js b/empress/support_files/js/side-panel-handler.js index b394ef92a..fe9b3d465 100644 --- a/empress/support_files/js/side-panel-handler.js +++ b/empress/support_files/js/side-panel-handler.js @@ -615,10 +615,8 @@ define(["underscore", "Colorer", "util"], function (_, Colorer, util) { var showUpdateBtn = function () { if (Colorer.isColorMapDiscrete(scope.fColor.value)) { - console.log("hide", scope.fContinuousDiv) scope.fContinuousDiv.classList.add("hidden"); } else { - console.log("Show", scope.fContinuousDiv) scope.fContinuousDiv.classList.remove("hidden"); } scope.fUpdateBtn.classList.remove("hidden"); From 20b369a5c1341c6a595666d390a3c4157e0ed40e Mon Sep 17 00:00:00 2001 From: kcantrel Date: Tue, 9 Feb 2021 21:47:58 -0800 Subject: [PATCH 04/23] linter --- empress/support_files/js/empress.js | 10 +++++----- empress/support_files/js/side-panel-handler.js | 5 +++-- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/empress/support_files/js/empress.js b/empress/support_files/js/empress.js index 10ebcafd9..66a12f103 100644 --- a/empress/support_files/js/empress.js +++ b/empress/support_files/js/empress.js @@ -2258,7 +2258,7 @@ define([ color, method, reverse = false, - continuous = false, + continuous = false ) { var fmInfo = this.getUniqueFeatureMetadataInfo(cat, method); var sortedUniqueValues = fmInfo.sortedUniqueValues; @@ -2277,15 +2277,15 @@ define([ color, sortedUniqueValues, continuous, - (continuous) ? -1 : undefined, + continuous ? -1 : undefined, reverse ); // colors for drawing the tree var cm = colorer.getMapRGB(); // colors for the legend - var keyInfo = (continuous) ? - colorer.getGradientInfo() : - colorer.getMapHex(); + var keyInfo = continuous + ? colorer.getGradientInfo() + : colorer.getMapHex(); // Do upwards propagation only if the coloring method is "tip" if (method === "tip") { diff --git a/empress/support_files/js/side-panel-handler.js b/empress/support_files/js/side-panel-handler.js index fe9b3d465..3bb2bc517 100644 --- a/empress/support_files/js/side-panel-handler.js +++ b/empress/support_files/js/side-panel-handler.js @@ -337,14 +337,15 @@ define(["underscore", "Colorer", "util"], function (_, Colorer, util) { var col = this.fColor.value; var coloringMethod = this.fMethodChk.checked ? "tip" : "all"; var reverse = this.fReverseColor.checked; - var continuous = !this.fContinuousDiv.classList.contains("hidden") && + var continuous = + !this.fContinuousDiv.classList.contains("hidden") && this.fContinuousChk.checked; this.empress.colorByFeatureMetadata( colBy, col, coloringMethod, reverse, - continuous, + continuous ); }; From 6172f363d1030615b6da21472f0e22efa3af6059 Mon Sep 17 00:00:00 2001 From: kcantrel Date: Tue, 9 Feb 2021 21:53:59 -0800 Subject: [PATCH 05/23] style fix --- empress/support_files/js/empress.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/empress/support_files/js/empress.js b/empress/support_files/js/empress.js index 66a12f103..c8cb88298 100644 --- a/empress/support_files/js/empress.js +++ b/empress/support_files/js/empress.js @@ -2283,9 +2283,12 @@ define([ // colors for drawing the tree var cm = colorer.getMapRGB(); // colors for the legend - var keyInfo = continuous - ? colorer.getGradientInfo() - : colorer.getMapHex(); + var keyInfo; + if (continuous) { + keyInfo = colorer.getGradientInfo(); + } else { + keyInfo = colorer.getMapHex(); + } // Do upwards propagation only if the coloring method is "tip" if (method === "tip") { From a3a1fe476fd752d35e9ebae16c0b81b6705540f0 Mon Sep 17 00:00:00 2001 From: kcantrel Date: Mon, 22 Feb 2021 15:26:17 -0800 Subject: [PATCH 06/23] Show warning to user --- empress/support_files/js/empress.js | 31 +++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/empress/support_files/js/empress.js b/empress/support_files/js/empress.js index c8cb88298..5e97b76e6 100644 --- a/empress/support_files/js/empress.js +++ b/empress/support_files/js/empress.js @@ -2272,14 +2272,29 @@ define([ obs[uniqueVal] = new Set(uniqueValueToFeatures[uniqueVal]); }); - // assign colors to unique values - var colorer = new Colorer( - color, - sortedUniqueValues, - continuous, - continuous ? -1 : undefined, - reverse - ); + try { + // assign colors to unique values + var colorer = new Colorer( + color, + sortedUniqueValues, + continuous, + continuous ? -1 : undefined, + reverse + ); + } catch (err) { + // If the Colorer construction failed (should only have + // happened if the user asked for continuous values but the + // selected field doesn't have at least 2 unique numeric + // values), then we open a toast message about this error and + // then raise it again to send error to console. + var msg = + "Error with assigning colors: '" + + cat + + "' is either non-numeric" + + " or has less than 2 unique numeric values"; + util.toastMsg(msg, 5000); + throw msg; + } // colors for drawing the tree var cm = colorer.getMapRGB(); // colors for the legend From 3a698616520c9629bcabcb686d7d73259d400f71 Mon Sep 17 00:00:00 2001 From: kcantrel Date: Mon, 22 Feb 2021 18:40:59 -0800 Subject: [PATCH 07/23] checkpoint --- empress/support_files/js/empress.js | 92 +++++++++++++++++++++++++++-- 1 file changed, 88 insertions(+), 4 deletions(-) diff --git a/empress/support_files/js/empress.js b/empress/support_files/js/empress.js index 5e97b76e6..c2b69b853 100644 --- a/empress/support_files/js/empress.js +++ b/empress/support_files/js/empress.js @@ -2324,6 +2324,19 @@ define([ return keyInfo; }; + + Empress.prototype._projectObservations = function ( + obs, + ignoreAbsentTips, + isContinuous=false + ) { + var result; + if (!isContinuous) { + result = this._projectDiscreteObservations(obs, ignoreAbsentTips); + } + return result; + }; + /* * Projects the groups in obs up the tree. * @@ -2333,7 +2346,7 @@ define([ * * 2) Assigns each internal node to a group if all of its children belong * to the same group. - *@t + * * 3) Remove empty groups from return object. * * Note: All tips that are not passed into obs are considered to belong to @@ -2348,7 +2361,10 @@ define([ to a set of keys (i.e. tree nodes) that are unique to each group. */ - Empress.prototype._projectObservations = function (obs, ignoreAbsentTips) { + Empress.prototype._projectDiscreteObservations = function( + obs, + ignoreAbsentTips + ) { var tree = this._tree, categories = Object.keys(obs), notRepresented = new Set(), @@ -2403,7 +2419,75 @@ define([ }); return result; - }; + } + + /* + * This function will assign internal nodes to be the average of its tips. + * + * Note: All tips that are not passed into obs are ignored + * + * @param {Object} obs Maps categories to a set of observations (i.e. tips) + * + * @return {Object} returns A Map with the same group names that maps groups + to a set of keys (i.e. tree nodes) that are unique to + each group. + */ + Empress.prototype._projectContinuousObservations = function(obs) { + var tree = this._tree, + categories = Object.keys(obs), + notRepresented = new Set(), + i, + j; + + if (!ignoreAbsentTips) { + // find "non-represented" tips + // Note: the following uses postorder traversal + for (i = 1; i < tree.size; i++) { + if (tree.isleaf(tree.postorderselect(i))) { + var represented = false; + for (j = 0; j < categories.length; j++) { + if (obs[categories[j]].has(i)) { + represented = true; + break; + } + } + if (!represented) notRepresented.add(i); + } + } + } + + // assign internal nodes to appropriate category based on children + // iterate using postorder + // Note that, although we don't explicitly iterate over the + // root (at index tree.size) in this loop, we iterate over all its + // descendants; so in the event that all leaves are unique, + // the root can still get assigned to a group. + for (i = 1; i < tree.size; i++) { + var node = i; + var parent = tree.postorder(tree.parent(tree.postorderselect(i))); + + for (j = 0; j < categories.length; j++) { + category = categories[j]; + + // add internal nodes to groups + if (obs[category].has(node)) { + obs[category].add(parent); + } + if (notRepresented.has(node)) { + notRepresented.add(parent); + } + } + } + + var result = util.keepUniqueKeys(obs, notRepresented); + + // remove all groups that do not contain unique features + result = _.pick(result, function (value, key) { + return value.size > 0; + }); + + return result; + } /** * Updates the tree based on obs and cm but does not draw a new tree. @@ -2784,7 +2868,7 @@ define([ // project groups up tree // Note: if _projectObservations was called, then if an internal node // belongs to a group, all of its descendants will belong to the - // same group. However, this is not guaranteed if _projectOBservations + // same group. However, this is not guaranteed if _projectObservations // was not called. Thus, this loop is used to guarantee that if an // internal node belongs to a group then all of its descendants belong // to the same group. From ca591ba2778a3ef3ec39c32cb939916ecfbc5faf Mon Sep 17 00:00:00 2001 From: kcantrel Date: Tue, 23 Feb 2021 12:32:23 -0800 Subject: [PATCH 08/23] gradient feature metadata coloring --- empress/support_files/js/empress.js | 104 +++++----------------------- 1 file changed, 16 insertions(+), 88 deletions(-) diff --git a/empress/support_files/js/empress.js b/empress/support_files/js/empress.js index c2b69b853..bd393dd4b 100644 --- a/empress/support_files/js/empress.js +++ b/empress/support_files/js/empress.js @@ -2278,6 +2278,14 @@ define([ color, sortedUniqueValues, continuous, + // Colorer will create a special gradient ID using the number + // we pass into this parameter. This allows empress to display + // multiple gradients at the same time without them overriding + // each other. Currently, the barplots are setup to start at + // 0. So we set this to -1 this value will never be -1 in + // the barplots. Thus, by setting this value to -1 we can + // display the feature metadata gradient along side the + // barplot gradients. continuous ? -1 : undefined, reverse ); @@ -2287,13 +2295,13 @@ define([ // selected field doesn't have at least 2 unique numeric // values), then we open a toast message about this error and // then raise it again to send error to console. - var msg = + var msg = "Error with assigning colors: '" + cat + "' is either non-numeric" + " or has less than 2 unique numeric values"; - util.toastMsg(msg, 5000); - throw msg; + util.toastMsg(msg, 5000); + throw msg; } // colors for drawing the tree var cm = colorer.getMapRGB(); @@ -2324,19 +2332,6 @@ define([ return keyInfo; }; - - Empress.prototype._projectObservations = function ( - obs, - ignoreAbsentTips, - isContinuous=false - ) { - var result; - if (!isContinuous) { - result = this._projectDiscreteObservations(obs, ignoreAbsentTips); - } - return result; - }; - /* * Projects the groups in obs up the tree. * @@ -2361,9 +2356,10 @@ define([ to a set of keys (i.e. tree nodes) that are unique to each group. */ - Empress.prototype._projectDiscreteObservations = function( - obs, - ignoreAbsentTips + Empress.prototype._projectObservations = function ( + obs, + ignoreAbsentTips, + isContinuous = false ) { var tree = this._tree, categories = Object.keys(obs), @@ -2419,75 +2415,7 @@ define([ }); return result; - } - - /* - * This function will assign internal nodes to be the average of its tips. - * - * Note: All tips that are not passed into obs are ignored - * - * @param {Object} obs Maps categories to a set of observations (i.e. tips) - * - * @return {Object} returns A Map with the same group names that maps groups - to a set of keys (i.e. tree nodes) that are unique to - each group. - */ - Empress.prototype._projectContinuousObservations = function(obs) { - var tree = this._tree, - categories = Object.keys(obs), - notRepresented = new Set(), - i, - j; - - if (!ignoreAbsentTips) { - // find "non-represented" tips - // Note: the following uses postorder traversal - for (i = 1; i < tree.size; i++) { - if (tree.isleaf(tree.postorderselect(i))) { - var represented = false; - for (j = 0; j < categories.length; j++) { - if (obs[categories[j]].has(i)) { - represented = true; - break; - } - } - if (!represented) notRepresented.add(i); - } - } - } - - // assign internal nodes to appropriate category based on children - // iterate using postorder - // Note that, although we don't explicitly iterate over the - // root (at index tree.size) in this loop, we iterate over all its - // descendants; so in the event that all leaves are unique, - // the root can still get assigned to a group. - for (i = 1; i < tree.size; i++) { - var node = i; - var parent = tree.postorder(tree.parent(tree.postorderselect(i))); - - for (j = 0; j < categories.length; j++) { - category = categories[j]; - - // add internal nodes to groups - if (obs[category].has(node)) { - obs[category].add(parent); - } - if (notRepresented.has(node)) { - notRepresented.add(parent); - } - } - } - - var result = util.keepUniqueKeys(obs, notRepresented); - - // remove all groups that do not contain unique features - result = _.pick(result, function (value, key) { - return value.size > 0; - }); - - return result; - } + }; /** * Updates the tree based on obs and cm but does not draw a new tree. From 86ef3cffc44eb4e715d615f1ae02c99e5fc127ab Mon Sep 17 00:00:00 2001 From: kcantrel Date: Tue, 23 Feb 2021 12:35:48 -0800 Subject: [PATCH 09/23] fixed style issue --- empress/support_files/js/empress.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/empress/support_files/js/empress.js b/empress/support_files/js/empress.js index bd393dd4b..34461e72f 100644 --- a/empress/support_files/js/empress.js +++ b/empress/support_files/js/empress.js @@ -2272,9 +2272,10 @@ define([ obs[uniqueVal] = new Set(uniqueValueToFeatures[uniqueVal]); }); + var colorer; try { // assign colors to unique values - var colorer = new Colorer( + colorer = new Colorer( color, sortedUniqueValues, continuous, From a4052dfcd4c55fa72d674de34b72b2dd58b281b6 Mon Sep 17 00:00:00 2001 From: kcantrel Date: Tue, 2 Mar 2021 13:22:04 -0800 Subject: [PATCH 10/23] addressed comments --- empress/support_files/js/empress.js | 5 ++-- .../support_files/js/side-panel-handler.js | 29 ++++++++++++------- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/empress/support_files/js/empress.js b/empress/support_files/js/empress.js index 9cc983f09..b070a0447 100644 --- a/empress/support_files/js/empress.js +++ b/empress/support_files/js/empress.js @@ -2220,7 +2220,7 @@ define([ * @return {Object} An object with two keys: * -sortedUniqueValues: maps to an Array of the unique * values in this feature metadata field, sorted using - * util.naturalSort(). + * util.naturalSort().q * -uniqueValueToFeatures: maps to an Object which maps * the unique values in this feature metadata column to * an array of the node name(s) with each value. @@ -2292,6 +2292,8 @@ define([ * @param{Boolean} reverse Defaults to false. If true, the color scale * will be reversed, with respect to its default * orientation. + * @param{Boolean} continuous Defaults to false. If true, the colorer will + * use a gradient color scale. * * @return {Object} Maps unique values in this f. metadata column to colors */ @@ -2402,7 +2404,6 @@ define([ Empress.prototype._projectObservations = function ( obs, ignoreAbsentTips, - isContinuous = false ) { var tree = this._tree, categories = Object.keys(obs), diff --git a/empress/support_files/js/side-panel-handler.js b/empress/support_files/js/side-panel-handler.js index 176a21caf..6b61566c4 100644 --- a/empress/support_files/js/side-panel-handler.js +++ b/empress/support_files/js/side-panel-handler.js @@ -295,21 +295,28 @@ define(["underscore", "Colorer", "util"], function (_, Colorer, util) { lwInput, updateBtn ) { - this.empress.resetTree(); + try { + this.empress.resetTree(); - // hide update button - updateBtn.classList.add("hidden"); + // hide update button + updateBtn.classList.add("hidden"); - // color tree - this[colorMethodName](); + // color tree + this[colorMethodName](); - if (collapseChk.checked) { - this.empress.collapseClades(); + if (collapseChk.checked) { + this.empress.collapseClades(); + } + var lw = util.parseAndValidateNum(lwInput); + this.empress.thickenColoredNodes(lw); + + this.empress.drawTree(); + } catch(err) { + this.empress.resetTree(); + this.empress.drawTree(); + this.empress.clearLegend(); + updateBtn.classList.remove("hidden"); } - var lw = util.parseAndValidateNum(lwInput); - this.empress.thickenColoredNodes(lw); - - this.empress.drawTree(); }; /** From 84d5b4a20926fd6cea6ef55a8804dbff2bb49c0e Mon Sep 17 00:00:00 2001 From: kcantrel Date: Tue, 2 Mar 2021 13:26:01 -0800 Subject: [PATCH 11/23] style fix --- empress/support_files/js/empress.js | 7 ++----- empress/support_files/js/side-panel-handler.js | 2 +- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/empress/support_files/js/empress.js b/empress/support_files/js/empress.js index b070a0447..53cc679fc 100644 --- a/empress/support_files/js/empress.js +++ b/empress/support_files/js/empress.js @@ -2293,7 +2293,7 @@ define([ * will be reversed, with respect to its default * orientation. * @param{Boolean} continuous Defaults to false. If true, the colorer will - * use a gradient color scale. + * use a gradient color scale. * * @return {Object} Maps unique values in this f. metadata column to colors */ @@ -2401,10 +2401,7 @@ define([ to a set of keys (i.e. tree nodes) that are unique to each group. */ - Empress.prototype._projectObservations = function ( - obs, - ignoreAbsentTips, - ) { + Empress.prototype._projectObservations = function (obs, ignoreAbsentTips) { var tree = this._tree, categories = Object.keys(obs), notRepresented = new Set(), diff --git a/empress/support_files/js/side-panel-handler.js b/empress/support_files/js/side-panel-handler.js index 6b61566c4..fc3ae56fd 100644 --- a/empress/support_files/js/side-panel-handler.js +++ b/empress/support_files/js/side-panel-handler.js @@ -311,7 +311,7 @@ define(["underscore", "Colorer", "util"], function (_, Colorer, util) { this.empress.thickenColoredNodes(lw); this.empress.drawTree(); - } catch(err) { + } catch (err) { this.empress.resetTree(); this.empress.drawTree(); this.empress.clearLegend(); From 8836260d48d50af57fa5c8d35f79b77bb295aa3c Mon Sep 17 00:00:00 2001 From: kwcantrell Date: Tue, 2 Mar 2021 13:27:02 -0800 Subject: [PATCH 12/23] Apply suggestions from code review Co-authored-by: Marcus Fedarko --- empress/support_files/js/empress.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/empress/support_files/js/empress.js b/empress/support_files/js/empress.js index 53cc679fc..f69c354f1 100644 --- a/empress/support_files/js/empress.js +++ b/empress/support_files/js/empress.js @@ -2326,10 +2326,10 @@ define([ // Colorer will create a special gradient ID using the number // we pass into this parameter. This allows empress to display // multiple gradients at the same time without them overriding - // each other. Currently, the barplots are setup to start at - // 0. So we set this to -1 this value will never be -1 in - // the barplots. Thus, by setting this value to -1 we can - // display the feature metadata gradient along side the + // each other. Currently, the barplots are set up to start at + // 0. So, we set this value to -1 here to avoid conflict with + // the barplot gradients; this allows us to display the + // feature metadata gradient alongside the // barplot gradients. continuous ? -1 : undefined, reverse @@ -2341,10 +2341,10 @@ define([ // values), then we open a toast message about this error and // then raise it again to send error to console. var msg = - "Error with assigning colors: '" + + 'Error with assigning colors: ' + + 'the feature metadata field "' + cat + - "' is either non-numeric" + - " or has less than 2 unique numeric values"; + '" has less than 2 unique numeric values.'; util.toastMsg(msg, 5000); throw msg; } From 743a32ee67cb695b16653ae1d781bc30a993b98b Mon Sep 17 00:00:00 2001 From: kcantrel Date: Fri, 9 Apr 2021 11:57:28 -0700 Subject: [PATCH 13/23] fix style --- empress/support_files/js/empress.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/empress/support_files/js/empress.js b/empress/support_files/js/empress.js index 67c1291a1..a639bddc8 100644 --- a/empress/support_files/js/empress.js +++ b/empress/support_files/js/empress.js @@ -2484,7 +2484,7 @@ define([ // values), then we open a toast message about this error and // then raise it again to send error to console. var msg = - 'Error with assigning colors: ' + + "Error with assigning colors: " + 'the feature metadata field "' + cat + '" has less than 2 unique numeric values.'; From a90871c2838ec6accbd223823dc6c51810325e00 Mon Sep 17 00:00:00 2001 From: kcantrel Date: Fri, 9 Apr 2021 12:42:46 -0700 Subject: [PATCH 14/23] fixed continuous error --- empress/support_files/js/empress.js | 26 +++++++++++++------ .../support_files/js/side-panel-handler.js | 6 ++++- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/empress/support_files/js/empress.js b/empress/support_files/js/empress.js index a639bddc8..28cedce6e 100644 --- a/empress/support_files/js/empress.js +++ b/empress/support_files/js/empress.js @@ -2355,7 +2355,7 @@ define([ * @return {Object} An object with two keys: * -sortedUniqueValues: maps to an Array of the unique * values in this feature metadata field, sorted using - * util.naturalSort().q + * util.naturalSort(). * -uniqueValueToFeatures: maps to an Object which maps * the unique values in this feature metadata column to * an array of the node name(s) with each value. @@ -2437,7 +2437,8 @@ define([ * orientation. * @param{Boolean} continuous Defaults to false. If true, the colorer will * use a gradient color scale. - * + * @param{function} continousFailedFunc The function to call if continuous + * coloring failed. * @return {Object} Maps unique values in this f. metadata column to colors */ Empress.prototype.colorByFeatureMetadata = function ( @@ -2445,7 +2446,8 @@ define([ color, method, reverse = false, - continuous = false + continuous = false, + continousFailedFunc = null ) { var fmInfo = this.getUniqueFeatureMetadataInfo(cat, method); var sortedUniqueValues = fmInfo.sortedUniqueValues; @@ -2482,14 +2484,22 @@ define([ // happened if the user asked for continuous values but the // selected field doesn't have at least 2 unique numeric // values), then we open a toast message about this error and - // then raise it again to send error to console. + // use discrete coloring instead. + continuous = false; var msg = - "Error with assigning colors: " + - 'the feature metadata field "' + + "Error with assigning colors: '" + cat + - '" has less than 2 unique numeric values.'; + "' cannot use continuous coloring. Using discrete instead."; util.toastMsg(msg, 5000); - throw msg; + // assign colors to unique values + colorer = new Colorer( + color, + sortedUniqueValues, + continuous, + undefined, + reverse + ); + continousFailedFunc(); } // colors for drawing the tree var cm = colorer.getMapRGB(); diff --git a/empress/support_files/js/side-panel-handler.js b/empress/support_files/js/side-panel-handler.js index fc3ae56fd..ff370347b 100644 --- a/empress/support_files/js/side-panel-handler.js +++ b/empress/support_files/js/side-panel-handler.js @@ -340,6 +340,7 @@ define(["underscore", "Colorer", "util"], function (_, Colorer, util) { * Colors the tree based on the feature metadata coloring settings. */ SidePanel.prototype._colorFeatureTree = function () { + var scope = this; var colBy = this.fSel.value; var col = this.fColor.value; var coloringMethod = this.fMethodChk.checked ? "tip" : "all"; @@ -352,7 +353,10 @@ define(["underscore", "Colorer", "util"], function (_, Colorer, util) { col, coloringMethod, reverse, - continuous + continuous, + () => { + scope.fContinuousChk.checked = false; + } ); }; From 305aa470b692572e1d507f28051114a0a4dd4b93 Mon Sep 17 00:00:00 2001 From: kcantrel Date: Mon, 12 Apr 2021 13:50:42 -0700 Subject: [PATCH 15/23] remove try-catch --- .../support_files/js/side-panel-handler.js | 29 +++++++------------ 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/empress/support_files/js/side-panel-handler.js b/empress/support_files/js/side-panel-handler.js index ff370347b..3c03b1c6b 100644 --- a/empress/support_files/js/side-panel-handler.js +++ b/empress/support_files/js/side-panel-handler.js @@ -295,28 +295,21 @@ define(["underscore", "Colorer", "util"], function (_, Colorer, util) { lwInput, updateBtn ) { - try { - this.empress.resetTree(); + this.empress.resetTree(); - // hide update button - updateBtn.classList.add("hidden"); + // hide update button + updateBtn.classList.add("hidden"); - // color tree - this[colorMethodName](); + // color tree + this[colorMethodName](); - if (collapseChk.checked) { - this.empress.collapseClades(); - } - var lw = util.parseAndValidateNum(lwInput); - this.empress.thickenColoredNodes(lw); - - this.empress.drawTree(); - } catch (err) { - this.empress.resetTree(); - this.empress.drawTree(); - this.empress.clearLegend(); - updateBtn.classList.remove("hidden"); + if (collapseChk.checked) { + this.empress.collapseClades(); } + var lw = util.parseAndValidateNum(lwInput); + this.empress.thickenColoredNodes(lw); + + this.empress.drawTree(); }; /** From d5426f6b4ad8e6f9dd21b685d340b9fac98e7921 Mon Sep 17 00:00:00 2001 From: kwcantrell Date: Tue, 4 May 2021 11:29:21 -0700 Subject: [PATCH 16/23] Apply suggestions from code review Co-authored-by: Marcus Fedarko --- empress/support_files/js/empress.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/empress/support_files/js/empress.js b/empress/support_files/js/empress.js index 28cedce6e..4f650ea3c 100644 --- a/empress/support_files/js/empress.js +++ b/empress/support_files/js/empress.js @@ -2436,8 +2436,8 @@ define([ * will be reversed, with respect to its default * orientation. * @param{Boolean} continuous Defaults to false. If true, the colorer will - * use a gradient color scale. - * @param{function} continousFailedFunc The function to call if continuous + * try to use a gradient color scale. + * @param{Function} continousFailedFunc The function to call if continuous * coloring failed. * @return {Object} Maps unique values in this f. metadata column to colors */ @@ -2487,9 +2487,11 @@ define([ // use discrete coloring instead. continuous = false; var msg = - "Error with assigning colors: '" + + 'Error with assigning colors: the feature metadata field "' + cat + - "' cannot use continuous coloring. Using discrete instead."; + '" has less than 2 unique numeric values, so it cannot be ' + + "used for continuous coloring. " + + "Using discrete coloring instead."; util.toastMsg(msg, 5000); // assign colors to unique values colorer = new Colorer( From aba2aa790a85acbd3724ba9bdc0664ebb30c1d74 Mon Sep 17 00:00:00 2001 From: kcantrel Date: Thu, 10 Jun 2021 17:18:14 -0700 Subject: [PATCH 17/23] checkpoint --- docs/moving-pictures/taxonomy-orig.qza | Bin 0 -> 71370 bytes docs/moving-pictures/taxonomy.qza | Bin 71370 -> 71033 bytes empress/support_files/js/empress.js | 17 ++++++++++++++ empress/support_files/js/legend.js | 31 ++++++++++++++++++++++--- 4 files changed, 45 insertions(+), 3 deletions(-) create mode 100644 docs/moving-pictures/taxonomy-orig.qza diff --git a/docs/moving-pictures/taxonomy-orig.qza b/docs/moving-pictures/taxonomy-orig.qza new file mode 100644 index 0000000000000000000000000000000000000000..503e72179057054593c49c9fd40f89d2dc0a1764 GIT binary patch literal 71370 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 z z#Y;FmEB+b*r;E$K-#bp$E*MUc%2c~rz`V+w3IE6WQC);uWz)dqCe~5Ds>JEFApQHR z+xBdge|pdwzS?P*lC@=NDY1HgbTg1|qND34@$BQ#g@Yyr?9N@#kLAwB{HeW&Q zn-u{->{K>nOA{PIOYWpI@E+Hb*qLcqKfO$98B9&Cl~mn~rA_bnXYklrkI>ZehT-Mj zuGnH3ozr2R^roFa-wA7#>zIIkqVs)>d()eT2v!WVPZVcZRVdRinyE_HJVnb=&n=d&>ZH;ocNk&ajeTq zf!&ytK2@Mbj(9ZAPEKTUvXW-&uv>?}COF(Or^B?#v~z6(_D$7h);%U4~{8(xUCq9Nn+)7DAZ{N9 zUHV{N;h0?ye;Aj2Tz%4;yE$$z3ZZrt2Jicq?<`A5KC>Cg$F z=uRz&U8G>#DQg$+2m&1b4s=^P3DzOA*v|m!Yt!Nd2%xu|!WHy zFZqv`AI^4Hwl^-G0*HQ91%~rqG>T=-uFfzc+xWHT8Agn)dvqz0O@3y-7#YB*q4d}_*XRi#ZKMU8-PR*0gZ-Lt2FG}^zBSh!FyF-(G1D;wh}_wUOwrt&@ieovDoEc>H81dlifg(9+lzrJlOOG(=}_Dtc{_V7PzRK-EI%uN zLJb~$cI;t;lY}X=b|yU4K3TNBF|75peX{q73&tl{sL6!dQdyTgcHR$j3{kMlALhOITF#IWC~W0CjU zM-3NBBeKS6VKWIuII)m8OU-Rkv2esB0P0)yx9@cYi^n^`%SgCv!AMz}?SpS)(2cPC z8ep9|z98E@#CC|b>MIM`e;nse)1_cg0{$mdCc_dJFdIseP_!8Y(8*+BRWxAMrjD^O z*KPw-{&0D9_F^A*KkX*>HfYUvK*cXxe-purVXZ@iBf-+k7ym(=|W(W zDv*G#n9F3Ub+0PwIdvBff4Z-h@04|9A-QUxAm)-J&cv-sp|TyJ!KX;+U7b*5bl)=n z1^>Cr_EC4<@9u}o-48qO_VLqG<^0w73}f@@Zf)0>?Mg4Me>!`n=~k%81CH3zXo0dv z8hdutvvN;^I3Vl9h~4|$ykZUBYlKrXi5h8j#h18Ei9K+ck#K!#KBK)|j?vSa1}2Mk!<4^k6&^@PHI{c`=n&81{ru@RdF zyzhcvVkACo%sy9zQS9U@U{84j>NM^rQ;!|>d^~6PFGJx4R`-MbE^Sy`I%{oJQ7$TX zcBJ}&Eyi;>0tS3VL?YlUP2l{=vh;wXD`u2X1Dr$!{*NVhSUrx!bC$0NnS7JJTh5&M9W0gykiQrY z%WQ^X&3OV<&!EEEE=?ZbuN|qS;ahac7_ulq3{F`%f@A4~Fa^LFKF#(R*aZr_+-%d* z=0;)g+aJU?jX*1zGf)fo53mA=i1*;)P5~356VCVnQFnfH+(kT`ct~;j7C!y%yy^Mb zhq2Sj_9y=Mr5q<)WiqS@RpdWcr_Oc2Y3wU(&uq~tb$@@0j7rlBFubdWVK6M= zwA5$@uFkUb26z>%X(^4=tfef*6m}3!Vc_w-oXd*5;C(s&1pgCU!Nra;n@b9dC>3}D zq@)|_aaGnwY)DDHSK(PsfHyEdF^8d`z+)IIWXVm`COfgQZe~3sl=X%=cRH zv}$h~HKyXUt61z?z@sj;CA@l=@OsQXiMy`Bim+vk|lWTm|rT0 zoaulNxruAIdMwW}HVsZ}vB%Qb{U%H9DUA*MENeH>Vl{ULjc_-6!UGpu#-x09b&_3C0=pZ!9G2Sq;u2{9G1BrWiKzSquxLg=xySWS~DYJ+gR}df9cC-U$DmixMS-d&v?yNllLU` z2>W<;4Z`^%>LJ-+_dEsj9iA-E^#DClAo~eFsJRvjZ@|6;KjS7(PtO?%nDTxkJh=1qrAnrahE+}MC*rgxI=5hAno*hq zO6+s?uqvV-p}Oc-OJ>+#EL==nbukykX=zk(z2(XJwV2>VV35H?G;GK?oh~}`xLM-q zxk?nrI>ZhWY#1D(cDNryyXi?ljb=GQ8SpQ)L5gvX<9DK6Y89MY1MLvpey~dE>PdXO z8>yGy=sm7A@gR^stb^*BgMwWA+w`T|%CJD_wY0+LziZ*NoFE>P3j%H?vLtU!Yycavf-GXS4K$6jpOmr%=~YEX z$5zW-!#N+tYcs!>X5{U3S2AJ9TU`&PyfyJ{6sG|iR zZ?G<~cnUAteO!Bo*{--D!+BVtHMPiTI|4^Qar_2|pY7D>P4tNVK95uiBi zS5IpNBxf9ekhleCKZIF&Gj)XAt;--+X|xE?1Khap7mw6LdoK#Tez;ew#(T4z=jzw7 z#_-stx(OR)Ns-Gm-B+r@34Y$Li?RVY6-KH8Zbg>a_A1SKQ$dqJ z^*}sdwNnRX=Pu9nh3QHZRe(RF*p$KFEtWMYwy}(fz!d}(_t}Bq`4Is$j!=yI&5)Hz zk+RaX#f6d->n$w61YL&4llS-1nOVW;ut3~r(%aeu&?XEf z5UNfWx~1%<0k&p2^@+o#-;b*g<7p(-e_vjH9OvyJxyr5vuv-xdJ}e#VVjFzP^i*0J1n;w2bDgHOD9k7OeWN-TxvOQ5+_&%u185NF# zGv0?KPM1OSBmz-%&lck_>nP5p9)gp1sAt=)4BRP=fwjdFDdg?p(%>S-tli@Ui8{Dn z2DQNc%A6CXC01#(%8tP6TGrVDYz`r!EQ?wAlKezG-fhJl}3RTQaf9D zRiD|>nG0Ef3xOdkkoP!eryjrPfUO=NFK{k+6jMtyEgT-^_+`5H@}E50M-g@v8Y%E_ zZh`X`T)PBN=kuy3spnwJ5L|o%Nqef>@wu838W9B$Y z-H$CCOBgl=pFIBH@NY7LVWd|q0eE=ggVw}4lKDEhk0aQQe*^!#zOQ9_%mm+j`S5_& zy(gguWXO&lF5~`nHj_)O+H+2p9VPI_k{X8@oLKW?)vRhv7LKdOsWN^o@J!w@r4E({ zQ0#{1Si=skqcGJOv{~@HsfK-sTl@EW&CSPP;7bk8yASJ9uWmnGo{fv^JKviq#uV6i zTZ{!XG-J-nxHIKF8iy-zs7s$IQSWaf4YR>|R#SL+KGs^1`xX8{&vuJE?|=BXzWX2F ziId^&p5N8qr(gpsc@0-*WT6OHq`4b5H1DYQ-p7Cew1pEvk1i&6=f&E`|I(|Q|K3Og zQhQItFS#~O&6tuZARy)T;K=3(oU?!jeRvvXYh8aFA9N3-u-}#$7$-5NvWQlhG|!d& zRcUrlVX{_LS!uUX!11lY89sHuveJ`Ukf4;mPPj#IjwHef(THIJHfYjj73Ooc_ z;o>=ZDTLO20GC;DkW|dP;uIq+qq76pbK{$K%@f z^=BbsM_}@)oxfzDU19G5z%M*Jkw^C}H^UWW{~9-cf{NjG^#y+Q;_T+$a4>?zj6Ez| zV6y_nXh*iw!FOQ!h0qhiLojbh#@I|Y;!wt%u@yNkIc40@R6hPnxu*TkwVy0)m zS1LNT{O0l10{(@k`U%Y8g`EJPO)P3yD5#~wI5;e7P|ndt$(4EL0b{mNtaKD`beA*W zcoCOrmQ0Z)YN=GiRnB?>tR0rKx|RKxl69j@<>>ms-?g)gM@z9&k%+7DD5zx80}+kHnEtgGj!K%8S)TDHSk1Fn!t%_%0zJOTci zLZ$!LO*=c8fZ_duZD6cE*q8$VCOm4^6sZM1L3QlNxC$bi>VS)||4`mR4xH@~;5T+* ztfwS;PnRbrXa~40HfYM^(9~0hR34+6D~*O(^JY~9U*JNiv^YyJ0o2syu3{*^hJW1f ze1D@H2M1@0;n)jF8E<9*vh0*h0Wb-klhMEwfk;AS)U(fH<^o@gN4t+gL@^vqNNeJk zi379%l%bCl!B(x}4!f`6FO|#3{uH^vd2snEf6(C8(z6#>^cQ zbVE|@xZRmvvf(Ux4!`P-&heb4C98O!!?G(=NN3yDJ!@S>)=BcvX=^5 zI%CkbHv~cfUT@j8AYxAu_2Qz&^5p|IrCLDI@k#Q(yq5xzejG8&TAw*Ps4) zd(FW6V?YhgGP9hM(lOrVr4?*nGoy8*EfzOq)&v{CtQH=^F@=a;U4DAmKCU-(eIp>d zKG>8T)vaJ5W^QQ~PUf*3Cj`VMru$*N^y-e#?EP9Xpv;OotcpA&FF4$}7Ezj<*{|X> z`7$+n*xJ0Mo3y`;Kiu!Z!^$4Ex} z+0qF(?(+VqSD!9nfG+RAS`0uI9)B{0LQYGvoTD`oytWV28mmA*oK_DcJmy9x(&=+b z7ETJV5%9ctJO~|d6&5@bY_GV+<%(qC7Zn#4l$zCHI zupZ<8WYf{p_1y6mnJ6}Jsx_eY;zM&0e1(;WK6B;(f53cx0hd352Jst2sS?NuD9gZI zqB5>`Iwu}$8&n_!Ei7&3vQZWO&i#y@!=9E72x}8ZBd8kOIluwRqGahVN!tLAr;E|E z8J@F&fGAB!WicT1nNvC&*dHS^z;}u@dz*kXk1v?|yzn(94|d{UE(Bf^oQe6yp5W>o zZdj}}RTf-;jFCA@iVc=E^^vyV9Yo!V01oAUl{xd?s}q(SRccCcN`o4i@lM%yOQwg0%5EqR*BWv`^aFTz_Dq@ z*tATT_pWg88@qC3!*O4;TqLvKJ2UsSaL5$UKI6tVuX^3W(NFk!YI{C{Jj^#{zJ%(} zDJ*s6pAMi^YxRVTRqFuwnL2Dbk-Yh@$aQh}RB_Q57xDChCAPsMV=pdnLx$%GGxf?) zp5F&yM{Uo0wr94$8w%$-gr!BMeq)Huz?9b7K;Wx1$qqi;+G7sV-Tn5gy89PmGKuZ0 z0N0Bjunax=nIz#Ln~XLcNEGlb=*ouGdixq_L-zs+J0Bls-2;H!>11W zsnLduI9kaauAq)p&px~9OqWwhC;ckcW_2^pbFsq?gN4)B*T_oCL|KjysW90$iUdzr z;)Gun_=oM(4tQf(^LG?%ui2#mJVbROa7^)Cy{(6%vn`9VBN76K7;ug-XPE_8p5=5f z{me*d5l4+$@FqYX;I$2*+!KzkOOe9}?=of7hZEok9cGee)}Ug?P#qIMyuLY=jMtAL#wt?{6R9>z&j>h?t zSo!o@1fj2QTRXcrYxfmJ0&53?K*6MBg99djhxLqK8Nu_nqo~nPIee?u9FC(4^P+bI zM%7al&QORyE#T@5+-6+AW-IJ%i#WdAv*IU3bCBZj+qB_U%?=usp<~z_^EU6(fo<^z)s09N)K1Dti=_eRTaKJRd|UqutM&k>k%CAa%3$0 z-Br`AXfBmB@CJ+!w*$vfTER~ScsaUOeQ5(HofZ5dTc?NPxL=F;vD76+GH3WEaE1l! zrS+O9vj7~@nux&gI-FyMC3~M5TmB2^L56Lhg z*J<&S%CV~voi}l<;s-p-@Cq$~?Dyap@D2)O=0oK`0mlFIm6ZZVS4IYCbZeD2_#gaM z_H!84lLBgF07={MJE%2=#+k+M6wLiN&VL>c6L#}DG!teQ;LKAxH(T0`SUYI*#8d9z zuQ^ZKO@=ku7|Qb=xXpR2f$@4V@L#M!8Yy$eEldh{SI0A9)qK|ha{U@jjbm0^JgNyu z5aFD$C5%*9T2lgCDxPTt+o_DqQOlyXV<%1bv$%!XWHFo<7i~xju%uy)e1MDK6j6aI zYrZ+QLe#B(^Y>uXtDOU{qHdNoWeI*NHU9gYvA~0H;*n2=uNw4!L)!d+@Yk=4YCNvc z0+v&jk^OONf;lzU;URFUSlQ&zL|8Yte_P;6wkB+x_2&!x+uA9lyWj72^UvRVdq)!R z#4n;rVWVY;di}*&645*>gCn?4v6bf4k4zm#?J&HgSf@SGzl;xKUm1Lj1^ab?inzSk z0WR-G;>aq?S&D1*IBuz{krno*uXz6P`b&F$s@Hn);THV67M*4UDbK331->zlLBV`pU`y`2S6TwB)fyJ?)@7Thh+ zcsCL>1c%@f+}+*X-ARxT+>+oDEVz4uy9FmW1bv-)HTCAs%)Q@yGnLoWt^-xn-oLZ< zf33aN?mB0ebOr(ImjXtfYXahO@}wy<(JTXS9htL+UvKOj_;!w+jM%hf7)!9rM6#%v6{VgEQmxPG+K`hl z@h=RoI*Ezcom4ACV;*h5-|wAvHF^lavueNkz7??Qij{~knNesy_}DP6?evE&sF?^bdW=6jo=_d0Mkr|_BV;B~5Wj%0eo9g$Fs;w84(!{iX@>JBb*43l*O zCqqT2tIumS5%v8=Z@M?0RahQiQp6E>1@}W8 zot@L8zb3WII;l;N#+=s*aE#jvLauF*JW%89`~o#8ufX4{mRjxbJX;BNPa=BhsOl6QE!TB& zp$TV7w5WKz*YP$uP27S+jxJrUqk<(Vt^4y=4<<7Jfd=Ks zYdS{Bj+%S>eA%;-j-u5k#d#bOjFenMk9J4<85{hcXmc9;dLDq1s#B$7k}{-o*j&WS zEF;$)RhSn{)bPM3fNwIl`#fiEprxHQ?o1IL0bGuHPjO{J*YeQ;0oPYWY=JL?yJ(z( z4k_)cB&BPBDC3Pelf$Q+SS|AGDOe(M+aJRjBbO!@#^ayGzOV>&`%XNL62O$6YVebu zI!fv!Yk{zs+7%c`JEz_5=YM&xn9JM9dLJ^8!Zt&k_DRZtjU+jc$YaS=kh)k2zUy63*qYaI!*%a8^SgdinNc~E~*7zI(tH>NbB*Z z&ecAAZVG5;a+!*i@&}Kfm2d8Kq{d%;<74{P84!#z$|qmtYMXcJ(w{^m@|`%zaLm@> zGQi!ZE#suj>}N95lO1%cW3l4@d5EP2Y1^eKI~lZdyF-I8(YUvv7464fYevyB%b`T z(SQ%J4eV-_3s&H7=#vIHRiGmsi63hoLQ)QJmKl_IOtR9jN8t=MzJ(RVa}@JiN&?iw zjVBJvFTO6vc14Z57v4MR`YlBl4}C+9tbCPHq?Up(_%$^$B*a-{fDGJu(wDToV_#~S z?D6vx%_-(UT*+JQ_f4Wzu|l&w__~sAhE2J3y1Od8AScOlJ-IajZQ5+OiWss?33t#3 z3=Qta37 z8!C7K1-A|M2F`A8I#GPyCEAbR9YBsHf1WDlZn~9mia#^q|8rv_d_kXZcd&Kyk$hpz zuR$TdSR_Pj^Sf4f$?QnLI4)}Y2hnf!o)Y`~uP`{Pxcck33O8O>6Qw8aVvpE@=z`1K)y*>`|*zM!CoLz#Ah|2$03zsJX-{0LXBXi>{)dQO-=feNmYF7rSU6tJ z*G4$(1~(BCw|sc?vwSnl``|`Zym~7HnI=XwmI4Ozw!{_cod5(ZI~%6VtUCT=^*u{u zR@0FIK$3oZ$mYBSa<^?7zcQ-}k6Y6?Pm6hYXzTR_&C+fbgt#CQCyJYpSn3J5x~~&8 zdIU!Xj7Z8bJ+m^LLmN@oJhtlPvB5YjrZkZO$mS0x4fLW}(y&}bKG1HJAossd?U*4P zg>!3*?I_ngjlh4~6im&lmkHD}TjAR%yNwdtX0Gh%U9h*GYt*b>q=}|VE0{H5#cy8- zPzjyuEs;W&=#yCm;rJs$8VOkl#8F~tAqh#ETGW3z0<(BU`$ zUlv=~-BEMvKl4kI@IgAZ^QL+36Fakj!t}5^U}kpqeQ(Ce*SkUI+vJl46=jj;6ajH{ zV)a^iFFteK(95b`l`tDhQtf-_yomp;DpIH@)Z)&w;`Lzk9^rDTnoP92kqZ?3ydd(; z4Lp}@FgC~ehO6(-HlK!h`=93y6L2P?gq!mS?SQyzYaVY-x((YrHeOl7py_$&>jDzy zPLu6M&inl(t7JWH60tbBw=W=bFT;|peL9FRKzKB1;`9ATKlYgfG4w~P{F`q~KVS}1 zenj0BogVtAshYdqJ}khr5QdkBgrJ6Hisd8IN8TcJa@)+w+ji$uC$yZZaK)p6`S`;z z!JlK$F^xL@eJy>r*5I+Tg+`t`8FmpIDGym<(a;tHe7aM>7JwX1^81W(u<>hj?#~mh zbQmqsLx{NvHEY|7QC=P0Z!lF6T?PjnvbJAKRJBlaPI9l|J=KV3o=TEM2P4LQtg!5k zV9YfFv~>qf2-Z@H(%Mwdb5n{+^^xTuoBiC zrYsIEqTVgI*@|8{sPd;un6XAe+(~>*vfyRjF=&w;At_NwHYdwF{8*+`Z%;Uo*)`+! z;Bu%P6g;WCBsqv)5{JcMEBefU;<*Z8q_Z78oYLAZ3NtKonlP=5brb>~qcWJrQj-ja z#+ra^hLKpx?ZM+%lyAn_^3lDY3gk)mzai!r(d=`iw%0Aszr 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 literal 0 HcmV?d00001 diff --git a/docs/moving-pictures/taxonomy.qza b/docs/moving-pictures/taxonomy.qza index 503e72179057054593c49c9fd40f89d2dc0a1764..cace52c8dd23cf68c781f07bc3dc5353c5f3d7c5 100644 GIT binary patch delta 30229 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 ?tU`aaZ; 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 Ba9scZ diff --git a/empress/support_files/js/empress.js b/empress/support_files/js/empress.js index 3724f3b24..ba0d06351 100644 --- a/empress/support_files/js/empress.js +++ b/empress/support_files/js/empress.js @@ -158,12 +158,29 @@ define([ this._treeData[i].splice(this._tdToInd.visible, 0, true); } + /** + * @type {String} + * Text to display at the bottom of the continuous legend when some + * values in a continuous are either missing or non-numeric. + */ + this._continuousMissingNonNumericWarning = + "Some value(s) in this field were missing and/or not numeric. " + + "These value(s) have been left out of the gradient, and the " + + "corresponding nodes have been set to the default color." + /** + * @type {String} + * Short version of `_continuousMissingNonNumericWarning` that will + * be shown in the exported SVG legend. + */ + // this._continuousMissingNonNumericWarningShort = + "" /** * @type {Legend} * Legend describing the way the tree is colored. * @private */ this._legend = new Legend(document.getElementById("legend-main")); + this._legend.setM /** * @type {BiomTable} diff --git a/empress/support_files/js/legend.js b/empress/support_files/js/legend.js index 1c70308d6..5f14e4488 100644 --- a/empress/support_files/js/legend.js +++ b/empress/support_files/js/legend.js @@ -160,6 +160,7 @@ define(["jquery", "underscore", "util"], function ($, _, util) { this._midValStr = gradInfo.midValStr; this._maxValStr = gradInfo.maxValStr; this._missingNonNumericWarningShown = gradInfo.missingNonNumerics; + console.log(this._missingNonNumericWarningShown) // We only save this to a local variable (not an attribute of the // class) since we only use it for the HTML representation of the @@ -185,8 +186,9 @@ define(["jquery", "underscore", "util"], function ($, _, util) { containerSVG.innerHTML = totalHTMLSVG; this._container.appendChild(containerSVG); if (this._missingNonNumericWarningShown) { + var missingText = this.getMissingNonNumericWarning(); var warningP = document.createElement("p"); - warningP.innerText = Legend.CONTINUOUS_MISSING_NON_NUMERIC_WARNING; + warningP.innerText = missingText.full; warningP.classList.add("side-panel-notes"); // All legends have white-space: nowrap; set to prevent color // labels from breaking onto the next line (which would look @@ -542,6 +544,7 @@ define(["jquery", "underscore", "util"], function ($, _, util) { // But first, let's add a warning about missing / non-numeric values if // needed. if (this._missingNonNumericWarningShown) { + var missingText = this.getMissingNonNumericWarning(); // We use a hanging baseline to add some extra vertical space // between the gradient minimum value and the warning text. This // seems to look nice. @@ -551,9 +554,9 @@ define(["jquery", "underscore", "util"], function ($, _, util) { '" y="' + (gradientTopY + gradientHeight + Legend.HALF_LINE_HEIGHT) + '" dominant-baseline="hanging">' + - Legend.CONTINUOUS_MISSING_NON_NUMERIC_WARNING_SHORT + + missingText.short + "\n"; - texts.push(Legend.CONTINUOUS_MISSING_NON_NUMERIC_WARNING_SHORT); + texts.push(missingText.short); } _.each(texts, function (text) { maxLineWidth = Math.max( @@ -742,6 +745,28 @@ define(["jquery", "underscore", "util"], function ($, _, util) { }; }; + Legend.prototype.setMissingNonNumericWarning = function( + full, + short=null + ) { + this.continuousMissingNonNumericWarning = full; + this.continuousMissingNonNumericWarningShort = short; + } + + Legend.prototype.getMissingNonNumericWarning = function() { + var missingText = { + full: Legend.CONTINUOUS_MISSING_NON_NUMERIC_WARNING, + short: Legend.CONTINUOUS_MISSING_NON_NUMERIC_WARNING_SHORT, + }; + if (this.hasOwnProperty("continuousMissingNonNumericWarning")) { + missingText.full = this.continuousMissingNonNumericWarning; + } + if (this.hasOwnProperty("continuousMissingNonNumericWarningShort")) { + missingText.short = this.continuousMissingNonNumericWarningShort; + } + return missingText; + } + // Shown at the bottom of continuous legends in the page when some values // in a continuous field can't be represented on a gradient Legend.CONTINUOUS_MISSING_NON_NUMERIC_WARNING = From 942f5b02a9d9da6473462839662049dba8a75e99 Mon Sep 17 00:00:00 2001 From: kcantrel Date: Fri, 11 Jun 2021 01:25:28 -0700 Subject: [PATCH 18/23] added test/fixed warning --- empress/support_files/css/empress.css | 2 +- empress/support_files/js/empress.js | 15 ++-- empress/support_files/js/legend.js | 15 ++-- tests/test-empress.js | 116 ++++++++++++++++++++++++++ 4 files changed, 130 insertions(+), 18 deletions(-) diff --git a/empress/support_files/css/empress.css b/empress/support_files/css/empress.css index 2056ba472..39665268c 100644 --- a/empress/support_files/css/empress.css +++ b/empress/support_files/css/empress.css @@ -604,7 +604,7 @@ p.side-header button:hover, #legend-main { margin: 20px; min-width: 150px; - max-width: 33vw; + max-width: 30vw; min-height: 30px; max-height: 85vh; padding-bottom: 0.1px; diff --git a/empress/support_files/js/empress.js b/empress/support_files/js/empress.js index ba0d06351..f747b7b71 100644 --- a/empress/support_files/js/empress.js +++ b/empress/support_files/js/empress.js @@ -166,21 +166,18 @@ define([ this._continuousMissingNonNumericWarning = "Some value(s) in this field were missing and/or not numeric. " + "These value(s) have been left out of the gradient, and the " + - "corresponding nodes have been set to the default color." - /** - * @type {String} - * Short version of `_continuousMissingNonNumericWarning` that will - * be shown in the exported SVG legend. - */ - // this._continuousMissingNonNumericWarningShort = - "" + "corresponding nodes have been set to the default color."; /** * @type {Legend} * Legend describing the way the tree is colored. * @private */ this._legend = new Legend(document.getElementById("legend-main")); - this._legend.setM + this._legend.setMissingNonNumericWarning( + "Some value(s) in this field were missing and/or not numeric. " + + "These value(s) are not included in the gradient, and the " + + "associated nodes have been left as the default color." + ); /** * @type {BiomTable} diff --git a/empress/support_files/js/legend.js b/empress/support_files/js/legend.js index 5f14e4488..46a44a5a8 100644 --- a/empress/support_files/js/legend.js +++ b/empress/support_files/js/legend.js @@ -160,7 +160,6 @@ define(["jquery", "underscore", "util"], function ($, _, util) { this._midValStr = gradInfo.midValStr; this._maxValStr = gradInfo.maxValStr; this._missingNonNumericWarningShown = gradInfo.missingNonNumerics; - console.log(this._missingNonNumericWarningShown) // We only save this to a local variable (not an attribute of the // class) since we only use it for the HTML representation of the @@ -180,7 +179,7 @@ define(["jquery", "underscore", "util"], function ($, _, util) { "svg" ); containerSVG.setAttribute("width", "100%"); - containerSVG.setAttribute("height", "100%"); + containerSVG.setAttribute("height", "80%"); containerSVG.setAttribute("style", "display: block; margin: auto;"); // just kinda plop the combined SVG code into containerSVG's HTML containerSVG.innerHTML = totalHTMLSVG; @@ -745,15 +744,15 @@ define(["jquery", "underscore", "util"], function ($, _, util) { }; }; - Legend.prototype.setMissingNonNumericWarning = function( + Legend.prototype.setMissingNonNumericWarning = function ( full, - short=null + short = null ) { this.continuousMissingNonNumericWarning = full; this.continuousMissingNonNumericWarningShort = short; - } + }; - Legend.prototype.getMissingNonNumericWarning = function() { + Legend.prototype.getMissingNonNumericWarning = function () { var missingText = { full: Legend.CONTINUOUS_MISSING_NON_NUMERIC_WARNING, short: Legend.CONTINUOUS_MISSING_NON_NUMERIC_WARNING_SHORT, @@ -763,9 +762,9 @@ define(["jquery", "underscore", "util"], function ($, _, util) { } if (this.hasOwnProperty("continuousMissingNonNumericWarningShort")) { missingText.short = this.continuousMissingNonNumericWarningShort; - } + } return missingText; - } + }; // Shown at the bottom of continuous legends in the page when some values // in a continuous field can't be represented on a gradient diff --git a/tests/test-empress.js b/tests/test-empress.js index 41be6f5ce..402bb27c6 100644 --- a/tests/test-empress.js +++ b/tests/test-empress.js @@ -353,6 +353,122 @@ require([ } }); + test("Test colorByFeatureMetadata, continuous", function () { + // get color map + var cm = this.empress.colorByFeatureMetadata( + "f1", + "Viridis", + "tip", + false, + true + ); + var properties = [ + "gradientID", + "gradientSVG", + "maxValStr", + "midValStr", + "minValStr", + "missingNonNumerics", + "pageSVG", + ]; + + // make sure color gradient returns correct keyInfo + var resultProperties = util.naturalSort(Object.keys(cm)); + deepEqual(resultProperties, properties); + + // make sure nodes were assigned correct color + var node; + var group1 = new Set([2, 3, 4]); + var group2 = new Set([1, 6]); + for (node = 1; node <= 7; node++) { + if (group1.has(node)) { + deepEqual( + this.empress.getNodeInfo(node, "color"), + 5505348, + "node: " + node + ); + } else if (group2.has(node)) { + deepEqual( + this.empress.getNodeInfo(node, "color"), + 2484478, + "node: " + node + ); + } else { + deepEqual(this.empress.getNodeInfo(node, "color"), 3289650); + } + } + }); + + test("Test colorByFeatureMetadata, continuous", function () { + // get color map + var cm = this.empress.colorByFeatureMetadata( + "f1", + "Viridis", + "tip", + false, + true + ); + var properties = [ + "gradientID", + "gradientSVG", + "maxValStr", + "midValStr", + "minValStr", + "missingNonNumerics", + "pageSVG", + ]; + + // make sure color gradient returns correct keyInfo + var resultProperties = util.naturalSort(Object.keys(cm)); + deepEqual(resultProperties, properties); + + // make sure nodes were assigned correct color + var node; + var group1 = new Set([2, 3, 4]); + var group2 = new Set([1, 6]); + for (node = 1; node <= 7; node++) { + if (group1.has(node)) { + deepEqual( + this.empress.getNodeInfo(node, "color"), + 5505348, + "node: " + node + ); + } else if (group2.has(node)) { + deepEqual( + this.empress.getNodeInfo(node, "color"), + 2484478, + "node: " + node + ); + } else { + deepEqual(this.empress.getNodeInfo(node, "color"), 3289650); + } + } + }); + + test("Test colorByFeatureMetadata, continuous no numberic values", function () { + // hack to add a metadata column with no numberic data + this.empress._featureMetadataColumns = ["f1", "f2", "f3"]; + this.empress._tipMetadata = { + 1: ["2", "2", "n1"], + 2: ["1", "2", "n2"], + 3: ["1", "2", "n3"], + 6: ["2", "2", "n4"], + }; + var faileFunctionCalled = false; + var failedFunction = () => { + faileFunctionCalled = true; + }; + var cm = this.empress.colorByFeatureMetadata( + "f3", + "Viridis", + "tip", + false, + true, + failedFunction + ); + ok(faileFunctionCalled, "continousFailedFunc was not called."); + }); + test("Test _projectObservations, all tips in obs", function () { var obs = { g1: new Set([2, 3]), From 9bd596184a9c6de66d59eb94b17801c378e71529 Mon Sep 17 00:00:00 2001 From: kcantrel Date: Fri, 11 Jun 2021 01:27:46 -0700 Subject: [PATCH 19/23] fixed docs --- docs/moving-pictures/taxonomy-orig.qza | Bin 71370 -> 0 bytes docs/moving-pictures/taxonomy.qza | Bin 71033 -> 71370 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 docs/moving-pictures/taxonomy-orig.qza diff --git a/docs/moving-pictures/taxonomy-orig.qza b/docs/moving-pictures/taxonomy-orig.qza deleted file mode 100644 index 503e72179057054593c49c9fd40f89d2dc0a1764..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71370 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 z 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%0Aszr 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 diff --git a/docs/moving-pictures/taxonomy.qza b/docs/moving-pictures/taxonomy.qza index cace52c8dd23cf68c781f07bc3dc5353c5f3d7c5..503e72179057054593c49c9fd40f89d2dc0a1764 100644 GIT binary patch delta 30562 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 ?tU`aaZ; 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 Ba9scZ delta 30229 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 Date: Sun, 13 Jun 2021 10:56:26 -0700 Subject: [PATCH 20/23] abstracted Legend class --- empress/support_files/js/barplot-layer.js | 10 +- empress/support_files/js/barplot-legend.js | 35 ++++++ empress/support_files/js/empress.js | 26 ++-- empress/support_files/js/legend.js | 79 +++++++----- .../js/sample-feature-color-legend.js | 36 ++++++ .../templates/empress-template.html | 4 +- tests/index.html | 2 + tests/test-animation-panel-handler.js | 6 +- tests/test-empress.js | 16 ++- tests/test-legend.js | 113 ++++++++++++------ 10 files changed, 226 insertions(+), 101 deletions(-) create mode 100644 empress/support_files/js/barplot-legend.js create mode 100644 empress/support_files/js/sample-feature-color-legend.js diff --git a/empress/support_files/js/barplot-layer.js b/empress/support_files/js/barplot-layer.js index f0c0119e1..196c5e95a 100644 --- a/empress/support_files/js/barplot-layer.js +++ b/empress/support_files/js/barplot-layer.js @@ -3,9 +3,9 @@ define([ "underscore", "spectrum", "Colorer", - "Legend", + "BarplotLegend", "util", -], function ($, _, spectrum, Colorer, Legend, util) { +], function ($, _, spectrum, Colorer, BarplotLegend, util) { /** * * @class BarplotLayer @@ -634,14 +634,14 @@ define([ this.colorLegendDiv.classList.add("hidden"); this.colorLegendDiv.classList.add("legend"); this.colorLegendDiv.classList.add("barplot-layer-legend"); - this.colorLegend = new Legend(this.colorLegendDiv); + this.colorLegend = new BarplotLegend(this.colorLegendDiv); this.layerDiv.appendChild(this.colorLegendDiv); this.lengthLegendDiv = document.createElement("div"); this.lengthLegendDiv.classList.add("hidden"); this.lengthLegendDiv.classList.add("legend"); this.lengthLegendDiv.classList.add("barplot-layer-legend"); - this.lengthLegend = new Legend(this.lengthLegendDiv); + this.lengthLegend = new BarplotLegend(this.lengthLegendDiv); this.layerDiv.appendChild(this.lengthLegendDiv); // TODO: if possible, making the legend text selectable (overriding @@ -757,7 +757,7 @@ define([ * effect) will be excluded from the Array. However, if all legends are * active, the order in the Array will always be color then length. * - * @return {Array} Array of Legend objects + * @return {Array} Array of BarplotLegend objects */ BarplotLayer.prototype.getLegends = function () { var containedLegends = [this.colorLegend, this.lengthLegend]; diff --git a/empress/support_files/js/barplot-legend.js b/empress/support_files/js/barplot-legend.js new file mode 100644 index 000000000..820230840 --- /dev/null +++ b/empress/support_files/js/barplot-legend.js @@ -0,0 +1,35 @@ +define(["Legend"], function (Legend) { + /** + * @class SampleFeatureColorLegend + */ + function BarplotLegend(container) { + // call Legend constructor + Legend.call(this, container); + + /** + * @type {String} + * Text to display at the bottom of the continuous legend when some + * values in a continuous are either missing or non-numeric. + */ + this.continuousMissingNonNumericWarning = + "Some value(s) in this field were missing and/or not numeric. " + + "These value(s) have been left out of the gradient, and no " + + "bar(s) have been drawn for them."; + + /** + * @type {String} + * Short version of the above warning, shown for the same legends when + * exported to SVG + */ + this.continuousMissingNonNumericWarningShort = + "Missing / non-numeric value(s) omitted."; + } + + // inherit Legend functions + BarplotLegend.prototype = Object.create(Legend.prototype); + + // set BarplotLegend's constructor + BarplotLegend.prototype.constructor = BarplotLegend; + + return BarplotLegend; +}); diff --git a/empress/support_files/js/empress.js b/empress/support_files/js/empress.js index f747b7b71..586e1be7e 100644 --- a/empress/support_files/js/empress.js +++ b/empress/support_files/js/empress.js @@ -6,7 +6,7 @@ define([ "VectorOps", "CanvasEvents", "BarplotPanel", - "Legend", + "SampleFeatureColorLegend", "util", "chroma", "LayoutsUtil", @@ -20,7 +20,7 @@ define([ VectorOps, CanvasEvents, BarplotPanel, - Legend, + SampleFeatureColorLegend, util, chroma, LayoutsUtil, @@ -159,24 +159,12 @@ define([ } /** - * @type {String} - * Text to display at the bottom of the continuous legend when some - * values in a continuous are either missing or non-numeric. - */ - this._continuousMissingNonNumericWarning = - "Some value(s) in this field were missing and/or not numeric. " + - "These value(s) have been left out of the gradient, and the " + - "corresponding nodes have been set to the default color."; - /** - * @type {Legend} + * @type {SampleFeatureColorLegend} * Legend describing the way the tree is colored. * @private */ - this._legend = new Legend(document.getElementById("legend-main")); - this._legend.setMissingNonNumericWarning( - "Some value(s) in this field were missing and/or not numeric. " + - "These value(s) are not included in the gradient, and the " + - "associated nodes have been left as the default color." + this._legend = new SampleFeatureColorLegend( + document.getElementById("legend-main") ); /** @@ -2514,7 +2502,7 @@ define([ '" has less than 2 unique numeric values, so it cannot be ' + "used for continuous coloring. " + "Using discrete coloring instead."; - util.toastMsg(msg, 5000); + util.toastMsg("Feature metadata coloring error", msg, 5000); // assign colors to unique values colorer = new Colorer( color, @@ -2545,6 +2533,8 @@ define([ // color tree this._colorTree(obs, cm); + + this.resizeLegend(); if (continuous) { this._legend.addContinuousKey(cat, keyInfo); } else { diff --git a/empress/support_files/js/legend.js b/empress/support_files/js/legend.js index 46a44a5a8..4823dfce5 100644 --- a/empress/support_files/js/legend.js +++ b/empress/support_files/js/legend.js @@ -1,6 +1,7 @@ define(["jquery", "underscore", "util"], function ($, _, util) { /** * + * @Abstract * @class Legend * * Creates a legend within a given HTML element. (You'll need to call @@ -11,7 +12,6 @@ define(["jquery", "underscore", "util"], function ($, _, util) { * will be added. * * @return {Legend} - * @constructs Legend */ function Legend(container) { /** @@ -102,6 +102,25 @@ define(["jquery", "underscore", "util"], function ($, _, util) { */ this._minLengthVal = null; this._maxLengthVal = null; + + /** + * @type {String} + * Text to display at the bottom of the continuous legend when some + * values in a continuous are either missing or non-numeric. + */ + this.continuousMissingNonNumericWarning = null; + + /** + * @type {String} + * Short version of the above warning, shown for the same legends when + * exported to SVG + */ + this.continuousMissingNonNumericWarningShort = null; + + // make Legend an abstract class + if (this.constructor === Legend) { + throw new Error("Abstract class Legend can not be instantiated."); + } } /** @@ -183,7 +202,20 @@ define(["jquery", "underscore", "util"], function ($, _, util) { containerSVG.setAttribute("style", "display: block; margin: auto;"); // just kinda plop the combined SVG code into containerSVG's HTML containerSVG.innerHTML = totalHTMLSVG; - this._container.appendChild(containerSVG); + + // We need to put the svg container inside a div otherwise some unwanted + // behavior will occur when users resize the legend. + // The gradient bar's height is set to be 80% of the legend's + // height. This works for most cases howevr, some issues come up when + // the uesr resizes the legned. i.e. the height of the graident color + // bar will continuously be set to 80% of the legend's height which + // can hide the warning message(s) that appear benith the gradient. + // By putting the svg container inside a div, the gradient color bar + // will be set to 80% of the initial size of the legend and will remain + // fixed when users resize the legend. + var fixSizeDiv = document.createElement("div"); + fixSizeDiv.appendChild(containerSVG); + this._container.appendChild(fixSizeDiv); if (this._missingNonNumericWarningShown) { var missingText = this.getMissingNonNumericWarning(); var warningP = document.createElement("p"); @@ -744,40 +776,23 @@ define(["jquery", "underscore", "util"], function ($, _, util) { }; }; - Legend.prototype.setMissingNonNumericWarning = function ( - full, - short = null - ) { - this.continuousMissingNonNumericWarning = full; - this.continuousMissingNonNumericWarningShort = short; - }; - + /** + * Returns the full and short versions of the continuous missing + * non-numeric warning messages. + * + * @return {Object} The object is formated as follows + * { + * full: messageString, + * short: messageString + * } + */ Legend.prototype.getMissingNonNumericWarning = function () { - var missingText = { - full: Legend.CONTINUOUS_MISSING_NON_NUMERIC_WARNING, - short: Legend.CONTINUOUS_MISSING_NON_NUMERIC_WARNING_SHORT, + return { + full: this.continuousMissingNonNumericWarning, + short: this.continuousMissingNonNumericWarningShort, }; - if (this.hasOwnProperty("continuousMissingNonNumericWarning")) { - missingText.full = this.continuousMissingNonNumericWarning; - } - if (this.hasOwnProperty("continuousMissingNonNumericWarningShort")) { - missingText.short = this.continuousMissingNonNumericWarningShort; - } - return missingText; }; - // Shown at the bottom of continuous legends in the page when some values - // in a continuous field can't be represented on a gradient - Legend.CONTINUOUS_MISSING_NON_NUMERIC_WARNING = - "Some value(s) in this field were missing and/or not numeric. " + - "These value(s) have been left out of the gradient, and no bar(s) " + - "have been drawn for them."; - - // Short version of the above warning, shown for the same legends when - // exported to SVG - Legend.CONTINUOUS_MISSING_NON_NUMERIC_WARNING_SHORT = - "Missing / non-numeric value(s) omitted."; - // Various SVG attributes stored here since they're used every time the // export function is called Legend.LINE_HEIGHT = 54; diff --git a/empress/support_files/js/sample-feature-color-legend.js b/empress/support_files/js/sample-feature-color-legend.js new file mode 100644 index 000000000..e0e94afc7 --- /dev/null +++ b/empress/support_files/js/sample-feature-color-legend.js @@ -0,0 +1,36 @@ +define(["Legend"], function (Legend) { + /** + * @class SampleFeatureColorLegend + */ + function SampleFeatureColorLegend(container) { + // call Legend constructor + Legend.call(this, container); + + /** + * @type {String} + * Text to display at the bottom of the continuous legend when some + * values in a continuous are either missing or non-numeric. + */ + this.continuousMissingNonNumericWarning = + "Some value(s) in this field were missing and/or not numeric. " + + "These value(s) have been left out of the gradient, and the " + + "corresponding nodes have been set to the default color."; + + /** + * @type {String} + * Short version of the above warning, shown for the same legends when + * exported to SVG + */ + this.continuousMissingNonNumericWarningShort = + "Missing / non-numeric value(s)' associated nodes left as " + + "default color."; + } + + // inherit Legend functions + SampleFeatureColorLegend.prototype = Object.create(Legend.prototype); + + // set SampleFeatureColorLegend's constructor + SampleFeatureColorLegend.prototype.constructor = SampleFeatureColorLegend; + + return SampleFeatureColorLegend; +}); diff --git a/empress/support_files/templates/empress-template.html b/empress/support_files/templates/empress-template.html index d3d14e8d5..4e80e8cf2 100644 --- a/empress/support_files/templates/empress-template.html +++ b/empress/support_files/templates/empress-template.html @@ -114,7 +114,9 @@

'util' : './js/util', 'LayoutsUtil': './js/layouts-util', 'ExportUtil': './js/export-util', - 'TreeController': './js/tree-controller' + 'TreeController': './js/tree-controller', + 'SampleFeatureColorLegend': './js/sample-feature-color-legend', + 'BarplotLegend': './js/barplot-legend', } }); diff --git a/tests/index.html b/tests/index.html index 57f5ea8b2..526e28154 100644 --- a/tests/index.html +++ b/tests/index.html @@ -205,6 +205,8 @@ 'LayoutsUtil' : './support_files/js/layouts-util', 'ExportUtil' : './support_files/js/export-util', 'TreeController' : './support_files/js/tree-controller', + 'SampleFeatureColorLegend': './support_files/js/sample-feature-color-legend', + 'BarplotLegend': './support_files/js/barplot-legend', /* test utility code */ 'UtilitiesForTesting' : './../tests/utilities-for-testing', diff --git a/tests/test-animation-panel-handler.js b/tests/test-animation-panel-handler.js index b17687126..3a0eb3012 100644 --- a/tests/test-animation-panel-handler.js +++ b/tests/test-animation-panel-handler.js @@ -5,7 +5,7 @@ require([ "BPTree", "Empress", "BiomTable", - "Legend", + "SampleFeatureColorLegend", "util", "Colorer", ], function ( @@ -15,7 +15,7 @@ require([ BPTree, Empress, BiomTable, - Legend, + SampleFeatureColorLegend, util, Colorer ) { @@ -96,7 +96,7 @@ require([ var empress = new Empress({ size: 0 }, biom, [], [], {}, {}, null); var animator = new Animator( empress, - new Legend( + new SampleFeatureColorLegend( document.createElement("div"), document.createElement("div"), document.createElement("div") diff --git a/tests/test-empress.js b/tests/test-empress.js index 402bb27c6..70b71cc8f 100644 --- a/tests/test-empress.js +++ b/tests/test-empress.js @@ -376,6 +376,12 @@ require([ var resultProperties = util.naturalSort(Object.keys(cm)); deepEqual(resultProperties, properties); + deepEqual(cm.gradientID, "Gradient-1"); + deepEqual(cm.maxValStr, "2"); + deepEqual(cm.midValStr, "1.5"); + deepEqual(cm.minValStr, "1"); + deepEqual(cm.missingNonNumerics, false); + // make sure nodes were assigned correct color var node; var group1 = new Set([2, 3, 4]); @@ -445,8 +451,8 @@ require([ } }); - test("Test colorByFeatureMetadata, continuous no numberic values", function () { - // hack to add a metadata column with no numberic data + test("Test colorByFeatureMetadata, continuous: failure due to no numberic values", function () { + // hack to add a metadata column with no numeric data this.empress._featureMetadataColumns = ["f1", "f2", "f3"]; this.empress._tipMetadata = { 1: ["2", "2", "n1"], @@ -454,9 +460,9 @@ require([ 3: ["1", "2", "n3"], 6: ["2", "2", "n4"], }; - var faileFunctionCalled = false; + var failedFunctionCalled = false; var failedFunction = () => { - faileFunctionCalled = true; + failedFunctionCalled = true; }; var cm = this.empress.colorByFeatureMetadata( "f3", @@ -466,7 +472,7 @@ require([ true, failedFunction ); - ok(faileFunctionCalled, "continousFailedFunc was not called."); + ok(failedFunctionCalled, "continousFailedFunc was called."); }); test("Test _projectObservations, all tips in obs", function () { diff --git a/tests/test-legend.js b/tests/test-legend.js index 81759b730..5bb735587 100644 --- a/tests/test-legend.js +++ b/tests/test-legend.js @@ -2,15 +2,32 @@ require([ "jquery", "chroma", "UtilitiesForTesting", - "Legend", + "BarplotLegend", + "SampleFeatureColorLegend", "Colorer", -], function ($, chroma, UtilitiesForTesting, Legend, Colorer) { +], function ( + $, + chroma, + UtilitiesForTesting, + BarplotLegend, + SampleFeatureColorLegend, + Colorer +) { $(document).ready(function () { - module("Legend", { + module("Legends", { // Create and destroy the container HTML element within the test, // to avoid having to directly mess around with the test HTML file. // (I can't find the exact source, but I read about this on a // StackOverflow post somewhere.) + // Currently there are two different legends that need to be tested + // BarplotLegned and SampleFeatureColorLegend. They both inherit + // the Legend abstract class and thus behave idential. The only + // difference between the two legends are the missing non-numeric + // warning messages. Thus, for the majority of the tests, we only + // need to use one of the legend types (testing both would be + // redundant). The only test we need to explicitly test both + // legends is the 'addContinuousKey (with non-numeric warning)' + // test. setup: function () { this.containerEle = document.createElement("div"); this.validateRefSVG = function (obsContainerSVG, expSVG) { @@ -47,22 +64,21 @@ require([ // addContinuousKey() is called (there isn't really an important // reason for this, it's just how things work; the caller is // responsible for making sure Legends aren't created in already- - // populated containers, at least when initially constructing a - // Legend) + // populated containers, at least on initial construction) var funkyP = this.containerEle.appendChild( document.createElement("p") ); funkyP.innerText = "asdfasdfasdf"; - var legend = new Legend(this.containerEle); + var legend = new BarplotLegend(this.containerEle); equal(this.containerEle.firstChild, funkyP); }); test('On initialization, legendType is null and title is ""', function () { - var legend = new Legend(this.containerEle); + var legend = new BarplotLegend(this.containerEle); equal(legend.legendType, null); equal(legend.title, ""); }); test("addCategoricalKey", function () { - var legend = new Legend(this.containerEle); + var legend = new BarplotLegend(this.containerEle); var colorInfo = { "Thing 1": "#ff0000", "Thing 2": "#00ff00", @@ -120,7 +136,7 @@ require([ // Now, check that the legend is as expected. equal(cellsInRow[1].innerText, expectedKey); }); - // Legend should be visible + // BarplotLegend should be visible notOk(this.containerEle.classList.contains("hidden")); // Check that _sortedCategories and _category2color are defined @@ -134,7 +150,7 @@ require([ deepEqual(legend._category2color, colorInfo); }); test("addCategoricalKey (just 1 color)", function () { - var legend = new Legend(this.containerEle); + var legend = new BarplotLegend(this.containerEle); var darkBrown = "#52330b"; var colorInfo = { hjkl: darkBrown }; legend.addCategoricalKey("Single-color test", colorInfo); @@ -157,13 +173,13 @@ require([ deepEqual(legend._category2color, colorInfo); }); test("addCategoricalKey (error: no categories)", function () { - var legend = new Legend(this.containerEle); + var legend = new BarplotLegend(this.containerEle); throws(function () { legend.addCategoricalKey("oops", {}); }, /Can't create a categorical legend when there are no categories in the info/); }); test("addContinuousKey", function () { - var legend = new Legend(this.containerEle); + var legend = new BarplotLegend(this.containerEle); var colorer = new Colorer("Viridis", ["0", "4"], true); var refSVGs = UtilitiesForTesting.getReferenceSVGs(); legend.addContinuousKey( @@ -190,9 +206,11 @@ require([ // just concatenate these strings together to get the expected SVG // here) var cSVG = this.containerEle.children[1]; - this.validateRefSVG(cSVG, refSVGs[0] + refSVGs[1]); + // svg container should be inside a div element + equal(cSVG.tagName, "DIV"); + this.validateRefSVG(cSVG.children[0], refSVGs[0] + refSVGs[1]); - // Legend should be visible + // BarplotLegend should be visible notOk(this.containerEle.classList.contains("hidden")); // Check SVG exporting attributes are set ok @@ -204,12 +222,12 @@ require([ notOk(legend._missingNonNumericWarningShown); }); test("addContinuousKey (with non-numeric warning)", function () { - var legend = new Legend(this.containerEle); + var barplotLegend = new BarplotLegend(this.containerEle); var colorer = new Colorer("Viridis", ["0", ">:D", "4"], true); var refSVGs = UtilitiesForTesting.getReferenceSVGs(); - legend.addContinuousKey("howdy", colorer.getGradientInfo()); + barplotLegend.addContinuousKey("howdy", colorer.getGradientInfo()); - equal(legend.legendType, "continuous"); + equal(barplotLegend.legendType, "continuous"); // There's a third top-level child element now -- a warning // message shown to the user. @@ -217,40 +235,61 @@ require([ // 1. Check title this.validateTitleEle(this.containerEle.children[0], "howdy"); - equal(legend.title, "howdy"); + equal(barplotLegend.title, "howdy"); - // 2. Check SVG + // 2. A "container SVG" element containing the gradient SVG and + // / stuff positioning this gradient + // (these are split into separate SVGs in the test data, but we can + // just concatenate these strings together to get the expected SVG + // here) var cSVG = this.containerEle.children[1]; - this.validateRefSVG(cSVG, refSVGs[0] + refSVGs[1]); + // svg container should be inside a div element + equal(cSVG.tagName, "DIV"); + this.validateRefSVG(cSVG.children[0], refSVGs[0] + refSVGs[1]); // 3. Check non-numeric warning var warning = this.containerEle.children[2]; equal(warning.tagName, "P"); equal( warning.innerText, - Legend.CONTINUOUS_MISSING_NON_NUMERIC_WARNING + barplotLegend.continuousMissingNonNumericWarning ); // Verify that the warning

has white-space: normal; set so it // has line breaks, like normal text equal($(warning).css("white-space"), "normal"); - // Legend should be visible + // BarplotLegend should be visible notOk(this.containerEle.classList.contains("hidden")); - // Check that legend._gradientSVG and - // legend._nonNumericWarningShown are properly set + // Check that barplotLegend._gradientSVG and + // barplotLegend._nonNumericWarningShown are properly set // (The gradientSVG check is extremely cursory -- this just // verifies that it kinda looks like a gradient. The actual // gradient SVG being correct is tested in test-colorer.js.) - ok(legend._gradientSVG.includes("