@domoinc/multi-metric-comparison-bar-chart
Version:
MultiMetricComparisonBarChart - Domo Widget
122 lines (108 loc) • 5.46 kB
JavaScript
/*----------------------------------------------------------------------------------
----------------------------------------------------------------------------------
// 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
//----------------------------------------------------------------------------------
}
});