From 1a8a0f0aeb6e81b415a3d0e18c7f28494695d1b3 Mon Sep 17 00:00:00 2001 From: "Jon M. Mease" Date: Mon, 27 Nov 2017 16:21:11 -0500 Subject: [PATCH 01/50] Initial parcats trace implementation --- lib/index.js | 2 +- lib/parcats.js | 11 + src/components/fx/hover.js | 76 + src/components/fx/index.js | 1 + src/traces/parcats/attributes.js | 183 ++ src/traces/parcats/base_plot.js | 34 + src/traces/parcats/calc.js | 575 +++++ src/traces/parcats/colorbar.js | 52 + src/traces/parcats/constants.js | 60 + src/traces/parcats/defaults.js | 120 ++ src/traces/parcats/index.js | 29 + src/traces/parcats/parcats.js | 1917 +++++++++++++++++ src/traces/parcats/plot.js | 43 + test/image/mocks/parcats_basic.json | 16 + test/image/mocks/parcats_bundled.json | 21 + .../image/mocks/parcats_bundled_reversed.json | 22 + test/image/mocks/parcats_reordered.json | 17 + test/image/mocks/parcats_unbundled.json | 22 + test/jasmine/tests/parcats_test.js | 788 +++++++ 19 files changed, 3988 insertions(+), 1 deletion(-) create mode 100644 lib/parcats.js create mode 100644 src/traces/parcats/attributes.js create mode 100644 src/traces/parcats/base_plot.js create mode 100644 src/traces/parcats/calc.js create mode 100644 src/traces/parcats/colorbar.js create mode 100644 src/traces/parcats/constants.js create mode 100644 src/traces/parcats/defaults.js create mode 100644 src/traces/parcats/index.js create mode 100644 src/traces/parcats/parcats.js create mode 100644 src/traces/parcats/plot.js create mode 100644 test/image/mocks/parcats_basic.json create mode 100644 test/image/mocks/parcats_bundled.json create mode 100644 test/image/mocks/parcats_bundled_reversed.json create mode 100644 test/image/mocks/parcats_reordered.json create mode 100644 test/image/mocks/parcats_unbundled.json create mode 100644 test/jasmine/tests/parcats_test.js diff --git a/lib/index.js b/lib/index.js index 2587276c897..9a9d189f805 100644 --- a/lib/index.js +++ b/lib/index.js @@ -38,7 +38,7 @@ Plotly.register([ require('./pointcloud'), require('./heatmapgl'), require('./parcoords'), - + require('./parcats'), require('./scattermapbox'), require('./sankey'), diff --git a/lib/parcats.js b/lib/parcats.js new file mode 100644 index 00000000000..a45e80ef2e1 --- /dev/null +++ b/lib/parcats.js @@ -0,0 +1,11 @@ +/** +* Copyright 2012-2017, Plotly, Inc. +* All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. +*/ + +'use strict'; + +module.exports = require('../src/traces/parcats'); diff --git a/src/components/fx/hover.js b/src/components/fx/hover.js index ff8175c69c5..a1cf4ada20b 100644 --- a/src/components/fx/hover.js +++ b/src/components/fx/hover.js @@ -153,6 +153,82 @@ exports.loneHover = function loneHover(hoverItem, opts) { return hoverLabel.node(); }; +// TODO: replace loneHover? +exports.customHovers = function customHovers(hoverItems, opts) { + + if (!Array.isArray(hoverItems)) { + hoverItems = [hoverItems]; + } + + var pointsData = hoverItems.map(function(hoverItem) { + return { + color: hoverItem.color || Color.defaultLine, + x0: hoverItem.x0 || hoverItem.x || 0, + x1: hoverItem.x1 || hoverItem.x || 0, + y0: hoverItem.y0 || hoverItem.y || 0, + y1: hoverItem.y1 || hoverItem.y || 0, + xLabel: hoverItem.xLabel, + yLabel: hoverItem.yLabel, + zLabel: hoverItem.zLabel, + text: hoverItem.text, + name: hoverItem.name, + idealAlign: hoverItem.idealAlign, + + // optional extra bits of styling + borderColor: hoverItem.borderColor, + fontFamily: hoverItem.fontFamily, + fontSize: hoverItem.fontSize, + fontColor: hoverItem.fontColor, + + // filler to make createHoverText happy + trace: { + index: 0, + hoverinfo: '' + }, + xa: {_offset: 0}, + ya: {_offset: 0}, + index: 0 + }; + }); + + + var container3 = d3.select(opts.container), + outerContainer3 = opts.outerContainer ? + d3.select(opts.outerContainer) : container3; + + var fullOpts = { + hovermode: 'closest', + rotateLabels: false, + bgColor: opts.bgColor || Color.background, + container: container3, + outerContainer: outerContainer3 + }; + + var hoverLabel = createHoverText(pointsData, fullOpts, opts.gd); + + // Fix vertical overlap + var tooltipSpacing = 5; + var lastBottomY = 0; + hoverLabel + .sort(function(a, b) {return a.y0 - b.y0}) + .each(function(d) { + var topY = d.y0 - d.by / 2; + + if ((topY - tooltipSpacing) < lastBottomY ) { + d.offset = (lastBottomY - topY) + tooltipSpacing; + } else { + d.offset = 0; + } + + lastBottomY = topY + d.by + d.offset; + }); + + + alignHoverText(hoverLabel, fullOpts.rotateLabels); + + return hoverLabel.node(); +}; + // The actual implementation is here: function _hover(gd, evt, subplot, noHoverEvent) { if(!subplot) subplot = 'xy'; diff --git a/src/components/fx/index.js b/src/components/fx/index.js index 77c618b8354..c495537e379 100644 --- a/src/components/fx/index.js +++ b/src/components/fx/index.js @@ -45,6 +45,7 @@ module.exports = { unhover: dragElement.unhover, loneHover: require('./hover').loneHover, + customHovers: require('./hover').customHovers, loneUnhover: loneUnhover, click: require('./click') diff --git a/src/traces/parcats/attributes.js b/src/traces/parcats/attributes.js new file mode 100644 index 00000000000..94648ceccf4 --- /dev/null +++ b/src/traces/parcats/attributes.js @@ -0,0 +1,183 @@ +/** +* Copyright 2012-2017, Plotly, Inc. +* All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. +*/ + +'use strict'; + +var fontAttrs = require('../../plots/font_attributes'); +var extendFlat = require('../../lib/extend').extendFlat; +var colorAttributes = require('../../components/colorscale/color_attributes'); + +var scatterAttrs = require('../scatter/attributes'); +var scatterMarkerAttrs = scatterAttrs.marker; +var colorbarAttrs = require('../../components/colorbar/attributes'); + +var marker = extendFlat({ + editType: 'calc' + }, colorAttributes('marker', 'calc'), + { + showscale: scatterMarkerAttrs.showscale, + colorbar: colorbarAttrs, + shape: { + valType: 'enumerated', + values: ['straight', 'curved'], + dflt: 'curved', + role: 'info', + editType: 'plot', + description: 'Sets the shape of the paths'}, + }); + +module.exports = { + domain: { + x: { + valType: 'info_array', + role: 'info', + items: [ + {valType: 'number', min: 0, max: 1, editType: 'calc'}, + {valType: 'number', min: 0, max: 1, editType: 'calc'} + ], + dflt: [0, 1], + editType: 'calc', + description: [ + 'Sets the horizontal domain of this `parcats` trace', + '(in plot fraction).' + ].join(' ') + }, + y: { + valType: 'info_array', + role: 'info', + items: [ + {valType: 'number', min: 0, max: 1, editType: 'calc'}, + {valType: 'number', min: 0, max: 1, editType: 'calc'} + ], + dflt: [0, 1], + editType: 'calc', + description: [ + 'Sets the vertical domain of this `parcats` trace', + '(in plot fraction).' + ].join(' ') + }, + editType: 'calc' + }, + + tooltip: { + valType: 'boolean', + dflt: true, + role: 'info', + editType: 'plot', + description: 'Shows a tooltip when hover mode is `category` or `color`.' + }, + + hovermode: { + valType: 'enumerated', + values: ['none', 'category', 'color'], + dflt: 'category', + role: 'info', + editType: 'plot', + description: 'Sets the hover mode of the parcats diagram' + }, + bundlecolors: { + valType: 'boolean', + dflt: true, + role: 'info', + editType: 'plot', + description: 'Sort paths so that like colors are bundled together' + }, + sortpaths: { + valType: 'enumerated', + values: ['forward', 'backward'], + dflt: 'forward', + role: 'info', + editType: 'plot', + description: [ + 'If `forward` then sort paths based on dimensions from left to right.', + 'If `backward` sort based on dimensions from right to left.' + ].join(' ') + }, + // labelfont: fontAttrs({ + // editType: 'calc', + // description: 'Sets the font for the `dimension` labels.' + // }), + // + // catfont: fontAttrs({ + // editType: 'calc', + // description: 'Sets the font for the `category` labels.' + // }), + + dimensions: { + _isLinkedToArray: 'dimension', + label: { + valType: 'string', + role: 'info', + editType: 'calc', + description: 'The shown name of the dimension.' + }, + catDisplayInds: { + valType: 'data_array', + role: 'info', + editType: 'calc', + dflt: [], + description: [ + '' + ].join(' ') + }, + catValues: { + valType: 'data_array', + role: 'info', + editType: 'calc', + dflt: [], + description: [ + '' + ].join(' ') + }, + catLabels: { + valType: 'data_array', + role: 'info', + editType: 'calc', + dflt: [], + description: [ + '' + ].join(' ') + }, + values: { + valType: 'data_array', + role: 'info', + dflt: [], + editType: 'calc', + description: [ + 'Dimension values. `values[n]` represents the category value of the `n`th point in the dataset,', + 'therefore the `values` vector for all dimensions must be the same (longer vectors', + 'will be truncated). Each value must an element of `catValues`.' + ].join(' ') + }, + displayInd: { + valType: 'integer', + role: 'info', + editType: 'calc', + description: [ + 'The display index of dimension, from left to right, zero indexed, defaults to dimension' + + 'index.' + ].join(' ') + }, + editType: 'calc', + description: 'The dimensions (variables) of the parallel categories diagram.' + }, + + marker: marker, + counts: { + valType: 'number', + min: 0, + dflt: 1, + arrayOk: true, + role: 'info', + editType: 'calc', + description: [ + 'The number of observations represented by each state. Defaults to 1 so that each state represents ' + + 'one observation' + ] + } +}; diff --git a/src/traces/parcats/base_plot.js b/src/traces/parcats/base_plot.js new file mode 100644 index 00000000000..8b8ed601398 --- /dev/null +++ b/src/traces/parcats/base_plot.js @@ -0,0 +1,34 @@ +/** +* Copyright 2012-2017, Plotly, Inc. +* All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. +*/ + +'use strict'; + +var getModuleCalcData = require('../../plots/get_data').getModuleCalcData; +var parcatsPlot = require('./plot'); + +var PARCATS = 'parcats'; +exports.name = PARCATS; + +exports.plot = function(gd, traces, transitionOpts, makeOnCompleteCallback) { + + var cdModuleAndOthers = getModuleCalcData(gd.calcdata, PARCATS); + + if(cdModuleAndOthers.length) { + var calcData = cdModuleAndOthers[0]; + parcatsPlot(gd, calcData, transitionOpts, makeOnCompleteCallback); + } +}; + +exports.clean = function(newFullData, newFullLayout, oldFullData, oldFullLayout) { + var hadTable = (oldFullLayout._has && oldFullLayout._has('parcats')); + var hasTable = (newFullLayout._has && newFullLayout._has('parcats')); + + if(hadTable && !hasTable) { + oldFullLayout._paperdiv.selectAll('.parcats').remove(); + } +}; diff --git a/src/traces/parcats/calc.js b/src/traces/parcats/calc.js new file mode 100644 index 00000000000..740d64061ac --- /dev/null +++ b/src/traces/parcats/calc.js @@ -0,0 +1,575 @@ +/** +* Copyright 2012-2017, Plotly, Inc. +* All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. +*/ + +'use strict'; + +// Requirements +// ============ +var wrap = require('../../lib/gup').wrap; +var hasColorscale = require('../../components/colorscale/has_colorscale'); +var colorscaleCalc = require('../../components/colorscale/calc'); +var parcatConstants = require('./constants'); + +var Drawing = require('../../components/drawing'); +var Lib = require('../../lib'); + +// Exports +// ======= +/** + * Create a wrapped ParcatsModel object from trace + * + * Note: trace defaults have already been applied + * @param {Object} gd + * @param {Object} trace + * @return {Array.} + */ +module.exports = function calc(gd, trace) { + + // Process inputs + // -------------- + if (trace.dimensions.length === 0) { + // No dimensions specified. Nothing to compute + return [] + } + + console.log(['calc', trace, gd.data, gd._fullData]); + + // Compute unique information + // -------------------------- + // UniqueInfo per dimension + var uniqueInfoDims = trace.dimensions.map(function(dim) { + return getUniqueInfo(dim.values, dim.catValues) + }); + + // Number of values and counts + // --------------------------- + var numValues = trace.dimensions[0].values.length; + + // Process counts + // -------------- + var counts, + count, + totalCount; + if (Lib.isArrayOrTypedArray(trace.counts)) { + counts = trace.counts; + } else { + counts = [trace.counts]; + } + + // Validate dimension display order + // -------------------------------- + validateDimensionDisplayInds(trace); + + // Validate category display order + // ------------------------------- + trace.dimensions.forEach(function(dim, dimInd) { + validateCategoryProperties(dim, uniqueInfoDims[dimInd]); + }); + + // Handle path colors + // ------------------ + var marker = trace.marker; + var markerColorscale; + + // Process colorscale + if (marker) { + if(hasColorscale(trace, 'marker')) { + colorscaleCalc(trace, trace.marker.color, 'marker', 'c'); + } + markerColorscale = Drawing.tryColorscale(marker); + } else { + markerColorscale = Lib.identity; + } + + // Build color generation function + function getMarkerColorInfo(index) { + var value; + if (!marker) { + value = parcatConstants.defaultColor; + } else if (Array.isArray(marker.color)) { + value = marker.color[index % marker.color.length]; + } else { + value = marker.color; + } + + return {color: markerColorscale(value), rawColor: value}; + } + + console.log(markerColorscale); + + // Build/Validate category labels/order + // ------------------------------------ + // properties: catValues, catorder, catlabels + // + // 1) if catValues and catorder are specified + // a) cat order must be the same length with no collisions or holes, otherwise it is discarded + // b) Additional categories in data that are not specified are appended to catValues, and next indexes are + // appended to catorder + // c) catValues updated in data/_fullData + // 2) if catorder but not catValues is specified + // a) catorder must be same length as inferred catValues with no collisions or holes + // otherwise it is discarded and set to 0 to catValues.length + // 3) if catValues but not catorder is specified + // a) Append unspecified values to catValues + // b) set carorder to 0 to catValues.length + // 4) if neither are specified + // a) Set catValues to unique catValues + // b) Set carorder to 0 to catValues.length + // + //uniqueInfoDims[0].uniqueValues + + // Category order logic + // 1) + + // Build path info + // --------------- + // Mapping from category inds to PathModel objects + var pathModels = {}; + + // Category inds array for each dimension + var categoryIndsDims = uniqueInfoDims.map(function(di) {return di.inds}); + + // Initialize total count + totalCount = 0; + + for (var valueInd=0; valueInd < numValues; valueInd++) { + + // Category inds for this input value across dimensions + var categoryIndsPath = []; + for (var d=0; d < categoryIndsDims.length; d++) { + categoryIndsPath.push(categoryIndsDims[d][valueInd]); + } + + // Count + count = counts[valueInd % counts.length]; + + // Update total count + totalCount+= count; + + // Path color + var pathColorInfo = getMarkerColorInfo(valueInd); + + // path key + var pathKey = categoryIndsPath + '-' + pathColorInfo.rawColor; + + // Create / Update PathModel + if (pathModels[pathKey] === undefined) { + pathModels[pathKey] = createPathModel(categoryIndsPath, + pathColorInfo.color, + pathColorInfo.rawColor); + } + updatePathModel(pathModels[pathKey], valueInd, count); + } + + // Build categories info + // --------------------- + + // Array of DimensionModel objects + var dimensionModels = trace.dimensions.map(function(di, i) { + return createDimensionModel(i, di.displayInd, di.label, totalCount); + }); + + + for (valueInd=0; valueInd < numValues; valueInd++) { + + count = counts[valueInd % counts.length]; + + for (d=0; d < dimensionModels.length; d++) { + var catInd = uniqueInfoDims[d].inds[valueInd]; + var cats = dimensionModels[d].categories; + + + if (cats[catInd] === undefined) { + var catLabel = trace.dimensions[d].catLabels[catInd]; + var displayInd = trace.dimensions[d].catDisplayInds[catInd]; + + cats[catInd] = createCategoryModel(d, catInd, displayInd, catLabel); + } + + updateCategoryModel(cats[catInd], valueInd, count); + } + } + + // Compute unique + return wrap(createParcatsModel(dimensionModels, pathModels, totalCount)); +}; + + +// Utilities +// ========= +function getValue(arrayOrScalar, index) { + var value; + if(!Array.isArray(arrayOrScalar)) value = arrayOrScalar; + else if(index < arrayOrScalar.length) value = arrayOrScalar[index]; + return value; +} + + +// Models +// ====== + +// Parcats Model +// ------------- +/** + * @typedef {Object} ParcatsModel + * Object containing calculated information about a parcats trace + * + * @property {Array.} dimensions + * Array of dimension models + * @property {Object.} paths + * Dictionary from category inds string (e.g. "1,2,1,1") to path model + * @property {Number} maxCats + * The maximum number of categories of any dimension in the diagram + * @property {Number} count + * Total number of input values + * @property {Object} trace + */ + +/** + * Create and new ParcatsModel object + * @param {Array.} dimensions + * @param {Object.} paths + * @param {Number} count + * @return {ParcatsModel} + */ +function createParcatsModel(dimensions, paths, count) { + var maxCats = dimensions + .map(function(d) {return d.categories.length}) + .reduce(function(v1, v2) {return Math.max(v1, v2)}); + return {dimensions: dimensions, paths: paths, trace: undefined, maxCats: maxCats, count: count} +} + +// Dimension Model +// --------------- +/** + * @typedef {Object} DimensionModel + * Object containing calculated information about a single dimension + * + * @property {Number} dimensionInd + * The index of this dimension + * @property {Number} displayInd + * The display index of this dimension (where 0 is the left most dimension) + * @property {String} dimensionLabel + * The label of this dimension + * @property {Number} count + * Total number of input values + * @property {Array.} categories + * @property {Number|null} dragX + * The x position of dimension that is currently being dragged. null if not being dragged + */ + +/** + * Create and new DimensionModel object with an empty categories array + * @param {Number} dimensionInd + * @param {Number} displayInd + * The display index of this dimension (where 0 is the left most dimension) + * @param {String} dimensionLabel + * @param {Number} count + * Total number of input values + * @return {DimensionModel} + */ +function createDimensionModel(dimensionInd, displayInd, dimensionLabel, count) { + return { + dimensionInd: dimensionInd, + displayInd: displayInd, + dimensionLabel: dimensionLabel, + count: count, + categories: [], + dragX: null + } +} + +// Category Model +// -------------- +/** + * @typedef {Object} CategoryModel + * Object containing calculated information about a single category. + * + * @property {Number} dimensionInd + * The index of this categories dimension + * @property {Number} categoryInd + * The index of this category + * @property {Number} displayInd + * The display index of this category (where 0 is the topmost category) + * @property {String} categoryLabel + * The name of this category + * @property {Array} valueInds + * Array of indices (into the original value array) of all samples in this category + * @property {Number} count + * The number of elements from the original array in this path + * @property {Number|null} dragY + * The y position of category that is currently being dragged. null if not being dragged + */ + +/** + * Create and return a new CategoryModel object + * @param {Number} dimensionInd + * @param {Number} categoryInd + * @param {Number} displayInd + * The display index of this category (where 0 is the topmost category) + * @param {String} categoryLabel + * @return {CategoryModel} + */ +function createCategoryModel(dimensionInd, categoryInd, displayInd, categoryLabel) { + return { + dimensionInd: dimensionInd, + categoryInd: categoryInd, + displayInd: displayInd, + categoryLabel: categoryLabel, + valueInds: [], + count: 0, + dragY: null + } +} + +/** + * Update a CategoryModel object with a new value index + * Note: The calling parameter is modified in place. + * + * @param {CategoryModel} categoryModel + * @param {Number} valueInd + * @param {Number} count + */ +function updateCategoryModel(categoryModel, valueInd, count) { + categoryModel.valueInds.push(valueInd); + categoryModel.count+= count; +} + + +// Path Model +// ---------- +/** + * @typedef {Object} PathModel + * Object containing calculated information about the samples in a path. + * + * @property {Array} categoryInds + * Array of category indices for each dimension (length `numDimensions`) + * @param {String} pathColor + * Color of this path. (Note: Any colorscaling has already taken place) + * @property {Array} valueInds + * Array of indices (into the original value array) of all samples in this path + * @property {Number} count + * The number of elements from the original array in this path + * @property {String} color + * The path's color (ass CSS color string) + * @property rawColor + * The raw color value specified by the user. May be a CSS color string or a Number + */ + +/** + * Create and return a new PathModel object + * @param {Array} categoryInds + * @param color + * @param rawColor + * @return {PathModel} + */ +function createPathModel(categoryInds, color, rawColor) { + return { + categoryInds: categoryInds, + color: color, + rawColor: rawColor, + valueInds: [], + count: 0 + } +} + +/** + * Update a PathModel object with a new value index + * Note: The calling parameter is modified in place. + * + * @param {PathModel} pathModel + * @param {Number} valueInd + * @param {Number} count + */ +function updatePathModel(pathModel, valueInd, count) { + pathModel.valueInds.push(valueInd); + pathModel.count+= count; +} + +// Unique calculations +// =================== +/** + * @typedef {Object} UniqueInfo + * Object containing information about the unique values of an input array + * + * @property {Array} uniqueValues + * The unique values in the input array + * @property {Array} uniqueCounts + * The number of times each entry in uniqueValues occurs in input array. + * This has the same length as `uniqueValues` + * @property {Array} inds + * Indices into uniqueValues that would reproduce original input array + */ + +/** + * Compute unique value information for an array + * + * IMPORTANT: Note that values are considered unique + * if their string representations are unique. + * + * @param {Array} values + * @param {Array|undefined} uniqueValues + * Array of expected unique values. The uniqueValues property of the resulting UniqueInfo object will begin with + * these entries. Entries are included even if there are zero occurrences in the values array. Entries found in + * the values array that are not present in uniqueValues will be included at the end of the array in the + * UniqueInfo object. + * @return {UniqueInfo} + */ +function getUniqueInfo(values, uniqueValues) { + + // Initialize uniqueValues if not specified + if (uniqueValues === undefined || uniqueValues === null) { + uniqueValues = []; + } else { + // Shallow copy so append below doesn't alter input array + uniqueValues = uniqueValues.map(function(e){return e}); + } + + // Initialize Variables + var uniqueValueCounts = {}, + uniqueValueInds = {}, + inds = []; + + // Initialize uniqueValueCounts and + uniqueValues.forEach(function(uniqueVal, valInd) { + uniqueValueCounts[uniqueVal] = 0; + uniqueValueInds[uniqueVal] = valInd; + }); + + // Compute the necessary unique info in a single pass + for(var i = 0; i < values.length; i++) { + var item = values[i]; + var itemInd; + + if(uniqueValueCounts[item] === undefined) { + // This item has a previously unseen value + uniqueValueCounts[item] = 1; + itemInd = uniqueValues.push(item) - 1; + uniqueValueInds[item] = itemInd; + } else { + // Increment count for this item + uniqueValueCounts[item]++; + itemInd = uniqueValueInds[item]; + } + inds.push(itemInd) + } + + // Build UniqueInfo + var uniqueCounts = uniqueValues.map(function (v) { return uniqueValueCounts[v] }); + + return { + uniqueValues: uniqueValues, + uniqueCounts: uniqueCounts, + inds: inds + } +} + + +/** + * Validate the requested display order for the dimensions. + * If the display order is a permutation of 0 through dimensions.length - 1 then leave it alone. Otherwise, repalce + * the display order with the dimension order + * @param {Object} trace + */ +function validateDimensionDisplayInds(trace) { + var displayInds = trace.dimensions.map(function(dim) {return dim.displayInd}); + if (!isRangePermutation(displayInds)) { + trace.dimensions.forEach(function (dim, i){ + dim.displayInd = i; + }) + } +} + + +/** + * Validate the requested display order for the dimensions. + * If the display order is a permutation of 0 through dimensions.length - 1 then leave it alone. Otherwise, repalce + * the display order with the dimension order + * @param {Object} dim + * @param {UniqueInfo} uniqueInfoDim + */ +function validateCategoryProperties(dim, uniqueInfoDim) { + var uniqueDimVals = uniqueInfoDim.uniqueValues; + + // Update catValues + dim.catValues = uniqueDimVals; + + // Handle catDisplayInds + if (dim.catDisplayInds.length !== uniqueDimVals.length || !isRangePermutation(dim.catDisplayInds)) { + dim.catDisplayInds = uniqueDimVals.map(function(v, i) {return i}); + } + + // Handle catLabels + if (dim.catLabels === null || dim.catLabels === undefined) { + dim.catLabels = []; + } else { + // Shallow copy to avoid modifying input array + dim.catLabels = dim.catLabels.map(function(v) {return v}); + } + + // Extend catLabels with elements from uniqueInfoDim.uniqueValues + for (var i=dim.catLabels.length; i < uniqueInfoDim.uniqueValues.length; i++) { + dim.catLabels.push(uniqueInfoDim.uniqueValues[i]) + } +} + +/** + * Determine whether an array contains a permutation of the integers from 0 to the array's length - 1 + * @param {Array} inds + * @return {boolean} + */ +function isRangePermutation(inds) { + var indsSpecified = new Array(inds.length); + + for (var i=0; i < inds.length; i++) { + // Check for out of bounds + if (inds[i] < 0 || inds[i] >= inds.length) { + return false; + } + + // Check for collisions with already specified index + if (indsSpecified[inds[i]] !== undefined) { + return false; + } + + indsSpecified[inds[i]] = true; + } + + // Nothing out of bounds and no collisions. We have a permutation + return true +} + +/** + * Determine whether two arrays are permutations of each other + * This is accomplished by sorting both arrays lexicographically and checking element equality + * @param {Array} a1 + * @param {Array} a2 + */ +function arePermutations(a1, a2) { + + // Check for equal length + if (a1 === null || a2 === null || a1.length !== a2.length) { + return false + } else { + var a1_sorted = a1.map(function(v){return v}); + a1_sorted.sort(); + + var a2_sorted = a2.map(function(v){return v}); + a2_sorted.sort(); + + for(var i=0; i < a1_sorted.length; i++) { + if (a1_sorted[i] !== a2_sorted[i]) { + // Elements not equal + return false; + } + } + + // Same number of elemenets and all elements equal + return true; + } +} diff --git a/src/traces/parcats/colorbar.js b/src/traces/parcats/colorbar.js new file mode 100644 index 00000000000..34311390879 --- /dev/null +++ b/src/traces/parcats/colorbar.js @@ -0,0 +1,52 @@ +/** +* Copyright 2012-2017, Plotly, Inc. +* All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. +*/ + + +'use strict'; + +var isNumeric = require('fast-isnumeric'); + +var Lib = require('../../lib'); +var Plots = require('../../plots/plots'); +var Colorscale = require('../../components/colorscale'); +var drawColorbar = require('../../components/colorbar/draw'); + + +module.exports = function colorbar(gd, cd) { + var trace = cd[0].trace, + marker = trace.marker, + cbId = 'cb' + trace.uid; + + gd._fullLayout._infolayer.selectAll('.' + cbId).remove(); + + if((marker === undefined) || !marker.showscale) { + Plots.autoMargin(gd, cbId); + return; + } + + var vals = marker.color, + cmin = marker.cmin, + cmax = marker.cmax; + + if(!isNumeric(cmin)) cmin = Lib.aggNums(Math.min, null, vals); + if(!isNumeric(cmax)) cmax = Lib.aggNums(Math.max, null, vals); + + var cb = cd[0].t.cb = drawColorbar(gd, cbId); + var sclFunc = Colorscale.makeColorScaleFunc( + Colorscale.extractScale( + marker.colorscale, + cmin, + cmax + ), + { noNumericCheck: true } + ); + + cb.fillcolor(sclFunc) + .filllevels({start: cmin, end: cmax, size: (cmax - cmin) / 254}) + .options(marker.colorbar)(); +}; diff --git a/src/traces/parcats/constants.js b/src/traces/parcats/constants.js new file mode 100644 index 00000000000..4036485d788 --- /dev/null +++ b/src/traces/parcats/constants.js @@ -0,0 +1,60 @@ +/** +* Copyright 2012-2017, Plotly, Inc. +* All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. +*/ + +'use strict'; + + +module.exports = { + maxDimensionCount: 12, + defaultColor: 'lightgray', + + // overdrag: 45, + // verticalPadding: 2, // otherwise, horizontal lines on top or bottom are of lower width + // tickDistance: 50, + // canvasPixelRatio: 1, + // blockLineCount: 5000, + // scatter: false, + // layers: ['contextLineLayer', 'focusLineLayer', 'pickLineLayer'], + // axisTitleOffset: 28, + // axisExtentOffset: 10, + // bar: { + // width: 4, // Visible width of the filter bar + // capturewidth: 10, // Mouse-sensitive width for interaction (Fitts law) + // fillcolor: 'magenta', // Color of the filter bar fill + // fillopacity: 1, // Filter bar fill opacity + // strokecolor: 'white', // Color of the filter bar side lines + // strokeopacity: 1, // Filter bar side stroke opacity + // strokewidth: 1, // Filter bar side stroke width in pixels + // handleheight: 16, // Height of the filter bar vertical resize areas on top and bottom + // handleopacity: 1, // Opacity of the filter bar vertical resize areas on top and bottom + // handleoverlap: 0 // A larger than 0 value causes overlaps with the filter bar, represented as pixels.' + // }, + cn: { + className: 'parcats' + // axisExtentText: 'axis-extent-text', + // parcoordsLineLayers: 'parcoords-line-layers', + // parcoordsLineLayer: 'parcoords-lines', + // parcoords: 'parcoords', + // parcoordsControlView: 'parcoords-control-view', + // yAxis: 'y-axis', + // axisOverlays: 'axis-overlays', + // axis: 'axis', + // axisHeading: 'axis-heading', + // axisTitle: 'axis-title', + // axisExtent: 'axis-extent', + // axisExtentTop: 'axis-extent-top', + // axisExtentTopText: 'axis-extent-top-text', + // axisExtentBottom: 'axis-extent-bottom', + // axisExtentBottomText: 'axis-extent-bottom-text', + // axisBrush: 'axis-brush' + }, + // id: { + // filterBarPattern: 'filter-bar-pattern' + // + // } +}; diff --git a/src/traces/parcats/defaults.js b/src/traces/parcats/defaults.js new file mode 100644 index 00000000000..2fee8302855 --- /dev/null +++ b/src/traces/parcats/defaults.js @@ -0,0 +1,120 @@ +/** +* Copyright 2012-2017, Plotly, Inc. +* All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. +*/ + +'use strict'; + +var Lib = require('../../lib'); +var attributes = require('./attributes'); +var parcatConstants = require('./constants'); +var hasColorscale = require('../../components/colorscale/has_colorscale'); +var colorscaleDefaults = require('../../components/colorscale/defaults'); +var colorbarDefaults = require('../../components/colorbar/defaults'); + +function markerDefaults(traceIn, traceOut, defaultColor, layout, coerce) { + + coerce('marker.color', defaultColor); + + if (traceIn.marker) { + coerce('marker.cmin'); + coerce('marker.cmax'); + coerce('marker.cauto'); + coerce('marker.colorscale'); + coerce('marker.showscale'); + coerce('marker.shape'); + colorbarDefaults(traceIn.marker, traceOut.marker, layout); + } +} + +function dimensionsDefaults(traceIn, traceOut) { + var dimensionsIn = traceIn.dimensions || [], + dimensionsOut = traceOut.dimensions = []; + + var dimensionIn, dimensionOut, i; + var commonLength = Infinity; + + if(dimensionsIn.length > parcatConstants.maxDimensionCount) { + Lib.log('parcats traces support up to ' + parcatConstants.maxDimensionCount + ' dimensions at the moment'); + dimensionsIn.splice(parcatConstants.maxDimensionCount); + } + + function coerce(attr, dflt) { + return Lib.coerce(dimensionIn, dimensionOut, attributes.dimensions, attr, dflt); + } + + for(i = 0; i < dimensionsIn.length; i++) { + dimensionIn = dimensionsIn[i]; + dimensionOut = {}; + + if(!Lib.isPlainObject(dimensionIn)) { + continue; + } + + // Dimension level + var values = coerce('values'); + coerce('label'); + coerce('displayInd', i); + + // Category level + coerce('catDisplayInds'); + coerce('catValues'); + coerce('catLabels'); + + // Pass through catValues, catorder, and catlabels (validated in calc since this is where unique info is available) + + // pass through marker (color, line) + // Pass through font + + commonLength = Math.min(commonLength, dimensionOut.values.length); + + // dimensionOut._index = i; + dimensionsOut.push(dimensionOut); + } + + if(isFinite(commonLength)) { + for(i = 0; i < dimensionsOut.length; i++) { + dimensionOut = dimensionsOut[i]; + if(dimensionOut.values.length > commonLength) { + dimensionOut.values = dimensionOut.values.slice(0, commonLength); + } + } + } + + // handle dimension order + // If specified for all dimensions and no collisions or holes keep, otherwise discard + + // Pass through value colors + // Pass through opacity + + // Pass through dimension font + // Pass through category font + + return dimensionsOut; +} + +module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout) { + console.log(traceIn); + + function coerce(attr, dflt) { + return Lib.coerce(traceIn, traceOut, attributes, attr, dflt); + } + + var dimensions = dimensionsDefaults(traceIn, traceOut); + + coerce('domain.x'); + coerce('domain.y'); + + markerDefaults(traceIn, traceOut, defaultColor, layout, coerce); + + coerce('hovermode'); + coerce('tooltip'); + coerce('bundlecolors'); + coerce('sortpaths'); + coerce('counts'); + + console.log(['dimensionsDefaults', traceIn, traceOut]); +}; diff --git a/src/traces/parcats/index.js b/src/traces/parcats/index.js new file mode 100644 index 00000000000..868245feea7 --- /dev/null +++ b/src/traces/parcats/index.js @@ -0,0 +1,29 @@ +/** +* Copyright 2012-2017, Plotly, Inc. +* All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. +*/ + +'use strict'; + +var Parcats = {}; + +Parcats.attributes = require('./attributes'); +Parcats.supplyDefaults = require('./defaults'); +Parcats.calc = require('./calc'); +Parcats.plot = require('./plot'); +Parcats.colorbar = require('./colorbar'); + +Parcats.moduleType = 'trace'; +Parcats.name = 'parcats'; +Parcats.basePlotModule = require('./base_plot'); +Parcats.categories = ['noOpacity', 'markerColorscale']; +Parcats.meta = { + description: [ + 'Parallel categories diagram for multidimensional categorical data.' + ].join(' ') +}; + +module.exports = Parcats; diff --git a/src/traces/parcats/parcats.js b/src/traces/parcats/parcats.js new file mode 100644 index 00000000000..4d98819a81d --- /dev/null +++ b/src/traces/parcats/parcats.js @@ -0,0 +1,1917 @@ +/** +* Copyright 2012-2017, Plotly, Inc. +* All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. +*/ + +'use strict'; + +// var c = require('./constants'); +var d3 = require('d3'); +var Plotly = require('../../plot_api/plot_api'); +var Fx = require('../../components/fx'); +var Lib = require('../../lib'); +var tinycolor = require('tinycolor2'); + +function performPlot(parcatsModels, graphDiv, layout, svg) { + + var viewModels = parcatsModels.map(createParcatsViewModel.bind(0, graphDiv, layout)); + + console.log(['viewModels', viewModels]); + + // Get (potentially empty) parcatslayer selection with bound data to single element array + var layerSelection = svg.selectAll('g.parcatslayer').data([null]); + + // Initialize single parcatslayer group if it doesn't exist + layerSelection.enter() + .append('g') + .attr('class', 'parcatslayer') + .style('pointer-events', 'all'); + + // Bind data to children of layerSelection and get reference to traceSelection + var traceSelection = layerSelection + .selectAll('g.trace.parcats') + .data(viewModels, key); + + // Initialize group for each trace/dimensions + var traceEnter = traceSelection.enter() + .append('g') + .attr('class', 'trace parcats'); + + // Update properties for each trace + traceSelection + .attr('transform', function (d) { + return 'translate(' + d.x + ', ' + d.y + ')'; + }); + + // Initialize paths group + traceEnter + .append('g') + .attr('class', 'paths'); + + // Update paths transform + var pathsSelection = traceSelection + .select('g.paths'); + + // Get paths selection + var pathSelection = pathsSelection + .selectAll('path.path') + .data(function (d) { + return d.paths + }, key); + + // Update existing path colors + pathSelection + .attr('fill', function(d) { + return d.model.color + }); + + // Create paths + var pathSelectionEnter = pathSelection + .enter() + .append('path') + .attr('class', 'path') + .attr('stroke-opacity', 0) + .attr('fill', function(d) { + return d.model.color + }) + .attr('fill-opacity', 0); + + stylePathsNoHover(pathSelectionEnter); + + // Set path geometry + pathSelection + .attr('d', function (d) { + return d.svgD + }); + + // sort paths + if (!pathSelectionEnter.empty()) { + // Only sort paths if there has been a change. + // Otherwise paths are already sorted or a hover operation may be in progress + pathSelection.sort(compareRawColor); + } + + // Remove any old paths + pathSelection.exit().remove(); + + // Path hover + pathSelection + .on('mouseover', mouseoverPath) + .on('mouseout', mouseoutPath) + .on('click', clickPath); + + // Initialize dimensions group + traceEnter.append('g').attr('class', 'dimensions'); + + // Update dimensions transform + var dimensionsSelection = traceSelection + .select('g.dimensions'); + + // Get dimension selection + var dimensionSelection = dimensionsSelection + .selectAll('g.dimension') + .data(function (d) { + return d.dimensions + }, key); + + // Create dimension groups + dimensionSelection.enter() + .append('g') + .attr('class', 'dimension'); + + // Update dimension group transforms + dimensionSelection.attr('transform', function (d) { + return 'translate(' + d.x + ', 0)'; + }); + + // Remove any old dimensions + dimensionSelection.exit().remove(); + + // Get category selection + var categorySelection = dimensionSelection + .selectAll('g.category') + .data(function (d) { + return d.categories; + }, key); + + // Initialize category groups + var categoryGroupEnterSelection = categorySelection + .enter() + .append('g') + .attr('class', 'category'); + + // Update category transforms + categorySelection + .attr('transform', function (d) { + return 'translate(0, ' + d.y + ')' + }); + + + // Initialize rectangle + categoryGroupEnterSelection + .append('rect') + .attr('class', 'catrect') + .attr('pointer-events', 'none'); + + + // Update rectangle + categorySelection.select('rect.catrect') + .attr('fill', 'none') + .attr('width', function (d) { + return d.width; + }) + .attr('height', function (d) { + return d.height; + }); + + styleCategoriesNoHover(categoryGroupEnterSelection); + + // Initialize color band rects + var bandSelection = categorySelection + .selectAll('rect.bandrect') + .data( + /** @param {CategoryViewModel} catViewModel*/ + function (catViewModel) { + return catViewModel.bands; + }, key); + + // Raise all update bands to the top so that fading enter/exit bands will be behind + bandSelection.each(function() {Lib.raiseToTop(this)}); + + // Update band color + bandSelection + .attr('fill', function(d) { + return d.color + }); + + var bandsSelectionEnter = bandSelection.enter() + .append('rect') + .attr('class', 'bandrect') + .attr('cursor', 'move') + .attr('stroke-opacity', 0) + .attr('fill', function(d) { + return d.color + }) + .attr('fill-opacity', 0); + + bandSelection + .attr('fill', function (d) { + return d.color; + }) + .attr('width', function (d) { + return d.width; + }) + .attr('height', function (d) { + return d.height; + }) + .attr('y', function (d) { + return d.y; + }); + + styleBandsNoHover(bandsSelectionEnter); + + bandSelection.exit().remove(); + + // Initialize category label + categoryGroupEnterSelection + .append('text') + .attr('class', 'catlabel') + .attr('pointer-events', 'none'); + + // Update category label + categorySelection.select('text.catlabel') + .attr('text-anchor', + function (d) { + if (catInRightDim(d)) { + // Place label to the right of category + return 'start'; + } else { + // Place label to the left of category + return 'end'; + } + }) + .attr('alignment-baseline', 'middle') + + .style('text-shadow', + 'rgb(255, 255, 255) -1px 1px 2px, ' + + 'rgb(255, 255, 255) 1px 1px 2px, ' + + 'rgb(255, 255, 255) 1px -1px 2px, ' + + 'rgb(255, 255, 255) -1px -1px 2px') + .attr('font-size', 10) + .style('fill', 'rgb(0, 0, 0)') + .attr('x', + function (d) { + if (catInRightDim(d)) { + // Place label to the right of category + return d.width + 5; + } else { + // Place label to the left of category + return -5; + } + }) + .attr('y', function (d) { + return d.height / 2; + }) + .text(function (d) { + return d.model.categoryLabel; + }); + + // Initialize dimension label + categoryGroupEnterSelection + .append('text') + .attr('class', 'dimlabel'); + + // Update dimension label + categorySelection.select('text.dimlabel') + .attr('text-anchor', 'middle') + .attr('alignment-baseline', 'baseline') + .attr('cursor', 'ew-resize') + .attr('font-size', 14) + .attr('x', function (d) { + return d.width / 2; + }) + .attr('y', -5) + .text(function (d, i) { + if (i === 0) { + // Add dimension label above topmost category + return d.parcatsViewModel.model.dimensions[d.model.dimensionInd].dimensionLabel; + } else { + return null + } + }); + + // Category hover + // categorySelection.select('rect.catrect') + categorySelection.selectAll('rect.bandrect') + .on('mouseover', mouseoverCategoryBand) + .on('mouseout', function (d) { + mouseoutCategory(d.parcatsViewModel) + }); + + // Remove unused categories + categorySelection.exit().remove(); + + // Setup drag + dimensionSelection.call(d3.behavior.drag() + .origin(function (d) { + return {x: d.x, y: 0} + }) + .on("dragstart", dragDimensionStart) + .on("drag", dragDimension) + .on("dragend", dragDimensionEnd)); + + + // Save off selections to view models + traceSelection.each(function (d) { + d.traceSelection = d3.select(this); + d.pathSelection = d3.select(this).selectAll('g.paths').selectAll('path.path'); + d.dimensionSelection = d3.select(this).selectAll('g.dimensions').selectAll('g.dimension') + }); + + // Remove any orphan traces + traceSelection.exit().remove(); +} + +/** + * Create / update parcat traces + * + * @param {Object} graphDiv + * @param {Object} svg + * @param {Array.} parcatsModels + * @param {Layout} layout + */ +module.exports = function(graphDiv, svg, parcatsModels, layout) { + console.log(['parcats', parcatsModels, layout]); + performPlot(parcatsModels, graphDiv, layout, svg); +}; + +/** + * Function the returns the key property of an object for use with as D3 join function + * @param d + */ +function key(d) { + return d.key; +} + + /** True if a category view model is in the right-most display dimension + * @param {CategoryViewModel} d */ + function catInRightDim(d) { + var numDims = d.parcatsViewModel.dimensions.length, + leftDimInd = d.parcatsViewModel.dimensions[numDims - 1].model.dimensionInd; + return d.model.dimensionInd === leftDimInd; + } + +/** + * @param {PathViewModel} a + * @param {PathViewModel} b + */ +function compareRawColor(a, b) { + if (a.model.rawColor > b.model.rawColor) { + return 1 + } else if (a.model.rawColor < b.model.rawColor){ + return -1 + } else { + return 0 + } +} + +/** + * Handle path mouseover + * @param {PathViewModel} d + */ +function mouseoverPath(d) { + + if (!d.parcatsViewModel.dragDimension) { + // We're not currently dragging + + if (d.parcatsViewModel.hovermode !== 'none') { + + // Raise path to top + Lib.raiseToTop(this); + + stylePathsHover(d3.select(this)); + + // Emit hover event + var points = buildPointsArrayForPath(d); + d.parcatsViewModel.graphDiv.emit('plotly_hover', {points: points, event: d3.event}); + + // Handle tooltip + if (d.parcatsViewModel.tooltip) { + + // Mouse + var hoverX = d3.mouse(this)[0]; + + // Tooltip + var gd = d.parcatsViewModel.graphDiv; + var fullLayout = gd._fullLayout; + var rootBBox = fullLayout._paperdiv.node().getBoundingClientRect(); + var graphDivBBox = d.parcatsViewModel.graphDiv.getBoundingClientRect(); + + // Find path center in path coordinates + var pathCenterX, + pathCenterY, + dimInd; + + for (dimInd = 0; dimInd < (d.leftXs.length - 1); dimInd++) { + if (d.leftXs[dimInd] + d.dimWidths[dimInd] - 2 <= hoverX && hoverX <= d.leftXs[dimInd + 1] + 2) { + var leftDim = d.parcatsViewModel.dimensions[dimInd]; + var rightDim = d.parcatsViewModel.dimensions[dimInd + 1]; + pathCenterX = (leftDim.x + leftDim.width + rightDim.x) / 2; + pathCenterY = (d.topYs[dimInd] + d.topYs[dimInd + 1] + d.height) / 2; + break + } + } + + // Find path center in root coordinates + var hoverCenterX = d.parcatsViewModel.x + pathCenterX; + var hoverCenterY = d.parcatsViewModel.y + pathCenterY; + + var textColor = tinycolor.mostReadable(d.model.color, ['black', 'white']); + + var tooltip = Fx.customHovers({ + x: hoverCenterX - rootBBox.left + graphDivBBox.left, + y: hoverCenterY - rootBBox.top + graphDivBBox.top, + text: [ + ['Count:', d.model.count].join(' '), + ['P:', (d.model.count / d.parcatsViewModel.model.count).toFixed(3)].join(' ') + ].join('
'), + + color: d.model.color, + borderColor: 'black', + fontFamily: 'Monaco, "Courier New", monospace', + fontSize: 10, + fontColor: textColor, + idealAlign: d3.event.x < hoverCenterX ? 'right' : 'left' + }, { + container: fullLayout._hoverlayer.node(), + outerContainer: fullLayout._paper.node(), + gd: gd + }); + } + } + } +} + +/** + * Handle path mouseout + * @param {PathViewModel} d + */ +function mouseoutPath(d) { + if (!d.parcatsViewModel.dragDimension) { + // We're not currently dragging + stylePathsNoHover(d3.select(this)); + + // Remove tooltip + Fx.loneUnhover(d.parcatsViewModel.graphDiv._fullLayout._hoverlayer.node()); + + // Restore path order + d.parcatsViewModel.pathSelection.sort(compareRawColor); + } +} + +/** + * Build array of point objects for a path + * + * For use in click/hover events + * @param {PathViewModel} d + */ +function buildPointsArrayForPath(d) { + var points = []; + var curveNumber = getTraceIndex(d.parcatsViewModel); + + for (var i = 0; i < d.model.valueInds.length; i++) { + var pointNumber = d.model.valueInds[i]; + points.push({ + curveNumber: curveNumber, + pointNumber: pointNumber + }) + } + return points; +} + +/** + * Handle path click + * @param {PathViewModel} d + */ +function clickPath(d) { + if (d.parcatsViewModel.hovermode !== 'none') { + var points = buildPointsArrayForPath(d); + d.parcatsViewModel.graphDiv.emit('plotly_click', {points: points, event: d3.event}); + } +} + +function stylePathsNoHover(pathSelection) { + pathSelection + .attr('fill', function(d) { + return d.model.color + }) + .attr('fill-opacity', 0.6) + .attr('stroke', 'lightgray') + .attr('stroke-width', 0.2) + .attr('stroke-opacity', 1.0); +} + +function stylePathsHover(pathSelection) { + pathSelection + .attr('fill-opacity', 0.8) + .attr('stroke', function(d) { + return tinycolor.mostReadable(d.model.color, ['black', 'white']); + }) + .attr('stroke-width', 0.3); +} + +function styleCategoryHover(categorySelection) { + categorySelection + .select('rect.catrect') + .attr('stroke', 'black') + .attr('stroke-width', 2.5); +} + +function styleCategoriesNoHover(categorySelection) { + categorySelection + .select('rect.catrect') + .attr('stroke', 'black') + .attr('stroke-width', 1) + .attr('stroke-opacity', 1); +} + +function styleBandsHover(bandsSelection) { + bandsSelection + .attr('stroke', 'black') + .attr('stroke-width', 1.5) +} + +function styleBandsNoHover(bandsSelection) { + bandsSelection + .attr('stroke', 'black') + .attr('stroke-width', 0.2) + .attr('stroke-opacity', 1.0) + .attr('fill-opacity', 1.0); +} + +/** + * Return selection of all paths that pass through the specified category + * @param {CategoryBandViewModel} catBandViewModel + */ +function selectPathsThroughCategoryBandColor(catBandViewModel) { + + var allPaths = catBandViewModel.parcatsViewModel.pathSelection; + var dimInd = catBandViewModel.categoryViewModel.model.dimensionInd; + var catInd = catBandViewModel.categoryViewModel.model.categoryInd; + + return allPaths + .filter( + /** @param {PathViewModel} pathViewModel */ + function(pathViewModel) { + return pathViewModel.model.categoryInds[dimInd] === catInd && + pathViewModel.model.color === catBandViewModel.color; + }) +} + + +/** + * Perform hover styling for all paths that pass though the specified band element's category + * + * @param {HTMLElement} bandElement + * HTML element for band + * + */ +function styleForCategoryHovermode(bandElement) { + + // Get all bands in the current category + var bandSel = d3.select(bandElement.parentNode).selectAll('rect.bandrect'); + + // Raise and style paths + bandSel.each(function(bvm) { + var paths = selectPathsThroughCategoryBandColor(bvm); + stylePathsHover(paths); + paths.each(function(d) { + // Raise path to top + Lib.raiseToTop(this); + }); + }); + + // Style category + styleCategoryHover(d3.select(bandElement.parentNode)); +} + +/** + * Perform hover styling for all paths that pass though the category of the specified band element and share the + * same color + * + * @param {HTMLElement} bandElement + * HTML element for band + * + */ +function styleForColorHovermode(bandElement) { + var bandViewModel = d3.select(bandElement).datum(); + var catPaths = selectPathsThroughCategoryBandColor(bandViewModel); + stylePathsHover(catPaths); + catPaths.each(function(d) { + // Raise path to top + Lib.raiseToTop(this); + }); + + // Style category for drag + d3.select(bandElement.parentNode) + .selectAll('rect.bandrect') + .filter(function(b) {return b.color === bandViewModel.color}) + .each(function(b) { + Lib.raiseToTop(this); + styleBandsHover(d3.select(this)); + }) +} + + +/** + * @param {HTMLElement} bandElement + * HTML element for band + * @param eventName + * Event name (plotly_hover or plotly_click) + * @param event + * Mouse Event + */ +function emitPointsEventCategoryHovermode(bandElement, eventName, event) { + // Get all bands in the current category + var bandViewModel = d3.select(bandElement).datum(); + var gd = bandViewModel.parcatsViewModel.graphDiv; + var bandSel = d3.select(bandElement.parentNode).selectAll('rect.bandrect'); + + var points = []; + bandSel.each(function(bvm) { + var paths = selectPathsThroughCategoryBandColor(bvm); + paths.each(function(pathViewModel) { + // Extend points array + Array.prototype.push.apply(points, buildPointsArrayForPath(pathViewModel)); + }) + }); + + gd.emit(eventName, {points: points, event: event}); +} + +/** + * @param {HTMLElement} bandElement + * HTML element for band + * @param eventName + * Event name (plotly_hover or plotly_click) + * @param event + * Mouse Event + */ +function emitPointsEventColorHovermode(bandElement, eventName, event) { + var bandViewModel = d3.select(bandElement).datum(); + var gd = bandViewModel.parcatsViewModel.graphDiv; + var paths = selectPathsThroughCategoryBandColor(bandViewModel); + + var points = []; + paths.each(function(pathViewModel) { + // Extend points array + Array.prototype.push.apply(points, buildPointsArrayForPath(pathViewModel)); + }); + + gd.emit(eventName, {points: points, event: event}); +} + +/** + * Create tooltip for a band element's category (for use when hovermode === 'category') + * + * @param {ClientRect} rootBBox + * Client bounding box for root of figure + * @param {HTMLElement} bandElement + * HTML element for band + * + */ +function createTooltipForCategoryHovermode(rootBBox, bandElement) { + // Build tooltips + var rectSelection = d3.select(bandElement.parentNode).select('rect.catrect'); + var rectBoundingBox = rectSelection.node().getBoundingClientRect(); + + // Models + /** @type {CategoryViewModel} */ + var catViewModel = rectSelection.datum(); + var parcatsViewModel = catViewModel.parcatsViewModel; + var dimensionModel = parcatsViewModel.model.dimensions[catViewModel.model.dimensionInd]; + + // Positions + var hoverCenterY = rectBoundingBox.top + rectBoundingBox.height / 2; + var hoverCenterX, + tooltipIdealAlign; + + if (parcatsViewModel.dimensions.length > 1 && + dimensionModel.displayInd === parcatsViewModel.dimensions.length - 1) { + + // right most dimension + hoverCenterX = rectBoundingBox.left; + tooltipIdealAlign = 'left'; + } else { + hoverCenterX = rectBoundingBox.left + rectBoundingBox.width; + tooltipIdealAlign = 'right'; + } + + var countStr = ['Count:', catViewModel.model.count].join(' '); + var pStr = ['P(' + catViewModel.model.categoryLabel + '):', + (catViewModel.model.count / catViewModel.parcatsViewModel.model.count).toFixed(3)].join(' '); + + return { + x: hoverCenterX - rootBBox.left, + y: hoverCenterY - rootBBox.top, + // name: 'NAME', + text: [ + countStr, + pStr + ].join('
'), + + color: 'lightgray', + borderColor: 'black', + fontFamily: 'Monaco, "Courier New", monospace', + fontSize: 12, + fontColor: 'black', + idealAlign: tooltipIdealAlign + }; +} + + +/** + * Create tooltip for a band element's category (for use when hovermode === 'category') + * + * @param {ClientRect} rootBBox + * Client bounding box for root of figure + * @param {HTMLElement} bandElement + * HTML element for band + * + */ +function createTooltipForColorHovermode(rootBBox, bandElement) { + + var bandBoundingBox = bandElement.getBoundingClientRect(); + + // Models + /** @type {CategoryBandViewModel} */ + var bandViewModel = d3.select(bandElement).datum(); + var catViewModel = bandViewModel.categoryViewModel; + var parcatsViewModel = catViewModel.parcatsViewModel; + var dimensionModel = parcatsViewModel.model.dimensions[catViewModel.model.dimensionInd]; + + // positions + var hoverCenterY = bandBoundingBox.y + bandBoundingBox.height / 2; + + var hoverCenterX, + tooltipIdealAlign; + if (parcatsViewModel.dimensions.length > 1 && + dimensionModel.displayInd === parcatsViewModel.dimensions.length - 1) { + // right most dimension + hoverCenterX = bandBoundingBox.left; + tooltipIdealAlign = 'left'; + } else { + hoverCenterX = bandBoundingBox.left + bandBoundingBox.width; + tooltipIdealAlign = 'right'; + } + + // Labels + var catLabel = catViewModel.model.categoryLabel; + + // Counts + var totalCount = bandViewModel.parcatsViewModel.model.count; + + var bandColorCount = 0; + bandViewModel.categoryViewModel.bands.forEach(function(b) { + if (b.color === bandViewModel.color) { + bandColorCount += b.count; + } + }); + + var catCount = catViewModel.model.count; + + var colorCount = 0; + parcatsViewModel.pathSelection.each( + /** @param {PathViewModel} pathViewModel */ + function(pathViewModel) { + if (pathViewModel.model.color === bandViewModel.color) { + colorCount += pathViewModel.model.count; + } + }); + + // Create talbe to align probability terms + var countStr = ['Count:', bandColorCount].join(' '); + var pColorAndCatLable = 'P(color ∩ ' + catLabel + '): '; + var pColorAndCatValue = (bandColorCount / totalCount).toFixed(3); + var pColorAndCatRow = pColorAndCatLable + pColorAndCatValue; + + var pCatGivenColorLabel = 'P(' + catLabel + ' | color): '; + var pCatGivenColorValue = (bandColorCount / colorCount).toFixed(3); + var pCatGivenColorRow = pCatGivenColorLabel + pCatGivenColorValue; + + var pColorGivenCatLabel = 'P(color | ' + catLabel + '): '; + var pColorGivenCatValue = (bandColorCount / catCount).toFixed(3); + var pColorGivenCatRow = pColorGivenCatLabel + pColorGivenCatValue; + + // Compute text color + var textColor = tinycolor.mostReadable(bandViewModel.color, ['black', 'white']); + + return { + x: hoverCenterX - rootBBox.left, + y: hoverCenterY - rootBBox.top, + // name: 'NAME', + text: [ + countStr, + pColorAndCatRow, pCatGivenColorRow, pColorGivenCatRow + ].join('
'), + + color: bandViewModel.color, + borderColor: 'black', + fontFamily: 'Monaco, "Courier New", monospace', + fontColor: textColor, + fontSize: 10, + idealAlign: tooltipIdealAlign + } +} + +/** + * Handle dimension mouseover + * @param {CategoryBandViewModel} bandViewModel + */ +function mouseoverCategoryBand(bandViewModel) { + if (!bandViewModel.parcatsViewModel.dragDimension) { + // We're not currently dragging + + // Mouse + var mouseY = d3.mouse(this)[1]; + if (mouseY < -1) { + // Hover is above above the category rectangle (probably the dimension title text) + return; + } + + var gd = bandViewModel.parcatsViewModel.graphDiv; + var fullLayout = gd._fullLayout; + var rootBBox = fullLayout._paperdiv.node().getBoundingClientRect(); + var hovermode = bandViewModel.parcatsViewModel.hovermode; + var showTooltip = bandViewModel.parcatsViewModel.tooltip; + + /** @type {HTMLElement} */ + var bandElement = this; + + // Handle style and events + if (hovermode === 'category') { + styleForCategoryHovermode(bandElement); + emitPointsEventCategoryHovermode(bandElement, 'plotly_hover', d3.event); + } else if (hovermode === 'color') { + styleForColorHovermode(bandElement); + emitPointsEventColorHovermode(bandElement, 'plotly_hover', d3.event); + } + + // Handle tooltip + var hoverTooltip; + if (showTooltip) { + if (hovermode === 'category') { + hoverTooltip = createTooltipForCategoryHovermode(rootBBox, bandElement); + } else if (hovermode === 'color') { + hoverTooltip = createTooltipForColorHovermode(rootBBox, bandElement); + } + } + + if (hoverTooltip) { + Fx.loneHover(hoverTooltip, { + container: fullLayout._hoverlayer.node(), + outerContainer: fullLayout._paper.node(), + gd: gd + }); + } + } +} + +/** + * Handle dimension mouseout + * @param {ParcatsViewModel} parcatsViewModel + */ +function mouseoutCategory(parcatsViewModel) { + + if (!parcatsViewModel.dragDimension) { + // We're not dragging anything + + // Reset unhovered styles + stylePathsNoHover(parcatsViewModel.pathSelection); + styleCategoriesNoHover(parcatsViewModel.dimensionSelection.selectAll('g.category')); + styleBandsNoHover(parcatsViewModel.dimensionSelection.selectAll('g.category').selectAll('rect.bandrect')); + + // Remove tooltip + Fx.loneUnhover(parcatsViewModel.graphDiv._fullLayout._hoverlayer.node()); + + // Restore path order + parcatsViewModel.pathSelection.sort(compareRawColor); + } +} + + +/** + * Handle dimension drag start + * @param {DimensionViewModel} d + */ +function dragDimensionStart(d) { + + // Save off initial drag indexes for dimension + d.dragDimensionDisplayInd = d.model.displayInd; + d.initialDragDimensionDisplayInds = d.parcatsViewModel.model.dimensions.map(function(d) {return d.displayInd}); + d.dragHasMoved = false; + + // Check for category hit + d.dragCategoryDisplayInd = null; + d3.select(this) + .selectAll('g.category') + .select('rect.catrect') + .each( + /** @param {CategoryViewModel} catViewModel */ + function (catViewModel) { + var catMouseX = d3.mouse(this)[0]; + var catMouseY = d3.mouse(this)[1]; + + + if (-2 <= catMouseX && catMouseX <= catViewModel.width + 2 && + -2 <= catMouseY && catMouseY <= catViewModel.height + 2) { + + // Save off initial drag indexes for categories + d.dragCategoryDisplayInd = catViewModel.model.displayInd; + d.initialDragCategoryDisplayInds = d.model.categories.map(function (c) { + return c.displayInd + }); + + // Initialize categories dragY to be the current y position + catViewModel.model.dragY = catViewModel.y; + + // Raise category + Lib.raiseToTop(this.parentNode); + + // Get band element + d3.select(this.parentNode) + .selectAll('rect.bandrect') + /** @param {CategoryBandViewModel} bandViewModel */ + .each(function(bandViewModel) { + if (bandViewModel.y < catMouseY && catMouseY <= bandViewModel.y + bandViewModel.height) { + d.potentialClickBand = this; + } + }) + } + }); + + // Update toplevel drag dimension + d.parcatsViewModel.dragDimension = d; + + // Remove any tooltip if any + Fx.loneUnhover(d.parcatsViewModel.graphDiv._fullLayout._hoverlayer.node()); +} + +/** + * Handle dimension drag + * @param {DimensionViewModel} d + */ +function dragDimension(d) { + d.dragHasMoved = true; + + if (d.dragDimensionDisplayInd === null) { + return + } + + var dragDimInd = d.dragDimensionDisplayInd, + prevDimInd = dragDimInd - 1, + nextDimInd = dragDimInd + 1; + + var dragDimension = d.parcatsViewModel + .dimensions[dragDimInd]; + + // Update category + if (d.dragCategoryDisplayInd !== null) { + + var dragCategory = dragDimension.categories[d.dragCategoryDisplayInd]; + + // Update dragY by dy + dragCategory.model.dragY += d3.event.dy; + var categoryY = dragCategory.model.dragY; + + // Check for category drag swaps + var catDisplayInd = dragCategory.model.displayInd; + var dimCategoryViews = dragDimension.categories; + + var catAbove = dimCategoryViews[catDisplayInd - 1]; + var catBelow = dimCategoryViews[catDisplayInd + 1]; + + // Check for overlap above + if (catAbove !== undefined) { + + if (categoryY < (catAbove.y + catAbove.height/2.0)) { + + // Swap display inds + dragCategory.model.displayInd = catAbove.model.displayInd; + catAbove.model.displayInd = catDisplayInd; + } + } + + if (catBelow !== undefined) { + + if ((categoryY + dragCategory.height) > (catBelow.y + catBelow.height/2.0)) { + + // Swap display inds + dragCategory.model.displayInd = catBelow.model.displayInd; + catBelow.model.displayInd = catDisplayInd; + } + } + + // Update category drag display index + d.dragCategoryDisplayInd = dragCategory.model.displayInd; + } + + // Update dimension position + dragDimension.model.dragX = d3.event.x; + + // Check for dimension swaps + var prevDimension = d.parcatsViewModel.dimensions[prevDimInd]; + var nextDimension = d.parcatsViewModel.dimensions[nextDimInd]; + + if (prevDimension !== undefined) { + if (dragDimension.model.dragX < (prevDimension.x + prevDimension.width)) { + + // Swap display inds + dragDimension.model.displayInd = prevDimension.model.displayInd; + prevDimension.model.displayInd = dragDimInd; + } + } + + if (nextDimension !== undefined) { + if ((dragDimension.model.dragX + dragDimension.width) > nextDimension.x) { + + // Swap display inds + dragDimension.model.displayInd = nextDimension.model.displayInd; + nextDimension.model.displayInd = d.dragDimensionDisplayInd; + } + } + + // Update drag display index + d.dragDimensionDisplayInd = dragDimension.model.displayInd; + + // Update view models + updateDimensionViewModels(d.parcatsViewModel); + updatePathViewModels(d.parcatsViewModel); + + // Update svg geometry + updateSvgCategories(d.parcatsViewModel); + updateSvgPaths(d.parcatsViewModel); +} + + +/** + * Handle dimension drag end + * @param {DimensionViewModel} d + */ +function dragDimensionEnd(d) { + + if (d.dragDimensionDisplayInd === null) { + return + } + + d3.select(this).selectAll('text').attr('font-weight', 'normal'); + + // Compute restyle command + // ----------------------- + var restyleData = {}; + var traceInd = getTraceIndex(d.parcatsViewModel); + + // ### Handle dimension reordering ### + var finalDragDimensionDisplayInds = d.parcatsViewModel.model.dimensions.map(function(d) {return d.displayInd}); + var anyDimsReordered = d.initialDragDimensionDisplayInds.some(function(initDimDisplay, dimInd) { + return initDimDisplay !== finalDragDimensionDisplayInds[dimInd] + }); + + if (anyDimsReordered) { + finalDragDimensionDisplayInds.forEach(function(finalDimDisplay, dimInd) { + restyleData['dimensions[' + dimInd + '].displayInd'] = finalDimDisplay; + }) + } + + // ### Handle category reordering ### + var anyCatsReordered = false; + if (d.dragCategoryDisplayInd !== null) { + var finalDragCategoryDisplayInds = d.model.categories.map(function (c) { + return c.displayInd + }); + + anyCatsReordered = d.initialDragCategoryDisplayInds.some(function (initCatDisplay, catInd) { + return initCatDisplay !== finalDragCategoryDisplayInds[catInd]; + }); + + if (anyCatsReordered) { + restyleData['dimensions[' + d.model.dimensionInd + '].catDisplayInds'] = [finalDragCategoryDisplayInds]; + } + } + + // Handle potential click event + // ---------------------------- + if (!d.dragHasMoved && d.potentialClickBand) { + if (d.parcatsViewModel.hovermode === 'color') { + emitPointsEventColorHovermode(d.potentialClickBand, 'plotly_click', d3.event.sourceEvent); + } else if (d.parcatsViewModel.hovermode === 'category') { + emitPointsEventCategoryHovermode(d.potentialClickBand, 'plotly_click', d3.event.sourceEvent); + } + } + + // Nullify drag states + // ------------------- + d.model.dragX = null; + if (d.dragCategoryDisplayInd !== null) { + var dragCategory = d.parcatsViewModel + .dimensions[d.dragDimensionDisplayInd] + .categories[d.dragCategoryDisplayInd]; + + dragCategory.model.dragY = null; + d.dragCategoryDisplayInd = null; + } + + d.dragDimensionDisplayInd = null; + d.parcatsViewModel.dragDimension = null; + d.dragHasMoved = null; + d.potentialClickBand = null; + + // Update view models + // ------------------ + updateDimensionViewModels(d.parcatsViewModel); + updatePathViewModels(d.parcatsViewModel); + + // Perform transition + // ------------------ + var transition = d3.transition() + .duration(300) + .ease('cubic-in-out'); + + transition + .each(function() { + updateSvgCategories(d.parcatsViewModel, true); + updateSvgPaths(d.parcatsViewModel, true); + }) + .each("end", function() { + if (anyDimsReordered || anyCatsReordered) { + // Perform restyle if the order of categories or dimensions changed + console.log('Do Plotly.restyle!'); + console.log([d.parcatsViewModel.graphDiv, restyleData, [traceInd]]); + Plotly.restyle(d.parcatsViewModel.graphDiv, restyleData, [traceInd]); + } + }); +} + +/** + * + * @param {ParcatsViewModel} parcatsViewModel + */ +function getTraceIndex(parcatsViewModel) { + var traceInd; + var allTraces = parcatsViewModel.graphDiv._fullData; + for (var i=0; i < allTraces.length; i++) { + if (parcatsViewModel.key === allTraces[i].uid) { + traceInd = i; + break; + } + } + return traceInd; +} + +/** Update the svg paths for view model + * @param {ParcatsViewModel} parcatsViewModel + * @param {boolean} hasTransition Whether to update element with transition + */ +function updateSvgPaths(parcatsViewModel, hasTransition) { + + if (hasTransition === undefined) { + hasTransition = false; + } + + function transition(selection) { + return hasTransition? selection.transition(): selection + } + + // Update binding + parcatsViewModel.pathSelection.data(function(d) { + return d.paths + }, key); + + // Update paths + transition(parcatsViewModel.pathSelection).attr('d', function(d) { + return d.svgD + }); +} + +/** Update the svg paths for view model + * @param {ParcatsViewModel} parcatsViewModel + * @param {boolean} hasTransition Whether to update element with transition + */ +function updateSvgCategories(parcatsViewModel, hasTransition) { + + if (hasTransition === undefined) { + hasTransition = false; + } + + function transition(selection) { + return hasTransition? selection.transition(): selection + } + + // Update binding + parcatsViewModel.dimensionSelection + .data(function(d) { + return d.dimensions;}, key); + + var categorySelection = parcatsViewModel.dimensionSelection + .selectAll('g.category') + .data(function(d){return d.categories;}, key); + + // Update dimension position + transition(parcatsViewModel.dimensionSelection) + .attr('transform', function(d) { + return 'translate(' + d.x + ', 0)'; + }); + + // Update category position + transition(categorySelection) + .attr('transform', function(d) { + return 'translate(0, ' + d.y + ')' + }); + + var dimLabelSelection = categorySelection.select('.dimlabel'); + + // ### Update dimension label + // Only the top-most display category should have the dimension label + dimLabelSelection + .text(function(d, i) { + if (i === 0) { + // Add dimension label above topmost category + return d.parcatsViewModel.model.dimensions[d.model.dimensionInd].dimensionLabel; + } else { + return null + } + }); + + // Update category label + // Categories in the right-most display dimension have their labels on + // the right, all others on the left + var catLabelSelection = categorySelection.select('.catlabel'); + catLabelSelection + .attr('text-anchor', + function (d) { + if (catInRightDim(d)) { + // Place label to the right of category + return 'start'; + } else { + // Place label to the left of category + return 'end'; + } + }) + .attr('x', + function (d) { + if (catInRightDim(d)) { + // Place label to the right of category + return d.width + 5; + } else { + // Place label to the left of category + return -5; + } + }); + + // Update bands + // Initialize color band rects + var bandSelection = categorySelection + .selectAll('rect.bandrect') + .data( + /** @param {CategoryViewModel} catViewModel*/ + function (catViewModel) { + return catViewModel.bands; + }, key); + + var bandsSelectionEnter = bandSelection.enter() + .append('rect') + .attr('class', 'bandrect') + .attr('cursor', 'move') + .attr('stroke-opacity', 0) + .attr('fill', function(d) { + return d.color + }) + .attr('fill-opacity', 0); + + bandSelection + .attr('fill', function (d) { + return d.color; + }) + .attr('width', function (d) { + return d.width; + }) + .attr('height', function (d) { + return d.height; + }) + .attr('y', function (d) { + return d.y; + }); + + styleBandsNoHover(bandsSelectionEnter); + + // Raise bands to the top + bandSelection.each(function() {Lib.raiseToTop(this)}); + + // Remove unused bands + bandSelection.exit().remove() +} + +/** + * Create a ParcatsViewModel traces + * @param {Object} graphDiv + * Top-level graph div element + * @param {Layout} layout + * SVG layout object + * @param {Array.} wrappedParcatsModel + * Wrapped ParcatsModel for this trace + * @return {ParcatsViewModel} + */ +function createParcatsViewModel(graphDiv, layout, wrappedParcatsModel) { + // Unwrap model + var parcatsModel = wrappedParcatsModel[0]; + + // Compute margin + var margin = layout.margin || {l: 80, r: 80, t: 100, b: 80}; + + // Compute pixel position/extents + var trace = parcatsModel.trace, + domain = trace.domain, + figureWidth = layout.width, + figureHeight = layout.height, + traceWidth = Math.floor(figureWidth * (domain.x[1] - domain.x[0])), + traceHeight = Math.floor(figureHeight * (domain.y[1] - domain.y[0])), + traceX = domain.x[0] * figureWidth + margin['l'], + traceY = layout.height - domain.y[1] * layout.height + margin['t']; + + // Handle path shape + // ----------------- + var pathShape; + if (trace.marker && trace.marker.shape){ + pathShape = trace.marker.shape; + } else { + pathShape = 'curved'; + } + + // Initialize parcatsViewModel + // paths and dimensions are missing at this point + var parcatsViewModel = { + key: trace.uid, + model: parcatsModel, + x: traceX, + y: traceY, + width: traceWidth, + height: traceHeight, + hovermode: trace.hovermode, + tooltip: trace.tooltip, + bundlecolors: trace.bundlecolors, + sortpaths: trace.sortpaths, + pathShape: pathShape, + dragDimension: null, + margin: margin, + paths: [], + dimensions: [], + graphDiv: graphDiv, + traceSelection: null, + pathSelection: null, + dimensionSelection: null + }; + + // Update dimension view models if we have at least 1 dimension + if (parcatsModel.dimensions) { + updateDimensionViewModels(parcatsViewModel); + + // Update path view models if we have at least 2 dimensions + updatePathViewModels(parcatsViewModel); + } + // Inside a categories view model + return parcatsViewModel +} + +/** + * Build the SVG string to represents a parallel categories path + * @param {Array.} leftXPositions + * Array of the x positions of the left edge of each dimension (in display order) + * @param {Array.} pathYs + * Array of the y positions of the top of the path at each dimension (in display order) + * @param {Array.} dimWidths + * Array of the widths of each dimension in display order + * @param {Number} pathHeight + * The height of the path in pixels + * @param {Number} curvature + * The curvature factor for the path. 0 results in a straight line and values greater than zero result in curved paths + * @return {string} + */ +function buildSvgPath(leftXPositions, pathYs, dimWidths, pathHeight, curvature) { + + // Compute the x midpoint of each path segment + var xRefPoints1 = [], + xRefPoints2 = [], + refInterpolator, + d; + + for (d = 0; d < dimWidths.length - 1; d++) { + refInterpolator = d3.interpolateNumber(dimWidths[d] + leftXPositions[d], leftXPositions[d + 1]); + xRefPoints1.push(refInterpolator(curvature)); + xRefPoints2.push(refInterpolator(1 - curvature)); + } + + // Move to top of path on left edge of left-most category + var svgD = 'M ' + leftXPositions[0] + ',' + pathYs[0]; + + // Horizontal line to right edge + svgD += 'l' + dimWidths[0] + ',0 '; + + // Horizontal line to right edge + for (d = 1; d < dimWidths.length; d++) { + + // Curve to left edge of category + svgD += 'C' + xRefPoints1[d-1] + ',' + pathYs[d-1] + + ' ' + xRefPoints2[d-1] + ',' + pathYs[d] + + ' ' + leftXPositions[d] + ',' + pathYs[d]; + + // svgD += 'L' + leftXPositions[d] + ',' + pathYs[d]; + + // Horizontal line to right edge + svgD += 'l' + dimWidths[d] + ',0 '; + } + + // Line down + svgD += 'l' + '0,' + pathHeight + ' '; + + // Line to left edge of right-most category + svgD += 'l -' + dimWidths[dimWidths.length - 1] + ',0 '; + + for (d = dimWidths.length - 2; d >= 0; d--) { + + // Curve to right edge of category + svgD += 'C' + xRefPoints2[d] + ',' + (pathYs[d+1] + pathHeight) + + ' ' + xRefPoints1[d] + ',' + (pathYs[d] + pathHeight) + + ' ' + (leftXPositions[d] + dimWidths[d]) + ',' + (pathYs[d] + pathHeight); + + // svgD += 'L' + (leftXPositions[d] + dimWidths[d]) + ',' + (pathYs[d] + pathHeight); + + // Horizontal line to right edge + svgD += 'l-' + dimWidths[d] + ',0 '; + } + + // Close path + svgD += 'Z'; + return svgD; +} + +/** + * Update the path view models based on the dimension view models in a ParcatsViewModel + * + * @param {ParcatsViewModel} parcatsViewModel + * View model for trace + */ +function updatePathViewModels(parcatsViewModel) { + + // Initialize an array of the y position of the top of the next path to be added to each category. + // + // nextYPositions[d][c] is the y position of the next path through category with index c of dimension with index d + var dimensionViewModels = parcatsViewModel.dimensions; + var parcatsModel = parcatsViewModel.model; + var nextYPositions = dimensionViewModels.map( + function (d) { + return d.categories.map( + function (c) { + return c.y + }) + }); + + // Array from category index to category display index for each true dimension index + var catToDisplayIndPerDim = parcatsViewModel.model.dimensions.map( + function (d) { + return d.categories.map(function(c) {return c.displayInd}) + }); + + // Array from true dimension index to dimension display index + var dimToDisplayInd = parcatsViewModel.model.dimensions.map(function(d) {return d.displayInd}); + var displayToDimInd = parcatsViewModel.dimensions.map(function(d) {return d.model.dimensionInd}); + + // Array of the x position of the left edge of the rectangles for each dimension + var leftXPositions = dimensionViewModels.map( + function (d) { + return d.x + }); + + // Compute dimension widths + var dimWidths = dimensionViewModels.map(function(d) {return d.width}); + + // Build sorted Array of PathModel objects + var pathModels = []; + for (var p in parcatsModel.paths) { + if (parcatsModel.paths.hasOwnProperty(p)) { + pathModels.push(parcatsModel.paths[p]) + } + } + + // Compute category display inds to use for sorting paths + function pathDisplayCategoryInds(pathModel) { + var dimensionInds = pathModel.categoryInds.map(function(catInd, dimInd){return catToDisplayIndPerDim[dimInd][catInd]}); + var displayInds = displayToDimInd.map(function(dimInd) { + return dimensionInds[dimInd] + }); + return displayInds; + } + + // Sort in ascending order by display index array + pathModels.sort(function(v1, v2) { + + // Build display inds for each path + var sortArray1 = pathDisplayCategoryInds(v1); + var sortArray2 = pathDisplayCategoryInds(v2); + + // Handle path sort order + if (parcatsViewModel.sortpaths === 'backward') { + sortArray1.reverse(); + sortArray2.reverse(); + } + + // Append the first value index of the path to break ties + sortArray1.push(v1.valueInds[0]); + sortArray2.push(v2.valueInds[0]); + + // Handle color bundling + if (parcatsViewModel.bundlecolors) { + // Prepend sort array with the raw color value + sortArray1.unshift(v1.rawColor); + sortArray2.unshift(v2.rawColor); + } + + // colors equal, sort by display categories + if (sortArray1 < sortArray2) { + return -1; + } + if (sortArray1 > sortArray2) { + return 1; + } + + return 0; + }); + + // Create path models + var pathViewModels = new Array(pathModels.length), + totalCount = dimensionViewModels[0].model.count, + totalHeight = dimensionViewModels[0].categories + .map(function(c) { + return c.height}).reduce( + function(v1, v2) {return v1+v2}); + + + for(var pathNumber=0; pathNumber < pathModels.length; pathNumber++) { + var pathModel = pathModels[pathNumber]; + + var pathHeight; + if (totalCount > 0) { + pathHeight = totalHeight * (pathModel.count / totalCount); + } else { + pathHeight = 0; + } + + // Build path y coords + var pathYs = new Array(nextYPositions.length); + for (var d=0; d < pathModel.categoryInds.length; d++) { + var catInd = pathModel.categoryInds[d]; + var catDisplayInd = catToDisplayIndPerDim[d][catInd]; + var dimDisplayInd = dimToDisplayInd[d]; + + // Update next y position + pathYs[dimDisplayInd] = nextYPositions[dimDisplayInd][catDisplayInd]; + nextYPositions[dimDisplayInd][catDisplayInd] += pathHeight; + + // Update category color information + var catViewModle = parcatsViewModel.dimensions[dimDisplayInd].categories[catDisplayInd]; + var numBands = catViewModle.bands.length; + var lastCatBand = catViewModle.bands[numBands-1]; + + if (lastCatBand === undefined || pathModel.rawColor !== lastCatBand.rawColor) { + // Create a new band + var bandY = lastCatBand === undefined? 0: lastCatBand.y + lastCatBand.height; + catViewModle.bands.push({ + key: bandY, + color: pathModel.color, + rawColor: pathModel.rawColor, + height: pathHeight, + width: catViewModle.width, + count: pathModel.count, + y: bandY, + categoryViewModel: catViewModle, + parcatsViewModel: parcatsViewModel + }); + } else { + // Extend current band + var currentBand = catViewModle.bands[numBands-1]; + currentBand.height += pathHeight; + currentBand.count += pathModel.count; + } + } + + // build svg path + var svgD; + if (parcatsViewModel.pathShape === 'curved') { + svgD = buildSvgPath(leftXPositions, pathYs, dimWidths, pathHeight, 0.5); + } else { + svgD = buildSvgPath(leftXPositions, pathYs, dimWidths, pathHeight, 0); + } + + pathViewModels[pathNumber] = { + key: pathModel.categoryInds + '-' + pathModel.valueInds[0], + model: pathModel, + height: pathHeight, + leftXs: leftXPositions, + topYs: pathYs, + dimWidths: dimWidths, + svgD: svgD, + parcatsViewModel: parcatsViewModel + } + } + + parcatsViewModel['paths'] = pathViewModels; + + // * @property key + // * Unique key for this model + // * @property {PathModel} model + // * Source path model + // * @property {Number} height + // * Height of this path (pixels) + // * @property {String} svgD + // * SVG path "d" attribute string +} + +/** + * Update the dimension view models based on the dimension models in a ParcatsViewModel + * + * @param {ParcatsViewModel} parcatsViewModel + * View model for trace + */ +function updateDimensionViewModels(parcatsViewModel) { + + // Compute dimension ordering + var dimensionsIndInfo = parcatsViewModel.model.dimensions.map(function(d, i) { + return {displayInd: d.displayInd, dimensionInd: d.dimensionInd} + }); + + dimensionsIndInfo.sort(function(a, b) { + return a.displayInd - b.displayInd + }); + + var dimensions = []; + for (var displayInd in dimensionsIndInfo) { + var dimensionInd = dimensionsIndInfo[displayInd].dimensionInd; + var dimModel = parcatsViewModel.model.dimensions[dimensionInd]; + dimensions.push(createDimensionViewModel(parcatsViewModel, dimModel)); + } + + parcatsViewModel['dimensions'] = dimensions; +} + +/** + * Create a parcats DimensionViewModel + * + * @param {ParcatsViewModel} parcatsViewModel + * View model for trace + * @param {DimensionModel} dimensionModel + * @return {DimensionViewModel} + */ +function createDimensionViewModel(parcatsViewModel, dimensionModel) { + + // Compute dimension x position + var categoryLabelPad = 40, + dimWidth = 16, + numDimensions = parcatsViewModel.model.dimensions.length, + displayInd = dimensionModel.displayInd; + + // Compute x coordinate values + var dimDx, + dimX0, + dimX; + + if (numDimensions > 1) { + dimDx = (parcatsViewModel.width - 2*categoryLabelPad - dimWidth) / (numDimensions - 1); + } else { + dimDx = 0 + } + dimX0 = categoryLabelPad; + dimX = dimX0 + dimDx*displayInd; + + // Compute categories + var categories = [], + maxCats = parcatsViewModel.model.maxCats, + numCats = dimensionModel.categories.length, + catSpacing = 8, + totalCount = dimensionModel.count, + totalHeight = parcatsViewModel.height - catSpacing * (maxCats - 1), + nextCatHeight, + nextCatModel, + nextCat, + catInd, + catDisplayInd; + + // Compute starting Y offset + var nextCatY = (maxCats - numCats) * catSpacing / 2.0; + + // Compute category ordering + var categoryIndInfo = dimensionModel.categories.map(function(c, i) { + return {displayInd: c.displayInd, categoryInd: c.categoryInd} + }); + + categoryIndInfo.sort(function(a, b) { + return a.displayInd - b.displayInd + }); + + for (catDisplayInd = 0; catDisplayInd < numCats; catDisplayInd++) { + catInd = categoryIndInfo[catDisplayInd].categoryInd; + nextCatModel = dimensionModel.categories[catInd]; + + if (totalCount > 0) { + nextCatHeight = (nextCatModel.count / totalCount) * totalHeight; + } else { + nextCatHeight = 0; + } + + nextCat = { + key: catInd, + model: nextCatModel, + width: dimWidth, + height: nextCatHeight, + y: nextCatModel.dragY !== null? nextCatModel.dragY: nextCatY, + bands: [], + parcatsViewModel: parcatsViewModel + }; + + nextCatY = nextCatY + nextCatHeight + catSpacing; + categories.push(nextCat) + } + + return { + key: dimensionModel.dimensionInd, + x: dimensionModel.dragX !== null? dimensionModel.dragX: dimX, + y: 0, + width: dimWidth, + model: dimensionModel, + categories: categories, + parcatsViewModel: parcatsViewModel, + dragCategoryDisplayInd: null, + dragDimensionDisplayInd: null, + initialDragDimensionDisplayInds: null, + initialDragCategoryDisplayInds: null, + dragHasMoved: null, + potentialClickBand: null + } +} + +// JSDoc typedefs +// ============== +/** + * @typedef {Object} Layout + * Object containing svg layout information + * + * @property {Number} width (pixels) + * Usable width for Figure (after margins are removed) + * @property {Number} height (pixels) + * Usable height for Figure (after margins are removed) + * @property {Margin} margin + * Margin around the Figure (pixels) + */ + +/** + * @typedef {Object} Margin + * Object containing padding information in pixels + * + * @property {Number} t + * Top margin + * @property {Number} r + * Right margin + * @property {Number} b + * Bottom margin + * @property {Number} l + * Left margin + */ + +/** + * @typedef {Object} ParcatsViewModel + * Object containing calculated parcats view information + * + * These are quantities that require Layout information to calculate + * @property key + * Unique key for this model + * @property {ParcatsModel} model + * Source parcats model + * @property {Array.} dimensions + * Array of dimension view models + * @property {Number} width + * Width for this trace (pixels) + * @property {Number} height + * Height for this trace (pixels) + * @property {Number} x + * X position of this trace with respect to the Figure (pixels) + * @property {Number} y + * Y position of this trace with respect to the Figure (pixels) + * @property {String} hovermode + * Hover mode. One of: 'none', 'category', or 'color' + * @property {Boolean} tooltip + * Whether to display a tooltip for the 'category' or 'color' hovermodes (has no effect if 'hovermode' is 'none') + * @property {Boolean} bundlecolors + * Whether paths should be sorted so that like colors are bundled together as they pass through categories + * @property {String} sortpaths + * If 'forward' then sort paths based on dimensions from left to right. If 'backward' sort based on dimensions + * from right to left + * @property {String} pathShape + * The shape of the paths. Either 'straight' or 'curved'. + * @property {DimensionViewModel|null} dragDimension + * Dimension currently being dragged. Null if no drag in progress + * @property {Margin} margin + * Margin around the Figure + * @property {Object} graphDiv + * Top-level graph div element + * @property {Object} traceSelection + * D3 selection of this view models trace group element + * @property {Object} pathSelection + * D3 selection of this view models path elements + * @property {Object} dimensionSelection + * D3 selection of this view models dimension group element + */ + +/** + * @typedef {Object} DimensionViewModel + * Object containing calculated parcats dimension view information + * + * These are quantities that require Layout information to calculate + * @property key + * Unique key for this model + * @property {DimensionModel} model + * Source dimension model + * @property {Number} x + * X position of the center of this dimension with respect to the Figure (pixels) + * @property {Number} y + * Y position of the top of this dimension with respect to the Figure (pixels) + * @property {Number} width + * Width of categories in this dimension (pixels) + * @property {ParcatsViewModel} parcatsViewModel + * The parent trace's view model + * @property {Array.} categories + * Dimensions category view models + * @property {Number|null} dragCategoryDisplayInd + * Display index of category currently being dragged. null if no category is being dragged + * @property {Number|null} dragDimensionDisplayInd + * Display index of the dimension being dragged. null if no dimension is being dragged + * @property {Array.|null} initialDragDimensionDisplayInds + * Dimensions display indexes at the beginning of the current drag. null if no dimension is being dragged + * @property {Array.|null} initialDragCategoryDisplayInds + * Category display indexes for the at the beginning of the current drag. null if no category is being dragged + * @property {HTMLElement} potentialClickBand + * Band under mouse when current drag began. If no drag movement takes place then a click will be emitted for this + * band. Null if not drag in progress. + * @property {Boolean} dragHasMoved + * True if there is an active drag and the drag has moved. If drag doesn't move before being ended then + * this may be interpreted as a click. Null if no drag in progress + */ + +/** + * @typedef {Object} CategoryViewModel + * Object containing calculated parcats category view information + * + * These are quantities that require Layout information to calculate + * @property key + * Unique key for this model + * @property {CategoryModel} model + * Source category model + * @property {Number} width + * Width for this category (pixels) + * @property {Number} height + * Height for this category (pixels) + * @property {Number} y + * Y position of this cateogry with respect to the Figure (pixels) + * @property {Array.} bands + * Array of color bands inside the category + * @property {ParcatsViewModel} parcatsViewModel + * The parent trace's view model + */ + +/** + * @typedef {Object} CategoryBandViewModel + * Object containing calculated category band information. A category band is a region inside a category covering + * paths of a single color + * + * @property key + * Unique key for this model + * @property color + * Band color + * @property rawColor + * Raw color value for band + * @property {Number} width + * Band width + * @property {Number} height + * Band height + * @property {Number} y + * Y position of top of the band with respect to the category + * @property {Number} count + * The number of samples represented by the band + * @property {CategoryViewModel} categoryViewModel + * The parent categorie's view model + * @property {ParcatsViewModel} parcatsViewModel + * The parent trace's view model + */ + +/** + * @typedef {Object} PathViewModel + * Object containing calculated parcats path view information + * + * These are quantities that require Layout information to calculate + * @property key + * Unique key for this model + * @property {PathModel} model + * Source path model + * @property {Number} height + * Height of this path (pixels) + * @property {Array.} leftXs + * The x position of the left edge of each display dimension + * @property {Array.} topYs + * The y position of the top of the path for each display dimension + * @property {Array.} dimWidths + * The width of each display dimension + * @property {String} svgD + * SVG path "d" attribute string + * @property {ParcatsViewModel} parcatsViewModel + * The parent trace's view model + */ diff --git a/src/traces/parcats/plot.js b/src/traces/parcats/plot.js new file mode 100644 index 00000000000..35a37311bf8 --- /dev/null +++ b/src/traces/parcats/plot.js @@ -0,0 +1,43 @@ +/** +* Copyright 2012-2017, Plotly, Inc. +* All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. +*/ + +'use strict'; + + +var parcats = require('./parcats'); + +/** + * Create / update parcat traces + * + * @param {Object} graphDiv + * @param {Array.} parcatsModels + */ +module.exports = function plot(graphDiv, parcatsModels, transitionOpts, makeOnCompleteCallback) { + console.log(['plot', parcatsModels, transitionOpts, makeOnCompleteCallback]); + var fullLayout = graphDiv._fullLayout, + svg = fullLayout._paper, + size = fullLayout._size; + + parcats( + graphDiv, + svg, + parcatsModels, + { + width: size.w, + height: size.h, + margin: { + t: size.t, + r: size.r, + b: size.b, + l: size.l + } + }, + transitionOpts, + makeOnCompleteCallback + ); +}; diff --git a/test/image/mocks/parcats_basic.json b/test/image/mocks/parcats_basic.json new file mode 100644 index 00000000000..b52442186ed --- /dev/null +++ b/test/image/mocks/parcats_basic.json @@ -0,0 +1,16 @@ +{ + "data": [ + {"type": "parcats", + "domain": {"x": [0.125, 0.625],"y": [0.25, 0.75]}, + "dimensions":[ + {"label": "One", "values": [1, 1, 2, 1, 2, 1, 1, 2, 1]}, + {"label": "Two", "values": ["A", "B", "A", "B", "C", "C", "A", "B", "C"]}, + {"label": "Three", "values": [11, 11, 11, 11, 11, 11, 11, 11, 11]}]} + ], + "layout": { + "height": 602, + "width": 592, + "margin": { + "l": 40, "r": 40, "t": 50, "b": 40 + }} +} diff --git a/test/image/mocks/parcats_bundled.json b/test/image/mocks/parcats_bundled.json new file mode 100644 index 00000000000..8f923c82b80 --- /dev/null +++ b/test/image/mocks/parcats_bundled.json @@ -0,0 +1,21 @@ +{ + "data": [ + {"type": "parcats", + "domain": {"x": [0.125, 0.625],"y": [0.25, 0.75]}, + "dimensions":[ + {"label": "One", "values": [1, 1, 2, 1, 2, 1, 1, 2, 1]}, + {"label": "Two", "values": ["A", "B", "A", "B", "C", "C", "A", "B", "C"]}, + {"label": "Three", "values": [11, 11, 11, 11, 11, 11, 11, 11, 11]}], + "bundlecolors": true, + "marker": { + "color": [0, 0, 1, 1, 0, 1, 0, 0, 0] + } + } + ], + "layout": { + "height": 602, + "width": 592, + "margin": { + "l": 40, "r": 40, "t": 50, "b": 40 + }} +} diff --git a/test/image/mocks/parcats_bundled_reversed.json b/test/image/mocks/parcats_bundled_reversed.json new file mode 100644 index 00000000000..ee6b6c34d1a --- /dev/null +++ b/test/image/mocks/parcats_bundled_reversed.json @@ -0,0 +1,22 @@ +{ + "data": [ + {"type": "parcats", + "domain": {"x": [0.125, 0.625],"y": [0.25, 0.75]}, + "dimensions":[ + {"label": "One", "values": [1, 1, 2, 1, 2, 1, 1, 2, 1]}, + {"label": "Two", "values": ["A", "B", "A", "B", "C", "C", "A", "B", "C"]}, + {"label": "Three", "values": [11, 11, 11, 11, 11, 11, 11, 11, 11]}], + "bundlecolors": true, + "sortpaths": "backward", + "marker": { + "color": [0, 0, 1, 1, 0, 1, 0, 0, 0] + } + } + ], + "layout": { + "height": 602, + "width": 592, + "margin": { + "l": 40, "r": 40, "t": 50, "b": 40 + }} +} diff --git a/test/image/mocks/parcats_reordered.json b/test/image/mocks/parcats_reordered.json new file mode 100644 index 00000000000..7d61464e431 --- /dev/null +++ b/test/image/mocks/parcats_reordered.json @@ -0,0 +1,17 @@ +{ + "data": [ + {"type": "parcats", + "domain": {"x": [0.125, 0.625],"y": [0.25, 0.75]}, + "dimensions": [ + {"label": "One", "values": [1, 1, 2, 1, 2, 1, 1, 2, 1], "displayInd": 0}, + {"label": "Two", "values": ["A", "B", "A", "B", "C", "C", "A", "B", "C"], "displayInd": 2, + "catDisplayInds": [1, 2, 0], "CatValues": ["A", "B", "C"]}, + {"label": "Three", "values": [11, 11, 11, 11, 11, 11, 11, 11, 11], "displayInd": 1}]} + ], + "layout": { + "height": 602, + "width": 592, + "margin": { + "l": 40, "r": 40, "t": 50, "b": 40 + }} +} diff --git a/test/image/mocks/parcats_unbundled.json b/test/image/mocks/parcats_unbundled.json new file mode 100644 index 00000000000..d857574df4a --- /dev/null +++ b/test/image/mocks/parcats_unbundled.json @@ -0,0 +1,22 @@ +{ + "data": [ + {"type": "parcats", + "domain": {"x": [0.125, 0.625],"y": [0.25, 0.75]}, + "dimensions":[ + {"label": "One", "values": [1, 1, 2, 1, 2, 1, 1, 2, 1]}, + {"label": "Two", "values": ["A", "B", "A", "B", "C", "C", "A", "B", "C"]}, + {"label": "Three", "values": [11, 11, 11, 11, 11, 11, 11, 11, 11]}], + "bundlecolors": false, + "marker": { + "color": [0, 0, 1, 1, 0, 1, 0, 0, 0], + "shape": "straight" + } + } + ], + "layout": { + "height": 602, + "width": 592, + "margin": { + "l": 40, "r": 40, "t": 50, "b": 40 + }} +} diff --git a/test/jasmine/tests/parcats_test.js b/test/jasmine/tests/parcats_test.js new file mode 100644 index 00000000000..7c0d9263f85 --- /dev/null +++ b/test/jasmine/tests/parcats_test.js @@ -0,0 +1,788 @@ +var Plotly = require('@lib/index'); +var Lib = require('@src/lib'); + +var d3 = require('d3'); +var createGraphDiv = require('../assets/create_graph_div'); +var destroyGraphDiv = require('../assets/destroy_graph_div'); +var failTest = require('../assets/fail_test'); +var click = require('../assets/click'); +var getClientPosition = require('../assets/get_client_position'); +var mouseEvent = require('../assets/mouse_event'); +var delay = require('../assets/delay'); + +var customAssertions = require('../assets/custom_assertions'); +var assertHoverLabelStyle = customAssertions.assertHoverLabelStyle; +var assertHoverLabelContent = customAssertions.assertHoverLabelContent; + +var CALLBACK_DELAY = 500; + +// Validation helpers +// ================== +function checkDimensionCalc(gd, dimInd, dimProps) { + /** @type {ParcatsModel} */ + var calcdata = gd.calcdata[0][0]; + var dimension = calcdata.dimensions[dimInd]; + for(var dimProp in dimProps) { + if (dimProps.hasOwnProperty(dimProp)) { + expect(dimension[dimProp]).toEqual(dimProps[dimProp]); + } + } +} + +function checkCategoryCalc(gd, dimInd, catInd, catProps) { + /** @type {ParcatsModel} */ + var calcdata = gd.calcdata[0][0]; + var dimension = calcdata.dimensions[dimInd]; + var category = dimension.categories[catInd]; + for(var catProp in catProps) { + if (catProps.hasOwnProperty(catProp)) { + expect(category[catProp]).toEqual(catProps[catProp]); + } + } +} + +function checkParcatsModelView(gd) { + var fullLayout = gd._fullLayout; + var size = fullLayout._size; + + // Make sure we have a 512x512 area for traces + expect(size.h).toEqual(512); + expect(size.w).toEqual(512); + + /** @type {ParcatsViewModel} */ + var parcatsViewModel = d3.select('g.trace.parcats').datum(); + + // Check location/size of this trace inside overall traces area + expect(parcatsViewModel.x).toEqual(64 + margin.r); + expect(parcatsViewModel.y).toEqual(128 + margin.t); + expect(parcatsViewModel.width).toEqual(256); + expect(parcatsViewModel.height).toEqual(256); + + // Check location of dimensions + expect(parcatsViewModel.dimensions[0].x).toEqual(categoryLabelPad); + expect(parcatsViewModel.dimensions[0].y).toEqual(0); + + expect(parcatsViewModel.dimensions[1].x).toEqual(categoryLabelPad + dimDx); + expect(parcatsViewModel.dimensions[1].y).toEqual(0); + + expect(parcatsViewModel.dimensions[2].x).toEqual(categoryLabelPad + 2*dimDx); + expect(parcatsViewModel.dimensions[2].y).toEqual(0); + + // Check location of categories + /** @param {Array.} categories */ + function checkCategoryPositions(categories) { + var nextY = (3 - categories.length) * catSpacing / 2; + for (var c=0; c Date: Fri, 27 Jul 2018 12:57:32 -0400 Subject: [PATCH 02/50] color attribute fixes for rebase on 1.39.3 --- src/traces/parcats/attributes.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/traces/parcats/attributes.js b/src/traces/parcats/attributes.js index 94648ceccf4..82a187957f8 100644 --- a/src/traces/parcats/attributes.js +++ b/src/traces/parcats/attributes.js @@ -10,7 +10,7 @@ var fontAttrs = require('../../plots/font_attributes'); var extendFlat = require('../../lib/extend').extendFlat; -var colorAttributes = require('../../components/colorscale/color_attributes'); +var colorAttributes = require('../../components/colorscale/attributes'); var scatterAttrs = require('../scatter/attributes'); var scatterMarkerAttrs = scatterAttrs.marker; @@ -18,7 +18,7 @@ var colorbarAttrs = require('../../components/colorbar/attributes'); var marker = extendFlat({ editType: 'calc' - }, colorAttributes('marker', 'calc'), + }, colorAttributes('marker', {editType: 'calc'}), { showscale: scatterMarkerAttrs.showscale, colorbar: colorbarAttrs, From ee7fd1780e947438d05245b2bf930cfb59e05113 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Fri, 27 Jul 2018 13:19:25 -0400 Subject: [PATCH 03/50] lint fixes --- src/components/fx/hover.js | 6 +- src/traces/parcats/attributes.js | 23 +- src/traces/parcats/calc.js | 133 +++------ src/traces/parcats/constants.js | 44 +-- src/traces/parcats/defaults.js | 11 +- src/traces/parcats/parcats.js | 438 ++++++++++++++--------------- src/traces/parcats/plot.js | 1 - test/jasmine/tests/parcats_test.js | 97 +++---- 8 files changed, 320 insertions(+), 433 deletions(-) diff --git a/src/components/fx/hover.js b/src/components/fx/hover.js index a1cf4ada20b..c2e616b253b 100644 --- a/src/components/fx/hover.js +++ b/src/components/fx/hover.js @@ -156,7 +156,7 @@ exports.loneHover = function loneHover(hoverItem, opts) { // TODO: replace loneHover? exports.customHovers = function customHovers(hoverItems, opts) { - if (!Array.isArray(hoverItems)) { + if(!Array.isArray(hoverItems)) { hoverItems = [hoverItems]; } @@ -210,11 +210,11 @@ exports.customHovers = function customHovers(hoverItems, opts) { var tooltipSpacing = 5; var lastBottomY = 0; hoverLabel - .sort(function(a, b) {return a.y0 - b.y0}) + .sort(function(a, b) {return a.y0 - b.y0;}) .each(function(d) { var topY = d.y0 - d.by / 2; - if ((topY - tooltipSpacing) < lastBottomY ) { + if((topY - tooltipSpacing) < lastBottomY) { d.offset = (lastBottomY - topY) + tooltipSpacing; } else { d.offset = 0; diff --git a/src/traces/parcats/attributes.js b/src/traces/parcats/attributes.js index 82a187957f8..3962dbf21b9 100644 --- a/src/traces/parcats/attributes.js +++ b/src/traces/parcats/attributes.js @@ -8,7 +8,6 @@ 'use strict'; -var fontAttrs = require('../../plots/font_attributes'); var extendFlat = require('../../lib/extend').extendFlat; var colorAttributes = require('../../components/colorscale/attributes'); @@ -17,8 +16,8 @@ var scatterMarkerAttrs = scatterAttrs.marker; var colorbarAttrs = require('../../components/colorbar/attributes'); var marker = extendFlat({ - editType: 'calc' - }, colorAttributes('marker', {editType: 'calc'}), + editType: 'calc' +}, colorAttributes('marker', {editType: 'calc'}), { showscale: scatterMarkerAttrs.showscale, colorbar: colorbarAttrs, @@ -169,15 +168,15 @@ module.exports = { marker: marker, counts: { - valType: 'number', - min: 0, - dflt: 1, - arrayOk: true, - role: 'info', - editType: 'calc', - description: [ - 'The number of observations represented by each state. Defaults to 1 so that each state represents ' + + valType: 'number', + min: 0, + dflt: 1, + arrayOk: true, + role: 'info', + editType: 'calc', + description: [ + 'The number of observations represented by each state. Defaults to 1 so that each state represents ' + 'one observation' - ] + ] } }; diff --git a/src/traces/parcats/calc.js b/src/traces/parcats/calc.js index 740d64061ac..4384e213c24 100644 --- a/src/traces/parcats/calc.js +++ b/src/traces/parcats/calc.js @@ -32,18 +32,16 @@ module.exports = function calc(gd, trace) { // Process inputs // -------------- - if (trace.dimensions.length === 0) { + if(trace.dimensions.length === 0) { // No dimensions specified. Nothing to compute - return [] + return []; } - console.log(['calc', trace, gd.data, gd._fullData]); - // Compute unique information // -------------------------- // UniqueInfo per dimension var uniqueInfoDims = trace.dimensions.map(function(dim) { - return getUniqueInfo(dim.values, dim.catValues) + return getUniqueInfo(dim.values, dim.catValues); }); // Number of values and counts @@ -55,7 +53,7 @@ module.exports = function calc(gd, trace) { var counts, count, totalCount; - if (Lib.isArrayOrTypedArray(trace.counts)) { + if(Lib.isArrayOrTypedArray(trace.counts)) { counts = trace.counts; } else { counts = [trace.counts]; @@ -77,7 +75,7 @@ module.exports = function calc(gd, trace) { var markerColorscale; // Process colorscale - if (marker) { + if(marker) { if(hasColorscale(trace, 'marker')) { colorscaleCalc(trace, trace.marker.color, 'marker', 'c'); } @@ -89,9 +87,9 @@ module.exports = function calc(gd, trace) { // Build color generation function function getMarkerColorInfo(index) { var value; - if (!marker) { + if(!marker) { value = parcatConstants.defaultColor; - } else if (Array.isArray(marker.color)) { + } else if(Array.isArray(marker.color)) { value = marker.color[index % marker.color.length]; } else { value = marker.color; @@ -100,8 +98,6 @@ module.exports = function calc(gd, trace) { return {color: markerColorscale(value), rawColor: value}; } - console.log(markerColorscale); - // Build/Validate category labels/order // ------------------------------------ // properties: catValues, catorder, catlabels @@ -121,7 +117,7 @@ module.exports = function calc(gd, trace) { // a) Set catValues to unique catValues // b) Set carorder to 0 to catValues.length // - //uniqueInfoDims[0].uniqueValues + // uniqueInfoDims[0].uniqueValues // Category order logic // 1) @@ -132,16 +128,18 @@ module.exports = function calc(gd, trace) { var pathModels = {}; // Category inds array for each dimension - var categoryIndsDims = uniqueInfoDims.map(function(di) {return di.inds}); + var categoryIndsDims = uniqueInfoDims.map(function(di) {return di.inds;}); // Initialize total count totalCount = 0; + var valueInd; + var d; - for (var valueInd=0; valueInd < numValues; valueInd++) { + for(valueInd = 0; valueInd < numValues; valueInd++) { // Category inds for this input value across dimensions var categoryIndsPath = []; - for (var d=0; d < categoryIndsDims.length; d++) { + for(d = 0; d < categoryIndsDims.length; d++) { categoryIndsPath.push(categoryIndsDims[d][valueInd]); } @@ -149,7 +147,7 @@ module.exports = function calc(gd, trace) { count = counts[valueInd % counts.length]; // Update total count - totalCount+= count; + totalCount += count; // Path color var pathColorInfo = getMarkerColorInfo(valueInd); @@ -158,7 +156,7 @@ module.exports = function calc(gd, trace) { var pathKey = categoryIndsPath + '-' + pathColorInfo.rawColor; // Create / Update PathModel - if (pathModels[pathKey] === undefined) { + if(pathModels[pathKey] === undefined) { pathModels[pathKey] = createPathModel(categoryIndsPath, pathColorInfo.color, pathColorInfo.rawColor); @@ -175,16 +173,16 @@ module.exports = function calc(gd, trace) { }); - for (valueInd=0; valueInd < numValues; valueInd++) { + for(valueInd = 0; valueInd < numValues; valueInd++) { count = counts[valueInd % counts.length]; - for (d=0; d < dimensionModels.length; d++) { + for(d = 0; d < dimensionModels.length; d++) { var catInd = uniqueInfoDims[d].inds[valueInd]; var cats = dimensionModels[d].categories; - if (cats[catInd] === undefined) { + if(cats[catInd] === undefined) { var catLabel = trace.dimensions[d].catLabels[catInd]; var displayInd = trace.dimensions[d].catDisplayInds[catInd]; @@ -199,17 +197,6 @@ module.exports = function calc(gd, trace) { return wrap(createParcatsModel(dimensionModels, pathModels, totalCount)); }; - -// Utilities -// ========= -function getValue(arrayOrScalar, index) { - var value; - if(!Array.isArray(arrayOrScalar)) value = arrayOrScalar; - else if(index < arrayOrScalar.length) value = arrayOrScalar[index]; - return value; -} - - // Models // ====== @@ -239,9 +226,9 @@ function getValue(arrayOrScalar, index) { */ function createParcatsModel(dimensions, paths, count) { var maxCats = dimensions - .map(function(d) {return d.categories.length}) - .reduce(function(v1, v2) {return Math.max(v1, v2)}); - return {dimensions: dimensions, paths: paths, trace: undefined, maxCats: maxCats, count: count} + .map(function(d) {return d.categories.length;}) + .reduce(function(v1, v2) {return Math.max(v1, v2);}); + return {dimensions: dimensions, paths: paths, trace: undefined, maxCats: maxCats, count: count}; } // Dimension Model @@ -281,7 +268,7 @@ function createDimensionModel(dimensionInd, displayInd, dimensionLabel, count) { count: count, categories: [], dragX: null - } + }; } // Category Model @@ -324,7 +311,7 @@ function createCategoryModel(dimensionInd, categoryInd, displayInd, categoryLabe valueInds: [], count: 0, dragY: null - } + }; } /** @@ -337,7 +324,7 @@ function createCategoryModel(dimensionInd, categoryInd, displayInd, categoryLabe */ function updateCategoryModel(categoryModel, valueInd, count) { categoryModel.valueInds.push(valueInd); - categoryModel.count+= count; + categoryModel.count += count; } @@ -375,7 +362,7 @@ function createPathModel(categoryInds, color, rawColor) { rawColor: rawColor, valueInds: [], count: 0 - } + }; } /** @@ -388,7 +375,7 @@ function createPathModel(categoryInds, color, rawColor) { */ function updatePathModel(pathModel, valueInd, count) { pathModel.valueInds.push(valueInd); - pathModel.count+= count; + pathModel.count += count; } // Unique calculations @@ -423,11 +410,11 @@ function updatePathModel(pathModel, valueInd, count) { function getUniqueInfo(values, uniqueValues) { // Initialize uniqueValues if not specified - if (uniqueValues === undefined || uniqueValues === null) { + if(uniqueValues === undefined || uniqueValues === null) { uniqueValues = []; } else { // Shallow copy so append below doesn't alter input array - uniqueValues = uniqueValues.map(function(e){return e}); + uniqueValues = uniqueValues.map(function(e) {return e;}); } // Initialize Variables @@ -456,17 +443,17 @@ function getUniqueInfo(values, uniqueValues) { uniqueValueCounts[item]++; itemInd = uniqueValueInds[item]; } - inds.push(itemInd) + inds.push(itemInd); } // Build UniqueInfo - var uniqueCounts = uniqueValues.map(function (v) { return uniqueValueCounts[v] }); + var uniqueCounts = uniqueValues.map(function(v) { return uniqueValueCounts[v]; }); return { uniqueValues: uniqueValues, uniqueCounts: uniqueCounts, inds: inds - } + }; } @@ -477,11 +464,11 @@ function getUniqueInfo(values, uniqueValues) { * @param {Object} trace */ function validateDimensionDisplayInds(trace) { - var displayInds = trace.dimensions.map(function(dim) {return dim.displayInd}); - if (!isRangePermutation(displayInds)) { - trace.dimensions.forEach(function (dim, i){ + var displayInds = trace.dimensions.map(function(dim) {return dim.displayInd;}); + if(!isRangePermutation(displayInds)) { + trace.dimensions.forEach(function(dim, i) { dim.displayInd = i; - }) + }); } } @@ -500,21 +487,21 @@ function validateCategoryProperties(dim, uniqueInfoDim) { dim.catValues = uniqueDimVals; // Handle catDisplayInds - if (dim.catDisplayInds.length !== uniqueDimVals.length || !isRangePermutation(dim.catDisplayInds)) { - dim.catDisplayInds = uniqueDimVals.map(function(v, i) {return i}); + if(dim.catDisplayInds.length !== uniqueDimVals.length || !isRangePermutation(dim.catDisplayInds)) { + dim.catDisplayInds = uniqueDimVals.map(function(v, i) {return i;}); } // Handle catLabels - if (dim.catLabels === null || dim.catLabels === undefined) { + if(dim.catLabels === null || dim.catLabels === undefined) { dim.catLabels = []; } else { // Shallow copy to avoid modifying input array - dim.catLabels = dim.catLabels.map(function(v) {return v}); + dim.catLabels = dim.catLabels.map(function(v) {return v;}); } // Extend catLabels with elements from uniqueInfoDim.uniqueValues - for (var i=dim.catLabels.length; i < uniqueInfoDim.uniqueValues.length; i++) { - dim.catLabels.push(uniqueInfoDim.uniqueValues[i]) + for(var i = dim.catLabels.length; i < uniqueInfoDim.uniqueValues.length; i++) { + dim.catLabels.push(uniqueInfoDim.uniqueValues[i]); } } @@ -526,14 +513,14 @@ function validateCategoryProperties(dim, uniqueInfoDim) { function isRangePermutation(inds) { var indsSpecified = new Array(inds.length); - for (var i=0; i < inds.length; i++) { + for(var i = 0; i < inds.length; i++) { // Check for out of bounds - if (inds[i] < 0 || inds[i] >= inds.length) { + if(inds[i] < 0 || inds[i] >= inds.length) { return false; } // Check for collisions with already specified index - if (indsSpecified[inds[i]] !== undefined) { + if(indsSpecified[inds[i]] !== undefined) { return false; } @@ -541,35 +528,5 @@ function isRangePermutation(inds) { } // Nothing out of bounds and no collisions. We have a permutation - return true -} - -/** - * Determine whether two arrays are permutations of each other - * This is accomplished by sorting both arrays lexicographically and checking element equality - * @param {Array} a1 - * @param {Array} a2 - */ -function arePermutations(a1, a2) { - - // Check for equal length - if (a1 === null || a2 === null || a1.length !== a2.length) { - return false - } else { - var a1_sorted = a1.map(function(v){return v}); - a1_sorted.sort(); - - var a2_sorted = a2.map(function(v){return v}); - a2_sorted.sort(); - - for(var i=0; i < a1_sorted.length; i++) { - if (a1_sorted[i] !== a2_sorted[i]) { - // Elements not equal - return false; - } - } - - // Same number of elemenets and all elements equal - return true; - } + return true; } diff --git a/src/traces/parcats/constants.js b/src/traces/parcats/constants.js index 4036485d788..3d24dff2956 100644 --- a/src/traces/parcats/constants.js +++ b/src/traces/parcats/constants.js @@ -12,49 +12,7 @@ module.exports = { maxDimensionCount: 12, defaultColor: 'lightgray', - - // overdrag: 45, - // verticalPadding: 2, // otherwise, horizontal lines on top or bottom are of lower width - // tickDistance: 50, - // canvasPixelRatio: 1, - // blockLineCount: 5000, - // scatter: false, - // layers: ['contextLineLayer', 'focusLineLayer', 'pickLineLayer'], - // axisTitleOffset: 28, - // axisExtentOffset: 10, - // bar: { - // width: 4, // Visible width of the filter bar - // capturewidth: 10, // Mouse-sensitive width for interaction (Fitts law) - // fillcolor: 'magenta', // Color of the filter bar fill - // fillopacity: 1, // Filter bar fill opacity - // strokecolor: 'white', // Color of the filter bar side lines - // strokeopacity: 1, // Filter bar side stroke opacity - // strokewidth: 1, // Filter bar side stroke width in pixels - // handleheight: 16, // Height of the filter bar vertical resize areas on top and bottom - // handleopacity: 1, // Opacity of the filter bar vertical resize areas on top and bottom - // handleoverlap: 0 // A larger than 0 value causes overlaps with the filter bar, represented as pixels.' - // }, cn: { className: 'parcats' - // axisExtentText: 'axis-extent-text', - // parcoordsLineLayers: 'parcoords-line-layers', - // parcoordsLineLayer: 'parcoords-lines', - // parcoords: 'parcoords', - // parcoordsControlView: 'parcoords-control-view', - // yAxis: 'y-axis', - // axisOverlays: 'axis-overlays', - // axis: 'axis', - // axisHeading: 'axis-heading', - // axisTitle: 'axis-title', - // axisExtent: 'axis-extent', - // axisExtentTop: 'axis-extent-top', - // axisExtentTopText: 'axis-extent-top-text', - // axisExtentBottom: 'axis-extent-bottom', - // axisExtentBottomText: 'axis-extent-bottom-text', - // axisBrush: 'axis-brush' - }, - // id: { - // filterBarPattern: 'filter-bar-pattern' - // - // } + } }; diff --git a/src/traces/parcats/defaults.js b/src/traces/parcats/defaults.js index 2fee8302855..09bc1251664 100644 --- a/src/traces/parcats/defaults.js +++ b/src/traces/parcats/defaults.js @@ -11,15 +11,13 @@ var Lib = require('../../lib'); var attributes = require('./attributes'); var parcatConstants = require('./constants'); -var hasColorscale = require('../../components/colorscale/has_colorscale'); -var colorscaleDefaults = require('../../components/colorscale/defaults'); var colorbarDefaults = require('../../components/colorbar/defaults'); function markerDefaults(traceIn, traceOut, defaultColor, layout, coerce) { coerce('marker.color', defaultColor); - if (traceIn.marker) { + if(traceIn.marker) { coerce('marker.cmin'); coerce('marker.cmax'); coerce('marker.cauto'); @@ -55,7 +53,7 @@ function dimensionsDefaults(traceIn, traceOut) { } // Dimension level - var values = coerce('values'); + coerce('values'); coerce('label'); coerce('displayInd', i); @@ -97,13 +95,12 @@ function dimensionsDefaults(traceIn, traceOut) { } module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout) { - console.log(traceIn); function coerce(attr, dflt) { return Lib.coerce(traceIn, traceOut, attributes, attr, dflt); } - var dimensions = dimensionsDefaults(traceIn, traceOut); + dimensionsDefaults(traceIn, traceOut); coerce('domain.x'); coerce('domain.y'); @@ -115,6 +112,4 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout coerce('bundlecolors'); coerce('sortpaths'); coerce('counts'); - - console.log(['dimensionsDefaults', traceIn, traceOut]); }; diff --git a/src/traces/parcats/parcats.js b/src/traces/parcats/parcats.js index 4d98819a81d..9507f638f0d 100644 --- a/src/traces/parcats/parcats.js +++ b/src/traces/parcats/parcats.js @@ -8,7 +8,6 @@ 'use strict'; -// var c = require('./constants'); var d3 = require('d3'); var Plotly = require('../../plot_api/plot_api'); var Fx = require('../../components/fx'); @@ -19,8 +18,6 @@ function performPlot(parcatsModels, graphDiv, layout, svg) { var viewModels = parcatsModels.map(createParcatsViewModel.bind(0, graphDiv, layout)); - console.log(['viewModels', viewModels]); - // Get (potentially empty) parcatslayer selection with bound data to single element array var layerSelection = svg.selectAll('g.parcatslayer').data([null]); @@ -42,7 +39,7 @@ function performPlot(parcatsModels, graphDiv, layout, svg) { // Update properties for each trace traceSelection - .attr('transform', function (d) { + .attr('transform', function(d) { return 'translate(' + d.x + ', ' + d.y + ')'; }); @@ -58,14 +55,14 @@ function performPlot(parcatsModels, graphDiv, layout, svg) { // Get paths selection var pathSelection = pathsSelection .selectAll('path.path') - .data(function (d) { - return d.paths + .data(function(d) { + return d.paths; }, key); // Update existing path colors pathSelection .attr('fill', function(d) { - return d.model.color + return d.model.color; }); // Create paths @@ -75,7 +72,7 @@ function performPlot(parcatsModels, graphDiv, layout, svg) { .attr('class', 'path') .attr('stroke-opacity', 0) .attr('fill', function(d) { - return d.model.color + return d.model.color; }) .attr('fill-opacity', 0); @@ -83,12 +80,12 @@ function performPlot(parcatsModels, graphDiv, layout, svg) { // Set path geometry pathSelection - .attr('d', function (d) { - return d.svgD + .attr('d', function(d) { + return d.svgD; }); // sort paths - if (!pathSelectionEnter.empty()) { + if(!pathSelectionEnter.empty()) { // Only sort paths if there has been a change. // Otherwise paths are already sorted or a hover operation may be in progress pathSelection.sort(compareRawColor); @@ -113,8 +110,8 @@ function performPlot(parcatsModels, graphDiv, layout, svg) { // Get dimension selection var dimensionSelection = dimensionsSelection .selectAll('g.dimension') - .data(function (d) { - return d.dimensions + .data(function(d) { + return d.dimensions; }, key); // Create dimension groups @@ -123,7 +120,7 @@ function performPlot(parcatsModels, graphDiv, layout, svg) { .attr('class', 'dimension'); // Update dimension group transforms - dimensionSelection.attr('transform', function (d) { + dimensionSelection.attr('transform', function(d) { return 'translate(' + d.x + ', 0)'; }); @@ -133,7 +130,7 @@ function performPlot(parcatsModels, graphDiv, layout, svg) { // Get category selection var categorySelection = dimensionSelection .selectAll('g.category') - .data(function (d) { + .data(function(d) { return d.categories; }, key); @@ -145,8 +142,8 @@ function performPlot(parcatsModels, graphDiv, layout, svg) { // Update category transforms categorySelection - .attr('transform', function (d) { - return 'translate(0, ' + d.y + ')' + .attr('transform', function(d) { + return 'translate(0, ' + d.y + ')'; }); @@ -160,10 +157,10 @@ function performPlot(parcatsModels, graphDiv, layout, svg) { // Update rectangle categorySelection.select('rect.catrect') .attr('fill', 'none') - .attr('width', function (d) { + .attr('width', function(d) { return d.width; }) - .attr('height', function (d) { + .attr('height', function(d) { return d.height; }); @@ -174,17 +171,17 @@ function performPlot(parcatsModels, graphDiv, layout, svg) { .selectAll('rect.bandrect') .data( /** @param {CategoryViewModel} catViewModel*/ - function (catViewModel) { + function(catViewModel) { return catViewModel.bands; }, key); // Raise all update bands to the top so that fading enter/exit bands will be behind - bandSelection.each(function() {Lib.raiseToTop(this)}); + bandSelection.each(function() {Lib.raiseToTop(this);}); // Update band color bandSelection .attr('fill', function(d) { - return d.color + return d.color; }); var bandsSelectionEnter = bandSelection.enter() @@ -193,21 +190,21 @@ function performPlot(parcatsModels, graphDiv, layout, svg) { .attr('cursor', 'move') .attr('stroke-opacity', 0) .attr('fill', function(d) { - return d.color + return d.color; }) .attr('fill-opacity', 0); bandSelection - .attr('fill', function (d) { + .attr('fill', function(d) { return d.color; }) - .attr('width', function (d) { + .attr('width', function(d) { return d.width; }) - .attr('height', function (d) { + .attr('height', function(d) { return d.height; }) - .attr('y', function (d) { + .attr('y', function(d) { return d.y; }); @@ -224,13 +221,13 @@ function performPlot(parcatsModels, graphDiv, layout, svg) { // Update category label categorySelection.select('text.catlabel') .attr('text-anchor', - function (d) { - if (catInRightDim(d)) { + function(d) { + if(catInRightDim(d)) { // Place label to the right of category return 'start'; } else { // Place label to the left of category - return 'end'; + return 'end'; } }) .attr('alignment-baseline', 'middle') @@ -243,8 +240,8 @@ function performPlot(parcatsModels, graphDiv, layout, svg) { .attr('font-size', 10) .style('fill', 'rgb(0, 0, 0)') .attr('x', - function (d) { - if (catInRightDim(d)) { + function(d) { + if(catInRightDim(d)) { // Place label to the right of category return d.width + 5; } else { @@ -252,10 +249,10 @@ function performPlot(parcatsModels, graphDiv, layout, svg) { return -5; } }) - .attr('y', function (d) { + .attr('y', function(d) { return d.height / 2; }) - .text(function (d) { + .text(function(d) { return d.model.categoryLabel; }); @@ -270,16 +267,16 @@ function performPlot(parcatsModels, graphDiv, layout, svg) { .attr('alignment-baseline', 'baseline') .attr('cursor', 'ew-resize') .attr('font-size', 14) - .attr('x', function (d) { + .attr('x', function(d) { return d.width / 2; }) .attr('y', -5) - .text(function (d, i) { - if (i === 0) { + .text(function(d, i) { + if(i === 0) { // Add dimension label above topmost category return d.parcatsViewModel.model.dimensions[d.model.dimensionInd].dimensionLabel; } else { - return null + return null; } }); @@ -287,8 +284,8 @@ function performPlot(parcatsModels, graphDiv, layout, svg) { // categorySelection.select('rect.catrect') categorySelection.selectAll('rect.bandrect') .on('mouseover', mouseoverCategoryBand) - .on('mouseout', function (d) { - mouseoutCategory(d.parcatsViewModel) + .on('mouseout', function(d) { + mouseoutCategory(d.parcatsViewModel); }); // Remove unused categories @@ -296,19 +293,19 @@ function performPlot(parcatsModels, graphDiv, layout, svg) { // Setup drag dimensionSelection.call(d3.behavior.drag() - .origin(function (d) { - return {x: d.x, y: 0} + .origin(function(d) { + return {x: d.x, y: 0}; }) - .on("dragstart", dragDimensionStart) - .on("drag", dragDimension) - .on("dragend", dragDimensionEnd)); + .on('dragstart', dragDimensionStart) + .on('drag', dragDimension) + .on('dragend', dragDimensionEnd)); // Save off selections to view models - traceSelection.each(function (d) { + traceSelection.each(function(d) { d.traceSelection = d3.select(this); d.pathSelection = d3.select(this).selectAll('g.paths').selectAll('path.path'); - d.dimensionSelection = d3.select(this).selectAll('g.dimensions').selectAll('g.dimension') + d.dimensionSelection = d3.select(this).selectAll('g.dimensions').selectAll('g.dimension'); }); // Remove any orphan traces @@ -324,7 +321,6 @@ function performPlot(parcatsModels, graphDiv, layout, svg) { * @param {Layout} layout */ module.exports = function(graphDiv, svg, parcatsModels, layout) { - console.log(['parcats', parcatsModels, layout]); performPlot(parcatsModels, graphDiv, layout, svg); }; @@ -338,23 +334,23 @@ function key(d) { /** True if a category view model is in the right-most display dimension * @param {CategoryViewModel} d */ - function catInRightDim(d) { - var numDims = d.parcatsViewModel.dimensions.length, - leftDimInd = d.parcatsViewModel.dimensions[numDims - 1].model.dimensionInd; - return d.model.dimensionInd === leftDimInd; - } +function catInRightDim(d) { + var numDims = d.parcatsViewModel.dimensions.length, + leftDimInd = d.parcatsViewModel.dimensions[numDims - 1].model.dimensionInd; + return d.model.dimensionInd === leftDimInd; +} /** * @param {PathViewModel} a * @param {PathViewModel} b */ function compareRawColor(a, b) { - if (a.model.rawColor > b.model.rawColor) { - return 1 - } else if (a.model.rawColor < b.model.rawColor){ - return -1 + if(a.model.rawColor > b.model.rawColor) { + return 1; + } else if(a.model.rawColor < b.model.rawColor) { + return -1; } else { - return 0 + return 0; } } @@ -364,10 +360,10 @@ function compareRawColor(a, b) { */ function mouseoverPath(d) { - if (!d.parcatsViewModel.dragDimension) { + if(!d.parcatsViewModel.dragDimension) { // We're not currently dragging - if (d.parcatsViewModel.hovermode !== 'none') { + if(d.parcatsViewModel.hovermode !== 'none') { // Raise path to top Lib.raiseToTop(this); @@ -379,7 +375,7 @@ function mouseoverPath(d) { d.parcatsViewModel.graphDiv.emit('plotly_hover', {points: points, event: d3.event}); // Handle tooltip - if (d.parcatsViewModel.tooltip) { + if(d.parcatsViewModel.tooltip) { // Mouse var hoverX = d3.mouse(this)[0]; @@ -395,13 +391,13 @@ function mouseoverPath(d) { pathCenterY, dimInd; - for (dimInd = 0; dimInd < (d.leftXs.length - 1); dimInd++) { - if (d.leftXs[dimInd] + d.dimWidths[dimInd] - 2 <= hoverX && hoverX <= d.leftXs[dimInd + 1] + 2) { + for(dimInd = 0; dimInd < (d.leftXs.length - 1); dimInd++) { + if(d.leftXs[dimInd] + d.dimWidths[dimInd] - 2 <= hoverX && hoverX <= d.leftXs[dimInd + 1] + 2) { var leftDim = d.parcatsViewModel.dimensions[dimInd]; var rightDim = d.parcatsViewModel.dimensions[dimInd + 1]; pathCenterX = (leftDim.x + leftDim.width + rightDim.x) / 2; pathCenterY = (d.topYs[dimInd] + d.topYs[dimInd + 1] + d.height) / 2; - break + break; } } @@ -411,7 +407,7 @@ function mouseoverPath(d) { var textColor = tinycolor.mostReadable(d.model.color, ['black', 'white']); - var tooltip = Fx.customHovers({ + Fx.customHovers({ x: hoverCenterX - rootBBox.left + graphDivBBox.left, y: hoverCenterY - rootBBox.top + graphDivBBox.top, text: [ @@ -440,7 +436,7 @@ function mouseoverPath(d) { * @param {PathViewModel} d */ function mouseoutPath(d) { - if (!d.parcatsViewModel.dragDimension) { + if(!d.parcatsViewModel.dragDimension) { // We're not currently dragging stylePathsNoHover(d3.select(this)); @@ -462,12 +458,12 @@ function buildPointsArrayForPath(d) { var points = []; var curveNumber = getTraceIndex(d.parcatsViewModel); - for (var i = 0; i < d.model.valueInds.length; i++) { + for(var i = 0; i < d.model.valueInds.length; i++) { var pointNumber = d.model.valueInds[i]; points.push({ curveNumber: curveNumber, pointNumber: pointNumber - }) + }); } return points; } @@ -477,7 +473,7 @@ function buildPointsArrayForPath(d) { * @param {PathViewModel} d */ function clickPath(d) { - if (d.parcatsViewModel.hovermode !== 'none') { + if(d.parcatsViewModel.hovermode !== 'none') { var points = buildPointsArrayForPath(d); d.parcatsViewModel.graphDiv.emit('plotly_click', {points: points, event: d3.event}); } @@ -486,7 +482,7 @@ function clickPath(d) { function stylePathsNoHover(pathSelection) { pathSelection .attr('fill', function(d) { - return d.model.color + return d.model.color; }) .attr('fill-opacity', 0.6) .attr('stroke', 'lightgray') @@ -521,7 +517,7 @@ function styleCategoriesNoHover(categorySelection) { function styleBandsHover(bandsSelection) { bandsSelection .attr('stroke', 'black') - .attr('stroke-width', 1.5) + .attr('stroke-width', 1.5); } function styleBandsNoHover(bandsSelection) { @@ -548,7 +544,7 @@ function selectPathsThroughCategoryBandColor(catBandViewModel) { function(pathViewModel) { return pathViewModel.model.categoryInds[dimInd] === catInd && pathViewModel.model.color === catBandViewModel.color; - }) + }); } @@ -568,7 +564,7 @@ function styleForCategoryHovermode(bandElement) { bandSel.each(function(bvm) { var paths = selectPathsThroughCategoryBandColor(bvm); stylePathsHover(paths); - paths.each(function(d) { + paths.each(function() { // Raise path to top Lib.raiseToTop(this); }); @@ -590,7 +586,7 @@ function styleForColorHovermode(bandElement) { var bandViewModel = d3.select(bandElement).datum(); var catPaths = selectPathsThroughCategoryBandColor(bandViewModel); stylePathsHover(catPaths); - catPaths.each(function(d) { + catPaths.each(function() { // Raise path to top Lib.raiseToTop(this); }); @@ -598,11 +594,11 @@ function styleForColorHovermode(bandElement) { // Style category for drag d3.select(bandElement.parentNode) .selectAll('rect.bandrect') - .filter(function(b) {return b.color === bandViewModel.color}) - .each(function(b) { + .filter(function(b) {return b.color === bandViewModel.color;}) + .each(function() { Lib.raiseToTop(this); styleBandsHover(d3.select(this)); - }) + }); } @@ -626,7 +622,7 @@ function emitPointsEventCategoryHovermode(bandElement, eventName, event) { paths.each(function(pathViewModel) { // Extend points array Array.prototype.push.apply(points, buildPointsArrayForPath(pathViewModel)); - }) + }); }); gd.emit(eventName, {points: points, event: event}); @@ -679,7 +675,7 @@ function createTooltipForCategoryHovermode(rootBBox, bandElement) { var hoverCenterX, tooltipIdealAlign; - if (parcatsViewModel.dimensions.length > 1 && + if(parcatsViewModel.dimensions.length > 1 && dimensionModel.displayInd === parcatsViewModel.dimensions.length - 1) { // right most dimension @@ -738,7 +734,7 @@ function createTooltipForColorHovermode(rootBBox, bandElement) { var hoverCenterX, tooltipIdealAlign; - if (parcatsViewModel.dimensions.length > 1 && + if(parcatsViewModel.dimensions.length > 1 && dimensionModel.displayInd === parcatsViewModel.dimensions.length - 1) { // right most dimension hoverCenterX = bandBoundingBox.left; @@ -756,9 +752,9 @@ function createTooltipForColorHovermode(rootBBox, bandElement) { var bandColorCount = 0; bandViewModel.categoryViewModel.bands.forEach(function(b) { - if (b.color === bandViewModel.color) { - bandColorCount += b.count; - } + if(b.color === bandViewModel.color) { + bandColorCount += b.count; + } }); var catCount = catViewModel.model.count; @@ -767,7 +763,7 @@ function createTooltipForColorHovermode(rootBBox, bandElement) { parcatsViewModel.pathSelection.each( /** @param {PathViewModel} pathViewModel */ function(pathViewModel) { - if (pathViewModel.model.color === bandViewModel.color) { + if(pathViewModel.model.color === bandViewModel.color) { colorCount += pathViewModel.model.count; } }); @@ -778,11 +774,11 @@ function createTooltipForColorHovermode(rootBBox, bandElement) { var pColorAndCatValue = (bandColorCount / totalCount).toFixed(3); var pColorAndCatRow = pColorAndCatLable + pColorAndCatValue; - var pCatGivenColorLabel = 'P(' + catLabel + ' | color): '; + var pCatGivenColorLabel = 'P(' + catLabel + ' | color): '; var pCatGivenColorValue = (bandColorCount / colorCount).toFixed(3); var pCatGivenColorRow = pCatGivenColorLabel + pCatGivenColorValue; - var pColorGivenCatLabel = 'P(color | ' + catLabel + '): '; + var pColorGivenCatLabel = 'P(color | ' + catLabel + '): '; var pColorGivenCatValue = (bandColorCount / catCount).toFixed(3); var pColorGivenCatRow = pColorGivenCatLabel + pColorGivenCatValue; @@ -804,7 +800,7 @@ function createTooltipForColorHovermode(rootBBox, bandElement) { fontColor: textColor, fontSize: 10, idealAlign: tooltipIdealAlign - } + }; } /** @@ -812,12 +808,12 @@ function createTooltipForColorHovermode(rootBBox, bandElement) { * @param {CategoryBandViewModel} bandViewModel */ function mouseoverCategoryBand(bandViewModel) { - if (!bandViewModel.parcatsViewModel.dragDimension) { + if(!bandViewModel.parcatsViewModel.dragDimension) { // We're not currently dragging // Mouse var mouseY = d3.mouse(this)[1]; - if (mouseY < -1) { + if(mouseY < -1) { // Hover is above above the category rectangle (probably the dimension title text) return; } @@ -832,25 +828,25 @@ function mouseoverCategoryBand(bandViewModel) { var bandElement = this; // Handle style and events - if (hovermode === 'category') { + if(hovermode === 'category') { styleForCategoryHovermode(bandElement); emitPointsEventCategoryHovermode(bandElement, 'plotly_hover', d3.event); - } else if (hovermode === 'color') { + } else if(hovermode === 'color') { styleForColorHovermode(bandElement); emitPointsEventColorHovermode(bandElement, 'plotly_hover', d3.event); } // Handle tooltip var hoverTooltip; - if (showTooltip) { - if (hovermode === 'category') { + if(showTooltip) { + if(hovermode === 'category') { hoverTooltip = createTooltipForCategoryHovermode(rootBBox, bandElement); - } else if (hovermode === 'color') { + } else if(hovermode === 'color') { hoverTooltip = createTooltipForColorHovermode(rootBBox, bandElement); } } - if (hoverTooltip) { + if(hoverTooltip) { Fx.loneHover(hoverTooltip, { container: fullLayout._hoverlayer.node(), outerContainer: fullLayout._paper.node(), @@ -866,7 +862,7 @@ function mouseoverCategoryBand(bandViewModel) { */ function mouseoutCategory(parcatsViewModel) { - if (!parcatsViewModel.dragDimension) { + if(!parcatsViewModel.dragDimension) { // We're not dragging anything // Reset unhovered styles @@ -891,7 +887,7 @@ function dragDimensionStart(d) { // Save off initial drag indexes for dimension d.dragDimensionDisplayInd = d.model.displayInd; - d.initialDragDimensionDisplayInds = d.parcatsViewModel.model.dimensions.map(function(d) {return d.displayInd}); + d.initialDragDimensionDisplayInds = d.parcatsViewModel.model.dimensions.map(function(d) {return d.displayInd;}); d.dragHasMoved = false; // Check for category hit @@ -901,18 +897,18 @@ function dragDimensionStart(d) { .select('rect.catrect') .each( /** @param {CategoryViewModel} catViewModel */ - function (catViewModel) { + function(catViewModel) { var catMouseX = d3.mouse(this)[0]; var catMouseY = d3.mouse(this)[1]; - if (-2 <= catMouseX && catMouseX <= catViewModel.width + 2 && + if(-2 <= catMouseX && catMouseX <= catViewModel.width + 2 && -2 <= catMouseY && catMouseY <= catViewModel.height + 2) { // Save off initial drag indexes for categories d.dragCategoryDisplayInd = catViewModel.model.displayInd; - d.initialDragCategoryDisplayInds = d.model.categories.map(function (c) { - return c.displayInd + d.initialDragCategoryDisplayInds = d.model.categories.map(function(c) { + return c.displayInd; }); // Initialize categories dragY to be the current y position @@ -926,10 +922,10 @@ function dragDimensionStart(d) { .selectAll('rect.bandrect') /** @param {CategoryBandViewModel} bandViewModel */ .each(function(bandViewModel) { - if (bandViewModel.y < catMouseY && catMouseY <= bandViewModel.y + bandViewModel.height) { + if(bandViewModel.y < catMouseY && catMouseY <= bandViewModel.y + bandViewModel.height) { d.potentialClickBand = this; } - }) + }); } }); @@ -947,8 +943,8 @@ function dragDimensionStart(d) { function dragDimension(d) { d.dragHasMoved = true; - if (d.dragDimensionDisplayInd === null) { - return + if(d.dragDimensionDisplayInd === null) { + return; } var dragDimInd = d.dragDimensionDisplayInd, @@ -959,7 +955,7 @@ function dragDimension(d) { .dimensions[dragDimInd]; // Update category - if (d.dragCategoryDisplayInd !== null) { + if(d.dragCategoryDisplayInd !== null) { var dragCategory = dragDimension.categories[d.dragCategoryDisplayInd]; @@ -975,9 +971,9 @@ function dragDimension(d) { var catBelow = dimCategoryViews[catDisplayInd + 1]; // Check for overlap above - if (catAbove !== undefined) { + if(catAbove !== undefined) { - if (categoryY < (catAbove.y + catAbove.height/2.0)) { + if(categoryY < (catAbove.y + catAbove.height / 2.0)) { // Swap display inds dragCategory.model.displayInd = catAbove.model.displayInd; @@ -985,9 +981,9 @@ function dragDimension(d) { } } - if (catBelow !== undefined) { + if(catBelow !== undefined) { - if ((categoryY + dragCategory.height) > (catBelow.y + catBelow.height/2.0)) { + if((categoryY + dragCategory.height) > (catBelow.y + catBelow.height / 2.0)) { // Swap display inds dragCategory.model.displayInd = catBelow.model.displayInd; @@ -1006,8 +1002,8 @@ function dragDimension(d) { var prevDimension = d.parcatsViewModel.dimensions[prevDimInd]; var nextDimension = d.parcatsViewModel.dimensions[nextDimInd]; - if (prevDimension !== undefined) { - if (dragDimension.model.dragX < (prevDimension.x + prevDimension.width)) { + if(prevDimension !== undefined) { + if(dragDimension.model.dragX < (prevDimension.x + prevDimension.width)) { // Swap display inds dragDimension.model.displayInd = prevDimension.model.displayInd; @@ -1015,8 +1011,8 @@ function dragDimension(d) { } } - if (nextDimension !== undefined) { - if ((dragDimension.model.dragX + dragDimension.width) > nextDimension.x) { + if(nextDimension !== undefined) { + if((dragDimension.model.dragX + dragDimension.width) > nextDimension.x) { // Swap display inds dragDimension.model.displayInd = nextDimension.model.displayInd; @@ -1043,8 +1039,8 @@ function dragDimension(d) { */ function dragDimensionEnd(d) { - if (d.dragDimensionDisplayInd === null) { - return + if(d.dragDimensionDisplayInd === null) { + return; } d3.select(this).selectAll('text').attr('font-weight', 'normal'); @@ -1055,39 +1051,39 @@ function dragDimensionEnd(d) { var traceInd = getTraceIndex(d.parcatsViewModel); // ### Handle dimension reordering ### - var finalDragDimensionDisplayInds = d.parcatsViewModel.model.dimensions.map(function(d) {return d.displayInd}); + var finalDragDimensionDisplayInds = d.parcatsViewModel.model.dimensions.map(function(d) {return d.displayInd;}); var anyDimsReordered = d.initialDragDimensionDisplayInds.some(function(initDimDisplay, dimInd) { - return initDimDisplay !== finalDragDimensionDisplayInds[dimInd] + return initDimDisplay !== finalDragDimensionDisplayInds[dimInd]; }); - if (anyDimsReordered) { + if(anyDimsReordered) { finalDragDimensionDisplayInds.forEach(function(finalDimDisplay, dimInd) { restyleData['dimensions[' + dimInd + '].displayInd'] = finalDimDisplay; - }) + }); } // ### Handle category reordering ### var anyCatsReordered = false; - if (d.dragCategoryDisplayInd !== null) { - var finalDragCategoryDisplayInds = d.model.categories.map(function (c) { - return c.displayInd + if(d.dragCategoryDisplayInd !== null) { + var finalDragCategoryDisplayInds = d.model.categories.map(function(c) { + return c.displayInd; }); - anyCatsReordered = d.initialDragCategoryDisplayInds.some(function (initCatDisplay, catInd) { + anyCatsReordered = d.initialDragCategoryDisplayInds.some(function(initCatDisplay, catInd) { return initCatDisplay !== finalDragCategoryDisplayInds[catInd]; }); - if (anyCatsReordered) { + if(anyCatsReordered) { restyleData['dimensions[' + d.model.dimensionInd + '].catDisplayInds'] = [finalDragCategoryDisplayInds]; } } // Handle potential click event // ---------------------------- - if (!d.dragHasMoved && d.potentialClickBand) { - if (d.parcatsViewModel.hovermode === 'color') { + if(!d.dragHasMoved && d.potentialClickBand) { + if(d.parcatsViewModel.hovermode === 'color') { emitPointsEventColorHovermode(d.potentialClickBand, 'plotly_click', d3.event.sourceEvent); - } else if (d.parcatsViewModel.hovermode === 'category') { + } else if(d.parcatsViewModel.hovermode === 'category') { emitPointsEventCategoryHovermode(d.potentialClickBand, 'plotly_click', d3.event.sourceEvent); } } @@ -1095,7 +1091,7 @@ function dragDimensionEnd(d) { // Nullify drag states // ------------------- d.model.dragX = null; - if (d.dragCategoryDisplayInd !== null) { + if(d.dragCategoryDisplayInd !== null) { var dragCategory = d.parcatsViewModel .dimensions[d.dragDimensionDisplayInd] .categories[d.dragCategoryDisplayInd]; @@ -1125,11 +1121,9 @@ function dragDimensionEnd(d) { updateSvgCategories(d.parcatsViewModel, true); updateSvgPaths(d.parcatsViewModel, true); }) - .each("end", function() { - if (anyDimsReordered || anyCatsReordered) { + .each('end', function() { + if(anyDimsReordered || anyCatsReordered) { // Perform restyle if the order of categories or dimensions changed - console.log('Do Plotly.restyle!'); - console.log([d.parcatsViewModel.graphDiv, restyleData, [traceInd]]); Plotly.restyle(d.parcatsViewModel.graphDiv, restyleData, [traceInd]); } }); @@ -1142,8 +1136,8 @@ function dragDimensionEnd(d) { function getTraceIndex(parcatsViewModel) { var traceInd; var allTraces = parcatsViewModel.graphDiv._fullData; - for (var i=0; i < allTraces.length; i++) { - if (parcatsViewModel.key === allTraces[i].uid) { + for(var i = 0; i < allTraces.length; i++) { + if(parcatsViewModel.key === allTraces[i].uid) { traceInd = i; break; } @@ -1157,22 +1151,22 @@ function getTraceIndex(parcatsViewModel) { */ function updateSvgPaths(parcatsViewModel, hasTransition) { - if (hasTransition === undefined) { + if(hasTransition === undefined) { hasTransition = false; } function transition(selection) { - return hasTransition? selection.transition(): selection + return hasTransition ? selection.transition() : selection; } // Update binding parcatsViewModel.pathSelection.data(function(d) { - return d.paths + return d.paths; }, key); // Update paths transition(parcatsViewModel.pathSelection).attr('d', function(d) { - return d.svgD + return d.svgD; }); } @@ -1182,12 +1176,12 @@ function updateSvgPaths(parcatsViewModel, hasTransition) { */ function updateSvgCategories(parcatsViewModel, hasTransition) { - if (hasTransition === undefined) { + if(hasTransition === undefined) { hasTransition = false; } function transition(selection) { - return hasTransition? selection.transition(): selection + return hasTransition ? selection.transition() : selection; } // Update binding @@ -1197,7 +1191,7 @@ function updateSvgCategories(parcatsViewModel, hasTransition) { var categorySelection = parcatsViewModel.dimensionSelection .selectAll('g.category') - .data(function(d){return d.categories;}, key); + .data(function(d) {return d.categories;}, key); // Update dimension position transition(parcatsViewModel.dimensionSelection) @@ -1208,7 +1202,7 @@ function updateSvgCategories(parcatsViewModel, hasTransition) { // Update category position transition(categorySelection) .attr('transform', function(d) { - return 'translate(0, ' + d.y + ')' + return 'translate(0, ' + d.y + ')'; }); var dimLabelSelection = categorySelection.select('.dimlabel'); @@ -1217,11 +1211,11 @@ function updateSvgCategories(parcatsViewModel, hasTransition) { // Only the top-most display category should have the dimension label dimLabelSelection .text(function(d, i) { - if (i === 0) { + if(i === 0) { // Add dimension label above topmost category return d.parcatsViewModel.model.dimensions[d.model.dimensionInd].dimensionLabel; } else { - return null + return null; } }); @@ -1231,18 +1225,18 @@ function updateSvgCategories(parcatsViewModel, hasTransition) { var catLabelSelection = categorySelection.select('.catlabel'); catLabelSelection .attr('text-anchor', - function (d) { - if (catInRightDim(d)) { + function(d) { + if(catInRightDim(d)) { // Place label to the right of category return 'start'; } else { // Place label to the left of category - return 'end'; + return 'end'; } }) .attr('x', - function (d) { - if (catInRightDim(d)) { + function(d) { + if(catInRightDim(d)) { // Place label to the right of category return d.width + 5; } else { @@ -1257,7 +1251,7 @@ function updateSvgCategories(parcatsViewModel, hasTransition) { .selectAll('rect.bandrect') .data( /** @param {CategoryViewModel} catViewModel*/ - function (catViewModel) { + function(catViewModel) { return catViewModel.bands; }, key); @@ -1267,31 +1261,31 @@ function updateSvgCategories(parcatsViewModel, hasTransition) { .attr('cursor', 'move') .attr('stroke-opacity', 0) .attr('fill', function(d) { - return d.color + return d.color; }) .attr('fill-opacity', 0); bandSelection - .attr('fill', function (d) { + .attr('fill', function(d) { return d.color; }) - .attr('width', function (d) { + .attr('width', function(d) { return d.width; }) - .attr('height', function (d) { + .attr('height', function(d) { return d.height; }) - .attr('y', function (d) { + .attr('y', function(d) { return d.y; }); styleBandsNoHover(bandsSelectionEnter); // Raise bands to the top - bandSelection.each(function() {Lib.raiseToTop(this)}); + bandSelection.each(function() {Lib.raiseToTop(this);}); // Remove unused bands - bandSelection.exit().remove() + bandSelection.exit().remove(); } /** @@ -1318,13 +1312,13 @@ function createParcatsViewModel(graphDiv, layout, wrappedParcatsModel) { figureHeight = layout.height, traceWidth = Math.floor(figureWidth * (domain.x[1] - domain.x[0])), traceHeight = Math.floor(figureHeight * (domain.y[1] - domain.y[0])), - traceX = domain.x[0] * figureWidth + margin['l'], - traceY = layout.height - domain.y[1] * layout.height + margin['t']; + traceX = domain.x[0] * figureWidth + margin.l, + traceY = layout.height - domain.y[1] * layout.height + margin.t; // Handle path shape // ----------------- var pathShape; - if (trace.marker && trace.marker.shape){ + if(trace.marker && trace.marker.shape) { pathShape = trace.marker.shape; } else { pathShape = 'curved'; @@ -1355,14 +1349,14 @@ function createParcatsViewModel(graphDiv, layout, wrappedParcatsModel) { }; // Update dimension view models if we have at least 1 dimension - if (parcatsModel.dimensions) { + if(parcatsModel.dimensions) { updateDimensionViewModels(parcatsViewModel); // Update path view models if we have at least 2 dimensions updatePathViewModels(parcatsViewModel); } // Inside a categories view model - return parcatsViewModel + return parcatsViewModel; } /** @@ -1387,7 +1381,7 @@ function buildSvgPath(leftXPositions, pathYs, dimWidths, pathHeight, curvature) refInterpolator, d; - for (d = 0; d < dimWidths.length - 1; d++) { + for(d = 0; d < dimWidths.length - 1; d++) { refInterpolator = d3.interpolateNumber(dimWidths[d] + leftXPositions[d], leftXPositions[d + 1]); xRefPoints1.push(refInterpolator(curvature)); xRefPoints2.push(refInterpolator(1 - curvature)); @@ -1400,12 +1394,12 @@ function buildSvgPath(leftXPositions, pathYs, dimWidths, pathHeight, curvature) svgD += 'l' + dimWidths[0] + ',0 '; // Horizontal line to right edge - for (d = 1; d < dimWidths.length; d++) { + for(d = 1; d < dimWidths.length; d++) { // Curve to left edge of category - svgD += 'C' + xRefPoints1[d-1] + ',' + pathYs[d-1] - + ' ' + xRefPoints2[d-1] + ',' + pathYs[d] - + ' ' + leftXPositions[d] + ',' + pathYs[d]; + svgD += 'C' + xRefPoints1[d - 1] + ',' + pathYs[d - 1] + + ' ' + xRefPoints2[d - 1] + ',' + pathYs[d] + + ' ' + leftXPositions[d] + ',' + pathYs[d]; // svgD += 'L' + leftXPositions[d] + ',' + pathYs[d]; @@ -1419,12 +1413,12 @@ function buildSvgPath(leftXPositions, pathYs, dimWidths, pathHeight, curvature) // Line to left edge of right-most category svgD += 'l -' + dimWidths[dimWidths.length - 1] + ',0 '; - for (d = dimWidths.length - 2; d >= 0; d--) { + for(d = dimWidths.length - 2; d >= 0; d--) { // Curve to right edge of category - svgD += 'C' + xRefPoints2[d] + ',' + (pathYs[d+1] + pathHeight) - + ' ' + xRefPoints1[d] + ',' + (pathYs[d] + pathHeight) - + ' ' + (leftXPositions[d] + dimWidths[d]) + ',' + (pathYs[d] + pathHeight); + svgD += 'C' + xRefPoints2[d] + ',' + (pathYs[d + 1] + pathHeight) + + ' ' + xRefPoints1[d] + ',' + (pathYs[d] + pathHeight) + + ' ' + (leftXPositions[d] + dimWidths[d]) + ',' + (pathYs[d] + pathHeight); // svgD += 'L' + (leftXPositions[d] + dimWidths[d]) + ',' + (pathYs[d] + pathHeight); @@ -1451,45 +1445,45 @@ function updatePathViewModels(parcatsViewModel) { var dimensionViewModels = parcatsViewModel.dimensions; var parcatsModel = parcatsViewModel.model; var nextYPositions = dimensionViewModels.map( - function (d) { + function(d) { return d.categories.map( - function (c) { - return c.y - }) + function(c) { + return c.y; + }); }); // Array from category index to category display index for each true dimension index var catToDisplayIndPerDim = parcatsViewModel.model.dimensions.map( - function (d) { - return d.categories.map(function(c) {return c.displayInd}) + function(d) { + return d.categories.map(function(c) {return c.displayInd;}); }); // Array from true dimension index to dimension display index - var dimToDisplayInd = parcatsViewModel.model.dimensions.map(function(d) {return d.displayInd}); - var displayToDimInd = parcatsViewModel.dimensions.map(function(d) {return d.model.dimensionInd}); + var dimToDisplayInd = parcatsViewModel.model.dimensions.map(function(d) {return d.displayInd;}); + var displayToDimInd = parcatsViewModel.dimensions.map(function(d) {return d.model.dimensionInd;}); // Array of the x position of the left edge of the rectangles for each dimension var leftXPositions = dimensionViewModels.map( - function (d) { - return d.x + function(d) { + return d.x; }); // Compute dimension widths - var dimWidths = dimensionViewModels.map(function(d) {return d.width}); + var dimWidths = dimensionViewModels.map(function(d) {return d.width;}); // Build sorted Array of PathModel objects var pathModels = []; - for (var p in parcatsModel.paths) { - if (parcatsModel.paths.hasOwnProperty(p)) { - pathModels.push(parcatsModel.paths[p]) + for(var p in parcatsModel.paths) { + if(parcatsModel.paths.hasOwnProperty(p)) { + pathModels.push(parcatsModel.paths[p]); } } // Compute category display inds to use for sorting paths function pathDisplayCategoryInds(pathModel) { - var dimensionInds = pathModel.categoryInds.map(function(catInd, dimInd){return catToDisplayIndPerDim[dimInd][catInd]}); + var dimensionInds = pathModel.categoryInds.map(function(catInd, dimInd) {return catToDisplayIndPerDim[dimInd][catInd];}); var displayInds = displayToDimInd.map(function(dimInd) { - return dimensionInds[dimInd] + return dimensionInds[dimInd]; }); return displayInds; } @@ -1502,7 +1496,7 @@ function updatePathViewModels(parcatsViewModel) { var sortArray2 = pathDisplayCategoryInds(v2); // Handle path sort order - if (parcatsViewModel.sortpaths === 'backward') { + if(parcatsViewModel.sortpaths === 'backward') { sortArray1.reverse(); sortArray2.reverse(); } @@ -1512,17 +1506,17 @@ function updatePathViewModels(parcatsViewModel) { sortArray2.push(v2.valueInds[0]); // Handle color bundling - if (parcatsViewModel.bundlecolors) { + if(parcatsViewModel.bundlecolors) { // Prepend sort array with the raw color value sortArray1.unshift(v1.rawColor); sortArray2.unshift(v2.rawColor); } // colors equal, sort by display categories - if (sortArray1 < sortArray2) { + if(sortArray1 < sortArray2) { return -1; } - if (sortArray1 > sortArray2) { + if(sortArray1 > sortArray2) { return 1; } @@ -1534,15 +1528,15 @@ function updatePathViewModels(parcatsViewModel) { totalCount = dimensionViewModels[0].model.count, totalHeight = dimensionViewModels[0].categories .map(function(c) { - return c.height}).reduce( - function(v1, v2) {return v1+v2}); + return c.height;}).reduce( + function(v1, v2) {return v1 + v2;}); - for(var pathNumber=0; pathNumber < pathModels.length; pathNumber++) { + for(var pathNumber = 0; pathNumber < pathModels.length; pathNumber++) { var pathModel = pathModels[pathNumber]; var pathHeight; - if (totalCount > 0) { + if(totalCount > 0) { pathHeight = totalHeight * (pathModel.count / totalCount); } else { pathHeight = 0; @@ -1550,7 +1544,7 @@ function updatePathViewModels(parcatsViewModel) { // Build path y coords var pathYs = new Array(nextYPositions.length); - for (var d=0; d < pathModel.categoryInds.length; d++) { + for(var d = 0; d < pathModel.categoryInds.length; d++) { var catInd = pathModel.categoryInds[d]; var catDisplayInd = catToDisplayIndPerDim[d][catInd]; var dimDisplayInd = dimToDisplayInd[d]; @@ -1562,11 +1556,11 @@ function updatePathViewModels(parcatsViewModel) { // Update category color information var catViewModle = parcatsViewModel.dimensions[dimDisplayInd].categories[catDisplayInd]; var numBands = catViewModle.bands.length; - var lastCatBand = catViewModle.bands[numBands-1]; + var lastCatBand = catViewModle.bands[numBands - 1]; - if (lastCatBand === undefined || pathModel.rawColor !== lastCatBand.rawColor) { + if(lastCatBand === undefined || pathModel.rawColor !== lastCatBand.rawColor) { // Create a new band - var bandY = lastCatBand === undefined? 0: lastCatBand.y + lastCatBand.height; + var bandY = lastCatBand === undefined ? 0 : lastCatBand.y + lastCatBand.height; catViewModle.bands.push({ key: bandY, color: pathModel.color, @@ -1580,7 +1574,7 @@ function updatePathViewModels(parcatsViewModel) { }); } else { // Extend current band - var currentBand = catViewModle.bands[numBands-1]; + var currentBand = catViewModle.bands[numBands - 1]; currentBand.height += pathHeight; currentBand.count += pathModel.count; } @@ -1588,7 +1582,7 @@ function updatePathViewModels(parcatsViewModel) { // build svg path var svgD; - if (parcatsViewModel.pathShape === 'curved') { + if(parcatsViewModel.pathShape === 'curved') { svgD = buildSvgPath(leftXPositions, pathYs, dimWidths, pathHeight, 0.5); } else { svgD = buildSvgPath(leftXPositions, pathYs, dimWidths, pathHeight, 0); @@ -1603,10 +1597,10 @@ function updatePathViewModels(parcatsViewModel) { dimWidths: dimWidths, svgD: svgD, parcatsViewModel: parcatsViewModel - } + }; } - parcatsViewModel['paths'] = pathViewModels; + parcatsViewModel.paths = pathViewModels; // * @property key // * Unique key for this model @@ -1627,22 +1621,22 @@ function updatePathViewModels(parcatsViewModel) { function updateDimensionViewModels(parcatsViewModel) { // Compute dimension ordering - var dimensionsIndInfo = parcatsViewModel.model.dimensions.map(function(d, i) { - return {displayInd: d.displayInd, dimensionInd: d.dimensionInd} + var dimensionsIndInfo = parcatsViewModel.model.dimensions.map(function(d) { + return {displayInd: d.displayInd, dimensionInd: d.dimensionInd}; }); dimensionsIndInfo.sort(function(a, b) { - return a.displayInd - b.displayInd + return a.displayInd - b.displayInd; }); var dimensions = []; - for (var displayInd in dimensionsIndInfo) { + for(var displayInd in dimensionsIndInfo) { var dimensionInd = dimensionsIndInfo[displayInd].dimensionInd; var dimModel = parcatsViewModel.model.dimensions[dimensionInd]; dimensions.push(createDimensionViewModel(parcatsViewModel, dimModel)); } - parcatsViewModel['dimensions'] = dimensions; + parcatsViewModel.dimensions = dimensions; } /** @@ -1666,13 +1660,13 @@ function createDimensionViewModel(parcatsViewModel, dimensionModel) { dimX0, dimX; - if (numDimensions > 1) { - dimDx = (parcatsViewModel.width - 2*categoryLabelPad - dimWidth) / (numDimensions - 1); + if(numDimensions > 1) { + dimDx = (parcatsViewModel.width - 2 * categoryLabelPad - dimWidth) / (numDimensions - 1); } else { - dimDx = 0 + dimDx = 0; } dimX0 = categoryLabelPad; - dimX = dimX0 + dimDx*displayInd; + dimX = dimX0 + dimDx * displayInd; // Compute categories var categories = [], @@ -1691,19 +1685,19 @@ function createDimensionViewModel(parcatsViewModel, dimensionModel) { var nextCatY = (maxCats - numCats) * catSpacing / 2.0; // Compute category ordering - var categoryIndInfo = dimensionModel.categories.map(function(c, i) { - return {displayInd: c.displayInd, categoryInd: c.categoryInd} + var categoryIndInfo = dimensionModel.categories.map(function(c) { + return {displayInd: c.displayInd, categoryInd: c.categoryInd}; }); categoryIndInfo.sort(function(a, b) { - return a.displayInd - b.displayInd + return a.displayInd - b.displayInd; }); - for (catDisplayInd = 0; catDisplayInd < numCats; catDisplayInd++) { + for(catDisplayInd = 0; catDisplayInd < numCats; catDisplayInd++) { catInd = categoryIndInfo[catDisplayInd].categoryInd; nextCatModel = dimensionModel.categories[catInd]; - if (totalCount > 0) { + if(totalCount > 0) { nextCatHeight = (nextCatModel.count / totalCount) * totalHeight; } else { nextCatHeight = 0; @@ -1714,18 +1708,18 @@ function createDimensionViewModel(parcatsViewModel, dimensionModel) { model: nextCatModel, width: dimWidth, height: nextCatHeight, - y: nextCatModel.dragY !== null? nextCatModel.dragY: nextCatY, + y: nextCatModel.dragY !== null ? nextCatModel.dragY : nextCatY, bands: [], parcatsViewModel: parcatsViewModel }; nextCatY = nextCatY + nextCatHeight + catSpacing; - categories.push(nextCat) + categories.push(nextCat); } return { key: dimensionModel.dimensionInd, - x: dimensionModel.dragX !== null? dimensionModel.dragX: dimX, + x: dimensionModel.dragX !== null ? dimensionModel.dragX : dimX, y: 0, width: dimWidth, model: dimensionModel, @@ -1737,7 +1731,7 @@ function createDimensionViewModel(parcatsViewModel, dimensionModel) { initialDragCategoryDisplayInds: null, dragHasMoved: null, potentialClickBand: null - } + }; } // JSDoc typedefs diff --git a/src/traces/parcats/plot.js b/src/traces/parcats/plot.js index 35a37311bf8..5dad5365b6f 100644 --- a/src/traces/parcats/plot.js +++ b/src/traces/parcats/plot.js @@ -18,7 +18,6 @@ var parcats = require('./parcats'); * @param {Array.} parcatsModels */ module.exports = function plot(graphDiv, parcatsModels, transitionOpts, makeOnCompleteCallback) { - console.log(['plot', parcatsModels, transitionOpts, makeOnCompleteCallback]); var fullLayout = graphDiv._fullLayout, svg = fullLayout._paper, size = fullLayout._size; diff --git a/test/jasmine/tests/parcats_test.js b/test/jasmine/tests/parcats_test.js index 7c0d9263f85..08b166902e7 100644 --- a/test/jasmine/tests/parcats_test.js +++ b/test/jasmine/tests/parcats_test.js @@ -1,21 +1,25 @@ var Plotly = require('@lib/index'); var Lib = require('@src/lib'); - var d3 = require('d3'); var createGraphDiv = require('../assets/create_graph_div'); var destroyGraphDiv = require('../assets/destroy_graph_div'); var failTest = require('../assets/fail_test'); -var click = require('../assets/click'); -var getClientPosition = require('../assets/get_client_position'); var mouseEvent = require('../assets/mouse_event'); var delay = require('../assets/delay'); -var customAssertions = require('../assets/custom_assertions'); -var assertHoverLabelStyle = customAssertions.assertHoverLabelStyle; -var assertHoverLabelContent = customAssertions.assertHoverLabelContent; - var CALLBACK_DELAY = 500; +// Testing constants +// ================= +var basic_mock = Lib.extendDeep({}, require('@mocks/parcats_basic.json')); +var margin = basic_mock.layout.margin; +var domain = basic_mock.data[0].domain; + +var categoryLabelPad = 40, + dimWidth = 16, + catSpacing = 8, + dimDx = (256 - 2 * categoryLabelPad - dimWidth) / 2; + // Validation helpers // ================== function checkDimensionCalc(gd, dimInd, dimProps) { @@ -23,7 +27,7 @@ function checkDimensionCalc(gd, dimInd, dimProps) { var calcdata = gd.calcdata[0][0]; var dimension = calcdata.dimensions[dimInd]; for(var dimProp in dimProps) { - if (dimProps.hasOwnProperty(dimProp)) { + if(dimProps.hasOwnProperty(dimProp)) { expect(dimension[dimProp]).toEqual(dimProps[dimProp]); } } @@ -35,7 +39,7 @@ function checkCategoryCalc(gd, dimInd, catInd, catProps) { var dimension = calcdata.dimensions[dimInd]; var category = dimension.categories[catInd]; for(var catProp in catProps) { - if (catProps.hasOwnProperty(catProp)) { + if(catProps.hasOwnProperty(catProp)) { expect(category[catProp]).toEqual(catProps[catProp]); } } @@ -65,14 +69,14 @@ function checkParcatsModelView(gd) { expect(parcatsViewModel.dimensions[1].x).toEqual(categoryLabelPad + dimDx); expect(parcatsViewModel.dimensions[1].y).toEqual(0); - expect(parcatsViewModel.dimensions[2].x).toEqual(categoryLabelPad + 2*dimDx); + expect(parcatsViewModel.dimensions[2].x).toEqual(categoryLabelPad + 2 * dimDx); expect(parcatsViewModel.dimensions[2].y).toEqual(0); // Check location of categories /** @param {Array.} categories */ function checkCategoryPositions(categories) { var nextY = (3 - categories.length) * catSpacing / 2; - for (var c=0; c Date: Tue, 7 Aug 2018 13:23:37 -0400 Subject: [PATCH 04/50] Remove customHovers, replace with loneHover This was a relic of an older attempt to display a tooltip per color for the hover node. It worked, but was pretty unwieldy. --- src/components/fx/hover.js | 76 ----------------------------------- src/traces/parcats/parcats.js | 2 +- 2 files changed, 1 insertion(+), 77 deletions(-) diff --git a/src/components/fx/hover.js b/src/components/fx/hover.js index c2e616b253b..ff8175c69c5 100644 --- a/src/components/fx/hover.js +++ b/src/components/fx/hover.js @@ -153,82 +153,6 @@ exports.loneHover = function loneHover(hoverItem, opts) { return hoverLabel.node(); }; -// TODO: replace loneHover? -exports.customHovers = function customHovers(hoverItems, opts) { - - if(!Array.isArray(hoverItems)) { - hoverItems = [hoverItems]; - } - - var pointsData = hoverItems.map(function(hoverItem) { - return { - color: hoverItem.color || Color.defaultLine, - x0: hoverItem.x0 || hoverItem.x || 0, - x1: hoverItem.x1 || hoverItem.x || 0, - y0: hoverItem.y0 || hoverItem.y || 0, - y1: hoverItem.y1 || hoverItem.y || 0, - xLabel: hoverItem.xLabel, - yLabel: hoverItem.yLabel, - zLabel: hoverItem.zLabel, - text: hoverItem.text, - name: hoverItem.name, - idealAlign: hoverItem.idealAlign, - - // optional extra bits of styling - borderColor: hoverItem.borderColor, - fontFamily: hoverItem.fontFamily, - fontSize: hoverItem.fontSize, - fontColor: hoverItem.fontColor, - - // filler to make createHoverText happy - trace: { - index: 0, - hoverinfo: '' - }, - xa: {_offset: 0}, - ya: {_offset: 0}, - index: 0 - }; - }); - - - var container3 = d3.select(opts.container), - outerContainer3 = opts.outerContainer ? - d3.select(opts.outerContainer) : container3; - - var fullOpts = { - hovermode: 'closest', - rotateLabels: false, - bgColor: opts.bgColor || Color.background, - container: container3, - outerContainer: outerContainer3 - }; - - var hoverLabel = createHoverText(pointsData, fullOpts, opts.gd); - - // Fix vertical overlap - var tooltipSpacing = 5; - var lastBottomY = 0; - hoverLabel - .sort(function(a, b) {return a.y0 - b.y0;}) - .each(function(d) { - var topY = d.y0 - d.by / 2; - - if((topY - tooltipSpacing) < lastBottomY) { - d.offset = (lastBottomY - topY) + tooltipSpacing; - } else { - d.offset = 0; - } - - lastBottomY = topY + d.by + d.offset; - }); - - - alignHoverText(hoverLabel, fullOpts.rotateLabels); - - return hoverLabel.node(); -}; - // The actual implementation is here: function _hover(gd, evt, subplot, noHoverEvent) { if(!subplot) subplot = 'xy'; diff --git a/src/traces/parcats/parcats.js b/src/traces/parcats/parcats.js index 9507f638f0d..39a141d219c 100644 --- a/src/traces/parcats/parcats.js +++ b/src/traces/parcats/parcats.js @@ -407,7 +407,7 @@ function mouseoverPath(d) { var textColor = tinycolor.mostReadable(d.model.color, ['black', 'white']); - Fx.customHovers({ + Fx.loneHover({ x: hoverCenterX - rootBBox.left + graphDivBBox.left, y: hoverCenterY - rootBBox.top + graphDivBBox.top, text: [ From 0c9c75f6de7699c0dc83b3f203544f6505db7318 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Tue, 7 Aug 2018 14:32:33 -0400 Subject: [PATCH 05/50] Bring back customHovers --- src/components/fx/hover.js | 76 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/src/components/fx/hover.js b/src/components/fx/hover.js index ff8175c69c5..c2e616b253b 100644 --- a/src/components/fx/hover.js +++ b/src/components/fx/hover.js @@ -153,6 +153,82 @@ exports.loneHover = function loneHover(hoverItem, opts) { return hoverLabel.node(); }; +// TODO: replace loneHover? +exports.customHovers = function customHovers(hoverItems, opts) { + + if(!Array.isArray(hoverItems)) { + hoverItems = [hoverItems]; + } + + var pointsData = hoverItems.map(function(hoverItem) { + return { + color: hoverItem.color || Color.defaultLine, + x0: hoverItem.x0 || hoverItem.x || 0, + x1: hoverItem.x1 || hoverItem.x || 0, + y0: hoverItem.y0 || hoverItem.y || 0, + y1: hoverItem.y1 || hoverItem.y || 0, + xLabel: hoverItem.xLabel, + yLabel: hoverItem.yLabel, + zLabel: hoverItem.zLabel, + text: hoverItem.text, + name: hoverItem.name, + idealAlign: hoverItem.idealAlign, + + // optional extra bits of styling + borderColor: hoverItem.borderColor, + fontFamily: hoverItem.fontFamily, + fontSize: hoverItem.fontSize, + fontColor: hoverItem.fontColor, + + // filler to make createHoverText happy + trace: { + index: 0, + hoverinfo: '' + }, + xa: {_offset: 0}, + ya: {_offset: 0}, + index: 0 + }; + }); + + + var container3 = d3.select(opts.container), + outerContainer3 = opts.outerContainer ? + d3.select(opts.outerContainer) : container3; + + var fullOpts = { + hovermode: 'closest', + rotateLabels: false, + bgColor: opts.bgColor || Color.background, + container: container3, + outerContainer: outerContainer3 + }; + + var hoverLabel = createHoverText(pointsData, fullOpts, opts.gd); + + // Fix vertical overlap + var tooltipSpacing = 5; + var lastBottomY = 0; + hoverLabel + .sort(function(a, b) {return a.y0 - b.y0;}) + .each(function(d) { + var topY = d.y0 - d.by / 2; + + if((topY - tooltipSpacing) < lastBottomY) { + d.offset = (lastBottomY - topY) + tooltipSpacing; + } else { + d.offset = 0; + } + + lastBottomY = topY + d.by + d.offset; + }); + + + alignHoverText(hoverLabel, fullOpts.rotateLabels); + + return hoverLabel.node(); +}; + // The actual implementation is here: function _hover(gd, evt, subplot, noHoverEvent) { if(!subplot) subplot = 'xy'; From 7b751009fc9804272316f0bb539ed0386c0858bd Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Tue, 7 Aug 2018 14:44:44 -0400 Subject: [PATCH 06/50] Renamed `parcats.marker` -> `parcats.line` Renamed shape categories to `linear` and `hspline` and made `linear` the default. --- src/traces/parcats/attributes.js | 14 ++++++------ src/traces/parcats/calc.js | 18 +++++++-------- src/traces/parcats/defaults.js | 22 +++++++++---------- src/traces/parcats/parcats.js | 10 ++++----- test/image/mocks/parcats_bundled.json | 2 +- .../image/mocks/parcats_bundled_reversed.json | 2 +- test/image/mocks/parcats_unbundled.json | 4 ++-- 7 files changed, 36 insertions(+), 36 deletions(-) diff --git a/src/traces/parcats/attributes.js b/src/traces/parcats/attributes.js index 3962dbf21b9..e5a36072815 100644 --- a/src/traces/parcats/attributes.js +++ b/src/traces/parcats/attributes.js @@ -12,19 +12,19 @@ var extendFlat = require('../../lib/extend').extendFlat; var colorAttributes = require('../../components/colorscale/attributes'); var scatterAttrs = require('../scatter/attributes'); -var scatterMarkerAttrs = scatterAttrs.marker; +var scatterLineAttrs = scatterAttrs.line; var colorbarAttrs = require('../../components/colorbar/attributes'); -var marker = extendFlat({ +var line = extendFlat({ editType: 'calc' -}, colorAttributes('marker', {editType: 'calc'}), +}, colorAttributes('line', {editType: 'calc'}), { - showscale: scatterMarkerAttrs.showscale, + showscale: scatterLineAttrs.showscale, colorbar: colorbarAttrs, shape: { valType: 'enumerated', - values: ['straight', 'curved'], - dflt: 'curved', + values: ['linear', 'hspline'], + dflt: 'linear', role: 'info', editType: 'plot', description: 'Sets the shape of the paths'}, @@ -166,7 +166,7 @@ module.exports = { description: 'The dimensions (variables) of the parallel categories diagram.' }, - marker: marker, + line: line, counts: { valType: 'number', min: 0, diff --git a/src/traces/parcats/calc.js b/src/traces/parcats/calc.js index 4384e213c24..f3189a087b3 100644 --- a/src/traces/parcats/calc.js +++ b/src/traces/parcats/calc.js @@ -71,15 +71,15 @@ module.exports = function calc(gd, trace) { // Handle path colors // ------------------ - var marker = trace.marker; + var line = trace.line; var markerColorscale; // Process colorscale - if(marker) { - if(hasColorscale(trace, 'marker')) { - colorscaleCalc(trace, trace.marker.color, 'marker', 'c'); + if(line) { + if(hasColorscale(trace, 'line')) { + colorscaleCalc(trace, trace.line.color, 'line', 'c'); } - markerColorscale = Drawing.tryColorscale(marker); + markerColorscale = Drawing.tryColorscale(line); } else { markerColorscale = Lib.identity; } @@ -87,12 +87,12 @@ module.exports = function calc(gd, trace) { // Build color generation function function getMarkerColorInfo(index) { var value; - if(!marker) { + if(!line) { value = parcatConstants.defaultColor; - } else if(Array.isArray(marker.color)) { - value = marker.color[index % marker.color.length]; + } else if(Array.isArray(line.color)) { + value = line.color[index % line.color.length]; } else { - value = marker.color; + value = line.color; } return {color: markerColorscale(value), rawColor: value}; diff --git a/src/traces/parcats/defaults.js b/src/traces/parcats/defaults.js index 09bc1251664..f1184227aca 100644 --- a/src/traces/parcats/defaults.js +++ b/src/traces/parcats/defaults.js @@ -15,16 +15,16 @@ var colorbarDefaults = require('../../components/colorbar/defaults'); function markerDefaults(traceIn, traceOut, defaultColor, layout, coerce) { - coerce('marker.color', defaultColor); - - if(traceIn.marker) { - coerce('marker.cmin'); - coerce('marker.cmax'); - coerce('marker.cauto'); - coerce('marker.colorscale'); - coerce('marker.showscale'); - coerce('marker.shape'); - colorbarDefaults(traceIn.marker, traceOut.marker, layout); + coerce('line.color', defaultColor); + + if(traceIn.line) { + coerce('line.cmin'); + coerce('line.cmax'); + coerce('line.cauto'); + coerce('line.colorscale'); + coerce('line.showscale'); + coerce('line.shape'); + colorbarDefaults(traceIn.line, traceOut.line, layout); } } @@ -64,7 +64,7 @@ function dimensionsDefaults(traceIn, traceOut) { // Pass through catValues, catorder, and catlabels (validated in calc since this is where unique info is available) - // pass through marker (color, line) + // pass through line (color) // Pass through font commonLength = Math.min(commonLength, dimensionOut.values.length); diff --git a/src/traces/parcats/parcats.js b/src/traces/parcats/parcats.js index 39a141d219c..de646dc73dc 100644 --- a/src/traces/parcats/parcats.js +++ b/src/traces/parcats/parcats.js @@ -1318,10 +1318,10 @@ function createParcatsViewModel(graphDiv, layout, wrappedParcatsModel) { // Handle path shape // ----------------- var pathShape; - if(trace.marker && trace.marker.shape) { - pathShape = trace.marker.shape; + if(trace.line && trace.line.shape) { + pathShape = trace.line.shape; } else { - pathShape = 'curved'; + pathShape = 'linear'; } // Initialize parcatsViewModel @@ -1582,7 +1582,7 @@ function updatePathViewModels(parcatsViewModel) { // build svg path var svgD; - if(parcatsViewModel.pathShape === 'curved') { + if(parcatsViewModel.pathShape === 'hspline') { svgD = buildSvgPath(leftXPositions, pathYs, dimWidths, pathHeight, 0.5); } else { svgD = buildSvgPath(leftXPositions, pathYs, dimWidths, pathHeight, 0); @@ -1791,7 +1791,7 @@ function createDimensionViewModel(parcatsViewModel, dimensionModel) { * If 'forward' then sort paths based on dimensions from left to right. If 'backward' sort based on dimensions * from right to left * @property {String} pathShape - * The shape of the paths. Either 'straight' or 'curved'. + * The shape of the paths. Either 'linear' or 'hspline'. * @property {DimensionViewModel|null} dragDimension * Dimension currently being dragged. Null if no drag in progress * @property {Margin} margin diff --git a/test/image/mocks/parcats_bundled.json b/test/image/mocks/parcats_bundled.json index 8f923c82b80..118c56234c3 100644 --- a/test/image/mocks/parcats_bundled.json +++ b/test/image/mocks/parcats_bundled.json @@ -7,7 +7,7 @@ {"label": "Two", "values": ["A", "B", "A", "B", "C", "C", "A", "B", "C"]}, {"label": "Three", "values": [11, 11, 11, 11, 11, 11, 11, 11, 11]}], "bundlecolors": true, - "marker": { + "line": { "color": [0, 0, 1, 1, 0, 1, 0, 0, 0] } } diff --git a/test/image/mocks/parcats_bundled_reversed.json b/test/image/mocks/parcats_bundled_reversed.json index ee6b6c34d1a..116945f9fb1 100644 --- a/test/image/mocks/parcats_bundled_reversed.json +++ b/test/image/mocks/parcats_bundled_reversed.json @@ -8,7 +8,7 @@ {"label": "Three", "values": [11, 11, 11, 11, 11, 11, 11, 11, 11]}], "bundlecolors": true, "sortpaths": "backward", - "marker": { + "line": { "color": [0, 0, 1, 1, 0, 1, 0, 0, 0] } } diff --git a/test/image/mocks/parcats_unbundled.json b/test/image/mocks/parcats_unbundled.json index d857574df4a..d4a782a8ca5 100644 --- a/test/image/mocks/parcats_unbundled.json +++ b/test/image/mocks/parcats_unbundled.json @@ -7,9 +7,9 @@ {"label": "Two", "values": ["A", "B", "A", "B", "C", "C", "A", "B", "C"]}, {"label": "Three", "values": [11, 11, 11, 11, 11, 11, 11, 11, 11]}], "bundlecolors": false, - "marker": { + "line": { "color": [0, 0, 1, 1, 0, 1, 0, 0, 0], - "shape": "straight" + "shape": "hspline" } } ], From d2c5ae8ee74ebc39421309bc0d2ec542a75a3dc1 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Wed, 8 Aug 2018 14:44:16 -0400 Subject: [PATCH 07/50] Use plots/domain and handleDomainDefaults --- src/traces/parcats/attributes.js | 34 ++------------------------------ src/traces/parcats/defaults.js | 4 ++-- 2 files changed, 4 insertions(+), 34 deletions(-) diff --git a/src/traces/parcats/attributes.js b/src/traces/parcats/attributes.js index e5a36072815..d05820ca08c 100644 --- a/src/traces/parcats/attributes.js +++ b/src/traces/parcats/attributes.js @@ -10,7 +10,7 @@ var extendFlat = require('../../lib/extend').extendFlat; var colorAttributes = require('../../components/colorscale/attributes'); - +var domainAttrs = require('../../plots/domain').attributes; var scatterAttrs = require('../scatter/attributes'); var scatterLineAttrs = scatterAttrs.line; var colorbarAttrs = require('../../components/colorbar/attributes'); @@ -31,37 +31,7 @@ var line = extendFlat({ }); module.exports = { - domain: { - x: { - valType: 'info_array', - role: 'info', - items: [ - {valType: 'number', min: 0, max: 1, editType: 'calc'}, - {valType: 'number', min: 0, max: 1, editType: 'calc'} - ], - dflt: [0, 1], - editType: 'calc', - description: [ - 'Sets the horizontal domain of this `parcats` trace', - '(in plot fraction).' - ].join(' ') - }, - y: { - valType: 'info_array', - role: 'info', - items: [ - {valType: 'number', min: 0, max: 1, editType: 'calc'}, - {valType: 'number', min: 0, max: 1, editType: 'calc'} - ], - dflt: [0, 1], - editType: 'calc', - description: [ - 'Sets the vertical domain of this `parcats` trace', - '(in plot fraction).' - ].join(' ') - }, - editType: 'calc' - }, + domain: domainAttrs({name: 'parcats', trace: true, editType: 'calc'}), tooltip: { valType: 'boolean', diff --git a/src/traces/parcats/defaults.js b/src/traces/parcats/defaults.js index f1184227aca..cb0b7e78c1b 100644 --- a/src/traces/parcats/defaults.js +++ b/src/traces/parcats/defaults.js @@ -12,6 +12,7 @@ var Lib = require('../../lib'); var attributes = require('./attributes'); var parcatConstants = require('./constants'); var colorbarDefaults = require('../../components/colorbar/defaults'); +var handleDomainDefaults = require('../../plots/domain').defaults; function markerDefaults(traceIn, traceOut, defaultColor, layout, coerce) { @@ -102,8 +103,7 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout dimensionsDefaults(traceIn, traceOut); - coerce('domain.x'); - coerce('domain.y'); + handleDomainDefaults(traceOut, layout, coerce); markerDefaults(traceIn, traceOut, defaultColor, layout, coerce); From a34dafaf6f344e4b3936626b1c144ab8969877da Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Wed, 8 Aug 2018 15:06:00 -0400 Subject: [PATCH 08/50] Rename displayInd -> displayindex --- src/traces/parcats/attributes.js | 2 +- src/traces/parcats/calc.js | 6 +++--- src/traces/parcats/defaults.js | 2 +- src/traces/parcats/parcats.js | 2 +- test/image/mocks/parcats_reordered.json | 6 +++--- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/traces/parcats/attributes.js b/src/traces/parcats/attributes.js index d05820ca08c..8223685775e 100644 --- a/src/traces/parcats/attributes.js +++ b/src/traces/parcats/attributes.js @@ -123,7 +123,7 @@ module.exports = { 'will be truncated). Each value must an element of `catValues`.' ].join(' ') }, - displayInd: { + displayindex: { valType: 'integer', role: 'info', editType: 'calc', diff --git a/src/traces/parcats/calc.js b/src/traces/parcats/calc.js index f3189a087b3..9b1d937e346 100644 --- a/src/traces/parcats/calc.js +++ b/src/traces/parcats/calc.js @@ -169,7 +169,7 @@ module.exports = function calc(gd, trace) { // Array of DimensionModel objects var dimensionModels = trace.dimensions.map(function(di, i) { - return createDimensionModel(i, di.displayInd, di.label, totalCount); + return createDimensionModel(i, di.displayindex, di.label, totalCount); }); @@ -464,10 +464,10 @@ function getUniqueInfo(values, uniqueValues) { * @param {Object} trace */ function validateDimensionDisplayInds(trace) { - var displayInds = trace.dimensions.map(function(dim) {return dim.displayInd;}); + var displayInds = trace.dimensions.map(function(dim) {return dim.displayindex;}); if(!isRangePermutation(displayInds)) { trace.dimensions.forEach(function(dim, i) { - dim.displayInd = i; + dim.displayindex = i; }); } } diff --git a/src/traces/parcats/defaults.js b/src/traces/parcats/defaults.js index cb0b7e78c1b..1e42f31f810 100644 --- a/src/traces/parcats/defaults.js +++ b/src/traces/parcats/defaults.js @@ -56,7 +56,7 @@ function dimensionsDefaults(traceIn, traceOut) { // Dimension level coerce('values'); coerce('label'); - coerce('displayInd', i); + coerce('displayindex', i); // Category level coerce('catDisplayInds'); diff --git a/src/traces/parcats/parcats.js b/src/traces/parcats/parcats.js index de646dc73dc..3e262e36ab6 100644 --- a/src/traces/parcats/parcats.js +++ b/src/traces/parcats/parcats.js @@ -1058,7 +1058,7 @@ function dragDimensionEnd(d) { if(anyDimsReordered) { finalDragDimensionDisplayInds.forEach(function(finalDimDisplay, dimInd) { - restyleData['dimensions[' + dimInd + '].displayInd'] = finalDimDisplay; + restyleData['dimensions[' + dimInd + '].displayindex'] = finalDimDisplay; }); } diff --git a/test/image/mocks/parcats_reordered.json b/test/image/mocks/parcats_reordered.json index 7d61464e431..65169e6ad5b 100644 --- a/test/image/mocks/parcats_reordered.json +++ b/test/image/mocks/parcats_reordered.json @@ -3,10 +3,10 @@ {"type": "parcats", "domain": {"x": [0.125, 0.625],"y": [0.25, 0.75]}, "dimensions": [ - {"label": "One", "values": [1, 1, 2, 1, 2, 1, 1, 2, 1], "displayInd": 0}, - {"label": "Two", "values": ["A", "B", "A", "B", "C", "C", "A", "B", "C"], "displayInd": 2, + {"label": "One", "values": [1, 1, 2, 1, 2, 1, 1, 2, 1], "displayindex": 0}, + {"label": "Two", "values": ["A", "B", "A", "B", "C", "C", "A", "B", "C"], "displayindex": 2, "catDisplayInds": [1, 2, 0], "CatValues": ["A", "B", "C"]}, - {"label": "Three", "values": [11, 11, 11, 11, 11, 11, 11, 11, 11], "displayInd": 1}]} + {"label": "Three", "values": [11, 11, 11, 11, 11, 11, 11, 11, 11], "displayindex": 1}]} ], "layout": { "height": 602, From 71e212bd0b341aaa05aa59cdf6b7492e8472bb43 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Wed, 8 Aug 2018 15:39:57 -0400 Subject: [PATCH 09/50] Convert to simplified colorbar logic Added colorscale mock --- src/traces/parcats/colorbar.js | 52 -------------------------- src/traces/parcats/index.js | 6 ++- test/image/mocks/parcats_colorbar.json | 24 ++++++++++++ 3 files changed, 29 insertions(+), 53 deletions(-) delete mode 100644 src/traces/parcats/colorbar.js create mode 100644 test/image/mocks/parcats_colorbar.json diff --git a/src/traces/parcats/colorbar.js b/src/traces/parcats/colorbar.js deleted file mode 100644 index 34311390879..00000000000 --- a/src/traces/parcats/colorbar.js +++ /dev/null @@ -1,52 +0,0 @@ -/** -* Copyright 2012-2017, Plotly, Inc. -* All rights reserved. -* -* This source code is licensed under the MIT license found in the -* LICENSE file in the root directory of this source tree. -*/ - - -'use strict'; - -var isNumeric = require('fast-isnumeric'); - -var Lib = require('../../lib'); -var Plots = require('../../plots/plots'); -var Colorscale = require('../../components/colorscale'); -var drawColorbar = require('../../components/colorbar/draw'); - - -module.exports = function colorbar(gd, cd) { - var trace = cd[0].trace, - marker = trace.marker, - cbId = 'cb' + trace.uid; - - gd._fullLayout._infolayer.selectAll('.' + cbId).remove(); - - if((marker === undefined) || !marker.showscale) { - Plots.autoMargin(gd, cbId); - return; - } - - var vals = marker.color, - cmin = marker.cmin, - cmax = marker.cmax; - - if(!isNumeric(cmin)) cmin = Lib.aggNums(Math.min, null, vals); - if(!isNumeric(cmax)) cmax = Lib.aggNums(Math.max, null, vals); - - var cb = cd[0].t.cb = drawColorbar(gd, cbId); - var sclFunc = Colorscale.makeColorScaleFunc( - Colorscale.extractScale( - marker.colorscale, - cmin, - cmax - ), - { noNumericCheck: true } - ); - - cb.fillcolor(sclFunc) - .filllevels({start: cmin, end: cmax, size: (cmax - cmin) / 254}) - .options(marker.colorbar)(); -}; diff --git a/src/traces/parcats/index.js b/src/traces/parcats/index.js index 868245feea7..a8e9de4dbde 100644 --- a/src/traces/parcats/index.js +++ b/src/traces/parcats/index.js @@ -14,7 +14,11 @@ Parcats.attributes = require('./attributes'); Parcats.supplyDefaults = require('./defaults'); Parcats.calc = require('./calc'); Parcats.plot = require('./plot'); -Parcats.colorbar = require('./colorbar'); +Parcats.colorbar = { + container: 'line', + min: 'cmin', + max: 'cmax' +}; Parcats.moduleType = 'trace'; Parcats.name = 'parcats'; diff --git a/test/image/mocks/parcats_colorbar.json b/test/image/mocks/parcats_colorbar.json new file mode 100644 index 00000000000..b0f06f39bfe --- /dev/null +++ b/test/image/mocks/parcats_colorbar.json @@ -0,0 +1,24 @@ +{ + "data": [ + {"type": "parcats", + "domain": {"x": [0.125, 0.625],"y": [0.25, 0.75]}, + "dimensions":[ + {"label": "One", "values": [1, 1, 2, 1, 2, 1, 1, 2, 1, 2, 3, 1, 2, 3, 1, 2, 1, 2, 1, 1]}, + {"label": "Two", "values": ["A", "B", "A", "B", "C", "C", "A", "B", "C", "B", "C", "B", "C", "B", "C", "B", "C", "B", "A", "A"]}, + {"label": "Three", "values": [11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11]}], + "bundlecolors": true, + "line": { + "color": [0, 0, 1, 1, 0, 1, 0, 0, 0, 2, 2, 2, 2, 1, 2, 1, 0, 2, 1, 2], + "shape": "linear", + "showscale": true, + "colorscale": "Viridis" + } + } + ], + "layout": { + "height": 602, + "width": 592, + "margin": { + "l": 40, "r": 40, "t": 50, "b": 40 + }} +} From 6797a8354bcab0277af4e7d4cca9238bb19e415f Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Thu, 9 Aug 2018 15:18:28 -0400 Subject: [PATCH 10/50] Remove maxDimensionCount check --- src/traces/parcats/constants.js | 1 - src/traces/parcats/defaults.js | 5 ----- 2 files changed, 6 deletions(-) diff --git a/src/traces/parcats/constants.js b/src/traces/parcats/constants.js index 3d24dff2956..ae9a9e73d61 100644 --- a/src/traces/parcats/constants.js +++ b/src/traces/parcats/constants.js @@ -10,7 +10,6 @@ module.exports = { - maxDimensionCount: 12, defaultColor: 'lightgray', cn: { className: 'parcats' diff --git a/src/traces/parcats/defaults.js b/src/traces/parcats/defaults.js index 1e42f31f810..4d16640fbea 100644 --- a/src/traces/parcats/defaults.js +++ b/src/traces/parcats/defaults.js @@ -36,11 +36,6 @@ function dimensionsDefaults(traceIn, traceOut) { var dimensionIn, dimensionOut, i; var commonLength = Infinity; - if(dimensionsIn.length > parcatConstants.maxDimensionCount) { - Lib.log('parcats traces support up to ' + parcatConstants.maxDimensionCount + ' dimensions at the moment'); - dimensionsIn.splice(parcatConstants.maxDimensionCount); - } - function coerce(attr, dflt) { return Lib.coerce(dimensionIn, dimensionOut, attributes.dimensions, attr, dflt); } From 2c14168928ccf500dafa3f44ed555944b3c20374 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Thu, 9 Aug 2018 15:59:26 -0400 Subject: [PATCH 11/50] Cleanup supplyDefaults and add visible dimension property (property isn't wired up properly yet) --- src/traces/parcats/attributes.js | 9 ++- src/traces/parcats/defaults.js | 97 +++++++++++++------------------- 2 files changed, 46 insertions(+), 60 deletions(-) diff --git a/src/traces/parcats/attributes.js b/src/traces/parcats/attributes.js index 8223685775e..359f30988b5 100644 --- a/src/traces/parcats/attributes.js +++ b/src/traces/parcats/attributes.js @@ -133,7 +133,14 @@ module.exports = { ].join(' ') }, editType: 'calc', - description: 'The dimensions (variables) of the parallel categories diagram.' + description: 'The dimensions (variables) of the parallel categories diagram.', + visible: { + valType: 'boolean', + dflt: true, + role: 'info', + editType: 'calc', + description: 'Shows the dimension when set to `true` (the default). Hides the dimension for `false`.' + }, }, line: line, diff --git a/src/traces/parcats/defaults.js b/src/traces/parcats/defaults.js index 4d16640fbea..c1e92c98298 100644 --- a/src/traces/parcats/defaults.js +++ b/src/traces/parcats/defaults.js @@ -9,85 +9,55 @@ 'use strict'; var Lib = require('../../lib'); -var attributes = require('./attributes'); -var parcatConstants = require('./constants'); -var colorbarDefaults = require('../../components/colorbar/defaults'); +var hasColorscale = require('../../components/colorscale/has_colorscale'); +var colorscaleDefaults = require('../../components/colorscale/defaults'); var handleDomainDefaults = require('../../plots/domain').defaults; +var handleArrayContainerDefaults = require('../../plots/array_container_defaults'); -function markerDefaults(traceIn, traceOut, defaultColor, layout, coerce) { +var attributes = require('./attributes'); +var mergeLength = require('../parcoords/merge_length'); - coerce('line.color', defaultColor); +function handleLineDefaults(traceIn, traceOut, defaultColor, layout, coerce) { if(traceIn.line) { - coerce('line.cmin'); - coerce('line.cmax'); - coerce('line.cauto'); - coerce('line.colorscale'); - coerce('line.showscale'); coerce('line.shape'); - colorbarDefaults(traceIn.line, traceOut.line, layout); } -} - -function dimensionsDefaults(traceIn, traceOut) { - var dimensionsIn = traceIn.dimensions || [], - dimensionsOut = traceOut.dimensions = []; - var dimensionIn, dimensionOut, i; - var commonLength = Infinity; + var lineColor = coerce('line.color', defaultColor); + if(hasColorscale(traceIn, 'line') && Lib.isArrayOrTypedArray(lineColor)) { + if(lineColor.length) { + coerce('line.colorscale'); + colorscaleDefaults(traceIn, traceOut, layout, coerce, {prefix: 'line.', cLetter: 'c'}); + return lineColor.length; + } + else { + traceOut.line.color = defaultColor; + } + } + return Infinity; +} +function dimensionDefaults(dimensionIn, dimensionOut) { function coerce(attr, dflt) { return Lib.coerce(dimensionIn, dimensionOut, attributes.dimensions, attr, dflt); } - for(i = 0; i < dimensionsIn.length; i++) { - dimensionIn = dimensionsIn[i]; - dimensionOut = {}; - - if(!Lib.isPlainObject(dimensionIn)) { - continue; - } + var values = coerce('values'); + var visible = coerce('visible'); + if(!(values && values.length)) { + visible = dimensionOut.visible = false; + } + if(visible) { // Dimension level - coerce('values'); coerce('label'); - coerce('displayindex', i); + coerce('displayindex', dimensionOut._index); // Category level coerce('catDisplayInds'); coerce('catValues'); coerce('catLabels'); - - // Pass through catValues, catorder, and catlabels (validated in calc since this is where unique info is available) - - // pass through line (color) - // Pass through font - - commonLength = Math.min(commonLength, dimensionOut.values.length); - - // dimensionOut._index = i; - dimensionsOut.push(dimensionOut); - } - - if(isFinite(commonLength)) { - for(i = 0; i < dimensionsOut.length; i++) { - dimensionOut = dimensionsOut[i]; - if(dimensionOut.values.length > commonLength) { - dimensionOut.values = dimensionOut.values.slice(0, commonLength); - } - } } - - // handle dimension order - // If specified for all dimensions and no collisions or holes keep, otherwise discard - - // Pass through value colors - // Pass through opacity - - // Pass through dimension font - // Pass through category font - - return dimensionsOut; } module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout) { @@ -96,11 +66,20 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout return Lib.coerce(traceIn, traceOut, attributes, attr, dflt); } - dimensionsDefaults(traceIn, traceOut); + var dimensions = handleArrayContainerDefaults(traceIn, traceOut, { + name: 'dimensions', + handleItemDefaults: dimensionDefaults + }); + + var len = handleLineDefaults(traceIn, traceOut, defaultColor, layout, coerce); handleDomainDefaults(traceOut, layout, coerce); - markerDefaults(traceIn, traceOut, defaultColor, layout, coerce); + if(!Array.isArray(dimensions) || !dimensions.length) { + traceOut.visible = false; + } + + mergeLength(traceOut, dimensions, 'values', len); coerce('hovermode'); coerce('tooltip'); From c8e3cc9456a628e8b58f40571943e1417609602a Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Fri, 10 Aug 2018 15:32:51 -0400 Subject: [PATCH 12/50] Added support for dimensions with visible=false --- src/traces/parcats/calc.js | 44 +++++++++++-------- src/traces/parcats/parcats.js | 5 ++- .../mocks/parcats_invisible_dimension.json | 18 ++++++++ 3 files changed, 47 insertions(+), 20 deletions(-) create mode 100644 test/image/mocks/parcats_invisible_dimension.json diff --git a/src/traces/parcats/calc.js b/src/traces/parcats/calc.js index 9b1d937e346..007232e9d5c 100644 --- a/src/traces/parcats/calc.js +++ b/src/traces/parcats/calc.js @@ -18,6 +18,9 @@ var parcatConstants = require('./constants'); var Drawing = require('../../components/drawing'); var Lib = require('../../lib'); + +function visible(dimension) { return !('visible' in dimension) || dimension.visible; } + // Exports // ======= /** @@ -32,22 +35,18 @@ module.exports = function calc(gd, trace) { // Process inputs // -------------- - if(trace.dimensions.length === 0) { - // No dimensions specified. Nothing to compute + if(trace.dimensions.filter(visible).length === 0) { + // No visible dimensions specified. Nothing to compute return []; } // Compute unique information // -------------------------- // UniqueInfo per dimension - var uniqueInfoDims = trace.dimensions.map(function(dim) { + var uniqueInfoDims = trace.dimensions.filter(visible).map(function(dim) { return getUniqueInfo(dim.values, dim.catValues); }); - // Number of values and counts - // --------------------------- - var numValues = trace.dimensions[0].values.length; - // Process counts // -------------- var counts, @@ -65,7 +64,7 @@ module.exports = function calc(gd, trace) { // Validate category display order // ------------------------------- - trace.dimensions.forEach(function(dim, dimInd) { + trace.dimensions.filter(visible).forEach(function(dim, dimInd) { validateCategoryProperties(dim, uniqueInfoDims[dimInd]); }); @@ -122,6 +121,10 @@ module.exports = function calc(gd, trace) { // Category order logic // 1) + // Number of values and counts + // --------------------------- + var numValues = trace.dimensions.filter(visible)[0].values.length; + // Build path info // --------------- // Mapping from category inds to PathModel objects @@ -168,8 +171,8 @@ module.exports = function calc(gd, trace) { // --------------------- // Array of DimensionModel objects - var dimensionModels = trace.dimensions.map(function(di, i) { - return createDimensionModel(i, di.displayindex, di.label, totalCount); + var dimensionModels = trace.dimensions.filter(visible).map(function(di, i) { + return createDimensionModel(i, di._index, di.displayindex, di.label, totalCount); }); @@ -178,13 +181,13 @@ module.exports = function calc(gd, trace) { count = counts[valueInd % counts.length]; for(d = 0; d < dimensionModels.length; d++) { + var containerInd = dimensionModels[d].containerInd; var catInd = uniqueInfoDims[d].inds[valueInd]; var cats = dimensionModels[d].categories; - if(cats[catInd] === undefined) { - var catLabel = trace.dimensions[d].catLabels[catInd]; - var displayInd = trace.dimensions[d].catDisplayInds[catInd]; + var catLabel = trace.dimensions[containerInd].catLabels[catInd]; + var displayInd = trace.dimensions[containerInd].catDisplayInds[catInd]; cats[catInd] = createCategoryModel(d, catInd, displayInd, catLabel); } @@ -226,6 +229,7 @@ module.exports = function calc(gd, trace) { */ function createParcatsModel(dimensions, paths, count) { var maxCats = dimensions + .filter(visible) .map(function(d) {return d.categories.length;}) .reduce(function(v1, v2) {return Math.max(v1, v2);}); return {dimensions: dimensions, paths: paths, trace: undefined, maxCats: maxCats, count: count}; @@ -238,7 +242,10 @@ function createParcatsModel(dimensions, paths, count) { * Object containing calculated information about a single dimension * * @property {Number} dimensionInd - * The index of this dimension + * The index of this dimension among the *visible* dimensions + * @property {Number} containerInd + * The index of this dimension in the original dimensions container, + * irrespective of dimension visibility * @property {Number} displayInd * The display index of this dimension (where 0 is the left most dimension) * @property {String} dimensionLabel @@ -253,16 +260,17 @@ function createParcatsModel(dimensions, paths, count) { /** * Create and new DimensionModel object with an empty categories array * @param {Number} dimensionInd + * @param {Number} containerInd * @param {Number} displayInd - * The display index of this dimension (where 0 is the left most dimension) * @param {String} dimensionLabel * @param {Number} count * Total number of input values * @return {DimensionModel} */ -function createDimensionModel(dimensionInd, displayInd, dimensionLabel, count) { +function createDimensionModel(dimensionInd, containerInd, displayInd, dimensionLabel, count) { return { dimensionInd: dimensionInd, + containerInd: containerInd, displayInd: displayInd, dimensionLabel: dimensionLabel, count: count, @@ -464,9 +472,9 @@ function getUniqueInfo(values, uniqueValues) { * @param {Object} trace */ function validateDimensionDisplayInds(trace) { - var displayInds = trace.dimensions.map(function(dim) {return dim.displayindex;}); + var displayInds = trace.dimensions.filter(visible).map(function(dim) {return dim.displayindex;}); if(!isRangePermutation(displayInds)) { - trace.dimensions.forEach(function(dim, i) { + trace.dimensions.filter(visible).forEach(function(dim, i) { dim.displayindex = i; }); } diff --git a/src/traces/parcats/parcats.js b/src/traces/parcats/parcats.js index 3e262e36ab6..c26ab33aca8 100644 --- a/src/traces/parcats/parcats.js +++ b/src/traces/parcats/parcats.js @@ -1058,7 +1058,8 @@ function dragDimensionEnd(d) { if(anyDimsReordered) { finalDragDimensionDisplayInds.forEach(function(finalDimDisplay, dimInd) { - restyleData['dimensions[' + dimInd + '].displayindex'] = finalDimDisplay; + var containerInd = d.parcatsViewModel.model.dimensions[dimInd].containerInd; + restyleData['dimensions[' + containerInd + '].displayindex'] = finalDimDisplay; }); } @@ -1074,7 +1075,7 @@ function dragDimensionEnd(d) { }); if(anyCatsReordered) { - restyleData['dimensions[' + d.model.dimensionInd + '].catDisplayInds'] = [finalDragCategoryDisplayInds]; + restyleData['dimensions[' + d.model.containerInd + '].catDisplayInds'] = [finalDragCategoryDisplayInds]; } } diff --git a/test/image/mocks/parcats_invisible_dimension.json b/test/image/mocks/parcats_invisible_dimension.json new file mode 100644 index 00000000000..159c1ff237e --- /dev/null +++ b/test/image/mocks/parcats_invisible_dimension.json @@ -0,0 +1,18 @@ +{ + "data": [ + {"type": "parcats", + "domain": {"x": [0.125, 0.625],"y": [0.25, 0.75]}, + "dimensions":[ + {"label": "One", "values": [1, 1, 2, 1, 2, 1, 1, 2, 1]}, + {"label": "Two", + "values": ["A", "B", "A", "B", "C", "C", "A", "B", "C"], + "visible": false}, + {"label": "Three", "values": [11, 11, 11, 11, 11, 11, 11, 11, 11]}]} + ], + "layout": { + "height": 602, + "width": 592, + "margin": { + "l": 40, "r": 40, "t": 50, "b": 40 + }} +} From 6a5c20e8a62eddbd59ba906c19ea4853cf63107c Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Fri, 10 Aug 2018 15:33:23 -0400 Subject: [PATCH 13/50] Fixed failing test (needed to rename displayInd -> displayindex) --- test/jasmine/tests/parcats_test.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/test/jasmine/tests/parcats_test.js b/test/jasmine/tests/parcats_test.js index 08b166902e7..183e3300846 100644 --- a/test/jasmine/tests/parcats_test.js +++ b/test/jasmine/tests/parcats_test.js @@ -400,7 +400,7 @@ describe('Dimension reordered parcats trace', function() { it('should recover from bad display order specification', function(done) { // Define bad display indexes [0, 2, 0] - mock.data[0].dimensions[2].displayInd = 0; + mock.data[0].dimensions[2].displayindex = 0; // catDisplayInds for dimension 1 as [0, 2, 0] mock.data[0].dimensions[1].catDisplayInds[0] = 0; @@ -599,9 +599,9 @@ describe('Drag to reordered dimensions and categories', function() { // ------------------------------------------- expect(restyleCallback).toHaveBeenCalledTimes(1); expect(restyleCallback).toHaveBeenCalledWith([ - {'dimensions[0].displayInd': 0, - 'dimensions[1].displayInd': 2, - 'dimensions[2].displayInd': 1}, + {'dimensions[0].displayindex': 0, + 'dimensions[1].displayindex': 2, + 'dimensions[2].displayindex': 1}, [0]]); restyleCallback.calls.reset(); @@ -734,9 +734,9 @@ describe('Drag to reordered dimensions and categories', function() { // ------------------------------------------- expect(restyleCallback).toHaveBeenCalledTimes(1); expect(restyleCallback).toHaveBeenCalledWith([ - {'dimensions[0].displayInd': 0, - 'dimensions[1].displayInd': 2, - 'dimensions[2].displayInd': 1, + {'dimensions[0].displayindex': 0, + 'dimensions[1].displayindex': 2, + 'dimensions[2].displayindex': 1, 'dimensions[1].catDisplayInds': [[ 1, 2, 0 ]]}, [0]]); From 22346d02462d1733fe78827de702ef8cb6d4f24e Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Fri, 10 Aug 2018 15:51:14 -0400 Subject: [PATCH 14/50] Added mock with color hovermode --- test/image/mocks/parcats_hovermode_color.json | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 test/image/mocks/parcats_hovermode_color.json diff --git a/test/image/mocks/parcats_hovermode_color.json b/test/image/mocks/parcats_hovermode_color.json new file mode 100644 index 00000000000..a52bf406e27 --- /dev/null +++ b/test/image/mocks/parcats_hovermode_color.json @@ -0,0 +1,23 @@ +{ + "data": [ + {"type": "parcats", + "domain": {"x": [0.125, 0.625],"y": [0.25, 0.75]}, + "hovermode": "color", + "dimensions":[ + {"label": "One", "values": [1, 1, 2, 1, 2, 1, 1, 2, 1]}, + {"label": "Two", "values": ["A", "B", "A", "B", "C", "C", "A", "B", "C"]}, + {"label": "Three", "values": [11, 11, 11, 11, 11, 11, 11, 11, 11]}], + "bundlecolors": false, + "line": { + "color": [0, 0, 1, 1, 0, 1, 0, 0, 0], + "shape": "hspline" + } + } + ], + "layout": { + "height": 602, + "width": 592, + "margin": { + "l": 40, "r": 40, "t": 50, "b": 40 + }} +} From 3680084f9d1a4690511773dc435c4c1f8402fc9c Mon Sep 17 00:00:00 2001 From: "Jon M. Mease" Date: Wed, 15 Aug 2018 13:28:52 -0400 Subject: [PATCH 15/50] Replace tooltip with hoverinfo More consistent with other traces, and now it's possible to display only probabilities, only counts, both, none (with hover effects), or skip (not hover effects). --- src/traces/parcats/attributes.js | 16 +- src/traces/parcats/defaults.js | 1 - src/traces/parcats/parcats.js | 216 ++++++++++-------- test/image/mocks/parcats_hovermode_color.json | 1 + 4 files changed, 130 insertions(+), 104 deletions(-) diff --git a/src/traces/parcats/attributes.js b/src/traces/parcats/attributes.js index 359f30988b5..fa5b654ae01 100644 --- a/src/traces/parcats/attributes.js +++ b/src/traces/parcats/attributes.js @@ -9,6 +9,7 @@ 'use strict'; var extendFlat = require('../../lib/extend').extendFlat; +var plotAttrs = require('../../plots/attributes'); var colorAttributes = require('../../components/colorscale/attributes'); var domainAttrs = require('../../plots/domain').attributes; var scatterAttrs = require('../scatter/attributes'); @@ -32,18 +33,13 @@ var line = extendFlat({ module.exports = { domain: domainAttrs({name: 'parcats', trace: true, editType: 'calc'}), - - tooltip: { - valType: 'boolean', - dflt: true, - role: 'info', - editType: 'plot', - description: 'Shows a tooltip when hover mode is `category` or `color`.' - }, - + hoverinfo: extendFlat({}, plotAttrs.hoverinfo, { + flags: ['count', 'probability'], + editType: 'plot' + }), hovermode: { valType: 'enumerated', - values: ['none', 'category', 'color'], + values: ['category', 'color'], dflt: 'category', role: 'info', editType: 'plot', diff --git a/src/traces/parcats/defaults.js b/src/traces/parcats/defaults.js index c1e92c98298..6e83786356d 100644 --- a/src/traces/parcats/defaults.js +++ b/src/traces/parcats/defaults.js @@ -82,7 +82,6 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout mergeLength(traceOut, dimensions, 'values', len); coerce('hovermode'); - coerce('tooltip'); coerce('bundlecolors'); coerce('sortpaths'); coerce('counts'); diff --git a/src/traces/parcats/parcats.js b/src/traces/parcats/parcats.js index c26ab33aca8..635a602fbe5 100644 --- a/src/traces/parcats/parcats.js +++ b/src/traces/parcats/parcats.js @@ -363,7 +363,8 @@ function mouseoverPath(d) { if(!d.parcatsViewModel.dragDimension) { // We're not currently dragging - if(d.parcatsViewModel.hovermode !== 'none') { + if(d.parcatsViewModel.hoverinfoItems.indexOf('skip') === -1) { + // hoverinfo is not skip, so we at least style the paths and emit interaction events // Raise path to top Lib.raiseToTop(this); @@ -374,13 +375,14 @@ function mouseoverPath(d) { var points = buildPointsArrayForPath(d); d.parcatsViewModel.graphDiv.emit('plotly_hover', {points: points, event: d3.event}); - // Handle tooltip - if(d.parcatsViewModel.tooltip) { + // Handle hover label + if(d.parcatsViewModel.hoverinfoItems.indexOf('none') === -1) { + // hoverinfo is a combination of 'count' and 'probability' // Mouse var hoverX = d3.mouse(this)[0]; - // Tooltip + // Label var gd = d.parcatsViewModel.graphDiv; var fullLayout = gd._fullLayout; var rootBBox = fullLayout._paperdiv.node().getBoundingClientRect(); @@ -407,14 +409,21 @@ function mouseoverPath(d) { var textColor = tinycolor.mostReadable(d.model.color, ['black', 'white']); + // Build hover text + var hovertextParts = []; + if (d.parcatsViewModel.hoverinfoItems.indexOf('count') !== -1) { + hovertextParts.push(['Count:', d.model.count].join(' ')); + } + if (d.parcatsViewModel.hoverinfoItems.indexOf('probability') !== -1) { + hovertextParts.push(['P:', (d.model.count / d.parcatsViewModel.model.count).toFixed(3)].join(' ')); + } + + var hovertext = hovertextParts.join('
'); + Fx.loneHover({ x: hoverCenterX - rootBBox.left + graphDivBBox.left, y: hoverCenterY - rootBBox.top + graphDivBBox.top, - text: [ - ['Count:', d.model.count].join(' '), - ['P:', (d.model.count / d.parcatsViewModel.model.count).toFixed(3)].join(' ') - ].join('
'), - + text: hovertext, color: d.model.color, borderColor: 'black', fontFamily: 'Monaco, "Courier New", monospace', @@ -440,7 +449,7 @@ function mouseoutPath(d) { // We're not currently dragging stylePathsNoHover(d3.select(this)); - // Remove tooltip + // Remove and hover label Fx.loneUnhover(d.parcatsViewModel.graphDiv._fullLayout._hoverlayer.node()); // Restore path order @@ -651,7 +660,7 @@ function emitPointsEventColorHovermode(bandElement, eventName, event) { } /** - * Create tooltip for a band element's category (for use when hovermode === 'category') + * Create hover label for a band element's category (for use when hovermode === 'category') * * @param {ClientRect} rootBBox * Client bounding box for root of figure @@ -659,8 +668,8 @@ function emitPointsEventColorHovermode(bandElement, eventName, event) { * HTML element for band * */ -function createTooltipForCategoryHovermode(rootBBox, bandElement) { - // Build tooltips +function createHoverLabelForCategoryHovermode(rootBBox, bandElement) { + // Selections var rectSelection = d3.select(bandElement.parentNode).select('rect.catrect'); var rectBoundingBox = rectSelection.node().getBoundingClientRect(); @@ -673,44 +682,47 @@ function createTooltipForCategoryHovermode(rootBBox, bandElement) { // Positions var hoverCenterY = rectBoundingBox.top + rectBoundingBox.height / 2; var hoverCenterX, - tooltipIdealAlign; + hoverLabelIdealAlign; if(parcatsViewModel.dimensions.length > 1 && dimensionModel.displayInd === parcatsViewModel.dimensions.length - 1) { // right most dimension hoverCenterX = rectBoundingBox.left; - tooltipIdealAlign = 'left'; + hoverLabelIdealAlign = 'left'; } else { hoverCenterX = rectBoundingBox.left + rectBoundingBox.width; - tooltipIdealAlign = 'right'; + hoverLabelIdealAlign = 'right'; } - var countStr = ['Count:', catViewModel.model.count].join(' '); - var pStr = ['P(' + catViewModel.model.categoryLabel + '):', - (catViewModel.model.count / catViewModel.parcatsViewModel.model.count).toFixed(3)].join(' '); + // Hover label text + var hoverinfoParts = []; + if (catViewModel.parcatsViewModel.hoverinfoItems.indexOf('count') !== -1) { + hoverinfoParts.push(['Count:', catViewModel.model.count].join(' ')) + } + if (catViewModel.parcatsViewModel.hoverinfoItems.indexOf('probability') !== -1) { + hoverinfoParts.push([ + 'P(' + catViewModel.model.categoryLabel + '):', + (catViewModel.model.count / catViewModel.parcatsViewModel.model.count).toFixed(3)].join(' ')) + } + var hovertext = hoverinfoParts.join('
'); return { x: hoverCenterX - rootBBox.left, y: hoverCenterY - rootBBox.top, - // name: 'NAME', - text: [ - countStr, - pStr - ].join('
'), - + text: hovertext, color: 'lightgray', borderColor: 'black', fontFamily: 'Monaco, "Courier New", monospace', fontSize: 12, fontColor: 'black', - idealAlign: tooltipIdealAlign + idealAlign: hoverLabelIdealAlign }; } /** - * Create tooltip for a band element's category (for use when hovermode === 'category') + * Create hover label for a band element's category (for use when hovermode === 'category') * * @param {ClientRect} rootBBox * Client bounding box for root of figure @@ -718,7 +730,7 @@ function createTooltipForCategoryHovermode(rootBBox, bandElement) { * HTML element for band * */ -function createTooltipForColorHovermode(rootBBox, bandElement) { +function createHoverLabelForColorHovermode(rootBBox, bandElement) { var bandBoundingBox = bandElement.getBoundingClientRect(); @@ -733,15 +745,15 @@ function createTooltipForColorHovermode(rootBBox, bandElement) { var hoverCenterY = bandBoundingBox.y + bandBoundingBox.height / 2; var hoverCenterX, - tooltipIdealAlign; + hoverLabelIdealAlign; if(parcatsViewModel.dimensions.length > 1 && dimensionModel.displayInd === parcatsViewModel.dimensions.length - 1) { // right most dimension hoverCenterX = bandBoundingBox.left; - tooltipIdealAlign = 'left'; + hoverLabelIdealAlign = 'left'; } else { hoverCenterX = bandBoundingBox.left + bandBoundingBox.width; - tooltipIdealAlign = 'right'; + hoverLabelIdealAlign = 'right'; } // Labels @@ -768,19 +780,29 @@ function createTooltipForColorHovermode(rootBBox, bandElement) { } }); - // Create talbe to align probability terms - var countStr = ['Count:', bandColorCount].join(' '); - var pColorAndCatLable = 'P(color ∩ ' + catLabel + '): '; - var pColorAndCatValue = (bandColorCount / totalCount).toFixed(3); - var pColorAndCatRow = pColorAndCatLable + pColorAndCatValue; - - var pCatGivenColorLabel = 'P(' + catLabel + ' | color): '; - var pCatGivenColorValue = (bandColorCount / colorCount).toFixed(3); - var pCatGivenColorRow = pCatGivenColorLabel + pCatGivenColorValue; + // Hover label text + var hoverinfoParts = []; + if (catViewModel.parcatsViewModel.hoverinfoItems.indexOf('count') !== -1) { + hoverinfoParts.push(['Count:', bandColorCount].join(' ')) + } + if (catViewModel.parcatsViewModel.hoverinfoItems.indexOf('probability') !== -1) { + var pColorAndCatLable = 'P(color ∩ ' + catLabel + '): '; + var pColorAndCatValue = (bandColorCount / totalCount).toFixed(3); + var pColorAndCatRow = pColorAndCatLable + pColorAndCatValue; + hoverinfoParts.push(pColorAndCatRow); + + var pCatGivenColorLabel = 'P(' + catLabel + ' | color): '; + var pCatGivenColorValue = (bandColorCount / colorCount).toFixed(3); + var pCatGivenColorRow = pCatGivenColorLabel + pCatGivenColorValue; + hoverinfoParts.push(pCatGivenColorRow); + + var pColorGivenCatLabel = 'P(color | ' + catLabel + '): '; + var pColorGivenCatValue = (bandColorCount / catCount).toFixed(3); + var pColorGivenCatRow = pColorGivenCatLabel + pColorGivenCatValue; + hoverinfoParts.push(pColorGivenCatRow); + } - var pColorGivenCatLabel = 'P(color | ' + catLabel + '): '; - var pColorGivenCatValue = (bandColorCount / catCount).toFixed(3); - var pColorGivenCatRow = pColorGivenCatLabel + pColorGivenCatValue; + var hovertext = hoverinfoParts.join('
'); // Compute text color var textColor = tinycolor.mostReadable(bandViewModel.color, ['black', 'white']); @@ -789,17 +811,13 @@ function createTooltipForColorHovermode(rootBBox, bandElement) { x: hoverCenterX - rootBBox.left, y: hoverCenterY - rootBBox.top, // name: 'NAME', - text: [ - countStr, - pColorAndCatRow, pCatGivenColorRow, pColorGivenCatRow - ].join('
'), - + text: hovertext, color: bandViewModel.color, borderColor: 'black', fontFamily: 'Monaco, "Courier New", monospace', fontColor: textColor, fontSize: 10, - idealAlign: tooltipIdealAlign + idealAlign: hoverLabelIdealAlign }; } @@ -811,47 +829,50 @@ function mouseoverCategoryBand(bandViewModel) { if(!bandViewModel.parcatsViewModel.dragDimension) { // We're not currently dragging - // Mouse - var mouseY = d3.mouse(this)[1]; - if(mouseY < -1) { - // Hover is above above the category rectangle (probably the dimension title text) - return; - } + if(bandViewModel.parcatsViewModel.hoverinfoItems.indexOf('skip') === -1) { + // hoverinfo is not skip, so we at least style the bands and emit interaction events - var gd = bandViewModel.parcatsViewModel.graphDiv; - var fullLayout = gd._fullLayout; - var rootBBox = fullLayout._paperdiv.node().getBoundingClientRect(); - var hovermode = bandViewModel.parcatsViewModel.hovermode; - var showTooltip = bandViewModel.parcatsViewModel.tooltip; - - /** @type {HTMLElement} */ - var bandElement = this; - - // Handle style and events - if(hovermode === 'category') { - styleForCategoryHovermode(bandElement); - emitPointsEventCategoryHovermode(bandElement, 'plotly_hover', d3.event); - } else if(hovermode === 'color') { - styleForColorHovermode(bandElement); - emitPointsEventColorHovermode(bandElement, 'plotly_hover', d3.event); - } + // Mouse + var mouseY = d3.mouse(this)[1]; + if (mouseY < -1) { + // Hover is above above the category rectangle (probably the dimension title text) + return; + } - // Handle tooltip - var hoverTooltip; - if(showTooltip) { - if(hovermode === 'category') { - hoverTooltip = createTooltipForCategoryHovermode(rootBBox, bandElement); - } else if(hovermode === 'color') { - hoverTooltip = createTooltipForColorHovermode(rootBBox, bandElement); + var gd = bandViewModel.parcatsViewModel.graphDiv; + var fullLayout = gd._fullLayout; + var rootBBox = fullLayout._paperdiv.node().getBoundingClientRect(); + var hovermode = bandViewModel.parcatsViewModel.hovermode; + + /** @type {HTMLElement} */ + var bandElement = this; + + // Handle style and events + if (hovermode === 'category') { + styleForCategoryHovermode(bandElement); + emitPointsEventCategoryHovermode(bandElement, 'plotly_hover', d3.event); + } else if (hovermode === 'color') { + styleForColorHovermode(bandElement); + emitPointsEventColorHovermode(bandElement, 'plotly_hover', d3.event); } - } - if(hoverTooltip) { - Fx.loneHover(hoverTooltip, { - container: fullLayout._hoverlayer.node(), - outerContainer: fullLayout._paper.node(), - gd: gd - }); + // Handle hover label + if(bandViewModel.parcatsViewModel.hoverinfoItems.indexOf('none') === -1) { + var hoverItem; + if (hovermode === 'category') { + hoverItem = createHoverLabelForCategoryHovermode(rootBBox, bandElement); + } else if (hovermode === 'color') { + hoverItem = createHoverLabelForColorHovermode(rootBBox, bandElement); + } + + if (hoverItem) { + Fx.loneHover(hoverItem, { + container: fullLayout._hoverlayer.node(), + outerContainer: fullLayout._paper.node(), + gd: gd + }); + } + } } } } @@ -870,7 +891,7 @@ function mouseoutCategory(parcatsViewModel) { styleCategoriesNoHover(parcatsViewModel.dimensionSelection.selectAll('g.category')); styleBandsNoHover(parcatsViewModel.dimensionSelection.selectAll('g.category').selectAll('rect.bandrect')); - // Remove tooltip + // Remove hover label Fx.loneUnhover(parcatsViewModel.graphDiv._fullLayout._hoverlayer.node()); // Restore path order @@ -932,7 +953,7 @@ function dragDimensionStart(d) { // Update toplevel drag dimension d.parcatsViewModel.dragDimension = d; - // Remove any tooltip if any + // Remove hover label if any Fx.loneUnhover(d.parcatsViewModel.graphDiv._fullLayout._hoverlayer.node()); } @@ -1325,8 +1346,17 @@ function createParcatsViewModel(graphDiv, layout, wrappedParcatsModel) { pathShape = 'linear'; } - // Initialize parcatsViewModel - // paths and dimensions are missing at this point + // Handle hover info + // ----------------- + var hoverinfoItems; + if (trace.hoverinfo === 'all') { + hoverinfoItems = ['count', 'probability']; + } else { + hoverinfoItems = trace.hoverinfo.split('+'); + } + + // Construct parcatsViewModel + // -------------------------- var parcatsViewModel = { key: trace.uid, model: parcatsModel, @@ -1335,7 +1365,7 @@ function createParcatsViewModel(graphDiv, layout, wrappedParcatsModel) { width: traceWidth, height: traceHeight, hovermode: trace.hovermode, - tooltip: trace.tooltip, + hoverinfoItems: hoverinfoItems, bundlecolors: trace.bundlecolors, sortpaths: trace.sortpaths, pathShape: pathShape, @@ -1784,8 +1814,8 @@ function createDimensionViewModel(parcatsViewModel, dimensionModel) { * Y position of this trace with respect to the Figure (pixels) * @property {String} hovermode * Hover mode. One of: 'none', 'category', or 'color' - * @property {Boolean} tooltip - * Whether to display a tooltip for the 'category' or 'color' hovermodes (has no effect if 'hovermode' is 'none') + * @property {Array.} hoverinfoItems + * Info to display on hover. Array with a combination of 'counts' and/or 'probabilities', or 'none', or 'skip' * @property {Boolean} bundlecolors * Whether paths should be sorted so that like colors are bundled together as they pass through categories * @property {String} sortpaths diff --git a/test/image/mocks/parcats_hovermode_color.json b/test/image/mocks/parcats_hovermode_color.json index a52bf406e27..c4726048523 100644 --- a/test/image/mocks/parcats_hovermode_color.json +++ b/test/image/mocks/parcats_hovermode_color.json @@ -3,6 +3,7 @@ {"type": "parcats", "domain": {"x": [0.125, 0.625],"y": [0.25, 0.75]}, "hovermode": "color", + "hoverinfo": "probability", "dimensions":[ {"label": "One", "values": [1, 1, 2, 1, 2, 1, 1, 2, 1]}, {"label": "Two", "values": ["A", "B", "A", "B", "C", "C", "A", "B", "C"]}, From 2d07f4d73f203be5055b9af345a0bfb0fe83bf1d Mon Sep 17 00:00:00 2001 From: "Jon M. Mease" Date: Wed, 15 Aug 2018 15:44:37 -0400 Subject: [PATCH 16/50] Added `arrangement` property that is very similar to the sankey trace There are three arrangement modes: - `perpendicular` (default): categories only drag vertically, dimension labels drag horizontally. - `freeform`: category labels can drag vertically and horizontally (in which case they pull the dimension along with them). Here dragging a category can reorder the categories and dimensions. - `fixed`: dragging of dimensions and categories is disabled. --- src/traces/parcats/attributes.js | 12 +++ src/traces/parcats/defaults.js | 1 + src/traces/parcats/parcats.js | 79 +++++++++++++++----- test/image/mocks/parcats_basic_freeform.json | 17 +++++ test/jasmine/tests/parcats_test.js | 2 +- 5 files changed, 90 insertions(+), 21 deletions(-) create mode 100644 test/image/mocks/parcats_basic_freeform.json diff --git a/src/traces/parcats/attributes.js b/src/traces/parcats/attributes.js index fa5b654ae01..5c1d8f07793 100644 --- a/src/traces/parcats/attributes.js +++ b/src/traces/parcats/attributes.js @@ -45,6 +45,18 @@ module.exports = { editType: 'plot', description: 'Sets the hover mode of the parcats diagram' }, + arrangement: { + valType: 'enumerated', + values: ['perpendicular', 'freeform', 'fixed'], + dflt: 'perpendicular', + role: 'style', + editType: 'plot', + description: [ + 'If value is `perpendicular`, the categories can only move along a line perpendicular to the paths.', + 'If value is `freeform`, the categories can freely move on the plane.', + 'If value is `fixed`, the categories and dimensions are stationary.' + ].join(' ') + }, bundlecolors: { valType: 'boolean', dflt: true, diff --git a/src/traces/parcats/defaults.js b/src/traces/parcats/defaults.js index 6e83786356d..1d32b517b3c 100644 --- a/src/traces/parcats/defaults.js +++ b/src/traces/parcats/defaults.js @@ -82,6 +82,7 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout mergeLength(traceOut, dimensions, 'values', len); coerce('hovermode'); + coerce('arrangement'); coerce('bundlecolors'); coerce('sortpaths'); coerce('counts'); diff --git a/src/traces/parcats/parcats.js b/src/traces/parcats/parcats.js index 635a602fbe5..fe7b0380391 100644 --- a/src/traces/parcats/parcats.js +++ b/src/traces/parcats/parcats.js @@ -187,7 +187,6 @@ function performPlot(parcatsModels, graphDiv, layout, svg) { var bandsSelectionEnter = bandSelection.enter() .append('rect') .attr('class', 'bandrect') - .attr('cursor', 'move') .attr('stroke-opacity', 0) .attr('fill', function(d) { return d.color; @@ -206,6 +205,17 @@ function performPlot(parcatsModels, graphDiv, layout, svg) { }) .attr('y', function(d) { return d.y; + }) + .attr('cursor', + /** @param {CategoryBandViewModel} bandModel*/ + function(bandModel) { + if (bandModel.parcatsViewModel.arrangement === 'fixed') { + return 'default' + } else if (bandModel.parcatsViewModel.arrangement === 'perpendicular') { + return 'ns-resize' + } else { + return 'move' + } }); styleBandsNoHover(bandsSelectionEnter); @@ -265,7 +275,15 @@ function performPlot(parcatsModels, graphDiv, layout, svg) { categorySelection.select('text.dimlabel') .attr('text-anchor', 'middle') .attr('alignment-baseline', 'baseline') - .attr('cursor', 'ew-resize') + .attr('cursor', + /** @param {CategoryViewModel} catModel*/ + function(catModel) { + if (catModel.parcatsViewModel.arrangement === 'fixed') { + return 'default'; + } else { + return 'ew-resize' + } + }) .attr('font-size', 14) .attr('x', function(d) { return d.width / 2; @@ -906,6 +924,11 @@ function mouseoutCategory(parcatsViewModel) { */ function dragDimensionStart(d) { + // Check if dragging is supported + if (d.parcatsViewModel.arrangement === 'fixed') { + return + } + // Save off initial drag indexes for dimension d.dragDimensionDisplayInd = d.model.displayInd; d.initialDragDimensionDisplayInds = d.parcatsViewModel.model.dimensions.map(function(d) {return d.displayInd;}); @@ -962,6 +985,12 @@ function dragDimensionStart(d) { * @param {DimensionViewModel} d */ function dragDimension(d) { + + // Check if dragging is supported + if (d.parcatsViewModel.arrangement === 'fixed') { + return + } + d.dragHasMoved = true; if(d.dragDimensionDisplayInd === null) { @@ -1017,32 +1046,34 @@ function dragDimension(d) { } // Update dimension position - dragDimension.model.dragX = d3.event.x; + if (d.dragCategoryDisplayInd === null || d.parcatsViewModel.arrangement === 'freeform') { + dragDimension.model.dragX = d3.event.x; - // Check for dimension swaps - var prevDimension = d.parcatsViewModel.dimensions[prevDimInd]; - var nextDimension = d.parcatsViewModel.dimensions[nextDimInd]; + // Check for dimension swaps + var prevDimension = d.parcatsViewModel.dimensions[prevDimInd]; + var nextDimension = d.parcatsViewModel.dimensions[nextDimInd]; - if(prevDimension !== undefined) { - if(dragDimension.model.dragX < (prevDimension.x + prevDimension.width)) { + if (prevDimension !== undefined) { + if (dragDimension.model.dragX < (prevDimension.x + prevDimension.width)) { - // Swap display inds - dragDimension.model.displayInd = prevDimension.model.displayInd; - prevDimension.model.displayInd = dragDimInd; + // Swap display inds + dragDimension.model.displayInd = prevDimension.model.displayInd; + prevDimension.model.displayInd = dragDimInd; + } } - } - if(nextDimension !== undefined) { - if((dragDimension.model.dragX + dragDimension.width) > nextDimension.x) { + if (nextDimension !== undefined) { + if ((dragDimension.model.dragX + dragDimension.width) > nextDimension.x) { - // Swap display inds - dragDimension.model.displayInd = nextDimension.model.displayInd; - nextDimension.model.displayInd = d.dragDimensionDisplayInd; + // Swap display inds + dragDimension.model.displayInd = nextDimension.model.displayInd; + nextDimension.model.displayInd = d.dragDimensionDisplayInd; + } } - } - // Update drag display index - d.dragDimensionDisplayInd = dragDimension.model.displayInd; + // Update drag display index + d.dragDimensionDisplayInd = dragDimension.model.displayInd; + } // Update view models updateDimensionViewModels(d.parcatsViewModel); @@ -1060,6 +1091,11 @@ function dragDimension(d) { */ function dragDimensionEnd(d) { + // Check if dragging is supported + if (d.parcatsViewModel.arrangement === 'fixed') { + return + } + if(d.dragDimensionDisplayInd === null) { return; } @@ -1366,6 +1402,7 @@ function createParcatsViewModel(graphDiv, layout, wrappedParcatsModel) { height: traceHeight, hovermode: trace.hovermode, hoverinfoItems: hoverinfoItems, + arrangement: trace.arrangement, bundlecolors: trace.bundlecolors, sortpaths: trace.sortpaths, pathShape: pathShape, @@ -1816,6 +1853,8 @@ function createDimensionViewModel(parcatsViewModel, dimensionModel) { * Hover mode. One of: 'none', 'category', or 'color' * @property {Array.} hoverinfoItems * Info to display on hover. Array with a combination of 'counts' and/or 'probabilities', or 'none', or 'skip' + * @property {String} arrangement + * Category arrangement. One of: 'perpendicular', 'freeform', or 'fixed' * @property {Boolean} bundlecolors * Whether paths should be sorted so that like colors are bundled together as they pass through categories * @property {String} sortpaths diff --git a/test/image/mocks/parcats_basic_freeform.json b/test/image/mocks/parcats_basic_freeform.json new file mode 100644 index 00000000000..4f0b54472f8 --- /dev/null +++ b/test/image/mocks/parcats_basic_freeform.json @@ -0,0 +1,17 @@ +{ + "data": [ + {"type": "parcats", + "domain": {"x": [0.125, 0.625],"y": [0.25, 0.75]}, + "arrangement": "freeform", + "dimensions":[ + {"label": "One", "values": [1, 1, 2, 1, 2, 1, 1, 2, 1]}, + {"label": "Two", "values": ["A", "B", "A", "B", "C", "C", "A", "B", "C"]}, + {"label": "Three", "values": [11, 11, 11, 11, 11, 11, 11, 11, 11]}]} + ], + "layout": { + "height": 602, + "width": 592, + "margin": { + "l": 40, "r": 40, "t": 50, "b": 40 + }} +} diff --git a/test/jasmine/tests/parcats_test.js b/test/jasmine/tests/parcats_test.js index 183e3300846..41876f6b845 100644 --- a/test/jasmine/tests/parcats_test.js +++ b/test/jasmine/tests/parcats_test.js @@ -501,7 +501,7 @@ describe('Drag to reordered dimensions and categories', function() { // -------- beforeEach(function() { gd = createGraphDiv(); - mock = Lib.extendDeep({}, require('@mocks/parcats_basic.json')); + mock = Lib.extendDeep({}, require('@mocks/parcats_basic_freeform.json')); }); afterEach(destroyGraphDiv); From 7f90fc10b2dd206b320ee70634d23175707d381b Mon Sep 17 00:00:00 2001 From: "Jon M. Mease" Date: Thu, 16 Aug 2018 15:17:39 -0400 Subject: [PATCH 17/50] WIP towards categoryorder/categoryarray/categorylabels Not working yet, just a checkpoint --- src/traces/parcats/attributes.js | 32 ++++++++----- src/traces/parcats/calc.js | 76 ++++++++++++------------------- src/traces/parcats/defaults.js | 10 +++-- src/traces/parcats/parcats.js | 77 +++++++++++--------------------- 4 files changed, 83 insertions(+), 112 deletions(-) diff --git a/src/traces/parcats/attributes.js b/src/traces/parcats/attributes.js index 5c1d8f07793..c3aab107edd 100644 --- a/src/traces/parcats/attributes.js +++ b/src/traces/parcats/attributes.js @@ -93,31 +93,43 @@ module.exports = { editType: 'calc', description: 'The shown name of the dimension.' }, - catDisplayInds: { - valType: 'data_array', + categoryorder: { + valType: 'enumerated', + values: [ + 'trace', 'category ascending', 'category descending', 'array' + ], + dflt: 'trace', role: 'info', editType: 'calc', - dflt: [], description: [ - '' + 'Specifies the ordering logic for the categories in the dimension.', + 'By default, plotly uses *trace*, which specifies the order that is present in the data supplied.', + 'Set `categoryorder` to *category ascending* or *category descending* if order should be determined by', + 'the alphanumerical order of the category names.', + 'Set `categoryorder` to *array* to derive the ordering from the attribute `categoryarray`. If a category', + 'is not found in the `categoryarray` array, the sorting behavior for that attribute will be identical to', + 'the *trace* mode. The unspecified categories will follow the categories in `categoryarray`.' ].join(' ') }, - catValues: { + categoryarray: { valType: 'data_array', role: 'info', editType: 'calc', - dflt: [], description: [ - '' + 'Sets the order in which categories in this dimension appear.', + 'Only has an effect if `categoryorder` is set to *array*.', + 'Used with `categoryorder`.' ].join(' ') }, - catLabels: { + categorylabels: { valType: 'data_array', role: 'info', editType: 'calc', - dflt: [], description: [ - '' + 'Sets alternative labels for the categories in this dimension.', + 'Only has an effect if `categoryorder` is set to *array*.', + 'Should be an array the same length as `categoryarray`', + 'Used with `categoryorder`.' ].join(' ') }, values: { diff --git a/src/traces/parcats/calc.js b/src/traces/parcats/calc.js index 007232e9d5c..00137dd33d0 100644 --- a/src/traces/parcats/calc.js +++ b/src/traces/parcats/calc.js @@ -14,7 +14,7 @@ var wrap = require('../../lib/gup').wrap; var hasColorscale = require('../../components/colorscale/has_colorscale'); var colorscaleCalc = require('../../components/colorscale/calc'); var parcatConstants = require('./constants'); - +var filterUnique = require('../../lib/filter_unique.js'); var Drawing = require('../../components/drawing'); var Lib = require('../../lib'); @@ -44,7 +44,22 @@ module.exports = function calc(gd, trace) { // -------------------------- // UniqueInfo per dimension var uniqueInfoDims = trace.dimensions.filter(visible).map(function(dim) { - return getUniqueInfo(dim.values, dim.catValues); + var categoryValues; + if (dim.categoryorder === 'trace') { + // Use order of first occurrence in trace + categoryValues = null; + } else if (dim.categoryorder === 'array') { + // Use categories specified in `categoryarray` first, then add extra to the end in trace order + categoryValues = dim.categoryarray; + } else { + // Get all categories up front so we can order them + // Should we check for numbers as sort numerically? + categoryValues = filterUnique(dim.values).sort(); + if (dim.categoryorder === 'category descending') { + categoryValues = categoryValues.reverse(); + } + } + return getUniqueInfo(dim.values, categoryValues); }); // Process counts @@ -97,30 +112,6 @@ module.exports = function calc(gd, trace) { return {color: markerColorscale(value), rawColor: value}; } - // Build/Validate category labels/order - // ------------------------------------ - // properties: catValues, catorder, catlabels - // - // 1) if catValues and catorder are specified - // a) cat order must be the same length with no collisions or holes, otherwise it is discarded - // b) Additional categories in data that are not specified are appended to catValues, and next indexes are - // appended to catorder - // c) catValues updated in data/_fullData - // 2) if catorder but not catValues is specified - // a) catorder must be same length as inferred catValues with no collisions or holes - // otherwise it is discarded and set to 0 to catValues.length - // 3) if catValues but not catorder is specified - // a) Append unspecified values to catValues - // b) set carorder to 0 to catValues.length - // 4) if neither are specified - // a) Set catValues to unique catValues - // b) Set carorder to 0 to catValues.length - // - // uniqueInfoDims[0].uniqueValues - - // Category order logic - // 1) - // Number of values and counts // --------------------------- var numValues = trace.dimensions.filter(visible)[0].values.length; @@ -186,10 +177,8 @@ module.exports = function calc(gd, trace) { var cats = dimensionModels[d].categories; if(cats[catInd] === undefined) { - var catLabel = trace.dimensions[containerInd].catLabels[catInd]; - var displayInd = trace.dimensions[containerInd].catDisplayInds[catInd]; - - cats[catInd] = createCategoryModel(d, catInd, displayInd, catLabel); + var catLabel = trace.dimensions[containerInd].categorylabels[catInd]; + cats[catInd] = createCategoryModel(d, catInd, catLabel); } updateCategoryModel(cats[catInd], valueInd, count); @@ -289,8 +278,6 @@ function createDimensionModel(dimensionInd, containerInd, displayInd, dimensionL * The index of this categories dimension * @property {Number} categoryInd * The index of this category - * @property {Number} displayInd - * The display index of this category (where 0 is the topmost category) * @property {String} categoryLabel * The name of this category * @property {Array} valueInds @@ -314,7 +301,6 @@ function createCategoryModel(dimensionInd, categoryInd, displayInd, categoryLabe return { dimensionInd: dimensionInd, categoryInd: categoryInd, - displayInd: displayInd, categoryLabel: categoryLabel, valueInds: [], count: 0, @@ -489,27 +475,21 @@ function validateDimensionDisplayInds(trace) { * @param {UniqueInfo} uniqueInfoDim */ function validateCategoryProperties(dim, uniqueInfoDim) { - var uniqueDimVals = uniqueInfoDim.uniqueValues; - // Update catValues - dim.catValues = uniqueDimVals; - - // Handle catDisplayInds - if(dim.catDisplayInds.length !== uniqueDimVals.length || !isRangePermutation(dim.catDisplayInds)) { - dim.catDisplayInds = uniqueDimVals.map(function(v, i) {return i;}); - } + // Update categoryarray + dim.categoryarray = uniqueInfoDim.uniqueValues; - // Handle catLabels - if(dim.catLabels === null || dim.catLabels === undefined) { - dim.catLabels = []; + // Handle categorylabels + if(dim.categorylabels === null || dim.categorylabels === undefined) { + dim.categorylabels = []; } else { // Shallow copy to avoid modifying input array - dim.catLabels = dim.catLabels.map(function(v) {return v;}); + dim.categorylabels = dim.categorylabels.slice(); } - // Extend catLabels with elements from uniqueInfoDim.uniqueValues - for(var i = dim.catLabels.length; i < uniqueInfoDim.uniqueValues.length; i++) { - dim.catLabels.push(uniqueInfoDim.uniqueValues[i]); + // Extend categorylabels with elements from uniqueInfoDim.uniqueValues + for(var i = dim.categorylabels.length; i < uniqueInfoDim.uniqueValues.length; i++) { + dim.categorylabels.push(uniqueInfoDim.uniqueValues[i]); } } diff --git a/src/traces/parcats/defaults.js b/src/traces/parcats/defaults.js index 1d32b517b3c..baccbdb5724 100644 --- a/src/traces/parcats/defaults.js +++ b/src/traces/parcats/defaults.js @@ -14,6 +14,7 @@ var colorscaleDefaults = require('../../components/colorscale/defaults'); var handleDomainDefaults = require('../../plots/domain').defaults; var handleArrayContainerDefaults = require('../../plots/array_container_defaults'); +var handleCategoryOrderDefaults = require('../../plots/cartesian/category_order_defaults'); var attributes = require('./attributes'); var mergeLength = require('../parcoords/merge_length'); @@ -54,9 +55,12 @@ function dimensionDefaults(dimensionIn, dimensionOut) { coerce('displayindex', dimensionOut._index); // Category level - coerce('catDisplayInds'); - coerce('catValues'); - coerce('catLabels'); + // TODO: Make categoryorder and categoryarray consistent + // If valid array, set order to 'array' + // If order is 'array' but array is invalid set order to 'trace' + coerce('categoryorder'); + coerce('categoryarray'); + coerce('categorylabels'); } } diff --git a/src/traces/parcats/parcats.js b/src/traces/parcats/parcats.js index fe7b0380391..4022e2a4056 100644 --- a/src/traces/parcats/parcats.js +++ b/src/traces/parcats/parcats.js @@ -1014,11 +1014,11 @@ function dragDimension(d) { var categoryY = dragCategory.model.dragY; // Check for category drag swaps - var catDisplayInd = dragCategory.model.displayInd; + var categoryInd = dragCategory.model.categoryInd; var dimCategoryViews = dragDimension.categories; - var catAbove = dimCategoryViews[catDisplayInd - 1]; - var catBelow = dimCategoryViews[catDisplayInd + 1]; + var catAbove = dimCategoryViews[categoryInd - 1]; + var catBelow = dimCategoryViews[categoryInd + 1]; // Check for overlap above if(catAbove !== undefined) { @@ -1027,7 +1027,7 @@ function dragDimension(d) { // Swap display inds dragCategory.model.displayInd = catAbove.model.displayInd; - catAbove.model.displayInd = catDisplayInd; + catAbove.model.displayInd = categoryInd; } } @@ -1037,7 +1037,7 @@ function dragDimension(d) { // Swap display inds dragCategory.model.displayInd = catBelow.model.displayInd; - catBelow.model.displayInd = catDisplayInd; + catBelow.model.displayInd = categoryInd; } } @@ -1121,20 +1121,20 @@ function dragDimensionEnd(d) { } // ### Handle category reordering ### - var anyCatsReordered = false; - if(d.dragCategoryDisplayInd !== null) { - var finalDragCategoryDisplayInds = d.model.categories.map(function(c) { - return c.displayInd; - }); - - anyCatsReordered = d.initialDragCategoryDisplayInds.some(function(initCatDisplay, catInd) { - return initCatDisplay !== finalDragCategoryDisplayInds[catInd]; - }); - - if(anyCatsReordered) { - restyleData['dimensions[' + d.model.containerInd + '].catDisplayInds'] = [finalDragCategoryDisplayInds]; - } - } + // var anyCatsReordered = false; + // if(d.dragCategoryDisplayInd !== null) { + // var finalDragCategoryDisplayInds = d.model.categories.map(function(c) { + // return c.displayInd; + // }); + // + // anyCatsReordered = d.initialDragCategoryDisplayInds.some(function(initCatDisplay, catInd) { + // return initCatDisplay !== finalDragCategoryDisplayInds[catInd]; + // }); + // + // if(anyCatsReordered) { + // restyleData['dimensions[' + d.model.containerInd + '].catDisplayInds'] = [finalDragCategoryDisplayInds]; + // } + // } // Handle potential click event // ---------------------------- @@ -1520,12 +1520,6 @@ function updatePathViewModels(parcatsViewModel) { }); }); - // Array from category index to category display index for each true dimension index - var catToDisplayIndPerDim = parcatsViewModel.model.dimensions.map( - function(d) { - return d.categories.map(function(c) {return c.displayInd;}); - }); - // Array from true dimension index to dimension display index var dimToDisplayInd = parcatsViewModel.model.dimensions.map(function(d) {return d.displayInd;}); var displayToDimInd = parcatsViewModel.dimensions.map(function(d) {return d.model.dimensionInd;}); @@ -1547,21 +1541,12 @@ function updatePathViewModels(parcatsViewModel) { } } - // Compute category display inds to use for sorting paths - function pathDisplayCategoryInds(pathModel) { - var dimensionInds = pathModel.categoryInds.map(function(catInd, dimInd) {return catToDisplayIndPerDim[dimInd][catInd];}); - var displayInds = displayToDimInd.map(function(dimInd) { - return dimensionInds[dimInd]; - }); - return displayInds; - } - // Sort in ascending order by display index array pathModels.sort(function(v1, v2) { // Build display inds for each path - var sortArray1 = pathDisplayCategoryInds(v1); - var sortArray2 = pathDisplayCategoryInds(v2); + var sortArray1 = v1.categoryInds; + var sortArray2 = v2.categoryInds; // Handle path sort order if(parcatsViewModel.sortpaths === 'backward') { @@ -1614,15 +1599,14 @@ function updatePathViewModels(parcatsViewModel) { var pathYs = new Array(nextYPositions.length); for(var d = 0; d < pathModel.categoryInds.length; d++) { var catInd = pathModel.categoryInds[d]; - var catDisplayInd = catToDisplayIndPerDim[d][catInd]; var dimDisplayInd = dimToDisplayInd[d]; // Update next y position - pathYs[dimDisplayInd] = nextYPositions[dimDisplayInd][catDisplayInd]; - nextYPositions[dimDisplayInd][catDisplayInd] += pathHeight; + pathYs[dimDisplayInd] = nextYPositions[dimDisplayInd][catInd]; + nextYPositions[dimDisplayInd][catInd] += pathHeight; // Update category color information - var catViewModle = parcatsViewModel.dimensions[dimDisplayInd].categories[catDisplayInd]; + var catViewModle = parcatsViewModel.dimensions[dimDisplayInd].categories[catInd]; var numBands = catViewModle.bands.length; var lastCatBand = catViewModle.bands[numBands - 1]; @@ -1746,23 +1730,14 @@ function createDimensionViewModel(parcatsViewModel, dimensionModel) { nextCatHeight, nextCatModel, nextCat, - catInd, - catDisplayInd; + catInd; // Compute starting Y offset var nextCatY = (maxCats - numCats) * catSpacing / 2.0; // Compute category ordering - var categoryIndInfo = dimensionModel.categories.map(function(c) { - return {displayInd: c.displayInd, categoryInd: c.categoryInd}; - }); - - categoryIndInfo.sort(function(a, b) { - return a.displayInd - b.displayInd; - }); + for(catInd = 0; catInd < numCats; catInd++) { - for(catDisplayInd = 0; catDisplayInd < numCats; catDisplayInd++) { - catInd = categoryIndInfo[catDisplayInd].categoryInd; nextCatModel = dimensionModel.categories[catInd]; if(totalCount > 0) { From 5e60062e686b3bf8b78018e288ce6e61abd6ebca Mon Sep 17 00:00:00 2001 From: "Jon M. Mease" Date: Fri, 17 Aug 2018 15:52:20 -0400 Subject: [PATCH 18/50] Full support for categoryorder, categoryarray, and categorylabels Mocks updated, but not tests yet. --- src/traces/parcats/calc.js | 12 +++- src/traces/parcats/defaults.js | 26 +++++-- src/traces/parcats/parcats.js | 92 +++++++++++++++++-------- test/image/mocks/parcats_reordered.json | 2 +- 4 files changed, 94 insertions(+), 38 deletions(-) diff --git a/src/traces/parcats/calc.js b/src/traces/parcats/calc.js index 00137dd33d0..0773c027dde 100644 --- a/src/traces/parcats/calc.js +++ b/src/traces/parcats/calc.js @@ -177,8 +177,9 @@ module.exports = function calc(gd, trace) { var cats = dimensionModels[d].categories; if(cats[catInd] === undefined) { + var catValue = trace.dimensions[containerInd].categoryarray[catInd]; var catLabel = trace.dimensions[containerInd].categorylabels[catInd]; - cats[catInd] = createCategoryModel(d, catInd, catLabel); + cats[catInd] = createCategoryModel(d, catInd, catValue, catLabel); } updateCategoryModel(cats[catInd], valueInd, count); @@ -278,8 +279,11 @@ function createDimensionModel(dimensionInd, containerInd, displayInd, dimensionL * The index of this categories dimension * @property {Number} categoryInd * The index of this category + * @property {Number} displayInd + * The display index of this category (where 0 is the topmost category) * @property {String} categoryLabel * The name of this category + * @property categoryValue: Raw value of the category * @property {Array} valueInds * Array of indices (into the original value array) of all samples in this category * @property {Number} count @@ -292,15 +296,17 @@ function createDimensionModel(dimensionInd, containerInd, displayInd, dimensionL * Create and return a new CategoryModel object * @param {Number} dimensionInd * @param {Number} categoryInd - * @param {Number} displayInd * The display index of this category (where 0 is the topmost category) + * @param {String} categoryValue * @param {String} categoryLabel * @return {CategoryModel} */ -function createCategoryModel(dimensionInd, categoryInd, displayInd, categoryLabel) { +function createCategoryModel(dimensionInd, categoryInd, categoryValue, categoryLabel) { return { dimensionInd: dimensionInd, categoryInd: categoryInd, + categoryValue: categoryValue, + displayInd: categoryInd, categoryLabel: categoryLabel, valueInds: [], count: 0, diff --git a/src/traces/parcats/defaults.js b/src/traces/parcats/defaults.js index baccbdb5724..4eb0e56553b 100644 --- a/src/traces/parcats/defaults.js +++ b/src/traces/parcats/defaults.js @@ -55,12 +55,26 @@ function dimensionDefaults(dimensionIn, dimensionOut) { coerce('displayindex', dimensionOut._index); // Category level - // TODO: Make categoryorder and categoryarray consistent - // If valid array, set order to 'array' - // If order is 'array' but array is invalid set order to 'trace' - coerce('categoryorder'); - coerce('categoryarray'); - coerce('categorylabels'); + var arrayIn = dimensionIn.categoryarray; + var isValidArray = (Array.isArray(arrayIn) && arrayIn.length > 0); + + var orderDefault; + if(isValidArray) orderDefault = 'array'; + var order = coerce('categoryorder', orderDefault); + + // coerce 'categoryarray' only in array order case + if(order === 'array') { + coerce('categoryarray'); + coerce('categorylabels'); + } else { + delete dimensionIn.categoryarray; + delete dimensionIn.categorylabels; + } + + // cannot set 'categoryorder' to 'array' with an invalid 'categoryarray' + if(!isValidArray && order === 'array') { + dimensionOut.categoryorder = 'trace'; + } } } diff --git a/src/traces/parcats/parcats.js b/src/traces/parcats/parcats.js index 4022e2a4056..dfef5d3f2ae 100644 --- a/src/traces/parcats/parcats.js +++ b/src/traces/parcats/parcats.js @@ -1014,11 +1014,11 @@ function dragDimension(d) { var categoryY = dragCategory.model.dragY; // Check for category drag swaps - var categoryInd = dragCategory.model.categoryInd; + var catDisplayInd = dragCategory.model.displayInd; var dimCategoryViews = dragDimension.categories; - var catAbove = dimCategoryViews[categoryInd - 1]; - var catBelow = dimCategoryViews[categoryInd + 1]; + var catAbove = dimCategoryViews[catDisplayInd - 1]; + var catBelow = dimCategoryViews[catDisplayInd + 1]; // Check for overlap above if(catAbove !== undefined) { @@ -1027,7 +1027,7 @@ function dragDimension(d) { // Swap display inds dragCategory.model.displayInd = catAbove.model.displayInd; - catAbove.model.displayInd = categoryInd; + catAbove.model.displayInd = catDisplayInd; } } @@ -1037,7 +1037,7 @@ function dragDimension(d) { // Swap display inds dragCategory.model.displayInd = catBelow.model.displayInd; - catBelow.model.displayInd = categoryInd; + catBelow.model.displayInd = catDisplayInd; } } @@ -1121,20 +1121,31 @@ function dragDimensionEnd(d) { } // ### Handle category reordering ### - // var anyCatsReordered = false; - // if(d.dragCategoryDisplayInd !== null) { - // var finalDragCategoryDisplayInds = d.model.categories.map(function(c) { - // return c.displayInd; - // }); - // - // anyCatsReordered = d.initialDragCategoryDisplayInds.some(function(initCatDisplay, catInd) { - // return initCatDisplay !== finalDragCategoryDisplayInds[catInd]; - // }); - // - // if(anyCatsReordered) { - // restyleData['dimensions[' + d.model.containerInd + '].catDisplayInds'] = [finalDragCategoryDisplayInds]; - // } - // } + var anyCatsReordered = false; + if(d.dragCategoryDisplayInd !== null) { + var finalDragCategoryDisplayInds = d.model.categories.map(function(c) { + return c.displayInd; + }); + + anyCatsReordered = d.initialDragCategoryDisplayInds.some(function(initCatDisplay, catInd) { + return initCatDisplay !== finalDragCategoryDisplayInds[catInd]; + }); + + if(anyCatsReordered) { + + // Sort a shallow copy of the category models by display index + var sortedCategoryModels = d.model.categories.slice().sort( + function (a, b) { return a.displayInd - b.displayInd }); + + // Get new categoryarray and categorylabels values + var newCategoryArray = sortedCategoryModels.map(function (v) { return v.categoryValue }); + var newCategoryLabels = sortedCategoryModels.map(function (v) { return v.categoryLabel }); + + restyleData['dimensions[' + d.model.containerInd + '].categoryarray'] = [newCategoryArray]; + restyleData['dimensions[' + d.model.containerInd + '].categorylabels'] = [newCategoryLabels]; + restyleData['dimensions[' + d.model.containerInd + '].categoryorder'] = ['array']; + } + } // Handle potential click event // ---------------------------- @@ -1520,6 +1531,12 @@ function updatePathViewModels(parcatsViewModel) { }); }); + // Array from category index to category display index for each true dimension index + var catToDisplayIndPerDim = parcatsViewModel.model.dimensions.map( + function(d) { + return d.categories.map(function(c) {return c.displayInd;}); + }); + // Array from true dimension index to dimension display index var dimToDisplayInd = parcatsViewModel.model.dimensions.map(function(d) {return d.displayInd;}); var displayToDimInd = parcatsViewModel.dimensions.map(function(d) {return d.model.dimensionInd;}); @@ -1541,12 +1558,21 @@ function updatePathViewModels(parcatsViewModel) { } } + // Compute category display inds to use for sorting paths + function pathDisplayCategoryInds(pathModel) { + var dimensionInds = pathModel.categoryInds.map(function(catInd, dimInd) {return catToDisplayIndPerDim[dimInd][catInd];}); + var displayInds = displayToDimInd.map(function(dimInd) { + return dimensionInds[dimInd]; + }); + return displayInds; + } + // Sort in ascending order by display index array pathModels.sort(function(v1, v2) { // Build display inds for each path - var sortArray1 = v1.categoryInds; - var sortArray2 = v2.categoryInds; + var sortArray1 = pathDisplayCategoryInds(v1); + var sortArray2 = pathDisplayCategoryInds(v2); // Handle path sort order if(parcatsViewModel.sortpaths === 'backward') { @@ -1599,14 +1625,15 @@ function updatePathViewModels(parcatsViewModel) { var pathYs = new Array(nextYPositions.length); for(var d = 0; d < pathModel.categoryInds.length; d++) { var catInd = pathModel.categoryInds[d]; + var catDisplayInd = catToDisplayIndPerDim[d][catInd]; var dimDisplayInd = dimToDisplayInd[d]; // Update next y position - pathYs[dimDisplayInd] = nextYPositions[dimDisplayInd][catInd]; - nextYPositions[dimDisplayInd][catInd] += pathHeight; + pathYs[dimDisplayInd] = nextYPositions[dimDisplayInd][catDisplayInd]; + nextYPositions[dimDisplayInd][catDisplayInd] += pathHeight; // Update category color information - var catViewModle = parcatsViewModel.dimensions[dimDisplayInd].categories[catInd]; + var catViewModle = parcatsViewModel.dimensions[dimDisplayInd].categories[catDisplayInd]; var numBands = catViewModle.bands.length; var lastCatBand = catViewModle.bands[numBands - 1]; @@ -1641,7 +1668,7 @@ function updatePathViewModels(parcatsViewModel) { } pathViewModels[pathNumber] = { - key: pathModel.categoryInds + '-' + pathModel.valueInds[0], + key: pathModel.valueInds[0], model: pathModel, height: pathHeight, leftXs: leftXPositions, @@ -1730,14 +1757,23 @@ function createDimensionViewModel(parcatsViewModel, dimensionModel) { nextCatHeight, nextCatModel, nextCat, - catInd; + catInd, + catDisplayInd; // Compute starting Y offset var nextCatY = (maxCats - numCats) * catSpacing / 2.0; // Compute category ordering - for(catInd = 0; catInd < numCats; catInd++) { + var categoryIndInfo = dimensionModel.categories.map(function(c) { + return {displayInd: c.displayInd, categoryInd: c.categoryInd}; + }); + + categoryIndInfo.sort(function(a, b) { + return a.displayInd - b.displayInd; + }); + for(catDisplayInd = 0; catDisplayInd < numCats; catDisplayInd++) { + catInd = categoryIndInfo[catDisplayInd].categoryInd; nextCatModel = dimensionModel.categories[catInd]; if(totalCount > 0) { @@ -1747,7 +1783,7 @@ function createDimensionViewModel(parcatsViewModel, dimensionModel) { } nextCat = { - key: catInd, + key: nextCatModel.valueInds[0], model: nextCatModel, width: dimWidth, height: nextCatHeight, diff --git a/test/image/mocks/parcats_reordered.json b/test/image/mocks/parcats_reordered.json index 65169e6ad5b..eeb089add90 100644 --- a/test/image/mocks/parcats_reordered.json +++ b/test/image/mocks/parcats_reordered.json @@ -5,7 +5,7 @@ "dimensions": [ {"label": "One", "values": [1, 1, 2, 1, 2, 1, 1, 2, 1], "displayindex": 0}, {"label": "Two", "values": ["A", "B", "A", "B", "C", "C", "A", "B", "C"], "displayindex": 2, - "catDisplayInds": [1, 2, 0], "CatValues": ["A", "B", "C"]}, + "categoryarray": ["B", "A", "C"]}, {"label": "Three", "values": [11, 11, 11, 11, 11, 11, 11, 11, 11], "displayindex": 1}]} ], "layout": { From 66c90fa4b82d54bd7b84224bcba1e840e87f1a05 Mon Sep 17 00:00:00 2001 From: "Jon M. Mease" Date: Mon, 20 Aug 2018 11:44:08 -0400 Subject: [PATCH 19/50] Fixed tests to use new `categoryorder`, `categoryarray`, `categorylabels` construct --- src/traces/parcats/parcats.js | 2 +- test/jasmine/tests/parcats_test.js | 21 ++++++++++----------- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/traces/parcats/parcats.js b/src/traces/parcats/parcats.js index dfef5d3f2ae..af564f7e50e 100644 --- a/src/traces/parcats/parcats.js +++ b/src/traces/parcats/parcats.js @@ -1143,7 +1143,7 @@ function dragDimensionEnd(d) { restyleData['dimensions[' + d.model.containerInd + '].categoryarray'] = [newCategoryArray]; restyleData['dimensions[' + d.model.containerInd + '].categorylabels'] = [newCategoryLabels]; - restyleData['dimensions[' + d.model.containerInd + '].categoryorder'] = ['array']; + restyleData['dimensions[' + d.model.containerInd + '].categoryorder'] = 'array'; } } diff --git a/test/jasmine/tests/parcats_test.js b/test/jasmine/tests/parcats_test.js index 41876f6b845..bf7eaefbf8b 100644 --- a/test/jasmine/tests/parcats_test.js +++ b/test/jasmine/tests/parcats_test.js @@ -366,22 +366,22 @@ describe('Dimension reordered parcats trace', function() { {dimensionInd: 1, displayInd: 2, dimensionLabel: 'Two'}); checkCategoryCalc(gd, 1, 0, { - categoryLabel: 'A', + categoryLabel: 'B', dimensionInd: 1, categoryInd: 0, - displayInd: 1}); + displayInd: 0}); checkCategoryCalc(gd, 1, 1, { - categoryLabel: 'B', + categoryLabel: 'A', dimensionInd: 1, categoryInd: 1, - displayInd: 2}); + displayInd: 1}); checkCategoryCalc(gd, 1, 2, { categoryLabel: 'C', dimensionInd: 1, categoryInd: 2, - displayInd: 0}); + displayInd: 2}); // ### Dimension 2 ### checkDimensionCalc(gd, 2, @@ -402,9 +402,6 @@ describe('Dimension reordered parcats trace', function() { // Define bad display indexes [0, 2, 0] mock.data[0].dimensions[2].displayindex = 0; - // catDisplayInds for dimension 1 as [0, 2, 0] - mock.data[0].dimensions[1].catDisplayInds[0] = 0; - Plotly.newPlot(gd, mock) .then(function() { @@ -440,12 +437,12 @@ describe('Dimension reordered parcats trace', function() { {dimensionInd: 1, displayInd: 1, dimensionLabel: 'Two'}); checkCategoryCalc(gd, 1, 0, { - categoryLabel: 'A', + categoryLabel: 'B', categoryInd: 0, displayInd: 0}); checkCategoryCalc(gd, 1, 1, { - categoryLabel: 'B', + categoryLabel: 'A', categoryInd: 1, displayInd: 1}); @@ -737,7 +734,9 @@ describe('Drag to reordered dimensions and categories', function() { {'dimensions[0].displayindex': 0, 'dimensions[1].displayindex': 2, 'dimensions[2].displayindex': 1, - 'dimensions[1].catDisplayInds': [[ 1, 2, 0 ]]}, + 'dimensions[1].categoryorder': 'array', + 'dimensions[1].categoryarray': [['C', 'A', 'B' ]], + 'dimensions[1].categorylabels': [['C', 'A', 'B' ]]}, [0]]); restyleCallback.calls.reset(); From 69f692209e4f9e56339abcbbe795b3b700e5f8d7 Mon Sep 17 00:00:00 2001 From: "Jon M. Mease" Date: Mon, 20 Aug 2018 14:33:19 -0400 Subject: [PATCH 20/50] Add 'dimension' hovermode that uses multi-hoverlabel logic --- src/components/fx/hover.js | 3 +- src/components/fx/index.js | 2 +- src/traces/parcats/attributes.js | 2 +- src/traces/parcats/parcats.js | 53 ++++++++++++++----- .../mocks/parcats_hovermode_dimension.json | 21 ++++++++ 5 files changed, 64 insertions(+), 17 deletions(-) create mode 100644 test/image/mocks/parcats_hovermode_dimension.json diff --git a/src/components/fx/hover.js b/src/components/fx/hover.js index c2e616b253b..1b39c5dede9 100644 --- a/src/components/fx/hover.js +++ b/src/components/fx/hover.js @@ -153,8 +153,7 @@ exports.loneHover = function loneHover(hoverItem, opts) { return hoverLabel.node(); }; -// TODO: replace loneHover? -exports.customHovers = function customHovers(hoverItems, opts) { +exports.multiHovers = function multiHovers(hoverItems, opts) { if(!Array.isArray(hoverItems)) { hoverItems = [hoverItems]; diff --git a/src/components/fx/index.js b/src/components/fx/index.js index c495537e379..738c64a00e3 100644 --- a/src/components/fx/index.js +++ b/src/components/fx/index.js @@ -45,7 +45,7 @@ module.exports = { unhover: dragElement.unhover, loneHover: require('./hover').loneHover, - customHovers: require('./hover').customHovers, + multiHovers: require('./hover').multiHovers, loneUnhover: loneUnhover, click: require('./click') diff --git a/src/traces/parcats/attributes.js b/src/traces/parcats/attributes.js index c3aab107edd..e026760cd80 100644 --- a/src/traces/parcats/attributes.js +++ b/src/traces/parcats/attributes.js @@ -39,7 +39,7 @@ module.exports = { }), hovermode: { valType: 'enumerated', - values: ['category', 'color'], + values: ['category', 'color', 'dimension'], dflt: 'category', role: 'info', editType: 'plot', diff --git a/src/traces/parcats/parcats.js b/src/traces/parcats/parcats.js index af564f7e50e..ceba62b0929 100644 --- a/src/traces/parcats/parcats.js +++ b/src/traces/parcats/parcats.js @@ -500,7 +500,8 @@ function buildPointsArrayForPath(d) { * @param {PathViewModel} d */ function clickPath(d) { - if(d.parcatsViewModel.hovermode !== 'none') { + if (d.parcatsViewModel.hoverinfoItems.indexOf('skip') === -1) { + // hoverinfo it's skip, so interaction events aren't disabled var points = buildPointsArrayForPath(d); d.parcatsViewModel.graphDiv.emit('plotly_click', {points: points, event: d3.event}); } @@ -738,7 +739,6 @@ function createHoverLabelForCategoryHovermode(rootBBox, bandElement) { }; } - /** * Create hover label for a band element's category (for use when hovermode === 'category') * @@ -748,6 +748,31 @@ function createHoverLabelForCategoryHovermode(rootBBox, bandElement) { * HTML element for band * */ +function createHoverLabelForDimensionHovermode(rootBBox, bandElement) { + + var allHoverlabels = []; + + d3.select(bandElement.parentNode.parentNode) + .selectAll('g.category') + .select('rect.catrect') + .each(function() { + var bandNode = this; + allHoverlabels.push(createHoverLabelForCategoryHovermode(rootBBox, bandNode)); + }); + + console.log(allHoverlabels); + return allHoverlabels +} + +/** + * Create hover labels for a band element's category (for use when hovermode === 'dimension') + * + * @param {ClientRect} rootBBox + * Client bounding box for root of figure + * @param {HTMLElement} bandElement + * HTML element for band + * + */ function createHoverLabelForColorHovermode(rootBBox, bandElement) { var bandBoundingBox = bandElement.getBoundingClientRect(); @@ -866,25 +891,27 @@ function mouseoverCategoryBand(bandViewModel) { var bandElement = this; // Handle style and events - if (hovermode === 'category') { - styleForCategoryHovermode(bandElement); - emitPointsEventCategoryHovermode(bandElement, 'plotly_hover', d3.event); - } else if (hovermode === 'color') { + if (hovermode === 'color') { styleForColorHovermode(bandElement); emitPointsEventColorHovermode(bandElement, 'plotly_hover', d3.event); + } else { + styleForCategoryHovermode(bandElement); + emitPointsEventCategoryHovermode(bandElement, 'plotly_hover', d3.event); } // Handle hover label if(bandViewModel.parcatsViewModel.hoverinfoItems.indexOf('none') === -1) { - var hoverItem; + var hoverItems; if (hovermode === 'category') { - hoverItem = createHoverLabelForCategoryHovermode(rootBBox, bandElement); + hoverItems = createHoverLabelForCategoryHovermode(rootBBox, bandElement); } else if (hovermode === 'color') { - hoverItem = createHoverLabelForColorHovermode(rootBBox, bandElement); + hoverItems = createHoverLabelForColorHovermode(rootBBox, bandElement); + } else if (hovermode === 'dimension') { + hoverItems = createHoverLabelForDimensionHovermode(rootBBox, bandElement); } - if (hoverItem) { - Fx.loneHover(hoverItem, { + if (hoverItems) { + Fx.multiHovers(hoverItems, { container: fullLayout._hoverlayer.node(), outerContainer: fullLayout._paper.node(), gd: gd @@ -1152,7 +1179,7 @@ function dragDimensionEnd(d) { if(!d.dragHasMoved && d.potentialClickBand) { if(d.parcatsViewModel.hovermode === 'color') { emitPointsEventColorHovermode(d.potentialClickBand, 'plotly_click', d3.event.sourceEvent); - } else if(d.parcatsViewModel.hovermode === 'category') { + } else { emitPointsEventCategoryHovermode(d.potentialClickBand, 'plotly_click', d3.event.sourceEvent); } } @@ -1861,7 +1888,7 @@ function createDimensionViewModel(parcatsViewModel, dimensionModel) { * @property {Number} y * Y position of this trace with respect to the Figure (pixels) * @property {String} hovermode - * Hover mode. One of: 'none', 'category', or 'color' + * Hover mode. One of: 'none', 'category', 'color', or 'dimension' * @property {Array.} hoverinfoItems * Info to display on hover. Array with a combination of 'counts' and/or 'probabilities', or 'none', or 'skip' * @property {String} arrangement diff --git a/test/image/mocks/parcats_hovermode_dimension.json b/test/image/mocks/parcats_hovermode_dimension.json new file mode 100644 index 00000000000..47c896e2d02 --- /dev/null +++ b/test/image/mocks/parcats_hovermode_dimension.json @@ -0,0 +1,21 @@ +{ + "data": [ + {"type": "parcats", + "domain": {"x": [0.125, 0.625],"y": [0.25, 0.75]}, + "hovermode": "dimension", + "hoverinfo": "probability+count", + "dimensions":[ + {"label": "One", "values": [1, 1, 2, 1, 2, 1, 1, 2, 1]}, + {"label": "Two", + "values": ["A", "A", "A", "B", "A", "A", "A", "A", "C"], + "categoryorder": "category descending"}, + {"label": "Three", "values": [11, 11, 11, 11, 11, 11, 11, 11, 11]}] + } + ], + "layout": { + "height": 602, + "width": 592, + "margin": { + "l": 40, "r": 40, "t": 50, "b": 40 + }} +} From f2aa9b9a9cbf713df4245b07b67f35366ef37777 Mon Sep 17 00:00:00 2001 From: "Jon M. Mease" Date: Tue, 21 Aug 2018 12:37:09 -0400 Subject: [PATCH 21/50] Added labelfont and categorylabelfont top-level attributes to the control font of dimension labels and category labels respectively --- src/traces/parcats/attributes.js | 19 +++++++++-------- src/traces/parcats/defaults.js | 16 +++++++++++++++ src/traces/parcats/parcats.js | 32 +++++++++++++++++++++++++---- test/image/mocks/parcats_fonts.json | 19 +++++++++++++++++ 4 files changed, 73 insertions(+), 13 deletions(-) create mode 100644 test/image/mocks/parcats_fonts.json diff --git a/src/traces/parcats/attributes.js b/src/traces/parcats/attributes.js index e026760cd80..711606e6727 100644 --- a/src/traces/parcats/attributes.js +++ b/src/traces/parcats/attributes.js @@ -10,6 +10,7 @@ var extendFlat = require('../../lib/extend').extendFlat; var plotAttrs = require('../../plots/attributes'); +var fontAttrs = require('../../plots/font_attributes'); var colorAttributes = require('../../components/colorscale/attributes'); var domainAttrs = require('../../plots/domain').attributes; var scatterAttrs = require('../scatter/attributes'); @@ -75,15 +76,15 @@ module.exports = { 'If `backward` sort based on dimensions from right to left.' ].join(' ') }, - // labelfont: fontAttrs({ - // editType: 'calc', - // description: 'Sets the font for the `dimension` labels.' - // }), - // - // catfont: fontAttrs({ - // editType: 'calc', - // description: 'Sets the font for the `category` labels.' - // }), + labelfont: fontAttrs({ + editType: 'calc', + description: 'Sets the font for the `dimension` labels.' + }), + + categorylabelfont: fontAttrs({ + editType: 'calc', + description: 'Sets the font for the `category` labels.' + }), dimensions: { _isLinkedToArray: 'dimension', diff --git a/src/traces/parcats/defaults.js b/src/traces/parcats/defaults.js index 4eb0e56553b..c23b7b817c1 100644 --- a/src/traces/parcats/defaults.js +++ b/src/traces/parcats/defaults.js @@ -104,4 +104,20 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout coerce('bundlecolors'); coerce('sortpaths'); coerce('counts'); + + var labelfontDflt = { + family: layout.font.family, + size: Math.round(layout.font.size / 1.2), + color: layout.font.color + }; + + Lib.coerceFont(coerce, 'labelfont', labelfontDflt); + + var categoryfontDefault = { + family: layout.font.family, + size: Math.round(layout.font.size / 1.4), + color: layout.font.color + }; + + Lib.coerceFont(coerce, 'categorylabelfont', categoryfontDefault); }; diff --git a/src/traces/parcats/parcats.js b/src/traces/parcats/parcats.js index ceba62b0929..0851160dcd0 100644 --- a/src/traces/parcats/parcats.js +++ b/src/traces/parcats/parcats.js @@ -12,6 +12,7 @@ var d3 = require('d3'); var Plotly = require('../../plot_api/plot_api'); var Fx = require('../../components/fx'); var Lib = require('../../lib'); +var Drawing = require('../../components/drawing'); var tinycolor = require('tinycolor2'); function performPlot(parcatsModels, graphDiv, layout, svg) { @@ -247,7 +248,6 @@ function performPlot(parcatsModels, graphDiv, layout, svg) { 'rgb(255, 255, 255) 1px 1px 2px, ' + 'rgb(255, 255, 255) 1px -1px 2px, ' + 'rgb(255, 255, 255) -1px -1px 2px') - .attr('font-size', 10) .style('fill', 'rgb(0, 0, 0)') .attr('x', function(d) { @@ -264,7 +264,12 @@ function performPlot(parcatsModels, graphDiv, layout, svg) { }) .text(function(d) { return d.model.categoryLabel; - }); + }) + .each( + /** @param {CategoryViewModel} catModel*/ + function(catModel){ + Drawing.font(d3.select(this), catModel.parcatsViewModel.categorylabelfont); + }); // Initialize dimension label categoryGroupEnterSelection @@ -284,7 +289,6 @@ function performPlot(parcatsModels, graphDiv, layout, svg) { return 'ew-resize' } }) - .attr('font-size', 14) .attr('x', function(d) { return d.width / 2; }) @@ -296,7 +300,12 @@ function performPlot(parcatsModels, graphDiv, layout, svg) { } else { return null; } - }); + }) + .each( + /** @param {CategoryViewModel} catModel*/ + function(catModel){ + Drawing.font(d3.select(this), catModel.parcatsViewModel.labelfont); + }); // Category hover // categorySelection.select('rect.catrect') @@ -1443,6 +1452,8 @@ function createParcatsViewModel(graphDiv, layout, wrappedParcatsModel) { arrangement: trace.arrangement, bundlecolors: trace.bundlecolors, sortpaths: trace.sortpaths, + labelfont: trace.labelfont, + categorylabelfont: trace.categorylabelfont, pathShape: pathShape, dragDimension: null, margin: margin, @@ -1868,6 +1879,15 @@ function createDimensionViewModel(parcatsViewModel, dimensionModel) { * Left margin */ +/** + * @typedef {Object} Font + * Object containing font information + * + * @property {Number} size: Font size + * @property {String} color: Font color + * @property {String} family: Font family + */ + /** * @typedef {Object} ParcatsViewModel * Object containing calculated parcats view information @@ -1898,6 +1918,10 @@ function createDimensionViewModel(parcatsViewModel, dimensionModel) { * @property {String} sortpaths * If 'forward' then sort paths based on dimensions from left to right. If 'backward' sort based on dimensions * from right to left + * @property {Font} labelfont + * Font for the dimension labels + * @property {Font} categorylabelfont + * Font for the category labels * @property {String} pathShape * The shape of the paths. Either 'linear' or 'hspline'. * @property {DimensionViewModel|null} dragDimension diff --git a/test/image/mocks/parcats_fonts.json b/test/image/mocks/parcats_fonts.json new file mode 100644 index 00000000000..0e7937512de --- /dev/null +++ b/test/image/mocks/parcats_fonts.json @@ -0,0 +1,19 @@ +{ + "data": [ + {"type": "parcats", + "domain": {"x": [0.125, 0.625],"y": [0.25, 0.75]}, + "dimensions":[ + {"label": "One", "values": [1, 1, 2, 1, 2, 1, 1, 2, 1]}, + {"label": "Two", "values": ["A", "B", "A", "B", "C", "C", "A", "B", "C"]}, + {"label": "Three", "values": [11, 11, 11, 11, 11, 11, 11, 11, 11]}], + "labelfont": {"family": "Rockwell", "size": 20, "color": "gray"}, + "categorylabelfont": {"family": "Arial", "size": 10, "color": "firebrick"} + } + ], + "layout": { + "height": 602, + "width": 592, + "margin": { + "l": 40, "r": 40, "t": 50, "b": 40 + }} +} From 4eb5317ccef551281ff89332b8c15b4d0e1463cf Mon Sep 17 00:00:00 2001 From: "Jon M. Mease" Date: Tue, 21 Aug 2018 13:46:48 -0400 Subject: [PATCH 22/50] Review / cleanup attribute descriptions --- src/traces/parcats/attributes.js | 33 ++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/src/traces/parcats/attributes.js b/src/traces/parcats/attributes.js index 711606e6727..beaa37e82b3 100644 --- a/src/traces/parcats/attributes.js +++ b/src/traces/parcats/attributes.js @@ -29,7 +29,12 @@ var line = extendFlat({ dflt: 'linear', role: 'info', editType: 'plot', - description: 'Sets the shape of the paths'}, + description: [ + 'Sets the shape of the paths.', + 'If `linear`, paths are composed of straight lines.', + 'If `hspline`, paths are composed of horizontal curved splines' + ].join(' ') + } }); module.exports = { @@ -37,6 +42,7 @@ module.exports = { hoverinfo: extendFlat({}, plotAttrs.hoverinfo, { flags: ['count', 'probability'], editType: 'plot' + // plotAttrs.hoverinfo description is appropriate }), hovermode: { valType: 'enumerated', @@ -44,7 +50,12 @@ module.exports = { dflt: 'category', role: 'info', editType: 'plot', - description: 'Sets the hover mode of the parcats diagram' + description: [ + 'Sets the hover mode of the parcats diagram.', + 'If `category`, hover interaction take place per category.', + 'If `color`, hover interactions take place per color per category.', + 'If `dimension`, hover interactions take across all categories per dimension.' + ].join(' ') }, arrangement: { valType: 'enumerated', @@ -53,9 +64,10 @@ module.exports = { role: 'style', editType: 'plot', description: [ - 'If value is `perpendicular`, the categories can only move along a line perpendicular to the paths.', - 'If value is `freeform`, the categories can freely move on the plane.', - 'If value is `fixed`, the categories and dimensions are stationary.' + 'Sets the drag interaction mode for categories and dimensions.', + 'If `perpendicular`, the categories can only move along a line perpendicular to the paths.', + 'If `freeform`, the categories can freely move on the plane.', + 'If `fixed`, the categories and dimensions are stationary.' ].join(' ') }, bundlecolors: { @@ -63,7 +75,7 @@ module.exports = { dflt: true, role: 'info', editType: 'plot', - description: 'Sort paths so that like colors are bundled together' + description: 'Sort paths so that like colors are bundled together within each category.' }, sortpaths: { valType: 'enumerated', @@ -72,8 +84,9 @@ module.exports = { role: 'info', editType: 'plot', description: [ - 'If `forward` then sort paths based on dimensions from left to right.', - 'If `backward` sort based on dimensions from right to left.' + 'Sets the path sorting algorithm.', + 'If `forward`, sort paths based on dimension categories from left to right.', + 'If `backward`, sort paths based on dimensions categories from right to left.' ].join(' ') }, labelfont: fontAttrs({ @@ -141,7 +154,7 @@ module.exports = { description: [ 'Dimension values. `values[n]` represents the category value of the `n`th point in the dataset,', 'therefore the `values` vector for all dimensions must be the same (longer vectors', - 'will be truncated). Each value must an element of `catValues`.' + 'will be truncated).' ].join(' ') }, displayindex: { @@ -161,7 +174,7 @@ module.exports = { role: 'info', editType: 'calc', description: 'Shows the dimension when set to `true` (the default). Hides the dimension for `false`.' - }, + } }, line: line, From a8973889231495d6f745d6e9722c05e267864121 Mon Sep 17 00:00:00 2001 From: "Jon M. Mease" Date: Tue, 21 Aug 2018 13:47:49 -0400 Subject: [PATCH 23/50] Add `counts` attribute to parcats_hovermode_dimension mock Makes the hoverlabel shifting logic more noticeable and shows off the `counts` attribute --- test/image/mocks/parcats_hovermode_dimension.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/image/mocks/parcats_hovermode_dimension.json b/test/image/mocks/parcats_hovermode_dimension.json index 47c896e2d02..b5b7d990844 100644 --- a/test/image/mocks/parcats_hovermode_dimension.json +++ b/test/image/mocks/parcats_hovermode_dimension.json @@ -9,7 +9,8 @@ {"label": "Two", "values": ["A", "A", "A", "B", "A", "A", "A", "A", "C"], "categoryorder": "category descending"}, - {"label": "Three", "values": [11, 11, 11, 11, 11, 11, 11, 11, 11]}] + {"label": "Three", "values": [11, 11, 11, 11, 11, 11, 11, 11, 11]}], + "counts": [11, 3, 5, 2, 1, 20, 5, 9, 1] } ], "layout": { From 98d76ee4c29712f3d25f76dae9c8e9dcca498c02 Mon Sep 17 00:00:00 2001 From: "Jon M. Mease" Date: Thu, 23 Aug 2018 13:24:33 -0400 Subject: [PATCH 24/50] Refactor dimension and category dragging tests and test arrangements Now there are tests for 'freeform', 'perpendicular', and 'fixed' arrangements for dragging the dimension label and category rectangle. --- src/traces/parcats/parcats.js | 1 - test/jasmine/tests/parcats_test.js | 680 +++++++++++++++++++++++------ 2 files changed, 549 insertions(+), 132 deletions(-) diff --git a/src/traces/parcats/parcats.js b/src/traces/parcats/parcats.js index 0851160dcd0..1cd49eec4e1 100644 --- a/src/traces/parcats/parcats.js +++ b/src/traces/parcats/parcats.js @@ -769,7 +769,6 @@ function createHoverLabelForDimensionHovermode(rootBBox, bandElement) { allHoverlabels.push(createHoverLabelForCategoryHovermode(rootBBox, bandNode)); }); - console.log(allHoverlabels); return allHoverlabels } diff --git a/test/jasmine/tests/parcats_test.js b/test/jasmine/tests/parcats_test.js index bf7eaefbf8b..ef9a0cc01fe 100644 --- a/test/jasmine/tests/parcats_test.js +++ b/test/jasmine/tests/parcats_test.js @@ -283,7 +283,11 @@ describe('Basic parcats trace', function() { it('should compute initial fullData properly', function(done) { Plotly.newPlot(gd, basic_mock) .then(function() { - // TODO: check that defaults are inferred properly + // Check that some of the defaults are computed properly + var fullTrace = gd._fullData[0]; + expect(fullTrace.arrangement).toBe('perpendicular'); + expect(fullTrace.bundlecolors).toBe(true); + expect(fullTrace.dimensions[1].visible).toBe(true); }) .catch(failTest) .then(done); @@ -485,7 +489,7 @@ describe('Dimension reordered parcats trace', function() { }); }); -describe('Drag to reordered dimensions and categories', function() { +describe('Drag to reordered dimensions', function() { // Variable declarations // --------------------- @@ -503,56 +507,168 @@ describe('Drag to reordered dimensions and categories', function() { afterEach(destroyGraphDiv); - it('It should support dragging dimension label to reorder dimensions', function(done) { + function getMousePositions(parcatsViewModel) { + // Compute Mouse positions + // ----------------------- + // Start mouse in the middle of the dimension label on the + // second dimensions (dimension display index 1) + var dragDimStartX = parcatsViewModel.dimensions[1].x; + var mouseStartY = parcatsViewModel.y - 5, + mouseStartX = parcatsViewModel.x + dragDimStartX + dimWidth / 2; + + // Pause mouse half-way between the original location of + // the first and second dimensions. Also move mosue + // downward a bit to make sure drag 'sticks' + var mouseMidY = parcatsViewModel.y + 50, + mouseMidX = mouseStartX + dimDx / 2; + + // End mouse drag in the middle of the original + // position of the dimension label of the third dimension + // (dimension display index 2) + var mouseEndY = parcatsViewModel.y + 100, + mouseEndX = parcatsViewModel.x + parcatsViewModel.dimensions[2].x + dimWidth / 2; + return { + mouseStartY: mouseStartY, + mouseStartX: mouseStartX, + mouseMidY: mouseMidY, + mouseMidX: mouseMidX, + mouseEndY: mouseEndY, + mouseEndX: mouseEndX + }; + } + + function checkInitialDimensions() { + checkDimensionCalc(gd, 0, + {dimensionInd: 0, displayInd: 0, dragX: null, dimensionLabel: 'One', count: 9}); + checkDimensionCalc(gd, 1, + {dimensionInd: 1, displayInd: 1, dragX: null, dimensionLabel: 'Two', count: 9}); + checkDimensionCalc(gd, 2, + {dimensionInd: 2, displayInd: 2, dragX: null, dimensionLabel: 'Three', count: 9}); + } + + function checkReorderedDimensions() { + checkDimensionCalc(gd, 0, + {dimensionInd: 0, displayInd: 0, dragX: null, dimensionLabel: 'One', count: 9}); + checkDimensionCalc(gd, 1, + {dimensionInd: 1, displayInd: 2, dragX: null, dimensionLabel: 'Two', count: 9}); + checkDimensionCalc(gd, 2, + {dimensionInd: 2, displayInd: 1, dragX: null, dimensionLabel: 'Three', count: 9}); + } + + function checkMidDragDimensions(dragDimStartX) { + checkDimensionCalc(gd, 0, + {dimensionInd: 0, displayInd: 0, dragX: null, dimensionLabel: 'One', count: 9}); + checkDimensionCalc(gd, 1, + {dimensionInd: 1, displayInd: 1, dragX: dragDimStartX + dimDx / 2, dimensionLabel: 'Two', count: 9}); + checkDimensionCalc(gd, 2, + {dimensionInd: 2, displayInd: 2, dragX: null, dimensionLabel: 'Three', count: 9}); + } + + it('should support dragging dimension label to reorder dimensions in freeform arrangement', function(done) { + + // Set arrangement + mock.data[0].arrangement = 'freeform'; + Plotly.newPlot(gd, mock) .then(function() { - restyleCallback = jasmine.createSpy('restyleCallback'); gd.on('plotly_restyle', restyleCallback); /** @type {ParcatsViewModel} */ var parcatsViewModel = d3.select('g.trace.parcats').datum(); - // Compute Mouse positions - // ----------------------- - // Start mouse in the middle of the dimension label on the - // second dimensions (dimension display index 1) var dragDimStartX = parcatsViewModel.dimensions[1].x; - var mouseStartY = parcatsViewModel.y - 5, - mouseStartX = parcatsViewModel.x + dragDimStartX + dimWidth / 2; + var pos = getMousePositions(parcatsViewModel); - // Pause mouse half-way between the original location of - // the first and second dimensions. Also move mosue - // downward a bit to make sure drag 'sticks' - var mouseMidY = parcatsViewModel.y + 50, - mouseMidX = mouseStartX + dimDx / 2; + // Check initial dimension order + // ----------------------------- + checkInitialDimensions(); - // End mouse drag in the middle of the original - // position of the dimension label of the third dimension - // (dimension display index 2) - var mouseEndY = parcatsViewModel.y + 100, - mouseEndX = parcatsViewModel.x + parcatsViewModel.dimensions[2].x + dimWidth / 2; + // Position mouse for start of drag + // -------------------------------- + mouseEvent('mousemove', pos.mouseStartX, pos.mouseStartY); - // Check initial dimension order + // Perform drag + // ------------ + mouseEvent('mousedown', pos.mouseStartX, pos.mouseStartY); + + // ### Pause at drag mid-point + mouseEvent('mousemove', pos.mouseMidX, pos.mouseMidY + // {buttons: 1} // Left click + ); + + // Make sure we're dragging the middle dimension + expect(parcatsViewModel.dragDimension.model.dimensionLabel).toEqual('Two'); + + // Make sure dimensions haven't changed order yet, but that + // we do have a drag in progress on the middle dimension + checkMidDragDimensions(dragDimStartX); + + // ### Move to drag end-point + mouseEvent('mousemove', pos.mouseEndX, pos.mouseEndY); + + // Make sure we're still dragging the middle dimension + expect(parcatsViewModel.dragDimension.model.dimensionLabel).toEqual('Two'); + + // End drag + // -------- + mouseEvent('mouseup', pos.mouseEndX, pos.mouseEndY); + + // Make sure we've cleared drag dimension + expect(parcatsViewModel.dragDimension).toEqual(null); + + // Check final dimension order // ----------------------------- - checkDimensionCalc(gd, 0, - {dimensionInd: 0, displayInd: 0, dragX: null, dimensionLabel: 'One', count: 9}); - checkDimensionCalc(gd, 1, - {dimensionInd: 1, displayInd: 1, dragX: null, dimensionLabel: 'Two', count: 9}); - checkDimensionCalc(gd, 2, - {dimensionInd: 2, displayInd: 2, dragX: null, dimensionLabel: 'Three', count: 9}); + checkReorderedDimensions(); + }) + .then(delay(CALLBACK_DELAY)) + .then(function() { + // Check that proper restyle event was emitted + // ------------------------------------------- + expect(restyleCallback).toHaveBeenCalledTimes(1); + expect(restyleCallback).toHaveBeenCalledWith([ + { + 'dimensions[0].displayindex': 0, + 'dimensions[1].displayindex': 2, + 'dimensions[2].displayindex': 1 + }, + [0]]); + restyleCallback.calls.reset(); + }) + .catch(failTest) + .then(done); + }); + it('should support dragging dimension label to reorder dimensions in perpendicular arrangement', function(done) { + + // Set arrangement + mock.data[0].arrangement = 'perpendicular'; + + Plotly.newPlot(gd, mock) + .then(function() { + restyleCallback = jasmine.createSpy('restyleCallback'); + gd.on('plotly_restyle', restyleCallback); + + /** @type {ParcatsViewModel} */ + var parcatsViewModel = d3.select('g.trace.parcats').datum(); + + var dragDimStartX = parcatsViewModel.dimensions[1].x; + var pos = getMousePositions(parcatsViewModel); + + // Check initial dimension order + // ----------------------------- + checkInitialDimensions(); // Position mouse for start of drag // -------------------------------- - mouseEvent('mousemove', mouseStartX, mouseStartY); + mouseEvent('mousemove', pos.mouseStartX, pos.mouseStartY); // Perform drag // ------------ - mouseEvent('mousedown', mouseStartX, mouseStartY); + mouseEvent('mousedown', pos.mouseStartX, pos.mouseStartY); // ### Pause at drag mid-point - mouseEvent('mousemove', mouseMidX, mouseMidY + mouseEvent('mousemove', pos.mouseMidX, pos.mouseMidY // {buttons: 1} // Left click ); @@ -561,34 +677,24 @@ describe('Drag to reordered dimensions and categories', function() { // Make sure dimensions haven't changed order yet, but that // we do have a drag in progress on the middle dimension - checkDimensionCalc(gd, 0, - {dimensionInd: 0, displayInd: 0, dragX: null, dimensionLabel: 'One', count: 9}); - checkDimensionCalc(gd, 1, - {dimensionInd: 1, displayInd: 1, dragX: dragDimStartX + dimDx / 2, dimensionLabel: 'Two', count: 9}); - checkDimensionCalc(gd, 2, - {dimensionInd: 2, displayInd: 2, dragX: null, dimensionLabel: 'Three', count: 9}); + checkMidDragDimensions(dragDimStartX); // ### Move to drag end-point - mouseEvent('mousemove', mouseEndX, mouseEndY); + mouseEvent('mousemove', pos.mouseEndX, pos.mouseEndY); // Make sure we're still dragging the middle dimension expect(parcatsViewModel.dragDimension.model.dimensionLabel).toEqual('Two'); // End drag // -------- - mouseEvent('mouseup', mouseEndX, mouseEndY); + mouseEvent('mouseup', pos.mouseEndX, pos.mouseEndY); // Make sure we've cleared drag dimension expect(parcatsViewModel.dragDimension).toEqual(null); // Check final dimension order // ----------------------------- - checkDimensionCalc(gd, 0, - {dimensionInd: 0, displayInd: 0, dragX: null, dimensionLabel: 'One', count: 9}); - checkDimensionCalc(gd, 1, - {dimensionInd: 1, displayInd: 2, dragX: null, dimensionLabel: 'Two', count: 9}); - checkDimensionCalc(gd, 2, - {dimensionInd: 2, displayInd: 1, dragX: null, dimensionLabel: 'Three', count: 9}); + checkReorderedDimensions(); }) .then(delay(CALLBACK_DELAY)) .then(function() { @@ -596,10 +702,12 @@ describe('Drag to reordered dimensions and categories', function() { // ------------------------------------------- expect(restyleCallback).toHaveBeenCalledTimes(1); expect(restyleCallback).toHaveBeenCalledWith([ - {'dimensions[0].displayindex': 0, + { + 'dimensions[0].displayindex': 0, 'dimensions[1].displayindex': 2, - 'dimensions[2].displayindex': 1}, - [0]]); + 'dimensions[2].displayindex': 1 + }, + [0]]); restyleCallback.calls.reset(); }) @@ -607,7 +715,210 @@ describe('Drag to reordered dimensions and categories', function() { .then(done); }); - it('It should support dragging category to reorder categories and dimensions', function(done) { + it('should NOT support dragging dimension label to reorder dimensions in fixed arrangement', function(done) { + + // Set arrangement + mock.data[0].arrangement = 'fixed'; + + Plotly.newPlot(gd, mock) + .then(function() { + console.log(gd.data); + restyleCallback = jasmine.createSpy('restyleCallback'); + gd.on('plotly_restyle', restyleCallback); + + /** @type {ParcatsViewModel} */ + var parcatsViewModel = d3.select('g.trace.parcats').datum(); + + var dragDimStartX = parcatsViewModel.dimensions[1].x; + var pos = getMousePositions(parcatsViewModel); + + // Check initial dimension order + // ----------------------------- + checkInitialDimensions(); + + // Position mouse for start of drag + // -------------------------------- + mouseEvent('mousemove', pos.mouseStartX, pos.mouseStartY); + + // Perform drag + // ------------ + mouseEvent('mousedown', pos.mouseStartX, pos.mouseStartY); + + // ### Pause at drag mid-point + mouseEvent('mousemove', pos.mouseMidX, pos.mouseMidY + // {buttons: 1} // Left click + ); + + // Make sure we're not dragging any dimension + expect(parcatsViewModel.dragDimension).toEqual(null); + + // Make sure dimensions haven't changed order yet + checkInitialDimensions(); + + // ### Move to drag end-point + mouseEvent('mousemove', pos.mouseEndX, pos.mouseEndY); + + // Make sure we're still not dragging a dimension + expect(parcatsViewModel.dragDimension).toEqual(null); + + // End drag + // -------- + mouseEvent('mouseup', pos.mouseEndX, pos.mouseEndY); + + // Make sure dimensions haven't changed + // ------------------------------------ + checkInitialDimensions(); + }) + .then(delay(CALLBACK_DELAY)) + .then(function() { + // Check that no restyle event was emitted + // --------------------------------------- + expect(restyleCallback).toHaveBeenCalledTimes(0); + restyleCallback.calls.reset(); + }) + .catch(failTest) + .then(done); + }); +}); + +describe('Drag to reordered categories', function() { + + // Variable declarations + // --------------------- + // ### Trace level ### + var gd, + restyleCallback, + mock; + + // Fixtures + // -------- + beforeEach(function() { + gd = createGraphDiv(); + mock = Lib.extendDeep({}, require('@mocks/parcats_basic_freeform.json')); + }); + + afterEach(destroyGraphDiv); + + function getDragPositions(parcatsViewModel) { + var dragDimStartX = parcatsViewModel.dimensions[1].x; + + var mouseStartY = parcatsViewModel.y + parcatsViewModel.dimensions[1].categories[2].y, + mouseStartX = parcatsViewModel.x + dragDimStartX + dimWidth / 2; + + // Pause mouse half-way between the original location of + // the first and second dimensions. Also move mouse + // upward enough to swap position with middle category + var mouseMidY = parcatsViewModel.y + parcatsViewModel.dimensions[1].categories[1].y, + mouseMidX = mouseStartX + dimDx / 2; + + // End mouse drag in the middle of the original + // position of the dimension label of the third dimension + // (dimension display index 2), and at the height of the original top category + var mouseEndY = parcatsViewModel.y, + mouseEndX = parcatsViewModel.x + parcatsViewModel.dimensions[2].x + dimWidth / 2; + return { + dragDimStartX: dragDimStartX, + mouseStartY: mouseStartY, + mouseStartX: mouseStartX, + mouseMidY: mouseMidY, + mouseMidX: mouseMidX, + mouseEndY: mouseEndY, + mouseEndX: mouseEndX + }; + } + + function checkInitialDimensions() { + checkDimensionCalc(gd, 0, + {dimensionInd: 0, displayInd: 0, dragX: null, dimensionLabel: 'One', count: 9}); + checkDimensionCalc(gd, 1, + {dimensionInd: 1, displayInd: 1, dragX: null, dimensionLabel: 'Two', count: 9}); + checkDimensionCalc(gd, 2, + {dimensionInd: 2, displayInd: 2, dragX: null, dimensionLabel: 'Three', count: 9}); + } + + function checkMidDragDimensions(dragDimStartX) { + checkDimensionCalc(gd, 0, + {dimensionInd: 0, displayInd: 0, dragX: null, dimensionLabel: 'One', count: 9}); + checkDimensionCalc(gd, 1, + {dimensionInd: 1, displayInd: 1, dragX: dragDimStartX + dimDx / 2, dimensionLabel: 'Two', count: 9}); + checkDimensionCalc(gd, 2, + {dimensionInd: 2, displayInd: 2, dragX: null, dimensionLabel: 'Three', count: 9}); + } + + function checkInitialCategories() { + checkCategoryCalc(gd, 1, 0, { + categoryLabel: 'A', + categoryInd: 0, + displayInd: 0 + }); + + checkCategoryCalc(gd, 1, 1, { + categoryLabel: 'B', + categoryInd: 1, + displayInd: 1 + }); + + checkCategoryCalc(gd, 1, 2, { + categoryLabel: 'C', + categoryInd: 2, + displayInd: 2 + }); + } + + function checkMidDragCategories() { + checkCategoryCalc(gd, 1, 0, { + categoryLabel: 'A', + categoryInd: 0, + displayInd: 0 + }); + + checkCategoryCalc(gd, 1, 1, { + categoryLabel: 'B', + categoryInd: 1, + displayInd: 2 + }); + + checkCategoryCalc(gd, 1, 2, { + categoryLabel: 'C', + categoryInd: 2, + displayInd: 1 + }); + } + + function checkFinalDimensions() { + checkDimensionCalc(gd, 0, + {dimensionInd: 0, displayInd: 0, dragX: null, dimensionLabel: 'One', count: 9}); + checkDimensionCalc(gd, 1, + {dimensionInd: 1, displayInd: 2, dragX: null, dimensionLabel: 'Two', count: 9}); + checkDimensionCalc(gd, 2, + {dimensionInd: 2, displayInd: 1, dragX: null, dimensionLabel: 'Three', count: 9}); + } + + function checkFinalCategories() { + checkCategoryCalc(gd, 1, 0, { + categoryLabel: 'A', + categoryInd: 0, + displayInd: 1 + }); + + checkCategoryCalc(gd, 1, 1, { + categoryLabel: 'B', + categoryInd: 1, + displayInd: 2 + }); + + checkCategoryCalc(gd, 1, 2, { + categoryLabel: 'C', + categoryInd: 2, + displayInd: 0 + }); + } + + it('should support dragging category to reorder categories and dimensions in freeform arrangement', function(done) { + + // Set arrangement + mock.data[0].arrangement = 'freeform'; + Plotly.newPlot(gd, mock) .then(function() { @@ -621,108 +932,56 @@ describe('Drag to reordered dimensions and categories', function() { // ----------------------- // Start mouse in the middle of the lowest category // second dimensions (dimension display index 1) - var dragDimStartX = parcatsViewModel.dimensions[1].x; - - var mouseStartY = parcatsViewModel.y + parcatsViewModel.dimensions[1].categories[2].y, - mouseStartX = parcatsViewModel.x + dragDimStartX + dimWidth / 2; - - // Pause mouse half-way between the original location of - // the first and second dimensions. Also move mouse - // upward enough to swap position with middle category - var mouseMidY = parcatsViewModel.y + parcatsViewModel.dimensions[1].categories[1].y, - mouseMidX = mouseStartX + dimDx / 2; - - // End mouse drag in the middle of the original - // position of the dimension label of the third dimension - // (dimension display index 2), and at the height of the original top category - var mouseEndY = parcatsViewModel.y, - mouseEndX = parcatsViewModel.x + parcatsViewModel.dimensions[2].x + dimWidth / 2; + var pos = getDragPositions(parcatsViewModel); // Check initial dimension order // ----------------------------- - checkDimensionCalc(gd, 0, - {dimensionInd: 0, displayInd: 0, dragX: null, dimensionLabel: 'One', count: 9}); - checkDimensionCalc(gd, 1, - {dimensionInd: 1, displayInd: 1, dragX: null, dimensionLabel: 'Two', count: 9}); - checkDimensionCalc(gd, 2, - {dimensionInd: 2, displayInd: 2, dragX: null, dimensionLabel: 'Three', count: 9}); + checkInitialDimensions(); + + // Check initial categories + // ------------------------ + checkInitialCategories(); // Position mouse for start of drag // -------------------------------- - mouseEvent('mousemove', mouseStartX, mouseStartY); + mouseEvent('mousemove', pos.mouseStartX, pos.mouseStartY); // Perform drag // ------------ - mouseEvent('mousedown', mouseStartX, mouseStartY); + mouseEvent('mousedown', pos.mouseStartX, pos.mouseStartY); // ### Pause at drag mid-point - mouseEvent('mousemove', mouseMidX, mouseMidY); + mouseEvent('mousemove', pos.mouseMidX, pos.mouseMidY); // Make sure we're dragging the middle dimension expect(parcatsViewModel.dragDimension.model.dimensionLabel).toEqual('Two'); // Make sure dimensions haven't changed order yet, but that // we do have a drag in progress on the middle dimension - checkDimensionCalc(gd, 0, - {dimensionInd: 0, displayInd: 0, dragX: null, dimensionLabel: 'One', count: 9}); - checkDimensionCalc(gd, 1, - {dimensionInd: 1, displayInd: 1, dragX: dragDimStartX + dimDx / 2, dimensionLabel: 'Two', count: 9}); - checkDimensionCalc(gd, 2, - {dimensionInd: 2, displayInd: 2, dragX: null, dimensionLabel: 'Three', count: 9}); + checkMidDragDimensions(pos.dragDimStartX); // Make sure categories in dimension 1 have changed already - checkCategoryCalc(gd, 1, 0, { - categoryLabel: 'A', - categoryInd: 0, - displayInd: 0}); - - checkCategoryCalc(gd, 1, 1, { - categoryLabel: 'B', - categoryInd: 1, - displayInd: 2}); - - checkCategoryCalc(gd, 1, 2, { - categoryLabel: 'C', - categoryInd: 2, - displayInd: 1}); + checkMidDragCategories(); // ### Move to drag end-point - mouseEvent('mousemove', mouseEndX, mouseEndY); + mouseEvent('mousemove', pos.mouseEndX, pos.mouseEndY); // Make sure we're still dragging the middle dimension expect(parcatsViewModel.dragDimension.model.dimensionLabel).toEqual('Two'); // End drag // -------- - mouseEvent('mouseup', mouseEndX, mouseEndY); + mouseEvent('mouseup', pos.mouseEndX, pos.mouseEndY); // Make sure we've cleared drag dimension expect(parcatsViewModel.dragDimension).toEqual(null); // Check final dimension order // ----------------------------- - checkDimensionCalc(gd, 0, - {dimensionInd: 0, displayInd: 0, dragX: null, dimensionLabel: 'One', count: 9}); - checkDimensionCalc(gd, 1, - {dimensionInd: 1, displayInd: 2, dragX: null, dimensionLabel: 'Two', count: 9}); - checkDimensionCalc(gd, 2, - {dimensionInd: 2, displayInd: 1, dragX: null, dimensionLabel: 'Three', count: 9}); + checkFinalDimensions(); // Make sure categories in dimension 1 have changed already - checkCategoryCalc(gd, 1, 0, { - categoryLabel: 'A', - categoryInd: 0, - displayInd: 1}); - - checkCategoryCalc(gd, 1, 1, { - categoryLabel: 'B', - categoryInd: 1, - displayInd: 2}); - - checkCategoryCalc(gd, 1, 2, { - categoryLabel: 'C', - categoryInd: 2, - displayInd: 0}); + checkFinalCategories(); }) .then(delay(CALLBACK_DELAY)) @@ -744,27 +1003,186 @@ describe('Drag to reordered dimensions and categories', function() { .catch(failTest) .then(done); }); -}); -// To Test -// ------- -// ### Drag to reorder categories and dimensions -// - Models before / after -// - View models before / after -// - SVG before / after (include cat/dim labels) -// - Emit restyle event + it('should support dragging category to reorder categories only in perpendicular arrangement', function(done) { + + // Set arrangement + mock.data[0].arrangement = 'perpendicular'; + + Plotly.newPlot(gd, mock) + .then(function() { + + restyleCallback = jasmine.createSpy('restyleCallback'); + gd.on('plotly_restyle', restyleCallback); + + /** @type {ParcatsViewModel} */ + var parcatsViewModel = d3.select('g.trace.parcats').datum(); + + // Compute Mouse positions + // ----------------------- + var pos = getDragPositions(parcatsViewModel); + + // Check initial dimension order + // ----------------------------- + checkInitialDimensions(); + + // Check initial categories + // ------------------------ + checkInitialCategories(); + + // Position mouse for start of drag + // -------------------------------- + mouseEvent('mousemove', pos.mouseStartX, pos.mouseStartY); + + // Perform drag + // ------------ + mouseEvent('mousedown', pos.mouseStartX, pos.mouseStartY); + + // ### Pause at drag mid-point + mouseEvent('mousemove', pos.mouseMidX, pos.mouseMidY); + + // Make sure we're dragging the middle dimension + expect(parcatsViewModel.dragDimension.model.dimensionLabel).toEqual('Two'); + + // Make sure dimensions haven't changed order or position + checkInitialDimensions(); + + // Make sure categories in dimension 1 have changed already + checkMidDragCategories(); + + // ### Move to drag end-point + mouseEvent('mousemove', pos.mouseEndX, pos.mouseEndY); + + // Make sure we're still dragging the middle dimension + expect(parcatsViewModel.dragDimension.model.dimensionLabel).toEqual('Two'); -// ### Restyle / Animate + // End drag + // -------- + mouseEvent('mouseup', pos.mouseEndX, pos.mouseEndY); -// ### Events -// - Hover events (category, path) -// - Click events (category, path) + // Make sure we've cleared drag dimension + expect(parcatsViewModel.dragDimension).toEqual(null); -// ### Hover mode -// - SVG display for each category hover mode -// - SVG display for path hover mode -// - Test tooltip message with counts set + // Check final dimension order + // --------------------------- + // Dimension order should not have changed + checkInitialDimensions(); + // Make sure categories in dimension 1 have changed already + checkFinalCategories(); + }) + .then(delay(CALLBACK_DELAY)) + .then(function() { + // Check that proper restyle event was emitted + // ------------------------------------------- + expect(restyleCallback).toHaveBeenCalledTimes(1); + expect(restyleCallback).toHaveBeenCalledWith([ + { + 'dimensions[1].categoryorder': 'array', + 'dimensions[1].categoryarray': [['C', 'A', 'B' ]], + 'dimensions[1].categorylabels': [['C', 'A', 'B' ]]}, + [0]]); + + restyleCallback.calls.reset(); + }) + .catch(failTest) + .then(done); + }); + + it('should NOT support dragging category to reorder categories or dimensions in fixed arrangement', function(done) { + + // Set arrangement + mock.data[0].arrangement = 'fixed'; + + Plotly.newPlot(gd, mock) + .then(function() { + + restyleCallback = jasmine.createSpy('restyleCallback'); + gd.on('plotly_restyle', restyleCallback); + + /** @type {ParcatsViewModel} */ + var parcatsViewModel = d3.select('g.trace.parcats').datum(); + + // Compute Mouse positions + // ----------------------- + var pos = getDragPositions(parcatsViewModel); + + // Check initial dimension order + // ----------------------------- + checkInitialDimensions(); + + // Check initial categories + // ------------------------ + checkInitialCategories(); + + // Position mouse for start of drag + // -------------------------------- + mouseEvent('mousemove', pos.mouseStartX, pos.mouseStartY); + + // Perform drag + // ------------ + mouseEvent('mousedown', pos.mouseStartX, pos.mouseStartY); + + // ### Pause at drag mid-point + mouseEvent('mousemove', pos.mouseMidX, pos.mouseMidY); + + // Make sure we're not dragging a dimension + expect(parcatsViewModel.dragDimension).toEqual(null); + + // Make sure dimensions and categories haven't changed order + checkInitialDimensions(); + checkInitialCategories(); + + // ### Move to drag end-point + mouseEvent('mousemove', pos.mouseEndX, pos.mouseEndY); + + // Make sure we're still not dragging a dimension + expect(parcatsViewModel.dragDimension).toEqual(null); + + // End drag + // -------- + mouseEvent('mouseup', pos.mouseEndX, pos.mouseEndY); + + // Check final dimension order + // --------------------------- + // Dimension and category order should not have changed + checkInitialDimensions(); + checkInitialCategories(); + }) + .then(delay(CALLBACK_DELAY)) + .then(function() { + // Check that no restyle event was emitted + // --------------------------------------- + expect(restyleCallback).toHaveBeenCalledTimes(0); + restyleCallback.calls.reset(); + }) + .catch(failTest) + .then(done); + }); +}); + +// To Test +// ------- +// ### Hovering +// - [ ] Path hover label +// - [ ] Category hover label for 'category', 'color', and 'dimension', `hovermode` +// - [ ] No category hover label for 'none', 'skip' `hovermode +// - [ ] Events emitted on path hover +// - [ ] Events emitted on category hover in 'category', 'color', 'dimension', and 'none' `hovermode` +// - [ ] No events emitted on category or path in 'skip' `hovermode` +// In each case, check hoverinfo text +// +// ### Clicking +// - [ ] Path click events fired unless `hovermode` is 'skip' +// - [ ] Category/color click events fired unless `hovermode` is 'skip' +// +// ### Test that properties have the desired effect on models +// - [ ] visible +// - [ ] counts +// - [ ] bundlecolors +// - [ ] sortpaths +// +// // ### Test Font styles ### // ### Test visible From 66f21fe1065f3b9c88eb9f58b9ba25d0ffe705e1 Mon Sep 17 00:00:00 2001 From: "Jon M. Mease" Date: Thu, 23 Aug 2018 15:27:47 -0400 Subject: [PATCH 25/50] Add tests for clicking on category and path with/without hoverinfo skip --- src/traces/parcats/parcats.js | 12 +- test/jasmine/tests/parcats_test.js | 179 +++++++++++++++++++++++++++-- 2 files changed, 179 insertions(+), 12 deletions(-) diff --git a/src/traces/parcats/parcats.js b/src/traces/parcats/parcats.js index 1cd49eec4e1..ddcdaf8757c 100644 --- a/src/traces/parcats/parcats.js +++ b/src/traces/parcats/parcats.js @@ -1184,11 +1184,13 @@ function dragDimensionEnd(d) { // Handle potential click event // ---------------------------- - if(!d.dragHasMoved && d.potentialClickBand) { - if(d.parcatsViewModel.hovermode === 'color') { - emitPointsEventColorHovermode(d.potentialClickBand, 'plotly_click', d3.event.sourceEvent); - } else { - emitPointsEventCategoryHovermode(d.potentialClickBand, 'plotly_click', d3.event.sourceEvent); + if(d.parcatsViewModel.hoverinfoItems.indexOf('skip') === -1) { + if (!d.dragHasMoved && d.potentialClickBand) { + if (d.parcatsViewModel.hovermode === 'color') { + emitPointsEventColorHovermode(d.potentialClickBand, 'plotly_click', d3.event.sourceEvent); + } else { + emitPointsEventCategoryHovermode(d.potentialClickBand, 'plotly_click', d3.event.sourceEvent); + } } } diff --git a/test/jasmine/tests/parcats_test.js b/test/jasmine/tests/parcats_test.js index ef9a0cc01fe..894f44c5067 100644 --- a/test/jasmine/tests/parcats_test.js +++ b/test/jasmine/tests/parcats_test.js @@ -5,6 +5,7 @@ var createGraphDiv = require('../assets/create_graph_div'); var destroyGraphDiv = require('../assets/destroy_graph_div'); var failTest = require('../assets/fail_test'); var mouseEvent = require('../assets/mouse_event'); +var click = require('../assets/click'); var delay = require('../assets/delay'); var CALLBACK_DELAY = 500; @@ -802,7 +803,7 @@ describe('Drag to reordered categories', function() { function getDragPositions(parcatsViewModel) { var dragDimStartX = parcatsViewModel.dimensions[1].x; - var mouseStartY = parcatsViewModel.y + parcatsViewModel.dimensions[1].categories[2].y, + var mouseStartY = parcatsViewModel.y + parcatsViewModel.dimensions[1].categories[2].y + 10, mouseStartX = parcatsViewModel.x + dragDimStartX + dimWidth / 2; // Pause mouse half-way between the original location of @@ -1092,7 +1093,7 @@ describe('Drag to reordered categories', function() { it('should NOT support dragging category to reorder categories or dimensions in fixed arrangement', function(done) { // Set arrangement - mock.data[0].arrangement = 'fixed'; + mock.data[0].arrangement = 'fixed'; Plotly.newPlot(gd, mock) .then(function() { @@ -1161,6 +1162,174 @@ describe('Drag to reordered categories', function() { }); }); + +describe('Click events', function() { + + // Variable declarations + // --------------------- + // ### Trace level ### + var gd, + mock; + + // Fixtures + // -------- + beforeEach(function() { + gd = createGraphDiv(); + mock = Lib.extendDeep({}, require('@mocks/parcats_basic_freeform.json')); + }); + + afterEach(destroyGraphDiv); + + it('should fire on category click', function(done) { + + var clickData; + Plotly.newPlot(gd, mock) + .then(function() { + /** @type {ParcatsViewModel} */ + var parcatsViewModel = d3.select('g.trace.parcats').datum(); + + gd.on('plotly_click', function(data) { + clickData = data; + }); + + // Click on the lowest category in the middle dimension (category "C") + var dimStartX = parcatsViewModel.dimensions[1].x; + var mouseY = parcatsViewModel.y + parcatsViewModel.dimensions[1].categories[2].y + 10, + mouseX = parcatsViewModel.x + dimStartX + dimWidth / 2; + + // Position mouse for start of drag + // -------------------------------- + click(mouseX, mouseY); + }) + .then(delay(CALLBACK_DELAY)) + .then(function() { + // Check that click callback was called + expect(clickData).toBeDefined(); + + // Check that the right points were reported + var pts = clickData.points.sort(function(a, b) { + return a.pointNumber - b.pointNumber; + }); + + // Check points + expect(pts).toEqual([ + {curveNumber: 0, pointNumber: 4}, + {curveNumber: 0, pointNumber: 5}, + {curveNumber: 0, pointNumber: 8}]); + }) + .catch(failTest) + .then(done); + }); + + it('should NOT fire on category click if hoverinfo is skip', function(done) { + + var clickData; + mock.data[0].hoverinfo = 'skip'; + + Plotly.newPlot(gd, mock) + .then(function() { + /** @type {ParcatsViewModel} */ + var parcatsViewModel = d3.select('g.trace.parcats').datum(); + + console.log(gd.data[0]); + console.log(parcatsViewModel.hoverinfoItems); + + gd.on('plotly_click', function(data) { + clickData = data; + }); + + // Click on the lowest category in the middle dimension (category "C") + var dimStartX = parcatsViewModel.dimensions[1].x; + var mouseY = parcatsViewModel.y + parcatsViewModel.dimensions[1].categories[2].y + 10, + mouseX = parcatsViewModel.x + dimStartX + dimWidth / 2; + + // Position mouse for start of drag + // -------------------------------- + click(mouseX, mouseY); + }) + .then(delay(CALLBACK_DELAY)) + .then(function() { + // Check that click callback was called + expect(clickData).toBeUndefined(); + }) + .catch(failTest) + .then(done); + }); + + it('should fire on path click', function(done) { + + var clickData; + + Plotly.newPlot(gd, mock) + .then(function() { + /** @type {ParcatsViewModel} */ + var parcatsViewModel = d3.select('g.trace.parcats').datum(); + + gd.on('plotly_click', function(data) { + clickData = data; + }); + + // Click on the top path to the right of the lowest category in the middle dimension (category "C") + var dimStartX = parcatsViewModel.dimensions[1].x; + var mouseY = parcatsViewModel.y + parcatsViewModel.dimensions[1].categories[2].y + 10, + mouseX = parcatsViewModel.x + dimStartX + dimWidth + 10; + + // Position mouse for start of drag + // -------------------------------- + click(mouseX, mouseY); + }) + .then(delay(CALLBACK_DELAY)) + .then(function() { + // Check that click callback was called + expect(clickData).toBeDefined(); + + // Check that the right points were reported + var pts = clickData.points.sort(function(a, b) { + return a.pointNumber - b.pointNumber; + }); + + // Check points + expect(pts).toEqual([ + {curveNumber: 0, pointNumber: 5}, + {curveNumber: 0, pointNumber: 8}]); + }) + .catch(failTest) + .then(done); + }); + + it('should NOT fire on path click if hoverinfo is skip', function(done) { + + var clickData; + mock.data[0].hoverinfo = 'skip'; + + Plotly.newPlot(gd, mock) + .then(function() { + /** @type {ParcatsViewModel} */ + var parcatsViewModel = d3.select('g.trace.parcats').datum(); + + gd.on('plotly_click', function(data) { + clickData = data; + }); + + // Click on the top path to the right of the lowest category in the middle dimension (category "C") + var dimStartX = parcatsViewModel.dimensions[1].x; + var mouseY = parcatsViewModel.y + parcatsViewModel.dimensions[1].categories[2].y + 10, + mouseX = parcatsViewModel.x + dimStartX + dimWidth + 10; + + // Position mouse for start of drag + // -------------------------------- + click(mouseX, mouseY); + }) + .then(delay(CALLBACK_DELAY)) + .then(function() { + // Check that click callback was called + expect(clickData).toBeUndefined(); + }) + .catch(failTest) + .then(done); + }); +}); + // To Test // ------- // ### Hovering @@ -1171,11 +1340,7 @@ describe('Drag to reordered categories', function() { // - [ ] Events emitted on category hover in 'category', 'color', 'dimension', and 'none' `hovermode` // - [ ] No events emitted on category or path in 'skip' `hovermode` // In each case, check hoverinfo text -// -// ### Clicking -// - [ ] Path click events fired unless `hovermode` is 'skip' -// - [ ] Category/color click events fired unless `hovermode` is 'skip' -// + // ### Test that properties have the desired effect on models // - [ ] visible // - [ ] counts From 30ca2ec1efc5b89640757d0593b33713c7b9b1fe Mon Sep 17 00:00:00 2001 From: "Jon M. Mease" Date: Sat, 1 Sep 2018 10:14:27 -0400 Subject: [PATCH 26/50] Add tests for clicking on category and path with hovermode 'color' --- test/jasmine/tests/parcats_test.js | 104 +++++++++++++++++++++++++++-- 1 file changed, 100 insertions(+), 4 deletions(-) diff --git a/test/jasmine/tests/parcats_test.js b/test/jasmine/tests/parcats_test.js index 894f44c5067..1a6370a2def 100644 --- a/test/jasmine/tests/parcats_test.js +++ b/test/jasmine/tests/parcats_test.js @@ -1330,9 +1330,109 @@ describe('Click events', function() { }); }); +describe('Click events with hovermode color', function() { + + // Variable declarations + // --------------------- + // ### Trace level ### + var gd, + mock; + + // Fixtures + // -------- + beforeEach(function() { + gd = createGraphDiv(); + mock = Lib.extendDeep({}, require('@mocks/parcats_hovermode_color.json')); + }); + + afterEach(destroyGraphDiv); + + it('should fire on category click', function(done) { + + var clickData; + Plotly.newPlot(gd, mock) + .then(function() { + /** @type {ParcatsViewModel} */ + var parcatsViewModel = d3.select('g.trace.parcats').datum(); + + gd.on('plotly_click', function(data) { + clickData = data; + }); + + // Click on the top of the lowest category in the middle dimension (category "C") + var dimStartX = parcatsViewModel.dimensions[1].x; + var mouseY = parcatsViewModel.y + parcatsViewModel.dimensions[1].categories[2].y + 10, + mouseX = parcatsViewModel.x + dimStartX + dimWidth / 2; + + // Position mouse for start of drag + // -------------------------------- + click(mouseX, mouseY); + }) + .then(delay(CALLBACK_DELAY)) + .then(function() { + // Check that click callback was called + expect(clickData).toBeDefined(); + + // Check that the right points were reported + var pts = clickData.points.sort(function(a, b) { + return a.pointNumber - b.pointNumber; + }); + + // Check points + expect(pts).toEqual([ + {curveNumber: 0, pointNumber: 5}]); + }) + .catch(failTest) + .then(done); + }); + + + it('should fire on path click', function(done) { + + var clickData; + + Plotly.newPlot(gd, mock) + .then(function() { + /** @type {ParcatsViewModel} */ + var parcatsViewModel = d3.select('g.trace.parcats').datum(); + + gd.on('plotly_click', function(data) { + clickData = data; + }); + + // Click on the top path to the right of the lowest category in the middle dimension (category "C") + var dimStartX = parcatsViewModel.dimensions[1].x; + var mouseY = parcatsViewModel.y + parcatsViewModel.dimensions[1].categories[2].y + 10, + mouseX = parcatsViewModel.x + dimStartX + dimWidth + 10; + + // Position mouse for start of drag + // -------------------------------- + click(mouseX, mouseY); + }) + .then(delay(CALLBACK_DELAY)) + .then(function() { + // Check that click callback was called + expect(clickData).toBeDefined(); + + // Check that the right points were reported + var pts = clickData.points.sort(function(a, b) { + return a.pointNumber - b.pointNumber; + }); + + // Check points + expect(pts).toEqual([ + {curveNumber: 0, pointNumber: 5}]); + }) + .catch(failTest) + .then(done); + }); +}); + // To Test // ------- + // ### Hovering +// - Hover down to top middle category, and top path. // - [ ] Path hover label // - [ ] Category hover label for 'category', 'color', and 'dimension', `hovermode` // - [ ] No category hover label for 'none', 'skip' `hovermode @@ -1349,7 +1449,3 @@ describe('Click events', function() { // // // ### Test Font styles ### - -// ### Test visible - -// ### Test colorscale with numeric colors From 69311fc8e4c1df989f4d8157490f6448de696fca Mon Sep 17 00:00:00 2001 From: "Jon M. Mease" Date: Sat, 1 Sep 2018 11:13:21 -0400 Subject: [PATCH 27/50] Implement plotly_unhover events --- src/traces/parcats/parcats.js | 34 ++++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/src/traces/parcats/parcats.js b/src/traces/parcats/parcats.js index ddcdaf8757c..56bb27e31a3 100644 --- a/src/traces/parcats/parcats.js +++ b/src/traces/parcats/parcats.js @@ -311,9 +311,7 @@ function performPlot(parcatsModels, graphDiv, layout, svg) { // categorySelection.select('rect.catrect') categorySelection.selectAll('rect.bandrect') .on('mouseover', mouseoverCategoryBand) - .on('mouseout', function(d) { - mouseoutCategory(d.parcatsViewModel); - }); + .on('mouseout', mouseoutCategory); // Remove unused categories categorySelection.exit().remove(); @@ -481,6 +479,12 @@ function mouseoutPath(d) { // Restore path order d.parcatsViewModel.pathSelection.sort(compareRawColor); + + // Emit unhover event + if(d.parcatsViewModel.hoverinfoItems.indexOf('skip') === -1) { + var points = buildPointsArrayForPath(d); + d.parcatsViewModel.graphDiv.emit('plotly_unhover', {points: points, event: d3.event}); + } } } @@ -930,11 +934,14 @@ function mouseoverCategoryBand(bandViewModel) { } } + /** - * Handle dimension mouseout - * @param {ParcatsViewModel} parcatsViewModel + * Handle dimension mouseover + * @param {CategoryBandViewModel} bandViewModel */ -function mouseoutCategory(parcatsViewModel) { +function mouseoutCategory(bandViewModel) { + + var parcatsViewModel = bandViewModel.parcatsViewModel; if(!parcatsViewModel.dragDimension) { // We're not dragging anything @@ -949,6 +956,21 @@ function mouseoutCategory(parcatsViewModel) { // Restore path order parcatsViewModel.pathSelection.sort(compareRawColor); + + // Emit unhover event + if(parcatsViewModel.hoverinfoItems.indexOf('skip') === -1) { + + var hovermode = bandViewModel.parcatsViewModel.hovermode; + var bandElement = this; + + // Handle style and events + if (hovermode === 'color') { + emitPointsEventColorHovermode(bandElement, 'plotly_unhover', d3.event); + } else { + console.log('mouseoutCategory: ' + hovermode); + emitPointsEventCategoryHovermode(bandElement, 'plotly_unhover', d3.event); + } + } } } From b3b73a6d76f23e1d4482c9d75fb919b64a0525cb Mon Sep 17 00:00:00 2001 From: "Jon M. Mease" Date: Sat, 1 Sep 2018 11:13:41 -0400 Subject: [PATCH 28/50] Add tests for hovering on category and paths --- test/jasmine/tests/parcats_test.js | 328 +++++++++++++++++++++++++++-- 1 file changed, 307 insertions(+), 21 deletions(-) diff --git a/test/jasmine/tests/parcats_test.js b/test/jasmine/tests/parcats_test.js index 1a6370a2def..13164d6e437 100644 --- a/test/jasmine/tests/parcats_test.js +++ b/test/jasmine/tests/parcats_test.js @@ -1428,24 +1428,310 @@ describe('Click events with hovermode color', function() { }); }); -// To Test -// ------- - -// ### Hovering -// - Hover down to top middle category, and top path. -// - [ ] Path hover label -// - [ ] Category hover label for 'category', 'color', and 'dimension', `hovermode` -// - [ ] No category hover label for 'none', 'skip' `hovermode -// - [ ] Events emitted on path hover -// - [ ] Events emitted on category hover in 'category', 'color', 'dimension', and 'none' `hovermode` -// - [ ] No events emitted on category or path in 'skip' `hovermode` -// In each case, check hoverinfo text - -// ### Test that properties have the desired effect on models -// - [ ] visible -// - [ ] counts -// - [ ] bundlecolors -// - [ ] sortpaths -// -// -// ### Test Font styles ### +describe('Hover events', function() { + + // Variable declarations + // --------------------- + // ### Trace level ### + var gd, + mock; + + // Fixtures + // -------- + beforeEach(function() { + gd = createGraphDiv(); + mock = Lib.extendDeep({}, require('@mocks/parcats_basic_freeform.json')); + }); + + afterEach(destroyGraphDiv); + + it('hover and unhover should fire on category', function(done) { + + var hoverData, + unhoverData, + mouseY0, + mouseX0; + + Plotly.newPlot(gd, mock) + .then(function() { + /** @type {ParcatsViewModel} */ + var parcatsViewModel = d3.select('g.trace.parcats').datum(); + + gd.on('plotly_hover', function(data) { + hoverData = data; + }); + + gd.on('plotly_unhover', function(data) { + unhoverData = data; + }); + + // Hover over top category of middle dimension (category "A") + var dimStartX = parcatsViewModel.dimensions[1].x; + + mouseY0 = parcatsViewModel.y + parcatsViewModel.dimensions[1].categories[2].y + 10; + mouseX0 = parcatsViewModel.x + dimStartX + dimWidth / 2; + + // Position mouse for start of drag + // -------------------------------- + mouseEvent('mousemove', mouseX0, mouseY0); + mouseEvent('mouseover', mouseX0, mouseY0); + Lib.clearThrottle(); + }) + .then(delay(CALLBACK_DELAY)) + .then(function() { + // Check that hover callback was called + expect(hoverData).toBeDefined(); + + // Check that the right points were reported + var pts = hoverData.points.sort(function(a, b) { + return a.pointNumber - b.pointNumber; + }); + expect(pts).toEqual([ + {curveNumber: 0, pointNumber: 4}, + {curveNumber: 0, pointNumber: 5}, + {curveNumber: 0, pointNumber: 8}]); + + // Check that unhover is still undefined + expect(unhoverData).toBeUndefined(); + }) + .then(function(){ + // Unhover + mouseEvent('mouseout', mouseX0, mouseY0); + Lib.clearThrottle(); + }) + .then(function(){ + // Check that unhover callback was called + expect(unhoverData).toBeDefined(); + + // Check that the right points were reported + var pts = unhoverData.points.sort(function(a, b) { + return a.pointNumber - b.pointNumber; + }); + expect(pts).toEqual([ + {curveNumber: 0, pointNumber: 4}, + {curveNumber: 0, pointNumber: 5}, + {curveNumber: 0, pointNumber: 8}]); + }) + .catch(failTest) + .then(done); + }); + + it('hover and unhover should fire on path', function(done) { + + var hoverData, + unhoverData, + mouseY0, + mouseX0; + + Plotly.newPlot(gd, mock) + .then(function() { + /** @type {ParcatsViewModel} */ + var parcatsViewModel = d3.select('g.trace.parcats').datum(); + + gd.on('plotly_hover', function(data) { + hoverData = data; + }); + + gd.on('plotly_unhover', function(data) { + unhoverData = data; + }); + + + var dimStartX = parcatsViewModel.dimensions[1].x; + mouseY0 = parcatsViewModel.y + parcatsViewModel.dimensions[1].categories[2].y + 10; + mouseX0 = parcatsViewModel.x + dimStartX + dimWidth + 10; + + // Position mouse for start of drag + // -------------------------------- + mouseEvent('mousemove', mouseX0, mouseY0); + mouseEvent('mouseover', mouseX0, mouseY0); + Lib.clearThrottle(); + }) + .then(delay(CALLBACK_DELAY)) + .then(function() { + // Check that hover callback was called + expect(hoverData).toBeDefined(); + + // Check that the right points were reported + var pts = hoverData.points.sort(function(a, b) { + return a.pointNumber - b.pointNumber; + }); + expect(pts).toEqual([ + {curveNumber: 0, pointNumber: 5}, + {curveNumber: 0, pointNumber: 8}]); + + // Check that unhover is still undefined + expect(unhoverData).toBeUndefined(); + }) + .then(function(){ + // Unhover + mouseEvent('mouseout', mouseX0, mouseY0); + Lib.clearThrottle(); + }) + .then(function(){ + // Check that unhover callback was called + expect(unhoverData).toBeDefined(); + + // Check that the right points were reported + var pts = unhoverData.points.sort(function(a, b) { + return a.pointNumber - b.pointNumber; + }); + expect(pts).toEqual([ + {curveNumber: 0, pointNumber: 5}, + {curveNumber: 0, pointNumber: 8}]); + }) + .catch(failTest) + .then(done); + }); +}); + +describe('Hover events with hovermode color', function() { + + // Variable declarations + // --------------------- + // ### Trace level ### + var gd, + mock; + + // Fixtures + // -------- + beforeEach(function() { + gd = createGraphDiv(); + mock = Lib.extendDeep({}, require('@mocks/parcats_hovermode_color.json')); + }); + + afterEach(destroyGraphDiv); + + it('hover and unhover should fire on category hovermode color', function(done) { + + var hoverData, + unhoverData, + mouseY0, + mouseX0; + + Plotly.newPlot(gd, mock) + .then(function() { + /** @type {ParcatsViewModel} */ + var parcatsViewModel = d3.select('g.trace.parcats').datum(); + + gd.on('plotly_hover', function(data) { + hoverData = data; + }); + + gd.on('plotly_unhover', function(data) { + unhoverData = data; + }); + + // Hover over top category of middle dimension (category "A") + var dimStartX = parcatsViewModel.dimensions[1].x; + + mouseY0 = parcatsViewModel.y + parcatsViewModel.dimensions[1].categories[2].y + 10; + mouseX0 = parcatsViewModel.x + dimStartX + dimWidth / 2; + + // Position mouse for start of drag + // -------------------------------- + mouseEvent('mousemove', mouseX0, mouseY0); + mouseEvent('mouseover', mouseX0, mouseY0); + Lib.clearThrottle(); + }) + .then(delay(CALLBACK_DELAY)) + .then(function() { + // Check that hover callback was called + expect(hoverData).toBeDefined(); + + // Check that the right points were reported + var pts = hoverData.points.sort(function(a, b) { + return a.pointNumber - b.pointNumber; + }); + expect(pts).toEqual([ + {curveNumber: 0, pointNumber: 5}]); + + // Check that unhover is still undefined + expect(unhoverData).toBeUndefined(); + }) + .then(function(){ + // Unhover + mouseEvent('mouseout', mouseX0, mouseY0); + Lib.clearThrottle(); + }) + .then(function(){ + // Check that unhover callback was called + expect(unhoverData).toBeDefined(); + + // Check that the right points were reported + var pts = unhoverData.points.sort(function(a, b) { + return a.pointNumber - b.pointNumber; + }); + expect(pts).toEqual([ + {curveNumber: 0, pointNumber: 5}]); + }) + .catch(failTest) + .then(done); + }); + + it('hover and unhover should fire on path hovermode color', function(done) { + + var hoverData, + unhoverData, + mouseY0, + mouseX0; + + Plotly.newPlot(gd, mock) + .then(function() { + /** @type {ParcatsViewModel} */ + var parcatsViewModel = d3.select('g.trace.parcats').datum(); + + gd.on('plotly_hover', function(data) { + hoverData = data; + }); + + gd.on('plotly_unhover', function(data) { + unhoverData = data; + }); + + + var dimStartX = parcatsViewModel.dimensions[1].x; + mouseY0 = parcatsViewModel.y + parcatsViewModel.dimensions[1].categories[2].y + 10; + mouseX0 = parcatsViewModel.x + dimStartX + dimWidth + 10; + + // Position mouse for start of drag + // -------------------------------- + mouseEvent('mousemove', mouseX0, mouseY0); + mouseEvent('mouseover', mouseX0, mouseY0); + Lib.clearThrottle(); + }) + .then(delay(CALLBACK_DELAY)) + .then(function() { + // Check that hover callback was called + expect(hoverData).toBeDefined(); + + // Check that the right points were reported + var pts = hoverData.points.sort(function(a, b) { + return a.pointNumber - b.pointNumber; + }); + expect(pts).toEqual([ + {curveNumber: 0, pointNumber: 5}]); + + // Check that unhover is still undefined + expect(unhoverData).toBeUndefined(); + }) + .then(function(){ + // Unhover + mouseEvent('mouseout', mouseX0, mouseY0); + Lib.clearThrottle(); + }) + .then(function(){ + // Check that unhover callback was called + expect(unhoverData).toBeDefined(); + + // Check that the right points were reported + var pts = unhoverData.points.sort(function(a, b) { + return a.pointNumber - b.pointNumber; + }); + expect(pts).toEqual([ + {curveNumber: 0, pointNumber: 5}]); + }) + .catch(failTest) + .then(done); + }); +}); From fed71e794ee1aa84eaa06b4fce6fdc0e026d46ef Mon Sep 17 00:00:00 2001 From: "Jon M. Mease" Date: Sat, 1 Sep 2018 11:20:18 -0400 Subject: [PATCH 29/50] eslint fixes --- src/traces/parcats/calc.js | 6 +- src/traces/parcats/defaults.js | 1 - src/traces/parcats/parcats.js | 93 +++++++++++++++--------------- test/jasmine/tests/parcats_test.js | 74 ++++++++++++------------ 4 files changed, 85 insertions(+), 89 deletions(-) diff --git a/src/traces/parcats/calc.js b/src/traces/parcats/calc.js index 0773c027dde..ae0d5323cc4 100644 --- a/src/traces/parcats/calc.js +++ b/src/traces/parcats/calc.js @@ -45,17 +45,17 @@ module.exports = function calc(gd, trace) { // UniqueInfo per dimension var uniqueInfoDims = trace.dimensions.filter(visible).map(function(dim) { var categoryValues; - if (dim.categoryorder === 'trace') { + if(dim.categoryorder === 'trace') { // Use order of first occurrence in trace categoryValues = null; - } else if (dim.categoryorder === 'array') { + } else if(dim.categoryorder === 'array') { // Use categories specified in `categoryarray` first, then add extra to the end in trace order categoryValues = dim.categoryarray; } else { // Get all categories up front so we can order them // Should we check for numbers as sort numerically? categoryValues = filterUnique(dim.values).sort(); - if (dim.categoryorder === 'category descending') { + if(dim.categoryorder === 'category descending') { categoryValues = categoryValues.reverse(); } } diff --git a/src/traces/parcats/defaults.js b/src/traces/parcats/defaults.js index c23b7b817c1..f4c22d3fb5a 100644 --- a/src/traces/parcats/defaults.js +++ b/src/traces/parcats/defaults.js @@ -14,7 +14,6 @@ var colorscaleDefaults = require('../../components/colorscale/defaults'); var handleDomainDefaults = require('../../plots/domain').defaults; var handleArrayContainerDefaults = require('../../plots/array_container_defaults'); -var handleCategoryOrderDefaults = require('../../plots/cartesian/category_order_defaults'); var attributes = require('./attributes'); var mergeLength = require('../parcoords/merge_length'); diff --git a/src/traces/parcats/parcats.js b/src/traces/parcats/parcats.js index 56bb27e31a3..c6acee71687 100644 --- a/src/traces/parcats/parcats.js +++ b/src/traces/parcats/parcats.js @@ -210,14 +210,14 @@ function performPlot(parcatsModels, graphDiv, layout, svg) { .attr('cursor', /** @param {CategoryBandViewModel} bandModel*/ function(bandModel) { - if (bandModel.parcatsViewModel.arrangement === 'fixed') { - return 'default' - } else if (bandModel.parcatsViewModel.arrangement === 'perpendicular') { - return 'ns-resize' + if(bandModel.parcatsViewModel.arrangement === 'fixed') { + return 'default'; + } else if(bandModel.parcatsViewModel.arrangement === 'perpendicular') { + return 'ns-resize'; } else { - return 'move' - } - }); + return 'move'; + } + }); styleBandsNoHover(bandsSelectionEnter); @@ -267,7 +267,7 @@ function performPlot(parcatsModels, graphDiv, layout, svg) { }) .each( /** @param {CategoryViewModel} catModel*/ - function(catModel){ + function(catModel) { Drawing.font(d3.select(this), catModel.parcatsViewModel.categorylabelfont); }); @@ -283,10 +283,10 @@ function performPlot(parcatsModels, graphDiv, layout, svg) { .attr('cursor', /** @param {CategoryViewModel} catModel*/ function(catModel) { - if (catModel.parcatsViewModel.arrangement === 'fixed') { + if(catModel.parcatsViewModel.arrangement === 'fixed') { return 'default'; } else { - return 'ew-resize' + return 'ew-resize'; } }) .attr('x', function(d) { @@ -303,7 +303,7 @@ function performPlot(parcatsModels, graphDiv, layout, svg) { }) .each( /** @param {CategoryViewModel} catModel*/ - function(catModel){ + function(catModel) { Drawing.font(d3.select(this), catModel.parcatsViewModel.labelfont); }); @@ -436,10 +436,10 @@ function mouseoverPath(d) { // Build hover text var hovertextParts = []; - if (d.parcatsViewModel.hoverinfoItems.indexOf('count') !== -1) { + if(d.parcatsViewModel.hoverinfoItems.indexOf('count') !== -1) { hovertextParts.push(['Count:', d.model.count].join(' ')); } - if (d.parcatsViewModel.hoverinfoItems.indexOf('probability') !== -1) { + if(d.parcatsViewModel.hoverinfoItems.indexOf('probability') !== -1) { hovertextParts.push(['P:', (d.model.count / d.parcatsViewModel.model.count).toFixed(3)].join(' ')); } @@ -513,7 +513,7 @@ function buildPointsArrayForPath(d) { * @param {PathViewModel} d */ function clickPath(d) { - if (d.parcatsViewModel.hoverinfoItems.indexOf('skip') === -1) { + if(d.parcatsViewModel.hoverinfoItems.indexOf('skip') === -1) { // hoverinfo it's skip, so interaction events aren't disabled var points = buildPointsArrayForPath(d); d.parcatsViewModel.graphDiv.emit('plotly_click', {points: points, event: d3.event}); @@ -729,13 +729,13 @@ function createHoverLabelForCategoryHovermode(rootBBox, bandElement) { // Hover label text var hoverinfoParts = []; - if (catViewModel.parcatsViewModel.hoverinfoItems.indexOf('count') !== -1) { - hoverinfoParts.push(['Count:', catViewModel.model.count].join(' ')) + if(catViewModel.parcatsViewModel.hoverinfoItems.indexOf('count') !== -1) { + hoverinfoParts.push(['Count:', catViewModel.model.count].join(' ')); } - if (catViewModel.parcatsViewModel.hoverinfoItems.indexOf('probability') !== -1) { + if(catViewModel.parcatsViewModel.hoverinfoItems.indexOf('probability') !== -1) { hoverinfoParts.push([ 'P(' + catViewModel.model.categoryLabel + '):', - (catViewModel.model.count / catViewModel.parcatsViewModel.model.count).toFixed(3)].join(' ')) + (catViewModel.model.count / catViewModel.parcatsViewModel.model.count).toFixed(3)].join(' ')); } var hovertext = hoverinfoParts.join('
'); @@ -773,7 +773,7 @@ function createHoverLabelForDimensionHovermode(rootBBox, bandElement) { allHoverlabels.push(createHoverLabelForCategoryHovermode(rootBBox, bandNode)); }); - return allHoverlabels + return allHoverlabels; } /** @@ -837,10 +837,10 @@ function createHoverLabelForColorHovermode(rootBBox, bandElement) { // Hover label text var hoverinfoParts = []; - if (catViewModel.parcatsViewModel.hoverinfoItems.indexOf('count') !== -1) { - hoverinfoParts.push(['Count:', bandColorCount].join(' ')) + if(catViewModel.parcatsViewModel.hoverinfoItems.indexOf('count') !== -1) { + hoverinfoParts.push(['Count:', bandColorCount].join(' ')); } - if (catViewModel.parcatsViewModel.hoverinfoItems.indexOf('probability') !== -1) { + if(catViewModel.parcatsViewModel.hoverinfoItems.indexOf('probability') !== -1) { var pColorAndCatLable = 'P(color ∩ ' + catLabel + '): '; var pColorAndCatValue = (bandColorCount / totalCount).toFixed(3); var pColorAndCatRow = pColorAndCatLable + pColorAndCatValue; @@ -889,7 +889,7 @@ function mouseoverCategoryBand(bandViewModel) { // Mouse var mouseY = d3.mouse(this)[1]; - if (mouseY < -1) { + if(mouseY < -1) { // Hover is above above the category rectangle (probably the dimension title text) return; } @@ -903,7 +903,7 @@ function mouseoverCategoryBand(bandViewModel) { var bandElement = this; // Handle style and events - if (hovermode === 'color') { + if(hovermode === 'color') { styleForColorHovermode(bandElement); emitPointsEventColorHovermode(bandElement, 'plotly_hover', d3.event); } else { @@ -914,15 +914,15 @@ function mouseoverCategoryBand(bandViewModel) { // Handle hover label if(bandViewModel.parcatsViewModel.hoverinfoItems.indexOf('none') === -1) { var hoverItems; - if (hovermode === 'category') { + if(hovermode === 'category') { hoverItems = createHoverLabelForCategoryHovermode(rootBBox, bandElement); - } else if (hovermode === 'color') { + } else if(hovermode === 'color') { hoverItems = createHoverLabelForColorHovermode(rootBBox, bandElement); - } else if (hovermode === 'dimension') { + } else if(hovermode === 'dimension') { hoverItems = createHoverLabelForDimensionHovermode(rootBBox, bandElement); } - if (hoverItems) { + if(hoverItems) { Fx.multiHovers(hoverItems, { container: fullLayout._hoverlayer.node(), outerContainer: fullLayout._paper.node(), @@ -964,10 +964,9 @@ function mouseoutCategory(bandViewModel) { var bandElement = this; // Handle style and events - if (hovermode === 'color') { + if(hovermode === 'color') { emitPointsEventColorHovermode(bandElement, 'plotly_unhover', d3.event); } else { - console.log('mouseoutCategory: ' + hovermode); emitPointsEventCategoryHovermode(bandElement, 'plotly_unhover', d3.event); } } @@ -982,8 +981,8 @@ function mouseoutCategory(bandViewModel) { function dragDimensionStart(d) { // Check if dragging is supported - if (d.parcatsViewModel.arrangement === 'fixed') { - return + if(d.parcatsViewModel.arrangement === 'fixed') { + return; } // Save off initial drag indexes for dimension @@ -1044,8 +1043,8 @@ function dragDimensionStart(d) { function dragDimension(d) { // Check if dragging is supported - if (d.parcatsViewModel.arrangement === 'fixed') { - return + if(d.parcatsViewModel.arrangement === 'fixed') { + return; } d.dragHasMoved = true; @@ -1103,15 +1102,15 @@ function dragDimension(d) { } // Update dimension position - if (d.dragCategoryDisplayInd === null || d.parcatsViewModel.arrangement === 'freeform') { + if(d.dragCategoryDisplayInd === null || d.parcatsViewModel.arrangement === 'freeform') { dragDimension.model.dragX = d3.event.x; // Check for dimension swaps var prevDimension = d.parcatsViewModel.dimensions[prevDimInd]; var nextDimension = d.parcatsViewModel.dimensions[nextDimInd]; - if (prevDimension !== undefined) { - if (dragDimension.model.dragX < (prevDimension.x + prevDimension.width)) { + if(prevDimension !== undefined) { + if(dragDimension.model.dragX < (prevDimension.x + prevDimension.width)) { // Swap display inds dragDimension.model.displayInd = prevDimension.model.displayInd; @@ -1119,8 +1118,8 @@ function dragDimension(d) { } } - if (nextDimension !== undefined) { - if ((dragDimension.model.dragX + dragDimension.width) > nextDimension.x) { + if(nextDimension !== undefined) { + if((dragDimension.model.dragX + dragDimension.width) > nextDimension.x) { // Swap display inds dragDimension.model.displayInd = nextDimension.model.displayInd; @@ -1149,8 +1148,8 @@ function dragDimension(d) { function dragDimensionEnd(d) { // Check if dragging is supported - if (d.parcatsViewModel.arrangement === 'fixed') { - return + if(d.parcatsViewModel.arrangement === 'fixed') { + return; } if(d.dragDimensionDisplayInd === null) { @@ -1192,11 +1191,11 @@ function dragDimensionEnd(d) { // Sort a shallow copy of the category models by display index var sortedCategoryModels = d.model.categories.slice().sort( - function (a, b) { return a.displayInd - b.displayInd }); + function(a, b) { return a.displayInd - b.displayInd; }); // Get new categoryarray and categorylabels values - var newCategoryArray = sortedCategoryModels.map(function (v) { return v.categoryValue }); - var newCategoryLabels = sortedCategoryModels.map(function (v) { return v.categoryLabel }); + var newCategoryArray = sortedCategoryModels.map(function(v) { return v.categoryValue; }); + var newCategoryLabels = sortedCategoryModels.map(function(v) { return v.categoryLabel; }); restyleData['dimensions[' + d.model.containerInd + '].categoryarray'] = [newCategoryArray]; restyleData['dimensions[' + d.model.containerInd + '].categorylabels'] = [newCategoryLabels]; @@ -1207,8 +1206,8 @@ function dragDimensionEnd(d) { // Handle potential click event // ---------------------------- if(d.parcatsViewModel.hoverinfoItems.indexOf('skip') === -1) { - if (!d.dragHasMoved && d.potentialClickBand) { - if (d.parcatsViewModel.hovermode === 'color') { + if(!d.dragHasMoved && d.potentialClickBand) { + if(d.parcatsViewModel.hovermode === 'color') { emitPointsEventColorHovermode(d.potentialClickBand, 'plotly_click', d3.event.sourceEvent); } else { emitPointsEventCategoryHovermode(d.potentialClickBand, 'plotly_click', d3.event.sourceEvent); @@ -1455,7 +1454,7 @@ function createParcatsViewModel(graphDiv, layout, wrappedParcatsModel) { // Handle hover info // ----------------- var hoverinfoItems; - if (trace.hoverinfo === 'all') { + if(trace.hoverinfo === 'all') { hoverinfoItems = ['count', 'probability']; } else { hoverinfoItems = trace.hoverinfo.split('+'); diff --git a/test/jasmine/tests/parcats_test.js b/test/jasmine/tests/parcats_test.js index 13164d6e437..0facb23e016 100644 --- a/test/jasmine/tests/parcats_test.js +++ b/test/jasmine/tests/parcats_test.js @@ -568,7 +568,7 @@ describe('Drag to reordered dimensions', function() { it('should support dragging dimension label to reorder dimensions in freeform arrangement', function(done) { // Set arrangement - mock.data[0].arrangement = 'freeform'; + mock.data[0].arrangement = 'freeform'; Plotly.newPlot(gd, mock) .then(function() { @@ -643,7 +643,7 @@ describe('Drag to reordered dimensions', function() { it('should support dragging dimension label to reorder dimensions in perpendicular arrangement', function(done) { // Set arrangement - mock.data[0].arrangement = 'perpendicular'; + mock.data[0].arrangement = 'perpendicular'; Plotly.newPlot(gd, mock) .then(function() { @@ -729,8 +729,6 @@ describe('Drag to reordered dimensions', function() { /** @type {ParcatsViewModel} */ var parcatsViewModel = d3.select('g.trace.parcats').datum(); - - var dragDimStartX = parcatsViewModel.dimensions[1].x; var pos = getMousePositions(parcatsViewModel); // Check initial dimension order @@ -918,7 +916,7 @@ describe('Drag to reordered categories', function() { it('should support dragging category to reorder categories and dimensions in freeform arrangement', function(done) { // Set arrangement - mock.data[0].arrangement = 'freeform'; + mock.data[0].arrangement = 'freeform'; Plotly.newPlot(gd, mock) .then(function() { @@ -1008,7 +1006,7 @@ describe('Drag to reordered categories', function() { it('should support dragging category to reorder categories only in perpendicular arrangement', function(done) { // Set arrangement - mock.data[0].arrangement = 'perpendicular'; + mock.data[0].arrangement = 'perpendicular'; Plotly.newPlot(gd, mock) .then(function() { @@ -1208,8 +1206,8 @@ describe('Click events', function() { // Check that the right points were reported var pts = clickData.points.sort(function(a, b) { - return a.pointNumber - b.pointNumber; - }); + return a.pointNumber - b.pointNumber; + }); // Check points expect(pts).toEqual([ @@ -1285,8 +1283,8 @@ describe('Click events', function() { // Check that the right points were reported var pts = clickData.points.sort(function(a, b) { - return a.pointNumber - b.pointNumber; - }); + return a.pointNumber - b.pointNumber; + }); // Check points expect(pts).toEqual([ @@ -1375,8 +1373,8 @@ describe('Click events with hovermode color', function() { // Check that the right points were reported var pts = clickData.points.sort(function(a, b) { - return a.pointNumber - b.pointNumber; - }); + return a.pointNumber - b.pointNumber; + }); // Check points expect(pts).toEqual([ @@ -1416,8 +1414,8 @@ describe('Click events with hovermode color', function() { // Check that the right points were reported var pts = clickData.points.sort(function(a, b) { - return a.pointNumber - b.pointNumber; - }); + return a.pointNumber - b.pointNumber; + }); // Check points expect(pts).toEqual([ @@ -1484,8 +1482,8 @@ describe('Hover events', function() { // Check that the right points were reported var pts = hoverData.points.sort(function(a, b) { - return a.pointNumber - b.pointNumber; - }); + return a.pointNumber - b.pointNumber; + }); expect(pts).toEqual([ {curveNumber: 0, pointNumber: 4}, {curveNumber: 0, pointNumber: 5}, @@ -1494,19 +1492,19 @@ describe('Hover events', function() { // Check that unhover is still undefined expect(unhoverData).toBeUndefined(); }) - .then(function(){ + .then(function() { // Unhover mouseEvent('mouseout', mouseX0, mouseY0); Lib.clearThrottle(); }) - .then(function(){ + .then(function() { // Check that unhover callback was called expect(unhoverData).toBeDefined(); // Check that the right points were reported var pts = unhoverData.points.sort(function(a, b) { - return a.pointNumber - b.pointNumber; - }); + return a.pointNumber - b.pointNumber; + }); expect(pts).toEqual([ {curveNumber: 0, pointNumber: 4}, {curveNumber: 0, pointNumber: 5}, @@ -1554,8 +1552,8 @@ describe('Hover events', function() { // Check that the right points were reported var pts = hoverData.points.sort(function(a, b) { - return a.pointNumber - b.pointNumber; - }); + return a.pointNumber - b.pointNumber; + }); expect(pts).toEqual([ {curveNumber: 0, pointNumber: 5}, {curveNumber: 0, pointNumber: 8}]); @@ -1563,19 +1561,19 @@ describe('Hover events', function() { // Check that unhover is still undefined expect(unhoverData).toBeUndefined(); }) - .then(function(){ + .then(function() { // Unhover mouseEvent('mouseout', mouseX0, mouseY0); Lib.clearThrottle(); }) - .then(function(){ + .then(function() { // Check that unhover callback was called expect(unhoverData).toBeDefined(); // Check that the right points were reported var pts = unhoverData.points.sort(function(a, b) { - return a.pointNumber - b.pointNumber; - }); + return a.pointNumber - b.pointNumber; + }); expect(pts).toEqual([ {curveNumber: 0, pointNumber: 5}, {curveNumber: 0, pointNumber: 8}]); @@ -1641,27 +1639,27 @@ describe('Hover events with hovermode color', function() { // Check that the right points were reported var pts = hoverData.points.sort(function(a, b) { - return a.pointNumber - b.pointNumber; - }); + return a.pointNumber - b.pointNumber; + }); expect(pts).toEqual([ {curveNumber: 0, pointNumber: 5}]); // Check that unhover is still undefined expect(unhoverData).toBeUndefined(); }) - .then(function(){ + .then(function() { // Unhover mouseEvent('mouseout', mouseX0, mouseY0); Lib.clearThrottle(); }) - .then(function(){ + .then(function() { // Check that unhover callback was called expect(unhoverData).toBeDefined(); // Check that the right points were reported var pts = unhoverData.points.sort(function(a, b) { - return a.pointNumber - b.pointNumber; - }); + return a.pointNumber - b.pointNumber; + }); expect(pts).toEqual([ {curveNumber: 0, pointNumber: 5}]); }) @@ -1707,27 +1705,27 @@ describe('Hover events with hovermode color', function() { // Check that the right points were reported var pts = hoverData.points.sort(function(a, b) { - return a.pointNumber - b.pointNumber; - }); + return a.pointNumber - b.pointNumber; + }); expect(pts).toEqual([ {curveNumber: 0, pointNumber: 5}]); // Check that unhover is still undefined expect(unhoverData).toBeUndefined(); }) - .then(function(){ + .then(function() { // Unhover mouseEvent('mouseout', mouseX0, mouseY0); Lib.clearThrottle(); }) - .then(function(){ + .then(function() { // Check that unhover callback was called expect(unhoverData).toBeDefined(); // Check that the right points were reported var pts = unhoverData.points.sort(function(a, b) { - return a.pointNumber - b.pointNumber; - }); + return a.pointNumber - b.pointNumber; + }); expect(pts).toEqual([ {curveNumber: 0, pointNumber: 5}]); }) From 9361cc429b4aa433557860893b1fc73c0f16764d Mon Sep 17 00:00:00 2001 From: "Jon M. Mease" Date: Sat, 1 Sep 2018 11:24:40 -0400 Subject: [PATCH 30/50] Fix up attribute description specifications --- src/traces/parcats/attributes.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/traces/parcats/attributes.js b/src/traces/parcats/attributes.js index beaa37e82b3..805b6c1dc74 100644 --- a/src/traces/parcats/attributes.js +++ b/src/traces/parcats/attributes.js @@ -162,7 +162,7 @@ module.exports = { role: 'info', editType: 'calc', description: [ - 'The display index of dimension, from left to right, zero indexed, defaults to dimension' + + 'The display index of dimension, from left to right, zero indexed, defaults to dimension', 'index.' ].join(' ') }, @@ -186,8 +186,8 @@ module.exports = { role: 'info', editType: 'calc', description: [ - 'The number of observations represented by each state. Defaults to 1 so that each state represents ' + - 'one observation' - ] + 'The number of observations represented by each state. Defaults to 1 so that each state represents', + 'one observation' + ].join(' ') } }; From 6ca2d6695130c2e187b3640976fe734f7dab80a6 Mon Sep 17 00:00:00 2001 From: "Jon M. Mease" Date: Sat, 1 Sep 2018 11:28:41 -0400 Subject: [PATCH 31/50] Fix test comments --- test/jasmine/tests/parcats_test.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/jasmine/tests/parcats_test.js b/test/jasmine/tests/parcats_test.js index 0facb23e016..f06940f467c 100644 --- a/test/jasmine/tests/parcats_test.js +++ b/test/jasmine/tests/parcats_test.js @@ -1463,7 +1463,7 @@ describe('Hover events', function() { unhoverData = data; }); - // Hover over top category of middle dimension (category "A") + // Hover over top of bottom category of middle dimension (category "C") var dimStartX = parcatsViewModel.dimensions[1].x; mouseY0 = parcatsViewModel.y + parcatsViewModel.dimensions[1].categories[2].y + 10; @@ -1620,7 +1620,7 @@ describe('Hover events with hovermode color', function() { unhoverData = data; }); - // Hover over top category of middle dimension (category "A") + // Hover over top of bottom category of middle dimension (category "C") var dimStartX = parcatsViewModel.dimensions[1].x; mouseY0 = parcatsViewModel.y + parcatsViewModel.dimensions[1].categories[2].y + 10; From 2a51ca9bc5e23d9e36a2ca766ad317320ceed140 Mon Sep 17 00:00:00 2001 From: "Jon M. Mease" Date: Tue, 4 Sep 2018 12:38:26 -0400 Subject: [PATCH 32/50] Added new baseline images for parcats mocks --- test/image/baselines/parcats_basic.png | Bin 0 -> 27350 bytes test/image/baselines/parcats_basic_freeform.png | Bin 0 -> 27350 bytes test/image/baselines/parcats_bundled.png | Bin 0 -> 31959 bytes .../baselines/parcats_bundled_reversed.png | Bin 0 -> 30048 bytes test/image/baselines/parcats_colorbar.png | Bin 0 -> 57488 bytes test/image/baselines/parcats_fonts.png | Bin 0 -> 29005 bytes .../image/baselines/parcats_hovermode_color.png | Bin 0 -> 30350 bytes .../baselines/parcats_hovermode_dimension.png | Bin 0 -> 15471 bytes .../baselines/parcats_invisible_dimension.png | Bin 0 -> 12757 bytes test/image/baselines/parcats_reordered.png | Bin 0 -> 21660 bytes test/image/baselines/parcats_unbundled.png | Bin 0 -> 30350 bytes 11 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 test/image/baselines/parcats_basic.png create mode 100644 test/image/baselines/parcats_basic_freeform.png create mode 100644 test/image/baselines/parcats_bundled.png create mode 100644 test/image/baselines/parcats_bundled_reversed.png create mode 100644 test/image/baselines/parcats_colorbar.png create mode 100644 test/image/baselines/parcats_fonts.png create mode 100644 test/image/baselines/parcats_hovermode_color.png create mode 100644 test/image/baselines/parcats_hovermode_dimension.png create mode 100644 test/image/baselines/parcats_invisible_dimension.png create mode 100644 test/image/baselines/parcats_reordered.png create mode 100644 test/image/baselines/parcats_unbundled.png diff --git a/test/image/baselines/parcats_basic.png b/test/image/baselines/parcats_basic.png new file mode 100644 index 0000000000000000000000000000000000000000..65697ecc85642729a9bb63975430d9ff2a179e4d GIT binary patch literal 27350 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 ZqDq_Cf4D>(e6Na1`;xwT!A0x9e*ky;t>6y#t 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 kU)TBXee?hQ?RkSQYJP$2eN~n5&!@I literal 0 HcmV?d00001 diff --git a/test/image/baselines/parcats_bundled_reversed.png b/test/image/baselines/parcats_bundled_reversed.png new file mode 100644 index 0000000000000000000000000000000000000000..b244ce809d5d739979853eea4866396876f8ab63 GIT binary patch literal 30048 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 VvM)p0YAKJ5Ec}i~0`8WW0?_tx# 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 Q!Jjy;m!D^)M`+T20171)TmS$7 literal 0 HcmV?d00001 diff --git a/test/image/baselines/parcats_fonts.png b/test/image/baselines/parcats_fonts.png new file mode 100644 index 0000000000000000000000000000000000000000..ef1627575bb095f71a6bf504e45a49f4ab75503e GIT binary patch literal 29005 zcmeFZbySqm+CB_8G$JJ+DKNkg(jd*KLk!&@-KcbTjC6-I2uOp7gf!BPfP{pAbayv= z&v?%Hz2|-3-}nEw)_2x|wOkDBXYYI8aoyK_J%%YONN#Ar4s6nI}`x~o)0$w$k4E3QU3V_AtHN!I0Rwo}SO?FS(QA8}h%% z5}`+&4P8y++PAYpO9jc&Yu=w4-UrEX)PwxaEd2yJwl+p`FYeA;>~79ud{1&AEG(&) z(=mQGraNY`jo|}xK=d(^5TU+hp<0Rnr>bGM|dd?$~_Vs!-nV9&Q zAQ^vWD#8l?YNvq_jk7&ySrU0E8zESPq((V%FPEzt!L{T(4z#Nzv=@k zw_hA*-HU2|(cx#N-8yf%7t3^C!e0JVR=-A(;d3_4`^bI$qg(s-=~B&%ZTh8KjQABK z)B6Zc^7!#$B<~QH?_Ht9Ew+!3&l_9Y?q{{LFT?r=Nsh|^C@#PVMO1EfT2jxFyXb!2jQFBkyEJI$TXndvqpKU`m5`XY z=(F#Y#ck*aC)sMg-s@-!z>L~Rg4Mgn{dLFCFte2^uV{82i4l_3~X%EdS)o+||SNl>@^6vGJ zx&T^Y_)~rRHuSo!lFyM}o`+F|rG!Iox3pT?=Whn*$??Ff7yWEs7xwS=_6cx;@R)cW z5v5+uwA|_j9Nuh47~assJS7gplzzbKl8Aqdd&VCg(gTr#cnR2$H6axeyB=%9a2b>+ z16Gt(&Abn#e@(Aj`Te}i?Yq@l�lJJvi)j4T|LZ6=C}Y6#6)s-@AEahTepaByP$p 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 literal 0 HcmV?d00001 diff --git a/test/image/baselines/parcats_hovermode_color.png b/test/image/baselines/parcats_hovermode_color.png new file mode 100644 index 0000000000000000000000000000000000000000..a0beb05ce06ba9052089b9af4b2d947d05a58b37 GIT binary patch literal 30350 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 DkA2o7 literal 0 HcmV?d00001 diff --git a/test/image/baselines/parcats_reordered.png b/test/image/baselines/parcats_reordered.png new file mode 100644 index 0000000000000000000000000000000000000000..f26424ceabe228ecd88a6552fae2b7fe18fa27a7 GIT binary patch literal 21660 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 ZiLO6Z!eAf3duAb8>iTN$Zr* Date: Tue, 4 Sep 2018 12:51:37 -0400 Subject: [PATCH 33/50] Fix headers (it *was* 2017 when I started this!) --- lib/parcats.js | 2 +- src/traces/parcats/attributes.js | 2 +- src/traces/parcats/base_plot.js | 2 +- src/traces/parcats/calc.js | 2 +- src/traces/parcats/constants.js | 2 +- src/traces/parcats/defaults.js | 2 +- src/traces/parcats/index.js | 2 +- src/traces/parcats/parcats.js | 2 +- src/traces/parcats/plot.js | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/lib/parcats.js b/lib/parcats.js index a45e80ef2e1..b087f4a06ba 100644 --- a/lib/parcats.js +++ b/lib/parcats.js @@ -1,5 +1,5 @@ /** -* Copyright 2012-2017, Plotly, Inc. +* Copyright 2012-2018, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the diff --git a/src/traces/parcats/attributes.js b/src/traces/parcats/attributes.js index 805b6c1dc74..55e325a1fb6 100644 --- a/src/traces/parcats/attributes.js +++ b/src/traces/parcats/attributes.js @@ -1,5 +1,5 @@ /** -* Copyright 2012-2017, Plotly, Inc. +* Copyright 2012-2018, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the diff --git a/src/traces/parcats/base_plot.js b/src/traces/parcats/base_plot.js index 8b8ed601398..85aa3986b24 100644 --- a/src/traces/parcats/base_plot.js +++ b/src/traces/parcats/base_plot.js @@ -1,5 +1,5 @@ /** -* Copyright 2012-2017, Plotly, Inc. +* Copyright 2012-2018, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the diff --git a/src/traces/parcats/calc.js b/src/traces/parcats/calc.js index ae0d5323cc4..f04ab584252 100644 --- a/src/traces/parcats/calc.js +++ b/src/traces/parcats/calc.js @@ -1,5 +1,5 @@ /** -* Copyright 2012-2017, Plotly, Inc. +* Copyright 2012-2018, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the diff --git a/src/traces/parcats/constants.js b/src/traces/parcats/constants.js index ae9a9e73d61..96d9ff68520 100644 --- a/src/traces/parcats/constants.js +++ b/src/traces/parcats/constants.js @@ -1,5 +1,5 @@ /** -* Copyright 2012-2017, Plotly, Inc. +* Copyright 2012-2018, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the diff --git a/src/traces/parcats/defaults.js b/src/traces/parcats/defaults.js index f4c22d3fb5a..ea319128d32 100644 --- a/src/traces/parcats/defaults.js +++ b/src/traces/parcats/defaults.js @@ -1,5 +1,5 @@ /** -* Copyright 2012-2017, Plotly, Inc. +* Copyright 2012-2018, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the diff --git a/src/traces/parcats/index.js b/src/traces/parcats/index.js index a8e9de4dbde..fd664b89c04 100644 --- a/src/traces/parcats/index.js +++ b/src/traces/parcats/index.js @@ -1,5 +1,5 @@ /** -* Copyright 2012-2017, Plotly, Inc. +* Copyright 2012-2018, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the diff --git a/src/traces/parcats/parcats.js b/src/traces/parcats/parcats.js index c6acee71687..9bb4b2d4848 100644 --- a/src/traces/parcats/parcats.js +++ b/src/traces/parcats/parcats.js @@ -1,5 +1,5 @@ /** -* Copyright 2012-2017, Plotly, Inc. +* Copyright 2012-2018, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the diff --git a/src/traces/parcats/plot.js b/src/traces/parcats/plot.js index 5dad5365b6f..2b958b920c4 100644 --- a/src/traces/parcats/plot.js +++ b/src/traces/parcats/plot.js @@ -1,5 +1,5 @@ /** -* Copyright 2012-2017, Plotly, Inc. +* Copyright 2012-2018, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the From b1ef6c94789fb10a3a57dba29a3c0170a9d9553c Mon Sep 17 00:00:00 2001 From: "Jon M. Mease" Date: Wed, 5 Sep 2018 14:58:07 -0400 Subject: [PATCH 34/50] markerColorscale no longer used --- src/traces/parcats/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/traces/parcats/index.js b/src/traces/parcats/index.js index fd664b89c04..5496d3b23ff 100644 --- a/src/traces/parcats/index.js +++ b/src/traces/parcats/index.js @@ -23,7 +23,7 @@ Parcats.colorbar = { Parcats.moduleType = 'trace'; Parcats.name = 'parcats'; Parcats.basePlotModule = require('./base_plot'); -Parcats.categories = ['noOpacity', 'markerColorscale']; +Parcats.categories = ['noOpacity']; Parcats.meta = { description: [ 'Parallel categories diagram for multidimensional categorical data.' From 5a19499b5fe56f4f50c44939c4d2784491d356f7 Mon Sep 17 00:00:00 2001 From: "Jon M. Mease" Date: Wed, 5 Sep 2018 15:44:29 -0400 Subject: [PATCH 35/50] Rename categorylabels -> ticktext and categorylabelfont -> tickfont for better consistency with other trace / axis types. --- src/traces/parcats/attributes.js | 6 +++--- src/traces/parcats/calc.js | 16 ++++++++-------- src/traces/parcats/defaults.js | 6 +++--- src/traces/parcats/parcats.js | 6 +++--- test/image/mocks/parcats_fonts.json | 2 +- test/image/mocks/parcats_reordered.json | 7 ++++--- test/jasmine/tests/parcats_test.js | 12 ++++++------ 7 files changed, 28 insertions(+), 27 deletions(-) diff --git a/src/traces/parcats/attributes.js b/src/traces/parcats/attributes.js index 55e325a1fb6..7441cf92021 100644 --- a/src/traces/parcats/attributes.js +++ b/src/traces/parcats/attributes.js @@ -94,7 +94,7 @@ module.exports = { description: 'Sets the font for the `dimension` labels.' }), - categorylabelfont: fontAttrs({ + tickfont: fontAttrs({ editType: 'calc', description: 'Sets the font for the `category` labels.' }), @@ -135,12 +135,12 @@ module.exports = { 'Used with `categoryorder`.' ].join(' ') }, - categorylabels: { + ticktext: { valType: 'data_array', role: 'info', editType: 'calc', description: [ - 'Sets alternative labels for the categories in this dimension.', + 'Sets alternative tick labels for the categories in this dimension.', 'Only has an effect if `categoryorder` is set to *array*.', 'Should be an array the same length as `categoryarray`', 'Used with `categoryorder`.' diff --git a/src/traces/parcats/calc.js b/src/traces/parcats/calc.js index f04ab584252..6eaf583fbdd 100644 --- a/src/traces/parcats/calc.js +++ b/src/traces/parcats/calc.js @@ -178,7 +178,7 @@ module.exports = function calc(gd, trace) { if(cats[catInd] === undefined) { var catValue = trace.dimensions[containerInd].categoryarray[catInd]; - var catLabel = trace.dimensions[containerInd].categorylabels[catInd]; + var catLabel = trace.dimensions[containerInd].ticktext[catInd]; cats[catInd] = createCategoryModel(d, catInd, catValue, catLabel); } @@ -485,17 +485,17 @@ function validateCategoryProperties(dim, uniqueInfoDim) { // Update categoryarray dim.categoryarray = uniqueInfoDim.uniqueValues; - // Handle categorylabels - if(dim.categorylabels === null || dim.categorylabels === undefined) { - dim.categorylabels = []; + // Handle ticktext + if(dim.ticktext === null || dim.ticktext === undefined) { + dim.ticktext = []; } else { // Shallow copy to avoid modifying input array - dim.categorylabels = dim.categorylabels.slice(); + dim.ticktext = dim.ticktext.slice(); } - // Extend categorylabels with elements from uniqueInfoDim.uniqueValues - for(var i = dim.categorylabels.length; i < uniqueInfoDim.uniqueValues.length; i++) { - dim.categorylabels.push(uniqueInfoDim.uniqueValues[i]); + // Extend ticktext with elements from uniqueInfoDim.uniqueValues + for(var i = dim.ticktext.length; i < uniqueInfoDim.uniqueValues.length; i++) { + dim.ticktext.push(uniqueInfoDim.uniqueValues[i]); } } diff --git a/src/traces/parcats/defaults.js b/src/traces/parcats/defaults.js index ea319128d32..dc5f2014075 100644 --- a/src/traces/parcats/defaults.js +++ b/src/traces/parcats/defaults.js @@ -64,10 +64,10 @@ function dimensionDefaults(dimensionIn, dimensionOut) { // coerce 'categoryarray' only in array order case if(order === 'array') { coerce('categoryarray'); - coerce('categorylabels'); + coerce('ticktext'); } else { delete dimensionIn.categoryarray; - delete dimensionIn.categorylabels; + delete dimensionIn.ticktext; } // cannot set 'categoryorder' to 'array' with an invalid 'categoryarray' @@ -118,5 +118,5 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout color: layout.font.color }; - Lib.coerceFont(coerce, 'categorylabelfont', categoryfontDefault); + Lib.coerceFont(coerce, 'tickfont', categoryfontDefault); }; diff --git a/src/traces/parcats/parcats.js b/src/traces/parcats/parcats.js index 9bb4b2d4848..c433b946cee 100644 --- a/src/traces/parcats/parcats.js +++ b/src/traces/parcats/parcats.js @@ -1193,12 +1193,12 @@ function dragDimensionEnd(d) { var sortedCategoryModels = d.model.categories.slice().sort( function(a, b) { return a.displayInd - b.displayInd; }); - // Get new categoryarray and categorylabels values + // Get new categoryarray and ticktext values var newCategoryArray = sortedCategoryModels.map(function(v) { return v.categoryValue; }); var newCategoryLabels = sortedCategoryModels.map(function(v) { return v.categoryLabel; }); restyleData['dimensions[' + d.model.containerInd + '].categoryarray'] = [newCategoryArray]; - restyleData['dimensions[' + d.model.containerInd + '].categorylabels'] = [newCategoryLabels]; + restyleData['dimensions[' + d.model.containerInd + '].ticktext'] = [newCategoryLabels]; restyleData['dimensions[' + d.model.containerInd + '].categoryorder'] = 'array'; } } @@ -1475,7 +1475,7 @@ function createParcatsViewModel(graphDiv, layout, wrappedParcatsModel) { bundlecolors: trace.bundlecolors, sortpaths: trace.sortpaths, labelfont: trace.labelfont, - categorylabelfont: trace.categorylabelfont, + categorylabelfont: trace.tickfont, pathShape: pathShape, dragDimension: null, margin: margin, diff --git a/test/image/mocks/parcats_fonts.json b/test/image/mocks/parcats_fonts.json index 0e7937512de..a7f7de9a522 100644 --- a/test/image/mocks/parcats_fonts.json +++ b/test/image/mocks/parcats_fonts.json @@ -7,7 +7,7 @@ {"label": "Two", "values": ["A", "B", "A", "B", "C", "C", "A", "B", "C"]}, {"label": "Three", "values": [11, 11, 11, 11, 11, 11, 11, 11, 11]}], "labelfont": {"family": "Rockwell", "size": 20, "color": "gray"}, - "categorylabelfont": {"family": "Arial", "size": 10, "color": "firebrick"} + "tickfont": {"family": "Arial", "size": 10, "color": "firebrick"} } ], "layout": { diff --git a/test/image/mocks/parcats_reordered.json b/test/image/mocks/parcats_reordered.json index eeb089add90..0a460c9f720 100644 --- a/test/image/mocks/parcats_reordered.json +++ b/test/image/mocks/parcats_reordered.json @@ -3,9 +3,10 @@ {"type": "parcats", "domain": {"x": [0.125, 0.625],"y": [0.25, 0.75]}, "dimensions": [ - {"label": "One", "values": [1, 1, 2, 1, 2, 1, 1, 2, 1], "displayindex": 0}, - {"label": "Two", "values": ["A", "B", "A", "B", "C", "C", "A", "B", "C"], "displayindex": 2, - "categoryarray": ["B", "A", "C"]}, + {"label": "One", "values": [1, 1, 2, 1, 2, 1, 1, 2, 1], + "displayindex": 0, "categoryarray": [1, 2], "ticktext": ["One", "Two"]}, + {"label": "Two", "values": ["A", "B", "A", "B", "C", "C", "A", "B", "C"], + "displayindex": 2, "categoryarray": ["B", "A", "C"]}, {"label": "Three", "values": [11, 11, 11, 11, 11, 11, 11, 11, 11], "displayindex": 1}]} ], "layout": { diff --git a/test/jasmine/tests/parcats_test.js b/test/jasmine/tests/parcats_test.js index f06940f467c..36be182a9b5 100644 --- a/test/jasmine/tests/parcats_test.js +++ b/test/jasmine/tests/parcats_test.js @@ -355,13 +355,13 @@ describe('Dimension reordered parcats trace', function() { {dimensionInd: 0, displayInd: 0, dimensionLabel: 'One'}); checkCategoryCalc(gd, 0, 0, { - categoryLabel: 1, + categoryLabel: "One", dimensionInd: 0, categoryInd: 0, displayInd: 0}); checkCategoryCalc(gd, 0, 1, { - categoryLabel: 2, + categoryLabel: "Two", dimensionInd: 0, categoryInd: 1, displayInd: 1}); @@ -428,12 +428,12 @@ describe('Dimension reordered parcats trace', function() { {dimensionInd: 0, displayInd: 0, dimensionLabel: 'One'}); checkCategoryCalc(gd, 0, 0, { - categoryLabel: 1, + categoryLabel: "One", categoryInd: 0, displayInd: 0}); checkCategoryCalc(gd, 0, 1, { - categoryLabel: 2, + categoryLabel: "Two", categoryInd: 1, displayInd: 1}); @@ -994,7 +994,7 @@ describe('Drag to reordered categories', function() { 'dimensions[2].displayindex': 1, 'dimensions[1].categoryorder': 'array', 'dimensions[1].categoryarray': [['C', 'A', 'B' ]], - 'dimensions[1].categorylabels': [['C', 'A', 'B' ]]}, + 'dimensions[1].ticktext': [['C', 'A', 'B' ]]}, [0]]); restyleCallback.calls.reset(); @@ -1079,7 +1079,7 @@ describe('Drag to reordered categories', function() { { 'dimensions[1].categoryorder': 'array', 'dimensions[1].categoryarray': [['C', 'A', 'B' ]], - 'dimensions[1].categorylabels': [['C', 'A', 'B' ]]}, + 'dimensions[1].ticktext': [['C', 'A', 'B' ]]}, [0]]); restyleCallback.calls.reset(); From 1f6a2e02c25a70a63a5580960e4f6fb69369fa79 Mon Sep 17 00:00:00 2001 From: "Jon M. Mease" Date: Fri, 7 Sep 2018 11:31:08 -0400 Subject: [PATCH 36/50] Update baseline image for parcats_reordered (Added "One"/"Two" labels) --- test/image/baselines/parcats_reordered.png | Bin 21660 -> 22098 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/test/image/baselines/parcats_reordered.png b/test/image/baselines/parcats_reordered.png index f26424ceabe228ecd88a6552fae2b7fe18fa27a7..e78f5d4112083eb1639789e35caae40733b7b890 100644 GIT binary patch literal 22098 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 literal 21660 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 Date: Fri, 7 Sep 2018 12:35:36 -0400 Subject: [PATCH 37/50] eslint fixes --- test/jasmine/tests/parcats_test.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/jasmine/tests/parcats_test.js b/test/jasmine/tests/parcats_test.js index 36be182a9b5..414626d9c64 100644 --- a/test/jasmine/tests/parcats_test.js +++ b/test/jasmine/tests/parcats_test.js @@ -355,13 +355,13 @@ describe('Dimension reordered parcats trace', function() { {dimensionInd: 0, displayInd: 0, dimensionLabel: 'One'}); checkCategoryCalc(gd, 0, 0, { - categoryLabel: "One", + categoryLabel: 'One', dimensionInd: 0, categoryInd: 0, displayInd: 0}); checkCategoryCalc(gd, 0, 1, { - categoryLabel: "Two", + categoryLabel: 'Two', dimensionInd: 0, categoryInd: 1, displayInd: 1}); @@ -428,12 +428,12 @@ describe('Dimension reordered parcats trace', function() { {dimensionInd: 0, displayInd: 0, dimensionLabel: 'One'}); checkCategoryCalc(gd, 0, 0, { - categoryLabel: "One", + categoryLabel: 'One', categoryInd: 0, displayInd: 0}); checkCategoryCalc(gd, 0, 1, { - categoryLabel: "Two", + categoryLabel: 'Two', categoryInd: 1, displayInd: 1}); From 9b66bee5ebc01762ce2756678f4d0552d0ae0df8 Mon Sep 17 00:00:00 2001 From: "Jon M. Mease" Date: Mon, 10 Sep 2018 16:21:05 -0400 Subject: [PATCH 38/50] Support Rich text / Latex in category labels (ticktext) --- src/traces/parcats/parcats.js | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/traces/parcats/parcats.js b/src/traces/parcats/parcats.js index c433b946cee..306732c6ee7 100644 --- a/src/traces/parcats/parcats.js +++ b/src/traces/parcats/parcats.js @@ -14,6 +14,7 @@ var Fx = require('../../components/fx'); var Lib = require('../../lib'); var Drawing = require('../../components/drawing'); var tinycolor = require('tinycolor2'); +var svgTextUtils = require('../../lib/svg_text_utils'); function performPlot(parcatsModels, graphDiv, layout, svg) { @@ -269,6 +270,7 @@ function performPlot(parcatsModels, graphDiv, layout, svg) { /** @param {CategoryViewModel} catModel*/ function(catModel) { Drawing.font(d3.select(this), catModel.parcatsViewModel.categorylabelfont); + svgTextUtils.convertToTspans(d3.select(this), graphDiv); }); // Initialize dimension label @@ -1370,7 +1372,25 @@ function updateSvgCategories(parcatsViewModel, hasTransition) { // Place label to the left of category return -5; } - }); + }) + .each(function(d) { + // Update attriubutes of elements + var newX; + var newAnchor; + if(catInRightDim(d)) { + // Place label to the right of category + newX = d.width + 5; + newAnchor = 'start' + } else { + // Place label to the left of category + newX = -5; + newAnchor = 'end' + } + d3.select(this) + .selectAll('tspan') + .attr('x', newX) + .attr('text-anchor', newAnchor); + }); // Update bands // Initialize color band rects From 870ff82c33ebb97f0e7670d01e26d4a260fe696c Mon Sep 17 00:00:00 2001 From: "Jon M. Mease" Date: Tue, 11 Sep 2018 12:11:03 -0400 Subject: [PATCH 39/50] eslint fixes --- src/traces/parcats/parcats.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/traces/parcats/parcats.js b/src/traces/parcats/parcats.js index 306732c6ee7..b06f046aad8 100644 --- a/src/traces/parcats/parcats.js +++ b/src/traces/parcats/parcats.js @@ -1380,11 +1380,11 @@ function updateSvgCategories(parcatsViewModel, hasTransition) { if(catInRightDim(d)) { // Place label to the right of category newX = d.width + 5; - newAnchor = 'start' + newAnchor = 'start'; } else { // Place label to the left of category newX = -5; - newAnchor = 'end' + newAnchor = 'end'; } d3.select(this) .selectAll('tspan') From 7e4a6add69e43d978387df1943c39a7e1e26dce1 Mon Sep 17 00:00:00 2001 From: "Jon M. Mease" Date: Wed, 12 Sep 2018 13:46:33 -0400 Subject: [PATCH 40/50] Handle line.color as TypedArray --- src/traces/parcats/calc.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/traces/parcats/calc.js b/src/traces/parcats/calc.js index 6eaf583fbdd..d2f47c1be74 100644 --- a/src/traces/parcats/calc.js +++ b/src/traces/parcats/calc.js @@ -103,7 +103,7 @@ module.exports = function calc(gd, trace) { var value; if(!line) { value = parcatConstants.defaultColor; - } else if(Array.isArray(line.color)) { + } else if(Lib.isArrayOrTypedArray(line.color)) { value = line.color[index % line.color.length]; } else { value = line.color; From e7edebdd159625d7fbf3c8fa41978353edd58f66 Mon Sep 17 00:00:00 2001 From: "Jon M. Mease" Date: Thu, 13 Sep 2018 13:19:38 -0400 Subject: [PATCH 41/50] hovermode -> hoveron --- src/traces/parcats/attributes.js | 6 ++-- src/traces/parcats/defaults.js | 2 +- src/traces/parcats/parcats.js | 28 +++++++++---------- ..._color.json => parcats_hoveron_color.json} | 2 +- ...on.json => parcats_hoveron_dimension.json} | 2 +- test/jasmine/tests/parcats_test.js | 12 ++++---- 6 files changed, 26 insertions(+), 26 deletions(-) rename test/image/mocks/{parcats_hovermode_color.json => parcats_hoveron_color.json} (95%) rename test/image/mocks/{parcats_hovermode_dimension.json => parcats_hoveron_dimension.json} (95%) diff --git a/src/traces/parcats/attributes.js b/src/traces/parcats/attributes.js index 7441cf92021..4584b6b0c9e 100644 --- a/src/traces/parcats/attributes.js +++ b/src/traces/parcats/attributes.js @@ -44,17 +44,17 @@ module.exports = { editType: 'plot' // plotAttrs.hoverinfo description is appropriate }), - hovermode: { + hoveron: { valType: 'enumerated', values: ['category', 'color', 'dimension'], dflt: 'category', role: 'info', editType: 'plot', description: [ - 'Sets the hover mode of the parcats diagram.', + 'Sets the hover interaction mode for the parcats diagram.', 'If `category`, hover interaction take place per category.', 'If `color`, hover interactions take place per color per category.', - 'If `dimension`, hover interactions take across all categories per dimension.' + 'If `dimension`, hover interactions take place across all categories per dimension.' ].join(' ') }, arrangement: { diff --git a/src/traces/parcats/defaults.js b/src/traces/parcats/defaults.js index dc5f2014075..187efb12aec 100644 --- a/src/traces/parcats/defaults.js +++ b/src/traces/parcats/defaults.js @@ -98,7 +98,7 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout mergeLength(traceOut, dimensions, 'values', len); - coerce('hovermode'); + coerce('hoveron'); coerce('arrangement'); coerce('bundlecolors'); coerce('sortpaths'); diff --git a/src/traces/parcats/parcats.js b/src/traces/parcats/parcats.js index b06f046aad8..0da9cf28c6b 100644 --- a/src/traces/parcats/parcats.js +++ b/src/traces/parcats/parcats.js @@ -694,7 +694,7 @@ function emitPointsEventColorHovermode(bandElement, eventName, event) { } /** - * Create hover label for a band element's category (for use when hovermode === 'category') + * Create hover label for a band element's category (for use when hoveron === 'category') * * @param {ClientRect} rootBBox * Client bounding box for root of figure @@ -755,7 +755,7 @@ function createHoverLabelForCategoryHovermode(rootBBox, bandElement) { } /** - * Create hover label for a band element's category (for use when hovermode === 'category') + * Create hover label for a band element's category (for use when hoveron === 'category') * * @param {ClientRect} rootBBox * Client bounding box for root of figure @@ -779,7 +779,7 @@ function createHoverLabelForDimensionHovermode(rootBBox, bandElement) { } /** - * Create hover labels for a band element's category (for use when hovermode === 'dimension') + * Create hover labels for a band element's category (for use when hoveron === 'dimension') * * @param {ClientRect} rootBBox * Client bounding box for root of figure @@ -899,13 +899,13 @@ function mouseoverCategoryBand(bandViewModel) { var gd = bandViewModel.parcatsViewModel.graphDiv; var fullLayout = gd._fullLayout; var rootBBox = fullLayout._paperdiv.node().getBoundingClientRect(); - var hovermode = bandViewModel.parcatsViewModel.hovermode; + var hoveron = bandViewModel.parcatsViewModel.hoveron; /** @type {HTMLElement} */ var bandElement = this; // Handle style and events - if(hovermode === 'color') { + if(hoveron === 'color') { styleForColorHovermode(bandElement); emitPointsEventColorHovermode(bandElement, 'plotly_hover', d3.event); } else { @@ -916,11 +916,11 @@ function mouseoverCategoryBand(bandViewModel) { // Handle hover label if(bandViewModel.parcatsViewModel.hoverinfoItems.indexOf('none') === -1) { var hoverItems; - if(hovermode === 'category') { + if(hoveron === 'category') { hoverItems = createHoverLabelForCategoryHovermode(rootBBox, bandElement); - } else if(hovermode === 'color') { + } else if(hoveron === 'color') { hoverItems = createHoverLabelForColorHovermode(rootBBox, bandElement); - } else if(hovermode === 'dimension') { + } else if(hoveron === 'dimension') { hoverItems = createHoverLabelForDimensionHovermode(rootBBox, bandElement); } @@ -962,11 +962,11 @@ function mouseoutCategory(bandViewModel) { // Emit unhover event if(parcatsViewModel.hoverinfoItems.indexOf('skip') === -1) { - var hovermode = bandViewModel.parcatsViewModel.hovermode; + var hoveron = bandViewModel.parcatsViewModel.hoveron; var bandElement = this; // Handle style and events - if(hovermode === 'color') { + if(hoveron === 'color') { emitPointsEventColorHovermode(bandElement, 'plotly_unhover', d3.event); } else { emitPointsEventCategoryHovermode(bandElement, 'plotly_unhover', d3.event); @@ -1209,7 +1209,7 @@ function dragDimensionEnd(d) { // ---------------------------- if(d.parcatsViewModel.hoverinfoItems.indexOf('skip') === -1) { if(!d.dragHasMoved && d.potentialClickBand) { - if(d.parcatsViewModel.hovermode === 'color') { + if(d.parcatsViewModel.hoveron === 'color') { emitPointsEventColorHovermode(d.potentialClickBand, 'plotly_click', d3.event.sourceEvent); } else { emitPointsEventCategoryHovermode(d.potentialClickBand, 'plotly_click', d3.event.sourceEvent); @@ -1489,7 +1489,7 @@ function createParcatsViewModel(graphDiv, layout, wrappedParcatsModel) { y: traceY, width: traceWidth, height: traceHeight, - hovermode: trace.hovermode, + hoveron: trace.hoveron, hoverinfoItems: hoverinfoItems, arrangement: trace.arrangement, bundlecolors: trace.bundlecolors, @@ -1949,8 +1949,8 @@ function createDimensionViewModel(parcatsViewModel, dimensionModel) { * X position of this trace with respect to the Figure (pixels) * @property {Number} y * Y position of this trace with respect to the Figure (pixels) - * @property {String} hovermode - * Hover mode. One of: 'none', 'category', 'color', or 'dimension' + * @property {String} hoveron + * Hover interaction mode. One of: 'category', 'color', or 'dimension' * @property {Array.} hoverinfoItems * Info to display on hover. Array with a combination of 'counts' and/or 'probabilities', or 'none', or 'skip' * @property {String} arrangement diff --git a/test/image/mocks/parcats_hovermode_color.json b/test/image/mocks/parcats_hoveron_color.json similarity index 95% rename from test/image/mocks/parcats_hovermode_color.json rename to test/image/mocks/parcats_hoveron_color.json index c4726048523..be40fe56d8d 100644 --- a/test/image/mocks/parcats_hovermode_color.json +++ b/test/image/mocks/parcats_hoveron_color.json @@ -2,7 +2,7 @@ "data": [ {"type": "parcats", "domain": {"x": [0.125, 0.625],"y": [0.25, 0.75]}, - "hovermode": "color", + "hoveron": "color", "hoverinfo": "probability", "dimensions":[ {"label": "One", "values": [1, 1, 2, 1, 2, 1, 1, 2, 1]}, diff --git a/test/image/mocks/parcats_hovermode_dimension.json b/test/image/mocks/parcats_hoveron_dimension.json similarity index 95% rename from test/image/mocks/parcats_hovermode_dimension.json rename to test/image/mocks/parcats_hoveron_dimension.json index b5b7d990844..e48432b03d5 100644 --- a/test/image/mocks/parcats_hovermode_dimension.json +++ b/test/image/mocks/parcats_hoveron_dimension.json @@ -2,7 +2,7 @@ "data": [ {"type": "parcats", "domain": {"x": [0.125, 0.625],"y": [0.25, 0.75]}, - "hovermode": "dimension", + "hoveron": "dimension", "hoverinfo": "probability+count", "dimensions":[ {"label": "One", "values": [1, 1, 2, 1, 2, 1, 1, 2, 1]}, diff --git a/test/jasmine/tests/parcats_test.js b/test/jasmine/tests/parcats_test.js index 414626d9c64..6fc5070ba53 100644 --- a/test/jasmine/tests/parcats_test.js +++ b/test/jasmine/tests/parcats_test.js @@ -1328,7 +1328,7 @@ describe('Click events', function() { }); }); -describe('Click events with hovermode color', function() { +describe('Click events with hoveron color', function() { // Variable declarations // --------------------- @@ -1340,7 +1340,7 @@ describe('Click events with hovermode color', function() { // -------- beforeEach(function() { gd = createGraphDiv(); - mock = Lib.extendDeep({}, require('@mocks/parcats_hovermode_color.json')); + mock = Lib.extendDeep({}, require('@mocks/parcats_hoveron_color.json')); }); afterEach(destroyGraphDiv); @@ -1583,7 +1583,7 @@ describe('Hover events', function() { }); }); -describe('Hover events with hovermode color', function() { +describe('Hover events with hoveron color', function() { // Variable declarations // --------------------- @@ -1595,12 +1595,12 @@ describe('Hover events with hovermode color', function() { // -------- beforeEach(function() { gd = createGraphDiv(); - mock = Lib.extendDeep({}, require('@mocks/parcats_hovermode_color.json')); + mock = Lib.extendDeep({}, require('@mocks/parcats_hoveron_color.json')); }); afterEach(destroyGraphDiv); - it('hover and unhover should fire on category hovermode color', function(done) { + it('hover and unhover should fire on category hoveron color', function(done) { var hoverData, unhoverData, @@ -1667,7 +1667,7 @@ describe('Hover events with hovermode color', function() { .then(done); }); - it('hover and unhover should fire on path hovermode color', function(done) { + it('hover and unhover should fire on path hoveron color', function(done) { var hoverData, unhoverData, From 20bc21b011f8d8848bfc4c067ae5883f4a20b3c3 Mon Sep 17 00:00:00 2001 From: "Jon M. Mease" Date: Thu, 13 Sep 2018 14:58:37 -0400 Subject: [PATCH 42/50] Baseline images for hovermode -> hoveron conversion --- ...overmode_color.png => parcats_hoveron_color.png} | Bin ..._dimension.png => parcats_hoveron_dimension.png} | Bin 2 files changed, 0 insertions(+), 0 deletions(-) rename test/image/baselines/{parcats_hovermode_color.png => parcats_hoveron_color.png} (100%) rename test/image/baselines/{parcats_hovermode_dimension.png => parcats_hoveron_dimension.png} (100%) diff --git a/test/image/baselines/parcats_hovermode_color.png b/test/image/baselines/parcats_hoveron_color.png similarity index 100% rename from test/image/baselines/parcats_hovermode_color.png rename to test/image/baselines/parcats_hoveron_color.png diff --git a/test/image/baselines/parcats_hovermode_dimension.png b/test/image/baselines/parcats_hoveron_dimension.png similarity index 100% rename from test/image/baselines/parcats_hovermode_dimension.png rename to test/image/baselines/parcats_hoveron_dimension.png From 273d2d04744efdcff37cd84cd30328644b42c997 Mon Sep 17 00:00:00 2001 From: "Jon M. Mease" Date: Mon, 24 Sep 2018 08:27:31 -0400 Subject: [PATCH 43/50] Hide unsupported top-level properties from plot-schema --- src/traces/parcats/attributes.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/traces/parcats/attributes.js b/src/traces/parcats/attributes.js index 4584b6b0c9e..7035c8ea45a 100644 --- a/src/traces/parcats/attributes.js +++ b/src/traces/parcats/attributes.js @@ -189,5 +189,14 @@ module.exports = { 'The number of observations represented by each state. Defaults to 1 so that each state represents', 'one observation' ].join(' ') - } + }, + + // Hide unsupported top-level properties from plot-schema + customdata: undefined, + hoverlabel: undefined, + ids: undefined, + legendgroup: undefined, + opacity: undefined, + selectedpoints: undefined, + showlegend: undefined }; From 4bc3d354f7254863d7c74d65d3462fbb6558a9a3 Mon Sep 17 00:00:00 2001 From: "Jon M. Mease" Date: Mon, 24 Sep 2018 10:36:17 -0400 Subject: [PATCH 44/50] Fix plotschema tests in the presence of potentially undefined schema attributes --- test/jasmine/bundle_tests/plotschema_test.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/jasmine/bundle_tests/plotschema_test.js b/test/jasmine/bundle_tests/plotschema_test.js index 92646325066..d9cc5d00f99 100644 --- a/test/jasmine/bundle_tests/plotschema_test.js +++ b/test/jasmine/bundle_tests/plotschema_test.js @@ -153,7 +153,7 @@ describe('plot schema', function() { // check that no other object has '_isSubplotObj' assertPlotSchema( function(attr, attrName) { - if(attr[IS_SUBPLOT_OBJ] === true) { + if(attr && attr[IS_SUBPLOT_OBJ] === true) { expect(astrs.indexOf(attrName)).not.toEqual(-1); cnt++; } @@ -228,7 +228,7 @@ describe('plot schema', function() { assertPlotSchema( function(attr, attrName, attrs, level, attrString) { - if(isPlainObject(attr[DEPRECATED])) { + if(attr && isPlainObject(attr[DEPRECATED])) { Object.keys(attr[DEPRECATED]).forEach(function(dAttrName) { var dAttr = attr[DEPRECATED][dAttrName]; @@ -244,7 +244,7 @@ describe('plot schema', function() { it('has valid or no `impliedEdits` in every attribute', function() { assertPlotSchema(function(attr, attrName, attrs, level, attrString) { - if(attr.impliedEdits !== undefined) { + if(attr && attr.impliedEdits !== undefined) { expect(isPlainObject(attr.impliedEdits)) .toBe(true, attrString + ': ' + JSON.stringify(attr.impliedEdits)); // make sure it wasn't emptied out From 2684d696f7e3ea72c0786913b9f8bd68b0201923 Mon Sep 17 00:00:00 2001 From: "Jon M. Mease" Date: Tue, 25 Sep 2018 09:53:37 -0400 Subject: [PATCH 45/50] Fix path tooltip direction when graph div is offset from left margin Get mouse x position relative to graph div rather than relative to page --- src/traces/parcats/parcats.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/traces/parcats/parcats.js b/src/traces/parcats/parcats.js index 0da9cf28c6b..98aec2119e7 100644 --- a/src/traces/parcats/parcats.js +++ b/src/traces/parcats/parcats.js @@ -446,6 +446,7 @@ function mouseoverPath(d) { } var hovertext = hovertextParts.join('
'); + var mouseX = d3.mouse(gd)[0]; Fx.loneHover({ x: hoverCenterX - rootBBox.left + graphDivBBox.left, @@ -456,7 +457,7 @@ function mouseoverPath(d) { fontFamily: 'Monaco, "Courier New", monospace', fontSize: 10, fontColor: textColor, - idealAlign: d3.event.x < hoverCenterX ? 'right' : 'left' + idealAlign: mouseX < hoverCenterX ? 'right' : 'left' }, { container: fullLayout._hoverlayer.node(), outerContainer: fullLayout._paper.node(), From 267c7506e84110e972910c889524387dfd152d14 Mon Sep 17 00:00:00 2001 From: "Jon M. Mease" Date: Tue, 25 Sep 2018 10:00:30 -0400 Subject: [PATCH 46/50] Increase default font size slightly --- src/traces/parcats/defaults.js | 4 ++-- test/image/baselines/parcats_basic.png | Bin 27350 -> 27928 bytes .../baselines/parcats_basic_freeform.png | Bin 27350 -> 27928 bytes test/image/baselines/parcats_bundled.png | Bin 31959 -> 32478 bytes .../baselines/parcats_bundled_reversed.png | Bin 30048 -> 30601 bytes test/image/baselines/parcats_colorbar.png | Bin 57488 -> 58803 bytes .../image/baselines/parcats_hoveron_color.png | Bin 30350 -> 30995 bytes .../baselines/parcats_hoveron_dimension.png | Bin 15471 -> 15966 bytes .../baselines/parcats_invisible_dimension.png | Bin 12757 -> 12867 bytes test/image/baselines/parcats_reordered.png | Bin 22098 -> 22677 bytes test/image/baselines/parcats_unbundled.png | Bin 30350 -> 30995 bytes 11 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/traces/parcats/defaults.js b/src/traces/parcats/defaults.js index 187efb12aec..86e288099c7 100644 --- a/src/traces/parcats/defaults.js +++ b/src/traces/parcats/defaults.js @@ -106,7 +106,7 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout var labelfontDflt = { family: layout.font.family, - size: Math.round(layout.font.size / 1.2), + size: Math.round(layout.font.size), color: layout.font.color }; @@ -114,7 +114,7 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout var categoryfontDefault = { family: layout.font.family, - size: Math.round(layout.font.size / 1.4), + size: Math.round(layout.font.size / 1.2), color: layout.font.color }; diff --git a/test/image/baselines/parcats_basic.png b/test/image/baselines/parcats_basic.png index 65697ecc85642729a9bb63975430d9ff2a179e4d..20ffc0024f29a6d5e4e4906896b9a27ee81b65ad 100644 GIT binary patch literal 27928 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 kU)TBXee?hQ?RkSQYJP$2eN~n5&!@I diff --git a/test/image/baselines/parcats_bundled_reversed.png b/test/image/baselines/parcats_bundled_reversed.png index b244ce809d5d739979853eea4866396876f8ab63..8b714e28fd951ba917dfe83e7c05377138ed4340 100644 GIT binary patch literal 30601 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 VvM)p0YAKJ5Ec}i~0`8WW0?_tx# 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 Q!Jjy;m!D^)M`+T20171)TmS$7 diff --git a/test/image/baselines/parcats_hoveron_color.png b/test/image/baselines/parcats_hoveron_color.png index a0beb05ce06ba9052089b9af4b2d947d05a58b37..9eac4f55d6ea24e6a4c3933cd8f74f537219718a 100644 GIT binary patch literal 30995 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 P2>4NhYblp2K6?IN#g^aP literal 30350 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 literal 15471 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 DkA2o7 diff --git a/test/image/baselines/parcats_reordered.png b/test/image/baselines/parcats_reordered.png index e78f5d4112083eb1639789e35caae40733b7b890..4acfe3a8b231aed95f9af9934bac619e88cc7912 100644 GIT binary patch literal 22677 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 diff --git a/test/image/baselines/parcats_unbundled.png b/test/image/baselines/parcats_unbundled.png index a0beb05ce06ba9052089b9af4b2d947d05a58b37..9eac4f55d6ea24e6a4c3933cd8f74f537219718a 100644 GIT binary patch literal 30995 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 P2>4NhYblp2K6?IN#g^aP literal 30350 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 ZiLO6Z!eAf3duAb8>iTN$Zr* Date: Fri, 28 Sep 2018 13:02:31 -0400 Subject: [PATCH 47/50] Remove redundant require('./hover') operations --- src/components/fx/index.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/components/fx/index.js b/src/components/fx/index.js index 738c64a00e3..b494b0342dc 100644 --- a/src/components/fx/index.js +++ b/src/components/fx/index.js @@ -13,6 +13,7 @@ var Lib = require('../../lib'); var dragElement = require('../dragelement'); var helpers = require('./helpers'); var layoutAttributes = require('./layout_attributes'); +var hoverModule = require('./hover'); module.exports = { moduleType: 'component', @@ -41,11 +42,11 @@ module.exports = { castHoverOption: castHoverOption, castHoverinfo: castHoverinfo, - hover: require('./hover').hover, + hover: hoverModule.hover, unhover: dragElement.unhover, - loneHover: require('./hover').loneHover, - multiHovers: require('./hover').multiHovers, + loneHover: hoverModule.loneHover, + multiHovers: hoverModule.multiHovers, loneUnhover: loneUnhover, click: require('./click') From eba1b4ae27e5162c82285ef8a14856830ca82675 Mon Sep 17 00:00:00 2001 From: "Jon M. Mease" Date: Fri, 28 Sep 2018 13:27:21 -0400 Subject: [PATCH 48/50] Cleanup line defaults logic --- src/traces/parcats/calc.js | 5 +---- src/traces/parcats/constants.js | 17 ----------------- src/traces/parcats/defaults.js | 5 +---- src/traces/parcats/parcats.js | 7 +------ 4 files changed, 3 insertions(+), 31 deletions(-) delete mode 100644 src/traces/parcats/constants.js diff --git a/src/traces/parcats/calc.js b/src/traces/parcats/calc.js index d2f47c1be74..d52bbc4fca7 100644 --- a/src/traces/parcats/calc.js +++ b/src/traces/parcats/calc.js @@ -13,7 +13,6 @@ var wrap = require('../../lib/gup').wrap; var hasColorscale = require('../../components/colorscale/has_colorscale'); var colorscaleCalc = require('../../components/colorscale/calc'); -var parcatConstants = require('./constants'); var filterUnique = require('../../lib/filter_unique.js'); var Drawing = require('../../components/drawing'); var Lib = require('../../lib'); @@ -101,9 +100,7 @@ module.exports = function calc(gd, trace) { // Build color generation function function getMarkerColorInfo(index) { var value; - if(!line) { - value = parcatConstants.defaultColor; - } else if(Lib.isArrayOrTypedArray(line.color)) { + if(Lib.isArrayOrTypedArray(line.color)) { value = line.color[index % line.color.length]; } else { value = line.color; diff --git a/src/traces/parcats/constants.js b/src/traces/parcats/constants.js deleted file mode 100644 index 96d9ff68520..00000000000 --- a/src/traces/parcats/constants.js +++ /dev/null @@ -1,17 +0,0 @@ -/** -* Copyright 2012-2018, Plotly, Inc. -* All rights reserved. -* -* This source code is licensed under the MIT license found in the -* LICENSE file in the root directory of this source tree. -*/ - -'use strict'; - - -module.exports = { - defaultColor: 'lightgray', - cn: { - className: 'parcats' - } -}; diff --git a/src/traces/parcats/defaults.js b/src/traces/parcats/defaults.js index 86e288099c7..87986b84404 100644 --- a/src/traces/parcats/defaults.js +++ b/src/traces/parcats/defaults.js @@ -19,10 +19,7 @@ var mergeLength = require('../parcoords/merge_length'); function handleLineDefaults(traceIn, traceOut, defaultColor, layout, coerce) { - if(traceIn.line) { - coerce('line.shape'); - } - + coerce('line.shape'); var lineColor = coerce('line.color', defaultColor); if(hasColorscale(traceIn, 'line') && Lib.isArrayOrTypedArray(lineColor)) { if(lineColor.length) { diff --git a/src/traces/parcats/parcats.js b/src/traces/parcats/parcats.js index 98aec2119e7..41b49adba10 100644 --- a/src/traces/parcats/parcats.js +++ b/src/traces/parcats/parcats.js @@ -1465,12 +1465,7 @@ function createParcatsViewModel(graphDiv, layout, wrappedParcatsModel) { // Handle path shape // ----------------- - var pathShape; - if(trace.line && trace.line.shape) { - pathShape = trace.line.shape; - } else { - pathShape = 'linear'; - } + var pathShape = trace.line.shape; // Handle hover info // ----------------- From 4117612374b99beafbc3f5374cc38ad51d79fdd2 Mon Sep 17 00:00:00 2001 From: "Jon M. Mease" Date: Fri, 28 Sep 2018 13:48:06 -0400 Subject: [PATCH 49/50] Create `parcats_grid_subplots` mock with 4 grid-based subplots This combines the former colorbar and font mocks. And adds a parcats trace with a Latex category label as well. --- test/image/baselines/parcats_colorbar.png | Bin 58803 -> 0 bytes test/image/baselines/parcats_fonts.png | Bin 29005 -> 0 bytes .../image/baselines/parcats_grid_subplots.png | Bin 0 -> 90460 bytes test/image/mocks/parcats_colorbar.json | 24 -------- test/image/mocks/parcats_fonts.json | 19 ------ test/image/mocks/parcats_grid_subplots.json | 55 ++++++++++++++++++ 6 files changed, 55 insertions(+), 43 deletions(-) delete mode 100644 test/image/baselines/parcats_colorbar.png delete mode 100644 test/image/baselines/parcats_fonts.png create mode 100644 test/image/baselines/parcats_grid_subplots.png delete mode 100644 test/image/mocks/parcats_colorbar.json delete mode 100644 test/image/mocks/parcats_fonts.json create mode 100644 test/image/mocks/parcats_grid_subplots.json diff --git a/test/image/baselines/parcats_colorbar.png b/test/image/baselines/parcats_colorbar.png deleted file mode 100644 index 0fcfb721c88bd2afcb67509d73ee02c89d3cf5eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58803 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�lJJvi)j4T|LZ6=C}Y6#6)s-@AEahTepaByP$p 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 diff --git a/test/image/baselines/parcats_grid_subplots.png b/test/image/baselines/parcats_grid_subplots.png new file mode 100644 index 0000000000000000000000000000000000000000..46bc6dd7b980ca7195a7ea995a2efc2ad867d8b5 GIT binary patch literal 90460 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

?pCw%PEIhWhd&a>axg4QC{PE zbtUP#_pA9(B0-E@Lo|~#@!H1924RGo>6Ud2S)Nrz7JvcLjdW{YJfMHJKO?Lz&^iJU zR7O^&-QkLN8mhMIBdprHWc*XRSfZr}bhD|*hMO*BHuGYH#q8`@GJo7_$8>c;WP-~Z zr6;)QAlGoCx=!>sc!c~6SK-KCKUsK#R9LR@rq9_IFbXtwBFC7T0>DQPR8krcGI3u? z51!u>u3R{#XyDy(??2?J#-~PZpyP|1W7jJf*lhM7|3l(qf;@o4_ot+jmvuQaE9@XM zm7JaB#FnGFptdXYz)8vt#5BijI*@bkfvmxz6{C3Vg+-XUmWf}gVeD@JE7>9r8cB4z zB~6K*t;#%_Ha}=je#0w&+vnLWAHx=bocIFh(_O!cR<@lUb_CCXFOvHEJ&&#n7j$af z{+XfC^gAXn#tH9mX4v|m{! zrZq|51EYFZx1QpkqD2PjWfO2a{a1QFh(p!R?hKCt>y@2hiKKOdtFsm;tp}Fu7F56F z&56oF$bNYG5K>HE%SYI-^6g9$`ao){EqHk~M)ypJK9pk`L&4%hYVxyJnHa#S%N#2j zJT@fL7ZluWGQYhL1rM_N1$EeP@ST-OS zJH*(Ay*stI8>hm6NPb6WD3PaK4=SiXI_w~-`?1B8Utts|%hTm;hfcsiT!IQwbG_&S z-ozjrhB`C-J&DmMniyfJ8ZjqY2F{~P@oq1+>O1^Kk_Ot!g;rEHKn5w8%6xY&ak?-HjY!E@(Ih ze%2oapCkn+;NN4Uo&oDRWLc&7eimnAHxx9|3Mbb>!rg`;r3YrlM(;r|=hgoXHw6gs=jD$2cD;H@biBr#*VO_NRN&@<*Zt6aGw<}e>78+-}n~@Hoog9 zmO#p|&Q02cAFbb8pqiwPP|E{Y-gUhjXbcIU?luLJduGV8o_tMSk4tCb5|4eYonFtC z3`Zn<>hHP6TG^^`in%tVa}4K%Z2XQ(lk%%JG^-YN!e}!ORiF}^U1?RMChahxzu2`a zW7avIXNx8$$4%$l_48?bk;j7hr7B!Zz7tKs;znxJ6w0ddBbjKP84N z)@mdzwY?Ctrpodk7MS%>T9{fkWm)xuxyh35s@?P1Yk2PcmGkKEZ37Jy z0#W1dETE|8=MG-#Y0%)H5?h^7r3_u@!x7|y2$d?-vb)4WeCFAa@P7H#Rk@20PNpg6 zvg)e#q89TtV$JufGt1If}52=0C1nKYMBB=A_ApwO4L6gd+W|mcV%0m^n92g?mg+v3J#PsR+wcVBvHi zwTc@q;#VDn5{(_+MOwG20Qt(5t&%YYdCQf_(c{I@ul(C^#B`gbR&~RZ$rpM9nGuL> zINq?Tn^`cv{2CFDC4Ph-NfkH3&3sS|W&%-Vf7SE2rd)n06EJjMd-&J!;pyXT4hs#S zhJ4~HgwRMF_$8+gP8W`1l$niiY&$vrB&&TpL10qHU6jd8aWtpiHdsMwuoEyljkEIy4b*DHNiHP%p+Nw43FW^Aeoi7f9Qlq5LLanUF|upmLU0Y zMZpz<_wT=Q#KTe>FYo=VDZVt4_gA#om}AGUB<3UdxGi|Wlq<~YZHpg$fZMhOS>kuY zt4bV@L^Qj#mP<`FavRnN)uiVjzx-mkJ=kWxE2o|}eprq<`!u$jE!2Pb;Mu18zCeiz znmH=5`heN5mYozK&Geug>-9+fGbqH$aPSs_jyF1EfH;skP|CU90xrN015{_PS_z0m@Ko-dxKcYw0Ix=F{^1m0IwL1Heg5CPmkF^xo< z9t|)8KTtUJJAsWLd<$2!05K^rX=@0_^4=SMDQrhQAC0IIht4XWj|sV!1%al>wco@t z@NSBLE~YYQ=2%NUT{8UbmKw^ndcP~#E$4;&BwnFjb=BzB9||5?rCo<(8+`7saD|1F!Q6TQjz&d!)& z1ny$!)qW#KN=pEV&6k{O84U!&e%gYRrY`30ypJ2d5S%*jH3?tKCCXg8UkLfDL64hv3&u9w+j+EIPKf@6jb1wg0^dBB z0WIZc=yX)<*Nn$C6e5Ht_jGK~H_vTWG zZ{&abJ0xEHqZf(uP<;`{+F!W{sPYaS7Y$K?{qalMkmoSC|%ie1i%Q zQSO0Ks-@++?=v2&Pe^J!zcdL$9(>_fN-N03=bLiHs8TQUS+b}oc06&V3C>{`dxU;K zL^_L;awp`mFw<;2ALF75<-$@iI_?gXpu63a7!|naKY;LMn@Ccay*?2c3?x?J8968N zjV_|neT*TSGtw_ilD?4Akd-eFe6c8`Z9~_ixzPnWzZz(MF+N!L{ueixmdXU8Q$g5S zm+r@5cFu=Z?X%V^OJxqOH#n|FFDxaOy03Xe5vZsV2BsJcG3q9L#)t~$=Sy8BnOH2W z|E+w79g3R)*nEz?&=tOjYVDbuf~sj@j=$0KqJ0ez+Z$39UmCV2K?$*6{ ze8Nr5iM0?z5P{Y}@GK?NShXB=hscvtSWlwpI?hJORGrL}tp@j^Ads_4Itc;i4ZC+KCQ1t7 z?q5YjwIv4DB6FUxI05w1HRlq|kxR$u2Yb+j9Pj109LQ-@+=+0xIGvelS{2>3@-b7oPBDpdNKXabbHdjb3Z>wx2127V% zs+GrXAs)vyYHf|Bt#H=$M#vEGlAb8$0O@qS-7-1!<>u_2xZ+FJ>*M3n=<%{-P8j47 z{U-43^NFRL>~t1H%)Os)4;#ki<;H?8wb8){@1AzAMq~y3e&Rca&i_wUR(5sKt})ld z9(@LxL1ID6$i6Yu_9=7K17-B5xFG#*rs5G*CK4}h)-IuAdkcO7#-{(<$Is+K#80}Y zn+uZ*Jtl&lpRyn(cuo*r1fPyiD|NtH24OSdUD6cNnljBl%vYCwN$p2kCJ=qW zDkUySdAPaxron7tRRNw3pRLTC-X3rcrwv(|xcPRgk%mC?6ja=J+xs{DtmipDanx}m zza$h69vwjK?hK{j`;_MJUHJ$Bsvv4=GjbGR%08P|E)hfO#j?1URWh#|+|*?ItwwD4 z)NM>wPO?xvWQKB&PDst~IuE;Af}uuvC2|1sDK9-QIe(sl(lCZnH>Q5K#px}2)g514 zrF#FjoR;(7h@)*hx}yz3`g1%cNNts%V5(=;{ttbH@orX#&C| zu)K7nP1uq{A<^UA&4$ru9f(0)P&Vo#XiYYY2@cH|$&ywi2w>9g-G&mCwZ1=+;he7q z6iR(eCA@`e_^`vE&ZeH_f=$PTko+mwRNpq}rBV=ostSdzlK&6IhYZRx#91Em6O@*E57}mljJ0P#|2I6eA2)s8@^5r3S-(D4=%|nvW8>U+gY?7r4K6$? zWivu!!2nfN6i>o>!5I~iNb}q7779I)36!B~2kAYw2WU#m)zdvAx5tHd#oPorvBPZk zM%)917R|1!#$n4L>W1Zmxm+8M%)IHMyKz@rysyjJLqlI+%xRL2HvIJprByRX`u8wv ze7|GK$(7cS=cB88NnZ;=MiVOSr`F8+8&(Zwi!r9&tnSEebC|@< zv5I1d4&l(fZ(tf;08QI25;Yx8PpTaMNKHz6Lg#^<8l+O#zlw4haVPLgd!aBq|HYm< ze8f;dexo9dhOAnF51288_cjOgl{XKKHHg<%{1zF zEkQB%g=f1j2*NpOWxgRfK~OldDb(I8&{6Rlyh{)`7ba@eqtaqWxy;oH`%6~w@4z|Y zP(*by4O|Mh+&IY*Z5uc2$os3Qz${9@gtNTdrTUwJ)~TC>HD~jyM5MAc0#)vHBi5#p zyU2%G?nJ}S;v+RQtKU~TlAZTlEX5lrFuj&)5Q@zqkk$tGO7W8^ps_rY%x!c&zjUqc zr*%UQ!k!@Ir1F z$U_wF&E+CX*{zyr5K+#EYb6kL%u^2a@slmAC1Sl^)a%nvB|Vz znj^|-r2}8&I~?}7<~YOk16}B@jUsTuZTBdW^>8b@!PBofYK&LCjr~*h2@s4D<~uR) zPk(tg+Y<0l{Jp%2Bq;;ulgV8%h(KpyQGr0Lpl#7Z5{EDz{jjVEWi*tGJYMW6e39TB zBo~6o*wi_D&T$xPw)8C~R9+%|_Kh@~Q$u{89KCQMVE&6F4rm?I1+LhgEuBnw?*H}z zu>1yCwV{EUY7i%1a<)@dFk;1kccV)Y_&ghjf0*iqBVSig;CV8oO8S~3r6QF!pxVYl zhnnGx%^h)C&{VeI<|lyOtNoy|`E5-|SAoG=J(O1(HbV=MCK5@w@i6_FTNd=3VpkWw zbXVz>yn`i8vg7$<#0u3B70>E!3t_fIgQd8wKDV1K(Fdo61oPq=-3uov0|5=X*1=2( z#%NBi?9SSpJ^UOUuHeLBBLNLmxhFQOd$xRwqOBC%x1hfd;jhQ2ZI}7prrvFu_Glon z@*z&PnR8_f#?&cpim(}St)kVBt~RaqV4eBG4-PA>5G{c2)`Jv*X2D|2ue22i9on=G zf4I=At3L)2%2OeUT&*jj=HPo4P0vePlcDpV3bRz->Igs%A=w*s170RB%=^3sBi-#L zidRb)aW;%qw1}{(r51kYh0ECc`OD&|mt&8dr5PM2e~1i5f2CN8F|^x46wpMAZh*SL zNX-esEfLF9R8*KQmqHRZT;xlt_lQlO^aJsr?ZO($tj4>ZM`akNe%Q=J^A;v!Y;5za zqgIz3n{+klxFIBO3EtT=i*iV>^~n_(7A?cH_H5+ipJ)Od`M{!9H;E~r^j$)rCHTdqLqP;ee+Xa z<(v(O`?-cSUJ2zQC~2m?e(qieA!v)2RP$;l7*`i4`7ej$CugKUK|*zr6u?UJt__da z2r98oEkOCdiXlBS6g{-s{rV5B`}G&dudB1`0R?w=i`qJo%gbjnZ0~T^Wt(4WcO?db z#4D$=%RQkR7f?fn_onoZ$(M?pMn(hg=!KYw9u$%zMZ>~KVAPz&Iev9KAVwb~$zZsw zWx|9n7eLBVZeO8##8JZh*t9WfJnuXl-$?t#Y{R&6_a>#K;G!^f^B<^v1;}h6dj9 z=9^LHbhbjtuRp;HP%6@KrXzV%vwRHB->#hfO2NpD!e{-k+5P^4$Rsdl;}`F?40~$V zAqs?l(3>|dK8a~|q;yYZrog^m^!xoS#w%mEo$_&8a7Z69N4OQC@fl-?aFooQ&pD=& zhbk&Wig4zLNQth09dXx41aG2$3)8fkPnaRk#}M*KzwH?G(g5s~SGB7^#3AJ(i$&6jl=O z?GT)vfD`Ah&U;GX$7i7~W-Ew=uA{Eb4ftXN{Zr3YracbPdTMK9y{0AcTn;kqaA99q z1T9PzL88j-*a*%mru>#g2F}kmbYDe2C`$MnLhVi*Obb*@8p4kcXl8S&fidP9S-$EE zn$er;l&h^rh1)kk(DGyi^xQ=01KaW6=t;cWw@TuL)dsbw&ow-C;A1@Og+qjYr5=97 zi>eqQ8n>aa0I4*m>{^x}F*~fbD~Onxrwzl|?bI`qFIHfVg+f|ysRBV8QN<|Z0{fL9w>R4-SmhIyU2qJ1Ls1!XmZ>(Cv; z0RC3$7T;V`%}jQzsEC`ZaaKdf>chiGp&w4+0V6D`zZdmTZ9Su*I^HN?MAJskkO80qUo3yoirEy651Ux=L2eX-4m+9^-9kl?|6Q>#p}Sa_ zvdf3eXG}@-I+U|`&UUgf=|;j(dV_u>VnbhRS?`h#3r3Ld*E-lb z>p38JNfWrPmf*{^NdJ+I@t?!dDfm$54l=lf=na*0{wZta^au>`T(I}sBo()~WJlj5 zH4EfPkRr9wE3s{fYPc%m`F^#}P7=(Jk1i=Q&?tUiZiA#GI)cqeppOF+1la4K?WVY} z!2I>V(f{}PRs`jGo=p7q3n9_RJc-;J(O>;yH=15iMHmZL2p<&KV$EGcOTJO0DGL_Ujj)f1Me9p&3JMWrf$hu~_h4H$%sW{rZQpNYc+ zEW)Bn<>J6ZB)p=EVici6(Q!xJjcO^>0-NkjuN+9?b7}?zYCcD{G&|zyFfgey&q0K= z*ViMvUFW3>v50zuQ)LcnU!OL4$wQo6PCHbjZX?(ms}C>S24uBSe%UtvJ6OQyx}`$4 zHMG`WXXi|A8-!ozB+J!j*bo%VqYRVXILCg0M%XG)&h?*jsZF&bd$YO7>{_Onj|QV5 z@;-|K$g$RsynpH@fT82T`})WJ`e(%i2#_Y``JclbR?A?LY}M<+H!GtKMxV2({oFE% z-ma3m(u$Ue369!XPH5aOzJl9j5JWRY5|TJD0C_Ell%;87sh{*i6~oEwT1kq{u_-he z*MyW^r6XVBz$VK}*EbxA1_+fZ8^JJRaKK%#2htZ*od}i2o%5A*Ik#?DOB59;Y31Kb zd1wFF<7PSdgMf)FY9d3HN|4}%7pDA19`5nK(=ENradU#4)g4%dd&cc?77~>5a+t5Q z^9-VTs)Xd==My&@ow2v$sXyYMcOvnP4{^}DDozk!+d~>g=j-P1Bs6CgFY`g>>M}if zd}LMFcodLEy*i{}1c!rnUh31PvFvJYP@3oGl z6Oj8;LqyZurvUES|7aW8J*U16GF5tEl&ArEP_>))*tY~e2ZPG~JQYUsmh8r9iB4Vd zfXceVQ#RJ#=bcCf`--9aI4(?P+~Ngu8$%IgwgabBfkF#yCgkcBnl_p>FUz;&iX1Ua zq|XPi>GS3?UhhF7mo43t)J#aWsp{Lm2^&y;;YCFal7jW|rPvx{SdQ`L_ogFIaM#>b zpcOwf|+YB)+|W5?b-#B{Xqs9Kug;N8)rHZ~u(#ha`Mi4K(StHm?5 z=C{7;8ejRTx(xJSAb0^jf3YoKSci+OT&Kpc7{{ofN~0(rf5kd8un)|tL$n)?=aaI% z3Q&&M$A_m$3L9k$gqDLK=5Bb)(0>LB(29PP{#81=Y?`K$BoL`kF3w(2akJ~?ykC$z zSlTC|S@XfMhJSPHbK&os!kIqvFPNCI5p|at{>x`b1P(iOPWl3Fi+I09!woGPe`dvT zHbMqnCUAQugzYa|RWE*d!J)y2<8P!tC?YIdVv(*mDeL<4Fs482WDUQ{}*bu1K3kDafLXFfbP*U&7!`Vc1IM){25xjfe0=t(C3kYO8HQy}sI}PaeWh7`ZvKv6S--_T5z}p$6Ua;PW8pdkEv|I?V&&|UCDj_7BvtO;BJb4+jag-$}E!9sMm1Uh1_W8eK(#H`+MsrrVWR1 z7gU-QH3q&ATvg0Tgin!V=!SUUHS;w;iHm*GY$CtgAV)yGJ^i&E3H;rpg3=ISI2vSF z^&H;znY)3M5TCmtOqe!EJ<8Qxla&XzT_miLLCQ=iciQS92PdpQEu>*Aor7;aS13y) zh=->zHD$SU1^E9?LF);#0b*oA3Q95K`tKiYK1)_Zqz2I!E3ETiQ|Kh#xo~s((|eYL z$qr-#qjciFPU0KUwyVFjaU2ktlKD}zm$`5V#*VHT$|29w2|Y@&1nskSVN_!S;}ytc6+t{!hJo6k<`YLD=YhU z$qkYw`}&SLCq9e)nz!?Qktm~V`Hor3if=@fgEA!GPwOCCEo8M9JYJYL9E zc%p-^4&fSUO38GH{;PL_Nzyuw!|8a#u0Saug2-U^r?R1N_JS2hIgf`(F~>Sy-`XnV ze>}3C#oo{wRYBPwqbatINoAL=!QlVET{&4!?AqR51^-?DeH){I_oh6GlB$=zslSuR zFV#p&ewD%6ue5c`XY#0s183Ou$kiycd4})3wH(B%LHZgFDWY1DgYShYpN9$vypAifx*QoQC7e8IiInM5Ka1eFDWkfjjc+KCJ@QpUb1;aIx9)Dpa!`A!aIhrm+ zXdv@RHxVbSSQJ1zxl=6$?YU-_Yyru`n5GM48U9a@{8hM(jUvQfSNrdsJf!k!5fY_j z@e0aL3(WD*NVI+)&i-*?y^2PN%#f-HcRPMF|F)%aalOb!StDf$*Q`l3K zS>EG66%R9M>aKecd-^yKOtyQnNn%sgHI@+MD8+%T`7HL@FP>Nh{vlI2J1-!#7)k>) zBwOM@euR>B&D(}r-+22xeFY8>a3~c|o$YKe{al4u;i88q0zp_@)J4-x-6*^(N(D|{ zu*oJbOM4Z+vR&3hy?3T7%t&D7kxiCOalm-3aD3?S@WNMVr9*i1Of2R>0avuBA=VaF}Ke}QndMdE=9pdYo5urO1eQ-G!U+Otsd(=14ewVLzhZG{>V zv+&!Wpb@!yoEWanPXfXx_nNm*OBeQZrj=0{mb-iJIR1{-dVqa*HKPxdfcnCn8k1QwFxaSv9d(80zR}T7g5C zU401oHCqy^o5LaM#CS@9ABHlNT}D|hhW+cSr$B~Df=e!3sU5OiV$!QBQY(rk*DNL` zHe%XLf>e8wq*FbmR^^}R1k3U7T+o$Um_D~Na&>gf{k89P$W!HoD0+L4lS%hhP;UYv zDXoNuN5;gG13hihI_z)MDlu4&81lJ=RqFAC+K5M6i9wo zhyix)7bNwyR5gI^_TQmA9}tIM)mnE)DF5tdCJvTDZLNYDA0rE^w>@&2vOgOvrns*1 zK=slm<}g*J8!VyOsY)%b_u7&@HU7FtcLw-;M&=FSdPIYZay-YLQdTZH@yBMd-mpk^ z9!US>2KypJpB#f%=NPWRsSG08g|~3C=KS%dZbOT1SUO*)2DZX!E10T66)B_nbQaAc zsrZd_3`8J+v8btrNCrq-Acv70)DJlyLZnjVr1^{PWGU*mMv#%Qdi+6taGrHg3MK*{ z;Bz=MUEm8m{7O0{2Yqt1?75(R(fny z^CtNc5-a4a{wOXvOoSLE8qGJ>d1#~7;0@_q#DE>+aTT$vBz&Y1WCsQdA3=o2)ubk` zZ7!${vY(qd(x}SfS;6mJv_|fMb%+fAjI7z$0bkc|mfg$hw1#)!rH*<7K%gcql25wWM40qq4!R9_n-e_ zr1U|)p~NFT&#_~sX~}Yt_2ObnY3RjkXg>@oS6yAV=(*E0s~?>HMdRkzgie@;b1H=Y zsG=ia)uEx2-rj0;uY3K0n?!A586sOQD=!@*kj%!$3YRuXikzrATXutE-*kT|A@cmV zBOvzgLpr;B%?3VF#?j%L>54qM#uM^eJ7hBO@}> zTq3|;L;g|-p#d>a!XjW$5I7(V{@$c&9nSdNTH$T0WhFc7{InoQoyhZ7KBF|%VMoxu z9!u#U&wsK@rn~(?>?7AYw)ZnIQa%~=l#b@$(6x1XX(c?POKfi0Z)VSRR&oe76?$Zs zxThY#7`1;M(9u8(Fb<{w1oa?$_U(mmuEQE{V)P?Tx3o^5T!y3151^|CVoCD}R=$$`L!+0H z{xw7fKeLAfAISm+hTqeB=PCT9{z`31mM2z3^^1$TD%pN%>8w#GOyaIlYFHm%GCZoN zsEyasj7=k@k~aq9vqnWWQYPx-OP-9)G2v^tR0lX$7PU&DM9TL?WLR59plyx9b?RF@ zQcryNKw2>rZl&(8FT|&*DpvNSz5|^|*3{ zP~8w>-^OId(WKGuhilU5lCxu-2(~~SX zVLbWJ&hnsdE4f{7!hT^y;Siw3*g5sqOL;D3(iE@kgc{SET2&*>{R<}}h_Xn@PD{8A z)6!}p@A+Uos|$UeZzX-0Amz1;w$k=d(n(CY|I2nXjCM;W zF#Cn^w$*>;-+Fx9{nO)R9bp3z!cMG6{O=A}9vfq#e~sRP81ymn*L4`%DDqQksI5ur zA=%T8fjT6&kP%n7t@%Ol)qm;P-hEc?9Yh{3GQ)LYa@>6{08G|R{xz4hi3S;-y1~3VWNGQw=D?$=liI*fCWoaCcz-Qn zmFc8C-#^ZFq1(DC{QNn7`SL}cUaoNaCLHje6!|Uo$G_?QvctW5UG=}{^f@eyPDxLX zApOPrSkaY{gpIg~KyLvmLAqwatH~F%mzH-s+@o;65j2i$eB*9f{IsQ`Szl@{`0q1% zO$`dV);Pn+Af`XM&{?3%Kf_J=C*oq@RV5+y#X%^DTHe4NAbd>scj}s zIOfs5R>dk6$2J#|23s^Ty7&!TmEnDek5w|9rxNuy&Mby{9I9uC5(QK|IruJ$p15 zIk_J(>Z{A?um;Z}f$d~ksQ@B3TW+}8iCx{*u1G>D_cof7>e9wYWnI&GNx zWn9{>NgfIZkW~Kuz{%10Gfbz2G+-@5^IkT!uh(t`Gv;UN7fQR(0%^e8MiBNQ0Y=INxIC6~5FsP8Ud+3y!O(7WNcYU|H_=vrY9=Uy#ZgSqS5lllw-$Y*rm1 zDwHIt{MwA)XeTPu!~SmwYQX)nHAl{bjh$T|f7cbNq1y;8gS~Cv{!|^3j?glzFG==l;P_A_9ClFTG*;b z7n5vRgqJa;pe5iC7sXAW=qa!AU@eg`7ya*H6?5*v%ODlxb$(bq?gyeu{&N^!AgYsF z2VB@t$$TCB6$RSb>@?kT5tKq%WsEPFJyAPei-UDZ7=n?(E3Kp2%_~!PZ?53-J;st3 zS?(2P<4!n~UPxPR#IEKVv>tM?ZtZlyGxl*_{6pu0M~Vwop_|G(0W~iVINq;-KW1su z71PzsWeT|-<6=E40s&#*fc361+$d4y|IWltZBs6fjH!ikX!M$!dmYg`dJ`aSg5%hO-@H6dXh=?NNxFQH?@_mPSC2& zV3v-YO+FTS&SP2FFV74wiz$SPLVa--wVEEh$}LeYXKWY%7W^LZXdvvr*}x2L|2tDB zB|UE(Dw#e>vo-j#XfeUd9B$T72qiP6L1z0@Ndfk9Rb`u;%9og*R}h;Q{kS53WMKBxIEh8F z&HI)dNCSwo3G$iE3^j4VzKi?fFXvQUvd++JL8|T7Gj-g{lNtK3+($HGKLV4_(ct3p zdvX>P%;gLrFVJRY3CZ4lV0Jkp#QRC5EirbN0*1NS28gFbLkS_dv zD($EQ272LBRC9cKOIZsU!cWGIo}E4z?Q2_M>j~qf?N#EyDL^QBJwOkR+0!*flahr~ z_0XR=xdK`0kvyMlfQ7i7Ine38{r_G7jhhNtc-SZ^BC-nZ8-*km5P*rfkN-ecUQp>U8maRlhX43doU-Wxz8sC+ zwXf$)v(TO$Se(=`#jA>hbBG($#v?T<^4B04K+52Gx$(B2>lE^r0FSJN`1w9C)Hl+0 z-BQDk4sD#_?gkEx(qcqIB)xB}=QB%)VK?!G$csQjd$SC{jwBf!aVv23orsGq*BD*v zCR)re-A$7xf$nz0&`47{@p{G<8s-UQt)L6UFtYbBc zfQBHU!s!g8lJnJ1|CR`*xia~@i&}-;BD7#CY_=U^thOz3lpH1Eve{`(@iU5{6TcO! zal+FHn?!ZL#Mi!&$?ji--+W$Y@Gl=e#Jngvt)lmqzM#zzj}EH=Y7YrqAzyJqdh#M3a*O5w{w)B ztU-hS*?scKCMN2#Y;#ilO-h!ifPn*(_8iw+ih~}AFW;g5zM$wLw;r{5gwz++cT~_s z9)9RRWQziga}^2N=eiu!15E>1&>xLLR^Wd7Llte%VKX52jCsJ|2-2sTY-W%4BvN%# zDAj{!V}j-nv%x{C=z<^S2(8RLC(4%w#64%eNX|}-aynC!44}jvbxNqa+WW=SpduEjCtiKUde$L`ZqB0~W)pjzXtGRmkPD^%Qsi14+nTJ%H}c;A+XB#(bt7PGqW? z>of;hVum>l>RQUkRBQ9^)&BYj9Jdu#5=rMmxp#bf4_3uV<@F|%hR7amSS}rT_uel7 zODhXu#>x0PEy#SyIs4+YCn$P3xry!P?aqG%rFv=HRKjI2QYaK`yoA&YinQ*Z&4kxO zx6$AnlF|LR>nv3m1w5!JsnJ|pPs~n?;#z_l0YS;iom%!zhOrrzc)~04tQ|e%RNIly z`(Xo1IwtWZV%G@S^p!PacOaEx%x?|h<UDiU46`ye?EuAjv)BtN^@_X17kp?oxsZ_s6|tsOAja^Z+C(*`+ zSilNKe>oX=vDp8*ie%B;sC@C;Plpr8N6Rq>3iqB;SLacSo$&O2*#%ro1h^dST0BCe zV6DUqK81Ui!$u*BF(ej5t2z`Vi7;sj4P=eflng{*<@9e_(};jm=f#*q6TSpC|F4X{b65sh+Wrco#Jw4y+m0Ftd zlnvCLTkGX8Bu;#Py8Pd?_Au|!$z0*9$DQPzvzCn{F>y_s&`M~AYyx8s(vq;7u)>be z&nP~{OI6;5Uh|TR`ea^_aX841Bcz)uu}dDaffx#c)EVin>YO{wi&XY9s!&C3RiW>F zo#ikE!@HslaP^MlOX_JO+&!f@z^@~*fxCb7r`@LD)o{jMm{F!X>S1an>{v@r68`wf z!Y~ZQVl#B!sNw|NK^h=YvIZT-w^Y3ybH0dd3w?2VWZEx*;uFy@lN4LCxNoesdt&%-+ z5{w~o2=P9y8oN-T=N%LwM0p1laA4-G`N6g9l7GRt00wpu) z`tkNqTv37Wg$4+Slb3N=ZUFxH@#AsrA_zZFs|?bx0Kt}{4Qyop;`}8geWfzD&z)cz zui#VslA^xSUk>bso4jh*Md>-Ty$kELJQ;zw`ewn2YTehYHU4*;J?khepVE44*WNo8dwgvLk z@HVBMy>VAml)+NPgG7{#BTs*E7xaIM*hvcD_zv9A`wbhtvQk&rOq7%F>!b)3Hy+<( z@SUP(_-c-r*Q43;eIDM<);A+m_W2-d;_)6oTU~Ec!nquk_iN9&8XicK$MEfJEJZV2 zq22rL4%i8%$v>%>j}t^hT)O%@W@Et7x;c3y1 z`|Zqm$Q@bcMH%vAAc8Fw*GqgiA=7sA$Scv#Dw!kouJ~>4`8b+o>!gkc)k`mGcvIro z;Vk5P%I>_)*UE{ZW?<#^BuE~Ysr7E!^I@T?Dp3v}UZtT0=%B$gfK>>bkoz(sr*7_D z$_lf;4pqPTT6cfx$s4x(LIUfoc4;STF1iI3=aa3KkIp+K3eU;Lh5(Km15TRu$Q|T* z>p;(yHFs0*VZFiTN5zsZyr&YM6hZNF?#Lu(cL1q?;F7F5-A_=x9%nJD@p1k0KBwWq zpQuEitFHq{Zc5^LD)atlF3I2l-Cl9+}9mZRXr-cD1@JxFdd$5t_mLz^L7; zu&qsqCPFUg-TC9*Ssi_Dm%Nr!F3T>2>eF>6H(NB%O&`X509KX8sBy@WYs#eBoqxgI zT=?BB*cpeBq-O7DREj^@G&;C#j%JkZJOhvAc|a|ND?j2gJ0#;RBv~ZWKw8om8^F*I zHDmWwi2^^7g+gma=Q1-zLBvA+6LAD}_P!ILUYIA@t_sS|6nZE>fD5(&E+}XLTI+;Z zKF=!Tm;&nS{Xhl0UEGHD%$8g|hz6jjLu2#YPJyM~{l4EMd^L#u@yDzf{#OzCuX8aP z7plpFox17iNbQpV4*h4-lcv9~lwUw%O@tPxG0gJPD$eY1cdam@Se|~ng9H8hX5fE# z;Rd>F#_w-AHs3A(-i<)Teb2EbuslRLym>LbdjWr%fwI0B*1)%XzrnXMS2>kMXx2Gg zBdQ^7#LT>r88;E7r;&^FDGX|~hadg-uL6p3d3o{W{KdvdBv_*zX-JVO8G7!>pI4a| zl=?N5i*>ZYpMus39{;$}J7ncuy!Sf=lDhO;S1n9JC-6N>(I zk{5)JZ1RcJE9hlN?|RzXl!oPR1AB^IP&OcrDeZwz>R64A-k3)lA4ZR>S5Y=(Z!`B! z<`79I($FOvTjvU`WYCdX@|$`H(MO|%q!00@4bWfO!e1go;(dSoyn=T7K10w=)>V<5 z$~tr^ECUyDax?Uor|W`>-4(SUP|GQEq?H4XBhQtvD!o}JGai1B8KxB*Q^;v$$o_g% z_O&QDuy7?&P!!!H8xTZ?QzP%2r5~%XDTs#JDSGJA-UEs@5!VSN(1cemyZpJ^!%)2F z<#OLT{jVJX`TTb{l6%s;e1mrwgQWXQeeo?rz?%jN%utH7&$fh;a$>(j8498UBMM8h zz#j_tb9M~kd?GH9nHE3uA)SDwIfNhLI5W=+!Y(y>LX06qO7h%D;I!Z9%Z z{}W?1uDzlqEn=?oD>3D~1Ii1|<7eRdk|aUknd$Wcbd-;S!3S&2%Wi&%P03$ibkI|9 zO#avKgi=A!ibRhL6cd-iBK93<#yh!2(t*9au4G_8WL{rV3>;9#QfJ?VkJWdxkQrL* z!Wgdu>2VI1=9Up=Q-}vr)qR0XSgeF{fTcF5gJ@2nU!Q(O*U8Z=YQP+Q+u~ONH#pp>>h?s@FIkeO#ST}-VL773P(ov0?n?*)MsJjKjMxL zcks}xDu{rm($6IH{h3dL$lqWVpOd}KOu8&Jpm6U%xzB+dq;ksmpvuin){d~K>xy#Q zl@EzS+& z@(mc7<}@FaBc6Pv-QlR-)G6^h4c1m{4Mob%4w{SDwFeQOszlxf8By>~Fj5Ts@!JA_ zs!zS^E4)lW`JIWXAttZ_L61x5PXvq0=@RF&My?IDNmI}wUpfxoUrL_DNMih=E+*U@ zlV!N&>X1wyk_mJ0K%1H7TNZYH$Qb_A0KU?GbjKl+m$umpu`p)lskD_bOu`81p(Tl_ z58l3jW*x&J=rHN9*+YQD#$~DUpCF*R`>hZQJzxcL->BM=g716I1oj2U$>({Ctx=Ak z&D)Q!h3XpONaBHzJt+o`fVJu+9Aqx!S=(zL?_6AdmWnW$MJUbhh(!6Q!Z)~vLX9y& znCQEpGh6$}iK9Q5pU|~+E&{w^{^3o;L(fS&Pjf&1K7tf!=*Souws!c-e?1q$fbV#+ zzTbVSui3+SUbyUd2X>&^>@Tn8Tci|Y;C-QZ^<@|KOnMTkGhvdf3aa@ie)l~d4%2n+#36#- zYu;P6Xd<^~kz8oKA$B`I*OQ)~oN#xd?lUE7eMu@J@Cy*4m<6fNagYTZuEEmuf>FSZ zbJe;$@sI=PQYr^NnDszT@->y+F&xt!kH_)tuyEZi?m9i=6l4YZ?e;O9KCY4;jw{K| z+f92H4?#-W!)f70^rNf9;TXp#&ZN@3@1fJAjEGXkVRAL3E_X0!n8yKEBS@>k-Y+G9 zIGO?fbVI#8PoI`Hzz;U-C3DO`KKf&HevKz!-scoDi>Tp-inDsk9~`(4XL;{y1@4m* z%ft%0QWzPEbozraw9arJuS{cQ?t5KJx}5|f6q>hJ4~v4p^K(wxx;6psUlDHdjU!kF zb3n2ndNv#0^W;0#V*j}0*Ad+hdTAxMOMV(T`4d~H6-^kO6zJ`5(t)eXXutiSbn!4%NL|CsTl<5ghW3_b3*r8TYEJzoEI{>o#h6ai*3esU6)P@{1h4S zQ0?~xQ}X8`zUu*EWwAvE&#yLpyzy1o$Qf{Nx<8EK$k*5KFd=N(rR|dox2~B|AoBeu z;mZ3t5cQ4Y4@W6ocPJcqgQDe-1U>Afae*aK<2f>i0<&=%?)cg~6JYU(LVI&7zNzyC zNfr>mC?s0-Lc(Jy&r|*?#;%n#bbnxy06pj9)Yn)yk%IhOa4H;h^AMP1Z0V58uK%I-%=zokzeE8LLPo8wie=2sfA%SNPAxyl59o!DJ)m)X*E@nh4$R>hdI+lI z*j#}c*MEc$tPb5WliFAsMtV&;Q6(q3dzgQ|7xjgcvCoG9sOt0F5ewdZv!RZU89*xc+Bl-`9-l%YHvUzU zNvX|BFv;}PVKJfqkWQOT5EY^?5r9F8Z*aM(5%k%U2L@!r#eQ}jdX*VYh(}iK9@^@G z2@b+W?F7hNgl5>xZH4CilvR~QV#VG$WgfapdI0d%!7#`;OY1nW1YJ*O#K6o!NlUbm z<+1^5Nh?7uL*eJD#0Gux>>MoNHQOG42ET1p9ijN_)riUu#|&*RTd}A;Vh{~4vPatu zF$GN9Nau_JLjivi>C$QFwibZ#^__)m2FMp48%vr#??E_p z2$hY;sD1Z_M9y~z68A;C_$8_X;ER6Xji(q^$wLjJO(iTGm=#S2cw?c)npR$JSB zRL_z$?7xFa#p4#6FJ!DWy>rEXI*W!!}Op<>j%B9-dNM{rxHDUv^ zXvoBaF4GtxXj^5bd@po97?Uh=NLc&plA#~L!ou_=>9?kJ8p_}xHU}Ny`DR5f!W7GC zDHYCM4EsM%h%06|$A{0~yKqGG^`V7-*pV-x2(oh`db8@I#WQS0wO>f~zY1z*NQ<5E zE8a#(AS=^@o_NSeSV>5xnKYGcO?TYGDYi$%$jwJQ&Ae+P+bv-=c8}G1b%SwkcOk7; z6buePT+l)=t7E=5ted_)a`>g!-Glp7meGOht>^K- zst60dXzobNvV~(<8A7X3>-LgHsBLW}L>IY)`q_5OWElK*XXgCvzk%P7g=%gb&|e^n z0_pR7wk=y089(x7;70%CUl-26OahUc=36ZKxj(|D_WJ++`i$}9)#jkXvz>ddU1y+S zR!`sxp(OFFK3jMjk*-&Z0<>pS%J?_WKQkYy7&@N)F=0k4YHY+u)n=7YpMdVf2gM5KEbm+Q<0u1vaKo_~?Ukz5X|KnC5SxXL6n+-pCDTASY zyCMF-mSoH3As9_pV<$hVDy`^+MO2k-BaqfqLW8WsnjPzvOdL6AY)LF0Ht4f;-}q?V zuR(H*I?RJYGm;~XY0uqwwY!sSp=M@`Qy>5pVkn9NqksH52d`eI%i+`Snw0I{K!8T z%GYP#>q!?aBcSI(Vc;(zIwV32?OW>F2rTi$@m7?=d}!<$7sX&{_xSsTo`WmRnTdf;p$btl1R*k$_p7_Z&$zFp zMI>U{rBI%4f&(X)Sw z`VOV=8B>%CQY}*W+2Kisw*R~fWs8VWRDAo6mu#sHAA4o)vB81LguiBU7t1= zUSDE%uda*kSUpY#N9e>DBp&K|Fk^d9{y7- z9EHR%1e(^#k=2eh4r$Hio_!&WUH1SYsB`Ug64G|qbN@uV0?p6Q_uBAmL)H&QFFTOo z7LfVwV%C^+=Sj|KHA8B8si)e_5^TZ!>x25G$IWXcKVi@%a>sAC5^JFn$ zs0P^pr`{M+Bi#ZHF??N|sUk|~Yd8PuZ43w=IOIGiEtN9WbFg zQ(p&Ko_+4yr`JsaY~!ECFgf|9$H&q|W(AJE_fs=QKIK85@^Js_P<(Mf4vfGRc7BdI zfd)?0uK9;v@NX*(KI*C4v8h));OCD>ZNkxrp*BZrvAjTMbXYUrG5- zEFo?|5M)JU5oD*MCBCn@Ih9lQn-_~7#?m9s2;>RK8{D7}Gh;ywOgwB??Eyll$g%{P z4N^>2L)aSOa8drPj&TUz_>IdG&1EicEQPdGCrjyQ>*=8dHjp1<+?o1kk_P0WavShG zu7wu`6W(yEYqRvuveUa58^8g%WxOO^J3}GlIm>x|NkXrMTKQIJz6eyPFm&jzq~GSo zEt!6q&#U?ZP3;7e#<)esAb%$KPf3{1((c3O9ZTs1mUv~6G+kvkUM#U2u+gU>Y5*p` zj4c}zJdKx5HHbdjPnOP@H3@02QKvlTB^nl^j6zM~!XLIx`qEo`G?;0i?nbf2<&5_( z>g=#6J62lCw!Wd3(yLgJPgw?vk*7ZdLmAynVtSqrUoq8&vw!CF2zX4ffSjns9*7(o z{9zM>zmHr_Sira9Vl?<%#|1|Z!%(}Z)cJF_8?t<68?uUVa8^w`v81Hriamftv>1vP zjXL*-5fv)<58Bg>Mg47DppBciMx;xsf`sej+w_rnxD}OCu!g`Q^_alSJWv56#fE4O zBejR3v$|kbN_V9|<%=uyu+&Ybg1L4<}pDl9()@K1=F&+4yw&()E6!^|Q)FX59Y;cXI zIh4@Z^!ab5=msXWtbd?SZ!PPkZ3lc@Cuk>5Vo18wzHNS}`F z!85aw1nQE;hM>*l-FL&3uc(eD!lV4UaLJe+&}e0hrd+J@^6_$cv~VUlpI|3$(2>+o zie)_T^Gp(>$7{k10-^FoX<^-%?M6>F&u{Lh;z3$`OkVhuypTCNT|t0#|Igff-aN$< z7r^qJ!=#SFU#%iR;!MKA^;9EKpGVpYEqL{$k?&X7Wqxpb5WC7lENxL?K({L>Tg@RqOOVHUau@#%SRd!bQ2hCAI$)US z%?ZA42hoO%cqt=rGqA9M0mdr@f)mCEFy=xJe5WP$sGx zG5BToicBsy1rZJV<*n^A<)LxdU4L(mRi|>%!(5QPW6;)rK*O-dVPjDuv~DVUN5yQM zRsI;L^|}Z#x(|m5Usf2IMuf&)>Tv9(nj>}UfuC}U+D6~i8Xmz?^kl1(#pG6WyBz2v z!TBa0K0Fs@27UKR#cHvseN*U$F9kL($KY-97~ABv-n#xw&3B_ib6~mUoZJPRq$wIH z>dhz&r*#A$#F5NSE5U+{B1W$-SA-}$$q|Dk2=LD5N~dFAWB&U*2|bC5Oov0w<*0l_ zT!kIofds{m22j80CJRSAJam7MHd;;et+u+?+b^=Q7`5>b^!cCG4_yw4zo*jW$u-CT zn7%BC^bf}2fPRQy_@xIF64?Lz6ia&dYw6!o3@)O7$$G^9?*(X2v8{k``dB;&m-Q!w z{Ol+_DJ(lrfu&1eP1MZO@{#%F41(v4#RFDps{oN0fddmVzg$Iti%9f>G8wM1uwK$Y z_SZ(2gI6Jf$S4XC6(Go#2%bGdawm@R(L_crkhCq^U)E4Ybu(4;gG%c(H+k)YrX2$i zn1JT)^eHrV&GGOK*sO%^laEt@K>&Bsm<`79hlNvzMaEA0*Byga3s)^(P>Ktz;64qF z-Sj9UD(FB$F8sw}`JnIe3`?Ss0jk9gZ=a4CZE4;|Am?&euxNwpyVs&nh&pu*OLMn9R#^V2(6f->v)@@$t zQSc*zSY$6<5rxxF(#Qfh?O&npipk$%M)3@Tp7wkoYnfdk@(U4@s)9mqOV=GM4nDqI zz$m0|`K>VZ9Y75PZ?v5`8G2vfQWB{Q4C)wuaYbOnBQ>g1V}^5X`xe#Myzsqe=+4uo z?yhJ+VYJ>R22&=$e+%oo30VFGWp0q#Ok|S9)TAhZEg9Y_H>REa+F~z3wa&o?+NMMl zY`I=V*EeRUK#Q0?`T>>iUgBdVDNCZ^rcr-@4TI*O7CN;jcQq<$cs>8irg7z}H+HAO zeF?mA5lB=)&c`p?uLAV%sWZ;j)Lv|XbLdT zHJi2U zAA>NH$G0ZY3@`+SYPadp+Wa#U) zLSed0%$pi8?MShUKPc$%Ohy@_)oaSdsd-`fy$um!cT!l6F8iE=@wKVMZ^(-gCtR2S zqeC$k`|my$)}WXv=<105_vz{71ZE0cBY~>LXg}ZMF$$7*;op={co6@k?r3BL)z{D7 zQp&?bv)D4%c}+$%-E&WXVc~^q!sHOZ0$;J3{tWZnB8#> zFWCs_QigVQ_P6e`Nl03j54%S=<$i>&`O(IX=;eMTWjT}VmC3kTl-uYbt3+SRCdbF) zEf%OGLL|d|q7_WJ1pqHX`Lv;A_VqPO&Boe&<>ilLB(^9)XY7_W_#75yWZ6m0J?r!E z93rdNlH=XC?bAol>-=u7gH?(SKWc~S*PR3`gF&7mjD)nDIym22pyp(;&~A;x{4#;i z1gE}Nv|5vp0hG3?&#Dj`XBJn8Il*typhMw%=wo>my05rfN+u|zau`9D)ICLP-O)xFk>+K$TuHC~@|J4f``%QaXMjxrJzH&j!l!ZQzcgTD zU#HBCOiJN6GM8+H;fXl)d<8h?#+%s?{yDd zt@3(+PQRZlyoSpcd$8u2$QNb|X{#Jdf^1uU{oYzWl@Y0m3mU0Gvy&@;*w*$J=|dGv zpp4N1pdunm9>1Ap2HQ(BIPgRbZJi2lF{mA*M`U?E3K(1*yMq4GBOn zBZ}uNH>C~E`wq>B|4t*-(k+)@E+OuZ-z05_ALLHTn;-;|tKBsouKi6U{*QR$bN6_i zVZlHQ*~Wjq+#!EQKs?ynp4gG2v?tO===L9RBcMfedf_|#mb`W4?^-h!2X`Qnem~yV z)8hJtL0yy~x(Y0FO&o7+;blOS%jGNB)#gdR+MGC?PzgO%C4cWS{mPV354Srpf#!Om z_7%RWycmCC=wF3*WoIB;(${iI(QbI|I5a9}C#+K=G!H(nnYpr%Yacf0T!0u0(E2wH zd7eO2uHz3JDg`Ax85*Jl0jrZz@lS*%@vv*E&%(0Y+i8>4W@*bdSWgF!GyfSyt4Jai zI!#}Y;nDdE>3zj$q)@WnS4&;!76{1J`R%J^#5~(AODI%Ee94jjdpPn z^}UdE(@!0i%0L&yU_Je^cM53}BAwtw@d+J@o8vLm7s;Uuf9W&==c*O=E+mlE!Z%<= zpRJwP9ATxJxs0v)3QRA=z2%0UEiljib(K*sIE|k;lD3^d2KzTlY6ryZNE3Xw>z1dD zCq#Ca>hporM_3m-W}?m0vtWrvKayI5unaru{hu1H>!pqrtm4r5!gcOW71zJ3-0H@V zFC9L!_$jEc6)m7`Zhtqd86D|QYBO+fw3F^I9cqYBnFiS%yH+&UO3Ij6K~U#mxwTtb z4pK;wpz`E&U$2yP<)thGp%SI}Ema%Lo9*@8wexHpp$d`sEkt`gD-P483E8oP0v0)b z6~KS}vQpulFv@Tm2rz%RN;5_|{&pgQRL|aFokW*b&K~*)?#syk(TIO+??F$^9@I!+ z`p&yz(lUtm47$Re?H%j?(ctdx8mxGM;smz>f#U9^ltOW*!L7Kvl@i=a zaWC%f?(S|o-@nhkIoG+#WAm1HPb7*-vgV7 zbmW=u9LJLb`P20H_6`&bD2z*mKep<4B^L&Vx{Aj1&bAlSI=s)s7O|}VX&H>Nb$VyS z1A46DUeyG^o_=>Y0zY`Clj=tVam*kB2G89yKesOV`j;O>>Bs1$qQ+}mAXzo>+uPv~ zwJBWYhIeYh(zvZaayg2}@_4*8w0 z#%WMY2U-jurKIAhq7k->>s|Gbz+>1KuG3NaQ7y+Z9&Pl=!3(OQ!(<>>*lou%rk{3eROP zt0EJ;h3w<`3ZLpCoX)PQ)O>yKvrdXUH3X^1ML=b-b7%Zr2ZU7fLCBZz=LOJ)n@J~K_vE= zDCK@u6u;hrpu`V3h5d;Qw=K|#-2VJso+L5?)vZf;_dB&V7*X)4A!qD&#edd`VE<_; z0NwftPA9e_d+x@?XIvQsKS>9k>6+k>v{u>u=ao{7h<;g8qFhV7j5a- z3ih0^OcHWt5Js$U|3qaT$&B=nIZVIUnfoKeUgfz=G7fA=T{xOEP&Y4=?o_s2G&RNVh(QjWm%u zh!=MqUDG#1afUdd^0u?N@h6Z&57SBbttZr%Z6zo%)=<#z@%I~J_#G~S1oC?UoEbUQ(l1I!b6?ucPv#6 z1JI5LglH=Z7}KmJt9;(+miXH!yuf%!;I6d76pdWjzey_JUvU~-1IEN+D%~>dp}`k0 z_5x=0s0$^RYB9DHw=6R19p>{`Cci!DmsOF)WDJB*w0#QGowEL3#wFvLNsU0eLK-S~ z6&yR962qb{X*%+42@tbKz_;-2`ykK#1y_c;fd>9cu)Bch$0ET#1%yN#_=e=x0upT1 zbd*j~3c@zg1s6r^#7QlL0c{K|Zuo)P&db2&&!IFDMu5V2L#ZR4Dr1T;T4=m54ZXa8 zNf5eO^k4BDx%h!0IhC5bqXhpy_$_sXqOh>ktoZmtO{uX(<4yd&E|A=BOVmYUWm~QM z{y$F?D}@|RcF=!v&O>q}M-n4+7@c16A@^5s@Y)s%MNxOPA$D&j;yJyVm@*0QM}TfM z!FvLj5~eSJ-fmk3xxz%G_ZyeZ4?7f_O*^+{6{~`00zzP&K*oHC&iKHqoZ4}BzYkUrh0nS ze}ikdDk8~EEZ1I+clLxSy+@A-Pl(Mhe9pYry0bq=`+t5wi()V3&5R`4Hgo|BCiiHJ z!b=BIwEQce%j!|DLkR+|4REruJ z)B8zwf9|mSOTv7aPatO4U|1>Wt%TIJ{=vi9^Q+sjg2~6PaIi@tH337%Y<^c6Yah4I z_jzE_*g0cwtf$+PjB_%UkJkblI!B)*U-!Rqz^?Ia25$!=NeuLk_;j03(LkN<&nd>j zWhD>gbdc2d-gA8k*ycynQrOL1;6-fy`}zw=1Zzml_Ga+`nHmP6%U!0&bGRyS9jFea z-R872Q+U`PE-bro9$p#=yBGjHFjrqO>@M3&tWbai^T0>@!fBUi{+~U*Bm-J&zb9-v#^IDsiun*3hpp@1!R#XP?6Gz?^0tce z;8jh8#6xFW`-WQ`QSG z)3u}=p@M)>1@7BTPy>;RnPn&nn-g(Vw2KlkEnUkTK6?T>ULlQO5YmwYq@oe$;RZc- ztBPv^r_}pgR-Tsm9grHw@Q2XwrrG{E52;*mKKgghk?}}@^GvCPff!e}+*SL~vSMyj zcxz@xx&=yw;lJ(+6CQu8WK`ov%_VzV9Hc+%bJN%FCt^;Ti1#}DKwH5QnV1oE5@~=E z#ELN!@b9>4E<(yUgg&4tk`0`j2~iH)K0BI_jXb5B*+@GMyTKZH1 zLP9S{(XgV1s_$zk;*t}{@eFR<>htoh=|HEHJjO6yX65Dcx8wXTq;NYIq6%Jd@Md~X z^giSH1?k%GL+06y1Sxx(Qp_PZNSJpr6O)9|cX<|W@^EbQI#*X>VPmUsH-S%ddN`pf zzo<*T@g)N-nW`eyYC_j~K72p6$!pQ6&jD%QVJ9+1bESza8@AQH$K!h5o1tr`r_oYU zV-S?TQWUeXv|qhXTj%(~9L$nGKU#l^^dZ9h$>bg3Hd~!;63@lWvbHb=m;LpMb32O+AFuJoWNwLl|3Edrm?+ybR0Ia&Mh9r%zic`qn6`6PTI9DGY?%-8lZy0F_-VYED>os72;mw36ZQ8UH1#SYc z*kTM~^-@*a`(J8)GGwXR)faxoPuuo3EB-)YXokmXe?qA4Q=F0!w$JwSDz>5GkS#VD^u&lLI7aR!q56HOz6 z_>mF!nej`@(Rl+SoLtByX^Y`$r)0C0#)k94M0j82KoE;aK#J*~mZFIYyos<&;AjZw z7s+(oB?Cg=KpA4)mEga&^MUP3&Hny80RIIg6ebKYE&&3PL|bD<|6(tv!${-<(*YCPRt(r-MWbAY;^6hQ1)P11Q2G43#~@6s54IKZX8 z0JPo}sX#@h!vgR{YMgJSkAC1CjR^lM>dD`c5mBLLegH4@98@vt?hEUmxbfXA(7g+v zhl$X1<>a;cu<{iWwiUBU`a;xPs30r@f-%vBg0De2Z*wLvQ@F3Od>vrHCD-o71Rbtq z4dIVY098IO^?bYpP8X@`rsihd#UQT8ZHz%)=4wu_Wfht~ID0G;&HABVs=dhTKtVO- zY`+he;x8n{DA!YsN?vM~FPlfp7{z4LCro$+iWD*+NG+kx#6>|Tssy;WA;7OWv6{eL z6~t5(1#`{V3#$O?I1l~F`}iZ=(%>;<;B#xRHP><8UcPF&8dR?-5jOM3ZZ?6{rWK774~Xu&S!>4s(wKm;71#K7k^&Qb6L2}Ew*Ep3N0aZ*!G!4=I#0f% zB=p@dp*>tVBk;e4-3=_FRg$ytTU?DoMm-p`Nf0&r253a!)$yI3)Cm1q+P`v9KR^7~ zd~G&>ktM7RcM>?#UQ027Tu+~>{zaHOAS@Y>VD2EHqZr5?>r)ttAaG5{+AiU6ew@75 z6`-F)v$f;=v%LT&_M_4;ca!<3M5`qJjQuZ!YFrpQ=DZ~8jxoYCNWw~-F`K5&&xAJ3 z$3)>E!yk8t;;BrXEYOiW127#~myuhpO16g=chGC+(Dw~id5HMQUr>-)^B)LB3XNX> z5F-{+A59fpX)+w$p#gI$Br`GdQV{hUlgWs%miGHU2lzq`{X6sNS?e%j6{(YfCF1;a3=|HXHy+MjB-+{U0%AITo}pe zWDsbzm^!`Bv6gAD&+~EL(Z!Z`dI7+7(ET>;2S~;evux)6#xQ`wy^VlQ91M8qqk!RL-e5!33BD0NZV&soDzNt3N0AFq}eYa7_P9>6+_T2z)h zk`!jFM+2swqZmKLMpf6B!Fx{-pG#MD(_URcN+W)UHd0K!D4_FA#>v?E$ckPbQ08;`eNnv*S|vXDO{1 zZ{l$5HzrwLpYlMu$K6Dcm1sh#$4$-Gw`7njtNTpLP+Hs!-c(WXt|va3yMfAo@J$(X zhwlR{kVVyLu0yZnhQjeLU^Vuw&ug5pLUOUm;QQAwg%l^UCesD0K(!pyZkr5Zn@JCy zx6#(|m{>=$XqKElBL5hb0&04P3)gX?vWPH}!813|(kn$6^}FXxIDK!R%-;4t$CnUG zn*nE9TZV+eaNb7qayYf=5yeJwbu|@Oa_zW+_J`mC)C#_$OPoni&LMpxLlA2``PLvN zap*6s)hzpz^A8@8`}S-tMmCbzzhm0SeI>Xk+Y8;iowB22L*l*@=iJMD_?Js=&EUK5 zuOCiP(<80OMxwiBokm!UaDp$F{pL}3>-}yhy#$1R? z0w#U3NiFK^B2HX-4GrdV=k~=$qZ-0$5ljVCoynJzjxu`=MBOyaGjlR}9#ygM%J;j! z;<&#MOBnL^x=uT~C^dOudmPS$xy_Xzm(E@u1iPKnjm)~2mZlGkb~`r@bbkp7FDBfJ zqpT_*Hdb&!eyu<~5}G(s7B)=%Tl`<6m+J>vK9v8GHBe8Z6^%Npg9MC90G$@Wrljnt zl(3ta0gH%N{4`R={H=hVGn?)?7>ay_y=5UDjM#V%9EoS{;g^6!gaVl^1X-8dw(}85 zNCW|JS^NjxW|W*q)(&nWmMIy|NH~4?4jpa}fG6B9tUBww6n$l;_mWj1Do1%`pUM}T zZ$8V$IVHEJ9&t^#1=FWJ{qEwD+|I}CJ>lCr$+afj^zqDlx+kmYV;& z`{7|WK#$FE=JR=rn5a}On9dwk-ZvuI*h6TIgSU2KG?a%zw#)g1aD-{K(#W(>!ettf{66y*I*3d zYkykk&*bD4(`R3(gfQa*am3GxxLp^uEId63to=U#1I|*IE_y}~iT$t+!((#4&XZH} z!g7pyPB^H9&JP!TQLsCqA-)Pd&0Ar_ttb&j>XKl#f@+a`4CiOM(i-=h;1$JVM>=>@qdR+`|UUA2sxRkpPt#zckAZoV}ol(-I|WC zCV9Vms`I=I0@2oT+Nv2Ce|{hW5GC04mL&zx-<*m!iGcY~8!n#qI`h{6rM3Qt;#hya z^PhznbLrvbDb<5`w?hr(;t6)#?SpcY1FTTQEJ96@{+|{=9hSu>HNPAmiohy-d}$5* zZ<1nJ*KH+>h~Ysxq-eG}{EYH1L71{KLahTBw2G75IO?YVF{o4-7Uz3U6&NBCO%|%^ zw0}=gL?XQIJ&5Jv*TTnt+e8Gik>+tWA(%@M`xr%;y1x>)5Z|vy!dTTpMkjdi>lf?| zG?7JEWV=|tnGi3sgM%lH5xqp6EjI|Y8cGfp6ORWFy^FYiYzgM(omt<(T5p`VdS{4D zLLSZcpUlgZ&BIvIUW!?UW!;Lt?2C-iifn(Xx5%Op*_)sv;oE=Bs1ow~VGOAEq_qIT zP)+kTP)RO7!hB5uyy5hVtdr(3KMCnrJhGN?CEf0yvR!plLo8>Zu`NTVnhD`2I^K?+ou_zXDXY<}W69F}Uyy(*1-&`=-Dqx55K&k|h+) zTYzV){_kGZXuPs@Bz<-~s)!GyzBvY`V-&<8acWtuohbWK;>{(!7b$GMQeD8pVG=G7 zw*=_Kbe}D1s`;QVB1Po-ewy6C{+)NDY4{^TKFdYzdHTiXEea@2E3PW~S%j~eWR$Uh zr1-F08L!b5Zs_zxh3B7jP1zQC>5(fHDx{`U4e?`=ESQAGrD3CmEP*d}RFOfkwHd_@9SX& zb%z2XTf_{p?)ZjHn|ou%zKk&w9YaeaBQ;G=VGT-)sju+99jPmoMqd`F|n{jmAxD;Q8=A@c0{HzuEN5JH{UNHl`oj39e z)trg(W*zh5q_=yWy6(@U+S}Bh&Hj}0;d81zV6}dd?Q?wZw5w2KYl>ePAmC+MkfnSq z7@3}PF+9b!=}0q0dfpwhGc31$#DWDTWUxFGgKHX=jP4|jP?cJKh2wj~uR_dlsmN6H z!~H8ufZ@FKIzI6bW#92G79fkj7mim&OcOZUEtAX0EbJ#oWLEoHBa`uRX6*<@%nUIy zsWx>2_D)R#2Dz`hFuZBC6FG};DRbfJzWCw58uh{F%F(O^*PHBb;fbn$z8o6*Ub1-0 zU7wDm8|~IvOrW?wX~qBDFQdA1k~l->#=`a18rDczLFS_!;p=i90q5vp$7^c^g_v39>Zx#ish8J zI$s4@%nMTOZ~LuqzKo4WE%Mx-O^jg$pM^IOSZ~pm!~=eB$4YzQ>*0fDmN;^qI0_> z%3(cnrujk7;}p^B)j7i7Yp=f&6&cnZ!$-({V<3~+Sj7zOV~#jg_tRTYLjy~tegzcT z86pvXkt0+f)|9>M?me0<^y9oDOi%^qUl_spQs38!mweapVzt^^MDPNqn^u`2UVa-l9uGSy zV(B!-3vc+a`*%%M8T7Y#1o*MZVzmaf$+?+aFPhy739PlvfAE-(;2Om$mKUw+<_t{$dr#r5ti2F*88I2=zi8`mrcXO4LbcIJaRT)YDX8-fmms$AtpT4w& z&(&XNQfv~Mh^rPsziOHg+{(s6fJ#wVj{MxEkWsPs=i}pf3ThuMU89dhqjOfDu-3|6 zq~bnq&tW%HugJS}`eVt@3;88t*j}F$jJLTz$;}qM;}tQr>{DeghX?jdZ{VOxz5F~n z4YG(8mZWlS?)EYj(CXA|g&!M!#j*ZQk}Yx(ytAhSpQtx2*>rEV8$vI}cl?CbM9?l= zM>(-KobBemH2c4vM&sgX`OZ}qh;#=pfp@ReBJqZCA9Uv%QJ_U^Quv4yBB_W3~unV&?Rz9 zB8VHHZB~rf-%C&NgLZJ;LxAyj-gMWqX z{%Us6E85V|gzC*1h5t?a>k+cnt{b{%;vtC#@!HOlk8KvAVQM|eU6cHA8o8Qs=k~>y zKCG66fhtS=36HNtBgVSNZX&mL8A1I}8eD3-PzSrc^7NRcgD_~&9J7LGakez?=0nWa zc7kAYNU6A~#4>8=N&Jm+_}gQa#P6Q>L(1H6gV>5Ly*a1H*kRU7kJX(?sLDRXn$_i2 zRBj)u3dhK!xcm%*M?+V406+^ZM~D*#<7rny9%w@!ND4^O(T=v*8JO1;KxB#}|AdS! zsqyi}M}f%#XgfM8z0tWM5T@Q^di0nF6|jj*umlyZqGss_$Kee$Jp5K3XDZ-#-V*az z>*oG8b?=f|^}8JpMO^>Q`tNC3-)#Wx?9~?2^ljhu`rVa`we;+Nm_zi7g zAey!_C!=Bzqnp3#*CDx4I5tC_JdG1D6zAI|}>(UoGB+x`)H2*^taC4it7GUo0m3w4EEkk`vPWT%El@FvCPn3b~ zqH7?EN@Pv+2rOC;G4>@FTkc0MtklIWesqV8Bnhpa{n<5z;ArR08(ok0ecW`Zb?y^I zWJMhwd!v<;K7Ox>7lW;nOb&p}4e@*TzJa>iBC(oe=N7{oFXh?Eva!Qnme_4^#mztk zGCOvm?fXBoIkWaU_eriylrbmxMe^Talxfl%`{M7*P|5*Kz zd+5pWtDI&jpqC<3eNNMa(SlmOF8DOP3i3wInR$qenN6;qX8myK%irNZ$+d+)?uuO01z>}nvISbAO&D=? zA^2c$_RqH+>w;+(2sU+Fp#jdd&5`JfL}ORbV!de@tL&=3)bwnx*;Nx9OZ2Q+DY$2} zN9ku+2ZWwK-$nRms{{L_Z;*==J7(jQ?fiE=s$)EWlO^{`IMy z2sa`IYV&)M(n z!x5h@i0J=iL5oXz1`vuIZA^X;QpWVr6f-66V;$S1NQTK;`cv~LPUyNH>uhtf-k`yJ zmUv_!^}O|qi0^0BM<_|k#A0R13ApMD`+&4T6H=gNpfViX(eA7hX z++{C*;^TRQf*Evm-0!k-#7nPd!${UNq&@h>KXX7pa&-f(NNMlk`Gy*<%XpY*H6yaz zSq4*>SYg=wkNF%9bY(vSL+yP>ST#b0#oiTG%OicNH{)hXLSv12PNqs&wE)dHm%p4= zuamZ7GB0YfXjs6>w7X6Zy{ttqMiI|Z=M-hG&n%2|0HHyeoTZ6Zy^oQhH-810)G)HL z?#lbjD7#b>QRdKyq+ZVC0Rl=Y$k|aEol`>a! z_M4x-6h0~<2u~C(?t_`DJ)QR69uIEbmhNw1G-?MycDDxm9sK=&FUJLkO78`pv>U65xWTJFND6cv-ndB;H(+YpL1p&~iQKRf35lyGDF22blZy#jv`k>_o&`S>0c= zgJgfS_hu-6gPRj`@E5QEL`qKYorPHM$%7SD0$WQnSm7v@0E8mxR{fSXTN-*gUq0vC zK81q4QA3q}78Sy2&a8JdotwY*qoA-$aJe2;o6l81q&;KBbGf%1ZDOPE?#;oi4-lk?fX55 zMXB9A<#Wo^NB|{(-z7a^gdae_hA~Y}Jy``Q1JQ?PKT+|UpK5>}Bac%)cEOx?X8xDN zg1T)5w+y)_Vyo52di3+Mvjt?AJz-bu(#%(6Nd9=1bFd% z(Y5ZqZuTMo)2dEqtPIDVaX+6qG|3sB)&b9B?=COW$$v+Gk5z)eSYSe1T+)O91u3MEo-MN3?FWg?6T4ON^QTv zA!Q8TtZ|gJCgwbFp}T6x^vC;|yK4lMr3gyn5Z0wX?L#rZF&mjhfO3{fntY>l5;uXr z!p>4_KG*cc^4K&{GgE$-pfk(t1lca07#Tqkzk6VScl#L? z0=fQ)H69jB*aUgLImv97J7!!;hF|<)gm_(boIy#q^(&vNm9_+O{smIzKGW&1{-#8O zrLauzkbbUVIxVTwO+9dh;>==D=kS_x$6I8zzcd}bS1!|Qq!vDM*mGt>8#h4NG_`W@ zX>;d_rs|jf)fv&n)fQ|PxyTHe#NxGBTpD92x~60-<@k|cctp@hp)w-`RxUNNrmNSN z-Nz!{5Awwg(pLyW`sV_jo`?z=gHwto4mHlIS!u353THOuPs5#S6?tsC#z#ylF_uTb z0%HaCX2g>_?|8<}WG-sJo*EoWgg5V9R{v)9HepRzM*SPk;-`!ZL>XXjH=NSwPY;t& zgv7g=Egd#mI3V00V;vH`gS&2aYGJ=!Z;Of$i@?5~gV=w;Q8b~NGXD#aOdKzQfhmtN z6tAM=`CGF(Z0_Wgyz16=d?n-38-s&y2CNTp?00!FVf^x9S>l+tim=?UCC=!eC-st!S zx=r(kXm2N!u*u|@+;<||HRIS&j(Fgq~i1!_90ifbb%krw&IG;mjrN&ukiDnlX(Y*0%{` zR6IwBK8EfvBo99KSt&%R1B#vdOG@O3CmP<6A;Q>8I*4iDiq?;nZ6=xs?SLlD8p0fAiT(rhZU-F?ErRE z^YdOBtIIGcm_Bw?sYwJ2@bItztbVG5a$D96{sbHpcI7Q|40xM=^yE;yxE z_KWlg<@M@5>h7|q_FLAmapx;})6;in{O}B)JGTmi2h~7&?p4ihCtVp1ZQ-y<2H0qh zvfM{^-L{+|+6EX1a^{_*N{OUc_b)4V>f`k!|H4o!ErAC&HuV-boULcnZoVzrkpl?G z3$)G+lK(E&o9YkwyEPpCH;=kS>dCH)eK)tegt6u zn1^>6Bf$pyee!J=XxUr%jJMYOVY0G)b;tJ^4eXLyLH8B&&q`%t(#e_@GfvAR+cXc) zKHnGoU(P6bY$9+LifDY$08{qb#>-*zO2o)gelyrP)E zv{5%_?EDYb&*wBi`|V1sy?Jx1JL`Pn=!y^yI+1W%UVk-8%wmk%c`Y_{qDkUp zI1;vi4;T4}Zj+DP@AZjEuvU{RSi1#Ra}-WV&lgAYtAyp}+73r=y4b_#4ul)~GcHJe zti8pcEEp?uUwypc{eqq6xuoTapGbTtc5q`8V%KRQ7;pU(J7JIP!4Q@Iwh|yz1S1ij zQ&C5_gMH}9FM#vzLs+~bUZlPbC_XE@!7_aXYeQS zKF0tHY!X%K@z>m`gO+F=kKMG-+gr;n6c{>^m87~`9zNKCI?*+{6V?%{VVCx~s^yIB)hNcx6j){kI} z6!jtTHaV19YBvatJtVSKX8T*^gY18yIU6l%PFwXq+|)V{ccuiw#wK zaQ~ZJcpHuVb32z~z8X$WK>w8cY3EgKj@9Q?b!3-fH!{91vp%z46>$g<>!Z{UCY{ zf%q`OP)0Vx|Ik_BYhn&uL^flHKw$2Hgk&=RTuS3_5~iW#nDZMQ*rRqqKw%;4vgB-O z{R*CysN!t7|3;Z>`4OjblM4-2Px~JW-;^$zR}Q$1T*agXbTmRnP%wJVL4Oc<2L=t@91u8FpYh3P}cdLBC&T_>X`iLEt%4@;pH+Z~90E!ZI!*>{K zMbkfGvPN>!LB&*={fOH1PM2OC*w&&8_MFiWegC8)D!%ha?F-Xxi#NmWXx5QE>GKsp z8Kek_N96x$)GM{L!`riBP`FfYG51NWQ&S&Z#gI~1CHvV2~PvT@{Ve~$47Zb z3P*9#^g4gX1^YQz$-dGiWkWO_iOm<#!hrG@J?UcoEXIKw;{QM^b%i40hO@i?+f{0( z4Ww0g{&Er=dL1{d^I1z}2!QR~!Ka0rEG<#L5{g|>G57#e>&~r0IRnllmOA8>gin^B zI6$qeJN2&+4@8Y&bgc(|mo98KHK2LO@fWgXv>r=E$gfuP^e}tz#^cPDzE|SsdyBiR z@ZzsN@X$RH35Dmc1EXEty$Do~3J+&kPlKBwLzBogP)oJ|Q!%uO^hj8L5488ci60TcFeI%S z7;x1{52zDHbMUR!ug-N;W0X8vjcrC+Y*nUHl9PoL*pnl`3ZC3PO>@m?88w`EEaBP& zh^0rLX;4@m7D1dXp5C+hWhM{~@RFLTer23!l>c+_Ccm^g{5AK>$+#q8vV&ac{!5rf zQm(g>Cj2WQLn?nf! z6O4ukZWRIzxa`F%#5#-%5=WaHFIt#Om@(_AoIQC z&AK`suubWF3+=t6%1&*a+%x(*YUJ^ESv7u_&4xjw|F1B=l@UG?1v|fMG&Kq|R?}Tp zxG)UqupY7H>7FB&wo6IE@tc{JJX~COtcxS=v@mLQx#WiQYXJLVb%<-_MrjfS?8EN< z=J*~nt50ff#ue03ISUjb=!a#JiGrZU1bp|6#su6qN^dnH^8Xqyy*QE7TsikYKeYWQO=8|BP8FOqFgL5ye+=a z*rw#atzp1`@x#9evt1M6pxPd9Jac_Lx=0kdlE0oeUIW>EU+sOa*7Vr-7gPQvSo-Uq zPfmfcT54Cxbrzc#8EUeB>nFs(Z_`S0W3oC>hLx5@7D|4^R}vEV6V0L zhgz3`gx%-8WuYZ9W@b0V(bS#k4FFJH$rWI$6ALK8ffZT*JM(Quu%=!(lEDXQEo5l_A05Pk z9_7|M5N@QQgeM4M1rCgVWzGaBMPI+xpQ0|Nl-;p9Op3MlY`ygL4mD=29sP$>%_%_T z(gU*ot{cEp(dYwTxpO0r%c6)mO%3=&6x)MGS3oV*0K03ce);}nF#+<5CrWdJgA<$m z@r;4oDKmE@wjOMFA~y7w5jb+^SOL`m-Rc8#Y&wrO1FU2`!wh+xdv5dayIsL8XU>AH z{`Zen<8HV?gMr{z*AcATL_l=Y7t8>$!2e?7j=z`h=UBiYJvO-0_#MaXDIV21gR=K2(4MPfmNn$1-CR_~{!kcJ|+71g`U89op+ zGQT+K%&{Msa`#9=kgZwq^JyhPMAl;u@U<{1*?kjZXiNy?2tilwah?1E51k_gxnl0e z;=5CKGc3asfzz%sX5wI<7uSVf-j0g;!o4mhOd|3cp9mzspna@s&a2r50W(We3~P#y zy5Mrzi8$iwnitvv~@!QsSE&A+MKFuI7~OUQ2g9-s$~jgNoo%J{$H z;CmS4G0f@OMK1l3T69d>l8Ajfz!Bx2Ck!7MiXS#^47>)=Ir*;!yM5I&v|E0P}` zz6^|}1ukZ@tNK@FHyXH~M2dp~Yj`mB2IEIJ0Xsi9Fovlp0W-|7#Ks7=h*UCrGxy@+ z;?4jhjPHljtkbiz=KZmBs_tws!vE9T1q;*lY3Y4l)9n|ASl%Od>8j&Ua(N@`4?6#& zFe8lUO?lH8%!u--W`RjyY`D6cGG!-CjqnTD-DEiEnA`YoJ?Hv+IU>A}#cFC`CrmTe z{lF>u_VMe`x1`N*baeFC>}>2u@5Mh~QpLOl@CgWx&}7jdw(ZV1yCc46FOy48M(fAN z9MYVotN-Gi1cvP^VC*71c(hE}wi-QOw{tn#mI$faJ0;)0`TV&;Rk9Vv|6+qBwLnM? zqi_+;=Y*O?C6j8Iy`wLA|m8I!eWhkZEs~f(0_1HN%Ubm z;lDYoY08!MbXAKbA}B_hzC(#+A#kK6So=ohy}cEW(mEg~1VS?2^>1SMZwLJ+`G2gz$jh&2S4JMM zvu%Js?H(8Ae;n4RQw*IHTbtvMYPt_QBvOzqG}OtvtYh1%xTQV(UW6iF^4w94{D-IB0U^2~C~ zX<~+I=Ff`Q`9@8Y-&7v>%RC&o6;={ma>k7Lj-d&KN?skvdwL4}(dVFNV2~7daB@>$GB zGlgD>#T?e8(Y`~_@gVtuT}b?lk_fC7RKJ3vam_W(cS@+{+wNk^EQ$?P#HgfRHzT>c zpky05S#Z;TZ&(gySaY+~mYoS>uJ<@wAn2{Y<>UQ{f_qrIDy*mwa}UO6*qF2~{yD=b zn|;_F2!Nxk*yT0^M3gBLCfXC>n@WB~Ex`;sBn(Tx#Y{%^+W){cq61Hv8-M_|G^#1# zi{<0NO#YQRi%Y;u$7EgY+BcWI_ca=J7HO~>u=hwPpz|G4BB4c;grA5kr85guPeNCx zI`gmzjhZ}{y5cL*NQGHSS@C;qjA&np~GzduJNQm^%-64W>gTMe1 z(nyyKATV@yOM{f8bV{eR0^jBL{@?docP-a)bncvc?mqkM{p{!2Cy4pki@*vASpiBX zkmeZ30CDMpn<%9*ka7A3__ah#h=bAD8xn(M!Iy9!thR*o(ejl<%L2!@eJu}-*eK7j zv=?G|y!$_Sz#+=tI7T*c%)o&>IZcVl!#q z5dCI3k6ty}LcRT;B8pAmu)WhTGeK&QALX}s7c6q7PeYS0k?ax}UA7^nb=S1jDEPqF zHWQ8@-h8OYvVApTJlrV|9cuoj;aRSE*2IvjWJUP@U7akzOD-1-+zwnX`SgFE!WBD< z(4Io=m*HPbbrBfO6m&X@+~EJa0(leRsEBIRgYRNaq?01hket2~ZdYul|GVZ4y(|OQ zfinZC8*yWK2>DP;%t6(cpns*Q=X-Q~(ET=Mn7bv){XE&gp-b$zwR<^n<>MdagZa8hTBg(OR}X1^eYh#06u3CH02-vp zj)$8Y-wp2vfY#vE{EG6wyEWUJDhiK^O7yfa=GY;w1Z(0ev|!AHq&S6xY>|^SC&Ey4 zBQ7t@@5(4ozZAbDQG)|bRq#C^Q1sw&w*#yEN?RjxJzm>csw=}*gH9OD?#Lu=zv1R3D(!; zxYvXRq&dly1dLZeq_Q57CFZ%_P4KEGo=GlsI$t$gvhm>_z~}t_R_=7vsJui&O88!y zPUOly@(|NPihQq*ypG$hQZtT${!Kln8~vxN!368g`{k$-Cx_)7z-u+z8cG5p1CP0( zAWv~O=5d-?V`=!8mP?z4DJ>nNEvGvzZSD0Kv7=6*m5(INBm=(MswjAfml%U6?tBeU zXLr0xv`2Li(C`_BK;oP*^a*uesQ`y|scC_m52})q5}s3RVv~_HJl9z{l^3j-%-Qu# zK0&v0zh+D_()Xwd)5PzB>`e^KpdrR)xk3Ghv^)|_e40*b$JQ=HBn3B^nR(pszY*13 zLX0C8-6so_r9C|ArGIQnJpd+1L`0PHZO7Zd{|m74n$hM$Jg>0|T;XSvrDxVg3h>n; z$CdWR-GYq0>6@{D`wb^6A|)*?t!F|)DR(c^ln!3c*4gQJi~y~z0zFs!C@_M-KyOYW z{w7S{+2|Su7nfNhzl-S~%Ftwp53fe{Ac|nX{YPteM%<~wZ2uuH*vFA;BNUezy4U2p z7A`I?Y;@F=m7h4Yp1vXfrW|s%_z$qgH_py{`V9`z{dB%~Y;0`)$G#duPUJF24u|mz zA7@JSo{D*JHbBwcFF&@3U_xfkHn_!C+&G?Bu#7XDUhwnlb$akd^1~TtX__{pi9(Oq@r`AVD5h%>37tP-W`9#SjYipbZciJAV%BRjD?IZ$kc4 z)S%Gj5V}P)>En(ENmK|5voG(v_wU&vDRPA@TmrI0Tro5Xl+02zlrVd#h{Dlogi#?8 zz1IsX_kHHsFJ8RRy@DV=0ul8OKWNDE$?kB(mr6ATjy9qMgV;0qo0?2XfZ@WbYTba~ zc_RO1?yhK@g1Czl6A~~AHC;#s%$)X1$Y;*hODT{nK*~_HJ1=WkHm6tX6tptDzyEto zE0T&L#=fxhKMy%F~8X>hE16GQ+f&C zeF~=m>diU~YgZVZXM*RRQ@NYGwK_Ek;g2#Q>%d~W@8!6#%^{{pQv1K#vXt13 zD9GhDUyJEtEzV(|FnrplniDh=DV%L}g#`sK>=>KeAv2Hb(?SeuFkQCF=sZL@gp?BN-fUMh;(pf5}LZJPMhi zXS4Z=6e)HUMU60>ef1_avwy1`5Qda=iP~@+Y@zi+da+=Nnd&R+wowrOO5q)fJZD-4AU9%o8Dgvy$hX%Obnw+g=`uC9B+~k#Wz;h{NgQjb1 z1+1M5DM(zhMGbtFdqZBsX=K8vWzV|PT4r$RJQ#FTL?KU-nI!y{y z+itL5=v%}pzMD;RxM*cUyJ=H3-JxtV1xx3`<9aT<`{Z! zC2d-Q``9bH{sUnYp?!3Vn;Mta%Y7KsorJGAi+J%yMn)y!{8+o`P45Y zGR8s}Q)wZUMUCSHGx?-y2Ue2*(x~k5Gi}56rxcRFPJ2!uK-4nwePEibYx~6@JmcBlW{p<9)G3%qT>Nj+k6&tu@3Z{6~l&6egmH5Ba?M z=|0wGLL_G%NA>ee0M~^}MqyR%Qmy==*Q{v)^%Y zaA`r)d;o-D0oaC=ZD&jFH?+i1CJ{dkVg%K)DjY^=;RK>0KiT_eX!9eb_v1}J`;$DMSowyDrh1-H zD%uWxivSfLX^ua|`ihln!;hv{*jl9oJnmElV6aAI!`29W&KZ~GW|~AmBJswF!q{~@ zr;-M>7w?ymMLQn+%fBXfKS?^ zB#IV}6}RJfo5?AEZh;9wVeyr?J;W85KJ?`U6+cso*NQNlLesnyhMH^+S0u4MCIDMK z0NUpU;k293zC2#<_)~Ojk6+uBq)}cgGLzXj{n2)@I}%_m1=g#3L-36yJ~2a2Z7eUU zSo1ClN=W%-`q`$rJW{I-%v-Alye3mjQ4`z7(4wE~RKF!snpkPQ)fOQ;ip3N8m^&4BgFsq0jypW*G;3u$A%g!>*90X;~EG7!1I`LY}8UkY?AcGg< zs-FviNwc=z6G#yxitGRMdkQUkLJW=G$4^|r#4KRC){;e%-a?{$KueRg!JTlClU!~yS0p>jr z6B+7RTj+%R8)UA!0NsTW1MQq5)bf5jxT!;3c^w^$x{G3REAeyDSS>Xckb^8 z{?;`;0%pGkO(*I@h$dy_8aa(yh0*F%e{uf;7mEY-ti6bme;{)1 zlbdqcR&>YbonQb^5%M94m?ebXdAd7+_Hq=3p&_{{wc(P^0F*e*NGgGb3G6GVnpnm8 zI!5b{3{_(`l}3}E$Ilw~of7~#+50K`Y$H^uLHbA6Dl83AbKRy(Wbe%o9 z(Qg1GEY^d(0Aav79A&(DL3`>)-|e`4NIf=IAMwM3#QHS1)W=&{=MK>z(o^5k$t)Yz zE)M>858J*y+Mm)JkN@!-*;Mf8FD@9_A?p73$YHUlFaVwiPFn|%lK-YNf}PY+ss6v| z{8GmG%s3u3aUXk~97(8SY|`BS_`E!~-4z$c05~EH^{$Y}ac4$FYEcuB;!atKW3boO z=Ad5yhtyyq$-f;v6V!a1T`7fUemi*JsSGsOE|9iv(f0vV#*e8Y{za<9kAoj#MPH}z zUKx_>QR!ETDS1=~@ti*)e$9S2UH*DvjeMd*2y@ua~g?^~hr+wuv zdom)l!XPP0clY<|O8;FyTO6p)L)qT$F5vZ_1xdHm^PrcV`!*_?j$oQcv>dIz2Wal&+ zaO~2!k6$MCN$a@cyNU5Fu6csR;}ZCif1IPqMgt&mDggOGFWY)FbI^YbaQ|Hi6E>DJ zz>+JkE0)zm_%DSIflxI$^$^?uzz6dwuS2$f5``Y>SK<2lF9-9>jjeW#(S3TU9!UZe zRTn%LcsGAP6ZSh1z%YCTf3%QFgN8K_%wvD@@^GQbq91>AYs+jXk?pODiid8_qv@NI zLr{>lkF0WBU_zIID@5Fd6T!vJwN$TK&rxqpX6Yjz9Qo*sE+OYhKEFq6bh+Rlye4O? z+nB@Q$MrSGH4Fo4vMaJOGSD*Zjja?D>+%*LlgKSC#cNn}iR{L)^4xHyFt#B3;QUC1 z0a6o}#NoMdbmPfX<7k~wQ_xc%@U;)l69s+CFa?fS z^dx<#wH~43G;AaU(oiMNN33W!KP4_HsdqJEJqP(%ydWb5C}>Eic=@$NraS{FSivNx zf2cvne6ze~ME|G$R= zqxEHNfYyF(sz~F}`?U!}%+rT5{+A1Y596Xn{7yhGwuf6FRA~EvRSx!dIb9HWPG}3N z`@6j~*Wg31@|@TLB&7#zqXrj#R%z+{adr~C&7lJ3=Pm}iYEYmZ*-7@ z53}?uE-kfeIWqR%BCAJ@HQW~z6nsSPPv`9__^xOhpiMJX$)u=)0aify3*NnpDmzbT)TA{!C|L^a}Fpe;(PETk$&>R`!Tax<1taM&5)}yN(WiTudjE^S>u79$jd9 z7|Q}aiSfywH=5{RM1kR;k=KZ9>~{y6M~@wn_48!{zU$-Oq@6nj54o3nUc*p-tug>(a=yiVVQs1nJ%5Ee<)SfdwSZ5<*`h6NAV-Kr~Lc>^RZnt z7#$5H*q?Brzs8#LR?em68pm(E5=Y_cw6L6jzdnP+q=)m7J=bUzzgx6TB1c+0&6c+n zX^Kb=#QyEH*Zzq;das(dI;||;`1Uj6Iyn(DLJy(-_R zdaNtOVQlei;}QBjHWq~RL}+D#%C&u9cGFz^>u9Mbhy%EccNSJ0mM#!dKIG-*&fVq)6iPif zgca4;y+nNMw&q-E#s0phJdpgsJGYe$SEJVJC|Qh92+8wB?uoReI^%wramBlH(2E8^g&qArY5g=F2Gko@?y^Bu$1&%;Ues(4?clIw zmK8pqw(gPUyWO}ZJ z!On>(`}x9GnaOGRIa$(x!I_}#6&)HU`M-}|uPXg~uc z$Rm`iwH@<;YaaI^1D~&8rLL|H54q!*U#0;R0!pe!LasFMivj+~gk@l}EksNk^60E! zS(NCv`2x@z+?Y+gy5f4A4VKvMrkrhnk&u{4`cdRT@wqIkNE??#DK>KG+{(W}9oRki z{{YelKs6s{HU?4AroMe)qS4wa&`zj!vpp0B)3rT`!6cSHLdC<+-H+XgW1LcI@1Nk09Kz7}piHaPx=V zp!fWRO>QMkH8gC3$dQ|j(<{9Ixzlm;>^|ww0^2{n2Ct=cTlE^u1rE_`v*W`Q-plRO z{TXD<<}Dcm;O5q&MIfu;b6gg;4y@|OBEkaLP#z7`ehv-nzqk~a`-tPeX8*GmVfQy7 z&@J;vhgg4BP?icC^kiaZZju+7c#4fU;N2>b1@?fCbpWYH9|%mDO=7>77XU2hC}m2o zKU+c*&x(RMS5Ly?c5pY^vX0j_W?#J-94F2O?_KUTY%EJ&i7t;y9M-5mj_#|1`@}pH58C%> z->OUwrL|d`?RJ4$cN4^HV(}Dumm0hW6gbL%bBo{b_u8?ugPB1QoG&d3qk56`dA#42 z2=xd=WHG@AL@OxrlIMFYuD>Q4qCDM&%;CU`sam6kY`3`Kaaa-Iubxw%HsHoCx}vF_ zFHpmsSOi=WXz#{Qp8mn1_B&982kA$9TrGz77)yv#;WkkXGFruERC_i%C?#=h0W#)* zUxd&$Sx^#HZk2dY9)QC`vM2md=D$|fL=)mOD>s+JzmYEfh)v*XzQ%Nam z%tt9X)77AUjAMLx-f3Zl9X@lAR z%+f0|&b(v9#}i&nP;@z%sCvZellE8~<(^@q;UEr{?5B&9bWY4V+KY>Ey#J7YciSt~ zc+|t~6tIyvzOj91m+WHbO7tsJ`$2lRQxlvhA&WA710ch3adE2&kx8SMdEO33A>gSq z20cWd3y?3*R>aX}zXC;Iln`qUgpYRaT;@%bYl(H}=XsDGbyhE0ampopA%{@)r`Ga4 zP3HSiapze;bI!2h>%c>obqc}Z;XcO(_A_>Y6cYyUQ2WR$Ztl_e;!ctxLKvz2ufR!q z9(Qj&1`vC$1xqzu>ntl_sTinQiU>MEaA!ZpBg?H?4ZXpEsY>2Fm%KaIP?e!gc0UAZ zC6MY;7;BzBzE!eh(Me9xLmoIzqF@Bwf#MZUZ&yU{L9zm>W=8nS#)gKguFbFP*b<$p z$yq(~-|GfSM!QvU{nxq0RYRV#T%cmZJmLwT#)-w6=ZUjz-VXU4lS~~*5Ng7MAdGii zzHxJPHLOdHnkh4s%-i4SZx{5Uo&uyN3O)dFuLf>%1EfNNcYu?$)BKCPe3~GF@!ol; z?+uw289<;v?zE{p#8Rh1Oa)O1xix~93_P#)7r%rc8k?W)pUs*D{PLIW@8*K}XNgu& z6JS8q-eHpig|9Sb1r=UFBMtXUnwSyqtkDnH+)%KMpe_5sR>xuF}%= z^q?)R+{#m+cxc;yOu>nM zwJsL9149OtADI;bjHkaLP}aU%fSytYaszFNiJYtGlxg(Ru`;m`n+FP;7El@8P z?5r-IavJYBl+TV-bBAU&O)n2J*^r5u#^F3kz3JPs-2J}$y&M@J)NRKdTSlr(nW#$>V@Z;nwdZ3j`kh9Z3RL;p+|@k zO_WeqAKjNMn4UHN8pO^O_cq%A{N*GilnWQYT!6~W|2WG)Q{X_*p!G=6UJvsbh^hv9 zoWa_H^oqI8Zn@7H3`Lj;GGbppJ|udvzAz|qzPIabK7YG!}0Pg5d}kx;kG^W0YP zk>R86HVB!~tprD4taBqXX&0)^$=LmMcRd!tHBdFxfoP%q2f|9_~{gB>X?&A;EHLOBh4s3@>apH`NA zD#NKu#@Ovtx@FRBnbq1FOIAGfJK@3tDqvr#YV7_U1Oq`@DhF`3KD?vTQzS_E%U#h~ zW{8Rd+wA+huWTbRS4SPY=$_aT!Ku1T`sfyagOHyD8{o$Zg<5MtH8B=C+(kFf zT+~b{S=?@l-aBA*`(O66*Em?v31vv?zuyNLR?>7v(gdf<=oyuDHXK9BTPhowz)LBa zT>GgH0Rx$k8qB-<8gaHLzS(}NlIMDyIVg+(p)*)Jy|TRDVkz8@?~HvBCkF)BO-)XnYAbJ3Ef$ z=VAkuvf-|#{1p+2=KP#mlqbN%?BD<6gzF_*8o=_hU7dJ=Q_a9QuzT!| zdVDzimqyXapNZhkW9oP=Y-3zMGh4K;9rxOu&yRbVPKPFJd@r_Qwo&!ILTn84)xDQ6 z|Ax>YHY4Lew$GYQ)={ZZ$@Dy)UIAY7-{*C~t^Wjb(!jBw{&yETk2D1p9y}|!i*gm;0TdcZ8(d6j|pLZmTBk{%=M`d5g1kfpi8h<$NWXz=aIS>%8I9p@R zWa|;MX}&@l-G30N7z7XLU}J3GhTu}Xup0%Q>GY=}PY62n*F~C}C^Iv9zVB7uYF4ju z%kdPu&E!1e+LxT`XYV9t?%U^C12ZmsT3=oSvmf8DAyce}Z4A=g(@6<6E zE>&%BJlyjDBxnDM{wE%MG!dy{Ydt;6NP@Zx}orQKZbt^cK70e2GlX7p2D1*}vOe<!`ws3sc@iQobr+ zT@7KIoKu@mpBaQT$k*M;$lh*hmx#KdZA;#x%>0puVCNn<6}-<5#ZNfCyyi6#v2f82 zgBG34PD2Vl>{w^)f913U>NsgHC7!(3I6AxOEn53eL%@dtTlo!LDX#e!Ns6RY^GCZf z={NGi3I8Irri3zrju?>eL~Md0qAAv&VHGoK#lMY}mrKz$a&pY}^}GFvEsiPj_DglOBHONc~6Pme8>FW0!$~ z#rEXiwE;~wwyogvI-Gbv-`6Qi*v%gA=?p$&DJaZ71fFfxN3&j9z#w1M$!J5)KR3)M z(h_3r)}Th41W<==u+pB$Trm%)5>f`%h8+jLY){HH0toXang5mAf%XZrd2uDb3_%K& zSaVv{k*}4ybIGS0MGtKkXa2m*-pD?%CxLRks-;nk<+1{=kBK1ycuxHB=loL_J!7e%nm=((gF}ng^)xs2Pq{Tt1^1PBaU%{r^GA+BQ!kl7cUrc z*Rfat`xoOo9lK)=gsECUH(0I=owfL4G-;jLLv6GKZl7PgR<|UM(4k;@#`yX&MYbDb z*UZQa3GGY8+tk^#@EmkVOwTM-3RjoS0iexPnX51qU$FoHXiqZSG1(@-O`KHg?|*hw zJQ04d_&PZw(vi`Z2y?u2#JjMV?0H$$D0210?HXjw`A2DxVZ4@;;IHOo?=cdm913Dq|f!v zFBQjuWOPmGk}`X9=@x2d`10lj`8zE&jX+egiq>t5sOaxPZ)V9BO1HzmYUCPUH&-z4juzpWKp0dVHtT)e7n0S@CkZ8UiI+t z?_tB+w{M|_hMBY9?@zi39>K>ZyoieV04!M(p0K)NN$75~` z+}wdTQ+lamXKdQ2VkgYIcqHa6c5my9jp$V<0M?&`0e~>8q#u}> zNYf%9ql4zvrtfxD3gdE#1b1iyo{`IAuOfXDBlXoSbWXXa6zWu%6>o~FNvh3cEM{}V zG}daH0ZqMJ6NHassDbD$Ja^fE?WHa3Rgdw@R{1M~UolINJ9El3Gn(K6;k-|F=1-8L&D#202ooW<_9nf0B7ONg_Q;ifzZkJ@W(24Ldmthx}bwz+9Sr>*eb^k zA02WM`?dMCM8bt;+RnvP)Q>z@#`h^Tpm=tW-9-Y_$W#E8b<=uWOT++U1x<<;Arm>U z9%o1!FU4KkxFalQ?E+*I6K3C8Om%*7r#|1VQrT78eH*KIrO4a#*t8)3x?1g97tjmg z!jO>AuUl8feSZ-v7YlJl@e#|_e=UR$2L;jx@jee{>8FLjUnD2zINf7jSk$6{%lcwo zf3JM4EcLajn2PMx9mYmZ9^syD22e08`1$C0Vp~o=PL{>Bizb32%;SbihMgMt0E3^juP1@Is}F=(5P^;iDt$Q0CJW5XE-@|L{n3_PaxRi`@J-?sUe zYQPyw67GNKCHht2Nxg3>#oi)^=$V@*VIh|9*fB#HbP-1_fJ)$h18qvg)5b(PrzYHT zWf^L>@MBQkh15SFs+}N2$b=(Hi+Tcw3W5js^}i>kKmV_tN6{}>eHH?RlrmSpm+?L( zgD5_A^{KA%k$k52LygZ7pF-v@hchDwPXJj*k} zR^>#q?SYWJ-2`0aVA`6o`-o_*0HF9|An^W;pfn|-l!e11<>BQVa{}Gksr&v^=_(Y3|MzOAK0p>!fOPCl-rhJJHc9!r zu$UUObn2H2#5Ve4{pg<=&C6Ty2AM)XkwW7+j;2~YbyXm~M2v1We^30znR~?UqkqzC z(h1{rdveg|O>d1dVnUj}6k7yF;5*@IUJwD%#y{_ML9%2h5{1<2c9dsK&fmU$lBmDf zVnVD)NKCi!v9V1im=rx>J88S=fMBaQ*VHASKjFVui^D?|l8%cGCzc_K&kJR=zGkp) z68U@KGBxEMy<2PJ`XD1yZ-3}96<7=X6||I+XYEQW^i?5bbHP#SgU~{XaF@nKyEIa- zK6m*@v;kGbBoH;xP(BM2$>VB@#|wRrjd0lfzXUf99a0jSPvB&Ax=Xr*Jyv}~d{W#w(eYFX8=##QN5 z92JpI1q$*~x95MYwsdfwL)9>cJ&$AuQ-;G6Y3{57H@h+U?eyFo=-4IyHv3C*5KIB% z`e?@YU#|p|jsKVBhB89ceh|?HS2dVdY#cN-2Tgw#Jy+P-5^#qDNz@M%*(*JxQyae KKw!x6d}*bM>jER{Q1jRdr)2L&u5jX@f1uq#S;!oo^G!Z z;2}e!;D58rCA{3Sa%apIs7 z&@>7l7`Vs|cIdnXCo*)Vr-jZ-_tSXCLmJf2>}Qz@3@G%1ae!X>)D=z>#K~VejWy-5 z-`?yiL;jjE!&b#TGfTTpWYS%Fd-jN+ZCA1Ypk=&F30tVS!GTk^DT)WbmB>WKVku zH;`Kw%5Sc{aZ1)tadC*I+c;`R6C#J{aJ3$tfFV9S0Yh1njpD*p-%38%H3F@1U+kHn{j<^1fid@kI3XboB zhGM^Webs!1=2VLgJK$=FKF2v18CIg3pnmBUDjvX{LwFVr+KTOyo^9X&Y{$3a{@pnL{+vzpu5X@|PG>TALAU!WoDy0z5%)DnTn7C;mvA1SFL+?WSq z$1@Yw^CO39I~k#;?dQsTFh;1iX6nxOjgFXR!?95` zSfU+UAxq&1aAxa9s894O#w}bhO*T4J~GzZX|K7yt^I`e zc}$7%Ivqo!TKs4ZY)rU>wS^m5P{~`iG3m+hFYCIMu~tveVc#GjvEo{ZY2t#Sby~Tq z0ZE*n#2KMCB^Tr8CT%`~5f8V#>K_6z4_asC!nTi_=+$MPTDnkjvW|7iZz+7ZZ;CBT zbaOd=-8msZv9$^wKi>g|DMf^*Y2?tRuao3T*$2MZCPR2k5>!%0@gBXx3#%$pfY%yu zx{>rj)wh~Fm{&?TP)JRbvz9{S$dM`_m`@wsV@nN{Okr@AN*E^nM?&c^e0$~}>4J8Z zw$tnbmdewdK;{b9G4V_47#H`AAcuU7*o#>DR0$=5N}NuS%o#V+hW2%yl@BlkFE4tm zt*%vd`~B7>MiKS`C&~o=Y*yb)cabpmz+s`M5+pt2^=?THd9>B(az(=0VDu_zFXZIl z!Zl+(x!F^C>JwkwKBJkaJ4R?5=Cdl@HMiOy%LTCM zkCM_&MIpYG;KYkC3np^k-F)e}8G?iOz``FT7u$U{>g5D5M6MP!c=z36ul6Kzs8d+bpFp z261;npRpT~%qLGE4;MmDFAp3iv$n#=zpERf499PLpebgf;Il^CbO_}O(?s!(_4*V` z-&?9Sg*=b+#btr2RW`OQqu4n};=MXXu|1D-GKCb`olw6j^7$Bk$t);-5+eI zPK3DT7(s^(5w@I^>N#OTB0jeObn_~YLwyR~N6L8P*${{GS_lR3^uOL^_X1kEZU**L zWi+IzZ9{NBISK+x*r9P7JtdR9XOt}*s1lban{u3_M_Jir#Y*@mX{%Ma%f2W_QBRnNeIaO(y(|FyyO1I z9V<3kc4R^+(f*q5$yUQnL9Jm$>@2Mpddv5LZnnrq^$l*Xy`fbkpy14cf$1 zgBL8^kqh@?G=jG*SW%y)rgn(nP0Lq?1Ji{t5RQldo4iw8i5z=x-^i=Z)0^41@9}65 zk_w7F6fK@NU!^IIyFj)}+yX$@uSwi=f#=Y+n~7WTr~(Ekajw6d?EzI011?L``C`Vj zt<{Rwx$EWt(WA`E3&@iv$_#{FTM>d4VD28}U7ye()uhU*nK68AeZ1p2wmW|#uAbGr zBq1usk_nY%R3gX7=nicT71cB-28tFFne;pHXFBUgZ%$8Bg<{@7$`8Qchoj+5iPuE~w&$s?Cj|EDQr zC8V@3@#KoDjo_C>%>p_s7roeZ$#wBV&=Z&&-NnhXodz$u8bZDOD2U+$*$+zARX5Zx z7=^Tb5@CkFS_M;7EWJ(hpWIKok$&I0pzC#OYI%NR+?=c}P)0?RCkOrArN2d`&K)Me zPCRc`G@hUTLQ!VqQUW(f+GclH&n{*r7gSnJf3pcpnb>>Ie)BIRp( zjB&HE(lfM|g1@N}(-kRq!{obDGs;J`!(22(hJIKA`WZ^J3DSqN71jsezYJ z9JLb1tQ31n^^!MsIvR4z_S0}TC7ei{EF;3qQy}d^8XrcCu7Jlpz`yNn2zv23YO8#G z!~ePN)S!FnPdgm-4fRvs(_^pAK{=RUjshC8+}pQKWFH11)l)aG_!{$RnA@CB@m$^Y zcUx=*r&|3R>-T)rd!`~EUowX&VH{q^VT#HbaAIOYCL8E2B$jOw8v#<`mY1CCZ* zWA=a)4?q)!6X`T~i;kb`{2&HE+$gX8vIeKsRdDNd0MB}w)!1sNtPo;ccfd5#+5>dU?Vi)Grp4;Cy<6;X_u8@2Ac{ zI5`vJ>89N6@e^7J3%$iC{p(LVN+TKkiszO;GNpNEJ+ks>(p^~12c<4X|DXOf$B$@b zg25ON1c#+TmvdnJomX3PaBVPQ{%05T1dU7$bs6G5)+o7bq+~hQ8fjS7eUDG3KqjdY zog+v~N2h-sg+(QEz~h^fJupWaS12MzKmBxmdkdbomQ!$>Q42ce#$ zAE=WaQaU}&SSMc6G{4d(L*`IBm zV!$*9;q?;)lrPZ!Y>#=4_vXtL3Lfz{*7*{_Ap~D1v z!9=LM?@nkSWC|ECOS&y82^#-}JL$-z{?|E^ljJk1PFUsBj$gFk%*MU1-llIif0yiBVXfzMZ(q1KRE zzk6pf_EiF)VBm=m+&`j(YW};iG2T?JRQjW zL2}ONocBw@7hXWo{rmp!-x}48`?OgpiAHqp@IFhY?u9*`_F@=uswOtNPzO6s4k4a2R^5S$6NC97DD9Xy1KOw=u_2Yq;(w-o8o=;TJ%T~6|iMB1x zEmNZzQC-??j{|gE#7?WF*?f~LD?Xk04j{-;0QmIeZ*LYHJFpvn_T-3CA#5`ID|&^P zUX~S=q6f+>7aXgdkILC_R-kR-*!0IhQ)O_93}eD`f^+D`2~6nb!#2NJDy55KUtplp z-Hf^F`fQBE%{)b{1U!u{V2O+c=9e388xPaSje9M2!HDO34JJSC5%e<#pDlZJutj=P zD`R=L>LCV3WRCJmOF1c^M7qnH>omv~&Sa zy-L1E{ZHL)-iz~Z>#}3jYu9;)_7>lB&3QQZMFM@9#L#-e~8VIa%^@s`+qp76ZGUb03i zzUBJI0*9%n4^61XJKc8XL-hA?3$*XR?C5)7KT7DG|0Wi0ITt5eU(mj_h5ADvl7~HT z?SyX*&z%!wfVFBv0ac^XY{coa7X!5fqmNy++Dl?^H#en4ioffnN^LRHSdj{8YOQ-z;{e75N<2gl|RjJ?r)uMT>1zDpyW-98eEc;>ukT{upO9r}fiU-Jl_YUM(qHKz-+A;$UA&!A~$hdemTFQWgCsJCE2X?iefeS=W%#Fkf3#lI^FL9ohU5Ia$_;298U0o5PY7` zFJ;yoKC&xy!J8=V83^x@5Gq7%da@%xS@?=43|T_hf-{MtZF0Ybb;}P_k{>u;xzd0Q zS<%M+OMwfsfQRcKf)kaq`bG$5hVI9VHXFnDBQU~62Y!Cyr1eDE^nGOWZ+n#F+b%0( z{MzA5_-- z7DK0@J(=%1O;}=tPe=71fp5o|@ouh1_$x4D#|wL2aNhD%C=&yg&xQY2SBiS6CKoP@ zJlX?aej+1de;;SDq+}$so$we|lgD|E7vx-}5cE!lKJQ2Ts? zN3V&xQ80I`Td*yjD2k$GfdD^JmA)w>DUMT1NA*t=x>EP(%asa7)AiU1k+7l601dmo zV=9_`TgZUR8zUDlFCESe7oQ+wp>0*Tq&*3=mg-9J67a4bYH6;k1$>-ll-!lvYF13< zAl%Y~Fo_Bid7g1;t7d&Qs7~<7y&ZmLtPtyGt4VuonmBP4!&j4Cn++?>w{$FvhJzOp z;T=rNa%vxNwDWY2d1X^jpb}Nr(}FUxVEjF9TG78)M{g5&(TkT1xgrpgPlLWA#wZ~v z&wMwCD8z^&ERvRm_=aIHowP-|+eu$1*+>V+#il+w2|x zy7U{r_%ud`0UIFLX8ledqAeYOIQg>hxx}C?PP`p9;z2RGo~r+=bw}7j*{y-OWC}22=U?pgFp_OYzvrfLzxMr_jd=zOVf^Ea zNpg*jvsubNfahnrTW-FR>yuK#1-m!hjlvjQl#Ciw*M)O4GS$HLv3A}bw>Wxt;k!Wg zF7lq{a1L(>h}7PoH;(?9z7Jkkae(`hxr|=B1i^%c;3S?03P#&B;sYMIn? z@#>emEg;b-6*FBb)66)Np+aMa@?h&g5#O#n$C!HLb#WFg_cMMqNgcoU7gsSZYD)bq zbi^x4sVGv304Zt_sk5DYDVEvFr$I|=(1p*Xt?Hba2%@M+d>S0}3Azn1QAgItTR}$Ukj_W(s zm2>7?E#!(J&GN3qA@iq%;D8qNPBDD{k8Lk|4hr;fahMfa={bO77MzrX$ZYukly+=| zU}_@6-0}pye04K**e8~inzs$~p9x};)TYUJS{K=Qy+Wq6-?|-Z=~t@RR)-HBo79Nh z^8?q$=+evPu3+lqsr{Rq^`?pg+xL^%4huU@ajSIk$|c`sbrM>Xb#{iUc)9_mcnw5wT(@Y**V#(6h$)bWQp4R#B|o* za61V#uk9~C(O}2M0kRz0FW1qZeHFrw-;FAm(`|~~2Uh-Y)-S>oj3gBxQ^ANQisN(~B>4fN9(5}u&PuD%vK-mq(sFWK*OFOBA@b^e z$Ef2=wIi7?^$%>m_m)SZr`OtP#*%?lXz%Xvf1`c#Am31>Lva4HJ5Z#~hT2#wb5plq z^$mmh&ix>lpe}dXbcx3;kP5#W7pBSRZF68iM71YaYv2tGFAR(UZQo*iWNs2|; zj@j(fNad{gHA12W=kija`#csW*_a8th!Zfm_<;y@eZ5dLHxn>nAw~P!&O>ajJH7MX zjW|dwcq9^u_%}r)wtW#` zqUNH;kyn%d^Y=Di?XwQpJQqhX|9vdbt`N4ebzuUVv9f^q$3p=}wC((tdR*i5Q)!*;{ zqP32DY#~{%w#q5gXQk#KPS}idvKr^@=8ZkA6!Jz`)NdWsRzJX*0d5N)Sb;u_l^NIN zZ7HwYcb_b`*)(Hl`?l~xdRo6LJ=UCKeKg6tA?v?{clF`_WbWW}zFPPa;Ao#qUSX0W zL3s@k+#jo&wy0MD#snCJ_cAw@F?{w4_H{q&EmxXM@f_Rt3AKOx?s+&jw=^#M+7F}< zUmavS6?S#yq`HnzO-Tc$L1E1IaMY73&Fv)muB|_+i8dwn!xiKPOTe~Y)h-}Eo$BR! z#mIJdMoo3^OpSJP{BwhQ+~0lu^QnXh)>cXypwcMhrBIGLSQrI%y`VugRl@^MET^7i ze2YM0R6#pvnGiu8Y}Kc_f?iCqrw`PL!K)OZrr;^?`-nt}zR=>oGca(^pUtXymlCqN z^}GK)6rpqqDW;q0848p-K>K=JGW8k|gTs&{-uk1M$zlQe)$=z*;JwKQo$RW5_RWF`%OcQ+h|3auLSw9@89}jdwI8(Kta%U?#hPZ0 zBTK#NYe{S=XsAmP#fWo_y9DG2N>Nd=yR9IxF=^Qk3uS6mD`x`{=q}$x@7kX8l9C1# z2Ao5R7ShSjgL+=R{RvpPID;#jm6h2&OW%x?A<%U|Ypps$j|v@c#s6ShGa{sKSV@px ztSnK*w`9-Rjsgu@&;A#mNK({nE#e6m>C^(T`(Ombrf#C_K7ah;N{cjGct@T zA!_-H3^bASvi7AYz1=NfFkKBIb{3%0iWCpnCJt}j4t1a6QUXSOk!*;9WkLa846k#d zp=MK9TUR)}igyK+u1L`71Ivm~wiL}IcpO-0wWW)HEeQ%DL@jCjZL>Ahv>M{{!3haE z+AH`=__W%XxZgGA@vAqt5TfJePN0YMiF+==CO*z2Un9>(m$^ z`2jlhMomVIEV&OtZO=V(7~MT87FLvc`Hj6JtuSH|MaM%vXMS~@Y>)<~d}N1y&Zqz* zp)W;^#Ge&4l+)!m6Pu#-F1sV1lfVA#CYn!W@dm9+`)hOKz`BghxS}7ix*jFLP#c5< zZ3@dzGs1=ZEXNHG$s0%cD-`HXhS9a!K@l9wfiY*j4%Wb45J=jE+{43zmA(RS43(Fc z=Ol@*L1q!1NlYQ_@5b6%a|DVQCl~MQ7zVDA7yRB$UwwAGtofJ*ygxsVkOeG7_FV|% zsifa)z6YT2?*`iEWYYgGihlvHKR>bL@aI*0W@)zPQ3MlA%me9n;TKX%+;aRZ#SxnQ z`Y2d@!cK_;N%FZg9D|q6DlmE-J~2Qen3qnb@}eCUtXQ-w(`4SfE7Ei7`;1HxwGW9@ zq_gfT$K~RWu{7aoV?}g#2X1}S42{~@j_x|2IQbU3Xo0;L?-G4 zeMG+SpP_+dD$yT|R00vPpQt21<>tmKXY;j#Vk?>Mrq;G#z7igttk5QOr;*&Zz`7%A z@vY730hwHpCQ_wpmCT0#Hh8(p`4g9n^NDl0Se5HP!21GHhZan&tXpXhRp$L+ zcjGK$1KV-~C6ELpCuu5383~YdJN1xnjNZSpVu-`rh_i69dmTj!#783!cN$CkzNQME zv*GDt9W3$tU38iJ&E)Yztvzv!LQFIl4W-xQ%@1fKmA@tlHAnV3U?mtXa!3Xd1jhNv za)3TgqS`5T#0sprDlobfU!#2Vq+vNM#GL1jKB+mM4#XY6gQ3pX>0&4(3HBU%OGU{( zlzd>mz22_JQZui_aVH{gC%3-I4cQire871BLD1A!(KxvsN$?9PCy^DfORG02G9lf+ zXUk>lJn{bU5(hj{TQXB36om$pW8xJKit>4Ivf;@zofZJgc1Ik?hE^8Qe~j=PGr7qQ zlFa5nPx+L@s*3P7FAKYG8xwZq?{4J!eV*Om?&}NNp~QJ-m)5DNh$m@euHUwMqd>U~ zM#Ouf@0w8El5o!hO`AxJ-;AyQ=IsRQ`sxT}KTdQ=H=>Y$>6B+S*=yd{b;8-#wPPi& zM+5HvC|zKdgAq%L(AjkSVabG-6PC5}F_+uyt)`K*?`tzbIi%Bhf!T^b`v^H+ES5Tm0zFTIUBK6zr$ zLF#!BD1wl7uQci`NWI3(<$gwt^}}zc$bEX8*+5B*yDfuvT|U0O=W|N~Cx#z zyn(3$1I34^MtD{zI-w!06*bmzvZ6?)BA_#ramo{4-~MH+;4oWautQM5zmx18VcN+! ztpH|h&k=n znZIW}FR;MdvKb@mJ3GchOekEXW#tNJW^MfTjNsTN8v#!^>B-ITqT=-uP0JHXn~u@? ztxiKRJX9iOhZ5(GZx~3Dl^LaJWRi$bi#;Gp#I)@JiXfTWJs#zxn)Ce>FUbykBTAZHK7&O^#yzDyg(M#5n0-wDP&(wv6O+ZyJDE|zN%T~u%w&<$sVr}UnLqr0w|H2_ zSO61e=KUm?LSI*k&!yJD@J8-Y&om>GwWT55bjGx|L11zA_UvE*iaog!J5X)|Q_sz- z0;IBzw}On`*N6fvS*+Z9(Q#eZ++*?dawrPw$y`U%`ugJX%F6Mo-i22{8~TorkPE=mxonm!d&=IwS^WCh+p2%pCMEtLM`myOp4MEiD-8p*4 zgUuS8ByYi)fgzyg6)FnMXO*QDA8Z~t?eV}`h4eV7n5hn>@%6JSH&W@rse;D^KSQ!L z9A((K+*tRQ4YSyWD|w4%}U}A`@RH z^r$`!T4w|UZQ;cmK>R?}gONx&ge1igGCu3b|72=I0)_*oD1$Lsc!1Oa)-z5jO4fVS z7+yltmh;*^LwB(`q{7JJL|Kwy`N&7}knH8fnN zc$fQ3xPBal=BwFPMr>9@wa;QGn&Y{nfJrw&v5mND{kv)6RR|%#G+_HMDL+$sN~6f+ z>SvZi%KNOAPpuB7bDYJ}rM#2>Zag&vHE<1u+XQ&Vm#nWk^ZT-NK$GPTeHM;rlob4E zWn!Jengx*ckL5=`fAQ%l$RsZpxD7-2w*erghmbJ~zFR;|1YfVPEw`cF*dcs-d4t`g zVY0Yv&5QVzn?|*g%|HQ3TI`>{%aXzZ?Ng_Wz*jpL5f~6_+bev9ryJXCaC?Qz8tl57 z!|J_$&?L^DZ0_)=%Sem%cz;rx;j)XNL@WsQVsFE9^8bwlSVL02g5h%`R-9IvvNUcd z6N&Yw8~ewsuD<^bqs4my7KRyl(+4d03o3fh=(CwfMJ%HlXpOrHIe6 zfN{p*vlgQ?FplE-?>72_haC7C4ZZy5y@3n<42;#(a##|%i}C|+$yO9urVYtG1a5#% zM1_geLY*=BUc6?pAw2VHdD>>a0cdOw2_OM~Sg_54;q+jR-MSdmL^~n03ERC$pS7UiPo=;R~+3>?Z*@n%o3NowvNK#=WGfn@_adiB@J~msH-jMLJje9UNEVYx$J* zLDU_?9)s(h2Rk?Y^Nj4QBW{UeQCvl%bxG`{Xe!&^T3=q@zZXTqcpZHD>_S$-w)hoS z`X9<>6|&Q$NZ73CYY-X}K;OWTF62h0ZBb)li|@~?aQaCt73|c%_r5(1F&WUJ0R^cE z^0$MT?3Yg&-~_;{iC1$UwAEmdl`tZc@m5tlSqNoYt>X*ZlXW(&L|jjtQ)EYw@$b1E zHp>u(c;Fa#hQprp81UNELcUsF&=P43WSHL88|63;;2NOY_O{x5yK?i3-v8lm zYgt)Y-`U-I0^qy2{n?MA-`Y561lM9yfBymP@w)ztGo~4Xs|H?otsSto39+MOcU=7(6kh|Q`j0@!wk%b5@dd+rq`Qo_?zXo ziAR7EAfQ;vL|g|#|1LsIhK4Nen$Bn_oWis1J9m6j_G-a-TnAwuf=qNgsLM&3~LgjiDq z5^7kh4DTt@?`|bNzbP6?7`Sb$l{GRVpOoow9aQ+*>-%og;4gi`Ptk$EgC`&I^Y`9F zn@=Z(2fruFC&eSm;l7N_02)oIJSun8apZRNvs@$4ZKmaXWgpx=8LSf$v8GSNjFVPS zLPMt~0#Bs#b)Fv0XVJv&8c80mpiAg0YAE{$7wt>PxSxB-~F`^ zSzVYTo}qW(MwyxQHV-8a1V__i(V}2|HN`&Ca~Ct=^~aPWd<)0%@W!Q>&KFPqgRePZ zUfR83D;c`Q#_0(}o8I7nhnry{`(DVwXQjv8@}M88=})M}k2i>$e#fFWuUC*!Me*vk z8!^2v+mTJ{^_{EkiS1Zl&JI$l$pMpg$8xWZ&k~4Gf~^k`F3X!%H9}>BIPdDja!RvtXF6Ju$`RD& zOCh60O>qw{z*-9or1g74o5vzAeBGT-cm0D|0wdYicArnJaz2pEF^_Z=nXl4Bz6Njp zM_)`}1%gQ=eh#2d4zjfxQjb79I!f1kxTyeWh2T|<;0XX!cYzmsXjm4~_*;Keu+$6; zDKhMI#MKU_uk~64dyK9NUoO0eMvz~LIzKg?x{L;RQ3|rXzUcl#o)_>-@A1Rcmh)(l z7v$vA&hV(w&`b4SF+!fehI`tzZU8j}Jk_gbBdb zd%dbpKCd%RB-$i;`6Rs6+S!s%3_pAr8{VVJ2%0c5PAt6B=|4{sNv6eAl#jHUfh@dq z;W@kQe(p@1a~Zq8k*O6c^+F}etJY2|+-IShT^28Z@?zle%#<5m*T0!$8Eym!tSbc6p)vKWngev-W$*UzUEq{}>0$@W?kA${jfEYpqi z)+sY)c%Eptq}JGs&LmB&JLgs>lEvjB`)=Tfr*Pu^aEpNkdIVyu37cyE==5Z>(RTL? ze*;I=<QE>rlBUxT6GviA#Ek^xzs4f=JX%&BE2 z>I2WGRO${T*v8~|u0+7lf3=oh`EDMn!q7R9pw^lY%D@PV^2PGN0tC)tsV|gN)L`{Y zeD3m(`(cGaOpeS-ga^#O%$oIQZJfdvn1)@RTmVSS)P@sMIU~WQL8Jb9oK>gfwuF-Z zJtG?wK^5Oi%Yxl5EjHNVh-~vsH??m+ef{4qTzn-X`-)+vU8ckU+pdDolJ&d0WMx@U zMBBE7!;Cy3ffF)pHYm89{Rp|*u#-^i`Hy+u9l7!+BhpRpT}&w0aAJ9An9MbqqpU)ELbtm~wEBI9B7-*LUct=!wB+?q{}%HT(*otYT#| z>5yubtu)4R!`P1}7`2(>eHApSBw8zc;{Ry2ubxzohcu#SS& z#YDeGt9-?hqmttYT@O~47YTD0whVTWhFHtfMm6hS2G|(~kYmgw>Li%PssH)cB8M}< zd(w-{aXM2*edEZJ@kQWo2Oz$+ZeLI1f;u27zK>W$weJbvk^Dzl&tPp@uR{VD4)&;dq>3lp$kU zIP2alq45yR=Za!47puw=OAAmv= z6|oKmIwUl8nf>XBH08DAW=ra#+FBdf*H?hnqzbxuPf*Jy^OSP$IZo4YDRka*6#aJo zJ=;nbW{GhCdg;{C1Y#-qTilJB+a$s~n`EJ>yxh~8-8Qq-M>53QOHKdY z2Yzk)TG4Bf=Rdo;jaJICtYM$>k`X^AqpJdSx-XGpd$>E3XLs_feTz&(R1c1OB8?g95KDaZ&{1$3`=dj3ZppSBjZ{G>B)Bercbvb|@ zQYI<#1>LUilX3Jqmd>D_-W06N(m?a;&q~-E(E++lU=VND`$!m17&q$8un!A4sy9(# zVZqypaUm0-#BYqPc+*5x-N-D`Q0%H(@&LI*fP9Ro{hy-e-S;Q_4^<74U8t zF~}#+qJ{@`vjIf3NpBK_DXNZ(Z9J$xly**GWLwy`xjQO2e%aqur)7ucuWqsuxkh3$BMR-z_15`Bh(VlG-VL~4#+gxTZ~-uA6;^kZ}^ zSe76sJzagq2plDxedvd2Fbrf>d6 zF?4573fn1dBWj>fp+NRLmyD&U!z6XzNu0m`@oPgkLS4R;tP~a2BCbwh7L3La+@Xm< zebK}snUkT4Ny;wxQQ0Ru!!My73j?vNNxR|YOWz63EDdFGd!jD>%m&|2VAph6?Jm3Sq{YxXCX7bbi+w=13E3*N!PsNI%h9{!4 z^p^At{CS-}X_x!PLRNmwl5@p_^U*!??o0{OLM8BP*Fg4xrj7dXl;QB$70AmEA;Q_> zSbBaHd{2Gr-kVucmEwuR{F2{`goU+B=Xn*0u$69;9d2ALfwYmgCBADa3r`*B(`lAA z>-0E$?wo6SMC5_&lLBP=_s1_Lg1!Tb$zkF;Kib!bfuT`v1@OF_0V`RO2!JG@@RO+w z3Bb?JS6fKO`fd(9>mDh64QEf+v-9+m%7T~4nA!+J@Yi0AkOWiUi~>d z3ZgFeQ>Tpb6aBKJ8+Um3E>S7KsuAJ=r2Hu~N|kyqicfysL&!zlMvYz`F+c6pmkz$x z*)}YG>F_w!?ce;()A2&M=}cpnKq`5bAUXwC(e8qZE0CUHwT>9wY2^zXZ<|cW&2$>=`zQb0;iE=i$bzO_?VeY&?S}$GltvlzK z!iZjt9M(O2l$u*h8F#B&`n|I@!(IJ9^a0TjWcjKdQNb`6C`5LG3Wo9q?1FJ^9Y3zF z)QIn@4(-m-rSrWhnpPk6oV#7Vk*(q*jGuN}`?w*jJ|nOeb5K$hQyZhk`FG~1AR|ox zGx=U+C%18Ax$Wj}%r)N1r)F>_Z)RCNB9hm-k8h$+#*WKB24^#O1yWhkUeEA$o%&b$Vx?Dx{JeSHrbhF>9~;LlL@~t)8THL+ z%nps>#+s<6V4-v5P~3@F{&xthdB*M;B{J+$>}&*2gkK|)SSC&n{o&81uWO$I0pjC< z1apzMdZ%N3G*#*pyYY{e_O42aI&T<_y)v7dj?nZH;ti52575^>))ImjD!f|6&CaJ@ zD8ar$ixG0h)bC*k&=LVDN)l{py!O&n7l-Aza@?!!E9bH4VM*RF26^IG%;B-xZ+GpD zQ^^h%7PH1F}I<|w}^=fyqOKf$X>R+?8RX|cAZZhk@58!J1{n{~wSb_k_XXv!qc zJmMn!2)UM;Le(a*a=tNP+(YwZ2k16!pHi_;;Dw|hle$AMbfaHE95Nx+wYh_pwFD}( z>uzsSW@l@j_cn_t?3#^VP)-Yqj7H6tNFzumior*%KfZht$JhJLd`BjA{L%wfvLaj_ zp87s-G05;yd~YF+n05|J9DmuSYR5}VMlukmQN^c0#3evFc&E8amjM{=oGPqGj0TZ; zwCDB1F{(>dQ4?w=(QYMeDRAKPIM(p*hHr;|^OxUDnE=bfXH^N|SH0t~ByZYY^)y5# zlnV66bp5C-zK39EK_yh+1eXJOGcE$aQ)UZX)o}Yv2jiMfaO1e;vF^DN2xXAwjlYTL zybyW34w~~NAND&kBK@KEwy%1EoK;U~Dp+Z(3gg?WXA0kY{1{-P&2O=}U_mpXW43{} zsaj<#Jpj`FkcAlJH=!r3lLNO|G-oZDx`M9`sgrhruCJrQDm*VFpRmLv#mD*9Z2rCQ zQCXl92010F7KrT_oJS_H)bxvbjA+CHqz({KB#4HM!vRvRj?ezXTNBtfQaF%ESw)+phw9@&CAAZ!<92Ep~-18K&$A`invRXIkPtP7fWRztp zc`%=I!gg|#sFSe^Vj(or)A=7#;sYGM>XMedo2g=~M*;RITkUT#c_GqBJJDa zwpj;bzxBrW+p>-JH=Oz+5@f?tE)CA+lejxLjovjZeYxnkhgDEk@~SULix<_Q#qpHx zB&rCE?{uolvEa*Eg;8MV_(1oTitC3~0r;e)s22{M4LVvcr5XP1tgE)jMwi=rC8%XXDLdyu6F_Mf7l*o$QvS?*xiLB~aM6TmbQ6zyU0RzuGO} zLQrHd^aG`z&Yz}k4#=a=BY~gr^#+VK*3nFYi4n=v9O>;+cZXh^ENfU}4cu?; z#H~-R@P5#Fcn84157?v$F$-WURnKf@r8HDipDs|7)C*Nm$ew8cma;Mku7EG)%w^8{GJSYf^dmX#khw^~@$M7YNokvuEELYZ5V4r(v zqZ!3iO^tjRq*oyK4A7b>XX|0E%m3GexfB@Ki(K0ZDeJnz%w3T~}e-9V8PEzJtx zABt1|ntIUiu?OAOvWRi2W-;x9#p`g1HWC zeHeA@r@&=RuIQXmUffOuark~vS$(}Z7mbfhqrqEQg@hlcUA3R}Qe!$~Uf`9@@wr%E zmuT%2{3y>h0)#1dg?5buK*Z7H)kJi+Yc;ZjwoYd^NACt;@X@uf4Bmy+r zc`yom=HR4Z8S_hXtPZ$JrkQM9Z{G$;eXi3YFK16DE?WCK2bnuQWR~^~KDX4%t+tin z^@5zX>-H?xFhuQbN-E9W_w;T8Iqa~pr?z{b@}UhrIUZFzyEutvl({#S1|mr5hjHNM zf@eU|Axr2QgoQc_?fjq30=TrvjmKGK39}JP?NuKvBMP%z@p(2Gf8}z@0!#`EQbkD; z6Xmn!8B;Ibhe-KBT~w0PLMB<|pbtS`Rr01z{(NpuFdJdaFhKDE;M=1mlzVYNqda0^ zm#)=Ie~XS$&E~qL=C&0wimC{b=90$LZz;N3k?(b%`3x$_@#GqaEcIpOkmOb)CF&=5 z0>U*y@Y`9KxJm;@$rD}CfX;A#z|Tz)8N9$V3%9?V%j`+01TO)Pzi-y@;m?PfzWM*D z=r%~i1Ygkbv(T~$NPp8~x0)-H(C;rA15YY4jL`#bu|fE~8$NyKp;;B1Wl@)UKvMvA zWr9b5)GkH>>BsM3){PusH2STKR-Eju@2qLAI1bHTH6ao}e)4N15r46!jZUuZTi}6!(s(1A6TP<5XD49cI7?PXhXUaXMT0Ck;H%s!Ie!)qc2e0y#9VXj0;eGxCGBaJGHE7QRG9}-yDz-C53aU z729=5*v2Zx?cOq3nt4;>dgLkQduuoVz6MhfCW!_Vna!CWCZt?c;oadW(|r;+3S7R> zD)s*{+PyNLPV_#{Jd_GPx$#mn!NWj=+;$!EN##xvs<^1`wYYNBC_0MVZMDxaxWACR zRUK&Bj^abd=u~6}v>0@#N(9_&ki4w714cI5`0l3MtI*Q4a^j;40|ofdswx8e8E4wY z@Adx{%Qa2zkhY3QfkHwnb%leN1REC?DT_IpkMt6w{I-ZE3^Bgbdd*Srh1reZI{q&? zIBud3BjGg$%jzo9tdC9^WwXO9l6k+{+KMG40ldIGbuov2@pDn5jWjGLk zqdmMa%XmPaDtOR1SUu_1c6FE?LOuC?FtEg8>dCMfnmqU8O=>BMLAXnFlA$rot3pW z#Quk)5J5gfHt`LC2&6$C5k~_L@b4%(!{sEvn)d<6tll|hUhk3OTT4&?-j$(3wason zLUHgjN$SKzPTO+fZspg6CWwn$vBN%MBwU(J@_T(3)eqwYCD8+$Sig6EM27)Sfg#AS z%oqRygwNq_a{05xHMFz{8b`e081F&{EShaIk%B>$cEj%lyoV%!8lnqOC&m8^<6-;E z{?YcyZ<82o!XFD*=GH6Yx5vLtR?Atb3E+GT1Z5{$f`kKQV`(@~IdcDf4wi+0B8>oC zfiC*{SyzJq4fcFH)T_HbO;p+oNvQXkY2%1rTw10sWk<#j&%^x;r`#6lHREj!M3eq< zQEe(uEB}n2iV)E?&by=faJylw=4)yT$Tl+((J|41S0Xx;o{&JQsQt4EN z2xXs63`8=sk-~ut)LxH4>)N2mC(DQWTG#xoG#X!<{nKAKREZD?3yEy;l^%8@>pI|; zq^y>V%^uc~c=hb$b&Ufz+6*J5R%@Os9~lvrqHtrtiTs&q92TC50G|gNGc=oyKV;L6 ze#h_dhg_S&rvNx}aob5x>}!Gn9;ntt4k{P2yElN|1jI_}R5@-U5*c70VgCzlt+!jO z2u{3UMvevTKPkivhj&gezcR^_0BK%7TZlaV8C+3sqBEIPs}dp9WNa%dU<5HulTia- zlw{hZaR4s>%4DVYzEl`Xlw1E^GqK*et-%JYPX%$SP1VPzZvbg@9pi_wNBTM11% zQF>2b_TEw!$wJK|X~OD{rG(wx0Syd_(6UN)C%gm{(!Ye_zv&x+I`#q{30nI+!$ny3 z@Fk85`pA*Gq9ONh&_eSnzVC8)5Wa;}Z3ak@a139x8t$m_sPQg?>;Y#`IEXRUuTY|2 zht4pf>V(xl^T`t8`rp45QdRtef(8XL%zXJ3^B0UfCwxqPm-2Krw|)091i1m~qBqek zKUKoZ>9~p!Gvx;HVPu8U8ZUI6;(WR7Nlry4XV60_hWh}#56d~|u!_!KVsgQG2^p@% zaUi;2`e7=#xjsoO(Qqf^z_l9U?C=fLwxfhNI3ck!zU*0RBpKR|CQe_)4xc}gSqlG< znqRUD%Es=a0$g=ue)}-}(p6ziin9X;>R(nH(>cg_{u{$iY-!6I+F{rG|q-G|50(Y~J%Tgt8{I2)lDb{emQ{*7} zn!f5k-F`+L?Oxm>q>woG_t1*S?-g_Jv*u;EJeK|lAZO;2IQX!Kq+kAQ$=LL}A8`_4 zIc6v-)WT=ZC_r$)Z|E0XVMfN6p)7o48Cw!KTL1y?T_T2bUyBxN0iEn{8qL!)i!>4W ziz3}`e06v-MCjg*LY&GV@Az_)EB~JM;m*89zGuc{r6@=mDwjFL@H-ROjnAVziFzw$ z60{h&8S)z#inXr_FYD%lVQmiU#jhKdpdu-?GN&t2dK0Z@2sa*m-@{Y;L5!saue9Ey zHKnUW8jzjO56CPTHI(7ts~72V7R`>Kcf6lqgG;GRbv}1Pf^y(Ncoz*YwA_ZYDW9Bx zB1U0r$LGBbtO!(5+ri;T><;hd((G`P)>&yn)ROA3s|8tk@}>$d5(TB=X6`Vf{IsoC z^PeDM=>NT%UzP`(E>Kuy z6Tq19EB=o*oxkY2Ww{KOw=hZ#koNlmQ7GQRZ3p;1ATZpqC~>|6%S&@=KrTgrTgGP0+4MjfdzjT zi;yfTKqWI~u4kaYoPpm3f+t54$b@w1hKaar@cmvL2 zj;Zg+#wDRgn@7GGO7uqO@^`!8KrK4~e~Sy&%rUvc$qylQNtFwN0MbJT?!%t~Fn9gS z&Ae&`-v<)E2NFS7+JBkFX_-F2uOMkhO26&Epz-^-XPH!ryi?O^3+2aK67b`e!5Ids?k+sSa!;p=6CME;hKM4`bjsAj|w^%(uV zkx&+cwc#$_E?tVqAs(bU@Je4!7z8^I6VPzqM!l)RjkqvPX0@XBh0p=PFLuCzJQnBik>#c(XW4?0y`ap4y>< z!-1WkIoF4GUhb9Qz;@|;fw%h`5?C%TzMEWb%4&_ z0oL1PeSL-Q?=BJ_AN_y-8ly=xx!If5eSUW3S$)Ihb!8w@w+F`Pv>{GnmzOAM$32j7 z8)Ji}Al$4zFH@KJ#eVayX(411oxviau!`aPFnu6sFNLlNc;uFozZs?ij7m0+=1Wye z!HlaOvUS^2xRSpP)(!E8l*Oc_rFDD!1>v#b7|}2@c zH1iv8xjHr|zCplQusv7Xn#nSJHWnnFOqlR)!;3;eQIYFkTz0eX?gqb!Z5^kEe{TCL zoh=vM>yJK+Z`0bj{Q>tke*A9N*ngCv^w=K^nr?)Z~_cASJc z)moVS0QYk$(_j;khv2ne{6UJE zx1$t9DO`<>!UafZCM3JXhFYpKlwjW@=2H;56%+)~|LWfiG?}N?serhJP^w zwD2LGwbufXzEueP?r8(>KY;TendnLQ;JV?Hl+Nmq(h_2EgJAq0f~aZBlV3uoOCg&` z@~^necsCsKxB#eyv7TQ_u;gW{M%*A&VEpdScSo~fQ)%lT@y)l%rOv0|q_Hm7Ui^jg zyq{5XrbXjV$=hD-AGjV>-^1YXz)|*kJ_4=Lx5&evZ2-^G8Z5nzqGyow=%0~rb@+2NedaL8r|>KM~+7qGDJ(8wbRu|+`7dA$-|2gBWjY{_ILwHIu`kdi)E8U8ygV+DxSbmzv8^wjd7l6uI z8r**2gn&Nw?fkjgWkve@oNbm+CW5J#Aj}*eg1y8*5_X_^DfLPIMY&I|ci#HtVe2Ks z@6%2%+=soS;?qZ2Ck$BL7K*&Qrku0~{Q~t<{xYz9pk<~<$C-*)SH5QM01|~ptpQ}Gewmm@8N5#4K23r** z_lvfbX1uS&`m)(x_21az6a)6$iIZeT_7aA0bo{ei_FjD!jxLxP=+I_^u|bP&UaJ0o zf2UK$VY;R#lYjg_Eg8bv?+bEx=}y!&^vKOBMf}diXqlDV!_7c_BOs9kPH)k0mzWA1 zyG9_J_L|vR0<^E%2j~%>BO;Tmeb?$`M*sPVdT#$so{T+EVwb%y*nM1#`lmZ}UOsmg zgn@v;68g7gOx8ehQcRJX8OcAMKU&XRapI?lEYT zq@d_23WXBBb{)nps?WOVf5tfA@G00lrrrS^q1Acw@3v_2fEzV!`$UrTnCu@htZY1d zI=uXz!eGJP_Ou@>wb6|gIL0jgl+F6J+4Oa~t; z{=c1%U~Iy&wyhn`-Ral=Uwc>n)zr0xxiKh+@R+p%GASZRunNi~xyTSD0uiDV8EuuZ zfMFg21Sp^=U>*v{loSxcs4^5y7;G&D5D7FyEJG+rKmr(pSP3eeT}poV_&?aXRP z9Vr#sV%*6fTgdjn!=nUlQUE6S#z!4WS>3cE`geihfqPvZv8G7qrY$n9M)LAvBZX-3 zuj2_~!~3X}ZeZKM+as2>D9A3q$}LRz2~vV`AVf_8BX{?vk8R7M$vn>eJ+3P~Ks9>a z5jr*Vxm6dWxG^nbTikLRZ3QA|ptCWYSr)|xu-70@rCs_wbP<^}>b;;}u^kkJpV3pi zPMi~tm^aw=zblRcu%xpIPlWYr7=6})LkFkd#PTT`KRv_zF9EZ?WQ%}1O3fx;>i zy%f1d>>y9|I*u-1hY54o+gE8vmz2hMoUlk%0~Gz-%ERT2237sps|u8&hWZEEkg*P# zwD^zc^Lw?=#ho&XAD+xZH7FQhG+ES`lli;Nc7aRJRq>kh^`f@4_JDZknofDn-B)Fu zhRf7b*$jLd7s?-sDO|w6kI*564a@ksg+)t-Rl{w0?3uzLC@)Eu3%y?ol zow=7T1$}>_us}UaT2nu|p&7Bu$|F$4wH#q^UbaHxKz(riEex(IMczvM+pLu29~GM} ziju*@KN%^b6^w1ns&R@{ZS>+f|5qlbHsTo%<0od*@A><(!`ZWEU6HYjH8!+{KZ*O{ zwPWaonc)al>%o;+j!EyY_ti}cE8|9SRDDCTj$yt?(Mt&<@;I>>y7zPMptp<^MGR$q z(S_^^3p~kuO^jUn)D^KZTr&P!{KwqcKZ@Mh#eJGIp)ssx{`Yz{pUT}sjN~D6%gA?k zMI%s3tqeF;P}qQCl&jD#Mv=cqi1f(9Kb*nE=3PonnRX8wL8Lgg6mN5LYb=Obxo>Rp zj7=Z?3mExK!jr%5wT}|Ahn~xRMTShx$tO`{oyP(Va{r^`T4^5GZdRNg)etTfx{T)N zYm38&UKVb?j26dEEBV&ZB_$}NUI_{t-+={M&g{W9g;rSbxf=l=JONgbtAl!R3qc-} zaPymuX+`*b0=GvhIwdzz7NcH~{P>^@<%TKw?PxMLU#fa|Mw1N3KK5)9gmu8|!L`>d z9^ykJp5CH2qwLD8wLKoo74P+A_+(nPrC6p2-=ZxBcdXYs?8%@q# zSr!AU;h>+qdnu(0unhN$QVD!_dr`sg!u`ZZbLmC?8|&6jA>-5sGO8x`EFn9%`R3$r z%?V%DoAH~=zKo!;K{z&ObsYHwf*E}$eO9budiYXd@0iLuUi#fS2@M>EP? zI!lUzZ~AeZ8aW45zWm|WWr zF8r{NCYQLy45QTy5f2=HhSLrn{l%cfEHZGx0@_!|D~+9bxVk>C1}HU5O9MtpXrKIPh>NQ<*2-70Y>9hOc+k$qpuV1@YhC3OWCQM|x$ zx&;4=xA4u@>KxOh?PMJ9b$CVdT6gQ>>5#GS)PzuV?|}KY^~aE{Tsl!3Rg-f7N~C73 zU!_aFdM$K@3=5or5BVItn7S)9V6fPBE^X7WB7c8dG5gDW{M>wzx6>Eq%!(l*v~AU{ z*RXE2zzqhgDIxUI-zdj%$ZQnnOs(Fk?Czzw$|SyzCxl+3w)*f>|ZM%N26yD7Yxq| zoUbn5IWqU>bH){t$;4_#)#>mqQ+opqa-kH(tk9QHTCyD4xOrw+)gd)C713>}U=s7m zr{#S!q_IcOB(QK)Oe=wMK~nc&1V8amhuXb)dd#l-HZ$n_pu zxzhl7Em()Rt?U~z8FA5%s!RI##@6~*>I&AiY}#&F@J@3)E4Mn3vBR1?Gmgk=Nn;?L zKnS#M|M`cH@1ANW2p==dsh+D-W&5F$Wuwe!BtAbKmCo!I5F-TZYet23OqR%_zD$qK z`tZVkSi3fh&`28^=o<0M=;2)sUz+O5E{!);T)uOiH%@c4wN`Up%b73eM)v3MuUrvC z5^=03kh3|vIX!%m6Vq$%cnCfMsdn&VFh>n3I=B8|VgfI6pvH?rAm~xxMszhDVOQlY zIZf!r5lQ)*6TGqKE?ro5b#KxviMM(>%pJI#!G!ijYW#c6Ly6Zu$ZHMUCJ?wbj15QK zf%@)D8C~dD@vlT>iniXK%QDrfuF*WUn$$g2t=uePB}`8=LSz{8PIA8M74@~wwQ01G z9uKigiU{2Cmif6;BLSyX{Rj_=Wt;JovFBQdo6yfPAK!-$LWrIvzE0+MI{1}# zWPmQvWIq-_f7tkMv^=1OaMU1FW~SF z4Edi<{_`dOZ>MXkd|;25m>B7TjTQEPRX>wOfc=-wgb<+Y4MbJ!f~})X!#SUn{{SMX BWorNc literal 0 HcmV?d00001 diff --git a/test/image/mocks/parcats_colorbar.json b/test/image/mocks/parcats_colorbar.json deleted file mode 100644 index b0f06f39bfe..00000000000 --- a/test/image/mocks/parcats_colorbar.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "data": [ - {"type": "parcats", - "domain": {"x": [0.125, 0.625],"y": [0.25, 0.75]}, - "dimensions":[ - {"label": "One", "values": [1, 1, 2, 1, 2, 1, 1, 2, 1, 2, 3, 1, 2, 3, 1, 2, 1, 2, 1, 1]}, - {"label": "Two", "values": ["A", "B", "A", "B", "C", "C", "A", "B", "C", "B", "C", "B", "C", "B", "C", "B", "C", "B", "A", "A"]}, - {"label": "Three", "values": [11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11]}], - "bundlecolors": true, - "line": { - "color": [0, 0, 1, 1, 0, 1, 0, 0, 0, 2, 2, 2, 2, 1, 2, 1, 0, 2, 1, 2], - "shape": "linear", - "showscale": true, - "colorscale": "Viridis" - } - } - ], - "layout": { - "height": 602, - "width": 592, - "margin": { - "l": 40, "r": 40, "t": 50, "b": 40 - }} -} diff --git a/test/image/mocks/parcats_fonts.json b/test/image/mocks/parcats_fonts.json deleted file mode 100644 index a7f7de9a522..00000000000 --- a/test/image/mocks/parcats_fonts.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "data": [ - {"type": "parcats", - "domain": {"x": [0.125, 0.625],"y": [0.25, 0.75]}, - "dimensions":[ - {"label": "One", "values": [1, 1, 2, 1, 2, 1, 1, 2, 1]}, - {"label": "Two", "values": ["A", "B", "A", "B", "C", "C", "A", "B", "C"]}, - {"label": "Three", "values": [11, 11, 11, 11, 11, 11, 11, 11, 11]}], - "labelfont": {"family": "Rockwell", "size": 20, "color": "gray"}, - "tickfont": {"family": "Arial", "size": 10, "color": "firebrick"} - } - ], - "layout": { - "height": 602, - "width": 592, - "margin": { - "l": 40, "r": 40, "t": 50, "b": 40 - }} -} diff --git a/test/image/mocks/parcats_grid_subplots.json b/test/image/mocks/parcats_grid_subplots.json new file mode 100644 index 00000000000..e53e0345e1a --- /dev/null +++ b/test/image/mocks/parcats_grid_subplots.json @@ -0,0 +1,55 @@ +{ + "data": [ + {"type": "parcats", + "domain": {"row": 0, "column": 0}, + "dimensions":[ + {"label": "One", "values": [1, 1, 2, 1, 2, 1, 1, 2, 1, 2, 3, 1, 2, 3, 1, 2, 1, 2, 1, 1]}, + {"label": "Two", "values": ["A", "B", "A", "B", "C", "C", "A", "B", "C", "B", "C", "B", "C", "B", "C", "B", "C", "B", "A", "A"]}, + {"label": "Three", "values": [11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11]}], + "bundlecolors": true, + "line": { + "color": [0, 0, 1, 1, 0, 1, 0, 0, 0, 2, 2, 2, 2, 1, 2, 1, 0, 2, 1, 2], + "shape": "linear", + "showscale": true, + "colorscale": "Viridis" + } + }, + {"type": "parcats", + "domain": {"row": 0, "column": 1}, + "dimensions":[ + {"label": "One", "values": [1, 1, 2, 1, 2, 1, 1, 2, 1]}, + {"label": "Two", "values": ["A", "B", "A", "B", "C", "C", "A", "B", "C"]}, + {"label": "Three", "values": [11, 11, 11, 11, 11, 11, 11, 11, 11]}], + "labelfont": {"family": "Rockwell", "size": 20, "color": "gray"}, + "tickfont": {"family": "Arial", "size": 10, "color": "firebrick"} + }, + {"type": "parcats", + "domain": {"row": 1, "column": 0}, + "tickfont": {"color": "black"}, + "dimensions":[ + {"label": "One", "values": [1, 1, 2, 1, 2, 1, 1, 2, 1]}, + {"label": "Two", + "values": ["A", "B", "A", "B", "C", "C", "A", "B", "C"], + "categoryarray": ["A", "B", "C"], + "ticktext": ["$A^2$", "Bold
and
Italic", "
Link"] + }, + {"label": "Three", "values": [11, 11, 11, 11, 11, 11, 11, 11, 11]}] + }, + {"type": "parcats", + "domain": {"row": 1, "column": 1}, + "dimensions":[ + {"label": "One", "values": [1, 1, 2, 1, 2, 1, 1, 2, 1]}, + {"label": "Two", "values": ["A", "B", "A", "B", "C", "C", "A", "B", "C"]}, + {"label": "Three", "values": [11, 11, 11, 11, 11, 11, 11, 11, 11]}], + "bundlecolors": false, + "line": { + "color": [0, 0, 1, 1, 0, 1, 0, 0, 0], + "shape": "hspline" + } + } + ], + "layout": { + "height": 602, + "width": 592, + "grid": {"rows": 2, "columns": 2}} +} From 99f9a4798e6263fefe43474fb8a0ae0533486642 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Fri, 28 Sep 2018 18:42:08 -0400 Subject: [PATCH 50/50] Use layout.colorway[0] as the default color for parcats traces --- src/traces/parcats/defaults.js | 2 +- .../image/baselines/parcats_grid_subplots.png | Bin 90460 -> 90759 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/src/traces/parcats/defaults.js b/src/traces/parcats/defaults.js index 87986b84404..47537f1519e 100644 --- a/src/traces/parcats/defaults.js +++ b/src/traces/parcats/defaults.js @@ -20,7 +20,7 @@ var mergeLength = require('../parcoords/merge_length'); function handleLineDefaults(traceIn, traceOut, defaultColor, layout, coerce) { coerce('line.shape'); - var lineColor = coerce('line.color', defaultColor); + var lineColor = coerce('line.color', layout.colorway[0]); if(hasColorscale(traceIn, 'line') && Lib.isArrayOrTypedArray(lineColor)) { if(lineColor.length) { coerce('line.colorscale'); diff --git a/test/image/baselines/parcats_grid_subplots.png b/test/image/baselines/parcats_grid_subplots.png index 46bc6dd7b980ca7195a7ea995a2efc2ad867d8b5..6b3ce202c17d602fbad232112d664159e9d6277a 100644 GIT binary patch literal 90759 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 literal 90460 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

?pCw%PEIhWhd&a>axg4QC{PE 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 BWorNc