<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>ZingGrid Demo</title> <script nonce="undefined" src="https://cdn.zinggrid.com/zinggrid.min.js"></script> <style> .zg-body { padding: 15px; position: relative; } .grid--tooltip { /* make sure bottom grid is not interactive */ visibility: hidden; pointer-events: none; opacity: 0; position: absolute; top: 0; left: 0; transition: all 0.35s linear; height: 300px; width: 400px; } .grid--tooltip.active { visibility: visible; pointer-events: initial; opacity: 1; } /* we force row mode, but hide the layout controls */ #childGrid zg-layout { display: none; } zing-grid[loading] { height: 355px; } </style> </head> <body class="zg-body"> <zing-grid id="mainGrid" class="active" caption="Fortune 500 Companies Drilldown (hover row for quarterly sales)"> <zg-data data='[ { "company": "Walmart", "stockPrice": 84.54, "quarterlySales": [123.18, 136.27, null, null], "priceSuffix": "Billions" }, { "company": "Berkshire Hathaway", "stockPrice": 298300, "quarterlySales": [133.18, 136.27, null, null], "priceSuffix": "Billions" }, { "company": "Apple", "stockPrice": 184.22, "quarterlySales": [153.68, 116.62, null, null], "priceSuffix": "Billions" }, { "company": "Exxon Mobil", "stockPrice": 84.54, "quarterlySales": [123.18, 136.27, null, null], "priceSuffix": "Billions" } ]'></zg-data> <zg-colgroup> <zg-column index="company"></zg-column> <zg-column index="stockPrice" type="currency"></zg-column> </zg-colgroup> </zing-grid> <div class="grid--tooltip"> <zing-grid caption="Default Text" layout="row" id="childGrid"> <zg-colgroup> <zg-column index="q1"></zg-column> <zg-column index="q2"></zg-column> <zg-column index="q3"></zg-column> <zg-column index="q4"></zg-column> </zg-colgroup> </zing-grid> </div> <script> ZingGrid.setLicense(['26ccbfec16b8be9ee98c7d57bee6e498']); // 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 // references to grids const mainGrid = document.querySelector('#mainGrid'); const childGrid = document.querySelector('#childGrid'); const tooltipContainer = document.querySelector('.grid--tooltip'); const TOOLTIP_OFFSET = 15; // add event listener for row events mainGrid.addEventListener('row:mouseleave', function(e) { console.log('--- fire row:mouseout ---'); tooltipContainer.classList.remove('active'); }); mainGrid.addEventListener('row:mouseover', function(e) { tooltipContainer.classList.add('active'); console.log(e) // if we are on the right half of the screen // set the tooltip to display to the left of the cursor // set tooltip placement tooltipContainer.style.top = `${e.detail.ZGEvent.xy[1] - TOOLTIP_OFFSET}px`; tooltipContainer.style.left = `${e.detail.ZGEvent.xy[0] + TOOLTIP_OFFSET}px`; //set tooltips position // cancel if its a header click if (e.detail.ZGData.isHeader) { return; } const zgData = e.detail.ZGData.data; // set up datastructure for childGrid const childData = [{ q1: zgData.quarterlySales[0], q2: zgData.quarterlySales[1], q3: zgData.quarterlySales[2] || 'N/A', q4: zgData.quarterlySales[3] || 'N/A' }]; // set caption childGrid.setCaption(`${zgData.company} 2018 Sales in ${zgData.priceSuffix}`); // set data for childGrid childGrid.setData(childData); }); }); </script> </body> </html>
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>ZingGrid Demo</title> <script src="https://cdn.zinggrid.com/zinggrid.min.js"></script> </head> <body class="zg-body"> <zing-grid id="mainGrid" class="active" caption="Fortune 500 Companies Drilldown (hover row for quarterly sales)"> <zg-data data='[ { "company": "Walmart", "stockPrice": 84.54, "quarterlySales": [123.18, 136.27, null, null], "priceSuffix": "Billions" }, { "company": "Berkshire Hathaway", "stockPrice": 298300, "quarterlySales": [133.18, 136.27, null, null], "priceSuffix": "Billions" }, { "company": "Apple", "stockPrice": 184.22, "quarterlySales": [153.68, 116.62, null, null], "priceSuffix": "Billions" }, { "company": "Exxon Mobil", "stockPrice": 84.54, "quarterlySales": [123.18, 136.27, null, null], "priceSuffix": "Billions" } ]'></zg-data> <zg-colgroup> <zg-column index="company"></zg-column> <zg-column index="stockPrice" type="currency"></zg-column> </zg-colgroup> </zing-grid> <div class="grid--tooltip"> <zing-grid caption="Default Text" layout="row" id="childGrid"> <zg-colgroup> <zg-column index="q1"></zg-column> <zg-column index="q2"></zg-column> <zg-column index="q3"></zg-column> <zg-column index="q4"></zg-column> </zg-colgroup> </zing-grid> </div> </body> </html>
.zg-body { padding: 15px; position: relative; } .grid--tooltip { /* make sure bottom grid is not interactive */ visibility: hidden; pointer-events: none; opacity: 0; position: absolute; top: 0; left: 0; transition: all 0.35s linear; height: 300px; width: 400px; } .grid--tooltip.active { visibility: visible; pointer-events: initial; opacity: 1; } /* we force row mode, but hide the layout controls */ #childGrid zg-layout { display: none; }
// 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 // references to grids const mainGrid = document.querySelector('#mainGrid'); const childGrid = document.querySelector('#childGrid'); const tooltipContainer = document.querySelector('.grid--tooltip'); const TOOLTIP_OFFSET = 15; // add event listener for row events mainGrid.addEventListener('row:mouseleave', function(e) { console.log('--- fire row:mouseout ---'); tooltipContainer.classList.remove('active'); }); mainGrid.addEventListener('row:mouseover', function(e) { tooltipContainer.classList.add('active'); console.log(e) // if we are on the right half of the screen // set the tooltip to display to the left of the cursor // set tooltip placement tooltipContainer.style.top = `${e.detail.ZGEvent.xy[1] - TOOLTIP_OFFSET}px`; tooltipContainer.style.left = `${e.detail.ZGEvent.xy[0] + TOOLTIP_OFFSET}px`; //set tooltips position // cancel if its a header click if (e.detail.ZGData.isHeader) { return; } const zgData = e.detail.ZGData.data; // set up datastructure for childGrid const childData = [{ q1: zgData.quarterlySales[0], q2: zgData.quarterlySales[1], q3: zgData.quarterlySales[2] || 'N/A', q4: zgData.quarterlySales[3] || 'N/A' }]; // set caption childGrid.setCaption(`${zgData.company} 2018 Sales in ${zgData.priceSuffix}`); // set data for childGrid childGrid.setData(childData); }); });