UNPKG

@domoinc/multi-metric-comparison-bar-chart

Version:

MultiMetricComparisonBarChart - Domo Widget

122 lines (108 loc) 5.46 kB
/*---------------------------------------------------------------------------------- ---------------------------------------------------------------------------------- // MultiMetricComparisonBarChart: © 2011 - 2015 DOMO, INC. ---------------------------------------------------------------------------------- ----------------------------------------------------------------------------------*/ d3.chart('BaseWidget').extend('MultiMetricComparisonBarChart', { //********************************************************************************** // Initialization //********************************************************************************** initialize: function () { 'use strict'; var _Chart = this; //---------------------------------------------------------------------------------- // Config helper functions //---------------------------------------------------------------------------------- function getMinWidthHeight() { return d3.min([_Chart.c('width'), _Chart.c('height')]); } //---------------------------------------------------------------------------------- // Config //---------------------------------------------------------------------------------- _Chart._newConfig = { chartName: { description: 'Name of chart for reporting', type: 'string', value: 'MultiMetricComparisonBarChart' } }; _Chart.mergeConfig(_Chart._newConfig); //---------------------------------------------------------------------------------- // Data Definition //---------------------------------------------------------------------------------- _Chart._newDataDefinition = { 'Label': { type: 'string', validate: function (d) { return this.accessor(d) || this.accessor(d) === 0; }, accessor: function (line) { return line[0]; } }, 'Value': { type: 'number', validate: function (d) { return (this.accessor(d) || this.accessor(d) === 0) && this.accessor(d) >= 0; }, accessor: function (line) { return parseFloat(line[1]); } }, 'Date': { type: 'date', validate: function (d) { return new Date(this.accessor(d)) !== 'Invalid Date';}, accessor: function (line) { return line[2]; } } }; _Chart.mergeDataDefinition(_Chart._newDataDefinition); //---------------------------------------------------------------------------------- // Local variables //---------------------------------------------------------------------------------- //---------------------------------------------------------------------------------- // Triggers and event listeners //---------------------------------------------------------------------------------- //********************************************************************************** // d3.Chart Transform //********************************************************************************** var superTransform = _Chart.transform; _Chart.transform = function (data) { var validData = superTransform(data); return validData; }; //---------------------------------------------------------------------------------- // Layers: //---------------------------------------------------------------------------------- //********************************************************************************** //********************************************************************************** _Chart.layer('layer', _Chart._layerGroup, { //********************************************************************************** //********************************************************************************** dataBind: function (validData) { return this.selectAll('.selection').data(validData); }, //********************************************************************************** //********************************************************************************** insert: function () { return this; } }) //********************************************************************************** //********************************************************************************** .on('enter', function () { return this; }) //********************************************************************************** //********************************************************************************** .on('merge', function () { return this; }) //********************************************************************************** //********************************************************************************** .on('exit', function () { return this.remove(); }); //---------------------------------------------------------------------------------- // Event functions //---------------------------------------------------------------------------------- //---------------------------------------------------------------------------------- // Helper functions //---------------------------------------------------------------------------------- //---------------------------------------------------------------------------------- // Public functions: getters and setters //---------------------------------------------------------------------------------- } });