From 77d335ecffc4247bbc45bccfc30268e197609b97 Mon Sep 17 00:00:00 2001 From: guerler Date: Wed, 20 Nov 2024 19:42:09 +0300 Subject: [PATCH] Move heatmap visualization to new script endpoint --- client/gulpfile.js | 3 +- .../heatmap_shared.xml => config/heatmap.xml} | 30 +- .../config/heatmap_cluster.xml | 19 - .../heatmap/heatmap_cluster/static/logo.png | Bin 11367 -> 0 bytes .../config/heatmap_default.xml | 17 - .../heatmap/heatmap_default/package.json | 24 - .../heatmap/heatmap_default/src/colorsets.js | 31 -- .../heatmap/heatmap_default/src/script.js | 506 ------------------ .../heatmap/heatmap_default/static/logo.png | Bin 14531 -> 0 bytes .../visualizations/heatmap/static/logo.svg | 18 + 10 files changed, 38 insertions(+), 610 deletions(-) rename config/plugins/visualizations/heatmap/{heatmap_default/config/heatmap_shared.xml => config/heatmap.xml} (96%) delete mode 100644 config/plugins/visualizations/heatmap/heatmap_cluster/config/heatmap_cluster.xml delete mode 100644 config/plugins/visualizations/heatmap/heatmap_cluster/static/logo.png delete mode 100644 config/plugins/visualizations/heatmap/heatmap_default/config/heatmap_default.xml delete mode 100644 config/plugins/visualizations/heatmap/heatmap_default/package.json delete mode 100644 config/plugins/visualizations/heatmap/heatmap_default/src/colorsets.js delete mode 100644 config/plugins/visualizations/heatmap/heatmap_default/src/script.js delete mode 100644 config/plugins/visualizations/heatmap/heatmap_default/static/logo.png create mode 100644 config/plugins/visualizations/heatmap/static/logo.svg diff --git a/client/gulpfile.js b/client/gulpfile.js index 86e0d7009479..56aa5798b004 100644 --- a/client/gulpfile.js +++ b/client/gulpfile.js @@ -21,7 +21,6 @@ const STATIC_PLUGIN_BUILD_IDS = [ "fits_graph_viewer", "fits_image_viewer", "h5web", - "heatmap/heatmap_default", "hyphyvision", "jqplot/jqplot_bar", "media_player", @@ -35,7 +34,7 @@ const STATIC_PLUGIN_BUILD_IDS = [ "tiffviewer", "ts_visjs", ]; -const INSTALL_PLUGIN_BUILD_IDS = ["cytoscape", "ngl", "msa", "openlayers", "phylocanvas", "venn", "vizarr"]; // todo: derive from XML +const INSTALL_PLUGIN_BUILD_IDS = ["cytoscape", "heatmap", "ngl", "msa", "openlayers", "phylocanvas", "venn", "vizarr"]; // todo: derive from XML const DIST_PLUGIN_BUILD_IDS = ["new_user"]; const PLUGIN_BUILD_IDS = Array.prototype.concat(DIST_PLUGIN_BUILD_IDS, STATIC_PLUGIN_BUILD_IDS); diff --git a/config/plugins/visualizations/heatmap/heatmap_default/config/heatmap_shared.xml b/config/plugins/visualizations/heatmap/config/heatmap.xml similarity index 96% rename from config/plugins/visualizations/heatmap/heatmap_default/config/heatmap_shared.xml rename to config/plugins/visualizations/heatmap/config/heatmap.xml index 96559e4745e0..3d0786582e8d 100644 --- a/config/plugins/visualizations/heatmap/heatmap_default/config/heatmap_shared.xml +++ b/config/plugins/visualizations/heatmap/config/heatmap.xml @@ -1,5 +1,10 @@ - - + + + + Renders a heatmap from matrix data provided in 3-column format (x, y, observation). + + + HistoryDatasetAssociation @@ -11,7 +16,8 @@ dataset_id - + + key @@ -23,23 +29,19 @@ x data_column - true - true y data_column - true - true z data_column - true + true - + color_set @@ -480,5 +482,11 @@ true - - \ No newline at end of file + + + pdf + png + svg + + + \ No newline at end of file diff --git a/config/plugins/visualizations/heatmap/heatmap_cluster/config/heatmap_cluster.xml b/config/plugins/visualizations/heatmap/heatmap_cluster/config/heatmap_cluster.xml deleted file mode 100644 index 3226c763b616..000000000000 --- a/config/plugins/visualizations/heatmap/heatmap_cluster/config/heatmap_cluster.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - ../../heatmap_default/config/heatmap_shared.xml - - Applies hierarchical clustering to a matrix using R. The data has to be provided in 3-column format. The result is displayed as clustered heatmap. - - - - true - True - - pdf - png - svg - - - \ No newline at end of file diff --git a/config/plugins/visualizations/heatmap/heatmap_cluster/static/logo.png b/config/plugins/visualizations/heatmap/heatmap_cluster/static/logo.png deleted file mode 100644 index 30e0334cb880eb79dde1ee7cf59ba60dcff34917..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11367 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 diff --git a/config/plugins/visualizations/heatmap/heatmap_default/config/heatmap_default.xml b/config/plugins/visualizations/heatmap/heatmap_default/config/heatmap_default.xml deleted file mode 100644 index 82eb5cfc624b..000000000000 --- a/config/plugins/visualizations/heatmap/heatmap_default/config/heatmap_default.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - heatmap_shared.xml - - Renders a heatmap from matrix data provided in 3-column format (x, y, observation). - - - - - pdf - png - svg - - - \ No newline at end of file diff --git a/config/plugins/visualizations/heatmap/heatmap_default/package.json b/config/plugins/visualizations/heatmap/heatmap_default/package.json deleted file mode 100644 index 91f3d0006ca5..000000000000 --- a/config/plugins/visualizations/heatmap/heatmap_default/package.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "visualization", - "version": "0.2.0", - "keywords": [ - "galaxy", - "visualization" - ], - "license": "AFL-3.0", - "dependencies": { - "@galaxyproject/charts": "^0.1.0", - "babel-preset-env": "^1.6.1", - "backbone": "^1.4.0", - "bootstrap": "^3.3.7", - "d3": "3", - "jquery": "^3.5.1", - "underscore": "^1.11.0" - }, - "scripts": { - "build": "parcel build src/script.js --dist-dir static/dist" - }, - "devDependencies": { - "parcel": "2.11.0" - } -} diff --git a/config/plugins/visualizations/heatmap/heatmap_default/src/colorsets.js b/config/plugins/visualizations/heatmap/heatmap_default/src/colorsets.js deleted file mode 100644 index cf876fcb5dad..000000000000 --- a/config/plugins/visualizations/heatmap/heatmap_default/src/colorsets.js +++ /dev/null @@ -1,31 +0,0 @@ -export default { - seis: ['#AA0000', '#D00000', '#F70000', '#FF1D00', '#FF4400', '#FF6A00', '#FF9000', '#FFB700', '#FFDD00', '#FFFF00', '#FFFF00', '#FFFF00', '#BDFF0C', '#73FF1A', '#3FFA36', '#16F45A', '#00D08B', '#0087CD', '#0048FA', '#0024E3'].reverse(), - - sealand: ['#8C66FF', '#6A66FF', '#6684FF', '#66A7FF', '#66CAFF', '#66ECFF', '#66FFF0', '#66FFCE', '#66FFAB', '#66FF88', '#66FF66', '#88FF66', '#ABFF66', '#CEFF66', '#FFEEA6', '#FFD3A6', '#FFB8A6', '#FFAAB0', '#FFB5CB', '#FFC0E1'].reverse(), - - redgreen: ['#005824', '#1A693B', '#347B53', '#4F8D6B', '#699F83', '#83B09B', '#9EC2B3', '#B8D4CB', '#D2E6E3', '#EDF8FB', '#FFFFFF', '#F1EEF6', '#E6D3E1','#DBB9CD', '#D19EB9', '#C684A4', '#BB6990', '#B14F7C', '#A63467', '#9B1A53', '#91003F'], - - ocean: ['#000000', '#000209', '#000413', '#00061E', '#000728', '#000932', '#002650', '#00426E', '#005E8C', '#007AAA', '#0096C8', '#22A9C2', '#45BCBB', '#67CFB5', '#8AE2AE', '#ACF6A8', '#BCF8B9', '#CBF9CA', '#DBFBDC', '#EBFDED'].reverse(), - - cool: ['#00FFFF', '#0DF2FF', '#19E6FF', '#26D9FF', '#33CCFF', '#3FBFFF', '#4CB3FF', '#59A6FF', '#6699FF', '#738CFF', '#7F7FFF', '#8C73FF', '#9966FF', '#A659FF', '#B24DFF', '#BF3FFF', '#CC33FF', '#D926FF', '#E619FF', '#F20DFF'], - - copper: ['#000000', '#100906', '#1F130D', '#301E13', '#40281A', '#50321F', '#603C26', '#70462D', '#805033', '#905A3A', '#A06440', '#B06E46', '#C0784D', '#D08253', '#E08C5A', '#F09660', '#FFA066', '#FFAA6D', '#FFB473', '#FFBE7A'].reverse(), - - gray: ['#000000', '#0D0D0D', '#191919', '#262626', '#333333', '#3F3F3F', '#4C4C4C', '#595959', '#666666', '#737373', '#7F7F7F', '#8C8C8C', '#999999', '#A6A6A6', '#B2B2B2', '#BFBFBF', '#CCCCCC', '#D9D9D9', '#E6E6E6', '#F2F2F2'].reverse(), - - hot: ['#000000', '#220000', '#440000', '#660000', '#880000', '#AA0000', '#CC0000', '#EE0000', '#FF1100', '#FF3300', '#FF5500', '#FF7700', '#FF9900', '#FFBB00', '#FFDD00', '#FFFF00', '#FFFF33', '#FFFF66', '#FFFF99', '#FFFFCC'].reverse(), - - jet: ['#00007F', '#0000B2', '#0000E5', '#0019FF', '#004DFF', '#007FFF', '#00B2FF', '#00E5FF', '#FFFFF2', '#FFFFD9', '#FFFFBF', '#FFFFA5', '#FFFF8C', '#FFE500', '#FFB300', '#FF7F00', '#FF4C00', '#FF1900', '#E50000', '#B20000'], - - no_green: ['#1F60FF', '#1F60FF', '#1F9FFF', '#1FBFFF', '#00CFFF', '#2AFFFF', '#2AFFFF', '#55FFFF', '#7FFFFF', '#AAFFFF', '#FFFF54', '#FFFF54', '#FFF000', '#FFBF00', '#FFA800', '#FF8A00', '#FF8A00', '#FF7000', '#FF4D00', '#FF0000'], - - polar: ['#0000FF', '#1919FF', '#3333FF', '#4C4CFF', '#6666FF', '#7F7FFF', '#9999FF', '#B2B2FF', '#CCCCFF', '#E6E6FF', '#FFFFFF', '#FFE5E5', '#FFCCCC', '#FFB2B2', '#FF9999', '#FF7F7F', '#FF6666', '#FF4C4C', '#FF3333', '#FF1A1A'], - - red2green: ['#FF0000', '#FF1919', '#FF3333', '#FF4C4C', '#FF6666', '#FF7F7F', '#FF9999', '#FFB2B2', '#FFCCCC', '#FFE6E6', '#FFFFFF', '#E5FFE5', '#CCFFCC', '#B2FFB2', '#99FF99', '#7FFF7F', '#66FF66', '#4CFF4C', '#33FF33', '#1AFF1A'].reverse(), - - relief: ['#000000', '#000413', '#000728', '#002650', '#005E8C', '#0096C8', '#45BCBB', '#8AE2AE', '#BCF8B9', '#DBFBDC', '#467832', '#887438', '#B19D48', '#DBC758', '#FAE769', '#FAEB7E', '#FCED93', '#FCF1A7', '#FCF6C1', '#FDFAE0'].reverse(), - - split: ['#7F7FFF', '#6666E6', '#4D4DCC', '#3333B3', '#1A1A99', '#00007F', '#000066', '#00004D', '#000033', '#00001A', '#000000', '#1A0000', '#330000', '#4D0000', '#660000', '#7F0000', '#991A1A', '#B33333', '#CC4D4D', '#E66666'], - - wysiwyg: ['#3F003F', '#3F003F', '#3F00BF', '#003FFF', '#00A0FF', '#3FBFFF', '#3FBFFF', '#40E0FF', '#3FFFBF', '#3FFF3F', '#7FFF3F', '#BFFF3F', '#BFFF3F', '#FFE040', '#FFE040', '#FF6040', '#FF1F40', '#FF60C0', '#FFA0FF', '#FFA0FF'].reverse() -} diff --git a/config/plugins/visualizations/heatmap/heatmap_default/src/script.js b/config/plugins/visualizations/heatmap/heatmap_default/src/script.js deleted file mode 100644 index d9bf0966f02e..000000000000 --- a/config/plugins/visualizations/heatmap/heatmap_default/src/script.js +++ /dev/null @@ -1,506 +0,0 @@ -import _ from "underscore"; -import $ from "jquery"; -import * as d3 from "d3"; -import Backbone from "backbone"; -import Colors from "./colorsets"; - -import { addZoom, makeUniqueCategories, makeTickFormat } from "@galaxyproject/charts/lib/utilities/series"; -import { requestPanels } from "@galaxyproject/charts/lib/utilities/datasets"; -import { requestCharts, request as requestJobs } from "@galaxyproject/charts/lib/utilities/jobs"; - -var CommonWrapper = Backbone.View.extend({ - optionsDefault: { - margin: { - top: 40, - right: 70, - bottom: 70, - left: 70, - }, - style: { - "font-weight": "normal", - "font-family": "Verdana", - "font-size": 12, - }, - legend: { - width: 15, - size: 0.9, - style: { - "font-weight": "normal", - "font-family": "Verdana", - "font-size": 11, - }, - limit: 7, - }, - background_color: "#FFFFFF", - debug_color: "#FFFFFF", - }, - - initialize: function (options) { - var self = this; - this.chart = options.chart; - this.canvas_id = options.canvas_id; - this.group = options.groups[0]; - this.data = options.groups[0].values; - this.options = _.defaults(this.optionsDefault, options); - - // get color set - this.color_set = Colors[this.chart.settings.get("color_set", "seism")]; - - // categories - this.categories = makeUniqueCategories([this.group]); - - // domains/scales - this.xScale = d3.scale.linear().domain([0, this.categories.array.x.length]); - this.yScale = d3.scale.linear().domain([0, this.categories.array.y.length]); - - // color scale - this.zMin = d3.min(this.data, function (d) { - return d.z; - }); - this.zMax = d3.max(this.data, function (d) { - return d.z; - }); - this.zScale = d3.scale.quantize().domain([this.zMin, this.zMax]).range(this.color_set); - - // create axis - this.xAxis = d3.svg.axis().scale(this.xScale).orient("bottom"); - this.yAxis = d3.svg.axis().scale(this.yScale).orient("left"); - - // make categories - this._makeTickFormat("x"); - this._makeTickFormat("y"); - - // add tooltip - this.tooltip = d3 - .select(".charts-viewport-container") - .append("div") - .attr("class", "charts-tooltip") - .style(this.options.style) - .style("opacity", 0); - - // refresh on window resize - $(window).on("resize", function () { - self.redraw(); - }); - this.redraw(); - addZoom({ - xAxis: this.xAxis, - yAxis: this.yAxis, - redraw: function () { - self.redraw(); - }, - svg: d3.select("#" + this.canvas_id), - }); - }, - - /** Redraw */ - redraw: function () { - // get/reset container - var container = $("#" + this.canvas_id); - container.empty(); - - // get domain - var xDomain = this.xScale.domain(); - var yDomain = this.yScale.domain(); - - // set ticks - var xTickStart = Math.ceil(xDomain[0]); - var xTickEnd = Math.floor(xDomain[1]); - var yTickStart = Math.ceil(yDomain[0]); - var yTickEnd = Math.floor(yDomain[1]); - this.xAxis.tickValues(d3.range(xTickStart, xTickEnd, 1)); - this.yAxis.tickValues(d3.range(yTickStart, yTickEnd, 1)); - - // get margins - var margin = this.options.margin; - - // configure dimensions - this.height = parseInt(container.height()) - margin.top - margin.bottom; - this.width = parseInt(container.width()) - margin.left - margin.right; - - // set range - this.xScale.range([0, this.width]); - this.yScale.range([this.height, 0]); - - // get box properties - this.rowCount = yDomain[1] - yDomain[0]; - this.colCount = xDomain[1] - xDomain[0]; - this.boxWidth = Math.max(1, Math.floor(this.width / this.colCount)); - this.boxHeight = Math.max(1, Math.floor(this.height / this.rowCount)); - - // create group - this.svg = d3 - .select("#" + this.canvas_id) - .append("g") - .attr("class", "heatmap") - .attr("transform", "translate(" + margin.left + "," + margin.top + ")"); - - // build elements - this._buildBoxes(); - this._buildX(); - this._buildY(); - - // show legend only if requested - if (String(this.chart.settings.get("show_legend")).toLocaleLowerCase() == "true") { - this._buildLegend(); - } - }, - - /** Build boxes */ - _buildBoxes: function () { - var self = this; - var height = this.height; - var width = this.width; - var svg = this.svg; - var boxWidth = this.boxWidth; - var boxHeight = this.boxHeight; - function _locator(d) { - return "translate(" + self.xScale(d.x) + "," + self.yScale(d.y + 1) + ")"; - } - function _color(d) { - return self.zScale(d.z); - } - - // set background color - svg.append("rect").attr("width", width).attr("height", height).attr("fill", this.options.background_color); - - // clip path - svg.append("clipPath") - .attr("id", "clip") - .append("rect") - .attr("x", 0) - .attr("y", 0) - .attr("width", width) - .attr("height", height); - - // create chart area - var chartBody = svg.append("g").attr("clip-path", "url(#clip)"); - - // add boxes to chart area - var boxes = chartBody.selectAll("box-group").data(this.data, function (d, i) { - return d.x + "\0" + d.y; - }); - var gEnter = boxes.enter().append("g").attr("class", "box-group"); - gEnter.append("rect").attr("class", "heat-box"); - boxes - .selectAll("rect") - .attr("rx", 1) - .attr("ry", 1) - .attr("fill", _color) - .attr("width", boxWidth) - .attr("height", boxHeight) - .attr("transform", _locator); - - // add tooltip events - boxes - .selectAll("rect") - .on("dblclick", function (d) { - var url = self.chart.settings.get("url_template").trim(); - if (url) { - d3.event.stopPropagation(); - var xLabel = self.categories.array.x[d.x]; - var yLabel = self.categories.array.y[d.y]; - window.open(url.replace("__LABEL__", xLabel)); - window.open(url.replace("__LABEL__", yLabel)); - } - }) - .on("mouseover", function (d) { - var matrix = this.getScreenCTM().translate(+this.getAttribute("cx"), +this.getAttribute("cy")); - self.tooltip.style("opacity", 0.9); - self.tooltip - .html(self._templateTooltip(d)) - .style("left", window.pageXOffset + matrix.e + 15 + "px") - .style("top", window.pageYOffset + matrix.f - 30 + "px"); - }) - .on("mouseout", function (d) { - self.tooltip.style("opacity", 0); - }); - - // initially hide tooltips - this.tooltip.style("opacity", 0); - - // exit - boxes.exit().remove(); - }, - - /** Build x axis */ - _buildX: function () { - var height = this.height; - var width = this.width; - var margin = this.options.margin; - var svg = this.svg; - var font_size = this.options.style["font-size"]; - var boxWidth = this.boxWidth; - - // draw x axis - this.gxAxis = svg - .append("g") - .attr("class", "x axis") - .style("stroke-width", 1) - .attr("transform", "translate(0," + height + ")") - .call(this.xAxis); - - // fix text - var xFontSize = Math.min(boxWidth, font_size); - this.gxAxis - .selectAll("text") - .style(this.options.style) - .style({ "font-size": xFontSize + "px" }) - .attr("transform", function (d) { - var y = -this.getBBox().height - 15; - var x = -xFontSize + boxWidth / 2; - return "rotate(-90)translate(" + y + "," + x + ")"; - }); - - // set background color - svg.append("rect") - .attr("width", width) - .attr("height", font_size + 3) - .attr("y", height + margin.bottom - font_size - 3) - .attr("fill", this.options.debug_color) - .attr("opacity", 0.7); - - // axis label - this.gxAxisLabel = svg - .append("text") - .attr("class", "x label") - .style(this.options.style) - .text(this.chart.settings.get("x_axis_label")) - .attr("transform", function (d) { - var y = height + margin.bottom - font_size / 3; - var x = (width - this.getBBox().width) / 2; - return "translate(" + x + "," + y + ")"; - }); - - // chart title - this.gxTickLabel = svg - .append("text") - .attr("class", "title") - .style(this.options.style) - .style({ "font-size": 1.1 * font_size }) - .text(this.group.key) - .attr("transform", function (d) { - var y = -margin.top / 2; - var x = (width - this.getBBox().width) / 2; - return "translate(" + x + "," + y + ")"; - }); - }, - - /** Build y axis */ - _buildY: function () { - var height = this.height; - var margin = this.options.margin; - var svg = this.svg; - var font_size = this.options.style["font-size"]; - var boxHeight = this.boxHeight; - - // draw y axis - this.gyAxis = svg.append("g").attr("class", "y axis").style("stroke-width", 1).call(this.yAxis); - - // fix text - var yFontSize = Math.min(boxHeight, font_size); - this.gyAxis - .selectAll("text") - .style(this.options.style) - .style({ "font-size": yFontSize + "px" }) - .attr("y", -boxHeight / 2); - - // set background color - svg.append("rect") - .attr("width", font_size) - .attr("height", height) - .attr("x", -margin.left) - .attr("fill", this.options.debug_color) - .attr("opacity", 0.7); - - // axis label - this.gyAxisLabel = svg - .append("text") - .attr("class", "y label") - .style(this.options.style) - .text(this.chart.settings.get("y_axis_label")) - .attr("transform", function (d) { - var x = -margin.left + font_size - 2; - var y = -(height + this.getBBox().width) / 2; - return "rotate(-90)translate(" + y + "," + x + ")"; - }); - }, - - /** Build legend */ - _buildLegend: function () { - var self = this; - var height = this.height; - var width = this.width; - var margin = this.options.margin; - var font_size = this.options.legend.style["font-size"]; - var limit = this.options.legend.limit; - var legendSize = this.options.legend.size; - var legendWidth = this.options.legend.width; - var legendElements = this.zScale.range().length; - var legendElementHeight = Math.max((legendSize * height) / legendElements, font_size); - var legendHeight = (legendElements * legendElementHeight) / 2; - var data = d3.range(this.zMin, this.zMax, (2 * (this.zMax - this.zMin)) / legendElements).reverse(); - if (data.length < 2) { - return; - } - var legend = this.svg - .selectAll(".legend") - .data(data) - .enter() - .append("g") - .attr("class", "legend") - .attr("transform", function (d, i) { - var x = width + 10; - var y = (height - legendHeight) / 2 + i * legendElementHeight; - return "translate(" + x + "," + y + ")"; - }); - legend - .append("rect") - .attr("width", legendWidth) - .attr("height", legendElementHeight) - .style("fill", function (z) { - return self.zScale(z); - }); - legend - .append("text") - .attr("x", legendWidth + 4) - .attr("y", function () { - return (legendElementHeight + this.getBBox().height) / 2; - }) - .style(this.options.legend.style) - .text(function (d) { - return String(d).length > limit ? String(d).substr(0, limit - 2) + ".." : String(d); - }); - this.svg - .append("text") - .style(this.options.legend.style) - .style({ "font-size": 9, "font-weight": "bold" }) - .text("Legend") - .attr("transform", function (d, i) { - var x = width + (margin.right - this.getBBox().width) / 2; - var y = (height - legendHeight) / 2 - 10; - return "translate(" + x + "," + y + ")"; - }); - }, - - /** Create axes formatting */ - _makeTickFormat: function (id) { - var settings = this.chart.settings; - var self = this; - makeTickFormat({ - categories: self.categories.array[id], - type: settings.get(id + "_axis_type|type"), - precision: settings.get(id + "_axis_type|precision"), - formatter: function (formatter) { - if (formatter) { - self[id + "Axis"].tickFormat(function (value) { - return formatter(value); - }); - } - }, - }); - }, - - /** Handle error */ - _handleError: function (err) { - this.chart.state("failed", err); - }, - - /** Main template */ - _templateTooltip: function (d) { - var x = this.categories.array.x[d.x]; - var y = this.categories.array.y[d.y]; - var z = d.z; - return ( - "" + - "" + - '' + - "" + - "" + - "" + - '' + - "" + - "" + - "" + - '' + - "" + - "" + - "
Row:" + - y + - "
Column:" + - x + - "
Value:" + - z + - "
" - ); - }, -}); - - -/* Prepare containers */ -function createContainers(tag, chart, target) { - var n = chart.groups.length; - var $container = $("#" + target); - $container.empty(); - const targets = []; - for (var i = 0; i < n; i++) { - var panel_id = "vis-container-id-" + i; - var $panel = $("<" + tag + " style='float: left; height: 100%;' />").attr("id", panel_id); - $panel.width(parseInt(100 / n) + "%"); - $container.append($panel); - targets.push(panel_id); - } - return targets; -} - -window.bundleEntries = window.bundleEntries || {}; -window.bundleEntries.heatmap_default = function (options) { - options.targets = createContainers("svg", options.chart, options.target); - options.render = function (canvas_id, groups) { - new CommonWrapper({ - chart: options.chart, - canvas_id: canvas_id, - groups: groups, - }); - return true; - }; - requestPanels(options); -} - -window.bundleEntries.heatmap_cluster = function (options) { - options.targets = createContainers("svg", options.chart, options.target); - requestJobs( - options.chart, - requestCharts(options.chart, "heatmap"), - function (dataset) { - var dataset_groups = new Backbone.Collection(); - options.chart.groups.each(function (group, index) { - dataset_groups.add({ - __data_columns: { - x: { is_label: true }, - y: { is_label: true }, - z: { is_numeric: true }, - }, - x: index++, - y: index++, - z: index++, - key: group.get("key"), - }); - }); - options.dataset_id = dataset.id; - options.dataset_groups = dataset_groups; - options.render = function (canvas_id, groups) { - new CommonWrapper({ - chart: options.chart, - canvas_id: canvas_id, - groups: groups, - }); - return true; - }; - requestPanels(options); - }, - function () { - options.process.reject(); - } - ); -} diff --git a/config/plugins/visualizations/heatmap/heatmap_default/static/logo.png b/config/plugins/visualizations/heatmap/heatmap_default/static/logo.png deleted file mode 100644 index 1dd9dc5591c10f6869891d650b864820f8284bdb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14531 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 diff --git a/config/plugins/visualizations/heatmap/static/logo.svg b/config/plugins/visualizations/heatmap/static/logo.svg new file mode 100644 index 000000000000..41c80b8f2c16 --- /dev/null +++ b/config/plugins/visualizations/heatmap/static/logo.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + +