ui-widget-toolkit
Version:
UI widgets built on top of D3, Pixi.js and ag-grid-community
94 lines (92 loc) • 3.42 kB
HTML
<dom-module id='uwt-chiclet-heatmap'>
<template>
<style>
.chiclet {
height: 50px;
margin: 5px;
border-radius: 15px;
float: left;
}
.chiclet-text {
width: 50px;
text-align: center;
overflow: hidden;
text-overflow: ellipsis;
}
</style>
<div class='chart-title'>{{title}}</div>
<template is='dom-repeat' items='{{chicletWrappers}}' as='chiclet'>
<div id='chiclet{{chiclet.name}}' title='{{chiclet.name}}: {{chiclet.value}}'
style='display: table; background: {{chiclet.color}};' class='chiclet'>
<div style='display: table-cell; vertical-align: middle;'>
<div class='chiclet-text'>{{chiclet.name}}</div>
</div>
</div>
</template>
</template>
<script>
class ChicletHeatmap extends Polymer.Element {
static get is() { return 'uwt-chiclet-heatmap'; }
static get properties() {
return {
title: {
type: String
},
chicletDefs: {
type: Array,
observer: '_onDataChanged'
},
chicletWrappers: {
type: Array
},
maxValue: {
type: Number,
value: 100
},
minValue: {
type: Number,
value: 0
}
}
}
_computeColor(value, percentScalar) {
let scalar = (value - this.minValue) * percentScalar;
if (scalar < .1) {
return '#1976d2';
} else if (scalar < .2) {
return '#2196f3';
} else if (scalar < .3) {
return '#64b5f6';
} else if (scalar < .4) {
return '#2196f3';
} else if (scalar < .5) {
return '#bbdefb';
} else if (scalar < .6) {
return '#ffebee';
} else if (scalar < .7) {
return '#ef9a9a';
} else if (scalar < .8) {
return '#ef5350';
} else if (scalar < .9) {
return '#e53935';
} else {
return '#c62828';
}
}
_onDataChanged() {
if (this.chicletDefs) {
// cache this just for performance reasons
let percentScalar = 1 / (this.maxValue - this.minValue);
let wrappers = [];
for (let i = 0; i < this.chicletDefs.length; ++i) {
let chiclet = this.chicletDefs[i];
chiclet.color = this._computeColor(chiclet.value, percentScalar);
wrappers.push(chiclet);
}
this.chicletWrappers = wrappers;
}
}
}
customElements.define(ChicletHeatmap.is, ChicletHeatmap);
</script>
</dom-module>