<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>ZingGrid: Simple Grid</title>
<script nonce="undefined" src="https://cdn.zinggrid.com/zinggrid.min.js"></script>
<style>
.increased {
color: #66bb6a;
}
.increased::before {
content: '↑';
}
.decreased {
color: #ef5350;
}
.decreased::before {
content: '↓';
}
.highlight {
background: #fff59d;
}
zing-grid[loading] {
height: 373px;
}
</style>
</head>
<body>
<zing-grid caption="Cell Formatting">
<zg-data data='[
{
"open": "114.1900",
"high": "114.4950",
"low": "113.6800",
"close": "114.2750",
"volume": "7120112"
}, {
"open": "113.0300",
"high": "114.9000",
"low": "112.2175",
"close": "114.6700",
"volume": "27334460"
}, {
"open": "113.0500",
"high": "113.3200",
"low": "111.0350",
"close": "111.7000",
"volume": "21728429"
}, {
"open": "112.1900",
"high": "113.6950",
"low": "111.7200",
"close": "113.2100",
"volume": "22170934"
}, {
"open": "113.6900",
"high": "113.7000",
"low": "111.8600",
"close": "112.1400",
"volume": "20736516"
}
]'></zg-data>
<zg-colgroup>
<zg-column index="open" type="currency" cell-class="_renderStocks"></zg-column>
<zg-column index="high" type="currency" cell-class="_highlightHigh"></zg-column>
<zg-column index="low" type="currency" cell-class="_highlightLow"></zg-column>
<zg-column index="close" type="currency"></zg-column>
<zg-column index="volume"></zg-column>
</zg-colgroup>
</zing-grid>
<script>
ZingGrid.setLicense(['26ccbfec16b8be9ee98c7d57bee6e498']); // global vars for highlight min/max values
var gHigh = -1;
var gLow = Number.MAX_SAFE_INTEGER;
// determine if we should render positive/negative
// cell styling based on opening stock price vs when it last
// closed
function _renderStocks(open, cellDOMRef, cellRef) {
console.log(`open value: ${open} - record info ${JSON.stringify(cellRef.record)}`);
// if open is higher than close value
if (open > cellRef.record.close) return 'stock-open increased';
return 'stock-open decreased';
}
// highlight cell with highest value in high column
function _highlightHigh(high, cellDOMRef, cellRef) {
if (high == Number(gHigh)) return 'highlight';
}
// highlight cell with lowest value in low column
function _highlightLow(low, cellDOMRef, cellRef) {
if (low == Number(gLow)) return 'highlight';
}
// window:load event for Javascript to run after HTML
// because this Javascript is injected into the document head
window.addEventListener('load', () => {
// Javascript code to execute after DOM content
// save reference to the grid
const zgRef = document.querySelector('zing-grid');
// interval mimics real time data updates
setInterval(() => {
// regenerate the same starting dataset everytime to
// produce better visual results
let realTimeData = [{
open: 114.1900,
high: 114.4950,
low: 113.6800,
close: 114.2750,
volume: 7120112
}, {
open: 113.0300,
high: 114.9000,
low: 112.2175,
close: 114.6700,
volume: 27334460
}, {
open: 113.0500,
high: 113.3200,
low: 111.0350,
close: 111.7000,
volume: 21728429
}, {
open: 112.1900,
high: 113.6950,
low: 111.7200,
close: 113.2100,
volume: 22170934
}, {
open: 113.6900,
high: 113.7000,
low: 111.8600,
close: 112.1400,
volume: 20736516
}];
// reset global vars for highlighint min/max cells
gHigh = -1;
gLow = Number.MAX_SAFE_INTEGER;
// update data to mimic realtime updates
realTimeData.map(values => {
// randomly choose to. inc/dec values to
// simulate stock exchanges
if (Math.round(Math.random())) {
values.open = (values.open - 1);
values.high = (values.high - 1);
values.low = (values.low - 1);
values.close = (values.close + 1);
values.volume = (values.volume - 100);
} else {
values.open = (values.open + Math.floor(Math.random() * 5));
values.high = (values.high + 1);
values.low = (values.low + 1);
values.close = (values.close - 1);
values.volume = (values.volume + 100);
}
// set new global high/low values
if (values.high >= gHigh) gHigh = values.high;
if (values.low <= gLow) gLow = values.low;
return values;
});
// assign data to grid
if (zgRef) zgRef.setData(realTimeData);
}, 1000);
});
</script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>ZingGrid: Simple Grid</title>
<script src="https://cdn.zinggrid.com/zinggrid.min.js"></script>
</head>
<body>
<zing-grid caption="Cell Formatting">
<zg-data data='[
{
"open": "114.1900",
"high": "114.4950",
"low": "113.6800",
"close": "114.2750",
"volume": "7120112"
}, {
"open": "113.0300",
"high": "114.9000",
"low": "112.2175",
"close": "114.6700",
"volume": "27334460"
}, {
"open": "113.0500",
"high": "113.3200",
"low": "111.0350",
"close": "111.7000",
"volume": "21728429"
}, {
"open": "112.1900",
"high": "113.6950",
"low": "111.7200",
"close": "113.2100",
"volume": "22170934"
}, {
"open": "113.6900",
"high": "113.7000",
"low": "111.8600",
"close": "112.1400",
"volume": "20736516"
}
]'></zg-data>
<zg-colgroup>
<zg-column index="open" type="currency" cell-class="_renderStocks"></zg-column>
<zg-column index="high" type="currency" cell-class="_highlightHigh"></zg-column>
<zg-column index="low" type="currency" cell-class="_highlightLow"></zg-column>
<zg-column index="close" type="currency"></zg-column>
<zg-column index="volume"></zg-column>
</zg-colgroup>
</zing-grid>
</body>
</html>
.increased {
color: #66bb6a;
}
.increased::before {
content: '↑';
}
.decreased {
color: #ef5350;
}
.decreased::before {
content: '↓';
}
.highlight {
background: #fff59d;
}
// global vars for highlight min/max values
var gHigh = -1;
var gLow = Number.MAX_SAFE_INTEGER;
// determine if we should render positive/negative
// cell styling based on opening stock price vs when it last
// closed
function _renderStocks(open, cellDOMRef, cellRef) {
console.log(`open value: ${open} - record info ${JSON.stringify(cellRef.record)}`);
// if open is higher than close value
if (open > cellRef.record.close) return 'stock-open increased';
return 'stock-open decreased';
}
// highlight cell with highest value in high column
function _highlightHigh(high, cellDOMRef, cellRef) {
if (high == Number(gHigh)) return 'highlight';
}
// highlight cell with lowest value in low column
function _highlightLow(low, cellDOMRef, cellRef) {
if (low == Number(gLow)) return 'highlight';
}
// window:load event for Javascript to run after HTML
// because this Javascript is injected into the document head
window.addEventListener('load', () => {
// Javascript code to execute after DOM content
// save reference to the grid
const zgRef = document.querySelector('zing-grid');
// interval mimics real time data updates
setInterval(() => {
// regenerate the same starting dataset everytime to
// produce better visual results
let realTimeData = [{
open: 114.1900,
high: 114.4950,
low: 113.6800,
close: 114.2750,
volume: 7120112
}, {
open: 113.0300,
high: 114.9000,
low: 112.2175,
close: 114.6700,
volume: 27334460
}, {
open: 113.0500,
high: 113.3200,
low: 111.0350,
close: 111.7000,
volume: 21728429
}, {
open: 112.1900,
high: 113.6950,
low: 111.7200,
close: 113.2100,
volume: 22170934
}, {
open: 113.6900,
high: 113.7000,
low: 111.8600,
close: 112.1400,
volume: 20736516
}];
// reset global vars for highlighint min/max cells
gHigh = -1;
gLow = Number.MAX_SAFE_INTEGER;
// update data to mimic realtime updates
realTimeData.map(values => {
// randomly choose to. inc/dec values to
// simulate stock exchanges
if (Math.round(Math.random())) {
values.open = (values.open - 1);
values.high = (values.high - 1);
values.low = (values.low - 1);
values.close = (values.close + 1);
values.volume = (values.volume - 100);
} else {
values.open = (values.open + Math.floor(Math.random() * 5));
values.high = (values.high + 1);
values.low = (values.low + 1);
values.close = (values.close - 1);
values.volume = (values.volume + 100);
}
// set new global high/low values
if (values.high >= gHigh) gHigh = values.high;
if (values.low <= gLow) gLow = values.low;
return values;
});
// assign data to grid
if (zgRef) zgRef.setData(realTimeData);
}, 1000);
});